mtrl 0.2.5 → 0.2.7

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 (196) hide show
  1. package/index.ts +18 -0
  2. package/package.json +1 -1
  3. package/src/components/badge/_styles.scss +123 -115
  4. package/src/components/badge/api.ts +57 -59
  5. package/src/components/badge/badge.ts +16 -2
  6. package/src/components/badge/config.ts +65 -11
  7. package/src/components/badge/constants.ts +22 -12
  8. package/src/components/badge/features.ts +44 -40
  9. package/src/components/badge/types.ts +42 -30
  10. package/src/components/bottom-app-bar/_styles.scss +103 -0
  11. package/src/components/bottom-app-bar/bottom-app-bar.ts +196 -0
  12. package/src/components/bottom-app-bar/config.ts +73 -0
  13. package/src/components/bottom-app-bar/index.ts +11 -0
  14. package/src/components/bottom-app-bar/types.ts +108 -0
  15. package/src/components/button/_styles.scss +0 -66
  16. package/src/components/button/api.ts +5 -0
  17. package/src/components/button/button.ts +0 -2
  18. package/src/components/button/config.ts +5 -0
  19. package/src/components/button/constants.ts +0 -6
  20. package/src/components/button/index.ts +2 -2
  21. package/src/components/button/types.ts +7 -7
  22. package/src/components/card/_styles.scss +67 -25
  23. package/src/components/card/api.ts +54 -3
  24. package/src/components/card/card.ts +25 -6
  25. package/src/components/card/config.ts +189 -22
  26. package/src/components/card/constants.ts +20 -19
  27. package/src/components/card/content.ts +299 -2
  28. package/src/components/card/features.ts +158 -4
  29. package/src/components/card/index.ts +31 -9
  30. package/src/components/card/types.ts +166 -15
  31. package/src/components/checkbox/_styles.scss +0 -2
  32. package/src/components/chip/chip.ts +1 -9
  33. package/src/components/chip/constants.ts +0 -10
  34. package/src/components/chip/index.ts +1 -1
  35. package/src/components/chip/types.ts +1 -4
  36. package/src/components/datepicker/_styles.scss +358 -0
  37. package/src/components/datepicker/api.ts +272 -0
  38. package/src/components/datepicker/config.ts +144 -0
  39. package/src/components/datepicker/constants.ts +98 -0
  40. package/src/components/datepicker/datepicker.ts +346 -0
  41. package/src/components/datepicker/index.ts +9 -0
  42. package/src/components/datepicker/render.ts +452 -0
  43. package/src/components/datepicker/types.ts +268 -0
  44. package/src/components/datepicker/utils.ts +290 -0
  45. package/src/components/dialog/_styles.scss +174 -128
  46. package/src/components/dialog/api.ts +48 -13
  47. package/src/components/dialog/config.ts +9 -5
  48. package/src/components/dialog/dialog.ts +6 -3
  49. package/src/components/dialog/features.ts +290 -130
  50. package/src/components/dialog/types.ts +7 -4
  51. package/src/components/divider/_styles.scss +57 -0
  52. package/src/components/divider/config.ts +81 -0
  53. package/src/components/divider/divider.ts +37 -0
  54. package/src/components/divider/features.ts +207 -0
  55. package/src/components/divider/index.ts +5 -0
  56. package/src/components/divider/types.ts +55 -0
  57. package/src/components/extended-fab/_styles.scss +267 -0
  58. package/src/components/extended-fab/api.ts +141 -0
  59. package/src/components/extended-fab/config.ts +108 -0
  60. package/src/components/extended-fab/constants.ts +36 -0
  61. package/src/components/extended-fab/extended-fab.ts +125 -0
  62. package/src/components/extended-fab/index.ts +4 -0
  63. package/src/components/extended-fab/types.ts +287 -0
  64. package/src/components/fab/_styles.scss +225 -0
  65. package/src/components/fab/api.ts +97 -0
  66. package/src/components/fab/config.ts +94 -0
  67. package/src/components/fab/constants.ts +41 -0
  68. package/src/components/fab/fab.ts +67 -0
  69. package/src/components/fab/index.ts +4 -0
  70. package/src/components/fab/types.ts +234 -0
  71. package/src/components/navigation/_styles.scss +1 -0
  72. package/src/components/navigation/api.ts +78 -50
  73. package/src/components/navigation/features/items.ts +280 -0
  74. package/src/components/navigation/nav-item.ts +72 -23
  75. package/src/components/navigation/navigation.ts +54 -2
  76. package/src/components/navigation/types.ts +210 -188
  77. package/src/components/progress/_styles.scss +0 -65
  78. package/src/components/progress/config.ts +1 -2
  79. package/src/components/progress/constants.ts +0 -14
  80. package/src/components/progress/index.ts +1 -1
  81. package/src/components/progress/progress.ts +1 -4
  82. package/src/components/progress/types.ts +1 -4
  83. package/src/components/radios/_styles.scss +0 -45
  84. package/src/components/radios/api.ts +85 -60
  85. package/src/components/radios/config.ts +1 -2
  86. package/src/components/radios/constants.ts +0 -9
  87. package/src/components/radios/index.ts +1 -1
  88. package/src/components/radios/radio.ts +34 -11
  89. package/src/components/radios/radios.ts +2 -1
  90. package/src/components/radios/types.ts +1 -7
  91. package/src/components/search/_styles.scss +306 -0
  92. package/src/components/search/api.ts +203 -0
  93. package/src/components/search/config.ts +87 -0
  94. package/src/components/search/constants.ts +21 -0
  95. package/src/components/search/features/index.ts +4 -0
  96. package/src/components/search/features/search.ts +718 -0
  97. package/src/components/search/features/states.ts +165 -0
  98. package/src/components/search/features/structure.ts +198 -0
  99. package/src/components/search/index.ts +10 -0
  100. package/src/components/search/search.ts +52 -0
  101. package/src/components/search/types.ts +163 -0
  102. package/src/components/segmented-button/_styles.scss +117 -0
  103. package/src/components/segmented-button/config.ts +67 -0
  104. package/src/components/segmented-button/constants.ts +42 -0
  105. package/src/components/segmented-button/index.ts +4 -0
  106. package/src/components/segmented-button/segment.ts +155 -0
  107. package/src/components/segmented-button/segmented-button.ts +250 -0
  108. package/src/components/segmented-button/types.ts +219 -0
  109. package/src/components/slider/_styles.scss +221 -168
  110. package/src/components/slider/accessibility.md +59 -0
  111. package/src/components/slider/api.ts +41 -120
  112. package/src/components/slider/config.ts +51 -49
  113. package/src/components/slider/features/handlers.ts +495 -0
  114. package/src/components/slider/features/index.ts +1 -2
  115. package/src/components/slider/features/slider.ts +66 -84
  116. package/src/components/slider/features/states.ts +195 -0
  117. package/src/components/slider/features/structure.ts +141 -184
  118. package/src/components/slider/features/ui.ts +150 -201
  119. package/src/components/slider/index.ts +2 -11
  120. package/src/components/slider/slider.ts +9 -12
  121. package/src/components/slider/types.ts +39 -24
  122. package/src/components/switch/_styles.scss +0 -2
  123. package/src/components/tabs/_styles.scss +346 -154
  124. package/src/components/tabs/api.ts +178 -400
  125. package/src/components/tabs/config.ts +46 -52
  126. package/src/components/tabs/constants.ts +85 -8
  127. package/src/components/tabs/features.ts +403 -0
  128. package/src/components/tabs/index.ts +60 -3
  129. package/src/components/tabs/indicator.ts +285 -0
  130. package/src/components/tabs/responsive.ts +144 -0
  131. package/src/components/tabs/scroll-indicators.ts +149 -0
  132. package/src/components/tabs/state.ts +186 -0
  133. package/src/components/tabs/tab-api.ts +258 -0
  134. package/src/components/tabs/tab.ts +255 -0
  135. package/src/components/tabs/tabs.ts +50 -31
  136. package/src/components/tabs/types.ts +332 -128
  137. package/src/components/tabs/utils.ts +107 -0
  138. package/src/components/textfield/_styles.scss +0 -98
  139. package/src/components/textfield/config.ts +2 -3
  140. package/src/components/textfield/constants.ts +0 -14
  141. package/src/components/textfield/index.ts +2 -2
  142. package/src/components/textfield/textfield.ts +0 -2
  143. package/src/components/textfield/types.ts +1 -4
  144. package/src/components/timepicker/README.md +277 -0
  145. package/src/components/timepicker/_styles.scss +451 -0
  146. package/src/components/timepicker/api.ts +632 -0
  147. package/src/components/timepicker/clockdial.ts +482 -0
  148. package/src/components/timepicker/config.ts +130 -0
  149. package/src/components/timepicker/constants.ts +138 -0
  150. package/src/components/timepicker/index.ts +8 -0
  151. package/src/components/timepicker/render.ts +613 -0
  152. package/src/components/timepicker/timepicker.ts +117 -0
  153. package/src/components/timepicker/types.ts +336 -0
  154. package/src/components/timepicker/utils.ts +241 -0
  155. package/src/components/top-app-bar/_styles.scss +225 -0
  156. package/src/components/top-app-bar/config.ts +83 -0
  157. package/src/components/top-app-bar/index.ts +11 -0
  158. package/src/components/top-app-bar/top-app-bar.ts +316 -0
  159. package/src/components/top-app-bar/types.ts +140 -0
  160. package/src/core/build/_ripple.scss +6 -6
  161. package/src/core/build/ripple.ts +72 -95
  162. package/src/core/compose/component.ts +1 -1
  163. package/src/core/compose/features/badge.ts +79 -0
  164. package/src/core/compose/features/icon.ts +3 -1
  165. package/src/core/compose/features/index.ts +3 -1
  166. package/src/core/compose/features/ripple.ts +4 -1
  167. package/src/core/compose/features/textlabel.ts +26 -2
  168. package/src/core/dom/create.ts +5 -0
  169. package/src/index.ts +9 -0
  170. package/src/styles/abstract/_theme.scss +115 -3
  171. package/src/styles/themes/_autumn.scss +21 -0
  172. package/src/styles/themes/_base-theme.scss +61 -0
  173. package/src/styles/themes/_baseline.scss +58 -0
  174. package/src/styles/themes/_bluekhaki.scss +125 -0
  175. package/src/styles/themes/_brownbeige.scss +125 -0
  176. package/src/styles/themes/_browngreen.scss +125 -0
  177. package/src/styles/themes/_forest.scss +6 -0
  178. package/src/styles/themes/_greenbeige.scss +125 -0
  179. package/src/styles/themes/_material.scss +125 -0
  180. package/src/styles/themes/_ocean.scss +6 -0
  181. package/src/styles/themes/_sageivory.scss +125 -0
  182. package/src/styles/themes/_spring.scss +6 -0
  183. package/src/styles/themes/_summer.scss +5 -0
  184. package/src/styles/themes/_sunset.scss +5 -0
  185. package/src/styles/themes/_tealcaramel.scss +125 -0
  186. package/src/styles/themes/_winter.scss +6 -0
  187. package/src/components/card/actions.ts +0 -48
  188. package/src/components/card/header.ts +0 -88
  189. package/src/components/card/media.ts +0 -52
  190. package/src/components/navigation/features/items.js +0 -192
  191. package/src/components/slider/features/appearance.ts +0 -94
  192. package/src/components/slider/features/disabled.ts +0 -43
  193. package/src/components/slider/features/events.ts +0 -164
  194. package/src/components/slider/features/interactions.ts +0 -261
  195. package/src/components/slider/features/keyboard.ts +0 -112
  196. package/src/core/collection/adapters/mongodb.js +0 -232
