@trebired/frontend 12.12.4 → 12.12.5
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 +24 -0
- package/dist/src/theme/apply.d.ts +16 -0
- package/dist/src/theme/apply.d.ts.map +1 -1
- package/dist/src/theme/apply.js +111 -40
- package/dist/src/theme/apply.js.map +1 -1
- package/dist/styles/utils/base.scss +30 -12
- package/dist/theme/apply.d.ts +16 -0
- package/dist/theme/apply.d.ts.map +1 -1
- package/dist/theme/apply.js +111 -40
- package/dist/theme/apply.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,30 @@ All notable changes to `@trebired/frontend` will be documented here.
|
|
|
4
4
|
|
|
5
5
|
This project follows semantic versioning once published.
|
|
6
6
|
|
|
7
|
+
## 12.12.5
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Theme switching is now one page-level cross-fade instead of a transition per element,
|
|
12
|
+
superseding 12.12.4's approach, which did not fix the stagger and made the switch slow and
|
|
13
|
+
laggy. Forcing a shared duration onto `*` meant a page's worth of simultaneous
|
|
14
|
+
`background-color`/`box-shadow` transitions — all main-thread paint work, so the switch janked
|
|
15
|
+
and the stagger came back as paint landed in chunks — while a root `transitionend` listener took
|
|
16
|
+
one bubbled event per element per property (8012 of them on a 4000-element page). It also could
|
|
17
|
+
never be complete: anything without a transitionable property (gradients, images, native
|
|
18
|
+
scrollbars) still snapped instantly while everything else animated. `applyTheme()` now runs the
|
|
19
|
+
switch through the View Transitions API, cross-fading the whole page as a single
|
|
20
|
+
compositor-driven animation with per-element transitions suppressed underneath — uniform by
|
|
21
|
+
construction, since there is one animation rather than thousands. On the same 4000-element page
|
|
22
|
+
this takes bubbled `transitionend` events from 8012 to 0 and roughly halves the worst frame
|
|
23
|
+
time. Browsers without the API fall back to one shared duration across the color-affecting
|
|
24
|
+
properties (`box-shadow` excluded, being the expensive one). `prefers-reduced-motion` switches
|
|
25
|
+
instantly, as before.
|
|
26
|
+
- `getEffectiveTheme()`/`currentDomTheme()` now report the theme a switch has already committed to
|
|
27
|
+
while that switch is still in flight. A view transition applies the DOM change from a callback
|
|
28
|
+
the browser runs a frame later, so without this a second toggle click landing inside that window
|
|
29
|
+
read the old value and computed `nextTheme()` back to where it started.
|
|
30
|
+
|
|
7
31
|
## 12.12.4
|
|
8
32
|
|
|
9
33
|
### Fixed
|
|
@@ -22,6 +22,22 @@ declare function systemThemeKey(options?: ThemeRuntimeOptions): ThemeValue;
|
|
|
22
22
|
declare function currentDomTheme(options?: ThemeRuntimeOptions): ThemeValue;
|
|
23
23
|
declare function getEffectiveTheme(value?: unknown, options?: ThemeRuntimeOptions): ThemeValue;
|
|
24
24
|
declare function themeScheme(key: unknown, options?: ThemeRuntimeOptions): ThemeModeScheme;
|
|
25
|
+
/**
|
|
26
|
+
* A theme switch changes the CSS vars every element reads at once, and the
|
|
27
|
+
* browser cannot tell that from a hover — so each element animated on its own
|
|
28
|
+
* locally tuned duration and the switch looked staggered. Animating them
|
|
29
|
+
* together instead is not the fix either: a page's worth of `background-color`
|
|
30
|
+
* /`box-shadow` transitions are main-thread paint work, which janks (and the
|
|
31
|
+
* stagger comes back, since paint lands in chunks) and still leaves out
|
|
32
|
+
* everything that has no transitionable property at all — gradients, images,
|
|
33
|
+
* native scrollbars.
|
|
34
|
+
*
|
|
35
|
+
* So the whole page cross-fades as a single compositor-driven animation via
|
|
36
|
+
* the View Transitions API, with per-element transitions suppressed
|
|
37
|
+
* underneath. That is uniform by construction: one animation, not thousands.
|
|
38
|
+
* Browsers without the API fall back to one shared duration for the
|
|
39
|
+
* color-affecting properties, which is the best a per-element approach can do.
|
|
40
|
+
*/
|
|
25
41
|
declare function applyTheme(theme: ThemeValue, options?: ThemeRuntimeOptions): ThemeValue;
|
|
26
42
|
declare function readPersistedTheme(adapter?: ThemePersistenceAdapter, options?: ThemeRuntimeOptions): Promise<ThemeValue>;
|
|
27
43
|
declare function setTheme(theme: ThemeValue, options?: ThemeRuntimeOptions): Promise<ThemeValue>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/theme/apply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/theme/apply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpE,KAAK,UAAU,GAAG,MAAM,CAAC;AAEzB,KAAK,uBAAuB,GAAG;IAC7B,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAC,IAAI,GAAC,SAAS,CAAC,GAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,GAAC,OAAO,CAAC;CACvD,CAAC;AAEF,KAAK,mBAAmB,GAAG,gBAAgB,GAAE;IAC3C,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,IAAI,CAAC,EAAE,uBAAuB,CAAC;CAChC,CAAC;AAEF,KAAK,iBAAiB,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;AAIlD,iBAAS,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAE5D;AAED,iBAAS,YAAY,CAAC,IAAI,GAAE,QAAmB,GAAG,IAAI,CAErD;AAED,iBAAS,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAGrF;AAUD,iBAAS,YAAY,IAAI,eAAe,CAEvC;AAED,iBAAS,iBAAiB,IAAI,eAAe,CAM5C;AAED,iBAAS,oBAAoB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAa7D;AAED,iBAAS,cAAc,CAAC,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAGrE;AAWD,iBAAS,eAAe,CAAC,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAItE;AAED,iBAAS,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAEzF;AAED,iBAAS,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,eAAe,CAErF;AAyFD;;;;;;;;;;;;;;;GAeG;AACH,iBAAS,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,mBAAwB,GAAG,UAAU,CA8BpF;AAED,iBAAe,kBAAkB,CAC/B,OAAO,CAAC,EAAE,uBAAuB,EACjC,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,UAAU,CAAC,CAOrB;AAED,iBAAe,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,UAAU,CAAC,CASjG;AAED,iBAAS,SAAS,CAAC,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAIhE;AAED,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,WAAW,GACZ,CAAC;AACF,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/src/theme/apply.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { frontendCssVar } from "../../namespace/index.js";
|
|
1
2
|
import { THEME_ATTR, THEME_CHANGE_EVENT, THEME_SWITCHING_ATTR } from "./constants.js";
|
|
2
3
|
import { findThemeMode, getThemeModes, themeModeKeyOf } from "./modes.js";
|
|
3
4
|
const themeSyncListeners = new Set();
|
|
@@ -48,9 +49,19 @@ function systemThemeKey(options = {}) {
|
|
|
48
49
|
const registry = getThemeModes(options);
|
|
49
50
|
return systemPrefersLight() ? registry.light : registry.dark;
|
|
50
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* A view-transition switch commits the attribute from its callback, which the
|
|
54
|
+
* browser runs a frame later — so between `applyTheme()` and that commit the
|
|
55
|
+
* DOM still reads the old theme. `pendingTheme` holds the value already
|
|
56
|
+
* decided on, otherwise a second toggle click landing inside that window
|
|
57
|
+
* computes `nextTheme()` from the stale one and switches back.
|
|
58
|
+
*/
|
|
59
|
+
let pendingTheme = "";
|
|
51
60
|
function currentDomTheme(options = {}) {
|
|
52
61
|
if (typeof document === "undefined")
|
|
53
62
|
return "";
|
|
63
|
+
if (pendingTheme)
|
|
64
|
+
return pendingTheme;
|
|
54
65
|
return normalizeTheme(document.documentElement.getAttribute(THEME_ATTR), options);
|
|
55
66
|
}
|
|
56
67
|
function getEffectiveTheme(value, options = {}) {
|
|
@@ -66,60 +77,120 @@ function dispatchThemeChange(theme, themeKey) {
|
|
|
66
77
|
detail: { theme, themeKey },
|
|
67
78
|
}));
|
|
68
79
|
}
|
|
69
|
-
|
|
70
|
-
|
|
80
|
+
const THEME_SWITCH_BUFFER_MS = 120;
|
|
81
|
+
const THEME_SWITCH_DEFAULT_MS = 240;
|
|
82
|
+
let themeSwitchTimer = null;
|
|
71
83
|
function endThemeSwitch() {
|
|
84
|
+
if (typeof document === "undefined")
|
|
85
|
+
return;
|
|
72
86
|
document.documentElement.removeAttribute(THEME_SWITCHING_ATTR);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if (themeSwitchFallbackTimer)
|
|
77
|
-
clearTimeout(themeSwitchFallbackTimer);
|
|
78
|
-
themeSwitchQuietTimer = null;
|
|
79
|
-
themeSwitchFallbackTimer = null;
|
|
80
|
-
}
|
|
81
|
-
function onThemeSwitchTransitionEnd() {
|
|
82
|
-
if (themeSwitchQuietTimer)
|
|
83
|
-
clearTimeout(themeSwitchQuietTimer);
|
|
84
|
-
themeSwitchQuietTimer = setTimeout(endThemeSwitch, 50);
|
|
87
|
+
if (themeSwitchTimer)
|
|
88
|
+
clearTimeout(themeSwitchTimer);
|
|
89
|
+
themeSwitchTimer = null;
|
|
85
90
|
}
|
|
86
91
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* forces one shared transition (see styles/utils/base.scss) for the
|
|
92
|
-
* switch's duration, so every element moves together. Cleared on
|
|
93
|
-
* `transitionend` (debounced, since many elements fire it) rather than a
|
|
94
|
-
* fixed delay, so it stays correct if an app customizes the transition
|
|
95
|
-
* duration; the fallback timer is just a safety net in case nothing
|
|
96
|
-
* transitions at all (e.g. `prefers-reduced-motion`).
|
|
92
|
+
* Suppresses (`"instant"`) or unifies (`"uniform"`) per-element transitions
|
|
93
|
+
* for the length of a switch — see `styles/utils/base.scss`. The hold is a
|
|
94
|
+
* plain timer: a `transitionend` listener would receive one bubbled event per
|
|
95
|
+
* element per property, which on a real page is tens of thousands of events.
|
|
97
96
|
*/
|
|
98
|
-
function beginThemeSwitch() {
|
|
97
|
+
function beginThemeSwitch(mode, holdMs) {
|
|
99
98
|
if (typeof document === "undefined")
|
|
100
99
|
return;
|
|
101
|
-
document.documentElement.setAttribute(THEME_SWITCHING_ATTR,
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
themeSwitchQuietTimer = setTimeout(endThemeSwitch, 50);
|
|
106
|
-
if (themeSwitchFallbackTimer)
|
|
107
|
-
clearTimeout(themeSwitchFallbackTimer);
|
|
108
|
-
themeSwitchFallbackTimer = setTimeout(endThemeSwitch, 1000);
|
|
100
|
+
document.documentElement.setAttribute(THEME_SWITCHING_ATTR, mode);
|
|
101
|
+
if (themeSwitchTimer)
|
|
102
|
+
clearTimeout(themeSwitchTimer);
|
|
103
|
+
themeSwitchTimer = setTimeout(endThemeSwitch, holdMs);
|
|
109
104
|
}
|
|
110
|
-
function
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
105
|
+
function themeSwitchDurationMs() {
|
|
106
|
+
try {
|
|
107
|
+
const raw = getComputedStyle(document.documentElement)
|
|
108
|
+
.getPropertyValue(frontendCssVar("transition-normal"))
|
|
109
|
+
.trim();
|
|
110
|
+
if (raw.endsWith("ms"))
|
|
111
|
+
return Number.parseFloat(raw) || THEME_SWITCH_DEFAULT_MS;
|
|
112
|
+
if (raw.endsWith("s"))
|
|
113
|
+
return (Number.parseFloat(raw) || 0.24) * 1000;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// an unreadable token just means the default hold below
|
|
117
|
+
}
|
|
118
|
+
return THEME_SWITCH_DEFAULT_MS;
|
|
119
|
+
}
|
|
120
|
+
function prefersReducedMotion() {
|
|
121
|
+
try {
|
|
122
|
+
return Boolean(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function startViewTransition(run) {
|
|
129
|
+
const start = document.startViewTransition;
|
|
130
|
+
if (typeof start !== "function")
|
|
131
|
+
return null;
|
|
132
|
+
try {
|
|
133
|
+
return start.call(document, run);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function commitTheme(next, normalized, previous, options) {
|
|
140
|
+
pendingTheme = "";
|
|
117
141
|
document.documentElement.setAttribute(THEME_ATTR, next);
|
|
118
142
|
applyDeviceScheme();
|
|
119
143
|
document.body?.setAttribute(THEME_ATTR, next);
|
|
120
144
|
if (previous !== next)
|
|
121
145
|
dispatchThemeChange(normalized, next);
|
|
122
146
|
runThemeSync(document);
|
|
147
|
+
void options;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* A theme switch changes the CSS vars every element reads at once, and the
|
|
151
|
+
* browser cannot tell that from a hover — so each element animated on its own
|
|
152
|
+
* locally tuned duration and the switch looked staggered. Animating them
|
|
153
|
+
* together instead is not the fix either: a page's worth of `background-color`
|
|
154
|
+
* /`box-shadow` transitions are main-thread paint work, which janks (and the
|
|
155
|
+
* stagger comes back, since paint lands in chunks) and still leaves out
|
|
156
|
+
* everything that has no transitionable property at all — gradients, images,
|
|
157
|
+
* native scrollbars.
|
|
158
|
+
*
|
|
159
|
+
* So the whole page cross-fades as a single compositor-driven animation via
|
|
160
|
+
* the View Transitions API, with per-element transitions suppressed
|
|
161
|
+
* underneath. That is uniform by construction: one animation, not thousands.
|
|
162
|
+
* Browsers without the API fall back to one shared duration for the
|
|
163
|
+
* color-affecting properties, which is the best a per-element approach can do.
|
|
164
|
+
*/
|
|
165
|
+
function applyTheme(theme, options = {}) {
|
|
166
|
+
if (typeof document === "undefined")
|
|
167
|
+
return getEffectiveTheme(theme, options);
|
|
168
|
+
const normalized = normalizeTheme(theme, options);
|
|
169
|
+
const next = normalized || systemThemeKey(options);
|
|
170
|
+
const previous = currentDomTheme(options);
|
|
171
|
+
const commit = () => commitTheme(next, normalized, previous, options);
|
|
172
|
+
if (previous === next) {
|
|
173
|
+
commit();
|
|
174
|
+
return next;
|
|
175
|
+
}
|
|
176
|
+
const hold = themeSwitchDurationMs() + THEME_SWITCH_BUFFER_MS;
|
|
177
|
+
if (prefersReducedMotion()) {
|
|
178
|
+
beginThemeSwitch("instant", THEME_SWITCH_BUFFER_MS);
|
|
179
|
+
commit();
|
|
180
|
+
return next;
|
|
181
|
+
}
|
|
182
|
+
pendingTheme = next;
|
|
183
|
+
const transition = startViewTransition(() => {
|
|
184
|
+
beginThemeSwitch("instant", hold);
|
|
185
|
+
commit();
|
|
186
|
+
});
|
|
187
|
+
if (transition) {
|
|
188
|
+
void Promise.resolve(transition.finished).then(endThemeSwitch, endThemeSwitch);
|
|
189
|
+
return next;
|
|
190
|
+
}
|
|
191
|
+
pendingTheme = "";
|
|
192
|
+
beginThemeSwitch("uniform", hold);
|
|
193
|
+
commit();
|
|
123
194
|
return next;
|
|
124
195
|
}
|
|
125
196
|
async function readPersistedTheme(adapter, options = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/theme/apply.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/theme/apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,19 +62,37 @@ body {
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* disabling transitions during the switch, which just traded "staggered"
|
|
71
|
-
* for "no transition at all".
|
|
65
|
+
* Theme switching animates the whole page as one cross-fade rather than
|
|
66
|
+
* per element — see the comment on `applyTheme()` in theme/apply.ts for
|
|
67
|
+
* why per-element transitions cannot be made uniform. Here the live DOM
|
|
68
|
+
* only has to stop animating underneath the cross-fade, so it snaps
|
|
69
|
+
* straight to the new theme while the snapshot fades over it.
|
|
72
70
|
*/
|
|
73
|
-
#{ns.data("theme-switching", "
|
|
74
|
-
#{ns.data("theme-switching", "
|
|
75
|
-
#{ns.data("theme-switching", "
|
|
76
|
-
#{ns.data("theme-switching", "
|
|
77
|
-
transition
|
|
71
|
+
#{ns.data("theme-switching", "instant")},
|
|
72
|
+
#{ns.data("theme-switching", "instant")} *,
|
|
73
|
+
#{ns.data("theme-switching", "instant")} *::before,
|
|
74
|
+
#{ns.data("theme-switching", "instant")} *::after {
|
|
75
|
+
transition: none !important;
|
|
76
|
+
animation: none !important;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
::view-transition-old(root),
|
|
80
|
+
::view-transition-new(root) {
|
|
81
|
+
animation-duration: var(#{ns.css-var("transition-normal")}, 240ms);
|
|
82
|
+
animation-timing-function: ease;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Fallback for browsers without the View Transitions API: one shared
|
|
87
|
+
* duration for the color-affecting properties. `box-shadow` is deliberately
|
|
88
|
+
* left out — animating it on every element is expensive enough to jank the
|
|
89
|
+
* switch, which reintroduces the very stagger this is fixing.
|
|
90
|
+
*/
|
|
91
|
+
#{ns.data("theme-switching", "uniform")},
|
|
92
|
+
#{ns.data("theme-switching", "uniform")} *,
|
|
93
|
+
#{ns.data("theme-switching", "uniform")} *::before,
|
|
94
|
+
#{ns.data("theme-switching", "uniform")} *::after {
|
|
95
|
+
transition-property: background-color, border-color, color, fill, stroke, outline-color !important;
|
|
78
96
|
transition-duration: var(#{ns.css-var("transition-normal")}, 240ms) !important;
|
|
79
97
|
transition-timing-function: ease !important;
|
|
80
98
|
animation: none !important;
|
package/dist/theme/apply.d.ts
CHANGED
|
@@ -22,6 +22,22 @@ declare function systemThemeKey(options?: ThemeRuntimeOptions): ThemeValue;
|
|
|
22
22
|
declare function currentDomTheme(options?: ThemeRuntimeOptions): ThemeValue;
|
|
23
23
|
declare function getEffectiveTheme(value?: unknown, options?: ThemeRuntimeOptions): ThemeValue;
|
|
24
24
|
declare function themeScheme(key: unknown, options?: ThemeRuntimeOptions): ThemeModeScheme;
|
|
25
|
+
/**
|
|
26
|
+
* A theme switch changes the CSS vars every element reads at once, and the
|
|
27
|
+
* browser cannot tell that from a hover — so each element animated on its own
|
|
28
|
+
* locally tuned duration and the switch looked staggered. Animating them
|
|
29
|
+
* together instead is not the fix either: a page's worth of `background-color`
|
|
30
|
+
* /`box-shadow` transitions are main-thread paint work, which janks (and the
|
|
31
|
+
* stagger comes back, since paint lands in chunks) and still leaves out
|
|
32
|
+
* everything that has no transitionable property at all — gradients, images,
|
|
33
|
+
* native scrollbars.
|
|
34
|
+
*
|
|
35
|
+
* So the whole page cross-fades as a single compositor-driven animation via
|
|
36
|
+
* the View Transitions API, with per-element transitions suppressed
|
|
37
|
+
* underneath. That is uniform by construction: one animation, not thousands.
|
|
38
|
+
* Browsers without the API fall back to one shared duration for the
|
|
39
|
+
* color-affecting properties, which is the best a per-element approach can do.
|
|
40
|
+
*/
|
|
25
41
|
declare function applyTheme(theme: ThemeValue, options?: ThemeRuntimeOptions): ThemeValue;
|
|
26
42
|
declare function readPersistedTheme(adapter?: ThemePersistenceAdapter, options?: ThemeRuntimeOptions): Promise<ThemeValue>;
|
|
27
43
|
declare function setTheme(theme: ThemeValue, options?: ThemeRuntimeOptions): Promise<ThemeValue>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/theme/apply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/theme/apply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpE,KAAK,UAAU,GAAG,MAAM,CAAC;AAEzB,KAAK,uBAAuB,GAAG;IAC7B,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAC,IAAI,GAAC,SAAS,CAAC,GAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,GAAC,OAAO,CAAC;CACvD,CAAC;AAEF,KAAK,mBAAmB,GAAG,gBAAgB,GAAE;IAC3C,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,WAAW,CAAC,EAAE,uBAAuB,CAAC;IACtC,IAAI,CAAC,EAAE,uBAAuB,CAAC;CAChC,CAAC;AAEF,KAAK,iBAAiB,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;AAIlD,iBAAS,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAE5D;AAED,iBAAS,YAAY,CAAC,IAAI,GAAE,QAAmB,GAAG,IAAI,CAErD;AAED,iBAAS,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAGrF;AAUD,iBAAS,YAAY,IAAI,eAAe,CAEvC;AAED,iBAAS,iBAAiB,IAAI,eAAe,CAM5C;AAED,iBAAS,oBAAoB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAa7D;AAED,iBAAS,cAAc,CAAC,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAGrE;AAWD,iBAAS,eAAe,CAAC,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAItE;AAED,iBAAS,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAEzF;AAED,iBAAS,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,eAAe,CAErF;AAyFD;;;;;;;;;;;;;;;GAeG;AACH,iBAAS,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,mBAAwB,GAAG,UAAU,CA8BpF;AAED,iBAAe,kBAAkB,CAC/B,OAAO,CAAC,EAAE,uBAAuB,EACjC,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,UAAU,CAAC,CAOrB;AAED,iBAAe,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,UAAU,CAAC,CASjG;AAED,iBAAS,SAAS,CAAC,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAIhE;AAED,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,WAAW,GACZ,CAAC;AACF,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/theme/apply.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { frontendCssVar } from "../namespace/index.js";
|
|
1
2
|
import { THEME_ATTR, THEME_CHANGE_EVENT, THEME_SWITCHING_ATTR } from "./constants.js";
|
|
2
3
|
import { findThemeMode, getThemeModes, themeModeKeyOf } from "./modes.js";
|
|
3
4
|
const themeSyncListeners = new Set();
|
|
@@ -48,9 +49,19 @@ function systemThemeKey(options = {}) {
|
|
|
48
49
|
const registry = getThemeModes(options);
|
|
49
50
|
return systemPrefersLight() ? registry.light : registry.dark;
|
|
50
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* A view-transition switch commits the attribute from its callback, which the
|
|
54
|
+
* browser runs a frame later — so between `applyTheme()` and that commit the
|
|
55
|
+
* DOM still reads the old theme. `pendingTheme` holds the value already
|
|
56
|
+
* decided on, otherwise a second toggle click landing inside that window
|
|
57
|
+
* computes `nextTheme()` from the stale one and switches back.
|
|
58
|
+
*/
|
|
59
|
+
let pendingTheme = "";
|
|
51
60
|
function currentDomTheme(options = {}) {
|
|
52
61
|
if (typeof document === "undefined")
|
|
53
62
|
return "";
|
|
63
|
+
if (pendingTheme)
|
|
64
|
+
return pendingTheme;
|
|
54
65
|
return normalizeTheme(document.documentElement.getAttribute(THEME_ATTR), options);
|
|
55
66
|
}
|
|
56
67
|
function getEffectiveTheme(value, options = {}) {
|
|
@@ -66,60 +77,120 @@ function dispatchThemeChange(theme, themeKey) {
|
|
|
66
77
|
detail: { theme, themeKey },
|
|
67
78
|
}));
|
|
68
79
|
}
|
|
69
|
-
|
|
70
|
-
|
|
80
|
+
const THEME_SWITCH_BUFFER_MS = 120;
|
|
81
|
+
const THEME_SWITCH_DEFAULT_MS = 240;
|
|
82
|
+
let themeSwitchTimer = null;
|
|
71
83
|
function endThemeSwitch() {
|
|
84
|
+
if (typeof document === "undefined")
|
|
85
|
+
return;
|
|
72
86
|
document.documentElement.removeAttribute(THEME_SWITCHING_ATTR);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if (themeSwitchFallbackTimer)
|
|
77
|
-
clearTimeout(themeSwitchFallbackTimer);
|
|
78
|
-
themeSwitchQuietTimer = null;
|
|
79
|
-
themeSwitchFallbackTimer = null;
|
|
80
|
-
}
|
|
81
|
-
function onThemeSwitchTransitionEnd() {
|
|
82
|
-
if (themeSwitchQuietTimer)
|
|
83
|
-
clearTimeout(themeSwitchQuietTimer);
|
|
84
|
-
themeSwitchQuietTimer = setTimeout(endThemeSwitch, 50);
|
|
87
|
+
if (themeSwitchTimer)
|
|
88
|
+
clearTimeout(themeSwitchTimer);
|
|
89
|
+
themeSwitchTimer = null;
|
|
85
90
|
}
|
|
86
91
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* forces one shared transition (see styles/utils/base.scss) for the
|
|
92
|
-
* switch's duration, so every element moves together. Cleared on
|
|
93
|
-
* `transitionend` (debounced, since many elements fire it) rather than a
|
|
94
|
-
* fixed delay, so it stays correct if an app customizes the transition
|
|
95
|
-
* duration; the fallback timer is just a safety net in case nothing
|
|
96
|
-
* transitions at all (e.g. `prefers-reduced-motion`).
|
|
92
|
+
* Suppresses (`"instant"`) or unifies (`"uniform"`) per-element transitions
|
|
93
|
+
* for the length of a switch — see `styles/utils/base.scss`. The hold is a
|
|
94
|
+
* plain timer: a `transitionend` listener would receive one bubbled event per
|
|
95
|
+
* element per property, which on a real page is tens of thousands of events.
|
|
97
96
|
*/
|
|
98
|
-
function beginThemeSwitch() {
|
|
97
|
+
function beginThemeSwitch(mode, holdMs) {
|
|
99
98
|
if (typeof document === "undefined")
|
|
100
99
|
return;
|
|
101
|
-
document.documentElement.setAttribute(THEME_SWITCHING_ATTR,
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
themeSwitchQuietTimer = setTimeout(endThemeSwitch, 50);
|
|
106
|
-
if (themeSwitchFallbackTimer)
|
|
107
|
-
clearTimeout(themeSwitchFallbackTimer);
|
|
108
|
-
themeSwitchFallbackTimer = setTimeout(endThemeSwitch, 1000);
|
|
100
|
+
document.documentElement.setAttribute(THEME_SWITCHING_ATTR, mode);
|
|
101
|
+
if (themeSwitchTimer)
|
|
102
|
+
clearTimeout(themeSwitchTimer);
|
|
103
|
+
themeSwitchTimer = setTimeout(endThemeSwitch, holdMs);
|
|
109
104
|
}
|
|
110
|
-
function
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
105
|
+
function themeSwitchDurationMs() {
|
|
106
|
+
try {
|
|
107
|
+
const raw = getComputedStyle(document.documentElement)
|
|
108
|
+
.getPropertyValue(frontendCssVar("transition-normal"))
|
|
109
|
+
.trim();
|
|
110
|
+
if (raw.endsWith("ms"))
|
|
111
|
+
return Number.parseFloat(raw) || THEME_SWITCH_DEFAULT_MS;
|
|
112
|
+
if (raw.endsWith("s"))
|
|
113
|
+
return (Number.parseFloat(raw) || 0.24) * 1000;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// an unreadable token just means the default hold below
|
|
117
|
+
}
|
|
118
|
+
return THEME_SWITCH_DEFAULT_MS;
|
|
119
|
+
}
|
|
120
|
+
function prefersReducedMotion() {
|
|
121
|
+
try {
|
|
122
|
+
return Boolean(window.matchMedia?.("(prefers-reduced-motion: reduce)").matches);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function startViewTransition(run) {
|
|
129
|
+
const start = document.startViewTransition;
|
|
130
|
+
if (typeof start !== "function")
|
|
131
|
+
return null;
|
|
132
|
+
try {
|
|
133
|
+
return start.call(document, run);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
function commitTheme(next, normalized, previous, options) {
|
|
140
|
+
pendingTheme = "";
|
|
117
141
|
document.documentElement.setAttribute(THEME_ATTR, next);
|
|
118
142
|
applyDeviceScheme();
|
|
119
143
|
document.body?.setAttribute(THEME_ATTR, next);
|
|
120
144
|
if (previous !== next)
|
|
121
145
|
dispatchThemeChange(normalized, next);
|
|
122
146
|
runThemeSync(document);
|
|
147
|
+
void options;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* A theme switch changes the CSS vars every element reads at once, and the
|
|
151
|
+
* browser cannot tell that from a hover — so each element animated on its own
|
|
152
|
+
* locally tuned duration and the switch looked staggered. Animating them
|
|
153
|
+
* together instead is not the fix either: a page's worth of `background-color`
|
|
154
|
+
* /`box-shadow` transitions are main-thread paint work, which janks (and the
|
|
155
|
+
* stagger comes back, since paint lands in chunks) and still leaves out
|
|
156
|
+
* everything that has no transitionable property at all — gradients, images,
|
|
157
|
+
* native scrollbars.
|
|
158
|
+
*
|
|
159
|
+
* So the whole page cross-fades as a single compositor-driven animation via
|
|
160
|
+
* the View Transitions API, with per-element transitions suppressed
|
|
161
|
+
* underneath. That is uniform by construction: one animation, not thousands.
|
|
162
|
+
* Browsers without the API fall back to one shared duration for the
|
|
163
|
+
* color-affecting properties, which is the best a per-element approach can do.
|
|
164
|
+
*/
|
|
165
|
+
function applyTheme(theme, options = {}) {
|
|
166
|
+
if (typeof document === "undefined")
|
|
167
|
+
return getEffectiveTheme(theme, options);
|
|
168
|
+
const normalized = normalizeTheme(theme, options);
|
|
169
|
+
const next = normalized || systemThemeKey(options);
|
|
170
|
+
const previous = currentDomTheme(options);
|
|
171
|
+
const commit = () => commitTheme(next, normalized, previous, options);
|
|
172
|
+
if (previous === next) {
|
|
173
|
+
commit();
|
|
174
|
+
return next;
|
|
175
|
+
}
|
|
176
|
+
const hold = themeSwitchDurationMs() + THEME_SWITCH_BUFFER_MS;
|
|
177
|
+
if (prefersReducedMotion()) {
|
|
178
|
+
beginThemeSwitch("instant", THEME_SWITCH_BUFFER_MS);
|
|
179
|
+
commit();
|
|
180
|
+
return next;
|
|
181
|
+
}
|
|
182
|
+
pendingTheme = next;
|
|
183
|
+
const transition = startViewTransition(() => {
|
|
184
|
+
beginThemeSwitch("instant", hold);
|
|
185
|
+
commit();
|
|
186
|
+
});
|
|
187
|
+
if (transition) {
|
|
188
|
+
void Promise.resolve(transition.finished).then(endThemeSwitch, endThemeSwitch);
|
|
189
|
+
return next;
|
|
190
|
+
}
|
|
191
|
+
pendingTheme = "";
|
|
192
|
+
beginThemeSwitch("uniform", hold);
|
|
193
|
+
commit();
|
|
123
194
|
return next;
|
|
124
195
|
}
|
|
125
196
|
async function readPersistedTheme(adapter, options = {}) {
|
package/dist/theme/apply.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/theme/apply.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/theme/apply.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED