@lemoncat7/dsh-theme-xiaohei 0.3.0-alpha.22

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.
Files changed (164) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -0
  3. package/cordis.patch.yml +4 -0
  4. package/lib/appearance.d.ts +12 -0
  5. package/lib/appearance.d.ts.map +1 -0
  6. package/lib/appearance.js +26 -0
  7. package/lib/appearance.js.map +1 -0
  8. package/lib/blink.d.ts +4 -0
  9. package/lib/blink.d.ts.map +1 -0
  10. package/lib/blink.js +110 -0
  11. package/lib/blink.js.map +1 -0
  12. package/lib/boot-appearance.d.ts +10 -0
  13. package/lib/boot-appearance.d.ts.map +1 -0
  14. package/lib/boot-appearance.js +47 -0
  15. package/lib/boot-appearance.js.map +1 -0
  16. package/lib/boot-loader.d.ts +5 -0
  17. package/lib/boot-loader.d.ts.map +1 -0
  18. package/lib/boot-loader.js +158 -0
  19. package/lib/boot-loader.js.map +1 -0
  20. package/lib/chrome/accessibility.d.ts +3 -0
  21. package/lib/chrome/accessibility.d.ts.map +1 -0
  22. package/lib/chrome/accessibility.js +77 -0
  23. package/lib/chrome/accessibility.js.map +1 -0
  24. package/lib/chrome/blink.d.ts +3 -0
  25. package/lib/chrome/blink.d.ts.map +1 -0
  26. package/lib/chrome/blink.js +15 -0
  27. package/lib/chrome/blink.js.map +1 -0
  28. package/lib/chrome/composer.d.ts +3 -0
  29. package/lib/chrome/composer.d.ts.map +1 -0
  30. package/lib/chrome/composer.js +146 -0
  31. package/lib/chrome/composer.js.map +1 -0
  32. package/lib/chrome/conversation-messages.d.ts +3 -0
  33. package/lib/chrome/conversation-messages.d.ts.map +1 -0
  34. package/lib/chrome/conversation-messages.js +96 -0
  35. package/lib/chrome/conversation-messages.js.map +1 -0
  36. package/lib/chrome/conversation.d.ts +3 -0
  37. package/lib/chrome/conversation.d.ts.map +1 -0
  38. package/lib/chrome/conversation.js +61 -0
  39. package/lib/chrome/conversation.js.map +1 -0
  40. package/lib/chrome/frames.d.ts +6 -0
  41. package/lib/chrome/frames.d.ts.map +1 -0
  42. package/lib/chrome/frames.js +120 -0
  43. package/lib/chrome/frames.js.map +1 -0
  44. package/lib/chrome/gaze.d.ts +3 -0
  45. package/lib/chrome/gaze.d.ts.map +1 -0
  46. package/lib/chrome/gaze.js +103 -0
  47. package/lib/chrome/gaze.js.map +1 -0
  48. package/lib/chrome/identity.d.ts +6 -0
  49. package/lib/chrome/identity.d.ts.map +1 -0
  50. package/lib/chrome/identity.js +61 -0
  51. package/lib/chrome/identity.js.map +1 -0
  52. package/lib/chrome/overlays.d.ts +3 -0
  53. package/lib/chrome/overlays.d.ts.map +1 -0
  54. package/lib/chrome/overlays.js +104 -0
  55. package/lib/chrome/overlays.js.map +1 -0
  56. package/lib/chrome/portal.d.ts +6 -0
  57. package/lib/chrome/portal.d.ts.map +1 -0
  58. package/lib/chrome/portal.js +169 -0
  59. package/lib/chrome/portal.js.map +1 -0
  60. package/lib/chrome/reactions.d.ts +3 -0
  61. package/lib/chrome/reactions.d.ts.map +1 -0
  62. package/lib/chrome/reactions.js +85 -0
  63. package/lib/chrome/reactions.js.map +1 -0
  64. package/lib/chrome/sidebar.d.ts +3 -0
  65. package/lib/chrome/sidebar.d.ts.map +1 -0
  66. package/lib/chrome/sidebar.js +305 -0
  67. package/lib/chrome/sidebar.js.map +1 -0
  68. package/lib/chrome/tokens.d.ts +3 -0
  69. package/lib/chrome/tokens.d.ts.map +1 -0
  70. package/lib/chrome/tokens.js +171 -0
  71. package/lib/chrome/tokens.js.map +1 -0
  72. package/lib/chrome/workspace.d.ts +3 -0
  73. package/lib/chrome/workspace.d.ts.map +1 -0
  74. package/lib/chrome/workspace.js +313 -0
  75. package/lib/chrome/workspace.js.map +1 -0
  76. package/lib/chrome.d.ts +10 -0
  77. package/lib/chrome.d.ts.map +1 -0
  78. package/lib/chrome.js +40 -0
  79. package/lib/chrome.js.map +1 -0
  80. package/lib/client.d.ts +17 -0
  81. package/lib/client.d.ts.map +1 -0
  82. package/lib/client.js +5505 -0
  83. package/lib/client.js.map +7 -0
  84. package/lib/gaze.d.ts +4 -0
  85. package/lib/gaze.d.ts.map +1 -0
  86. package/lib/gaze.js +217 -0
  87. package/lib/gaze.js.map +1 -0
  88. package/lib/generated-identity.d.ts +5 -0
  89. package/lib/generated-identity.d.ts.map +1 -0
  90. package/lib/generated-identity.js +5 -0
  91. package/lib/generated-identity.js.map +1 -0
  92. package/lib/generated-keyart.d.ts +19 -0
  93. package/lib/generated-keyart.d.ts.map +1 -0
  94. package/lib/generated-keyart.js +19 -0
  95. package/lib/generated-keyart.js.map +1 -0
  96. package/lib/generated-loading-assets.d.ts +4 -0
  97. package/lib/generated-loading-assets.d.ts.map +1 -0
  98. package/lib/generated-loading-assets.js +4 -0
  99. package/lib/generated-loading-assets.js.map +1 -0
  100. package/lib/generated-sidebar-assets.d.ts +4 -0
  101. package/lib/generated-sidebar-assets.d.ts.map +1 -0
  102. package/lib/generated-sidebar-assets.js +4 -0
  103. package/lib/generated-sidebar-assets.js.map +1 -0
  104. package/lib/heixiu-interactions.d.ts +10 -0
  105. package/lib/heixiu-interactions.d.ts.map +1 -0
  106. package/lib/heixiu-interactions.js +161 -0
  107. package/lib/heixiu-interactions.js.map +1 -0
  108. package/lib/index.d.ts +8 -0
  109. package/lib/index.d.ts.map +1 -0
  110. package/lib/index.js +11 -0
  111. package/lib/index.js.map +1 -0
  112. package/lib/loading-heixiu.d.ts +8 -0
  113. package/lib/loading-heixiu.d.ts.map +1 -0
  114. package/lib/loading-heixiu.js +287 -0
  115. package/lib/loading-heixiu.js.map +1 -0
  116. package/lib/plugin.d.ts +6 -0
  117. package/lib/plugin.d.ts.map +1 -0
  118. package/lib/plugin.js +38 -0
  119. package/lib/plugin.js.map +1 -0
  120. package/lib/portal.d.ts +40 -0
  121. package/lib/portal.d.ts.map +1 -0
  122. package/lib/portal.js +224 -0
  123. package/lib/portal.js.map +1 -0
  124. package/lib/reactions.d.ts +20 -0
  125. package/lib/reactions.d.ts.map +1 -0
  126. package/lib/reactions.js +380 -0
  127. package/lib/reactions.js.map +1 -0
  128. package/lib/scene/heixiu-feedback.d.ts +3 -0
  129. package/lib/scene/heixiu-feedback.d.ts.map +1 -0
  130. package/lib/scene/heixiu-feedback.js +81 -0
  131. package/lib/scene/heixiu-feedback.js.map +1 -0
  132. package/lib/scene/heixiu-interactions.d.ts +3 -0
  133. package/lib/scene/heixiu-interactions.d.ts.map +1 -0
  134. package/lib/scene/heixiu-interactions.js +92 -0
  135. package/lib/scene/heixiu-interactions.js.map +1 -0
  136. package/lib/scene/state-transitions.d.ts +3 -0
  137. package/lib/scene/state-transitions.d.ts.map +1 -0
  138. package/lib/scene/state-transitions.js +37 -0
  139. package/lib/scene/state-transitions.js.map +1 -0
  140. package/lib/scene.d.ts +14 -0
  141. package/lib/scene.d.ts.map +1 -0
  142. package/lib/scene.js +1024 -0
  143. package/lib/scene.js.map +1 -0
  144. package/lib/sidebar-glass.d.ts +16 -0
  145. package/lib/sidebar-glass.d.ts.map +1 -0
  146. package/lib/sidebar-glass.js +105 -0
  147. package/lib/sidebar-glass.js.map +1 -0
  148. package/lib/sidebar-heixiu-escape.d.ts +44 -0
  149. package/lib/sidebar-heixiu-escape.d.ts.map +1 -0
  150. package/lib/sidebar-heixiu-escape.js +340 -0
  151. package/lib/sidebar-heixiu-escape.js.map +1 -0
  152. package/lib/sidebar-heixiu-roaming.d.ts +27 -0
  153. package/lib/sidebar-heixiu-roaming.d.ts.map +1 -0
  154. package/lib/sidebar-heixiu-roaming.js +310 -0
  155. package/lib/sidebar-heixiu-roaming.js.map +1 -0
  156. package/lib/state.d.ts +9 -0
  157. package/lib/state.d.ts.map +1 -0
  158. package/lib/state.js +114 -0
  159. package/lib/state.js.map +1 -0
  160. package/lib/theme.d.ts +19 -0
  161. package/lib/theme.d.ts.map +1 -0
  162. package/lib/theme.js +188 -0
  163. package/lib/theme.js.map +1 -0
  164. package/package.json +74 -0
