mtrl 0.5.2 → 0.5.4

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 (80) hide show
  1. package/dist/components/checkbox/api.d.ts +1 -1
  2. package/dist/components/checkbox/types.d.ts +17 -6
  3. package/dist/components/chips/api.d.ts +5 -2
  4. package/dist/components/chips/chip/api.d.ts +1 -1
  5. package/dist/components/chips/config.d.ts +5 -1
  6. package/dist/components/chips/types.d.ts +14 -3
  7. package/dist/components/index.d.ts +1 -0
  8. package/dist/components/select/types.d.ts +21 -3
  9. package/dist/components/switch/types.d.ts +8 -4
  10. package/dist/index.cjs +14 -14
  11. package/dist/index.cjs.map +13 -13
  12. package/dist/index.js +14 -14
  13. package/dist/index.js.map +13 -13
  14. package/dist/package.json +1 -1
  15. package/dist/styles.css +2 -2
  16. package/package.json +4 -2
  17. package/src/styles/abstract/_base.scss +2 -0
  18. package/src/styles/abstract/_config.scss +28 -0
  19. package/src/styles/abstract/_functions.scss +124 -0
  20. package/src/styles/abstract/_mixins.scss +401 -0
  21. package/src/styles/abstract/_theme.scss +269 -0
  22. package/src/styles/abstract/_variables.scss +338 -0
  23. package/src/styles/base/_reset.scss +86 -0
  24. package/src/styles/base/_typography.scss +155 -0
  25. package/src/styles/components/_badge.scss +183 -0
  26. package/src/styles/components/_bottom-app-bar.scss +103 -0
  27. package/src/styles/components/_button.scss +756 -0
  28. package/src/styles/components/_card.scss +401 -0
  29. package/src/styles/components/_carousel.scss +645 -0
  30. package/src/styles/components/_checkbox.scss +231 -0
  31. package/src/styles/components/_chips.scss +643 -0
  32. package/src/styles/components/_datepicker.scss +358 -0
  33. package/src/styles/components/_dialog.scss +259 -0
  34. package/src/styles/components/_divider.scss +57 -0
  35. package/src/styles/components/_extended-fab.scss +309 -0
  36. package/src/styles/components/_fab.scss +244 -0
  37. package/src/styles/components/_list.scss +774 -0
  38. package/src/styles/components/_menu.scss +245 -0
  39. package/src/styles/components/_navigation-mobile.scss +244 -0
  40. package/src/styles/components/_navigation-system.scss +151 -0
  41. package/src/styles/components/_navigation.scss +407 -0
  42. package/src/styles/components/_progress.scss +101 -0
  43. package/src/styles/components/_radios.scss +187 -0
  44. package/src/styles/components/_search.scss +306 -0
  45. package/src/styles/components/_segmented-button.scss +227 -0
  46. package/src/styles/components/_select.scss +274 -0
  47. package/src/styles/components/_sheet.scss +236 -0
  48. package/src/styles/components/_slider.scss +264 -0
  49. package/src/styles/components/_snackbar.scss +211 -0
  50. package/src/styles/components/_switch.scss +305 -0
  51. package/src/styles/components/_tabs.scss +421 -0
  52. package/src/styles/components/_textfield.scss +1035 -0
  53. package/src/styles/components/_timepicker.scss +451 -0
  54. package/src/styles/components/_tooltip.scss +241 -0
  55. package/src/styles/components/_top-app-bar.scss +225 -0
  56. package/src/styles/main.scss +129 -0
  57. package/src/styles/themes/_autumn.scss +105 -0
  58. package/src/styles/themes/_base-theme.scss +85 -0
  59. package/src/styles/themes/_baseline.scss +173 -0
  60. package/src/styles/themes/_bluekhaki.scss +125 -0
  61. package/src/styles/themes/_brownbeige.scss +125 -0
  62. package/src/styles/themes/_browngreen.scss +125 -0
  63. package/src/styles/themes/_forest.scss +77 -0
  64. package/src/styles/themes/_greenbeige.scss +125 -0
  65. package/src/styles/themes/_index.scss +19 -0
  66. package/src/styles/themes/_material.scss +125 -0
  67. package/src/styles/themes/_ocean.scss +77 -0
  68. package/src/styles/themes/_sageivory.scss +125 -0
  69. package/src/styles/themes/_spring.scss +77 -0
  70. package/src/styles/themes/_summer.scss +87 -0
  71. package/src/styles/themes/_sunset.scss +60 -0
  72. package/src/styles/themes/_tealcaramel.scss +125 -0
  73. package/src/styles/themes/_winter.scss +77 -0
  74. package/src/styles/utilities/_colors.scss +154 -0
  75. package/src/styles/utilities/_flexbox.scss +194 -0
  76. package/src/styles/utilities/_layout.scss +665 -0
  77. package/src/styles/utilities/_ripple.scss +79 -0
  78. package/src/styles/utilities/_spacing.scss +139 -0
  79. package/src/styles/utilities/_typography.scss +178 -0
  80. package/src/styles/utilities/_visibility.scss +142 -0
@@ -0,0 +1,269 @@
1
+ // src/styles/abstract/_theme.scss
2
+ @use 'sass:map';
3
+ @use 'base' as *;
4
+ @use 'variables' as v;
5
+
6
+ // System-level tokens mapped to CSS variables
7
+ $mtrl-sys-state: (
8
+ 'hover-state-layer-opacity': v.$state('hover-state-layer-opacity'),
9
+ 'focus-state-layer-opacity': v.$state('focus-state-layer-opacity'),
10
+ 'pressed-state-layer-opacity': v.$state('pressed-state-layer-opacity'),
11
+ 'dragged-state-layer-opacity': v.$state('dragged-state-layer-opacity')
12
+ );
13
+
14
+ $mtrl-sys-motion: (
15
+ 'duration-short1': v.$motion('duration-short1'),
16
+ 'duration-short2': v.$motion('duration-short2'),
17
+ 'duration-short3': v.$motion('duration-short3'),
18
+ 'duration-short4': v.$motion('duration-short4'),
19
+ 'duration-medium1': v.$motion('duration-medium1'),
20
+ 'duration-medium2': v.$motion('duration-medium2'),
21
+ 'duration-long1': v.$motion('duration-long1'),
22
+ 'duration-long2': v.$motion('duration-long2'),
23
+ 'easing-standard': v.$motion('easing-standard'),
24
+ 'easing-standard-accelerate': v.$motion('easing-standard-accelerate'),
25
+ 'easing-standard-decelerate': v.$motion('easing-standard-decelerate'),
26
+ 'easing-emphasized': v.$motion('easing-emphasized'),
27
+ 'easing-emphasized-accelerate': v.$motion('easing-emphasized-accelerate'),
28
+ 'easing-emphasized-decelerate': v.$motion('easing-emphasized-decelerate')
29
+ );
30
+
31
+ $mtrl-sys-shape: (
32
+ 'none': v.$shape('none'),
33
+ 'extra-small': v.$shape('extra-small'),
34
+ 'small': v.$shape('small'),
35
+ 'medium': v.$shape('medium'),
36
+ 'large': v.$shape('large'),
37
+ 'extra-large': v.$shape('extra-large'),
38
+ 'full': v.$shape('full'),
39
+ 'pill': v.$shape('pill')
40
+ );
41
+
42
+ // Generate CSS variable utilities
43
+ @function color($key) {
44
+ @return var(--#{$prefix}-sys-color-#{$key});
45
+ }
46
+
47
+ @function rgb($key) {
48
+ @return var(--#{$prefix}-sys-color-#{$key}-rgb);
49
+ }
50
+
51
+ /**
52
+ * Creates a color with alpha transparency using RGB values
53
+ * This version uses string.unquote to preserve the rgba function correctly
54
+ * @param {String} $key - Color token name
55
+ * @param {Number} $opacity - Opacity value (0-1)
56
+ * @return {String} rgba CSS function with variable
57
+ */
58
+ @function alpha($key, $opacity) {
59
+ // #{'...'} prevents SASS from interpreting rgba as a SASS function
60
+ @return #{'rgba(var(--#{$prefix}-sys-color-#{$key}-rgb), #{$opacity})'};
61
+ }
62
+
63
+ @function state($key) {
64
+ @return var(--#{$prefix}-sys-state-#{$key});
65
+ }
66
+
67
+ @function motion($key) {
68
+ @return var(--#{$prefix}-sys-motion-#{$key});
69
+ }
70
+
71
+ @function shape($key) {
72
+ @return var(--#{$prefix}-sys-shape-#{$key});
73
+ }
74
+
75
+ // Theme management utilities
76
+ @mixin dark-theme {
77
+ // Key colors
78
+ --#{$prefix}-sys-color-primary: #D0BCFF;
79
+ --#{$prefix}-sys-color-primary-rgb: 208, 188, 255;
80
+ --#{$prefix}-sys-color-on-primary: #381E72;
81
+ --#{$prefix}-sys-color-on-primary-rgb: 56, 30, 114;
82
+ --#{$prefix}-sys-color-primary-container: #4F378B;
83
+ --#{$prefix}-sys-color-primary-container-rgb: 79, 55, 139;
84
+ --#{$prefix}-sys-color-on-primary-container: #EADDFF;
85
+ --#{$prefix}-sys-color-on-primary-container-rgb: 234, 221, 255;
86
+
87
+ --#{$prefix}-sys-color-secondary: #CCC2DC;
88
+ --#{$prefix}-sys-color-secondary-rgb: 204, 194, 220;
89
+ --#{$prefix}-sys-color-on-secondary: #332D41;
90
+ --#{$prefix}-sys-color-on-secondary-rgb: 51, 45, 65;
91
+ --#{$prefix}-sys-color-secondary-container: #4A4458;
92
+ --#{$prefix}-sys-color-secondary-container-rgb: 74, 68, 88;
93
+ --#{$prefix}-sys-color-on-secondary-container: #E8DEF8;
94
+ --#{$prefix}-sys-color-on-secondary-container-rgb: 232, 222, 248;
95
+
96
+ --#{$prefix}-sys-color-tertiary: #EFB8C8;
97
+ --#{$prefix}-sys-color-tertiary-rgb: 239, 184, 200;
98
+ --#{$prefix}-sys-color-on-tertiary: #492532;
99
+ --#{$prefix}-sys-color-on-tertiary-rgb: 73, 37, 50;
100
+ --#{$prefix}-sys-color-tertiary-container: #633B48;
101
+ --#{$prefix}-sys-color-tertiary-container-rgb: 99, 59, 72;
102
+ --#{$prefix}-sys-color-on-tertiary-container: #FFD8E4;
103
+ --#{$prefix}-sys-color-on-tertiary-container-rgb: 255, 216, 228;
104
+
105
+ // Status colors
106
+ --#{$prefix}-sys-color-error: #F2B8B5;
107
+ --#{$prefix}-sys-color-error-rgb: 242, 184, 181;
108
+ --#{$prefix}-sys-color-on-error: #601410;
109
+ --#{$prefix}-sys-color-on-error-rgb: 96, 20, 16;
110
+ --#{$prefix}-sys-color-error-container: #8C1D18;
111
+ --#{$prefix}-sys-color-error-container-rgb: 140, 29, 24;
112
+ --#{$prefix}-sys-color-on-error-container: #F9DEDC;
113
+ --#{$prefix}-sys-color-on-error-container-rgb: 249, 222, 220;
114
+
115
+ --#{$prefix}-sys-color-success: #85CFA9;
116
+ --#{$prefix}-sys-color-success-rgb: 133, 207, 169;
117
+ --#{$prefix}-sys-color-on-success: #00392D;
118
+ --#{$prefix}-sys-color-on-success-rgb: 0, 57, 45;
119
+
120
+ --#{$prefix}-sys-color-warning: #FFB95C;
121
+ --#{$prefix}-sys-color-warning-rgb: 255, 185, 92;
122
+ --#{$prefix}-sys-color-on-warning: #3F2200;
123
+ --#{$prefix}-sys-color-on-warning-rgb: 63, 34, 0;
124
+
125
+ --#{$prefix}-sys-color-info: #99CBFF;
126
+ --#{$prefix}-sys-color-info-rgb: 153, 203, 255;
127
+ --#{$prefix}-sys-color-on-info: #003060;
128
+ --#{$prefix}-sys-color-on-info-rgb: 0, 48, 96;
129
+
130
+ // Neutral colors
131
+ --#{$prefix}-sys-color-surface: #1C1B1F;
132
+ --#{$prefix}-sys-color-surface-rgb: 28, 27, 31;
133
+ --#{$prefix}-sys-color-surface-dim: #141218;
134
+ --#{$prefix}-sys-color-surface-dim-rgb: 20, 18, 24;
135
+ --#{$prefix}-sys-color-surface-bright: #3B383D;
136
+ --#{$prefix}-sys-color-surface-bright-rgb: 59, 56, 61;
137
+ --#{$prefix}-sys-color-surface-container-lowest: #0F0D13;
138
+ --#{$prefix}-sys-color-surface-container-lowest-rgb: 15, 13, 19;
139
+ --#{$prefix}-sys-color-surface-container-low: #1D1B20;
140
+ --#{$prefix}-sys-color-surface-container-low-rgb: 29, 27, 32;
141
+ --#{$prefix}-sys-color-surface-container: #211F26;
142
+ --#{$prefix}-sys-color-surface-container-rgb: 33, 31, 38;
143
+ --#{$prefix}-sys-color-surface-container-high: #2B2930;
144
+ --#{$prefix}-sys-color-surface-container-high-rgb: 43, 41, 48;
145
+ --#{$prefix}-sys-color-surface-container-highest: #36343B;
146
+ --#{$prefix}-sys-color-surface-container-highest-rgb: 54, 52, 59;
147
+
148
+ --#{$prefix}-sys-color-on-surface: #E6E1E5;
149
+ --#{$prefix}-sys-color-on-surface-rgb: 230, 225, 229;
150
+ --#{$prefix}-sys-color-on-surface-variant: #CAC4D0;
151
+ --#{$prefix}-sys-color-on-surface-variant-rgb: 202, 196, 208;
152
+
153
+ // Additional colors
154
+ --#{$prefix}-sys-color-outline: #938F99;
155
+ --#{$prefix}-sys-color-outline-rgb: 147, 143, 153;
156
+ --#{$prefix}-sys-color-outline-variant: #444746;
157
+ --#{$prefix}-sys-color-outline-variant-rgb: 68, 71, 70;
158
+ --#{$prefix}-sys-color-shadow: #000000;
159
+ --#{$prefix}-sys-color-shadow-rgb: 0, 0, 0;
160
+ --#{$prefix}-sys-color-scrim: #000000;
161
+ --#{$prefix}-sys-color-scrim-rgb: 0, 0, 0;
162
+ --#{$prefix}-sys-color-inverse-surface: #E6E1E5;
163
+ --#{$prefix}-sys-color-inverse-surface-rgb: 230, 225, 229;
164
+ --#{$prefix}-sys-color-inverse-on-surface: #313033;
165
+ --#{$prefix}-sys-color-inverse-on-surface-rgb: 49, 48, 51;
166
+ --#{$prefix}-sys-color-inverse-primary: #6750A4;
167
+ --#{$prefix}-sys-color-inverse-primary-rgb: 103, 80, 164;
168
+ }
169
+
170
+ @mixin light-theme {
171
+ // Key colors
172
+ --#{$prefix}-sys-color-primary: #6750A4;
173
+ --#{$prefix}-sys-color-primary-rgb: 103, 80, 164;
174
+ --#{$prefix}-sys-color-on-primary: #FFFFFF;
175
+ --#{$prefix}-sys-color-on-primary-rgb: 255, 255, 255;
176
+ --#{$prefix}-sys-color-primary-container: #EADDFF;
177
+ --#{$prefix}-sys-color-primary-container-rgb: 234, 221, 255;
178
+ --#{$prefix}-sys-color-on-primary-container: #21005D;
179
+ --#{$prefix}-sys-color-on-primary-container-rgb: 33, 0, 93;
180
+
181
+ --#{$prefix}-sys-color-secondary: #625B71;
182
+ --#{$prefix}-sys-color-secondary-rgb: 98, 91, 113;
183
+ --#{$prefix}-sys-color-on-secondary: #FFFFFF;
184
+ --#{$prefix}-sys-color-on-secondary-rgb: 255, 255, 255;
185
+ --#{$prefix}-sys-color-secondary-container: #E8DEF8;
186
+ --#{$prefix}-sys-color-secondary-container-rgb: 232, 222, 248;
187
+ --#{$prefix}-sys-color-on-secondary-container: #1D192B;
188
+ --#{$prefix}-sys-color-on-secondary-container-rgb: 29, 25, 43;
189
+
190
+ --#{$prefix}-sys-color-tertiary: #7D5260;
191
+ --#{$prefix}-sys-color-tertiary-rgb: 125, 82, 96;
192
+ --#{$prefix}-sys-color-on-tertiary: #FFFFFF;
193
+ --#{$prefix}-sys-color-on-tertiary-rgb: 255, 255, 255;
194
+ --#{$prefix}-sys-color-tertiary-container: #FFD8E4;
195
+ --#{$prefix}-sys-color-tertiary-container-rgb: 255, 216, 228;
196
+ --#{$prefix}-sys-color-on-tertiary-container: #31111D;
197
+ --#{$prefix}-sys-color-on-tertiary-container-rgb: 49, 17, 29;
198
+
199
+ // Status colors
200
+ --#{$prefix}-sys-color-error: #B3261E;
201
+ --#{$prefix}-sys-color-error-rgb: 179, 38, 30;
202
+ --#{$prefix}-sys-color-on-error: #FFFFFF;
203
+ --#{$prefix}-sys-color-on-error-rgb: 255, 255, 255;
204
+ --#{$prefix}-sys-color-error-container: #F9DEDC;
205
+ --#{$prefix}-sys-color-error-container-rgb: 249, 222, 220;
206
+ --#{$prefix}-sys-color-on-error-container: #410E0B;
207
+ --#{$prefix}-sys-color-on-error-container-rgb: 65, 14, 11;
208
+
209
+ --#{$prefix}-sys-color-success: #007B5A;
210
+ --#{$prefix}-sys-color-success-rgb: 0, 123, 90;
211
+ --#{$prefix}-sys-color-on-success: #FFFFFF;
212
+ --#{$prefix}-sys-color-on-success-rgb: 255, 255, 255;
213
+
214
+ --#{$prefix}-sys-color-warning: #DD6D06;
215
+ --#{$prefix}-sys-color-warning-rgb: 221, 109, 6;
216
+ --#{$prefix}-sys-color-on-warning: #FFFFFF;
217
+ --#{$prefix}-sys-color-on-warning-rgb: 255, 255, 255;
218
+
219
+ --#{$prefix}-sys-color-info: #0061A4;
220
+ --#{$prefix}-sys-color-info-rgb: 0, 97, 164;
221
+ --#{$prefix}-sys-color-on-info: #FFFFFF;
222
+ --#{$prefix}-sys-color-on-info-rgb: 255, 255, 255;
223
+
224
+ // Neutral colors
225
+ --#{$prefix}-sys-color-surface: #FFFBFE;
226
+ --#{$prefix}-sys-color-surface-rgb: 255, 251, 254;
227
+ --#{$prefix}-sys-color-surface-dim: #DED8E1;
228
+ --#{$prefix}-sys-color-surface-dim-rgb: 222, 216, 225;
229
+ --#{$prefix}-sys-color-surface-bright: #FFF8F7;
230
+ --#{$prefix}-sys-color-surface-bright-rgb: 255, 248, 247;
231
+ --#{$prefix}-sys-color-surface-container-lowest: #FFFFFF;
232
+ --#{$prefix}-sys-color-surface-container-lowest-rgb: 255, 255, 255;
233
+ --#{$prefix}-sys-color-surface-container-low: #F7F2FA;
234
+ --#{$prefix}-sys-color-surface-container-low-rgb: 247, 242, 250;
235
+ --#{$prefix}-sys-color-surface-container: #F3EDF7;
236
+ --#{$prefix}-sys-color-surface-container-rgb: 243, 237, 247;
237
+ --#{$prefix}-sys-color-surface-container-high: #ECE6F0;
238
+ --#{$prefix}-sys-color-surface-container-high-rgb: 236, 230, 240;
239
+ --#{$prefix}-sys-color-surface-container-highest: #E6E0E9;
240
+ --#{$prefix}-sys-color-surface-container-highest-rgb: 230, 224, 233;
241
+
242
+ --#{$prefix}-sys-color-on-surface: #1C1B1F;
243
+ --#{$prefix}-sys-color-on-surface-rgb: 28, 27, 31;
244
+ --#{$prefix}-sys-color-on-surface-variant: #49454F;
245
+ --#{$prefix}-sys-color-on-surface-variant-rgb: 73, 69, 79;
246
+
247
+ // Additional colors
248
+ --#{$prefix}-sys-color-outline: #79747E;
249
+ --#{$prefix}-sys-color-outline-rgb: 121, 116, 126;
250
+ --#{$prefix}-sys-color-outline-variant: #CAC4D0;
251
+ --#{$prefix}-sys-color-outline-variant-rgb: 202, 196, 208;
252
+ --#{$prefix}-sys-color-shadow: #000000;
253
+ --#{$prefix}-sys-color-shadow-rgb: 0, 0, 0;
254
+ --#{$prefix}-sys-color-scrim: #000000;
255
+ --#{$prefix}-sys-color-scrim-rgb: 0, 0, 0;
256
+ --#{$prefix}-sys-color-inverse-surface: #313033;
257
+ --#{$prefix}-sys-color-inverse-surface-rgb: 49, 48, 51;
258
+ --#{$prefix}-sys-color-inverse-on-surface: #F4EFF4;
259
+ --#{$prefix}-sys-color-inverse-on-surface-rgb: 244, 239, 244;
260
+ --#{$prefix}-sys-color-inverse-primary: #D0BCFF;
261
+ --#{$prefix}-sys-color-inverse-primary-rgb: 208, 188, 255;
262
+ }
263
+
264
+ // Auto dark mode based on system preference
265
+ @mixin auto-dark-mode {
266
+ @media (prefers-color-scheme: dark) {
267
+ @include dark-theme;
268
+ }
269
+ }
@@ -0,0 +1,338 @@
1
+ // src/styles/abstract/_variables.scss
2
+ @use 'sass:map';
3
+ @use 'base' as *;
4
+
5
+ // Core design tokens
6
+ $state: (
7
+ 'hover-state-layer-opacity': 0.08,
8
+ 'focus-state-layer-opacity': 0.12,
9
+ 'pressed-state-layer-opacity': 0.12,
10
+ 'dragged-state-layer-opacity': 0.16
11
+ ) !default;
12
+
13
+ $motion: (
14
+ // Duration tokens
15
+ 'duration-short1': 100ms,
16
+ 'duration-short2': 200ms,
17
+ 'duration-short3': 250ms,
18
+ 'duration-short4': 300ms,
19
+ 'duration-medium1': 400ms,
20
+ 'duration-medium2': 500ms,
21
+ 'duration-long1': 600ms,
22
+ 'duration-long2': 700ms,
23
+
24
+ // Standard easing tokens (Material Design 3 defaults)
25
+ 'easing-standard': cubic-bezier(0.2, 0.0, 0.0, 1.0),
26
+ 'easing-standard-accelerate': cubic-bezier(0.3, 0.0, 1.0, 1.0),
27
+ 'easing-standard-decelerate': cubic-bezier(0.0, 0.0, 0.2, 1.0),
28
+
29
+ // Emphasized easing tokens (Material Design 3 defaults)
30
+ 'easing-emphasized': cubic-bezier(0.2, 0.0, 0.0, 1.0),
31
+ 'easing-emphasized-accelerate': cubic-bezier(0.3, 0.0, 0.8, 0.15),
32
+ 'easing-emphasized-decelerate': cubic-bezier(0.05, 0.7, 0.1, 1.0),
33
+
34
+ // Semantic motion tokens (aliases for better developer experience)
35
+ 'easing-accelerated': cubic-bezier(0.3, 0.0, 1.0, 1.0), // Same as standard-accelerate
36
+ 'easing-decelerated': cubic-bezier(0.0, 0.0, 0.2, 1.0), // Same as standard-decelerate
37
+ 'easing-exit': cubic-bezier(0.3, 0.0, 1.0, 1.0), // Element leaving - accelerated motion
38
+ 'easing-enter': cubic-bezier(0.0, 0.0, 0.2, 1.0), // Element entering - decelerated motion
39
+
40
+ // Animation tokens for specific behaviors
41
+ 'easing-appear': cubic-bezier(0.0, 0.0, 0.2, 1.0), // Elements appearing (decelerated)
42
+ 'easing-disappear': cubic-bezier(0.3, 0.0, 1.0, 1.0), // Elements disappearing (accelerated)
43
+ 'easing-expand': cubic-bezier(0.0, 0.0, 0.2, 1.0), // Elements expanding (decelerated)
44
+ 'easing-collapse': cubic-bezier(0.3, 0.0, 1.0, 1.0) // Elements collapsing (accelerated)
45
+ ) !default;
46
+
47
+ $elevation: (
48
+ 'level-0': none,
49
+ 'level-1': (0px 1px 2px rgba(0, 0, 0, 0.3), 0px 1px 3px 1px rgba(0, 0, 0, 0.15)),
50
+ 'level-2': (0px 1px 2px rgba(0, 0, 0, 0.3), 0px 2px 6px 2px rgba(0, 0, 0, 0.15)),
51
+ 'level-3': (0px 1px 3px rgba(0, 0, 0, 0.3), 0px 4px 8px 3px rgba(0, 0, 0, 0.15)),
52
+ 'level-4': (0px 2px 3px rgba(0, 0, 0, 0.3), 0px 6px 10px 4px rgba(0, 0, 0, 0.15)),
53
+ 'level-5': (0px 4px 4px rgba(0, 0, 0, 0.3), 0px 8px 12px 6px rgba(0, 0, 0, 0.15))
54
+ ) !default;
55
+
56
+ $typescale: (
57
+ 'display-large': (
58
+ 'font-family': ('Roboto', sans-serif),
59
+ 'font-size': 57px,
60
+ 'line-height': 64px,
61
+ 'letter-spacing': -0.25px,
62
+ 'font-weight': 400
63
+ ),
64
+ 'display-medium': (
65
+ 'font-family': ('Roboto', sans-serif),
66
+ 'font-size': 45px,
67
+ 'line-height': 52px,
68
+ 'letter-spacing': 0,
69
+ 'font-weight': 400
70
+ ),
71
+ 'display-small': (
72
+ 'font-family': ('Roboto', sans-serif),
73
+ 'font-size': 36px,
74
+ 'line-height': 44px,
75
+ 'letter-spacing': 0,
76
+ 'font-weight': 400
77
+ ),
78
+ 'headline-large': (
79
+ 'font-family': ('Roboto', sans-serif),
80
+ 'font-size': 32px,
81
+ 'line-height': 40px,
82
+ 'letter-spacing': 0,
83
+ 'font-weight': 400
84
+ ),
85
+ 'headline-medium': (
86
+ 'font-family': ('Roboto', sans-serif),
87
+ 'font-size': 28px,
88
+ 'line-height': 36px,
89
+ 'letter-spacing': 0,
90
+ 'font-weight': 400
91
+ ),
92
+ 'headline-small': (
93
+ 'font-family': ('Roboto', sans-serif),
94
+ 'font-size': 24px,
95
+ 'line-height': 32px,
96
+ 'letter-spacing': 0,
97
+ 'font-weight': 400
98
+ ),
99
+ 'title-large': (
100
+ 'font-family': ('Roboto', sans-serif),
101
+ 'font-size': 22px,
102
+ 'line-height': 28px,
103
+ 'letter-spacing': 0,
104
+ 'font-weight': 500
105
+ ),
106
+ 'title-medium': (
107
+ 'font-family': ('Roboto', sans-serif),
108
+ 'font-size': 16px,
109
+ 'line-height': 24px,
110
+ 'letter-spacing': 0.15px,
111
+ 'font-weight': 500
112
+ ),
113
+ 'title-small': (
114
+ 'font-family': ('Roboto', sans-serif),
115
+ 'font-size': 14px,
116
+ 'line-height': 20px,
117
+ 'letter-spacing': 0.1px,
118
+ 'font-weight': 500
119
+ ),
120
+ 'body-large': (
121
+ 'font-family': ('Roboto', sans-serif),
122
+ 'font-size': 16px,
123
+ 'line-height': 24px,
124
+ 'letter-spacing': 0.5px,
125
+ 'font-weight': 400
126
+ ),
127
+ 'body-medium': (
128
+ 'font-family': ('Roboto', sans-serif),
129
+ 'font-size': 14px,
130
+ 'line-height': 20px,
131
+ 'letter-spacing': 0.25px,
132
+ 'font-weight': 400
133
+ ),
134
+ 'body-small': (
135
+ 'font-family': ('Roboto', sans-serif),
136
+ 'font-size': 12px,
137
+ 'line-height': 16px,
138
+ 'letter-spacing': 0.4px,
139
+ 'font-weight': 400
140
+ ),
141
+ 'label-large': (
142
+ 'font-family': ('Roboto', sans-serif),
143
+ 'font-size': 14px,
144
+ 'line-height': 20px,
145
+ 'letter-spacing': 0.1px,
146
+ 'font-weight': 500
147
+ ),
148
+ 'label-medium': (
149
+ 'font-family': ('Roboto', sans-serif),
150
+ 'font-size': 12px,
151
+ 'line-height': 16px,
152
+ 'letter-spacing': 0.5px,
153
+ 'font-weight': 500
154
+ ),
155
+ 'label-small': (
156
+ 'font-family': ('Roboto', sans-serif),
157
+ 'font-size': 11px,
158
+ 'line-height': 16px,
159
+ 'letter-spacing': 0.5px,
160
+ 'font-weight': 500
161
+ )
162
+ ) !default;
163
+
164
+ $shape: (
165
+ 'none': 0,
166
+ 'extra-tiny': 1px,
167
+ 'tiny': 2px,
168
+ 'extra-small': 4px,
169
+ 'small': 8px,
170
+ 'medium': 12px,
171
+ 'large': 16px,
172
+ 'extra-large': 28px,
173
+ 'full': 9999px,
174
+ 'pill': 100px
175
+ ) !default;
176
+
177
+ $breakpoints: (
178
+ 'xs': 0,
179
+ 'sm': 600px,
180
+ 'md': 960px,
181
+ 'lg': 1280px,
182
+ 'xl': 1920px
183
+ ) !default;
184
+
185
+ $z-index: (
186
+ 'modal': 1000,
187
+ 'popover': 900,
188
+ 'drawer': 800,
189
+ 'dialog': 700,
190
+ 'dropdown': 600,
191
+ 'tooltip': 500,
192
+ 'menu': 700,
193
+ 'sticky': 100,
194
+ 'fixed': 50,
195
+ 'default': 1,
196
+ 'below': -1
197
+ ) !default;
198
+
199
+ // Component-specific tokens
200
+ $card: (
201
+ 'width': 344px,
202
+ 'width-small': 344px,
203
+ 'width-medium': 480px,
204
+ 'width-large': 624px,
205
+ 'border-radius': 12px,
206
+ 'padding': 16px
207
+ ) !default;
208
+
209
+ // Chip configuration - updated with MD3 values
210
+ $chip-config: (
211
+ 'height': 32px,
212
+ 'border-radius': 8px,
213
+ 'padding-horizontal': 12px,
214
+ 'outlined-border-opacity': 0.12,
215
+ 'outlined-border-hover-opacity': 0.29,
216
+ 'outlined-border-focus-opacity': 0.38,
217
+ 'outlined-selected-border-opacity': 0,
218
+ 'suggestion-height': 48px,
219
+ 'icon-size': 18px,
220
+ 'suggestion-icon-size': 24px
221
+ ) !default;
222
+
223
+ $button: (
224
+ 'height': 40px,
225
+ 'min-width': 64px,
226
+ 'padding-horizontal': 24px,
227
+ 'padding-horizontal-small': 16px,
228
+ 'padding-icon': 16px,
229
+ 'border-radius': 20px,
230
+ 'transition-duration': map.get($motion, 'duration-short2'),
231
+ 'transition-easing': map.get($motion, 'easing-standard'),
232
+ // Size-specific configurations based on MD3 specs
233
+ 'height-xs': 32px,
234
+ 'height-s': 40px,
235
+ 'height-m': 56px,
236
+ 'height-l': 96px,
237
+ 'height-xl': 136px,
238
+ 'padding-xs': 12px,
239
+ 'padding-s': 16px,
240
+ 'padding-m': 24px,
241
+ 'padding-l': 48px,
242
+ 'padding-xl': 64px,
243
+ 'icon-size-xs': 18px,
244
+ 'icon-size-s': 22px,
245
+ 'icon-size-m': 24px,
246
+ 'icon-size-l': 32px,
247
+ 'icon-size-xl': 48px
248
+ ) !default;
249
+
250
+
251
+ // Define spacing scale (this might already exist, if not, add it)
252
+ $spacing-scale: (
253
+ '0': 0,
254
+ '1': 4px,
255
+ '2': 8px,
256
+ '3': 12px,
257
+ '4': 16px,
258
+ '5': 20px,
259
+ '6': 24px,
260
+ '8': 32px,
261
+ '10': 40px,
262
+ '12': 48px,
263
+ '14': 56px,
264
+ '16': 64px,
265
+ '20': 80px,
266
+ '24': 96px,
267
+ '32': 128px
268
+ );
269
+
270
+ // Add spacing function
271
+ @function spacing($key) {
272
+ @if not map.has-key($spacing-scale, $key) {
273
+ @error 'Spacing key "#{$key}" not found in spacing scale.';
274
+ }
275
+ @return map.get($spacing-scale, $key);
276
+ }
277
+
278
+ // Helper functions for easier token access
279
+ @function state($key) {
280
+ @return map.get($state, $key);
281
+ }
282
+
283
+ @function motion($key) {
284
+ @return map.get($motion, $key);
285
+ }
286
+
287
+ @function elevation($level) {
288
+ @return map.get($elevation, $level);
289
+ }
290
+
291
+ @function typography($scale) {
292
+ @return map.get($typescale, $scale);
293
+ }
294
+
295
+ @function shape($size) {
296
+ @return map.get($shape, $size);
297
+ }
298
+
299
+ @function z-index($layer) {
300
+ @return map.get($z-index, $layer);
301
+ }
302
+
303
+ @function breakpoint($size) {
304
+ @return map.get($breakpoints, $size);
305
+ }
306
+
307
+ @function button($prop) {
308
+ @return map.get($button, $prop);
309
+ }
310
+
311
+ @function card($key) {
312
+ @return map.get($card, $key);
313
+ }
314
+
315
+ @function chip($key, $fallback: null) {
316
+ @if map.has-key($chip-config, $key) {
317
+ @return map.get($chip-config, $key);
318
+ }
319
+ @return $fallback;
320
+ }
321
+
322
+ // Textfield configuration
323
+ $textfield: (
324
+ 'height': 56px,
325
+ 'height-small': 48px,
326
+ 'height-large': 64px,
327
+ 'padding-horizontal': 16px,
328
+ 'padding-vertical': 16px,
329
+ 'border-radius': map.get($shape, 'extra-small'),
330
+ 'border-width': 1px,
331
+ 'label-offset': 16px,
332
+ 'icon-size': 24px
333
+ ) !default;
334
+
335
+ // Add textfield function
336
+ @function textfield($key) {
337
+ @return map.get($textfield, $key);
338
+ }
@@ -0,0 +1,86 @@
1
+ // src/styles/base/_reset.scss
2
+
3
+ // Modern CSS Reset
4
+ // Adapted and simplified for mtrl
5
+
6
+ // Use border-box by default
7
+ *,
8
+ *::before,
9
+ *::after {
10
+ box-sizing: border-box;
11
+ }
12
+
13
+ // Remove default margin and padding
14
+ html,
15
+ body,
16
+ h1, h2, h3, h4, h5, h6,
17
+ p, figure, blockquote, dl, dd {
18
+ margin: 0;
19
+ padding: 0;
20
+ }
21
+
22
+ // Set core body defaults
23
+ body {
24
+ min-height: 100vh;
25
+ text-rendering: optimizeSpeed;
26
+ line-height: 1.5;
27
+ }
28
+
29
+ // Make images easier to work with
30
+ img,
31
+ picture {
32
+ max-width: 100%;
33
+ display: block;
34
+ }
35
+
36
+ // Inherit fonts for inputs and buttons
37
+ input,
38
+ button,
39
+ textarea,
40
+ select {
41
+ font: inherit;
42
+ }
43
+
44
+ // Remove all animations, transitions and smooth scrolling for people who prefer not to see them
45
+ @media (prefers-reduced-motion: reduce) {
46
+ html:focus-within {
47
+ scroll-behavior: auto;
48
+ }
49
+
50
+ *,
51
+ *::before,
52
+ *::after {
53
+ animation-duration: 0.01ms !important;
54
+ animation-iteration-count: 1 !important;
55
+ transition-duration: 0.01ms !important;
56
+ scroll-behavior: auto !important;
57
+ }
58
+ }
59
+
60
+ // Reset button styles
61
+ button {
62
+ background: transparent;
63
+ border: none;
64
+ cursor: pointer;
65
+ padding: 0;
66
+ }
67
+
68
+ // Remove list styles
69
+ ul,
70
+ ol {
71
+ list-style: none;
72
+ margin: 0;
73
+ padding: 0;
74
+ }
75
+
76
+ // Set default link style
77
+ a {
78
+ text-decoration: none;
79
+ color: inherit;
80
+ }
81
+
82
+ // Tables
83
+ table {
84
+ border-collapse: collapse;
85
+ border-spacing: 0;
86
+ }