@lemoncat7/dsh-theme-xiaohei 0.4.6 → 0.5.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 +15 -9
- package/THIRD_PARTY_NOTICES.md +13 -1
- package/docs/dsh-021-compatibility.md +23 -0
- package/docs/releases/0.5.0.md +24 -0
- package/docs/rift-interaction.md +35 -0
- package/docs/rift-preview.md +39 -0
- package/lib/client.companion.js +3 -4
- package/lib/client.decorations.js +224 -51
- package/lib/client.js +532 -2405
- package/lib/index.d.ts +1 -2
- package/lib/index.js +393 -11
- package/lib/rift/boot.d.ts +6 -0
- package/package.json +29 -19
- package/lib/appearance.d.ts +0 -12
- package/lib/appearance.js +0 -42
- package/lib/blink.d.ts +0 -4
- package/lib/blink.js +0 -110
- package/lib/bloub-heixiu/ambient.d.ts +0 -3
- package/lib/bloub-heixiu/ambient.js +0 -12
- package/lib/bloub-heixiu/character.d.ts +0 -33
- package/lib/bloub-heixiu/character.js +0 -124
- package/lib/bloub-heixiu/effects.d.ts +0 -4
- package/lib/bloub-heixiu/effects.js +0 -91
- package/lib/bloub-heixiu/flight.d.ts +0 -15
- package/lib/bloub-heixiu/flight.js +0 -66
- package/lib/bloub-heixiu/follow.d.ts +0 -13
- package/lib/bloub-heixiu/follow.js +0 -23
- package/lib/bloub-heixiu/layout.d.ts +0 -34
- package/lib/bloub-heixiu/layout.js +0 -26
- package/lib/bloub-heixiu/renderer.d.ts +0 -16
- package/lib/bloub-heixiu/renderer.js +0 -94
- package/lib/bloub-heixiu/runtime.d.ts +0 -6
- package/lib/bloub-heixiu/runtime.js +0 -440
- package/lib/bloub-heixiu/signals.d.ts +0 -17
- package/lib/bloub-heixiu/signals.js +0 -55
- package/lib/bloub-heixiu/styles.d.ts +0 -2
- package/lib/bloub-heixiu/styles.js +0 -98
- package/lib/boot-appearance.d.ts +0 -10
- package/lib/boot-appearance.js +0 -47
- package/lib/boot-loader.d.ts +0 -5
- package/lib/boot-loader.js +0 -158
- package/lib/chrome/accessibility.d.ts +0 -3
- package/lib/chrome/accessibility.js +0 -69
- package/lib/chrome/blink.d.ts +0 -3
- package/lib/chrome/blink.js +0 -15
- package/lib/chrome/composer-avatar.d.ts +0 -10
- package/lib/chrome/composer-avatar.js +0 -599
- package/lib/chrome/composer-send-heixiu.d.ts +0 -3
- package/lib/chrome/composer-send-heixiu.js +0 -143
- package/lib/chrome/composer.d.ts +0 -3
- package/lib/chrome/composer.js +0 -135
- package/lib/chrome/controls.d.ts +0 -8
- package/lib/chrome/controls.js +0 -348
- package/lib/chrome/conversation-messages.d.ts +0 -3
- package/lib/chrome/conversation-messages.js +0 -329
- package/lib/chrome/conversation-submissions.d.ts +0 -3
- package/lib/chrome/conversation-submissions.js +0 -68
- package/lib/chrome/conversation.d.ts +0 -3
- package/lib/chrome/conversation.js +0 -67
- package/lib/chrome/frames.d.ts +0 -6
- package/lib/chrome/frames.js +0 -134
- package/lib/chrome/gaze.d.ts +0 -3
- package/lib/chrome/gaze.js +0 -103
- package/lib/chrome/identity.d.ts +0 -6
- package/lib/chrome/identity.js +0 -47
- package/lib/chrome/overlays.d.ts +0 -3
- package/lib/chrome/overlays.js +0 -104
- package/lib/chrome/portal.d.ts +0 -6
- package/lib/chrome/portal.js +0 -169
- package/lib/chrome/reactions.d.ts +0 -3
- package/lib/chrome/reactions.js +0 -85
- package/lib/chrome/sidebar.d.ts +0 -3
- package/lib/chrome/sidebar.js +0 -313
- package/lib/chrome/tokens.d.ts +0 -3
- package/lib/chrome/tokens.js +0 -224
- package/lib/chrome/workspace.d.ts +0 -3
- package/lib/chrome/workspace.js +0 -94
- package/lib/chrome.d.ts +0 -10
- package/lib/chrome.js +0 -46
- package/lib/client-entry.d.ts +0 -3
- package/lib/client-entry.js +0 -3
- package/lib/client.d.ts +0 -10
- package/lib/client.pose-chin-dark.js +0 -4
- package/lib/client.pose-chin-light.js +0 -4
- package/lib/client.pose-doze-dark.js +0 -4
- package/lib/client.pose-doze-light.js +0 -4
- package/lib/client.pose-halfpeek-dark.js +0 -4
- package/lib/client.pose-halfpeek-light.js +0 -4
- package/lib/client.pose-peek-dark.js +0 -4
- package/lib/client.pose-peek-light.js +0 -4
- package/lib/client.pose-seated-dark.js +0 -4
- package/lib/client.pose-seated-light.js +0 -4
- package/lib/client.rig-chin-dark.js +0 -4
- package/lib/client.rig-chin-light.js +0 -4
- package/lib/client.rig-halfpeek-dark.js +0 -4
- package/lib/client.rig-halfpeek-light.js +0 -4
- package/lib/client.rig-peek-dark.js +0 -4
- package/lib/client.rig-peek-light.js +0 -4
- package/lib/client.rig-seated-dark.js +0 -4
- package/lib/client.rig-seated-light.js +0 -4
- package/lib/companion-entry.d.ts +0 -3
- package/lib/companion-entry.js +0 -3
- package/lib/composer-avatar.d.ts +0 -18
- package/lib/composer-avatar.js +0 -441
- package/lib/composer-draft-preview.d.ts +0 -4
- package/lib/composer-draft-preview.js +0 -8
- package/lib/composer-send-heixiu.d.ts +0 -8
- package/lib/composer-send-heixiu.js +0 -133
- package/lib/current-session.d.ts +0 -6
- package/lib/current-session.js +0 -5
- package/lib/decorations-entry.d.ts +0 -3
- package/lib/decorations-entry.js +0 -18
- package/lib/deferred-companion.d.ts +0 -5
- package/lib/deferred-companion.js +0 -9
- package/lib/deferred-decorations.d.ts +0 -3
- package/lib/deferred-decorations.js +0 -51
- package/lib/gaze.d.ts +0 -4
- package/lib/gaze.js +0 -230
- package/lib/generated-backgrounds.d.ts +0 -14
- package/lib/generated-backgrounds.js +0 -14
- package/lib/generated-character-motion.d.ts +0 -4
- package/lib/generated-character-motion.js +0 -2
- package/lib/generated-identity.d.ts +0 -6
- package/lib/generated-identity.js +0 -6
- package/lib/generated-keyart.d.ts +0 -34
- package/lib/generated-keyart.js +0 -34
- package/lib/generated-loading-assets.d.ts +0 -4
- package/lib/generated-loading-assets.js +0 -4
- package/lib/heixiu-interactions.d.ts +0 -10
- package/lib/heixiu-interactions.js +0 -161
- package/lib/host-contract.d.ts +0 -9
- package/lib/host-contract.js +0 -13
- package/lib/host-dom.d.ts +0 -11
- package/lib/host-dom.js +0 -72
- package/lib/loading-heixiu.d.ts +0 -8
- package/lib/loading-heixiu.js +0 -287
- package/lib/metallic-brand-mark.d.ts +0 -10
- package/lib/metallic-brand-mark.js +0 -296
- package/lib/plugin.d.ts +0 -6
- package/lib/plugin.js +0 -60
- package/lib/portal.d.ts +0 -40
- package/lib/portal.js +0 -225
- package/lib/reactions.d.ts +0 -20
- package/lib/reactions.js +0 -380
- package/lib/scene/avatar-model.d.ts +0 -6
- package/lib/scene/avatar-model.js +0 -646
- package/lib/scene/avatar-motion.d.ts +0 -3
- package/lib/scene/avatar-motion.js +0 -799
- package/lib/scene/character-assets.d.ts +0 -13
- package/lib/scene/character-assets.js +0 -26
- package/lib/scene/character-expression.d.ts +0 -4
- package/lib/scene/character-expression.js +0 -15
- package/lib/scene/character-eye-material.d.ts +0 -13
- package/lib/scene/character-eye-material.js +0 -88
- package/lib/scene/character-eye-renderer.d.ts +0 -5
- package/lib/scene/character-eye-renderer.js +0 -80
- package/lib/scene/character-eye-rig.d.ts +0 -20
- package/lib/scene/character-eye-rig.js +0 -35
- package/lib/scene/character-gaze.d.ts +0 -16
- package/lib/scene/character-gaze.js +0 -36
- package/lib/scene/character-idle.d.ts +0 -17
- package/lib/scene/character-idle.js +0 -65
- package/lib/scene/character-layout.d.ts +0 -24
- package/lib/scene/character-layout.js +0 -51
- package/lib/scene/character-motion-clock.d.ts +0 -18
- package/lib/scene/character-motion-clock.js +0 -70
- package/lib/scene/character-motion-types.d.ts +0 -12
- package/lib/scene/character-motion-types.js +0 -2
- package/lib/scene/character-motion.d.ts +0 -6
- package/lib/scene/character-motion.js +0 -187
- package/lib/scene/character-poses.d.ts +0 -26
- package/lib/scene/character-poses.js +0 -11
- package/lib/scene/character-rig-renderer.d.ts +0 -5
- package/lib/scene/character-rig-renderer.js +0 -95
- package/lib/scene/character-rig.d.ts +0 -22
- package/lib/scene/character-rig.js +0 -61
- package/lib/scene/heixiu-feedback.d.ts +0 -3
- package/lib/scene/heixiu-feedback.js +0 -64
- package/lib/scene/heixiu-interactions.d.ts +0 -3
- package/lib/scene/heixiu-interactions.js +0 -92
- package/lib/scene/ids.d.ts +0 -5
- package/lib/scene/ids.js +0 -5
- package/lib/scene/pointer-bridge.d.ts +0 -21
- package/lib/scene/pointer-bridge.js +0 -155
- package/lib/scene/runtime.d.ts +0 -12
- package/lib/scene/runtime.js +0 -74
- package/lib/scene/state-transitions.d.ts +0 -3
- package/lib/scene/state-transitions.js +0 -37
- package/lib/scene/styles.d.ts +0 -5
- package/lib/scene/styles.js +0 -69
- package/lib/scene/sylva-performance.d.ts +0 -11
- package/lib/scene/sylva-performance.js +0 -58
- package/lib/scene/wallpaper-character-styles.d.ts +0 -3
- package/lib/scene/wallpaper-character-styles.js +0 -49
- package/lib/scene/wallpaper-character.d.ts +0 -5
- package/lib/scene/wallpaper-character.js +0 -222
- package/lib/scene.d.ts +0 -8
- package/lib/scene.js +0 -8
- package/lib/sidebar-glass.d.ts +0 -16
- package/lib/sidebar-glass.js +0 -168
- package/lib/sidebar-heixiu-escape.d.ts +0 -44
- package/lib/sidebar-heixiu-escape.js +0 -340
- package/lib/sidebar-heixiu-roaming.d.ts +0 -27
- package/lib/sidebar-heixiu-roaming.js +0 -310
- package/lib/sidebar-reveal.d.ts +0 -8
- package/lib/sidebar-reveal.js +0 -59
- package/lib/state.d.ts +0 -21
- package/lib/state.js +0 -123
- package/lib/theme.d.ts +0 -19
- package/lib/theme.js +0 -188
- package/lib/vendor/bloub/decor.d.ts +0 -114
- package/lib/vendor/bloub/decor.js +0 -198
- package/lib/vendor/bloub/engine.d.ts +0 -213
- package/lib/vendor/bloub/engine.js +0 -452
- package/lib/vendor/bloub/expressions.d.ts +0 -35
- package/lib/vendor/bloub/expressions.js +0 -143
- package/lib/vendor/bloub/eyefit.d.ts +0 -75
- package/lib/vendor/bloub/eyefit.js +0 -393
- package/lib/vendor/bloub/face.d.ts +0 -63
- package/lib/vendor/bloub/face.js +0 -106
- package/lib/vendor/bloub/math.d.ts +0 -22
- package/lib/vendor/bloub/math.js +0 -36
- package/lib/vendor/bloub/profiles.d.ts +0 -8
- package/lib/vendor/bloub/profiles.js +0 -20
- package/lib/vendor/bloub/repere.d.ts +0 -30
- package/lib/vendor/bloub/repere.js +0 -32
- package/lib/vendor/bloub/shape.d.ts +0 -80
- package/lib/vendor/bloub/shape.js +0 -268
- package/lib/vendor/bloub/skins.d.ts +0 -36
- package/lib/vendor/bloub/skins.js +0 -74
- package/lib/vendor/bloub/states.d.ts +0 -87
- package/lib/vendor/bloub/states.js +0 -468
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
/** Generated by scripts/embed-assets.mjs for the pre-plugin Host bootstrap. */
|
|
2
|
-
export const XIAOHEI_LOADING_HEIXIU_OPEN = "data:image/webp;base64,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";
|
|
3
|
-
export const XIAOHEI_LOADING_HEIXIU_BLINK = "data:image/webp;base64,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";
|
|
4
|
-
//# sourceMappingURL=generated-loading-assets.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export declare const XIAOHEI_HEIXIU_GREETING_EVENT = "dsh-theme-xiaohei:heixiu-greeting";
|
|
2
|
-
export interface XiaoheiHeixiuGreetingDetail {
|
|
3
|
-
target: {
|
|
4
|
-
x: number;
|
|
5
|
-
y: number;
|
|
6
|
-
};
|
|
7
|
-
}
|
|
8
|
-
/** Install delegated pointer attention and occasional synchronized greetings. */
|
|
9
|
-
export declare function installXiaoheiHeixiuInteractions(doc?: Document | undefined): () => void;
|
|
10
|
-
//# sourceMappingURL=heixiu-interactions.d.ts.map
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
export const XIAOHEI_HEIXIU_GREETING_EVENT = 'dsh-theme-xiaohei:heixiu-greeting';
|
|
2
|
-
const HEIXIU_SELECTOR = '.xiaohei-scene__heixiu';
|
|
3
|
-
const HEIXIU_ENTER_RADIUS_PX = 120;
|
|
4
|
-
const HEIXIU_EXIT_RADIUS_PX = 154;
|
|
5
|
-
const HEIXIU_ATTENTION_OFFSET_PX = 3.2;
|
|
6
|
-
const GREETING_DURATION_MS = 800;
|
|
7
|
-
const INITIAL_GREETING_DELAY_MS = 3600;
|
|
8
|
-
const GREETING_MIN_DELAY_MS = 12_000;
|
|
9
|
-
const GREETING_DELAY_RANGE_MS = 6000;
|
|
10
|
-
/** Install delegated pointer attention and occasional synchronized greetings. */
|
|
11
|
-
export function installXiaoheiHeixiuInteractions(doc = typeof document === 'undefined' ? undefined : document) {
|
|
12
|
-
if (doc?.body === undefined || doc.defaultView === null)
|
|
13
|
-
return () => { };
|
|
14
|
-
const win = doc.defaultView;
|
|
15
|
-
const reducedMotion = win.matchMedia('(prefers-reduced-motion: reduce)');
|
|
16
|
-
const coarsePointer = win.matchMedia('(hover: none) and (pointer: coarse)');
|
|
17
|
-
let disposed = false;
|
|
18
|
-
let active;
|
|
19
|
-
let pointer;
|
|
20
|
-
let frameId = 0;
|
|
21
|
-
let greetingTimer = 0;
|
|
22
|
-
let greetingCleanupTimer = 0;
|
|
23
|
-
const behaviorDisabled = () => reducedMotion.matches || coarsePointer.matches;
|
|
24
|
-
const isIdle = () => (doc.documentElement.getAttribute('data-xiaohei-state') ?? 'idle') === 'idle' && doc.visibilityState !== 'hidden';
|
|
25
|
-
const clearAttention = () => {
|
|
26
|
-
if (active === undefined)
|
|
27
|
-
return;
|
|
28
|
-
active.removeAttribute('data-xiaohei-heixiu-attention');
|
|
29
|
-
active.style.removeProperty('--xiaohei-heixiu-attention-x');
|
|
30
|
-
active.style.removeProperty('--xiaohei-heixiu-attention-y');
|
|
31
|
-
active = undefined;
|
|
32
|
-
};
|
|
33
|
-
const candidateForPointer = (point) => {
|
|
34
|
-
let nearest;
|
|
35
|
-
for (const element of doc.querySelectorAll(HEIXIU_SELECTOR)) {
|
|
36
|
-
const rect = element.getBoundingClientRect();
|
|
37
|
-
if (rect.width <= 0 || rect.height <= 0)
|
|
38
|
-
continue;
|
|
39
|
-
const center = { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 };
|
|
40
|
-
const distance = Math.hypot(point.x - center.x, point.y - center.y);
|
|
41
|
-
if (nearest === undefined || distance < nearest.distance)
|
|
42
|
-
nearest = { element, center, distance };
|
|
43
|
-
}
|
|
44
|
-
return nearest;
|
|
45
|
-
};
|
|
46
|
-
const dispatchGreeting = (target) => {
|
|
47
|
-
const EventConstructor = win.CustomEvent;
|
|
48
|
-
doc.dispatchEvent(new EventConstructor(XIAOHEI_HEIXIU_GREETING_EVENT, {
|
|
49
|
-
detail: { target },
|
|
50
|
-
}));
|
|
51
|
-
};
|
|
52
|
-
const playGreeting = (heixiu, target) => {
|
|
53
|
-
if (disposed || behaviorDisabled() || !isIdle())
|
|
54
|
-
return;
|
|
55
|
-
win.clearTimeout(greetingCleanupTimer);
|
|
56
|
-
heixiu.removeAttribute('data-xiaohei-heixiu-greeting');
|
|
57
|
-
void heixiu.offsetWidth;
|
|
58
|
-
heixiu.setAttribute('data-xiaohei-heixiu-greeting', 'true');
|
|
59
|
-
dispatchGreeting(target);
|
|
60
|
-
greetingCleanupTimer = win.setTimeout(() => {
|
|
61
|
-
greetingCleanupTimer = 0;
|
|
62
|
-
heixiu.removeAttribute('data-xiaohei-heixiu-greeting');
|
|
63
|
-
}, GREETING_DURATION_MS);
|
|
64
|
-
};
|
|
65
|
-
const greetFromMascotCompanion = () => {
|
|
66
|
-
if (disposed || behaviorDisabled() || !isIdle())
|
|
67
|
-
return;
|
|
68
|
-
const heixiu = doc.querySelector('.xiaohei-scene__heixiu--mascot');
|
|
69
|
-
if (heixiu === null)
|
|
70
|
-
return;
|
|
71
|
-
const rect = heixiu.getBoundingClientRect();
|
|
72
|
-
if (rect.width <= 0 || rect.height <= 0)
|
|
73
|
-
return;
|
|
74
|
-
playGreeting(heixiu, { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 });
|
|
75
|
-
};
|
|
76
|
-
const scheduleGreeting = (initial = false) => {
|
|
77
|
-
win.clearTimeout(greetingTimer);
|
|
78
|
-
if (disposed)
|
|
79
|
-
return;
|
|
80
|
-
const delay = initial
|
|
81
|
-
? INITIAL_GREETING_DELAY_MS
|
|
82
|
-
: GREETING_MIN_DELAY_MS + Math.round(Math.random() * GREETING_DELAY_RANGE_MS);
|
|
83
|
-
greetingTimer = win.setTimeout(() => {
|
|
84
|
-
greetingTimer = 0;
|
|
85
|
-
greetFromMascotCompanion();
|
|
86
|
-
scheduleGreeting();
|
|
87
|
-
}, delay);
|
|
88
|
-
};
|
|
89
|
-
const applyPointerAttention = () => {
|
|
90
|
-
frameId = 0;
|
|
91
|
-
if (pointer === undefined || behaviorDisabled() || !isIdle()) {
|
|
92
|
-
clearAttention();
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
const candidate = candidateForPointer(pointer);
|
|
96
|
-
const radius = candidate?.element === active ? HEIXIU_EXIT_RADIUS_PX : HEIXIU_ENTER_RADIUS_PX;
|
|
97
|
-
if (candidate === undefined || candidate.distance > radius) {
|
|
98
|
-
clearAttention();
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
if (active !== candidate.element) {
|
|
102
|
-
clearAttention();
|
|
103
|
-
active = candidate.element;
|
|
104
|
-
active.setAttribute('data-xiaohei-heixiu-attention', 'true');
|
|
105
|
-
}
|
|
106
|
-
const distance = Math.max(1, candidate.distance);
|
|
107
|
-
const x = (pointer.x - candidate.center.x) / distance * HEIXIU_ATTENTION_OFFSET_PX;
|
|
108
|
-
const y = (pointer.y - candidate.center.y) / distance * HEIXIU_ATTENTION_OFFSET_PX;
|
|
109
|
-
candidate.element.style.setProperty('--xiaohei-heixiu-attention-x', `${x.toFixed(2)}px`);
|
|
110
|
-
candidate.element.style.setProperty('--xiaohei-heixiu-attention-y', `${y.toFixed(2)}px`);
|
|
111
|
-
};
|
|
112
|
-
const wake = () => {
|
|
113
|
-
if (disposed || frameId !== 0)
|
|
114
|
-
return;
|
|
115
|
-
frameId = win.requestAnimationFrame(applyPointerAttention);
|
|
116
|
-
};
|
|
117
|
-
const onPointerMove = (event) => {
|
|
118
|
-
pointer = event.pointerType === 'touch' ? undefined : { x: event.clientX, y: event.clientY };
|
|
119
|
-
wake();
|
|
120
|
-
};
|
|
121
|
-
const clearPointer = () => {
|
|
122
|
-
pointer = undefined;
|
|
123
|
-
wake();
|
|
124
|
-
};
|
|
125
|
-
const onStateOrPreferenceChange = () => {
|
|
126
|
-
clearAttention();
|
|
127
|
-
scheduleGreeting();
|
|
128
|
-
wake();
|
|
129
|
-
};
|
|
130
|
-
const stateObserver = new win.MutationObserver(onStateOrPreferenceChange);
|
|
131
|
-
stateObserver.observe(doc.documentElement, {
|
|
132
|
-
attributes: true,
|
|
133
|
-
attributeFilter: ['data-xiaohei-state'],
|
|
134
|
-
});
|
|
135
|
-
doc.addEventListener('pointermove', onPointerMove, { passive: true });
|
|
136
|
-
doc.addEventListener('pointerleave', clearPointer);
|
|
137
|
-
doc.addEventListener('visibilitychange', onStateOrPreferenceChange);
|
|
138
|
-
win.addEventListener('blur', clearPointer);
|
|
139
|
-
reducedMotion.addEventListener('change', onStateOrPreferenceChange);
|
|
140
|
-
coarsePointer.addEventListener('change', onStateOrPreferenceChange);
|
|
141
|
-
scheduleGreeting(true);
|
|
142
|
-
return () => {
|
|
143
|
-
disposed = true;
|
|
144
|
-
if (frameId !== 0)
|
|
145
|
-
win.cancelAnimationFrame(frameId);
|
|
146
|
-
win.clearTimeout(greetingTimer);
|
|
147
|
-
win.clearTimeout(greetingCleanupTimer);
|
|
148
|
-
stateObserver.disconnect();
|
|
149
|
-
doc.removeEventListener('pointermove', onPointerMove);
|
|
150
|
-
doc.removeEventListener('pointerleave', clearPointer);
|
|
151
|
-
doc.removeEventListener('visibilitychange', onStateOrPreferenceChange);
|
|
152
|
-
win.removeEventListener('blur', clearPointer);
|
|
153
|
-
reducedMotion.removeEventListener('change', onStateOrPreferenceChange);
|
|
154
|
-
coarsePointer.removeEventListener('change', onStateOrPreferenceChange);
|
|
155
|
-
clearAttention();
|
|
156
|
-
for (const heixiu of doc.querySelectorAll(HEIXIU_SELECTOR)) {
|
|
157
|
-
heixiu.removeAttribute('data-xiaohei-heixiu-greeting');
|
|
158
|
-
}
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
//# sourceMappingURL=heixiu-interactions.js.map
|
package/lib/host-contract.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export declare const XIAOHEI_HOST_SELECTORS: {
|
|
2
|
-
readonly sidebar: "[data-slot='sidebar']";
|
|
3
|
-
readonly sidebarShell: "#root [data-slot='sidebar'] > div";
|
|
4
|
-
readonly sidebarColumn: "#root :has(> [data-slot='sidebar'])";
|
|
5
|
-
readonly composerCard: "#root [data-composer-card='true']";
|
|
6
|
-
readonly composerHeroMark: "#root .xiaohei-brand-mark[data-brand-context='hero']";
|
|
7
|
-
readonly composerHeroRow: "[class*='_headline']";
|
|
8
|
-
};
|
|
9
|
-
//# sourceMappingURL=host-contract.d.ts.map
|
package/lib/host-contract.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/** Keep stable DSH selectors in one compatibility boundary. */
|
|
2
|
-
const sidebar = "[data-slot='sidebar']";
|
|
3
|
-
export const XIAOHEI_HOST_SELECTORS = {
|
|
4
|
-
sidebar,
|
|
5
|
-
sidebarShell: `#root ${sidebar} > div`,
|
|
6
|
-
// The shell holds its expanded width while its contents fade. Only the
|
|
7
|
-
// outer layout column represents the currently visible animated width.
|
|
8
|
-
sidebarColumn: `#root :has(> ${sidebar})`,
|
|
9
|
-
composerCard: "#root [data-composer-card='true']",
|
|
10
|
-
composerHeroMark: "#root .xiaohei-brand-mark[data-brand-context='hero']",
|
|
11
|
-
composerHeroRow: "[class*='_headline']",
|
|
12
|
-
};
|
|
13
|
-
//# sourceMappingURL=host-contract.js.map
|
package/lib/host-dom.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/** A listener that reconciles plugin-owned DOM after the DSH host tree changes. */
|
|
2
|
-
export type XiaoheiHostDomListener = (records: readonly MutationRecord[]) => void;
|
|
3
|
-
/**
|
|
4
|
-
* Share one batched body observer across all runtime theme behaviours.
|
|
5
|
-
*
|
|
6
|
-
* The Host owns the React tree and may replace slots at any time. Theme modules
|
|
7
|
-
* subscribe here instead of observing the full document independently. The
|
|
8
|
-
* first subscriber creates the observer and the last cleanup disconnects it.
|
|
9
|
-
*/
|
|
10
|
-
export declare function subscribeXiaoheiHostDom(doc: Document, listener: XiaoheiHostDomListener): () => void;
|
|
11
|
-
//# sourceMappingURL=host-dom.d.ts.map
|
package/lib/host-dom.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
const hubs = new WeakMap();
|
|
2
|
-
/**
|
|
3
|
-
* Share one batched body observer across all runtime theme behaviours.
|
|
4
|
-
*
|
|
5
|
-
* The Host owns the React tree and may replace slots at any time. Theme modules
|
|
6
|
-
* subscribe here instead of observing the full document independently. The
|
|
7
|
-
* first subscriber creates the observer and the last cleanup disconnects it.
|
|
8
|
-
*/
|
|
9
|
-
export function subscribeXiaoheiHostDom(doc, listener) {
|
|
10
|
-
const win = doc.defaultView;
|
|
11
|
-
if (doc.body === undefined || win === null || typeof win.MutationObserver !== 'function') {
|
|
12
|
-
return () => { };
|
|
13
|
-
}
|
|
14
|
-
let hub = hubs.get(doc);
|
|
15
|
-
if (hub === undefined) {
|
|
16
|
-
const listeners = new Set();
|
|
17
|
-
const nextHub = {
|
|
18
|
-
listeners,
|
|
19
|
-
queued: false,
|
|
20
|
-
records: [],
|
|
21
|
-
};
|
|
22
|
-
const flush = () => {
|
|
23
|
-
nextHub.queued = false;
|
|
24
|
-
delete nextHub.frame;
|
|
25
|
-
if (hubs.get(doc) !== nextHub)
|
|
26
|
-
return;
|
|
27
|
-
const records = nextHub.records;
|
|
28
|
-
nextHub.records = [];
|
|
29
|
-
for (const subscriber of [...listeners]) {
|
|
30
|
-
try {
|
|
31
|
-
subscriber(records);
|
|
32
|
-
}
|
|
33
|
-
catch (error) {
|
|
34
|
-
win.setTimeout(() => { throw error; }, 0);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
nextHub.observer = new win.MutationObserver((records = []) => {
|
|
39
|
-
nextHub.records.push(...records);
|
|
40
|
-
if (nextHub.queued)
|
|
41
|
-
return;
|
|
42
|
-
nextHub.queued = true;
|
|
43
|
-
// React can commit several batches within one frame. Do not run every
|
|
44
|
-
// theme reconciler in each microtask before the host finishes layout.
|
|
45
|
-
if (typeof win.requestAnimationFrame === 'function')
|
|
46
|
-
nextHub.frame = win.requestAnimationFrame(flush);
|
|
47
|
-
else
|
|
48
|
-
queueMicrotask(flush);
|
|
49
|
-
});
|
|
50
|
-
nextHub.observer.observe(doc.body, { childList: true, subtree: true });
|
|
51
|
-
hubs.set(doc, nextHub);
|
|
52
|
-
hub = nextHub;
|
|
53
|
-
}
|
|
54
|
-
hub.listeners.add(listener);
|
|
55
|
-
let subscribed = true;
|
|
56
|
-
return () => {
|
|
57
|
-
if (!subscribed)
|
|
58
|
-
return;
|
|
59
|
-
subscribed = false;
|
|
60
|
-
const activeHub = hubs.get(doc);
|
|
61
|
-
if (activeHub === undefined)
|
|
62
|
-
return;
|
|
63
|
-
activeHub.listeners.delete(listener);
|
|
64
|
-
if (activeHub.listeners.size > 0)
|
|
65
|
-
return;
|
|
66
|
-
activeHub.observer?.disconnect();
|
|
67
|
-
if (activeHub.frame !== undefined)
|
|
68
|
-
win.cancelAnimationFrame(activeHub.frame);
|
|
69
|
-
hubs.delete(doc);
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=host-dom.js.map
|
package/lib/loading-heixiu.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export declare const XIAOHEI_PLUGIN_LOADING_STYLE_ID = "dsh-theme-xiaohei/plugin-loading-style";
|
|
2
|
-
export declare const XIAOHEI_PLUGIN_LOADING_CLASS = "xiaohei-plugin-loader__track";
|
|
3
|
-
/** Only the normal plugin boot state is decorated. Failure output stays native. */
|
|
4
|
-
export declare function isXiaoheiPluginLoadingHint(value: string | null | undefined): boolean;
|
|
5
|
-
export declare const XIAOHEI_PLUGIN_LOADING_CSS = "\n[data-xiaohei-plugin-loading='true'] {\n border-color: transparent !important;\n background: transparent !important;\n box-shadow: none !important;\n}\n\n/* Replace the decorative wordmark while keeping DSH's accessible loading hint\n * beneath the Heixiu track. */\n[data-xiaohei-plugin-loading='true'] > :first-child:not([data-dsh-boot-spinner]) {\n display: none !important;\n}\n\n[data-xiaohei-plugin-loading='true'] > [data-dsh-boot-spinner] + * {\n margin-top: 0.65rem;\n opacity: 0.68;\n letter-spacing: 0.012em;\n}\n\n[data-xiaohei-plugin-loading='true'] > [class*='_spinner_'] {\n position: relative;\n overflow: visible;\n border-color: transparent !important;\n background: none !important;\n box-shadow: none !important;\n animation: none !important;\n}\n\n[data-xiaohei-plugin-loading='true'] > [data-dsh-boot-spinner]::before,\n[data-xiaohei-plugin-loading='true'] > [data-dsh-boot-spinner]::after {\n content: none !important;\n display: none !important;\n background: none !important;\n animation: none !important;\n}\n\n.xiaohei-plugin-loader__track {\n position: absolute;\n left: 50%;\n top: 50%;\n display: block;\n width: 12rem;\n height: 3.25rem;\n overflow: hidden;\n contain: layout;\n pointer-events: none;\n user-select: none;\n transform: translate3d(-50%, -50%, 0);\n -webkit-mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);\n mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);\n}\n\n.xiaohei-plugin-loader__runner {\n position: absolute;\n left: 0;\n top: 50%;\n display: block;\n width: 2rem;\n aspect-ratio: 1;\n opacity: 0;\n transform: translate3d(-2rem, -50%, 0);\n animation: xiaohei-plugin-loader-travel 2.8s linear infinite;\n animation-delay: var(--xiaohei-loader-delay);\n will-change: transform, opacity;\n}\n\n.xiaohei-plugin-loader__sprite {\n position: relative;\n display: block;\n width: 100%;\n aspect-ratio: 1;\n animation: xiaohei-plugin-loader-hop 700ms cubic-bezier(0.34, 0, 0.2, 1) infinite;\n animation-delay: calc(var(--xiaohei-loader-index) * -90ms);\n will-change: transform;\n filter:\n drop-shadow(0 0.18rem 0.38rem rgb(91 218 194 / 24%))\n drop-shadow(0 0.36rem 0.7rem rgb(5 13 14 / 18%));\n}\n\n.xiaohei-plugin-loader__sprite > img {\n position: absolute;\n inset: 0;\n display: block;\n width: 100%;\n height: 100%;\n max-width: none;\n max-height: none;\n object-fit: contain;\n filter: brightness(1.08) contrast(1.04) saturate(0.82);\n}\n\n.xiaohei-plugin-loader__runner-open {\n opacity: 1;\n animation: xiaohei-plugin-loader-open 2.7s step-end infinite;\n animation-delay: calc(var(--xiaohei-loader-index) * -370ms);\n}\n\n.xiaohei-plugin-loader__runner-blink {\n opacity: 0;\n animation: xiaohei-plugin-loader-blink 2.7s step-end infinite;\n animation-delay: calc(var(--xiaohei-loader-index) * -370ms);\n}\n\nhtml[data-xiaohei-appearance='light'] .xiaohei-plugin-loader__sprite,\nhtml[data-xiaohei-boot-appearance='light'] .xiaohei-plugin-loader__sprite {\n filter:\n drop-shadow(0 0.16rem 0.32rem rgb(47 133 118 / 16%))\n drop-shadow(0 0.32rem 0.58rem rgb(45 64 56 / 12%));\n}\n\nhtml[data-xiaohei-appearance='light'] .xiaohei-plugin-loader__sprite > img,\nhtml[data-xiaohei-boot-appearance='light'] .xiaohei-plugin-loader__sprite > img {\n filter: brightness(1.01) contrast(1.05) saturate(0.76);\n}\n\n@keyframes xiaohei-plugin-loader-travel {\n 0% {\n opacity: 0;\n transform: translate3d(-2rem, -50%, 0);\n }\n 8%, 92% { opacity: 0.82; }\n 100% {\n opacity: 0;\n transform: translate3d(12rem, -50%, 0);\n }\n}\n\n@keyframes xiaohei-plugin-loader-hop {\n 0%, 16%, 62%, 100% { transform: translate3d(0, 0, 0) scale(0.96, 1.02); }\n 38% { transform: translate3d(0, -0.68rem, 0) scale(1, 0.98); }\n 52% { transform: translate3d(0, 0, 0) scale(1.04, 0.93); }\n}\n\n@keyframes xiaohei-plugin-loader-open {\n 0%, 71.9%, 78%, 100% { opacity: 1; }\n 72%, 77.9% { opacity: 0; }\n}\n\n@keyframes xiaohei-plugin-loader-blink {\n 0%, 71.9%, 78%, 100% { opacity: 0; }\n 72%, 77.9% { opacity: 1; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .xiaohei-plugin-loader__track {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.35rem;\n overflow: visible;\n -webkit-mask-image: none;\n mask-image: none;\n }\n\n .xiaohei-plugin-loader__runner {\n position: relative;\n left: auto;\n top: auto;\n width: 2rem;\n opacity: 0.72;\n transform: none;\n animation: none;\n will-change: auto;\n }\n\n .xiaohei-plugin-loader__sprite,\n .xiaohei-plugin-loader__runner-open,\n .xiaohei-plugin-loader__runner-blink {\n animation: none;\n }\n}\n\n@media (forced-colors: active) {\n .xiaohei-plugin-loader__track { display: none; }\n [data-xiaohei-plugin-loading='true'] > [class*='_spinner_'] {\n border-color: ButtonText !important;\n border-top-color: Highlight !important;\n animation: xiaohei-plugin-loader-fallback-spin 0.8s linear infinite !important;\n }\n}\n\n@keyframes xiaohei-plugin-loader-fallback-spin {\n to { transform: rotate(360deg); }\n}\n";
|
|
6
|
-
/** Replace DSH's normal spinner after this plugin joins the boot queue. */
|
|
7
|
-
export declare function installXiaoheiPluginLoading(doc?: Document | undefined): () => void;
|
|
8
|
-
//# sourceMappingURL=loading-heixiu.d.ts.map
|
package/lib/loading-heixiu.js
DELETED
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
import { XIAOHEI_LOADING_HEIXIU_BLINK, XIAOHEI_LOADING_HEIXIU_OPEN, } from './generated-loading-assets.js';
|
|
2
|
-
import { subscribeXiaoheiHostDom } from './host-dom.js';
|
|
3
|
-
export const XIAOHEI_PLUGIN_LOADING_STYLE_ID = 'dsh-theme-xiaohei/plugin-loading-style';
|
|
4
|
-
export const XIAOHEI_PLUGIN_LOADING_CLASS = 'xiaohei-plugin-loader__track';
|
|
5
|
-
const LOADING_HINTS = new Set(['Loading plugins...', 'Loading plugins…']);
|
|
6
|
-
/** Only the normal plugin boot state is decorated. Failure output stays native. */
|
|
7
|
-
export function isXiaoheiPluginLoadingHint(value) {
|
|
8
|
-
return LOADING_HINTS.has(value?.trim() ?? '');
|
|
9
|
-
}
|
|
10
|
-
export const XIAOHEI_PLUGIN_LOADING_CSS = `
|
|
11
|
-
[data-xiaohei-plugin-loading='true'] {
|
|
12
|
-
border-color: transparent !important;
|
|
13
|
-
background: transparent !important;
|
|
14
|
-
box-shadow: none !important;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/* Replace the decorative wordmark while keeping DSH's accessible loading hint
|
|
18
|
-
* beneath the Heixiu track. */
|
|
19
|
-
[data-xiaohei-plugin-loading='true'] > :first-child:not([data-dsh-boot-spinner]) {
|
|
20
|
-
display: none !important;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
[data-xiaohei-plugin-loading='true'] > [data-dsh-boot-spinner] + * {
|
|
24
|
-
margin-top: 0.65rem;
|
|
25
|
-
opacity: 0.68;
|
|
26
|
-
letter-spacing: 0.012em;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
[data-xiaohei-plugin-loading='true'] > [class*='_spinner_'] {
|
|
30
|
-
position: relative;
|
|
31
|
-
overflow: visible;
|
|
32
|
-
border-color: transparent !important;
|
|
33
|
-
background: none !important;
|
|
34
|
-
box-shadow: none !important;
|
|
35
|
-
animation: none !important;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
[data-xiaohei-plugin-loading='true'] > [data-dsh-boot-spinner]::before,
|
|
39
|
-
[data-xiaohei-plugin-loading='true'] > [data-dsh-boot-spinner]::after {
|
|
40
|
-
content: none !important;
|
|
41
|
-
display: none !important;
|
|
42
|
-
background: none !important;
|
|
43
|
-
animation: none !important;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
.xiaohei-plugin-loader__track {
|
|
47
|
-
position: absolute;
|
|
48
|
-
left: 50%;
|
|
49
|
-
top: 50%;
|
|
50
|
-
display: block;
|
|
51
|
-
width: 12rem;
|
|
52
|
-
height: 3.25rem;
|
|
53
|
-
overflow: hidden;
|
|
54
|
-
contain: layout;
|
|
55
|
-
pointer-events: none;
|
|
56
|
-
user-select: none;
|
|
57
|
-
transform: translate3d(-50%, -50%, 0);
|
|
58
|
-
-webkit-mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);
|
|
59
|
-
mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
.xiaohei-plugin-loader__runner {
|
|
63
|
-
position: absolute;
|
|
64
|
-
left: 0;
|
|
65
|
-
top: 50%;
|
|
66
|
-
display: block;
|
|
67
|
-
width: 2rem;
|
|
68
|
-
aspect-ratio: 1;
|
|
69
|
-
opacity: 0;
|
|
70
|
-
transform: translate3d(-2rem, -50%, 0);
|
|
71
|
-
animation: xiaohei-plugin-loader-travel 2.8s linear infinite;
|
|
72
|
-
animation-delay: var(--xiaohei-loader-delay);
|
|
73
|
-
will-change: transform, opacity;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
.xiaohei-plugin-loader__sprite {
|
|
77
|
-
position: relative;
|
|
78
|
-
display: block;
|
|
79
|
-
width: 100%;
|
|
80
|
-
aspect-ratio: 1;
|
|
81
|
-
animation: xiaohei-plugin-loader-hop 700ms cubic-bezier(0.34, 0, 0.2, 1) infinite;
|
|
82
|
-
animation-delay: calc(var(--xiaohei-loader-index) * -90ms);
|
|
83
|
-
will-change: transform;
|
|
84
|
-
filter:
|
|
85
|
-
drop-shadow(0 0.18rem 0.38rem rgb(91 218 194 / 24%))
|
|
86
|
-
drop-shadow(0 0.36rem 0.7rem rgb(5 13 14 / 18%));
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.xiaohei-plugin-loader__sprite > img {
|
|
90
|
-
position: absolute;
|
|
91
|
-
inset: 0;
|
|
92
|
-
display: block;
|
|
93
|
-
width: 100%;
|
|
94
|
-
height: 100%;
|
|
95
|
-
max-width: none;
|
|
96
|
-
max-height: none;
|
|
97
|
-
object-fit: contain;
|
|
98
|
-
filter: brightness(1.08) contrast(1.04) saturate(0.82);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
.xiaohei-plugin-loader__runner-open {
|
|
102
|
-
opacity: 1;
|
|
103
|
-
animation: xiaohei-plugin-loader-open 2.7s step-end infinite;
|
|
104
|
-
animation-delay: calc(var(--xiaohei-loader-index) * -370ms);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
.xiaohei-plugin-loader__runner-blink {
|
|
108
|
-
opacity: 0;
|
|
109
|
-
animation: xiaohei-plugin-loader-blink 2.7s step-end infinite;
|
|
110
|
-
animation-delay: calc(var(--xiaohei-loader-index) * -370ms);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
html[data-xiaohei-appearance='light'] .xiaohei-plugin-loader__sprite,
|
|
114
|
-
html[data-xiaohei-boot-appearance='light'] .xiaohei-plugin-loader__sprite {
|
|
115
|
-
filter:
|
|
116
|
-
drop-shadow(0 0.16rem 0.32rem rgb(47 133 118 / 16%))
|
|
117
|
-
drop-shadow(0 0.32rem 0.58rem rgb(45 64 56 / 12%));
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
html[data-xiaohei-appearance='light'] .xiaohei-plugin-loader__sprite > img,
|
|
121
|
-
html[data-xiaohei-boot-appearance='light'] .xiaohei-plugin-loader__sprite > img {
|
|
122
|
-
filter: brightness(1.01) contrast(1.05) saturate(0.76);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
@keyframes xiaohei-plugin-loader-travel {
|
|
126
|
-
0% {
|
|
127
|
-
opacity: 0;
|
|
128
|
-
transform: translate3d(-2rem, -50%, 0);
|
|
129
|
-
}
|
|
130
|
-
8%, 92% { opacity: 0.82; }
|
|
131
|
-
100% {
|
|
132
|
-
opacity: 0;
|
|
133
|
-
transform: translate3d(12rem, -50%, 0);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
@keyframes xiaohei-plugin-loader-hop {
|
|
138
|
-
0%, 16%, 62%, 100% { transform: translate3d(0, 0, 0) scale(0.96, 1.02); }
|
|
139
|
-
38% { transform: translate3d(0, -0.68rem, 0) scale(1, 0.98); }
|
|
140
|
-
52% { transform: translate3d(0, 0, 0) scale(1.04, 0.93); }
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
@keyframes xiaohei-plugin-loader-open {
|
|
144
|
-
0%, 71.9%, 78%, 100% { opacity: 1; }
|
|
145
|
-
72%, 77.9% { opacity: 0; }
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
@keyframes xiaohei-plugin-loader-blink {
|
|
149
|
-
0%, 71.9%, 78%, 100% { opacity: 0; }
|
|
150
|
-
72%, 77.9% { opacity: 1; }
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
@media (prefers-reduced-motion: reduce) {
|
|
154
|
-
.xiaohei-plugin-loader__track {
|
|
155
|
-
display: flex;
|
|
156
|
-
align-items: center;
|
|
157
|
-
justify-content: space-between;
|
|
158
|
-
gap: 0.35rem;
|
|
159
|
-
overflow: visible;
|
|
160
|
-
-webkit-mask-image: none;
|
|
161
|
-
mask-image: none;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
.xiaohei-plugin-loader__runner {
|
|
165
|
-
position: relative;
|
|
166
|
-
left: auto;
|
|
167
|
-
top: auto;
|
|
168
|
-
width: 2rem;
|
|
169
|
-
opacity: 0.72;
|
|
170
|
-
transform: none;
|
|
171
|
-
animation: none;
|
|
172
|
-
will-change: auto;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
.xiaohei-plugin-loader__sprite,
|
|
176
|
-
.xiaohei-plugin-loader__runner-open,
|
|
177
|
-
.xiaohei-plugin-loader__runner-blink {
|
|
178
|
-
animation: none;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
@media (forced-colors: active) {
|
|
183
|
-
.xiaohei-plugin-loader__track { display: none; }
|
|
184
|
-
[data-xiaohei-plugin-loading='true'] > [class*='_spinner_'] {
|
|
185
|
-
border-color: ButtonText !important;
|
|
186
|
-
border-top-color: Highlight !important;
|
|
187
|
-
animation: xiaohei-plugin-loader-fallback-spin 0.8s linear infinite !important;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
@keyframes xiaohei-plugin-loader-fallback-spin {
|
|
192
|
-
to { transform: rotate(360deg); }
|
|
193
|
-
}
|
|
194
|
-
`;
|
|
195
|
-
/** Replace DSH's normal spinner after this plugin joins the boot queue. */
|
|
196
|
-
export function installXiaoheiPluginLoading(doc = typeof document === 'undefined' ? undefined : document) {
|
|
197
|
-
if (doc?.head === undefined || doc.body === undefined || doc.defaultView === null)
|
|
198
|
-
return () => { };
|
|
199
|
-
if (doc.documentElement.getAttribute('data-xiaohei-boot-loader') === 'host')
|
|
200
|
-
return () => { };
|
|
201
|
-
const win = doc.defaultView;
|
|
202
|
-
let disposed = false;
|
|
203
|
-
let decoratedCard;
|
|
204
|
-
doc.getElementById(XIAOHEI_PLUGIN_LOADING_STYLE_ID)?.remove();
|
|
205
|
-
const style = doc.createElement('style');
|
|
206
|
-
style.id = XIAOHEI_PLUGIN_LOADING_STYLE_ID;
|
|
207
|
-
style.textContent = XIAOHEI_PLUGIN_LOADING_CSS;
|
|
208
|
-
doc.head.append(style);
|
|
209
|
-
const clearCard = () => {
|
|
210
|
-
if (decoratedCard === undefined)
|
|
211
|
-
return;
|
|
212
|
-
decoratedCard.removeAttribute('data-xiaohei-plugin-loading');
|
|
213
|
-
decoratedCard.querySelector(`.${XIAOHEI_PLUGIN_LOADING_CLASS}`)?.remove();
|
|
214
|
-
decoratedCard = undefined;
|
|
215
|
-
};
|
|
216
|
-
const findHint = () => {
|
|
217
|
-
for (const element of doc.querySelectorAll('div')) {
|
|
218
|
-
if (isXiaoheiPluginLoadingHint(element.textContent) && element.children.length === 0)
|
|
219
|
-
return element;
|
|
220
|
-
}
|
|
221
|
-
return undefined;
|
|
222
|
-
};
|
|
223
|
-
const sync = () => {
|
|
224
|
-
if (disposed)
|
|
225
|
-
return;
|
|
226
|
-
const hint = findHint();
|
|
227
|
-
if (hint === undefined || hint.parentElement === null) {
|
|
228
|
-
clearCard();
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
const card = hint.parentElement;
|
|
232
|
-
if (card === decoratedCard && card.querySelector(`.${XIAOHEI_PLUGIN_LOADING_CLASS}`) !== null)
|
|
233
|
-
return;
|
|
234
|
-
clearCard();
|
|
235
|
-
decoratedCard = card;
|
|
236
|
-
card.setAttribute('data-xiaohei-plugin-loading', 'true');
|
|
237
|
-
const track = createLoadingTrack(doc);
|
|
238
|
-
const spinner = card.querySelector(":scope > [class*='_spinner_']");
|
|
239
|
-
if (spinner === null)
|
|
240
|
-
return;
|
|
241
|
-
spinner.append(track);
|
|
242
|
-
};
|
|
243
|
-
let syncQueued = false;
|
|
244
|
-
const queueSync = () => {
|
|
245
|
-
if (syncQueued || disposed)
|
|
246
|
-
return;
|
|
247
|
-
syncQueued = true;
|
|
248
|
-
queueMicrotask(() => {
|
|
249
|
-
syncQueued = false;
|
|
250
|
-
sync();
|
|
251
|
-
});
|
|
252
|
-
};
|
|
253
|
-
sync();
|
|
254
|
-
const unsubscribeHostDom = subscribeXiaoheiHostDom(doc, queueSync);
|
|
255
|
-
return () => {
|
|
256
|
-
disposed = true;
|
|
257
|
-
unsubscribeHostDom();
|
|
258
|
-
clearCard();
|
|
259
|
-
style.remove();
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
function createLoadingTrack(doc) {
|
|
263
|
-
const track = doc.createElement('div');
|
|
264
|
-
track.className = XIAOHEI_PLUGIN_LOADING_CLASS;
|
|
265
|
-
track.setAttribute('aria-hidden', 'true');
|
|
266
|
-
for (let index = 0; index < 4; index += 1) {
|
|
267
|
-
const runner = doc.createElement('span');
|
|
268
|
-
runner.className = 'xiaohei-plugin-loader__runner';
|
|
269
|
-
runner.style.setProperty('--xiaohei-loader-index', String(index));
|
|
270
|
-
runner.style.setProperty('--xiaohei-loader-delay', `${index * -700}ms`);
|
|
271
|
-
const sprite = doc.createElement('span');
|
|
272
|
-
sprite.className = 'xiaohei-plugin-loader__sprite';
|
|
273
|
-
sprite.append(createLoadingImage(doc, XIAOHEI_LOADING_HEIXIU_OPEN, 'xiaohei-plugin-loader__runner-open'), createLoadingImage(doc, XIAOHEI_LOADING_HEIXIU_BLINK, 'xiaohei-plugin-loader__runner-blink'));
|
|
274
|
-
runner.append(sprite);
|
|
275
|
-
track.append(runner);
|
|
276
|
-
}
|
|
277
|
-
return track;
|
|
278
|
-
}
|
|
279
|
-
function createLoadingImage(doc, source, className) {
|
|
280
|
-
const image = doc.createElement('img');
|
|
281
|
-
image.className = className;
|
|
282
|
-
image.alt = '';
|
|
283
|
-
image.decoding = 'async';
|
|
284
|
-
image.src = source;
|
|
285
|
-
return image;
|
|
286
|
-
}
|
|
287
|
-
//# sourceMappingURL=loading-heixiu.js.map
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
interface XiaoheiBrandMarkProps {
|
|
2
|
-
size: number;
|
|
3
|
-
className?: string | undefined;
|
|
4
|
-
}
|
|
5
|
-
/** Official sidebar brand occupant with a compact, lifecycle-safe metallic shader. */
|
|
6
|
-
export declare function XiaoheiMetallicBrandMark({ size, className }: XiaoheiBrandMarkProps): import("react").JSX.Element;
|
|
7
|
-
/** Official sidebar brand-name occupant paired with the Xiaohei mark. */
|
|
8
|
-
export declare function XiaoheiBrandName(): import("react").JSX.Element;
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=metallic-brand-mark.d.ts.map
|