mtrl 0.2.6 → 0.2.8

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 (226) hide show
  1. package/demo/build.ts +349 -0
  2. package/demo/index.html +110 -0
  3. package/demo/main.js +448 -0
  4. package/demo/styles.css +239 -0
  5. package/index.ts +18 -0
  6. package/package.json +14 -3
  7. package/server.ts +86 -0
  8. package/src/components/badge/api.ts +70 -63
  9. package/src/components/badge/badge.ts +16 -2
  10. package/src/components/badge/config.ts +66 -13
  11. package/src/components/badge/features.ts +51 -42
  12. package/src/components/badge/index.ts +27 -2
  13. package/src/components/badge/types.ts +62 -30
  14. package/src/components/bottom-app-bar/bottom-app-bar.ts +154 -0
  15. package/src/components/bottom-app-bar/config.ts +29 -0
  16. package/src/components/bottom-app-bar/index.ts +17 -0
  17. package/src/components/bottom-app-bar/types.ts +114 -0
  18. package/src/components/button/api.ts +5 -0
  19. package/src/components/button/button.ts +0 -1
  20. package/src/components/button/config.ts +6 -2
  21. package/src/components/button/index.ts +10 -2
  22. package/src/components/button/types.ts +20 -2
  23. package/src/components/card/card.ts +13 -25
  24. package/src/components/card/config.ts +83 -30
  25. package/src/components/card/content.ts +8 -10
  26. package/src/components/card/features.ts +4 -3
  27. package/src/components/card/index.ts +29 -2
  28. package/src/components/card/types.ts +33 -22
  29. package/src/components/checkbox/config.ts +3 -4
  30. package/src/components/checkbox/index.ts +1 -2
  31. package/src/components/checkbox/types.ts +12 -3
  32. package/src/components/chip/api.ts +170 -221
  33. package/src/components/chip/chip.ts +34 -302
  34. package/src/components/chip/config.ts +1 -2
  35. package/src/components/chip/index.ts +10 -2
  36. package/src/components/chip/types.ts +224 -35
  37. package/src/components/datepicker/api.ts +265 -0
  38. package/src/components/datepicker/config.ts +141 -0
  39. package/src/components/datepicker/datepicker.ts +341 -0
  40. package/src/components/datepicker/index.ts +12 -0
  41. package/src/components/datepicker/render.ts +450 -0
  42. package/src/components/datepicker/types.ts +397 -0
  43. package/src/components/datepicker/utils.ts +289 -0
  44. package/src/components/dialog/api.ts +55 -21
  45. package/src/components/dialog/config.ts +12 -9
  46. package/src/components/dialog/dialog.ts +6 -3
  47. package/src/components/dialog/features.ts +345 -151
  48. package/src/components/dialog/index.ts +38 -8
  49. package/src/components/dialog/types.ts +40 -14
  50. package/src/components/divider/config.ts +81 -0
  51. package/src/components/divider/divider.ts +37 -0
  52. package/src/components/divider/features.ts +207 -0
  53. package/src/components/divider/index.ts +9 -0
  54. package/src/components/divider/types.ts +55 -0
  55. package/src/components/extended-fab/api.ts +141 -0
  56. package/src/components/extended-fab/config.ts +112 -0
  57. package/src/components/extended-fab/extended-fab.ts +125 -0
  58. package/src/components/extended-fab/index.ts +9 -0
  59. package/src/components/extended-fab/types.ts +304 -0
  60. package/src/components/fab/api.ts +97 -0
  61. package/src/components/fab/config.ts +93 -0
  62. package/src/components/fab/fab.ts +67 -0
  63. package/src/components/fab/index.ts +9 -0
  64. package/src/components/fab/types.ts +251 -0
  65. package/src/components/list/config.ts +4 -5
  66. package/src/components/list/features.ts +6 -7
  67. package/src/components/list/index.ts +7 -9
  68. package/src/components/list/list-item.ts +12 -13
  69. package/src/components/list/types.ts +50 -5
  70. package/src/components/list/utils.ts +30 -3
  71. package/src/components/menu/features/items-manager.ts +9 -9
  72. package/src/components/menu/features/positioning.ts +7 -7
  73. package/src/components/menu/features/visibility.ts +7 -7
  74. package/src/components/menu/index.ts +7 -9
  75. package/src/components/menu/menu-item.ts +6 -6
  76. package/src/components/menu/menu.ts +22 -0
  77. package/src/components/menu/types.ts +29 -10
  78. package/src/components/menu/utils.ts +67 -0
  79. package/src/components/navigation/api.ts +78 -50
  80. package/src/components/navigation/config.ts +22 -10
  81. package/src/components/navigation/features/items.ts +284 -0
  82. package/src/components/navigation/index.ts +0 -6
  83. package/src/components/navigation/nav-item.ts +70 -33
  84. package/src/components/navigation/navigation.ts +53 -3
  85. package/src/components/navigation/types.ts +117 -70
  86. package/src/components/progress/api.ts +2 -3
  87. package/src/components/progress/config.ts +2 -3
  88. package/src/components/progress/index.ts +0 -1
  89. package/src/components/progress/progress.ts +1 -2
  90. package/src/components/progress/types.ts +186 -33
  91. package/src/components/radios/config.ts +1 -1
  92. package/src/components/radios/index.ts +0 -1
  93. package/src/components/radios/types.ts +0 -7
  94. package/src/components/search/api.ts +203 -0
  95. package/src/components/search/config.ts +86 -0
  96. package/src/components/search/features/index.ts +4 -0
  97. package/src/components/search/features/search.ts +717 -0
  98. package/src/components/search/features/states.ts +169 -0
  99. package/src/components/search/features/structure.ts +197 -0
  100. package/src/components/search/index.ts +7 -0
  101. package/src/components/search/search.ts +52 -0
  102. package/src/components/search/types.ts +175 -0
  103. package/src/components/segmented-button/config.ts +80 -0
  104. package/src/components/segmented-button/index.ts +4 -0
  105. package/src/components/segmented-button/segment.ts +154 -0
  106. package/src/components/segmented-button/segmented-button.ts +249 -0
  107. package/src/components/segmented-button/types.ts +254 -0
  108. package/src/components/slider/accessibility.md +5 -5
  109. package/src/components/slider/api.ts +41 -120
  110. package/src/components/slider/config.ts +51 -47
  111. package/src/components/slider/features/handlers.ts +495 -0
  112. package/src/components/slider/features/index.ts +1 -2
  113. package/src/components/slider/features/slider.ts +66 -84
  114. package/src/components/slider/features/states.ts +195 -0
  115. package/src/components/slider/features/structure.ts +136 -206
  116. package/src/components/slider/features/ui.ts +145 -206
  117. package/src/components/slider/index.ts +2 -11
  118. package/src/components/slider/slider.ts +9 -12
  119. package/src/components/slider/types.ts +67 -26
  120. package/src/components/snackbar/config.ts +2 -3
  121. package/src/components/snackbar/constants.ts +0 -32
  122. package/src/components/snackbar/index.ts +0 -1
  123. package/src/components/snackbar/position.ts +9 -1
  124. package/src/components/snackbar/types.ts +122 -46
  125. package/src/components/switch/config.ts +2 -3
  126. package/src/components/switch/index.ts +0 -1
  127. package/src/components/switch/types.ts +3 -2
  128. package/src/components/tabs/config.ts +3 -4
  129. package/src/components/tabs/features.ts +4 -2
  130. package/src/components/tabs/index.ts +0 -15
  131. package/src/components/tabs/indicator.ts +73 -13
  132. package/src/components/tabs/tab-api.ts +12 -4
  133. package/src/components/tabs/tab.ts +18 -6
  134. package/src/components/tabs/types.ts +23 -5
  135. package/src/components/textfield/config.ts +2 -3
  136. package/src/components/textfield/index.ts +0 -1
  137. package/src/components/textfield/types.ts +17 -3
  138. package/src/components/timepicker/README.md +277 -0
  139. package/src/components/timepicker/api.ts +632 -0
  140. package/src/components/timepicker/clockdial.ts +482 -0
  141. package/src/components/timepicker/config.ts +228 -0
  142. package/src/components/timepicker/index.ts +3 -0
  143. package/src/components/timepicker/render.ts +613 -0
  144. package/src/components/timepicker/timepicker.ts +117 -0
  145. package/src/components/timepicker/types.ts +336 -0
  146. package/src/components/timepicker/utils.ts +241 -0
  147. package/src/components/tooltip/api.ts +1 -1
  148. package/src/components/tooltip/config.ts +27 -6
  149. package/src/components/tooltip/index.ts +0 -1
  150. package/src/components/tooltip/types.ts +13 -3
  151. package/src/components/top-app-bar/config.ts +83 -0
  152. package/src/components/top-app-bar/index.ts +11 -0
  153. package/src/components/top-app-bar/top-app-bar.ts +316 -0
  154. package/src/components/top-app-bar/types.ts +140 -0
  155. package/src/core/build/_ripple.scss +6 -6
  156. package/src/core/build/ripple.ts +72 -95
  157. package/src/core/compose/features/icon.ts +3 -1
  158. package/src/core/compose/features/ripple.ts +4 -1
  159. package/src/core/compose/features/textlabel.ts +23 -2
  160. package/src/core/dom/create.ts +5 -0
  161. package/src/index.ts +9 -0
  162. package/src/styles/abstract/_theme.scss +9 -1
  163. package/src/styles/components/_badge.scss +182 -0
  164. package/src/styles/components/_bottom-app-bar.scss +103 -0
  165. package/src/{components/button/_styles.scss → styles/components/_button.scss} +0 -10
  166. package/src/{components/checkbox/_styles.scss → styles/components/_checkbox.scss} +0 -2
  167. package/src/styles/components/_datepicker.scss +358 -0
  168. package/src/styles/components/_dialog.scss +259 -0
  169. package/src/styles/components/_divider.scss +57 -0
  170. package/src/styles/components/_extended-fab.scss +267 -0
  171. package/src/styles/components/_fab.scss +225 -0
  172. package/src/{components/navigation/_styles.scss → styles/components/_navigation.scss} +1 -0
  173. package/src/styles/components/_search.scss +306 -0
  174. package/src/styles/components/_segmented-button.scss +117 -0
  175. package/src/{components/slider/_styles.scss → styles/components/_slider.scss} +83 -24
  176. package/src/{components/switch/_styles.scss → styles/components/_switch.scss} +0 -2
  177. package/src/{components/tabs/_styles.scss → styles/components/_tabs.scss} +95 -33
  178. package/src/{components/textfield/_styles.scss → styles/components/_textfield.scss} +70 -67
  179. package/src/styles/components/_timepicker.scss +451 -0
  180. package/src/styles/components/_top-app-bar.scss +225 -0
  181. package/src/styles/main.scss +98 -49
  182. package/src/styles/themes/_autumn.scss +21 -0
  183. package/src/styles/themes/_base-theme.scss +61 -0
  184. package/src/styles/themes/_baseline.scss +58 -0
  185. package/src/styles/themes/_bluekhaki.scss +125 -0
  186. package/src/styles/themes/_brownbeige.scss +125 -0
  187. package/src/styles/themes/_browngreen.scss +125 -0
  188. package/src/styles/themes/_forest.scss +6 -0
  189. package/src/styles/themes/_greenbeige.scss +125 -0
  190. package/src/styles/themes/_material.scss +125 -0
  191. package/src/styles/themes/_ocean.scss +6 -0
  192. package/src/styles/themes/_sageivory.scss +125 -0
  193. package/src/styles/themes/_spring.scss +6 -0
  194. package/src/styles/themes/_summer.scss +5 -0
  195. package/src/styles/themes/_sunset.scss +5 -0
  196. package/src/styles/themes/_tealcaramel.scss +125 -0
  197. package/src/styles/themes/_winter.scss +6 -0
  198. package/src/components/badge/_styles.scss +0 -174
  199. package/src/components/badge/constants.ts +0 -30
  200. package/src/components/button/constants.ts +0 -11
  201. package/src/components/card/constants.ts +0 -84
  202. package/src/components/dialog/_styles.scss +0 -213
  203. package/src/components/dialog/constants.ts +0 -32
  204. package/src/components/menu/constants.ts +0 -154
  205. package/src/components/navigation/constants.ts +0 -200
  206. package/src/components/navigation/features/items.js +0 -192
  207. package/src/components/progress/constants.ts +0 -29
  208. package/src/components/slider/features/appearance.ts +0 -94
  209. package/src/components/slider/features/disabled.ts +0 -68
  210. package/src/components/slider/features/events.ts +0 -164
  211. package/src/components/slider/features/interactions.ts +0 -396
  212. package/src/components/slider/features/keyboard.ts +0 -233
  213. package/src/components/switch/constants.ts +0 -80
  214. package/src/components/tabs/constants.ts +0 -89
  215. package/src/core/collection/adapters/mongodb.js +0 -232
  216. /package/src/{components/card/_styles.scss → styles/components/_card.scss} +0 -0
  217. /package/src/{components/carousel/_styles.scss → styles/components/_carousel.scss} +0 -0
  218. /package/src/{components/chip/_styles.scss → styles/components/_chip.scss} +0 -0
  219. /package/src/{components/list/_styles.scss → styles/components/_list.scss} +0 -0
  220. /package/src/{components/menu/_styles.scss → styles/components/_menu.scss} +0 -0
  221. /package/src/{components/progress/_styles.scss → styles/components/_progress.scss} +0 -0
  222. /package/src/{components/radios/_styles.scss → styles/components/_radios.scss} +0 -0
  223. /package/src/{components/sheet/_styles.scss → styles/components/_sheet.scss} +0 -0
  224. /package/src/{components/snackbar/_styles.scss → styles/components/_snackbar.scss} +0 -0
  225. /package/src/{components/tooltip/_styles.scss → styles/components/_tooltip.scss} +0 -0
  226. /package/src/styles/utilities/{_color.scss → _colors.scss} +0 -0