@@ -0,0 +1,310 @@
1
+ import { createXiaoheiSidebarEscapeController, XIAOHEI_SIDEBAR_ESCAPE_CSS, } from './sidebar-heixiu-escape.js';
2
+ export const XIAOHEI_SIDEBAR_ROAMING_STYLE_ID = 'dsh-theme-xiaohei/sidebar-heixiu-roaming-style';
3
+ const SIDEBAR_HEIXIU_SELECTOR = '.xiaohei-scene__heixiu--sidebar';
4
+ const SIDEBAR_SELECTOR = "[data-slot='sidebar']";
5
+ const INTERACTIVE_SELECTOR = [
6
+ 'button',
7
+ 'a[href]',
8
+ "[role='treeitem']",
9
+ "[role='menuitem']",
10
+ "[tabindex]:not([tabindex='-1'])",
11
+ ].join(',');
12
+ const EDGE_PADDING_PX = 10;
13
+ const TOP_RESERVE_PX = 64;
14
+ const BOTTOM_RESERVE_PX = 62;
15
+ const CONTROL_PADDING_PX = 7;
16
+ const DESTINATION_CANDIDATES = 28;
17
+ const MIN_TRAVEL_PX = 42;
18
+ const INITIAL_PAUSE_MS = 1800;
19
+ const MIN_PAUSE_MS = 2600;
20
+ const PAUSE_RANGE_MS = 3800;
21
+ export const XIAOHEI_SIDEBAR_ROAMING_CSS = `
22
+ .xiaohei-scene__heixiu--sidebar[data-xiaohei-sidebar-roaming='true'] {
23
+ left: 0;
24
+ right: auto;
25
+ top: 0;
26
+ animation: none;
27
+ transform: translate3d(
28
+ var(--xiaohei-sidebar-heixiu-x, 7.15rem),
29
+ var(--xiaohei-sidebar-heixiu-y, 8.05rem),
30
+ 0
31
+ );
32
+ transition: transform var(--xiaohei-sidebar-heixiu-duration, 0ms) cubic-bezier(0.22, 0.72, 0.24, 1);
33
+ pointer-events: none;
34
+ will-change: transform;
35
+ }
36
+
37
+ .xiaohei-scene__heixiu--sidebar[data-xiaohei-sidebar-roaming-paused='true'] {
38
+ transition-duration: 0ms;
39
+ will-change: auto;
40
+ }
41
+
42
+ @media (prefers-reduced-motion: reduce), (hover: none) and (pointer: coarse) {
43
+ .xiaohei-scene__heixiu--sidebar[data-xiaohei-sidebar-roaming='true'] {
44
+ transform: translate3d(7.15rem, 8.05rem, 0);
45
+ transition: none;
46
+ will-change: auto;
47
+ }
48
+ }
49
+ `;
50
+ /** Pick a low-obstruction destination while retaining organic variation. */
51
+ export function chooseXiaoheiSidebarDestination(space, current, random = Math.random) {
52
+ const minX = EDGE_PADDING_PX;
53
+ const maxX = Math.max(minX, space.width - space.creatureWidth - EDGE_PADDING_PX);
54
+ const minY = Math.min(TOP_RESERVE_PX, Math.max(EDGE_PADDING_PX, space.height - space.creatureHeight));
55
+ const maxY = Math.max(minY, space.height - space.creatureHeight - BOTTOM_RESERVE_PX);
56
+ const candidates = [];
57
+ for (let index = 0; index < DESTINATION_CANDIDATES; index += 1) {
58
+ const point = {
59
+ x: minX + random() * (maxX - minX),
60
+ y: minY + random() * (maxY - minY),
61
+ };
62
+ const travel = current === undefined ? Number.POSITIVE_INFINITY : Math.hypot(point.x - current.x, point.y - current.y);
63
+ if (travel < MIN_TRAVEL_PX && index < DESTINATION_CANDIDATES - 1)
64
+ continue;
65
+ candidates.push({ point, obstruction: destinationObstruction(point, space) });
66
+ }
67
+ candidates.sort((left, right) => left.obstruction - right.obstruction);
68
+ const bestScore = candidates[0]?.obstruction;
69
+ const best = candidates.filter(candidate => candidate.obstruction === bestScore);
70
+ return best[Math.min(best.length - 1, Math.floor(random() * best.length))]?.point ?? { x: minX, y: minY };
71
+ }
72
+ /** Longer trips get more time so the companion never darts across controls. */
73
+ export function resolveXiaoheiSidebarRoamDuration(from, to) {
74
+ const distance = Math.hypot(to.x - from.x, to.y - from.y);
75
+ return Math.round(Math.min(5200, Math.max(2400, 2100 + distance * 8.5)));
76
+ }
77
+ /** Let the sidebar companion wander without owning scene construction. */
78
+ export function installXiaoheiSidebarHeixiuRoaming(doc = typeof document === 'undefined' ? undefined : document) {
79
+ if (doc?.head === undefined || doc.body === undefined || doc.defaultView === null)
80
+ return () => { };
81
+ const win = doc.defaultView;
82
+ const reducedMotion = win.matchMedia('(prefers-reduced-motion: reduce)');
83
+ const coarsePointer = win.matchMedia('(hover: none) and (pointer: coarse)');
84
+ let disposed = false;
85
+ let creature;
86
+ let host;
87
+ let current;
88
+ let roamTimer = 0;
89
+ let attachQueued = false;
90
+ let observedHost;
91
+ doc.getElementById(XIAOHEI_SIDEBAR_ROAMING_STYLE_ID)?.remove();
92
+ const style = doc.createElement('style');
93
+ style.id = XIAOHEI_SIDEBAR_ROAMING_STYLE_ID;
94
+ style.textContent = `${XIAOHEI_SIDEBAR_ROAMING_CSS}\n${XIAOHEI_SIDEBAR_ESCAPE_CSS}`;
95
+ doc.head.append(style);
96
+ const behaviorDisabled = () => (reducedMotion.matches
97
+ || coarsePointer.matches
98
+ || doc.visibilityState === 'hidden'
99
+ || host === undefined
100
+ || host.className.includes('_collapsed')
101
+ || host.getBoundingClientRect().width < 80);
102
+ const clearTimer = () => {
103
+ win.clearTimeout(roamTimer);
104
+ roamTimer = 0;
105
+ };
106
+ const pause = () => {
107
+ clearTimer();
108
+ creature?.setAttribute('data-xiaohei-sidebar-roaming-paused', 'true');
109
+ };
110
+ const measureSpace = () => {
111
+ if (host === undefined || creature === undefined)
112
+ return undefined;
113
+ const hostRect = host.getBoundingClientRect();
114
+ const creatureRect = creature.getBoundingClientRect();
115
+ if (hostRect.width <= 0 || hostRect.height <= 0)
116
+ return undefined;
117
+ const controls = Array.from(host.querySelectorAll(INTERACTIVE_SELECTOR))
118
+ .filter(element => !creature?.contains(element))
119
+ .map(element => element.getBoundingClientRect())
120
+ .filter(rect => rect.width > 0 && rect.height > 0)
121
+ .map(rect => ({
122
+ left: rect.left - hostRect.left - CONTROL_PADDING_PX,
123
+ top: rect.top - hostRect.top - CONTROL_PADDING_PX,
124
+ right: rect.right - hostRect.left + CONTROL_PADDING_PX,
125
+ bottom: rect.bottom - hostRect.top + CONTROL_PADDING_PX,
126
+ }));
127
+ return {
128
+ width: hostRect.width,
129
+ height: hostRect.height,
130
+ creatureWidth: creatureRect.width || 40,
131
+ creatureHeight: creatureRect.height || 40,
132
+ controls,
133
+ };
134
+ };
135
+ const freezeAt = (position) => {
136
+ clearTimer();
137
+ current = position;
138
+ creature?.setAttribute('data-xiaohei-sidebar-roaming-paused', 'true');
139
+ creature?.style.setProperty('--xiaohei-sidebar-heixiu-duration', '0ms');
140
+ creature?.style.setProperty('--xiaohei-sidebar-heixiu-x', `${position.x.toFixed(1)}px`);
141
+ creature?.style.setProperty('--xiaohei-sidebar-heixiu-y', `${position.y.toFixed(1)}px`);
142
+ };
143
+ const teleportTo = (destination) => {
144
+ current = destination;
145
+ creature?.style.setProperty('--xiaohei-sidebar-heixiu-duration', '0ms');
146
+ creature?.style.setProperty('--xiaohei-sidebar-heixiu-x', `${destination.x.toFixed(1)}px`);
147
+ creature?.style.setProperty('--xiaohei-sidebar-heixiu-y', `${destination.y.toFixed(1)}px`);
148
+ };
149
+ const escapeController = createXiaoheiSidebarEscapeController({
150
+ doc,
151
+ isDisabled: behaviorDisabled,
152
+ resolveTarget: () => {
153
+ const space = measureSpace();
154
+ return creature === undefined || host === undefined || space === undefined
155
+ ? undefined
156
+ : { creature, host, space };
157
+ },
158
+ onFreeze: freezeAt,
159
+ onTeleport: teleportTo,
160
+ onComplete: () => {
161
+ if (behaviorDisabled())
162
+ pause();
163
+ else {
164
+ creature?.removeAttribute('data-xiaohei-sidebar-roaming-paused');
165
+ scheduleRoam(1400);
166
+ }
167
+ },
168
+ });
169
+ const scheduleRoam = (delay = MIN_PAUSE_MS + Math.round(Math.random() * PAUSE_RANGE_MS)) => {
170
+ clearTimer();
171
+ if (disposed || behaviorDisabled()) {
172
+ pause();
173
+ return;
174
+ }
175
+ creature?.removeAttribute('data-xiaohei-sidebar-roaming-paused');
176
+ roamTimer = win.setTimeout(roam, delay);
177
+ };
178
+ const roam = () => {
179
+ roamTimer = 0;
180
+ if (disposed || behaviorDisabled() || creature === undefined) {
181
+ pause();
182
+ return;
183
+ }
184
+ const space = measureSpace();
185
+ if (space === undefined) {
186
+ scheduleRoam();
187
+ return;
188
+ }
189
+ const destination = chooseXiaoheiSidebarDestination(space, current);
190
+ const start = current ?? destination;
191
+ const duration = current === undefined ? 0 : resolveXiaoheiSidebarRoamDuration(start, destination);
192
+ creature.style.setProperty('--xiaohei-sidebar-heixiu-duration', `${duration}ms`);
193
+ creature.style.setProperty('--xiaohei-sidebar-heixiu-x', `${destination.x.toFixed(1)}px`);
194
+ creature.style.setProperty('--xiaohei-sidebar-heixiu-y', `${destination.y.toFixed(1)}px`);
195
+ current = destination;
196
+ scheduleRoam(duration + MIN_PAUSE_MS + Math.round(Math.random() * PAUSE_RANGE_MS));
197
+ };
198
+ const bind = () => {
199
+ attachQueued = false;
200
+ if (disposed)
201
+ return;
202
+ const nextCreature = doc.querySelector(SIDEBAR_HEIXIU_SELECTOR) ?? undefined;
203
+ const nextHost = doc.querySelector(SIDEBAR_SELECTOR)?.firstElementChild;
204
+ const nextHostElement = nextHost instanceof win.HTMLElement ? nextHost : undefined;
205
+ if (nextCreature === creature && nextHostElement === host)
206
+ return;
207
+ escapeController.cancel();
208
+ if (creature !== undefined) {
209
+ creature.removeAttribute('data-xiaohei-sidebar-roaming');
210
+ creature.removeAttribute('data-xiaohei-sidebar-roaming-paused');
211
+ creature.style.removeProperty('--xiaohei-sidebar-heixiu-duration');
212
+ creature.style.removeProperty('--xiaohei-sidebar-heixiu-x');
213
+ creature.style.removeProperty('--xiaohei-sidebar-heixiu-y');
214
+ }
215
+ clearTimer();
216
+ creature = nextCreature;
217
+ host = nextHostElement;
218
+ current = undefined;
219
+ observeHostState();
220
+ if (creature === undefined || host === undefined)
221
+ return;
222
+ const hostRect = host.getBoundingClientRect();
223
+ const creatureRect = creature.getBoundingClientRect();
224
+ current = {
225
+ x: creatureRect.left - hostRect.left,
226
+ y: creatureRect.top - hostRect.top,
227
+ };
228
+ creature.style.setProperty('--xiaohei-sidebar-heixiu-duration', '0ms');
229
+ creature.style.setProperty('--xiaohei-sidebar-heixiu-x', `${current.x.toFixed(1)}px`);
230
+ creature.style.setProperty('--xiaohei-sidebar-heixiu-y', `${current.y.toFixed(1)}px`);
231
+ creature.setAttribute('data-xiaohei-sidebar-roaming', 'true');
232
+ scheduleRoam(INITIAL_PAUSE_MS);
233
+ };
234
+ const queueBind = () => {
235
+ if (attachQueued || disposed)
236
+ return;
237
+ attachQueued = true;
238
+ queueMicrotask(bind);
239
+ };
240
+ const resumeOrPause = () => {
241
+ if (escapeController.isRunning()) {
242
+ if (behaviorDisabled()) {
243
+ escapeController.cancel();
244
+ pause();
245
+ }
246
+ return;
247
+ }
248
+ if (behaviorDisabled())
249
+ pause();
250
+ else
251
+ scheduleRoam(600);
252
+ };
253
+ const hostStateObserver = new win.MutationObserver(resumeOrPause);
254
+ const hostResizeObserver = typeof win.ResizeObserver === 'function'
255
+ ? new win.ResizeObserver(resumeOrPause)
256
+ : undefined;
257
+ const observeHostState = () => {
258
+ if (host === observedHost)
259
+ return;
260
+ hostStateObserver.disconnect();
261
+ hostResizeObserver?.disconnect();
262
+ observedHost = host;
263
+ if (host === undefined)
264
+ return;
265
+ hostStateObserver.observe(host, { attributes: true, attributeFilter: ['class'] });
266
+ hostResizeObserver?.observe(host);
267
+ };
268
+ bind();
269
+ const observer = new win.MutationObserver(queueBind);
270
+ observer.observe(doc.body, { childList: true, subtree: true });
271
+ doc.addEventListener('visibilitychange', resumeOrPause);
272
+ win.addEventListener('resize', resumeOrPause, { passive: true });
273
+ reducedMotion.addEventListener('change', resumeOrPause);
274
+ coarsePointer.addEventListener('change', resumeOrPause);
275
+ return () => {
276
+ disposed = true;
277
+ escapeController.dispose();
278
+ clearTimer();
279
+ observer.disconnect();
280
+ hostStateObserver.disconnect();
281
+ hostResizeObserver?.disconnect();
282
+ doc.removeEventListener('visibilitychange', resumeOrPause);
283
+ win.removeEventListener('resize', resumeOrPause);
284
+ reducedMotion.removeEventListener('change', resumeOrPause);
285
+ coarsePointer.removeEventListener('change', resumeOrPause);
286
+ if (creature !== undefined) {
287
+ creature.removeAttribute('data-xiaohei-sidebar-roaming');
288
+ creature.removeAttribute('data-xiaohei-sidebar-roaming-paused');
289
+ creature.style.removeProperty('--xiaohei-sidebar-heixiu-duration');
290
+ creature.style.removeProperty('--xiaohei-sidebar-heixiu-x');
291
+ creature.style.removeProperty('--xiaohei-sidebar-heixiu-y');
292
+ }
293
+ style.remove();
294
+ };
295
+ }
296
+ function destinationObstruction(point, space) {
297
+ const creature = {
298
+ left: point.x,
299
+ top: point.y,
300
+ right: point.x + space.creatureWidth,
301
+ bottom: point.y + space.creatureHeight,
302
+ };
303
+ return space.controls.reduce((total, control) => total + overlapArea(creature, control), 0);
304
+ }
305
+ function overlapArea(left, right) {
306
+ const width = Math.max(0, Math.min(left.right, right.right) - Math.max(left.left, right.left));
307
+ const height = Math.max(0, Math.min(left.bottom, right.bottom) - Math.max(left.top, right.top));
308
+ return width * height;
309
+ }
310
+ //# sourceMappingURL=sidebar-heixiu-roaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar-heixiu-roaming.js","sourceRoot":"","sources":["../src/sidebar-heixiu-roaming.ts"],"names":[],"mappings":"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"}
package/lib/state.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import type { ConversationSnapshot, ISessions, SessionSummary } from '@deepseek-ai/dsh-client-runtime/client';
2
+ export declare const XIAOHEI_STATE_ATTRIBUTE = "data-xiaohei-state";
3
+ export declare const XIAOHEI_COMPLETE_DURATION_MS = 1600;
4
+ export type XiaoheiState = 'idle' | 'thinking' | 'streaming' | 'tool' | 'waiting' | 'complete' | 'error';
5
+ /** Resolve one official DSH snapshot using the theme's visible-state priority. */
6
+ export declare function resolveXiaoheiState(snapshot: ConversationSnapshot | undefined, summary: SessionSummary | undefined): Exclude<XiaoheiState, 'complete'>;
7
+ /** Mirror the selected Session's official detailed state onto the theme root. */
8
+ export declare function bindXiaoheiSessionState(sessions: Pick<ISessions, 'list' | 'binding'>, doc?: Document | undefined, completeDurationMs?: number): () => void;
9
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,SAAS,EACT,cAAc,EACf,MAAM,wCAAwC,CAAA;AAE/C,eAAO,MAAM,uBAAuB,uBAAuB,CAAA;AAC3D,eAAO,MAAM,4BAA4B,OAAO,CAAA;AAEhD,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,UAAU,GACV,WAAW,GACX,MAAM,GACN,SAAS,GACT,UAAU,GACV,OAAO,CAAA;AAEX,kFAAkF;AAClF,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,oBAAoB,GAAG,SAAS,EAC1C,OAAO,EAAE,cAAc,GAAG,SAAS,GAClC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAmBnC;AAED,iFAAiF;AACjF,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,EAC7C,GAAG,GAAE,QAAQ,GAAG,SAAkE,EAClF,kBAAkB,SAA+B,GAChD,MAAM,IAAI,CAwFZ"}
package/lib/state.js ADDED
@@ -0,0 +1,114 @@
1
+ export const XIAOHEI_STATE_ATTRIBUTE = 'data-xiaohei-state';
2
+ export const XIAOHEI_COMPLETE_DURATION_MS = 1600;
3
+ /** Resolve one official DSH snapshot using the theme's visible-state priority. */
4
+ export function resolveXiaoheiState(snapshot, summary) {
5
+ if (snapshot !== undefined) {
6
+ if (snapshot.removed
7
+ || snapshot.openState === 'error'
8
+ || snapshot.openError !== null
9
+ || snapshot.promptError !== null
10
+ || snapshot.lastAgentError !== null)
11
+ return 'error';
12
+ if (snapshot.pending.length > 0 || summary?.pendingInteraction !== undefined)
13
+ return 'waiting';
14
+ if (snapshot.runningCalls.length > 0)
15
+ return 'tool';
16
+ if (snapshot.running && snapshot.partial !== null)
17
+ return 'streaming';
18
+ if (snapshot.running)
19
+ return 'thinking';
20
+ return 'idle';
21
+ }
22
+ if (summary?.pendingInteraction !== undefined)
23
+ return 'waiting';
24
+ return summary?.running === true ? 'thinking' : 'idle';
25
+ }
26
+ /** Mirror the selected Session's official detailed state onto the theme root. */
27
+ export function bindXiaoheiSessionState(sessions, doc = typeof document === 'undefined' ? undefined : document, completeDurationMs = XIAOHEI_COMPLETE_DURATION_MS) {
28
+ if (doc === undefined)
29
+ return () => { };
30
+ const root = doc.documentElement;
31
+ const timerWindow = doc.defaultView ?? undefined;
32
+ let currentId;
33
+ let currentSession;
34
+ let unsubscribeSession = () => { };
35
+ let previousRunning;
36
+ let completeTimer;
37
+ let disposed = false;
38
+ const clearComplete = () => {
39
+ if (completeTimer === undefined)
40
+ return;
41
+ if (timerWindow !== undefined)
42
+ timerWindow.clearTimeout(completeTimer);
43
+ else
44
+ clearTimeout(completeTimer);
45
+ completeTimer = undefined;
46
+ };
47
+ const setState = (state) => {
48
+ root.setAttribute(XIAOHEI_STATE_ATTRIBUTE, state);
49
+ };
50
+ const updateCurrent = () => {
51
+ if (disposed || currentId === undefined)
52
+ return;
53
+ const listSnapshot = sessions.list.getSnapshot();
54
+ const summary = listSnapshot.byId[currentId];
55
+ const snapshot = currentSession?.getSnapshot();
56
+ const resolved = resolveXiaoheiState(snapshot, summary);
57
+ const running = snapshot?.running ?? summary?.running ?? false;
58
+ const completed = previousRunning === true && running === false;
59
+ previousRunning = running;
60
+ if (resolved !== 'idle') {
61
+ clearComplete();
62
+ setState(resolved);
63
+ return;
64
+ }
65
+ if (completed) {
66
+ clearComplete();
67
+ setState('complete');
68
+ const finish = () => {
69
+ completeTimer = undefined;
70
+ if (!disposed)
71
+ setState('idle');
72
+ };
73
+ completeTimer = timerWindow !== undefined
74
+ ? timerWindow.setTimeout(finish, completeDurationMs)
75
+ : setTimeout(finish, completeDurationMs);
76
+ return;
77
+ }
78
+ if (completeTimer === undefined)
79
+ setState('idle');
80
+ };
81
+ const updateList = () => {
82
+ if (disposed)
83
+ return;
84
+ const listSnapshot = sessions.list.getSnapshot();
85
+ const nextId = listSnapshot.current;
86
+ const nextSession = nextId === undefined ? undefined : sessions.binding(nextId)?.session;
87
+ const changed = nextId !== currentId || nextSession !== currentSession;
88
+ if (changed) {
89
+ unsubscribeSession();
90
+ unsubscribeSession = () => { };
91
+ clearComplete();
92
+ currentId = nextId;
93
+ currentSession = nextSession;
94
+ previousRunning = undefined;
95
+ if (currentSession !== undefined)
96
+ unsubscribeSession = currentSession.subscribe(updateCurrent);
97
+ }
98
+ if (currentId === undefined) {
99
+ setState('idle');
100
+ return;
101
+ }
102
+ updateCurrent();
103
+ };
104
+ const unsubscribeList = sessions.list.subscribe(updateList);
105
+ updateList();
106
+ return () => {
107
+ disposed = true;
108
+ clearComplete();
109
+ unsubscribeSession();
110
+ unsubscribeList();
111
+ root.removeAttribute(XIAOHEI_STATE_ATTRIBUTE);
112
+ };
113
+ }
114
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
package/lib/theme.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import type { ThemeTokenOverrides, ThemeTokens } from '@deepseek-ai/dsh-client-ui-theme/client';
2
+ /** Stable ids retained for consumers that inspect the two Xiaohei palettes. */
3
+ export declare const XIAOHEI_DAWN_THEME_ID = "xiaohei-dawn";
4
+ export declare const XIAOHEI_NIGHT_THEME_ID = "xiaohei-night";
5
+ /** Inspectable light theme definition for Xiaohei Dawn. */
6
+ export declare const XIAOHEI_DAWN_THEME: {
7
+ id: string;
8
+ colorScheme: "light";
9
+ tokens: ThemeTokens;
10
+ };
11
+ /** Inspectable dark theme definition for Xiaohei Night. */
12
+ export declare const XIAOHEI_NIGHT_THEME: {
13
+ id: string;
14
+ colorScheme: "dark";
15
+ tokens: ThemeTokens;
16
+ };
17
+ /** DSH's native Light / Dark / System preference stays authoritative. */
18
+ export declare const XIAOHEI_THEME_TOKEN_OVERRIDES: ThemeTokenOverrides;
19
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mBAAmB,EACnB,WAAW,EACZ,MAAM,yCAAyC,CAAA;AAEhD,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,iBAAiB,CAAA;AACnD,eAAO,MAAM,sBAAsB,kBAAkB,CAAA;AAwLrD,2DAA2D;AAC3D,eAAO,MAAM,kBAAkB;;;;CAIJ,CAAA;AAE3B,2DAA2D;AAC3D,eAAO,MAAM,mBAAmB;;;;CAIL,CAAA;AAE3B,yEAAyE;AACzE,eAAO,MAAM,6BAA6B,EAQrC,mBAAmB,CAAA"}