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,358 @@
1
+ // src/components/datepicker/_styles.scss
2
+ @use '../../styles/abstract/base' as base;
3
+ @use '../../styles/abstract/variables' as v;
4
+ @use '../../styles/abstract/functions' as f;
5
+ @use '../../styles/abstract/mixins' as m;
6
+ @use '../../styles/abstract/theme' as t;
7
+
8
+ $component: '#{base.$prefix}-datepicker';
9
+
10
+ .#{$component} {
11
+ &-container {
12
+ position: relative;
13
+ display: inline-flex;
14
+ flex-direction: column;
15
+ width: 100%;
16
+ min-width: 280px;
17
+ max-width: 360px;
18
+ }
19
+
20
+ &-input {
21
+ display: flex;
22
+ height: 40px;
23
+ width: 100%;
24
+ padding: 0 12px;
25
+ border: 1px solid t.color('outline');
26
+ border-radius: 4px;
27
+ background-color: t.color('surface');
28
+ color: t.color('on-surface');
29
+ font-family: inherit;
30
+ font-size: 16px;
31
+ line-height: 24px;
32
+ transition: border-color 0.2s ease;
33
+ cursor: pointer;
34
+
35
+ &:hover {
36
+ border-color: t.color('on-surface-variant');
37
+ }
38
+
39
+ &:focus {
40
+ outline: none;
41
+ border-color: t.color('primary');
42
+ border-width: 2px;
43
+ padding: 0 11px; // Adjust for increased border width
44
+ }
45
+
46
+ &:disabled {
47
+ opacity: 0.38;
48
+ cursor: not-allowed;
49
+ border-color: t.color('outline');
50
+ background-color: t.alpha('on-surface', 0.04);
51
+ }
52
+ }
53
+
54
+ &-calendar {
55
+ position: absolute;
56
+ top: 100%;
57
+ left: 0;
58
+ z-index: 10;
59
+ margin-top: 8px;
60
+ background-color: t.color('surface-container-high');
61
+ border-radius: v.shape('large');
62
+ box-shadow: v.elevation('level3');
63
+ overflow: hidden;
64
+
65
+ &-content {
66
+ display: flex;
67
+ flex-direction: column;
68
+ padding: 16px;
69
+ }
70
+ }
71
+
72
+ &-header {
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: space-between;
76
+ margin-bottom: 16px;
77
+ }
78
+
79
+ &-month-selector,
80
+ &-year-selector {
81
+ padding: 8px 12px;
82
+ border: none;
83
+ background: none;
84
+ color: t.color('on-surface-variant');
85
+ @include m.typography('title-small');
86
+ cursor: pointer;
87
+ border-radius: v.shape('full');
88
+
89
+ &:hover {
90
+ background-color: t.alpha('on-surface', 0.08);
91
+ }
92
+
93
+ &:focus {
94
+ outline: none;
95
+ background-color: t.alpha('on-surface', 0.12);
96
+ }
97
+ }
98
+
99
+ &-nav-controls {
100
+ display: flex;
101
+ align-items: center;
102
+ }
103
+
104
+ &-prev-btn,
105
+ &-next-btn {
106
+ display: flex;
107
+ align-items: center;
108
+ justify-content: center;
109
+ width: 40px;
110
+ height: 40px;
111
+ border: none;
112
+ background: none;
113
+ border-radius: 50%;
114
+ color: t.color('on-surface-variant');
115
+ cursor: pointer;
116
+
117
+ &:hover {
118
+ background-color: t.alpha('on-surface', 0.08);
119
+ }
120
+
121
+ &:focus {
122
+ outline: none;
123
+ background-color: t.alpha('on-surface', 0.12);
124
+ }
125
+
126
+ svg {
127
+ width: 24px;
128
+ height: 24px;
129
+ }
130
+ }
131
+
132
+ &-weekdays {
133
+ display: grid;
134
+ grid-template-columns: repeat(7, 1fr);
135
+ margin-bottom: 8px;
136
+ }
137
+
138
+ &-weekday {
139
+ display: flex;
140
+ align-items: center;
141
+ justify-content: center;
142
+ height: 40px;
143
+ @include m.typography('body-small');
144
+ color: t.color('on-surface-variant');
145
+ font-weight: 500;
146
+ }
147
+
148
+ &-days {
149
+ display: grid;
150
+ grid-template-columns: repeat(7, 1fr);
151
+ gap: 0;
152
+ }
153
+
154
+ &-day {
155
+ display: flex;
156
+ align-items: center;
157
+ justify-content: center;
158
+ width: 40px;
159
+ height: 40px;
160
+ border: none;
161
+ background: none;
162
+ border-radius: 50%;
163
+ @include m.typography('body-medium');
164
+ color: t.color('on-surface');
165
+ cursor: pointer;
166
+
167
+ // &:hover:not(:disabled) {
168
+ // background-color: t.alpha('on-surface', 0.08);
169
+ // }
170
+
171
+ &:focus {
172
+ outline: none;
173
+ background-color: t.alpha('on-surface', 0.12);
174
+ }
175
+
176
+ &.outside-month {
177
+ color: t.color('on-surface-variant');
178
+ opacity: 0.6;
179
+ }
180
+
181
+ &.today {
182
+ position: relative;
183
+ &::before {
184
+ position: absolute;
185
+ border-radius: 50%;
186
+ height: 100%;
187
+ width: 100%;
188
+ content: '';
189
+ border: 1px solid t.color('primary');
190
+ }
191
+
192
+ }
193
+
194
+ &.selected {
195
+ background-color: t.color('primary');
196
+ color: t.color('on-primary');
197
+ }
198
+
199
+ &:disabled {
200
+ color: t.color('on-surface-variant');
201
+ opacity: 0.38;
202
+ cursor: not-allowed;
203
+ }
204
+
205
+ &.range-start,
206
+ &.range-end {
207
+ background-color: t.color('primary');
208
+ color: t.color('on-primary');
209
+ }
210
+
211
+ &.range-middle {
212
+ background-color: t.alpha('primary-container', 0.18);
213
+ color: t.color('on-primary-container');
214
+ border-radius: 0;
215
+ }
216
+ }
217
+
218
+ &-months,
219
+ &-years {
220
+ display: grid;
221
+ grid-template-columns: repeat(3, 1fr);
222
+ gap: 8px;
223
+ padding: 16px 0;
224
+ }
225
+
226
+ &-month,
227
+ &-year {
228
+ display: flex;
229
+ align-items: center;
230
+ justify-content: center;
231
+ height: 36px;
232
+ border: none;
233
+ background: none;
234
+ border-radius: v.shape('medium');
235
+ @include m.typography('body-medium');
236
+ color: t.color('on-surface');
237
+ cursor: pointer;
238
+
239
+ &:hover {
240
+ background-color: t.alpha('on-surface', 0.08);
241
+ }
242
+
243
+ &:focus {
244
+ outline: none;
245
+ background-color: t.alpha('on-surface', 0.12);
246
+ }
247
+
248
+ &.selected {
249
+ background-color: t.color('primary');
250
+ color: t.color('on-primary');
251
+ }
252
+ }
253
+
254
+ &-footer {
255
+ display: flex;
256
+ justify-content: flex-end;
257
+ padding: 8px 16px 8px 0;
258
+ margin-top: 16px;
259
+
260
+ button {
261
+ margin-left: 8px;
262
+ }
263
+ }
264
+
265
+ // Modal-specific styles
266
+ &-modal {
267
+ position: fixed;
268
+ top: 50%;
269
+ left: 50%;
270
+ transform: translate(-50%, -50%);
271
+ z-index: v.z-index('modal');
272
+ width: 328px;
273
+ max-width: 90vw;
274
+
275
+ &-overlay {
276
+ position: fixed;
277
+ top: 0;
278
+ left: 0;
279
+ right: 0;
280
+ bottom: 0;
281
+ background-color: rgba(0, 0, 0, 0.5);
282
+ z-index: v.z-index('modal') - 1;
283
+ }
284
+ }
285
+
286
+ // Full-screen modal for mobile
287
+ @media (max-width: 600px) {
288
+ &-modal {
289
+ width: 100%;
290
+ height: 100%;
291
+ max-width: none;
292
+ top: 0;
293
+ left: 0;
294
+ transform: none;
295
+ border-radius: 0;
296
+
297
+ &-header {
298
+ height: 56px;
299
+ padding: 0 16px;
300
+ border-bottom: 1px solid t.color('outline-variant');
301
+ }
302
+ }
303
+ }
304
+
305
+ // Range selection styles
306
+ &-range {
307
+ .#{$component}-days {
308
+ .#{$component}-day {
309
+ &.range-start {
310
+ position: relative;
311
+ // border-top-right-radius: 0;
312
+ // border-bottom-right-radius: 0;
313
+ &::before {
314
+ position: absolute;
315
+ content: '';
316
+ right: 0;
317
+ width: 50%;
318
+ height: 100%;
319
+ background-color: t.alpha('primary', 0.1);
320
+ }
321
+ }
322
+
323
+ &.range-end {
324
+ position: relative;
325
+ // border-top-left-radius: 0;
326
+ // border-bottom-left-radius: 0;
327
+ &::before {
328
+ position: absolute;
329
+ content: '';
330
+ left: 0;
331
+ width: 50%;
332
+ height: 100%;
333
+ background-color: t.alpha('primary', 0.1);
334
+ }
335
+ }
336
+ }
337
+ }
338
+ }
339
+
340
+ // Animation
341
+ &-animate {
342
+ .#{$component}-calendar {
343
+ animation: datepicker-fade-in 0.2s ease;
344
+ }
345
+ }
346
+ }
347
+
348
+ // Animations
349
+ @keyframes datepicker-fade-in {
350
+ from {
351
+ opacity: 0;
352
+ transform: translateY(-10px);
353
+ }
354
+ to {
355
+ opacity: 1;
356
+ transform: translateY(0);
357
+ }
358
+ }
@@ -0,0 +1,259 @@
1
+ // src/components/dialog/_dialog.scss
2
+ @use '../../styles/abstract/base' as base;
3
+ @use '../../styles/abstract/variables' as v;
4
+ @use '../../styles/abstract/functions' as f;
5
+ @use '../../styles/abstract/mixins' as m;
6
+ @use '../../styles/abstract/theme' as t;
7
+
8
+ $component: '#{base.$prefix}-dialog';
9
+
10
+ // Dialog overlay (background scrim)
11
+ .#{$component}-overlay {
12
+ position: fixed;
13
+ top: 0;
14
+ left: 0;
15
+ right: 0;
16
+ bottom: 0;
17
+ background-color: t.alpha('scrim', 0.48);
18
+ opacity: 0;
19
+ z-index: v.z-index('modal');
20
+ display: flex;
21
+ align-items: center;
22
+ justify-content: center;
23
+ overflow: auto;
24
+ padding: 24px;
25
+ box-sizing: border-box;
26
+ // Use proper SCSS function calls for transition values
27
+ $duration: v.motion('duration-short4');
28
+ $easing: v.motion('easing-standard');
29
+ transition: opacity #{$duration} #{$easing},
30
+ visibility #{$duration} #{$easing};
31
+
32
+ &--visible {
33
+ opacity: 1;
34
+ visibility: visible;
35
+ }
36
+ }
37
+
38
+ // Dialog container
39
+ .#{$component} {
40
+ position: relative;
41
+ background-color: t.color('surface-container-high');
42
+ color: t.color('on-surface');
43
+ border-radius: v.shape('extra-large'); // 28dp corner radius
44
+ max-width: 560px;
45
+ min-width: 280px;
46
+ width: 100%;
47
+ margin: auto;
48
+ opacity: 0;
49
+ transform: scale(0.8);
50
+ $duration: v.motion('duration-short4');
51
+ $easing: v.motion('easing-standard');
52
+ transition: transform #{$duration} #{$easing},
53
+ opacity #{$duration} #{$easing};
54
+ @include m.elevation(3);
55
+
56
+ &--visible {
57
+ opacity: 1;
58
+ transform: scale(1);
59
+ }
60
+
61
+ // Size variants
62
+ &--small {
63
+ width: 80%;
64
+ max-width: 360px;
65
+ }
66
+
67
+ &--medium {
68
+ width: 90%;
69
+ max-width: 560px;
70
+ }
71
+
72
+ &--large {
73
+ width: 95%;
74
+ max-width: 800px;
75
+ }
76
+
77
+ &--fullwidth {
78
+ width: 100%;
79
+ max-width: none;
80
+ margin: 24px;
81
+ }
82
+
83
+ &--fullscreen {
84
+ width: 100%;
85
+ height: 100%;
86
+ max-width: none;
87
+ max-height: none;
88
+ margin: 0;
89
+ border-radius: 0;
90
+ }
91
+
92
+ // Animation variants
93
+ &--slide-up {
94
+ transform: translateY(50px);
95
+
96
+ &.#{$component}--visible {
97
+ transform: translateY(0);
98
+ }
99
+ }
100
+
101
+ &--slide-down {
102
+ transform: translateY(-50px);
103
+
104
+ &.#{$component}--visible {
105
+ transform: translateY(0);
106
+ }
107
+ }
108
+
109
+ &--fade {
110
+ transform: scale(1);
111
+
112
+ &.#{$component}--visible {
113
+ transform: scale(1);
114
+ }
115
+ }
116
+ }
117
+
118
+ // Dialog header
119
+ .#{$component}-header {
120
+ display: flex;
121
+ align-items: flex-start;
122
+ justify-content: space-between;
123
+ padding: 24px 24px 16px 24px;
124
+
125
+ &-content {
126
+ flex: 1;
127
+ }
128
+
129
+ &-title {
130
+ margin: 0;
131
+ font-size: 24px;
132
+ line-height: 32px;
133
+ font-weight: 400;
134
+ color: t.color('on-surface');
135
+ @include m.typography('headline-small');
136
+ }
137
+
138
+ &-subtitle {
139
+ margin: 4px 0 0 0;
140
+ @include m.typography('body-medium');
141
+ color: t.color('on-surface-variant');
142
+ }
143
+
144
+ &-close {
145
+ display: flex;
146
+ align-items: center;
147
+ justify-content: center;
148
+ width: 40px;
149
+ height: 40px;
150
+ margin: -8px -8px 0 0;
151
+ padding: 8px;
152
+ background: transparent;
153
+ border: none;
154
+ border-radius: 50%;
155
+ cursor: pointer;
156
+ color: t.color('on-surface-variant');
157
+
158
+ &:hover {
159
+ background-color: t.alpha('on-surface', 0.08);
160
+ }
161
+
162
+ &:focus {
163
+ outline: none;
164
+ background-color: t.alpha('on-surface', 0.12);
165
+ }
166
+
167
+ svg {
168
+ width: 24px;
169
+ height: 24px;
170
+ }
171
+ }
172
+ }
173
+
174
+ // Dialog content
175
+ .#{$component}-content {
176
+ padding: 16px 24px;
177
+ color: t.color('on-surface');
178
+ @include m.typography('body-medium');
179
+
180
+ p {
181
+ margin: 0 0 16px 0;
182
+
183
+ &:last-child {
184
+ margin-bottom: 0;
185
+ }
186
+ }
187
+ }
188
+
189
+ // Dialog footer
190
+ .#{$component}-footer {
191
+ display: flex;
192
+ align-items: center;
193
+ justify-content: flex-end;
194
+ padding: 24px;
195
+ gap: 8px;
196
+
197
+ &--left {
198
+ justify-content: flex-start;
199
+ }
200
+
201
+ &--center {
202
+ justify-content: center;
203
+ }
204
+
205
+ &--space-between {
206
+ justify-content: space-between;
207
+ }
208
+ }
209
+
210
+ // Dialog divider styling
211
+ .#{$component}-header-divider {
212
+ margin: 0;
213
+ }
214
+
215
+ .#{$component}-footer-divider {
216
+ margin: 0;
217
+ }
218
+
219
+ // Accessibility
220
+ @include m.reduced-motion {
221
+ .#{$component},
222
+ .#{$component}-overlay {
223
+ transition: none;
224
+ }
225
+ }
226
+
227
+ // Mobile responsiveness
228
+ @media (max-width: v.breakpoint('sm')) {
229
+ .#{$component} {
230
+ min-width: 280px;
231
+ width: calc(100% - 32px);
232
+ max-width: 100%;
233
+ margin: 16px;
234
+
235
+ &--fullscreen {
236
+ width: 100%;
237
+ height: 100%;
238
+ margin: 0;
239
+ }
240
+ }
241
+
242
+ .#{$component}-overlay {
243
+ padding: 16px;
244
+ align-items: flex-end;
245
+
246
+ &.#{$component}--fullscreen {
247
+ padding: 0;
248
+ }
249
+ }
250
+
251
+ // Adjust animations for mobile
252
+ .#{$component}--slide-up {
253
+ transform: translateY(100%);
254
+
255
+ &.#{$component}--visible {
256
+ transform: translateY(0);
257
+ }
258
+ }
259
+ }
@@ -0,0 +1,57 @@
1
+ // src/components/divider/_styles.scss
2
+
3
+ @use '../../styles/abstract/base' as base;
4
+ @use '../../styles/abstract/variables' as v;
5
+ @use '../../styles/abstract/functions' as f;
6
+ @use '../../styles/abstract/mixins' as m;
7
+ @use '../../styles/abstract/theme' as t;
8
+
9
+ $component: '#{base.$prefix}-divider';
10
+
11
+ .#{$component} {
12
+ // Base styles
13
+ display: block;
14
+ border: none;
15
+ margin: 0;
16
+ padding: 0;
17
+ background-color: t.color('outline-variant');
18
+
19
+ // Orientation variants
20
+ &--horizontal {
21
+ width: 100%;
22
+ height: 1px;
23
+ }
24
+
25
+ &--vertical {
26
+ height: 100%;
27
+ width: 1px;
28
+ display: inline-block;
29
+ }
30
+
31
+ // Variant styles (these set the base for the variants, specific insets are handled via JS)
32
+ &--full-width {
33
+ width: 100%;
34
+ }
35
+
36
+ &--inset {
37
+ // Base class for inset styles - specific margins are set via JS
38
+ }
39
+
40
+ &--middle-inset {
41
+ // Base class for middle inset styles - specific margins are set via JS
42
+ }
43
+
44
+ // Parent-child relationship context
45
+ .#{base.$prefix}-list & {
46
+ margin: 8px 0;
47
+ }
48
+
49
+ .#{base.$prefix}-card & {
50
+ margin: 8px 0;
51
+ }
52
+
53
+ // Dark theme support
54
+ :root[data-theme-mode="dark"] & {
55
+ // Dark theme color is handled through the CSS variable in theme
56
+ }
57
+ }