@@ -0,0 +1,267 @@
1
+ // src/components/extended-fab/_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}-extended-fab';
9
+
10
+ .#{$component} {
11
+ // Base styles
12
+ position: relative;
13
+ display: inline-flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ border: none;
17
+ background-color: t.color('primary-container');
18
+ color: t.color('on-primary-container');
19
+ font: inherit;
20
+ text-decoration: none;
21
+ cursor: pointer;
22
+ user-select: none;
23
+ vertical-align: middle;
24
+ appearance: none;
25
+ overflow: hidden;
26
+
27
+ // Extended FAB uses elevation in all variants
28
+ @include m.elevation(3);
29
+
30
+ // Transitions for all property changes including collapse/expand
31
+ @include m.motion-transition(
32
+ transform,
33
+ box-shadow,
34
+ background-color,
35
+ color,
36
+ width,
37
+ border-radius,
38
+ padding
39
+ );
40
+
41
+ // Focus styles
42
+ &:focus {
43
+ outline: none;
44
+ }
45
+
46
+ &:focus-visible {
47
+ outline: 2px solid t.color('outline');
48
+ outline-offset: 2px;
49
+ }
50
+
51
+ // Extended FAB dimensions (56dp height, min-width 80dp)
52
+ height: 56px;
53
+ min-width: 80px;
54
+ padding: 0 16px;
55
+ border-radius: f.get-shape('large'); // 16px corners
56
+
57
+ // Flexbox layout for icon and text
58
+ display: flex;
59
+ flex-direction: row;
60
+ align-items: center;
61
+ gap: 8px;
62
+
63
+ // Text styles
64
+ &-text {
65
+ @include m.typography('label-large');
66
+ white-space: nowrap;
67
+ overflow: hidden;
68
+ text-overflow: ellipsis;
69
+ }
70
+
71
+ // Icon sizing and positioning
72
+ &-icon {
73
+ display: inline-flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ width: 24px;
77
+ height: 24px;
78
+ flex-shrink: 0;
79
+
80
+ svg {
81
+ width: 24px;
82
+ height: 24px;
83
+ }
84
+ }
85
+
86
+ // Width variants
87
+ &--fixed {
88
+ // Default behavior (width based on content)
89
+ }
90
+
91
+ &--fluid {
92
+ width: 100%;
93
+ justify-content: center;
94
+ }
95
+
96
+ // RTL support for icon positioning
97
+ html[dir="rtl"] & {
98
+ .#{$component}-icon {
99
+ order: 1;
100
+ }
101
+
102
+ .#{$component}-text {
103
+ order: 0;
104
+ }
105
+ }
106
+
107
+ // Color variants - primary is the default
108
+
109
+ // Primary variant (default)
110
+ &--primary {
111
+ background-color: t.color('primary-container');
112
+ color: t.color('on-primary-container');
113
+
114
+ &:hover {
115
+ @include m.state-layer(t.color('on-primary-container'), 'hover');
116
+ }
117
+
118
+ &:active {
119
+ @include m.state-layer(t.color('on-primary-container'), 'pressed');
120
+ @include m.elevation(1);
121
+ }
122
+ }
123
+
124
+ // Secondary variant
125
+ &--secondary {
126
+ background-color: t.color('secondary-container');
127
+ color: t.color('on-secondary-container');
128
+
129
+ &:hover {
130
+ @include m.state-layer(t.color('on-secondary-container'), 'hover');
131
+ }
132
+
133
+ &:active {
134
+ @include m.state-layer(t.color('on-secondary-container'), 'pressed');
135
+ @include m.elevation(1);
136
+ }
137
+ }
138
+
139
+ // Tertiary variant
140
+ &--tertiary {
141
+ background-color: t.color('tertiary-container');
142
+ color: t.color('on-tertiary-container');
143
+
144
+ &:hover {
145
+ @include m.state-layer(t.color('on-tertiary-container'), 'hover');
146
+ }
147
+
148
+ &:active {
149
+ @include m.state-layer(t.color('on-tertiary-container'), 'pressed');
150
+ @include m.elevation(1);
151
+ }
152
+ }
153
+
154
+ // Surface variant
155
+ &--surface {
156
+ background-color: t.color('surface');
157
+ color: t.color('primary');
158
+
159
+ &:hover {
160
+ @include m.state-layer(t.color('primary'), 'hover');
161
+ }
162
+
163
+ &:active {
164
+ @include m.state-layer(t.color('primary'), 'pressed');
165
+ @include m.elevation(1);
166
+ }
167
+ }
168
+
169
+ // Collapsed state (transforms into regular FAB)
170
+ &--collapsed {
171
+ width: 56px;
172
+ min-width: 56px;
173
+ border-radius: 50%;
174
+ padding: 0;
175
+
176
+ .#{$component}-text {
177
+ // Hide text but keep it accessible to screen readers
178
+
179
+ display: none;
180
+ opacity: 0;
181
+ width: 0;
182
+ overflow: hidden;
183
+ }
184
+
185
+ .#{$component}-icon {
186
+ margin: 0;
187
+ }
188
+ }
189
+
190
+ // Lowered state (when pressed)
191
+ &--lowered {
192
+ @include m.elevation(1);
193
+ transform: translateY(1px);
194
+ }
195
+
196
+ // Disabled state
197
+ &--disabled,
198
+ &:disabled {
199
+ pointer-events: none;
200
+ @include m.elevation(0);
201
+ background-color: t.alpha('on-surface', 0.12);
202
+ color: t.alpha('on-surface', 0.38);
203
+ }
204
+
205
+ // Positioning utilities
206
+ &--top-right {
207
+ position: fixed;
208
+ top: 16px;
209
+ right: 16px;
210
+ z-index: v.z-index('dropdown');
211
+ }
212
+
213
+ &--top-left {
214
+ position: fixed;
215
+ top: 16px;
216
+ left: 16px;
217
+ z-index: v.z-index('dropdown');
218
+ }
219
+
220
+ &--bottom-right {
221
+ position: fixed;
222
+ bottom: 16px;
223
+ right: 16px;
224
+ z-index: v.z-index('dropdown');
225
+ }
226
+
227
+ &--bottom-left {
228
+ position: fixed;
229
+ bottom: 16px;
230
+ left: 16px;
231
+ z-index: v.z-index('dropdown');
232
+ }
233
+
234
+ // Optional animations
235
+ @keyframes extended-fab-enter {
236
+ from {
237
+ transform: scale(0);
238
+ opacity: 0;
239
+ }
240
+ to {
241
+ transform: scale(1);
242
+ opacity: 1;
243
+ }
244
+ }
245
+
246
+ &--animate-enter {
247
+ animation: extended-fab-enter 0.3s f.get-motion-easing('emphasized-decelerate') forwards;
248
+ }
249
+
250
+ // Responsive behavior for different screen sizes
251
+ @media (max-width: v.breakpoint('sm')) {
252
+ // Center alignment option for mobile
253
+ &--center-mobile {
254
+ left: 50%;
255
+ transform: translateX(-50%);
256
+
257
+ &.#{$component}--lowered {
258
+ transform: translateX(-50%) translateY(1px);
259
+ }
260
+ }
261
+ }
262
+
263
+ // Collapsible behavior on scroll
264
+ &--collapsible {
265
+ transition-duration: 0.2s;
266
+ }
267
+ }
@@ -0,0 +1,225 @@
1
+ // src/components/fab/_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}-fab';
9
+
10
+ .#{$component} {
11
+ // Base styles
12
+ position: relative;
13
+ display: inline-flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+ border: none;
17
+ background-color: t.color('primary-container');
18
+ color: t.color('on-primary-container');
19
+ font: inherit;
20
+ text-decoration: none;
21
+ cursor: pointer;
22
+ user-select: none;
23
+ vertical-align: middle;
24
+ appearance: none;
25
+ overflow: hidden;
26
+
27
+ // FAB uses elevation in all variants
28
+ @include m.elevation(3);
29
+
30
+ // Transitions
31
+ @include m.motion-transition(
32
+ transform,
33
+ box-shadow,
34
+ background-color,
35
+ color
36
+ );
37
+
38
+ // Focus styles
39
+ &:focus {
40
+ outline: none;
41
+ }
42
+
43
+ &:focus-visible {
44
+ outline: 2px solid t.color('outline');
45
+ outline-offset: 2px;
46
+ }
47
+
48
+ // Default FAB size (56dp)
49
+ width: 56px;
50
+ height: 56px;
51
+ border-radius: f.get-shape('large');
52
+
53
+ // Icon sizing
54
+ &-icon {
55
+ display: inline-flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ width: 24px;
59
+ height: 24px;
60
+
61
+ svg {
62
+ width: 24px;
63
+ height: 24px;
64
+ }
65
+ }
66
+
67
+ // Size variants
68
+ &--small {
69
+ width: 40px;
70
+ height: 40px;
71
+ border-radius: f.get-shape('medium');
72
+
73
+ .#{$component}-icon {
74
+ width: 24px;
75
+ height: 24px;
76
+
77
+ svg {
78
+ width: 24px;
79
+ height: 24px;
80
+ }
81
+ }
82
+ }
83
+
84
+ &--default {
85
+ // Default is already defined in base styles
86
+ }
87
+
88
+ &--large {
89
+ width: 96px;
90
+ height: 96px;
91
+ border-radius: f.get-shape('extra-large');
92
+
93
+ .#{$component}-icon {
94
+ width: 36px;
95
+ height: 36px;
96
+
97
+ svg {
98
+ width: 36px;
99
+ height: 36px;
100
+ }
101
+ }
102
+ }
103
+
104
+ // Color variants - primary is the default
105
+
106
+ // Primary variant (default)
107
+ &--primary {
108
+ background-color: t.color('primary-container');
109
+ color: t.color('on-primary-container');
110
+
111
+ &:hover {
112
+ @include m.state-layer(t.color('on-primary-container'), 'hover');
113
+ }
114
+
115
+ &:active {
116
+ @include m.state-layer(t.color('on-primary-container'), 'pressed');
117
+ @include m.elevation(1);
118
+ }
119
+ }
120
+
121
+ // Secondary variant
122
+ &--secondary {
123
+ background-color: t.color('secondary-container');
124
+ color: t.color('on-secondary-container');
125
+
126
+ &:hover {
127
+ @include m.state-layer(t.color('on-secondary-container'), 'hover');
128
+ }
129
+
130
+ &:active {
131
+ @include m.state-layer(t.color('on-secondary-container'), 'pressed');
132
+ @include m.elevation(1);
133
+ }
134
+ }
135
+
136
+ // Tertiary variant
137
+ &--tertiary {
138
+ background-color: t.color('tertiary-container');
139
+ color: t.color('on-tertiary-container');
140
+
141
+ &:hover {
142
+ @include m.state-layer(t.color('on-tertiary-container'), 'hover');
143
+ }
144
+
145
+ &:active {
146
+ @include m.state-layer(t.color('on-tertiary-container'), 'pressed');
147
+ @include m.elevation(1);
148
+ }
149
+ }
150
+
151
+ // Surface variant
152
+ &--surface {
153
+ background-color: t.color('surface');
154
+ color: t.color('primary');
155
+
156
+ &:hover {
157
+ @include m.state-layer(t.color('primary'), 'hover');
158
+ }
159
+
160
+ &:active {
161
+ @include m.state-layer(t.color('primary'), 'pressed');
162
+ @include m.elevation(1);
163
+ }
164
+ }
165
+
166
+ // Lowered state (when pressed)
167
+ &--lowered {
168
+ @include m.elevation(1);
169
+ transform: translateY(1px);
170
+ }
171
+
172
+ // Disabled state
173
+ &--disabled,
174
+ &:disabled {
175
+ pointer-events: none;
176
+ @include m.elevation(0);
177
+ background-color: t.alpha('on-surface', 0.12);
178
+ color: t.alpha('on-surface', 0.38);
179
+ }
180
+
181
+ // Positioning utilities
182
+ &--top-right {
183
+ position: fixed;
184
+ top: 16px;
185
+ right: 16px;
186
+ z-index: v.z-index('dropdown');
187
+ }
188
+
189
+ &--top-left {
190
+ position: fixed;
191
+ top: 16px;
192
+ left: 16px;
193
+ z-index: v.z-index('dropdown');
194
+ }
195
+
196
+ &--bottom-right {
197
+ position: fixed;
198
+ bottom: 16px;
199
+ right: 16px;
200
+ z-index: v.z-index('dropdown');
201
+ }
202
+
203
+ &--bottom-left {
204
+ position: fixed;
205
+ bottom: 16px;
206
+ left: 16px;
207
+ z-index: v.z-index('dropdown');
208
+ }
209
+
210
+ // Optional animations
211
+ @keyframes fab-enter {
212
+ from {
213
+ transform: scale(0);
214
+ opacity: 0;
215
+ }
216
+ to {
217
+ transform: scale(1);
218
+ opacity: 1;
219
+ }
220
+ }
221
+
222
+ &--animate-enter {
223
+ animation: fab-enter 0.3s f.get-motion-easing('emphasized-decelerate') forwards;
224
+ }
225
+ }
@@ -249,6 +249,7 @@ $component: '#{base.$prefix}-nav';
249
249
  padding: 12px 0;
250
250
  transition: transform v.motion('duration-short2') v.motion('easing-standard');
251
251
  transform: translateX(0);
252
+ overflow-y: auto;
252
253
 
253
254
  // Hidden state
254
255
  &.#{$component}--hidden {