@expressivecss/expressive 0.2.0 → 0.4.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/README.md +8 -8
- package/dist/css/expressive.css +1915 -1566
- 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/js/expressive.cjs +1338 -1528
- package/dist/js/expressive.cjs.map +4 -4
- package/dist/js/expressive.js +1338 -1528
- package/dist/js/expressive.js.map +4 -4
- package/dist/js/expressive.min.js +10 -20
- package/dist/js/expressive.min.js.map +4 -4
- package/dist/js/expressive.mjs +1338 -1529
- package/dist/js/expressive.mjs.map +4 -4
- package/dist/types/components/autocomplete.d.ts +2 -9
- package/dist/types/components/buttons.d.ts +19 -43
- package/dist/types/components/cards.d.ts +3 -6
- package/dist/types/components/carousel.d.ts +42 -48
- package/dist/types/components/characterCounter.d.ts +3 -5
- package/dist/types/components/chips.d.ts +4 -4
- package/dist/types/components/collapsible.d.ts +28 -23
- package/dist/types/components/datepicker.d.ts +2 -8
- package/dist/types/components/dropdown.d.ts +11 -2
- package/dist/types/components/index.d.ts +0 -1
- package/dist/types/components/lightbox.d.ts +2 -2
- package/dist/types/components/parallax.d.ts +7 -37
- package/dist/types/components/pushpin.d.ts +2 -2
- package/dist/types/components/range.d.ts +2 -2
- package/dist/types/components/registry.d.ts +0 -4
- package/dist/types/components/scrollspy.d.ts +26 -50
- package/dist/types/components/select.d.ts +20 -6
- package/dist/types/components/sidenav.d.ts +40 -55
- package/dist/types/components/slider.d.ts +2 -2
- package/dist/types/components/tabs.d.ts +2 -2
- package/dist/types/components/tapTarget.d.ts +25 -26
- package/dist/types/components/timepicker.d.ts +2 -4
- package/dist/types/components/tooltip.d.ts +2 -2
- package/dist/types/core/component.d.ts +4 -4
- package/dist/types/index.d.ts +1 -1
- package/package.json +2 -2
- package/src/sass/README.md +3 -6
- package/src/sass/abstracts/_breakpoints.scss +0 -16
- package/src/sass/abstracts/_variables.scss +0 -21
- package/src/sass/base/_grid.scss +0 -19
- package/src/sass/components/_badges.scss +6 -5
- package/src/sass/components/_breadcrumb.scss +93 -16
- package/src/sass/components/_buttons.scss +212 -145
- package/src/sass/components/_cards.scss +50 -123
- package/src/sass/components/_carousel.scss +128 -63
- package/src/sass/components/_chips.scss +1 -1
- package/src/sass/components/_collapsible.scss +158 -60
- package/src/sass/components/_collection.scss +146 -80
- package/src/sass/components/_datepicker.scss +1 -15
- package/src/sass/components/_dropdown.scss +110 -14
- package/src/sass/components/_icons-material-design.scss +77 -4
- package/src/sass/components/_index.scss +1 -0
- package/src/sass/components/_lightbox.scss +4 -0
- package/src/sass/components/_modal.scss +13 -31
- package/src/sass/components/_navbar.scss +24 -6
- package/src/sass/components/_page-footer.scss +134 -15
- package/src/sass/components/_pagination.scss +131 -25
- package/src/sass/components/_parallax.scss +96 -21
- package/src/sass/components/_preloader.scss +145 -300
- package/src/sass/components/_scrollspy.scss +18 -0
- package/src/sass/components/_sidenav.scss +230 -119
- package/src/sass/components/_slider.scss +8 -0
- package/src/sass/components/_table_of_contents.scss +30 -14
- package/src/sass/components/_tabs.scss +54 -35
- package/src/sass/components/_tapTarget.scss +128 -45
- package/src/sass/components/_toast.scss +10 -11
- package/src/sass/components/_toolbar.scss +2 -2
- package/src/sass/components/_tooltip.scss +4 -9
- package/src/sass/components/_transitions.scss +0 -5
- package/src/sass/components/forms/_index.scss +0 -5
- package/src/sass/components/forms/_input-fields.scss +49 -52
- package/src/sass/components/forms/_select.scss +175 -60
- package/src/sass/components/forms/_switches.scss +21 -8
- package/src/sass/utilities/_helpers.scss +1 -3
- package/src/sass/utilities/_typescale.scss +0 -5
- package/src/sass/utilities/_visibility.scss +2 -2
- package/dist/types/components/modal.d.ts +0 -45
|
@@ -4,9 +4,8 @@
|
|
|
4
4
|
//
|
|
5
5
|
// Anatomy is the HTML. A <nav class="tabs"> of <a href="#panel"> is the
|
|
6
6
|
// bar. A heading or <span> is the label; a leading <i> is the icon.
|
|
7
|
-
// .active is the selected tab.
|
|
8
|
-
//
|
|
9
|
-
// .tabs-fixed-width, .transparent / .tabs-transparent.
|
|
7
|
+
// .active is the selected tab. Helpers: .tabs-secondary, .horizontal,
|
|
8
|
+
// .max, .transparent.
|
|
10
9
|
//
|
|
11
10
|
// Tokens follow https://m3.material.io/components/tabs/specs
|
|
12
11
|
// primary surface, 48dp (64 with stacked icon), title-small
|
|
@@ -18,7 +17,13 @@
|
|
|
18
17
|
// divider 1dp outline-variant
|
|
19
18
|
// disabled 38%
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
// Comma list of tab-link selectors. Always nest suffixes inside
|
|
21
|
+
// `#{$_tab} { &.foo {} }` — interpolating `#{$_tab}.foo` only
|
|
22
|
+
// attaches `.foo` to the last alternative and leaves `> a` bare
|
|
23
|
+
// (same bug as the icon size classes). That compiled the disabled
|
|
24
|
+
// rule as `.tabs > a, .tabs > .tab > a.disabled`, so every
|
|
25
|
+
// `nav.tabs > a` got pointer-events:none and could not switch panels.
|
|
26
|
+
$_tab: "> a, > .tab > a";
|
|
22
27
|
|
|
23
28
|
.tabs {
|
|
24
29
|
--md-comp-primary-tab-container-color: var(--md-sys-color-surface);
|
|
@@ -49,7 +54,7 @@ $_tab: "> :is(a, .tab > a, li.tab > a)";
|
|
|
49
54
|
display: none;
|
|
50
55
|
}
|
|
51
56
|
|
|
52
|
-
>
|
|
57
|
+
> .tab {
|
|
53
58
|
display: flex;
|
|
54
59
|
flex: 0 0 auto;
|
|
55
60
|
list-style: none;
|
|
@@ -115,22 +120,40 @@ $_tab: "> :is(a, .tab > a, li.tab > a)";
|
|
|
115
120
|
&.active:focus {
|
|
116
121
|
background-color: color-mix(in oklab, var(--md-sys-color-primary) 10%, transparent);
|
|
117
122
|
}
|
|
123
|
+
|
|
124
|
+
// Disabled — on the <a>. The wrapping `.tab.disabled` case is
|
|
125
|
+
// below; it cannot live in this block.
|
|
126
|
+
&.disabled,
|
|
127
|
+
&[aria-disabled="true"] {
|
|
128
|
+
color: color-mix(in oklab, var(--md-sys-color-on-surface) 38%, transparent);
|
|
129
|
+
background-color: transparent;
|
|
130
|
+
cursor: default;
|
|
131
|
+
pointer-events: none;
|
|
132
|
+
}
|
|
118
133
|
}
|
|
119
134
|
|
|
120
135
|
// Stacked icon + label is 64dp (primary).
|
|
121
|
-
&:not(.horizontal
|
|
122
|
-
|
|
123
|
-
|
|
136
|
+
&:not(.horizontal) {
|
|
137
|
+
#{$_tab} {
|
|
138
|
+
&:has(> i) {
|
|
139
|
+
min-height: var(--md-comp-primary-tab-with-icon-container-height);
|
|
140
|
+
padding-block: 8px;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
124
143
|
}
|
|
125
144
|
|
|
126
145
|
// CSS indicator when the JS sliding bar is not present.
|
|
127
|
-
&:not(:has(> .indicator))
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
146
|
+
&:not(:has(> .indicator)) {
|
|
147
|
+
#{$_tab} {
|
|
148
|
+
&.active::after {
|
|
149
|
+
content: "";
|
|
150
|
+
position: absolute;
|
|
151
|
+
inset: auto 0 0 0;
|
|
152
|
+
height: var(--md-comp-primary-tab-active-indicator-height);
|
|
153
|
+
background-color: var(--md-comp-primary-tab-active-indicator-color);
|
|
154
|
+
border-radius: var(--md-comp-primary-tab-active-indicator-shape);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
134
157
|
}
|
|
135
158
|
|
|
136
159
|
> .indicator {
|
|
@@ -145,10 +168,7 @@ $_tab: "> :is(a, .tab > a, li.tab > a)";
|
|
|
145
168
|
margin: 0;
|
|
146
169
|
}
|
|
147
170
|
|
|
148
|
-
|
|
149
|
-
#{$_tab}.disabled,
|
|
150
|
-
#{$_tab}[aria-disabled="true"],
|
|
151
|
-
> :is(.tab, li.tab).disabled > a {
|
|
171
|
+
> .tab.disabled > a {
|
|
152
172
|
color: color-mix(in oklab, var(--md-sys-color-on-surface) 38%, transparent);
|
|
153
173
|
background-color: transparent;
|
|
154
174
|
cursor: default;
|
|
@@ -169,8 +189,7 @@ $_tab: "> :is(a, .tab > a, li.tab > a)";
|
|
|
169
189
|
}
|
|
170
190
|
|
|
171
191
|
// Inline icon + label (primary can do this too).
|
|
172
|
-
.tabs.horizontal
|
|
173
|
-
.tabs.tabs-horizontal {
|
|
192
|
+
.tabs.horizontal {
|
|
174
193
|
#{$_tab} {
|
|
175
194
|
flex-direction: row;
|
|
176
195
|
gap: 8px;
|
|
@@ -180,9 +199,8 @@ $_tab: "> :is(a, .tab > a, li.tab > a)";
|
|
|
180
199
|
}
|
|
181
200
|
|
|
182
201
|
// Equal-width tabs. Default on compact so a few destinations still fill.
|
|
183
|
-
.tabs.max
|
|
184
|
-
.
|
|
185
|
-
> :is(a, .tab, li.tab) {
|
|
202
|
+
.tabs.max {
|
|
203
|
+
> :is(a, .tab) {
|
|
186
204
|
flex: 1 1 0;
|
|
187
205
|
min-width: 0;
|
|
188
206
|
}
|
|
@@ -194,7 +212,7 @@ $_tab: "> :is(a, .tab > a, li.tab > a)";
|
|
|
194
212
|
|
|
195
213
|
@include bp-down("large") {
|
|
196
214
|
.tabs {
|
|
197
|
-
> :is(a, .tab
|
|
215
|
+
> :is(a, .tab) {
|
|
198
216
|
flex: 1 1 0;
|
|
199
217
|
min-width: 0;
|
|
200
218
|
}
|
|
@@ -207,8 +225,7 @@ $_tab: "> :is(a, .tab > a, li.tab > a)";
|
|
|
207
225
|
}
|
|
208
226
|
|
|
209
227
|
// On a colored app bar (header.primary > .tabs).
|
|
210
|
-
.tabs.transparent
|
|
211
|
-
.tabs.tabs-transparent {
|
|
228
|
+
.tabs.transparent {
|
|
212
229
|
--md-comp-primary-tab-container-color: transparent;
|
|
213
230
|
--md-comp-primary-tab-label-text-color: color-mix(
|
|
214
231
|
in oklab,
|
|
@@ -219,14 +236,16 @@ $_tab: "> :is(a, .tab > a, li.tab > a)";
|
|
|
219
236
|
--md-comp-primary-tab-active-indicator-color: var(--md-sys-color-on-primary);
|
|
220
237
|
border-block-end-color: color-mix(in oklab, var(--md-sys-color-on-primary) 20%, transparent);
|
|
221
238
|
|
|
222
|
-
#{$_tab}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
239
|
+
#{$_tab} {
|
|
240
|
+
&:hover,
|
|
241
|
+
&:focus {
|
|
242
|
+
color: var(--md-sys-color-on-primary);
|
|
243
|
+
background-color: color-mix(in oklab, var(--md-sys-color-on-primary) 8%, transparent);
|
|
244
|
+
}
|
|
227
245
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
246
|
+
&.active:hover,
|
|
247
|
+
&.active:focus {
|
|
248
|
+
background-color: color-mix(in oklab, var(--md-sys-color-on-primary) 10%, transparent);
|
|
249
|
+
}
|
|
231
250
|
}
|
|
232
251
|
}
|
|
@@ -1,104 +1,187 @@
|
|
|
1
1
|
@use "../abstracts" as *;
|
|
2
2
|
|
|
3
|
+
// Tap target (Feature Discovery). A circular spotlight centered on an
|
|
4
|
+
// origin. JS writes --md-comp-tap-target-x/y/origin-size and data-edge;
|
|
5
|
+
// this file does the rest.
|
|
6
|
+
//
|
|
7
|
+
// Tokens:
|
|
8
|
+
// --md-comp-tap-target-size 480px
|
|
9
|
+
// --md-comp-tap-target-z 1000
|
|
10
|
+
// --md-comp-tap-target-container-color
|
|
11
|
+
// --md-comp-tap-target-supporting-color
|
|
12
|
+
// --md-comp-tap-target-duration 300ms
|
|
13
|
+
// --md-comp-tap-target-easing soft ease-in-out
|
|
14
|
+
|
|
3
15
|
.tap-target-wrapper {
|
|
4
|
-
|
|
5
|
-
|
|
16
|
+
--md-comp-tap-target-size: 480px;
|
|
17
|
+
--md-comp-tap-target-z: 1000;
|
|
18
|
+
--md-comp-tap-target-container-color: var(--md-sys-color-primary-container);
|
|
19
|
+
--md-comp-tap-target-supporting-color: var(--md-sys-color-on-primary-container);
|
|
20
|
+
--md-comp-tap-target-duration: 300ms;
|
|
21
|
+
--md-comp-tap-target-easing: cubic-bezier(0.65, 0, 0.35, 1);
|
|
22
|
+
--md-comp-tap-target-x: 50%;
|
|
23
|
+
--md-comp-tap-target-y: 50%;
|
|
24
|
+
--md-comp-tap-target-origin-size: 56px;
|
|
25
|
+
|
|
26
|
+
box-sizing: border-box;
|
|
6
27
|
position: fixed;
|
|
7
|
-
|
|
28
|
+
inset: auto;
|
|
29
|
+
left: var(--md-comp-tap-target-x);
|
|
30
|
+
top: var(--md-comp-tap-target-y);
|
|
31
|
+
translate: -50% -50%;
|
|
32
|
+
width: var(--md-comp-tap-target-size);
|
|
33
|
+
height: var(--md-comp-tap-target-size);
|
|
34
|
+
margin: 0;
|
|
35
|
+
padding: 0;
|
|
36
|
+
overflow: visible;
|
|
37
|
+
border: 0;
|
|
38
|
+
background: transparent;
|
|
39
|
+
color: var(--md-comp-tap-target-supporting-color);
|
|
8
40
|
visibility: hidden;
|
|
9
|
-
|
|
41
|
+
pointer-events: none;
|
|
42
|
+
z-index: var(--md-comp-tap-target-z);
|
|
43
|
+
transition:
|
|
44
|
+
visibility 0s var(--md-comp-tap-target-duration),
|
|
45
|
+
overlay var(--md-comp-tap-target-duration) allow-discrete,
|
|
46
|
+
display var(--md-comp-tap-target-duration) allow-discrete;
|
|
10
47
|
}
|
|
11
48
|
|
|
12
|
-
.tap-target-wrapper.open {
|
|
49
|
+
.tap-target-wrapper:is(.open, :popover-open) {
|
|
13
50
|
visibility: visible;
|
|
14
|
-
|
|
51
|
+
pointer-events: none;
|
|
52
|
+
transition-delay: 0s;
|
|
15
53
|
|
|
16
54
|
.tap-target {
|
|
17
55
|
transform: scale(1);
|
|
18
|
-
opacity:
|
|
19
|
-
transition:
|
|
20
|
-
transform .3s cubic-bezier(.42,0,.58,1),
|
|
21
|
-
opacity .3s cubic-bezier(.42,0,.58,1);
|
|
56
|
+
opacity: 1;
|
|
22
57
|
}
|
|
23
58
|
|
|
24
59
|
.tap-target-wave::before {
|
|
25
60
|
transform: scale(1);
|
|
26
61
|
}
|
|
62
|
+
|
|
27
63
|
.tap-target-wave::after {
|
|
28
64
|
visibility: visible;
|
|
29
65
|
animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;
|
|
30
|
-
transition:
|
|
31
|
-
opacity .3s,
|
|
32
|
-
transform .3s,
|
|
33
|
-
visibility 0s 1s;
|
|
34
66
|
}
|
|
35
67
|
}
|
|
36
68
|
|
|
37
69
|
.tap-target {
|
|
38
70
|
position: absolute;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
color: var(--md-sys-color-primary);
|
|
43
|
-
box-shadow: 0 20px 20px 0 rgba(0, 0, 0, 0.14), 0 10px 50px 0 rgba(0, 0, 0, 0.12), 0 30px 10px -20px rgba(0, 0, 0, 0.2);
|
|
71
|
+
inset: 0;
|
|
72
|
+
display: grid;
|
|
73
|
+
box-sizing: border-box;
|
|
44
74
|
width: 100%;
|
|
45
75
|
height: 100%;
|
|
76
|
+
overflow: hidden;
|
|
77
|
+
border-radius: 50%;
|
|
78
|
+
background-color: var(--md-comp-tap-target-container-color);
|
|
79
|
+
color: var(--md-comp-tap-target-supporting-color);
|
|
46
80
|
opacity: 0;
|
|
47
81
|
transform: scale(0);
|
|
48
|
-
transition:
|
|
49
|
-
|
|
82
|
+
transition:
|
|
83
|
+
transform var(--md-comp-tap-target-duration) var(--md-comp-tap-target-easing),
|
|
84
|
+
opacity var(--md-comp-tap-target-duration) var(--md-comp-tap-target-easing);
|
|
85
|
+
@include z-depth("3");
|
|
86
|
+
@include typescale("body-medium");
|
|
50
87
|
}
|
|
51
88
|
|
|
52
89
|
.tap-target-content {
|
|
53
90
|
position: relative;
|
|
54
|
-
|
|
91
|
+
z-index: 1;
|
|
92
|
+
display: grid;
|
|
93
|
+
align-content: start;
|
|
94
|
+
gap: 8px;
|
|
95
|
+
box-sizing: border-box;
|
|
96
|
+
max-width: min(18rem, 52%);
|
|
97
|
+
padding: calc(var(--md-comp-tap-target-origin-size) * 0.5 + 20px);
|
|
98
|
+
pointer-events: auto;
|
|
99
|
+
|
|
100
|
+
> :is(h1, h2, h3, h4, h5, h6) {
|
|
101
|
+
margin: 0;
|
|
102
|
+
color: inherit;
|
|
103
|
+
@include typescale("title-medium");
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
> p {
|
|
107
|
+
margin: 0;
|
|
108
|
+
color: inherit;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.tap-target-wrapper[data-edge^="top"] .tap-target-content {
|
|
113
|
+
align-self: end;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.tap-target-wrapper[data-edge^="bottom"] .tap-target-content {
|
|
117
|
+
align-self: start;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.tap-target-wrapper[data-edge$="left"] .tap-target-content {
|
|
121
|
+
justify-self: end;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.tap-target-wrapper[data-edge$="right"] .tap-target-content {
|
|
125
|
+
justify-self: start;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.tap-target-wrapper[data-edge$="center"] .tap-target-content {
|
|
129
|
+
justify-self: center;
|
|
130
|
+
max-width: min(22rem, 80%);
|
|
131
|
+
text-align: center;
|
|
55
132
|
}
|
|
56
133
|
|
|
57
134
|
.tap-target-wave {
|
|
58
135
|
position: absolute;
|
|
136
|
+
top: 50%;
|
|
137
|
+
left: 50%;
|
|
138
|
+
z-index: 0;
|
|
139
|
+
width: calc(var(--md-comp-tap-target-origin-size) * 2);
|
|
140
|
+
height: calc(var(--md-comp-tap-target-origin-size) * 2);
|
|
141
|
+
translate: -50% -50%;
|
|
59
142
|
border-radius: 50%;
|
|
60
|
-
|
|
143
|
+
pointer-events: none;
|
|
61
144
|
|
|
62
145
|
&::before,
|
|
63
146
|
&::after {
|
|
64
|
-
content:
|
|
65
|
-
display: block;
|
|
147
|
+
content: "";
|
|
66
148
|
position: absolute;
|
|
67
|
-
|
|
68
|
-
|
|
149
|
+
inset: 0;
|
|
150
|
+
display: block;
|
|
69
151
|
border-radius: 50%;
|
|
70
|
-
background-color: var(--md-sys-color-surface)
|
|
152
|
+
background-color: var(--md-sys-color-surface);
|
|
71
153
|
}
|
|
154
|
+
|
|
72
155
|
&::before {
|
|
73
156
|
transform: scale(0);
|
|
74
|
-
transition: transform
|
|
157
|
+
transition: transform var(--md-comp-tap-target-duration)
|
|
158
|
+
var(--md-comp-tap-target-easing);
|
|
75
159
|
}
|
|
160
|
+
|
|
76
161
|
&::after {
|
|
77
162
|
visibility: hidden;
|
|
78
|
-
transition:
|
|
79
|
-
opacity .3s,
|
|
80
|
-
transform .3s,
|
|
81
|
-
visibility 0s;
|
|
82
163
|
z-index: -1;
|
|
83
164
|
}
|
|
84
165
|
}
|
|
85
166
|
|
|
167
|
+
// Raised only on the non-popover path so a static origin stays above the
|
|
168
|
+
// circle. Never set position here — a FAB may already be fixed.
|
|
86
169
|
.tap-target-origin {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
z-index: 10002;
|
|
90
|
-
position: absolute !important;
|
|
91
|
-
transform: translate(-50%,-50%);
|
|
170
|
+
z-index: calc(var(--md-comp-tap-target-z, 1000) + 2);
|
|
171
|
+
}
|
|
92
172
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
173
|
+
@include bp-down("small") {
|
|
174
|
+
.tap-target-wrapper {
|
|
175
|
+
--md-comp-tap-target-size: 360px;
|
|
96
176
|
}
|
|
97
177
|
}
|
|
98
178
|
|
|
99
|
-
@
|
|
100
|
-
.tap-target
|
|
101
|
-
|
|
102
|
-
|
|
179
|
+
@media (prefers-reduced-motion: reduce) {
|
|
180
|
+
.tap-target-wrapper {
|
|
181
|
+
--md-comp-tap-target-duration: 0s;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.tap-target-wrapper:is(.open, :popover-open) .tap-target-wave::after {
|
|
185
|
+
animation: none;
|
|
103
186
|
}
|
|
104
187
|
}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
// Snackbars (toasts).
|
|
4
4
|
//
|
|
5
|
-
// Anatomy is the HTML. A .snackbar
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// <i> is an icon.
|
|
5
|
+
// Anatomy is the HTML. A .snackbar is the container. A <p> (or <span>,
|
|
6
|
+
// or loose text) is the supporting text. A trailing <button> is the
|
|
7
|
+
// action; a .circle button is the optional close. An optional leading
|
|
8
|
+
// <i> is an icon.
|
|
9
9
|
//
|
|
10
10
|
// Tokens follow https://m3.material.io/components/snackbar/specs
|
|
11
11
|
// container inverse-surface, 4dp corners, elevation 3, min 48dp
|
|
@@ -15,11 +15,10 @@
|
|
|
15
15
|
// close 24dp icon, inverse-on-surface
|
|
16
16
|
// inset 8dp compact, 24dp from start+bottom on larger screens
|
|
17
17
|
//
|
|
18
|
-
// The constructor
|
|
19
|
-
//
|
|
20
|
-
// There is no AutoInit and no toast() helper.
|
|
18
|
+
// The constructor adds .snackbar. A static .snackbar is in-flow (docs
|
|
19
|
+
// previews). .active pins it to the viewport. There is no AutoInit.
|
|
21
20
|
|
|
22
|
-
$_bar: "
|
|
21
|
+
$_bar: ".snackbar";
|
|
23
22
|
|
|
24
23
|
#toast-container {
|
|
25
24
|
--md-comp-snackbar-container-margin-leading: 8px;
|
|
@@ -128,7 +127,7 @@ $_bar: ":is(.toast, .snackbar)";
|
|
|
128
127
|
}
|
|
129
128
|
|
|
130
129
|
// Inline links in the supporting text use the action color.
|
|
131
|
-
a:not(.button
|
|
130
|
+
a:not(.button) {
|
|
132
131
|
color: var(--md-comp-snackbar-action-label-text-color);
|
|
133
132
|
}
|
|
134
133
|
|
|
@@ -147,8 +146,8 @@ $_bar: ":is(.toast, .snackbar)";
|
|
|
147
146
|
}
|
|
148
147
|
|
|
149
148
|
// Text action — inverse-primary, not the filled common-button default.
|
|
150
|
-
> :is(button, a.button
|
|
151
|
-
> nav > :is(button, a.button
|
|
149
|
+
> :is(button, a.button):not(.circle),
|
|
150
|
+
> nav > :is(button, a.button):not(.circle) {
|
|
152
151
|
flex: 0 0 auto;
|
|
153
152
|
height: 40px;
|
|
154
153
|
min-width: 48px;
|
|
@@ -49,7 +49,7 @@ nav.toolbar {
|
|
|
49
49
|
|
|
50
50
|
// Actions — transparent at rest so they sit on the container, not filled.
|
|
51
51
|
// .extra is the 56dp FAB; leave it alone so a docked bar can embed one.
|
|
52
|
-
> :is(a, button):not(.
|
|
52
|
+
> :is(a, button):not(.extra) {
|
|
53
53
|
box-sizing: border-box;
|
|
54
54
|
display: inline-flex;
|
|
55
55
|
flex: 0 0 auto;
|
|
@@ -103,7 +103,7 @@ nav.toolbar {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
// Icon-only — .circle, or an <i> with no <span> sibling.
|
|
106
|
-
> :is(a, button):not(.
|
|
106
|
+
> :is(a, button):not(.extra):is(.circle, :has(> i):not(:has(> span))) {
|
|
107
107
|
width: var(--md-comp-toolbar-action-size);
|
|
108
108
|
padding: 0;
|
|
109
109
|
border-radius: 50%;
|
|
@@ -14,11 +14,9 @@
|
|
|
14
14
|
// gap 4dp from the activator
|
|
15
15
|
//
|
|
16
16
|
// The JS plugin still exists: .tooltipped + data-tooltip, AutoInit,
|
|
17
|
-
// class .tooltip
|
|
18
|
-
// is an alias. There is no data-html / unsafeHTML.
|
|
17
|
+
// class .tooltip appended to <body>. There is no data-html / unsafeHTML.
|
|
19
18
|
|
|
20
|
-
.tooltip
|
|
21
|
-
.material-tooltip {
|
|
19
|
+
.tooltip {
|
|
22
20
|
--md-comp-plain-tooltip-container-color: var(--md-sys-color-inverse-surface);
|
|
23
21
|
--md-comp-plain-tooltip-supporting-text-color: var(--md-sys-color-inverse-on-surface);
|
|
24
22
|
--md-comp-plain-tooltip-container-shape: 4px;
|
|
@@ -109,8 +107,7 @@
|
|
|
109
107
|
|
|
110
108
|
// JS plugin: appended to <body>, top/left set in script. Do not use the
|
|
111
109
|
// child-positioning rules; they would fight the inline transform.
|
|
112
|
-
body > .tooltip
|
|
113
|
-
.material-tooltip {
|
|
110
|
+
body > .tooltip {
|
|
114
111
|
position: absolute;
|
|
115
112
|
left: 0;
|
|
116
113
|
top: 0;
|
|
@@ -121,9 +118,7 @@ body > .tooltip,
|
|
|
121
118
|
|
|
122
119
|
// Rich tooltip — title, supporting text, optional action.
|
|
123
120
|
.tooltip.rich,
|
|
124
|
-
.tooltip.max
|
|
125
|
-
.material-tooltip.rich,
|
|
126
|
-
.material-tooltip.max {
|
|
121
|
+
.tooltip.max {
|
|
127
122
|
--md-comp-rich-tooltip-container-color: var(--md-sys-color-surface);
|
|
128
123
|
--md-comp-rich-tooltip-container-shape: 12px;
|
|
129
124
|
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
@use "../abstracts" as *;
|
|
2
2
|
|
|
3
|
-
// Starting states for JS-driven animations: Sidenav staggers its list items in,
|
|
4
|
-
// and .fade-in is applied before an element is animated into view.
|
|
5
|
-
ul.staggered-list li { opacity: 0; }
|
|
6
|
-
.fade-in { opacity: 0; transform-origin: 0 50%; }
|
|
7
|
-
|
|
8
3
|
.scale-transition {
|
|
9
4
|
transition: transform .3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important;
|
|
10
5
|
|