@expressivecss/expressive 0.9.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +157 -1
- package/README.md +178 -25
- package/dist/css/expressive.css +365 -1222
- package/dist/css/expressive.css.map +1 -1
- package/dist/css/expressive.min.css +1 -1
- package/dist/css/expressive.min.css.map +1 -1
- package/dist/fonts/material-symbols-outlined.woff2 +0 -0
- package/dist/fonts/material-symbols-rounded.woff2 +0 -0
- package/dist/fonts/material-symbols-sharp.woff2 +0 -0
- package/dist/js/chunks/chunk-7MM4VJJO.mjs +509 -0
- package/dist/js/chunks/chunk-7MM4VJJO.mjs.map +7 -0
- package/dist/js/chunks/chunk-7UXHSYIA.mjs +183 -0
- package/dist/js/chunks/chunk-7UXHSYIA.mjs.map +7 -0
- package/dist/js/chunks/chunk-A3BJA7V4.mjs +28 -0
- package/dist/js/chunks/chunk-A3BJA7V4.mjs.map +7 -0
- package/dist/js/chunks/chunk-AOGFNMXS.mjs +691 -0
- package/dist/js/chunks/chunk-AOGFNMXS.mjs.map +7 -0
- package/dist/js/chunks/chunk-D4UZ4HFN.mjs +560 -0
- package/dist/js/chunks/chunk-D4UZ4HFN.mjs.map +7 -0
- package/dist/js/chunks/chunk-EP3CVKB5.mjs +88 -0
- package/dist/js/chunks/chunk-EP3CVKB5.mjs.map +7 -0
- package/dist/js/chunks/chunk-G576EP5O.mjs +459 -0
- package/dist/js/chunks/chunk-G576EP5O.mjs.map +7 -0
- package/dist/js/chunks/chunk-GY2Z5CJ2.mjs +320 -0
- package/dist/js/chunks/chunk-GY2Z5CJ2.mjs.map +7 -0
- package/dist/js/chunks/chunk-JKNPQQWY.mjs +191 -0
- package/dist/js/chunks/chunk-JKNPQQWY.mjs.map +7 -0
- package/dist/js/chunks/chunk-JNPIWFJT.mjs +365 -0
- package/dist/js/chunks/chunk-JNPIWFJT.mjs.map +7 -0
- package/dist/js/chunks/chunk-JODJAGFS.mjs +267 -0
- package/dist/js/chunks/chunk-JODJAGFS.mjs.map +7 -0
- package/dist/js/chunks/chunk-JR24UB4X.mjs +100 -0
- package/dist/js/chunks/chunk-JR24UB4X.mjs.map +7 -0
- package/dist/js/chunks/chunk-KR44BSYQ.mjs +55 -0
- package/dist/js/chunks/chunk-KR44BSYQ.mjs.map +7 -0
- package/dist/js/chunks/chunk-LZVBJ33S.mjs +102 -0
- package/dist/js/chunks/chunk-LZVBJ33S.mjs.map +7 -0
- package/dist/js/chunks/chunk-MISGHDUU.mjs +326 -0
- package/dist/js/chunks/chunk-MISGHDUU.mjs.map +7 -0
- package/dist/js/chunks/chunk-N3UHGN3N.mjs +175 -0
- package/dist/js/chunks/chunk-N3UHGN3N.mjs.map +7 -0
- package/dist/js/chunks/chunk-PB5L3EXF.mjs +7 -0
- package/dist/js/chunks/chunk-PB5L3EXF.mjs.map +7 -0
- package/dist/js/chunks/chunk-PIIAEYAJ.mjs +85 -0
- package/dist/js/chunks/chunk-PIIAEYAJ.mjs.map +7 -0
- package/dist/js/chunks/chunk-QSQ24FYT.mjs +59 -0
- package/dist/js/chunks/chunk-QSQ24FYT.mjs.map +7 -0
- package/dist/js/chunks/chunk-QYCYP443.mjs +1111 -0
- package/dist/js/chunks/chunk-QYCYP443.mjs.map +7 -0
- package/dist/js/chunks/chunk-SLFNPY5M.mjs +78 -0
- package/dist/js/chunks/chunk-SLFNPY5M.mjs.map +7 -0
- package/dist/js/chunks/chunk-TK6PX2GC.mjs +663 -0
- package/dist/js/chunks/chunk-TK6PX2GC.mjs.map +7 -0
- package/dist/js/chunks/chunk-TYM6U5DY.mjs +76 -0
- package/dist/js/chunks/chunk-TYM6U5DY.mjs.map +7 -0
- package/dist/js/chunks/chunk-TZZ24ZQS.mjs +154 -0
- package/dist/js/chunks/chunk-TZZ24ZQS.mjs.map +7 -0
- package/dist/js/chunks/chunk-VAS6JQ6P.mjs +94 -0
- package/dist/js/chunks/chunk-VAS6JQ6P.mjs.map +7 -0
- package/dist/js/chunks/chunk-WWPAPHMA.mjs +1 -0
- package/dist/js/chunks/chunk-WWPAPHMA.mjs.map +7 -0
- package/dist/js/chunks/chunk-XDB3G6RL.mjs +114 -0
- package/dist/js/chunks/chunk-XDB3G6RL.mjs.map +7 -0
- package/dist/js/chunks/chunk-XO5WX3TK.mjs +226 -0
- package/dist/js/chunks/chunk-XO5WX3TK.mjs.map +7 -0
- package/dist/js/chunks/chunk-YFXEJ7GR.mjs +286 -0
- package/dist/js/chunks/chunk-YFXEJ7GR.mjs.map +7 -0
- package/dist/js/chunks/chunk-ZIZVUWRL.mjs +120 -0
- package/dist/js/chunks/chunk-ZIZVUWRL.mjs.map +7 -0
- package/dist/js/chunks/chunk-ZZBZI2XN.mjs +338 -0
- package/dist/js/chunks/chunk-ZZBZI2XN.mjs.map +7 -0
- package/dist/js/expressive.cjs +747 -754
- package/dist/js/expressive.cjs.map +4 -4
- package/dist/js/expressive.js +747 -754
- package/dist/js/expressive.js.map +4 -4
- package/dist/js/expressive.min.js +11 -15
- package/dist/js/expressive.min.js.map +4 -4
- package/dist/js/expressive.mjs +83 -7490
- package/dist/js/expressive.mjs.map +4 -4
- package/dist/js/internal/behaviors/bottomSheets.mjs +9 -0
- package/dist/js/internal/behaviors/bottomSheets.mjs.map +7 -0
- package/dist/js/internal/behaviors/dialogs.mjs +8 -0
- package/dist/js/internal/behaviors/dialogs.mjs.map +7 -0
- package/dist/js/internal/behaviors/forms.mjs +8 -0
- package/dist/js/internal/behaviors/forms.mjs.map +7 -0
- package/dist/js/internal/behaviors/sheetDrag.mjs +8 -0
- package/dist/js/internal/behaviors/sheetDrag.mjs.map +7 -0
- package/dist/js/internal/behaviors/sideSheets.mjs +9 -0
- package/dist/js/internal/behaviors/sideSheets.mjs.map +7 -0
- package/dist/js/internal/components/appBar.mjs +8 -0
- package/dist/js/internal/components/appBar.mjs.map +7 -0
- package/dist/js/internal/components/autocomplete.mjs +10 -0
- package/dist/js/internal/components/autocomplete.mjs.map +7 -0
- package/dist/js/internal/components/buttonGroup.mjs +8 -0
- package/dist/js/internal/components/buttonGroup.mjs.map +7 -0
- package/dist/js/internal/components/buttons.mjs +9 -0
- package/dist/js/internal/components/buttons.mjs.map +7 -0
- package/dist/js/internal/components/cards.mjs +13 -0
- package/dist/js/internal/components/cards.mjs.map +7 -0
- package/dist/js/internal/components/carousel.mjs +9 -0
- package/dist/js/internal/components/carousel.mjs.map +7 -0
- package/dist/js/internal/components/characterCounter.mjs +8 -0
- package/dist/js/internal/components/characterCounter.mjs.map +7 -0
- package/dist/js/internal/components/chips.mjs +11 -0
- package/dist/js/internal/components/chips.mjs.map +7 -0
- package/dist/js/internal/components/datepicker.mjs +12 -0
- package/dist/js/internal/components/datepicker.mjs.map +7 -0
- package/dist/js/internal/components/expandingCard.mjs +11 -0
- package/dist/js/internal/components/expandingCard.mjs.map +7 -0
- package/dist/js/internal/components/index.mjs +88 -0
- package/dist/js/internal/components/index.mjs.map +7 -0
- package/dist/js/internal/components/lightbox.mjs +9 -0
- package/dist/js/internal/components/lightbox.mjs.map +7 -0
- package/dist/js/internal/components/menu.mjs +9 -0
- package/dist/js/internal/components/menu.mjs.map +7 -0
- package/dist/js/internal/components/navigationRail.mjs +8 -0
- package/dist/js/internal/components/navigationRail.mjs.map +7 -0
- package/dist/js/internal/components/registry.mjs +33 -0
- package/dist/js/internal/components/registry.mjs.map +7 -0
- package/dist/js/internal/components/scrollspy.mjs +8 -0
- package/dist/js/internal/components/scrollspy.mjs.map +7 -0
- package/dist/js/internal/components/select.mjs +10 -0
- package/dist/js/internal/components/select.mjs.map +7 -0
- package/dist/js/internal/components/slider.mjs +9 -0
- package/dist/js/internal/components/slider.mjs.map +7 -0
- package/dist/js/internal/components/snackbar.mjs +8 -0
- package/dist/js/internal/components/snackbar.mjs.map +7 -0
- package/dist/js/internal/components/tabs.mjs +10 -0
- package/dist/js/internal/components/tabs.mjs.map +7 -0
- package/dist/js/internal/components/timepicker.mjs +10 -0
- package/dist/js/internal/components/timepicker.mjs.map +7 -0
- package/dist/js/internal/components/tooltip.mjs +9 -0
- package/dist/js/internal/components/tooltip.mjs.map +7 -0
- package/dist/js/internal/core/component.mjs +7 -0
- package/dist/js/internal/core/component.mjs.map +7 -0
- package/dist/js/internal/core/utils.mjs +7 -0
- package/dist/js/internal/core/utils.mjs.map +7 -0
- package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +8 -0
- package/dist/js/internal/plugins/dockedDisplayPlugin.mjs.map +7 -0
- package/dist/js/modular.mjs +113 -0
- package/dist/js/modular.mjs.map +7 -0
- package/dist/types/behaviors/sheetDrag.d.ts +1 -1
- package/dist/types/components/appBar.d.ts +1 -1
- package/dist/types/components/autocomplete.d.ts +9 -0
- package/dist/types/components/buttons.d.ts +4 -39
- package/dist/types/components/carousel.d.ts +10 -1
- package/dist/types/components/chips.d.ts +1 -0
- package/dist/types/components/datepicker.d.ts +7 -0
- package/dist/types/components/index.d.ts +0 -2
- package/dist/types/components/lightbox.d.ts +12 -0
- package/dist/types/components/menu.d.ts +3 -0
- package/dist/types/components/registry.d.ts +0 -4
- package/dist/types/components/select.d.ts +4 -0
- package/dist/types/components/slider.d.ts +2 -1
- package/dist/types/components/snackbar.d.ts +4 -2
- package/dist/types/components/tabs.d.ts +2 -1
- package/dist/types/components/timepicker.d.ts +5 -3
- package/dist/types/components/tooltip.d.ts +5 -3
- package/dist/types/index.d.ts +1 -8
- package/dist/types/modular.d.ts +28 -0
- package/package.json +16 -4
- package/src/sass/README.md +8 -0
- package/src/sass/components/_badges.scss +1 -6
- package/src/sass/components/_button-groups.scss +5 -1
- package/src/sass/components/_buttons.scss +8 -287
- package/src/sass/components/_chips.scss +17 -2
- package/src/sass/components/_dialog.scss +9 -4
- package/src/sass/components/_fab-menu.scss +11 -9
- package/src/sass/components/_icon-buttons.scss +0 -5
- package/src/sass/components/_index.scss +0 -5
- package/src/sass/components/_menu.scss +2 -2
- package/src/sass/components/_navigation-rail.scss +1 -1
- package/src/sass/components/_panes.scss +50 -78
- package/src/sass/components/_progress.scss +73 -13
- package/src/sass/components/_scrim.scss +4 -4
- package/src/sass/components/_side-sheet.scss +22 -12
- package/src/sass/components/_toolbar.scss +1 -4
- package/src/sass/components/_tooltip.scss +20 -2
- package/src/sass/components/forms/_input-fields.scss +5 -1
- package/src/sass/components/forms/_select.scss +1 -0
- package/src/sass/components/forms/_slider.scss +81 -25
- package/src/sass/custom.scss +38 -0
- package/dist/types/components/navigationDrawer.d.ts +0 -110
- package/src/sass/components/_banners.scss +0 -298
- package/src/sass/components/_bottom-app-bar.scss +0 -180
- package/src/sass/components/_floating-sheet.scss +0 -86
- package/src/sass/components/_navigation-drawer.scss +0 -476
- package/src/sass/components/_segmented-buttons.scss +0 -188
package/src/sass/README.md
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
```
|
|
4
4
|
expressive.scss entry point - decides cascade order, nothing else
|
|
5
|
+
custom.scss optional entry - selected partials in the same layers
|
|
5
6
|
abstracts/ variables, functions, mixins (emits no CSS)
|
|
6
7
|
tokens/ M3 design tokens as :root custom properties
|
|
7
8
|
base/ normalize, element defaults, typography, grid
|
|
@@ -9,6 +10,13 @@ components/ one file per widget (+ components/forms/)
|
|
|
9
10
|
utilities/ single-purpose helper classes
|
|
10
11
|
```
|
|
11
12
|
|
|
13
|
+
`custom.scss` accepts `$components` and `$utilities` lists of partial names,
|
|
14
|
+
in load order. `null` loads the complete group; `()` loads none. Tokens and base
|
|
15
|
+
are always loaded, and the existing font configuration still applies. Its
|
|
16
|
+
default output must equal `expressive.scss`. Use one entry per consumer sheet.
|
|
17
|
+
Keep selections in the order of the existing indexes, with icons first, and
|
|
18
|
+
include supporting partials. See the README's smaller-build recipes.
|
|
19
|
+
|
|
12
20
|
## Browser support
|
|
13
21
|
|
|
14
22
|
The last 5 versions of Chrome and Firefox. No IE, no Edge Legacy. Declared in
|
|
@@ -79,9 +79,8 @@
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
// Trailing count in a list or
|
|
82
|
+
// Trailing count in a list or menu row stays in flow.
|
|
83
83
|
.list .badge,
|
|
84
|
-
:is(.sidenav, .navigation-drawer) .badge,
|
|
85
84
|
menu .badge {
|
|
86
85
|
position: static;
|
|
87
86
|
transform: none;
|
|
@@ -90,7 +89,3 @@ menu .badge {
|
|
|
90
89
|
.list .badge {
|
|
91
90
|
margin-inline-start: auto;
|
|
92
91
|
}
|
|
93
|
-
|
|
94
|
-
:is(.sidenav, .navigation-drawer) summary .badge {
|
|
95
|
-
margin-inline-start: 14px;
|
|
96
|
-
}
|
|
@@ -299,7 +299,11 @@ $_connected-corners: (
|
|
|
299
299
|
--md-comp-button-group-pressed-inner-corner-corner-size: 4px;
|
|
300
300
|
--md-comp-button-group-selected-inner-corner-corner-size: 50%;
|
|
301
301
|
|
|
302
|
-
|
|
302
|
+
display: grid;
|
|
303
|
+
grid-auto-flow: column;
|
|
304
|
+
grid-auto-columns: 1fr;
|
|
305
|
+
width: max-content;
|
|
306
|
+
min-width: 100%;
|
|
303
307
|
|
|
304
308
|
@each $name, $c in $_connected-corners {
|
|
305
309
|
&.#{$name} {
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
// the size ladder in abstracts, corner.full at every size
|
|
18
18
|
// state layer 8% hover / 10% focus+press
|
|
19
19
|
// FAB 56dp (extra/large icon-only), primary-container, 16dp corners
|
|
20
|
-
// FAB sizes
|
|
21
|
-
// 24 /
|
|
20
|
+
// FAB sizes 56dp default / 80dp medium / 96dp large,
|
|
21
|
+
// 24 / 26 / 36dp icon, 16 / 20 / 28dp corners
|
|
22
22
|
|
|
23
23
|
// The size axis is `$button-sizes` in abstracts, and `button-size()` sets its
|
|
24
24
|
// tokens. Both moved there when button groups grew a size ladder of their own:
|
|
@@ -152,17 +152,15 @@ $_btn: "button:not(#{$_not-btn}), a.button, label.button";
|
|
|
152
152
|
|
|
153
153
|
// Extended FAB: an icon plus a label, on its own size and colour axes.
|
|
154
154
|
//
|
|
155
|
-
// Tokens (M3 md.comp.extended-fab.*, DSP 34.0.21)
|
|
156
|
-
// base family; the three named sizes are `md.comp.extended-fab.{size}.*`:
|
|
155
|
+
// Tokens (M3 md.comp.extended-fab.{size}.*, DSP 34.0.21):
|
|
157
156
|
//
|
|
158
157
|
// size height shape icon lead gap trail label
|
|
159
|
-
// (none) 56 16 24 16 8 20 label-large
|
|
160
158
|
// small 56 16 24 16 8 16 title-medium
|
|
161
159
|
// medium 80 20 28 26 12 26 title-large
|
|
162
160
|
// large 96 28 36 28 16 28 headline-small
|
|
163
161
|
//
|
|
164
162
|
// Leading and trailing space are equal at every named size, so the map states
|
|
165
|
-
// one `space
|
|
163
|
+
// one `space`.
|
|
166
164
|
//
|
|
167
165
|
// The colour axis is M3's three container roles, and it runs through two
|
|
168
166
|
// tokens rather than a background per variant: the state layers mix the label
|
|
@@ -178,13 +176,7 @@ $_extend-sizes: (
|
|
|
178
176
|
"large": (height: 96px, shape: 28px, icon: 36px, space: 28px, gap: 16px, label: "headline-small"),
|
|
179
177
|
);
|
|
180
178
|
|
|
181
|
-
:where(#{$_btn}).extend {
|
|
182
|
-
--md-comp-extended-fab-container-height: 56px;
|
|
183
|
-
--md-comp-extended-fab-container-shape: 16px;
|
|
184
|
-
--md-comp-extended-fab-icon-size: 24px;
|
|
185
|
-
--md-comp-extended-fab-leading-space: 16px;
|
|
186
|
-
--md-comp-extended-fab-icon-label-space: 8px;
|
|
187
|
-
--md-comp-extended-fab-trailing-space: 20px;
|
|
179
|
+
:where(#{$_btn}):where(.small, .medium, .large).extend {
|
|
188
180
|
--md-comp-extended-fab-container-color: var(--md-sys-color-primary-container);
|
|
189
181
|
--md-comp-extended-fab-label-text-color: var(
|
|
190
182
|
--md-sys-color-on-primary-container
|
|
@@ -195,7 +187,6 @@ $_extend-sizes: (
|
|
|
195
187
|
padding-inline: var(--md-comp-extended-fab-leading-space)
|
|
196
188
|
var(--md-comp-extended-fab-trailing-space);
|
|
197
189
|
border-radius: var(--md-comp-extended-fab-container-shape);
|
|
198
|
-
font-size: var(--md-sys-typescale-label-large-font-size);
|
|
199
190
|
color: var(--md-comp-extended-fab-label-text-color);
|
|
200
191
|
background-color: var(--md-comp-extended-fab-container-color);
|
|
201
192
|
@include z-depth("3");
|
|
@@ -255,15 +246,14 @@ $_extend-sizes: (
|
|
|
255
246
|
}
|
|
256
247
|
}
|
|
257
248
|
|
|
258
|
-
// FAB. Icon-only .extra / .large is the 56dp regular FAB.
|
|
259
|
-
// the 40dp small FAB. The speed-dial host is .fab.
|
|
249
|
+
// FAB. Icon-only .extra / .large is the 56dp regular FAB.
|
|
260
250
|
//
|
|
261
251
|
// Tokens (M3 md.comp.fab.*):
|
|
262
252
|
// --md-comp-fab-container-height 56dp
|
|
263
253
|
// --md-comp-fab-container-width 56dp
|
|
264
254
|
// --md-comp-fab-container-shape 16dp, corner.large - rounded, not a pill
|
|
265
255
|
// --md-comp-fab-icon-size 24dp
|
|
266
|
-
// .
|
|
256
|
+
// .medium and .extra.large reset those four; nothing else varies
|
|
267
257
|
// by size.
|
|
268
258
|
:where(#{$_btn}).extra.circle,
|
|
269
259
|
:where(#{$_btn}).large.circle {
|
|
@@ -316,15 +306,8 @@ $_extend-sizes: (
|
|
|
316
306
|
);
|
|
317
307
|
}
|
|
318
308
|
|
|
319
|
-
// Small FAB: 40dp container, corner.medium, icon stays 24dp.
|
|
320
|
-
&.small {
|
|
321
|
-
--md-comp-fab-container-height: 40px;
|
|
322
|
-
--md-comp-fab-container-width: 40px;
|
|
323
|
-
--md-comp-fab-container-shape: 12px;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
309
|
// Medium FAB: 80dp container, 26dp icon. The corner continues the size
|
|
327
|
-
// ladder -
|
|
310
|
+
// ladder - 16dp default, 20dp here (corner.large-increased).
|
|
328
311
|
&.medium {
|
|
329
312
|
--md-comp-fab-container-height: 80px;
|
|
330
313
|
--md-comp-fab-container-width: 80px;
|
|
@@ -363,265 +346,3 @@ $_extend-sizes: (
|
|
|
363
346
|
:where(#{$_btn}).disabled {
|
|
364
347
|
@include btn-disabled;
|
|
365
348
|
}
|
|
366
|
-
|
|
367
|
-
// The FAB host. M3 names this component "FAB"; `.fixed-action-btn` is the
|
|
368
|
-
// Materialize name and stays as an alias. Interpolate inside :is() - a bare
|
|
369
|
-
// comma list breaks out of its context (see $_bar in _navbar).
|
|
370
|
-
$_fab: ":is(.fab, .fixed-action-btn)";
|
|
371
|
-
|
|
372
|
-
// Speed dial. .active (and :hover when the pointer can hover) opens the
|
|
373
|
-
// menu. Motion is CSS. .click-to-toggle is the markup switch for click
|
|
374
|
-
// mode. `.fab` is the public class; .fixed-action-btn is the old alias.
|
|
375
|
-
//
|
|
376
|
-
// Tokens:
|
|
377
|
-
// --md-comp-fab-offset 16px from the corner
|
|
378
|
-
// --md-comp-fab-z 997
|
|
379
|
-
// --md-comp-fab-menu-gap 16px
|
|
380
|
-
// --md-comp-fab-duration 200ms
|
|
381
|
-
// --md-comp-fab-stagger 40ms
|
|
382
|
-
// --md-comp-fab-easing soft ease-in-out
|
|
383
|
-
// --md-comp-fab-travel center-to-center step into the main disc
|
|
384
|
-
// --md-comp-fab-hidden-transform toward / into the main button
|
|
385
|
-
#{$_fab} {
|
|
386
|
-
--md-comp-fab-offset: 16px;
|
|
387
|
-
--md-comp-fab-z: 997;
|
|
388
|
-
--md-comp-fab-menu-gap: 16px;
|
|
389
|
-
--md-comp-fab-duration: 200ms;
|
|
390
|
-
--md-comp-fab-stagger: 40ms;
|
|
391
|
-
--md-comp-fab-easing: cubic-bezier(0.65, 0, 0.35, 1);
|
|
392
|
-
--md-comp-fab-travel: 64px;
|
|
393
|
-
--md-comp-fab-hidden-transform: scale(0)
|
|
394
|
-
translateY(calc(var(--md-comp-fab-travel) * (var(--i, 0) + 1)));
|
|
395
|
-
|
|
396
|
-
position: fixed;
|
|
397
|
-
inset-inline-end: var(--md-comp-fab-offset);
|
|
398
|
-
bottom: var(--md-comp-fab-offset);
|
|
399
|
-
z-index: var(--md-comp-fab-z);
|
|
400
|
-
padding-top: var(--md-comp-fab-menu-gap);
|
|
401
|
-
margin: 0;
|
|
402
|
-
overflow: visible;
|
|
403
|
-
|
|
404
|
-
// Main disc stays above retracting actions so they slide under it.
|
|
405
|
-
> :is(a, button) {
|
|
406
|
-
position: relative;
|
|
407
|
-
z-index: 1;
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
:is(ul, menu) {
|
|
411
|
-
--n: 1;
|
|
412
|
-
position: absolute;
|
|
413
|
-
inset-inline: 0;
|
|
414
|
-
bottom: 64px;
|
|
415
|
-
display: flex;
|
|
416
|
-
flex-direction: column;
|
|
417
|
-
align-items: center;
|
|
418
|
-
gap: var(--md-comp-fab-menu-gap);
|
|
419
|
-
margin: 0;
|
|
420
|
-
padding: 0;
|
|
421
|
-
list-style: none;
|
|
422
|
-
visibility: hidden;
|
|
423
|
-
overflow: visible;
|
|
424
|
-
transition: visibility 0s
|
|
425
|
-
calc(var(--md-comp-fab-duration) + var(--md-comp-fab-stagger) * (var(--n) - 1));
|
|
426
|
-
|
|
427
|
-
&:has(> :nth-child(2)) { --n: 2; }
|
|
428
|
-
&:has(> :nth-child(3)) { --n: 3; }
|
|
429
|
-
&:has(> :nth-child(4)) { --n: 4; }
|
|
430
|
-
&:has(> :nth-child(5)) { --n: 5; }
|
|
431
|
-
&:has(> :nth-child(6)) { --n: 6; }
|
|
432
|
-
&:has(> :nth-child(7)) { --n: 7; }
|
|
433
|
-
&:has(> :nth-child(8)) { --n: 8; }
|
|
434
|
-
|
|
435
|
-
li:nth-last-child(1) { --i: 0; }
|
|
436
|
-
li:nth-last-child(2) { --i: 1; }
|
|
437
|
-
li:nth-last-child(3) { --i: 2; }
|
|
438
|
-
li:nth-last-child(4) { --i: 3; }
|
|
439
|
-
li:nth-last-child(5) { --i: 4; }
|
|
440
|
-
li:nth-last-child(6) { --i: 5; }
|
|
441
|
-
li:nth-last-child(7) { --i: 6; }
|
|
442
|
-
li:nth-last-child(8) { --i: 7; }
|
|
443
|
-
|
|
444
|
-
> li > :is(a, button) {
|
|
445
|
-
opacity: 0;
|
|
446
|
-
transform: var(--md-comp-fab-hidden-transform);
|
|
447
|
-
transition:
|
|
448
|
-
opacity var(--md-comp-fab-duration) var(--md-comp-fab-easing),
|
|
449
|
-
transform var(--md-comp-fab-duration) var(--md-comp-fab-easing),
|
|
450
|
-
background-color .2s ease-out,
|
|
451
|
-
box-shadow .2s ease-out;
|
|
452
|
-
// Close: farthest first, so they funnel into the disc.
|
|
453
|
-
transition-delay: calc(
|
|
454
|
-
var(--md-comp-fab-stagger) * (var(--n) - 1 - var(--i, 0))
|
|
455
|
-
);
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
&.active :is(ul, menu) {
|
|
460
|
-
visibility: visible;
|
|
461
|
-
transition-delay: 0s;
|
|
462
|
-
|
|
463
|
-
> li > :is(a, button) {
|
|
464
|
-
opacity: 1;
|
|
465
|
-
transform: none;
|
|
466
|
-
transition-delay: calc(var(--md-comp-fab-stagger) * var(--i, 0));
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
// Closest-to-FAB is the first child when the menu is left, right, or
|
|
471
|
-
// down (row-reverse / row / column). Top uses nth-last-child above.
|
|
472
|
-
&.direction-left,
|
|
473
|
-
&.direction-right,
|
|
474
|
-
&.direction-bottom {
|
|
475
|
-
:is(ul, menu) {
|
|
476
|
-
li:nth-child(1) { --i: 0; }
|
|
477
|
-
li:nth-child(2) { --i: 1; }
|
|
478
|
-
li:nth-child(3) { --i: 2; }
|
|
479
|
-
li:nth-child(4) { --i: 3; }
|
|
480
|
-
li:nth-child(5) { --i: 4; }
|
|
481
|
-
li:nth-child(6) { --i: 5; }
|
|
482
|
-
li:nth-child(7) { --i: 6; }
|
|
483
|
-
li:nth-child(8) { --i: 7; }
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
&.direction-left,
|
|
488
|
-
&.direction-right {
|
|
489
|
-
padding: 0;
|
|
490
|
-
|
|
491
|
-
:is(ul, menu) {
|
|
492
|
-
inset: auto;
|
|
493
|
-
top: 50%;
|
|
494
|
-
translate: 0 -50%;
|
|
495
|
-
flex-direction: row;
|
|
496
|
-
width: max-content;
|
|
497
|
-
height: auto;
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
// Hidden offset is toward the main button, one step per index, so
|
|
502
|
-
// close sends every action into the disc.
|
|
503
|
-
&.direction-left {
|
|
504
|
-
--md-comp-fab-hidden-transform: scale(0)
|
|
505
|
-
translateX(calc(var(--md-comp-fab-travel) * (var(--i, 0) + 1)));
|
|
506
|
-
padding-inline-start: var(--md-comp-fab-menu-gap);
|
|
507
|
-
|
|
508
|
-
:is(ul, menu) {
|
|
509
|
-
inset-inline-end: 64px;
|
|
510
|
-
flex-direction: row-reverse;
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
&.direction-right {
|
|
515
|
-
--md-comp-fab-hidden-transform: scale(0)
|
|
516
|
-
translateX(calc(-1 * var(--md-comp-fab-travel) * (var(--i, 0) + 1)));
|
|
517
|
-
padding-inline-end: var(--md-comp-fab-menu-gap);
|
|
518
|
-
|
|
519
|
-
:is(ul, menu) {
|
|
520
|
-
inset-inline-start: 64px;
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
&.direction-bottom {
|
|
525
|
-
--md-comp-fab-hidden-transform: scale(0)
|
|
526
|
-
translateY(calc(-1 * var(--md-comp-fab-travel) * (var(--i, 0) + 1)));
|
|
527
|
-
padding: 0 0 var(--md-comp-fab-menu-gap);
|
|
528
|
-
|
|
529
|
-
:is(ul, menu) {
|
|
530
|
-
inset: auto;
|
|
531
|
-
top: 64px;
|
|
532
|
-
bottom: auto;
|
|
533
|
-
inset-inline: 0;
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
&.toolbar {
|
|
538
|
-
padding: 0;
|
|
539
|
-
height: 56px;
|
|
540
|
-
|
|
541
|
-
:is(ul, menu) > li > :is(a, button) {
|
|
542
|
-
opacity: 1;
|
|
543
|
-
transform: none;
|
|
544
|
-
transition: opacity var(--md-comp-fab-duration);
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
&.active {
|
|
548
|
-
inset-inline: 0;
|
|
549
|
-
bottom: 0;
|
|
550
|
-
width: 100%;
|
|
551
|
-
height: 56px;
|
|
552
|
-
|
|
553
|
-
> :is(a, button) > #{$icon} {
|
|
554
|
-
opacity: 0;
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
:is(ul, menu) {
|
|
558
|
-
visibility: visible;
|
|
559
|
-
position: static;
|
|
560
|
-
display: flex;
|
|
561
|
-
flex-direction: row;
|
|
562
|
-
width: 100%;
|
|
563
|
-
height: 100%;
|
|
564
|
-
gap: 0;
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
:is(ul, menu) li {
|
|
569
|
-
flex: 1;
|
|
570
|
-
margin: 0;
|
|
571
|
-
height: 100%;
|
|
572
|
-
|
|
573
|
-
:is(a, button) {
|
|
574
|
-
display: grid;
|
|
575
|
-
place-items: center;
|
|
576
|
-
width: 100%;
|
|
577
|
-
height: 100%;
|
|
578
|
-
background: transparent;
|
|
579
|
-
box-shadow: none;
|
|
580
|
-
color: var(--md-sys-color-on-primary-container);
|
|
581
|
-
|
|
582
|
-
&:hover {
|
|
583
|
-
background-color: color-mix(in oklab, var(--md-sys-color-on-primary-container) state-opacity("hover"), transparent);
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
&:focus-visible {
|
|
587
|
-
background-color: color-mix(in oklab, var(--md-sys-color-on-primary-container) state-opacity("focus"), transparent);
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
&:active {
|
|
591
|
-
background-color: color-mix(in oklab, var(--md-sys-color-on-primary-container) state-opacity("pressed"), transparent);
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
}
|
|
595
|
-
}
|
|
596
|
-
|
|
597
|
-
.fab-backdrop {
|
|
598
|
-
position: absolute;
|
|
599
|
-
inset: 0 auto auto 0;
|
|
600
|
-
z-index: -1;
|
|
601
|
-
width: 56px;
|
|
602
|
-
height: 56px;
|
|
603
|
-
border-radius: 16px;
|
|
604
|
-
background-color: var(--md-sys-color-primary-container);
|
|
605
|
-
transform: scale(0);
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
|
|
609
|
-
@media (hover: hover) {
|
|
610
|
-
#{$_fab}:not(.click-to-toggle):hover :is(ul, menu) {
|
|
611
|
-
visibility: visible;
|
|
612
|
-
transition-delay: 0s;
|
|
613
|
-
|
|
614
|
-
> li > :is(a, button) {
|
|
615
|
-
opacity: 1;
|
|
616
|
-
transform: none;
|
|
617
|
-
transition-delay: calc(var(--md-comp-fab-stagger) * var(--i, 0));
|
|
618
|
-
}
|
|
619
|
-
}
|
|
620
|
-
}
|
|
621
|
-
|
|
622
|
-
@media (prefers-reduced-motion: reduce) {
|
|
623
|
-
#{$_fab} {
|
|
624
|
-
--md-comp-fab-duration: 0s;
|
|
625
|
-
--md-comp-fab-stagger: 0s;
|
|
626
|
-
}
|
|
627
|
-
}
|
|
@@ -13,13 +13,18 @@
|
|
|
13
13
|
color: var(--md-sys-color-on-surface-variant);
|
|
14
14
|
background-color: var(--md-sys-color-surface-container-low);
|
|
15
15
|
display: inline-flex;
|
|
16
|
-
white-space:
|
|
16
|
+
white-space: normal;
|
|
17
|
+
overflow-wrap: anywhere;
|
|
18
|
+
max-width: 100%;
|
|
19
|
+
min-width: 0;
|
|
17
20
|
gap: 8px;
|
|
18
21
|
margin: 0;
|
|
19
|
-
height: 32px;
|
|
22
|
+
min-height: 32px;
|
|
23
|
+
height: auto;
|
|
20
24
|
padding-left: var(--padding);
|
|
21
25
|
padding-right: var(--padding);
|
|
22
26
|
font-size: var(--font-size);
|
|
27
|
+
line-height: 1.5;
|
|
23
28
|
font-weight: 500;
|
|
24
29
|
border-radius: 8px;
|
|
25
30
|
align-items: center;
|
|
@@ -88,6 +93,7 @@
|
|
|
88
93
|
}
|
|
89
94
|
|
|
90
95
|
.chip > img {
|
|
96
|
+
flex-shrink: 0;
|
|
91
97
|
margin: 0;
|
|
92
98
|
width: 24px;
|
|
93
99
|
height: 24px;
|
|
@@ -102,6 +108,7 @@
|
|
|
102
108
|
|
|
103
109
|
// The delete affordance is a real <button>, so it needs the button reset too.
|
|
104
110
|
.chip .close {
|
|
111
|
+
flex-shrink: 0;
|
|
105
112
|
border-radius: 50%;
|
|
106
113
|
height: 24px;
|
|
107
114
|
width: 24px;
|
|
@@ -119,6 +126,14 @@
|
|
|
119
126
|
@include focus-visible();
|
|
120
127
|
}
|
|
121
128
|
|
|
129
|
+
.chip > button:not(.close) {
|
|
130
|
+
min-width: 0;
|
|
131
|
+
height: auto;
|
|
132
|
+
font: inherit;
|
|
133
|
+
white-space: inherit;
|
|
134
|
+
overflow-wrap: inherit;
|
|
135
|
+
}
|
|
136
|
+
|
|
122
137
|
.chip .close:hover {
|
|
123
138
|
background-color: color-mix(in oklab, var(--md-sys-color-on-surface-variant) state-opacity("hover"), transparent);
|
|
124
139
|
}
|
|
@@ -36,6 +36,7 @@ dialog {
|
|
|
36
36
|
background-color: var(--md-comp-basic-dialog-container-color);
|
|
37
37
|
color: var(--md-sys-color-on-surface);
|
|
38
38
|
outline: none;
|
|
39
|
+
overflow-wrap: anywhere;
|
|
39
40
|
@include z-depth("3");
|
|
40
41
|
|
|
41
42
|
&::backdrop {
|
|
@@ -140,6 +141,13 @@ dialog > :is(form, nav):last-child {
|
|
|
140
141
|
padding: 0 24px 24px;
|
|
141
142
|
border: 0;
|
|
142
143
|
background: none;
|
|
144
|
+
|
|
145
|
+
> :is(button, a.button):not(.icon-button, .circle, .extend) {
|
|
146
|
+
max-width: 100%;
|
|
147
|
+
height: auto;
|
|
148
|
+
min-height: var(--md-comp-filled-button-container-height, 40px);
|
|
149
|
+
white-space: normal;
|
|
150
|
+
}
|
|
143
151
|
}
|
|
144
152
|
|
|
145
153
|
dialog:not(
|
|
@@ -149,10 +157,7 @@ dialog:not(
|
|
|
149
157
|
.right,
|
|
150
158
|
.right-sheet,
|
|
151
159
|
.left,
|
|
152
|
-
.left-sheet
|
|
153
|
-
.floating-sheet,
|
|
154
|
-
:is(.sidenav, .navigation-drawer),
|
|
155
|
-
:is(.sidenav-overlay, .navigation-drawer-overlay)
|
|
160
|
+
.left-sheet
|
|
156
161
|
)
|
|
157
162
|
> :is(form, nav):last-child
|
|
158
163
|
> :is(button, a.button):not(.tonal, .outlined, .elevated, .filled, .icon-button) {
|
|
@@ -4,13 +4,6 @@
|
|
|
4
4
|
// into a close button while it is open. `.fab-menu` is the host; `.active`
|
|
5
5
|
// and `aria-expanded` are the framework's, never the author's.
|
|
6
6
|
//
|
|
7
|
-
// It shares the FloatingActionButton class with the `.fab` speed dial next
|
|
8
|
-
// door and nothing else. The two never collide: `$_fab` is
|
|
9
|
-
// `:is(.fab, .fixed-action-btn)`, and a class selector matches whole class
|
|
10
|
-
// names, so `.fab` does not reach `.fab-menu`. The one name that looks shared
|
|
11
|
-
// is `--md-comp-fab-menu-gap`, which is the speed dial's own gap token and is
|
|
12
|
-
// deliberately not one of the names below.
|
|
13
|
-
//
|
|
14
7
|
// Tokens (M3 md.comp.fab-menu.*, DSP 34.0.21):
|
|
15
8
|
//
|
|
16
9
|
// close-button 56x56, icon 20dp, corner.full, elevation 3, 8dp above list
|
|
@@ -82,6 +75,8 @@ $_fab-menu-roles: ("primary", "secondary", "tertiary");
|
|
|
82
75
|
margin: 0;
|
|
83
76
|
padding: 0;
|
|
84
77
|
list-style: none;
|
|
78
|
+
width: max-content;
|
|
79
|
+
max-inline-size: calc(100vw - 2 * var(--md-comp-fab-menu-offset));
|
|
85
80
|
visibility: hidden;
|
|
86
81
|
transition: visibility 0s var(--md-comp-fab-menu-duration);
|
|
87
82
|
|
|
@@ -95,18 +90,25 @@ $_fab-menu-roles: ("primary", "secondary", "tertiary");
|
|
|
95
90
|
li:nth-last-child(5) { --i: 4; }
|
|
96
91
|
li:nth-last-child(6) { --i: 5; }
|
|
97
92
|
|
|
93
|
+
> li {
|
|
94
|
+
max-inline-size: 100%;
|
|
95
|
+
}
|
|
96
|
+
|
|
98
97
|
> li > :is(a, button) {
|
|
99
98
|
display: inline-flex;
|
|
100
99
|
align-items: center;
|
|
101
100
|
gap: var(--md-comp-fab-menu-menu-item-icon-label-space);
|
|
102
|
-
height: var(--md-comp-fab-menu-menu-item-container-height);
|
|
101
|
+
min-height: var(--md-comp-fab-menu-menu-item-container-height);
|
|
102
|
+
max-inline-size: 100%;
|
|
103
103
|
padding-inline: var(--md-comp-fab-menu-menu-item-leading-space)
|
|
104
104
|
var(--md-comp-fab-menu-menu-item-trailing-space);
|
|
105
105
|
border: none;
|
|
106
106
|
border-radius: 9999px;
|
|
107
107
|
color: var(--md-comp-fab-menu-menu-item-label-text-color);
|
|
108
108
|
background-color: var(--md-comp-fab-menu-menu-item-container-color);
|
|
109
|
-
white-space:
|
|
109
|
+
white-space: normal;
|
|
110
|
+
overflow-wrap: anywhere;
|
|
111
|
+
text-align: start;
|
|
110
112
|
text-decoration: none;
|
|
111
113
|
cursor: pointer;
|
|
112
114
|
appearance: none;
|
|
@@ -21,11 +21,6 @@
|
|
|
21
21
|
// goes inside the existing `:not()` argument list, never chained after it, so
|
|
22
22
|
// the host rule stays exactly as specific as it was.
|
|
23
23
|
//
|
|
24
|
-
// The navigation drawer is the deliberate exception. Its `$_row` geometry has
|
|
25
|
-
// no opt-out for `.button` either: every row in a drawer is one shape, and
|
|
26
|
-
// carving an icon button out of that is the drawer's decision to make, not
|
|
27
|
-
// this component's.
|
|
28
|
-
//
|
|
29
24
|
// Anatomy is the HTML — one control, one icon, and the name on the control.
|
|
30
25
|
// The icon is decoration (`aria-hidden`), so `aria-label` is the only name the
|
|
31
26
|
// control has; `semantics.json` enforces both halves of that.
|
|
@@ -28,7 +28,6 @@
|
|
|
28
28
|
@forward "expanding-card";
|
|
29
29
|
@forward "bottom-sheet";
|
|
30
30
|
@forward "side-sheet";
|
|
31
|
-
@forward "floating-sheet";
|
|
32
31
|
@forward "chips";
|
|
33
32
|
@forward "lightbox";
|
|
34
33
|
@forward "docked-display";
|
|
@@ -36,7 +35,6 @@
|
|
|
36
35
|
@forward "forms";
|
|
37
36
|
@forward "table_of_contents";
|
|
38
37
|
@forward "scrollspy";
|
|
39
|
-
@forward "navigation-drawer";
|
|
40
38
|
@forward "progress";
|
|
41
39
|
@forward "carousel";
|
|
42
40
|
@forward "datepicker";
|
|
@@ -47,8 +45,5 @@
|
|
|
47
45
|
@forward "fab-menu";
|
|
48
46
|
@forward "loading-indicator";
|
|
49
47
|
@forward "search";
|
|
50
|
-
@forward "segmented-buttons";
|
|
51
|
-
@forward "banners";
|
|
52
48
|
@forward "drag-handle";
|
|
53
|
-
@forward "bottom-app-bar";
|
|
54
49
|
@forward "scrim";
|
|
@@ -506,7 +506,7 @@ menu[id] {
|
|
|
506
506
|
}
|
|
507
507
|
|
|
508
508
|
// Nested menu. Optional, desktop-first. No second Menu instance —
|
|
509
|
-
// a <menu> inside an <li> is a flyout. Hover
|
|
509
|
+
// a <menu> inside an <li> is a flyout. Hover on fine
|
|
510
510
|
// pointers; .open is the tap / keyboard switch.
|
|
511
511
|
menu[id] li > menu {
|
|
512
512
|
@include menu-surface;
|
|
@@ -530,7 +530,7 @@ menu[id] li > menu {
|
|
|
530
530
|
}
|
|
531
531
|
|
|
532
532
|
@media (hover: hover) and (pointer: fine) {
|
|
533
|
-
menu[id] li:
|
|
533
|
+
menu[id] li:hover > menu {
|
|
534
534
|
visibility: visible;
|
|
535
535
|
opacity: 1;
|
|
536
536
|
pointer-events: auto;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
@use "../abstracts" as *;
|
|
2
2
|
|
|
3
3
|
// Navigation rail. Destinations on mid-size screens, not the bottom
|
|
4
|
-
// navigation bar
|
|
4
|
+
// navigation bar.
|
|
5
5
|
//
|
|
6
6
|
// Anatomy is the HTML: a nav.navigation-rail. The first
|
|
7
7
|
// button:not(.button) is the menu toggle. A .button child is the
|