Skip to content

Commit 45626c7

Browse files
committed
new easing!
1 parent affbb15 commit 45626c7

File tree

8 files changed

+137
-17
lines changed

8 files changed

+137
-17
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "m3-svelte",
3-
"version": "3.4.12",
3+
"version": "3.5.0",
44
"license": "Apache-2.0 OR GPL-3.0-only",
55
"repository": "KTibow/m3-svelte",
66
"author": {

src/lib/containers/Dialog.svelte

+3-3
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@
117117
visibility: visible;
118118
pointer-events: auto;
119119
animation:
120-
dialogIn 0.5s cubic-bezier(0.05, 0.7, 0.1, 1),
121-
opacity 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
120+
dialogIn 500ms var(--m3-easing-decel),
121+
opacity 100ms var(--m3-easing-decel);
122122
}
123123
dialog[open] .headline {
124124
animation: opacity 150ms;
@@ -129,7 +129,7 @@
129129
dialog[open] .buttons {
130130
position: relative;
131131
animation:
132-
buttonsIn 0.5s cubic-bezier(0.05, 0.7, 0.1, 1),
132+
buttonsIn 500ms var(--m3-easing-decel),
133133
opacity 200ms 100ms backwards;
134134
}
135135
dialog::backdrop {

src/lib/containers/SnackbarItem.svelte

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
background-color: rgb(var(--m3-scheme-inverse-surface));
2626
color: rgb(var(--m3-scheme-inverse-on-surface));
2727
animation:
28-
snackbarIn 0.5s cubic-bezier(0.05, 0.7, 0.1, 1),
29-
opacity 100ms cubic-bezier(0.05, 0.7, 0.1, 1);
28+
snackbarIn 500ms var(--m3-easing-decel),
29+
opacity 100ms var(--m3-easing-decel);
3030
}
3131
/*@TODO: Fix animation with different shaping or something*/
3232
@keyframes snackbarIn {

src/lib/forms/Switch.svelte

+4-4
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
background-color: rgb(var(--m3-scheme-outline));
8686
cursor: pointer;
8787
-webkit-tap-highlight-color: transparent;
88-
transition: all 300ms cubic-bezier(0.271, -0.011, 0, 1.449);
88+
transition: all 300ms var(--m3-easing);
8989
9090
left: 0.5rem;
9191
top: 50%;
@@ -100,8 +100,8 @@
100100
color: rgb(var(--m3-scheme-on-primary-container));
101101
opacity: 0;
102102
transition:
103-
opacity 300ms cubic-bezier(0.271, -0.011, 0, 1.449),
104-
scale 300ms cubic-bezier(0.271, -0.011, 0, 1.449);
103+
opacity 300ms var(--m3-easing),
104+
scale 300ms var(--m3-easing);
105105
}
106106
.hover {
107107
position: absolute;
@@ -111,7 +111,7 @@
111111
112112
cursor: pointer;
113113
-webkit-tap-highlight-color: transparent;
114-
transition: all 300ms cubic-bezier(0.271, -0.011, 0, 1.449);
114+
transition: all 300ms var(--m3-easing);
115115
116116
left: 1rem;
117117
top: 50%;

src/lib/misc/easing.ts

+19-3
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,29 @@ export const easeEmphasized = createEase([
3333
[0.25, 1],
3434
[1, 1],
3535
],
36-
]); /* css versions:
37-
with limited overshoot:
36+
]);
37+
/*
38+
=== NEW CSS VERSION ===
39+
is in var(--m3-easing), generated with
40+
const createCSSEase = (lutOptions: [number, number][][]) => {
41+
const lut = lutOptions.map((args) => createBezierLUT(args)).flat();
42+
let stops: number[] = [];
43+
for (let t = 0; t <= 1; t += 0.01) {
44+
const closestPoint = lut.find((p) => p[0] >= t);
45+
const closestY = closestPoint ? closestPoint[1] : 1;
46+
stops.push(closestY);
47+
}
48+
49+
return `linear(${stops.map((s) => +s.toFixed(3)).join(", ")})`;
50+
};
51+
52+
=== OLD CSS VERSION: LIMITED OVERSHOOT ===
3853
https://cdn.discordapp.com/attachments/1058124584286683237/1064238491904524308/w9blD3eMKQBwAAAABJRU5ErkJggg.png
3954
cubic-bezier(0.254, 0.029, 0, 1.2) is preferred, it is the most accurate to the acceleration
4055
cubic-bezier(0.356, 0.701, 0, 1.004) is the most accurate to the deceleration
4156
cubic-bezier(0.291, 0.281, 0, 1.2) has no weighting
42-
unlimited overshoot:
57+
58+
=== OLD CSS VERSION: UNLIMITED OVERSHOOT ===
4359
https://cdn.discordapp.com/attachments/1058124584286683237/1064238129306927124/H47ZvYKwT8COjeuQXsI8AE4554luCbtMqAAqAJubZ9I2452QBcREREJgab5REREREKgZEpEREQkBEqmREREREKgZEpEREQkBEqmREREREKgZEpEREQkBEqmREREREKgZEpEREQkBP8PcBLo5kfHxSYAAAAASUVORK5CYII.png
4460
cubic-bezier(0.271, -0.011, 0, 1.449) is the most accurate to the acceleration (but has a large overshoot)
4561
the deceleration is the same as before

src/lib/misc/styles.css

+104
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,110 @@
3434

3535
--m3-font: Roboto, system-ui, sans-serif;
3636

37+
--m3-easing: linear(
38+
0,
39+
0.001,
40+
0.004,
41+
0.008,
42+
0.013,
43+
0.022,
44+
0.031,
45+
0.043,
46+
0.06,
47+
0.076,
48+
0.095,
49+
0.122,
50+
0.152,
51+
0.188,
52+
0.228,
53+
0.281,
54+
0.351,
55+
0.449,
56+
0.53,
57+
0.594,
58+
0.643,
59+
0.68,
60+
0.715,
61+
0.74,
62+
0.755,
63+
0.778,
64+
0.793,
65+
0.807,
66+
0.82,
67+
0.833,
68+
0.846,
69+
0.852,
70+
0.863,
71+
0.869,
72+
0.88,
73+
0.885,
74+
0.89,
75+
0.9,
76+
0.905,
77+
0.91,
78+
0.914,
79+
0.919,
80+
0.923,
81+
0.927,
82+
0.931,
83+
0.935,
84+
0.939,
85+
0.943,
86+
0.946,
87+
0.95,
88+
0.953,
89+
0.956,
90+
0.956,
91+
0.959,
92+
0.962,
93+
0.965,
94+
0.968,
95+
0.968,
96+
0.971,
97+
0.973,
98+
0.973,
99+
0.976,
100+
0.978,
101+
0.98,
102+
0.98,
103+
0.982,
104+
0.984,
105+
0.984,
106+
0.986,
107+
0.986,
108+
0.988,
109+
0.989,
110+
0.989,
111+
0.991,
112+
0.991,
113+
0.992,
114+
0.993,
115+
0.993,
116+
0.995,
117+
0.995,
118+
0.996,
119+
0.996,
120+
0.997,
121+
0.997,
122+
0.997,
123+
0.997,
124+
0.998,
125+
0.998,
126+
0.999,
127+
0.999,
128+
0.999,
129+
0.999,
130+
1,
131+
1,
132+
1,
133+
1,
134+
1,
135+
1,
136+
1,
137+
1
138+
);
139+
--m3-easing-decel: cubic-bezier(0.05, 0.7, 0.1, 1);
140+
37141
accent-color: rgb(var(--m3-scheme-primary));
38142
}
39143
.m3-font-display-large,

src/lib/nav/NavListButton.svelte

+2-2
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@
102102
inset: 0 0;
103103
width: 100%;
104104
transition:
105-
width 400ms cubic-bezier(0.356, 0.701, 0, 1.004),
106-
inset 400ms cubic-bezier(0.356, 0.701, 0, 1.004);
105+
width 400ms var(--m3-easing),
106+
inset 400ms var(--m3-easing);
107107
}
108108
.selected > .icon-space > :global(svg) {
109109
color: rgb(var(--m3-scheme-on-secondary-container));

src/lib/nav/NavListLink.svelte

+2-2
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@
101101
inset: 0 0;
102102
width: 100%;
103103
transition:
104-
width 400ms cubic-bezier(0.356, 0.701, 0, 1.004),
105-
inset 400ms cubic-bezier(0.356, 0.701, 0, 1.004);
104+
width 400ms var(--m3-easing),
105+
inset 400ms var(--m3-easing);
106106
}
107107
.selected > .icon-space > :global(svg) {
108108
color: rgb(var(--m3-scheme-on-secondary-container));

0 commit comments

Comments
 (0)