@@ -0,0 +1,451 @@
1
+ // src/components/timepicker/_styles.scss
2
+ @use 'sass:map';
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}-time-picker';
10
+
11
+ .#{$component} {
12
+ // Base styles
13
+ position: relative;
14
+ display: inline-block;
15
+
16
+ &-modal {
17
+ position: fixed;
18
+ top: 0;
19
+ left: 0;
20
+ width: 100%;
21
+ height: 100%;
22
+ background-color: rgba(0, 0, 0, 0.4);
23
+ display: flex;
24
+ align-items: center;
25
+ justify-content: center;
26
+ z-index: map.get(v.$z-index, 'modal');
27
+ opacity: 0;
28
+ transition: opacity 0.25s cubic-bezier(0.4, 0.0, 0.2, 1);
29
+
30
+ &.active {
31
+ opacity: 1;
32
+ }
33
+ }
34
+
35
+ &-dialog {
36
+ position: relative;
37
+ display: flex;
38
+ flex-direction: column;
39
+ min-width: 280px;
40
+ max-width: 328px;
41
+ max-height: 520px;
42
+ background-color: t.color('surface-container-high');
43
+ color: t.color('on-surface');
44
+ border-radius: f.get-shape('extra-large');
45
+ @include m.elevation(3);
46
+ transform: translateY(20px) scale(0.9);
47
+ opacity: 0;
48
+ transition: transform 0.25s cubic-bezier(0.4, 0.0, 0.2, 1), opacity 0.25s cubic-bezier(0.4, 0.0, 0.2, 1);
49
+
50
+ &.active {
51
+ transform: translateY(0) scale(1);
52
+ opacity: 1;
53
+ }
54
+
55
+ // State layer for elevations
56
+ &::before {
57
+ content: '';
58
+ position: absolute;
59
+ top: 0;
60
+ left: 0;
61
+ width: 100%;
62
+ height: 100%;
63
+ border-radius: inherit;
64
+ background-color: t.color('surface-tint');
65
+ opacity: 0.05;
66
+ pointer-events: none;
67
+ }
68
+
69
+ // Orientations
70
+ &--vertical {
71
+ // min-height: 460px;
72
+
73
+ .#{$component}-input-container {
74
+ flex-direction: row;
75
+ }
76
+
77
+ .#{$component}-period {
78
+ flex-direction: column;
79
+ width: 52px;
80
+ height: 80px;
81
+ margin-left: 12px;
82
+ }
83
+ }
84
+
85
+ &--horizontal {
86
+ min-width: 520px;
87
+ min-height: 360px;
88
+
89
+ .#{$component}-content {
90
+ flex-direction: row;
91
+ align-items: center;
92
+ }
93
+
94
+ .#{$component}-input-container {
95
+ flex-direction: row;
96
+ }
97
+
98
+ .#{$component}-period {
99
+ flex-direction: column;
100
+ width: 52px;
101
+ height: 80px;
102
+ margin-left: 12px;
103
+ }
104
+
105
+ .#{$component}-dial {
106
+ margin-left: 24px;
107
+ }
108
+ }
109
+
110
+ // Time formats
111
+ &--24h {
112
+ .#{$component}-period {
113
+ display: none;
114
+ }
115
+ }
116
+ }
117
+
118
+ // Title
119
+ &-title {
120
+ padding: 24px 24px 16px;
121
+ @include m.typography('title-small');
122
+ color: t.color('on-surface-variant');
123
+ }
124
+
125
+ // Content container
126
+ &-content {
127
+ flex: 1;
128
+ padding: 0 24px;
129
+ overflow: hidden;
130
+ display: flex;
131
+ flex-direction: column;
132
+ align-items: center;
133
+ }
134
+
135
+ // Input container for both modes
136
+ &-input-container {
137
+ display: flex;
138
+ align-items: center;
139
+ justify-content: center;
140
+ margin: 0 0 24px 0;
141
+ }
142
+
143
+ // Input field containers
144
+ &-time-input-field {
145
+ position: relative;
146
+ display: flex;
147
+ flex-direction: column;
148
+ }
149
+
150
+ // Time input styles - shared for both modes
151
+ &-hours,
152
+ &-minutes,
153
+ &-seconds {
154
+ display: flex;
155
+ align-items: center;
156
+ justify-content: center;
157
+ width: 96px;
158
+ height: 80px;
159
+ font-size: 3.5rem;
160
+ font-weight: 400;
161
+ border: none;
162
+ background: transparent;
163
+ cursor: pointer;
164
+
165
+ &[data-active="true"] {
166
+ color: t.color('primary');
167
+ }
168
+
169
+ // Style for HTML input elements
170
+ &[type="number"] {
171
+ font-size: 3.5rem;
172
+ font-weight: 400;
173
+ width: 96px;
174
+ height: 76px;
175
+ text-align: center;
176
+ border: none;
177
+ background-color: t.color('surface-container-highest');
178
+ border-radius: f.get-shape('small');
179
+ padding: 0;
180
+ margin: 0;
181
+ color: t.color('on-surface');
182
+
183
+ &:focus {
184
+ outline: none;
185
+ box-shadow: 0 0 0 2px t.color('primary');
186
+ }
187
+
188
+ // Remove spinner arrows
189
+ -moz-appearance: textfield;
190
+ &::-webkit-outer-spin-button,
191
+ &::-webkit-inner-spin-button {
192
+ -webkit-appearance: none;
193
+ margin: 0;
194
+ }
195
+ }
196
+
197
+ // When in dial mode, add highlighting for active element
198
+ &:not([type="number"]) {
199
+ &[data-active="true"] {
200
+ color: t.color('primary');
201
+ background-color: t.alpha('primary', 0.1);
202
+ border-radius: f.get-shape('small');
203
+ }
204
+
205
+ &:hover {
206
+ background-color: t.alpha('on-surface', 0.04);
207
+ border-radius: f.get-shape('small');
208
+ }
209
+ }
210
+ }
211
+
212
+ // Separator between hours, minutes, seconds
213
+ &-separator {
214
+ font-size: 3.5rem;
215
+ font-weight: 400;
216
+ margin: 0 4px;
217
+ color: t.color('on-surface-variant');
218
+ }
219
+
220
+ // Period selector (AM/PM)
221
+ &-period {
222
+ display: flex;
223
+ flex-direction: column;
224
+ justify-content: space-between;
225
+ background-color: t.color('surface-container-highest');
226
+ border-radius: f.get-shape('small');
227
+ overflow: hidden;
228
+ border: 1px solid t.color('outline-variant');
229
+ margin-left: 16px;
230
+
231
+ &-am,
232
+ &-pm {
233
+ display: flex;
234
+ align-items: center;
235
+ justify-content: center;
236
+ width: 100%;
237
+ height: 50%;
238
+ padding: 8px;
239
+ cursor: pointer;
240
+ @include m.typography('title-medium');
241
+
242
+ // Improve touch target sizes on mobile
243
+ @media (max-width: 599px) {
244
+ min-height: 48px;
245
+ }
246
+
247
+ // Improve focus styles for keyboard navigation
248
+ &:focus-visible {
249
+ outline: 2px solid t.color('primary');
250
+ outline-offset: 2px;
251
+ }
252
+
253
+ &:hover {
254
+ background-color: t.alpha('on-surface', 0.08);
255
+ }
256
+
257
+ &:active {
258
+ background-color: t.alpha('on-surface', 0.12);
259
+ }
260
+ }
261
+
262
+ &--selected {
263
+ background-color: t.color('primary-container');
264
+ color: t.color('on-primary-container');
265
+
266
+ &:hover {
267
+ background-color: t.color('primary-container');
268
+ }
269
+ }
270
+ }
271
+
272
+ // Clock dial
273
+ &-dial {
274
+ display: flex;
275
+ align-items: center;
276
+ justify-content: center;
277
+ position: relative;
278
+ margin: 0 auto 24px;
279
+ width: 256px;
280
+ height: 256px;
281
+
282
+ &-canvas {
283
+ display: block;
284
+ width: 100%;
285
+ height: 100%;
286
+ border-radius: 50%;
287
+ cursor: pointer;
288
+ touch-action: none; // Prevent scrolling when touching the canvas
289
+ -webkit-tap-highlight-color: transparent; // Remove highlight on tap (mobile)
290
+
291
+ // Add transition for smooth animations
292
+ transition: transform 0.2s ease;
293
+
294
+ &:focus {
295
+ outline: none;
296
+ box-shadow: 0 0 0 2px t.color('primary');
297
+ }
298
+ }
299
+ }
300
+
301
+ // Actions footer
302
+ &-actions {
303
+ display: flex;
304
+ align-items: center;
305
+ justify-content: space-between;
306
+ padding: 16px 24px 24px;
307
+ }
308
+
309
+ &-toggle-type {
310
+ background: transparent;
311
+ border: none;
312
+ padding: 8px;
313
+ border-radius: 50%;
314
+ cursor: pointer;
315
+ color: t.color('on-surface-variant');
316
+
317
+ // Improve touch target sizes on mobile
318
+ @media (max-width: 599px) {
319
+ min-height: 48px;
320
+ min-width: 48px;
321
+ }
322
+
323
+ // Improve focus styles for keyboard navigation
324
+ &:focus-visible {
325
+ outline: 2px solid t.color('primary');
326
+ outline-offset: 2px;
327
+ }
328
+
329
+ &:hover {
330
+ background-color: t.alpha('on-surface', 0.08);
331
+ }
332
+
333
+ &:active {
334
+ background-color: t.alpha('on-surface', 0.12);
335
+ }
336
+
337
+ svg {
338
+ width: 24px;
339
+ height: 24px;
340
+ display: block;
341
+ }
342
+ }
343
+
344
+ &-action-buttons {
345
+ display: flex;
346
+ gap: 8px;
347
+ }
348
+
349
+ &-cancel,
350
+ &-confirm {
351
+ padding: 10px 12px;
352
+ border: none;
353
+ background: transparent;
354
+ border-radius: f.get-shape('small');
355
+ cursor: pointer;
356
+ @include m.typography('label-large');
357
+ color: t.color('primary');
358
+
359
+ // Improve touch target sizes on mobile
360
+ @media (max-width: 599px) {
361
+ min-height: 48px;
362
+ padding: 12px 16px;
363
+ }
364
+
365
+ // Improve focus styles for keyboard navigation
366
+ &:focus-visible {
367
+ outline: 2px solid t.color('primary');
368
+ outline-offset: 2px;
369
+ }
370
+
371
+ &:hover {
372
+ background-color: t.alpha('primary', 0.08);
373
+ }
374
+
375
+ &:active {
376
+ background-color: t.alpha('primary', 0.12);
377
+ }
378
+ }
379
+
380
+ // Responsive adjustments
381
+ @media (max-width: 599px) {
382
+ &-dialog {
383
+ width: 100%;
384
+ max-width: 100%;
385
+ min-height: 460px;
386
+ border-radius: 0;
387
+ margin: 0;
388
+
389
+ &--horizontal {
390
+ flex-direction: column;
391
+
392
+ .#{$component}-content {
393
+ flex-direction: column;
394
+ }
395
+
396
+ .#{$component}-dial {
397
+ margin-left: 0;
398
+ }
399
+ }
400
+ }
401
+
402
+ &-input-container {
403
+ margin: 16px 0;
404
+ }
405
+
406
+ // Smaller inputs on mobile
407
+ &-hours,
408
+ &-minutes,
409
+ &-seconds {
410
+ width: 80px;
411
+ height: 76px;
412
+ font-size: 3rem;
413
+
414
+ &[type="number"] {
415
+ width: 80px;
416
+ height: 76px;
417
+ font-size: 3rem;
418
+ }
419
+ }
420
+ }
421
+
422
+ // Dark mode adjustments
423
+ @media (prefers-color-scheme: dark) {
424
+ &-dialog {
425
+ &::before {
426
+ opacity: 0.08;
427
+ }
428
+ }
429
+
430
+ &-hours,
431
+ &-minutes,
432
+ &-seconds {
433
+ &[type="number"] {
434
+ background-color: t.alpha('on-surface', 0.05);
435
+ }
436
+ }
437
+ }
438
+
439
+ // Accessibility
440
+ &-sr-only {
441
+ position: absolute;
442
+ width: 1px;
443
+ height: 1px;
444
+ padding: 0;
445
+ margin: -1px;
446
+ overflow: hidden;
447
+ clip: rect(0, 0, 0, 0);
448
+ white-space: nowrap;
449
+ border: 0;
450
+ }
451
+ }