dsh-theme-mineradio 2.3.4 → 2.3.6

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 (33) hide show
  1. package/README.md +91 -89
  2. package/README.zh.md +91 -89
  3. package/lib/client.js +56 -8
  4. package/lib/types/client/MineradioAppearanceRow.d.ts +72 -72
  5. package/lib/types/client/MineradioControls.d.ts +38 -38
  6. package/lib/types/client/MineradioPluginCard.d.ts +15 -15
  7. package/lib/types/client/audio-reactivity.d.ts +33 -33
  8. package/lib/types/client/cinema-drift.d.ts +20 -20
  9. package/lib/types/client/color-extract.d.ts +14 -14
  10. package/lib/types/client/critters.d.ts +21 -21
  11. package/lib/types/client/fluid-interactions.d.ts +19 -19
  12. package/lib/types/client/fluid-shader.d.ts +57 -57
  13. package/lib/types/client/fluid-tones.d.ts +30 -30
  14. package/lib/types/client/glass-dispersion.d.ts +29 -29
  15. package/lib/types/client/greetings.d.ts +24 -24
  16. package/lib/types/client/host-store.d.ts +24 -0
  17. package/lib/types/client/index.d.ts +21 -21
  18. package/lib/types/client/locales.d.ts +140 -140
  19. package/lib/types/client/mesh.d.ts +18 -18
  20. package/lib/types/client/seam-stamper.d.ts +21 -21
  21. package/lib/types/client/settings-store.d.ts +2 -2
  22. package/lib/types/client/specular-parallax.d.ts +5 -5
  23. package/lib/types/client/spot-core.d.ts +52 -52
  24. package/lib/types/client/spotlight.d.ts +11 -11
  25. package/lib/types/client/star-river.d.ts +43 -43
  26. package/lib/types/client/station-dial.d.ts +24 -24
  27. package/lib/types/client/theme-layer.d.ts +287 -287
  28. package/lib/types/client/wallpaper-store.d.ts +30 -30
  29. package/lib/types/client/whale.d.ts +25 -25
  30. package/lib/types/client/wordmark-badge.d.ts +25 -25
  31. package/lib/types/index.d.ts +9 -9
  32. package/lib/types/invariant.d.ts +15 -15
  33. package/package.json +13 -3
@@ -1,140 +1,140 @@
1
- /** `settings.mineradio` namespace dictionaries (the settings-row copy). */
2
- /** Dictionary namespace owned by this plugin. */
3
- export declare const NS = "settings.mineradio";
4
- /** Simplified Chinese dictionary (the key-set source of truth). */
5
- export declare const zh: {
6
- 'mineradio.title': string;
7
- 'mineradio.description': string;
8
- 'mineradio.enable': string;
9
- 'mineradio.disable': string;
10
- 'mineradio.mode': string;
11
- 'mineradio.modeMica': string;
12
- 'mineradio.modeCompat': string;
13
- 'mineradio.textColor': string;
14
- 'mineradio.textColorChampagne': string;
15
- 'mineradio.textColorNeutral': string;
16
- 'mineradio.textColorMint': string;
17
- 'mineradio.textColorRose': string;
18
- 'mineradio.scene': string;
19
- 'mineradio.sceneStudio': string;
20
- 'mineradio.sceneDeepsea': string;
21
- 'mineradio.sceneMidnight': string;
22
- 'mineradio.sceneMist': string;
23
- 'mineradio.sceneRainbow': string;
24
- 'mineradio.perf': string;
25
- 'mineradio.perfPerformance': string;
26
- 'mineradio.perfBalanced': string;
27
- 'mineradio.perfVivid': string;
28
- 'mineradio.foldLooks': string;
29
- 'mineradio.foldMaterial': string;
30
- 'mineradio.foldBackdrop': string;
31
- 'mineradio.foldMotion': string;
32
- 'mineradio.materialGroup': string;
33
- 'mineradio.decorAmbient': string;
34
- 'mineradio.decorHover': string;
35
- 'mineradio.whale': string;
36
- 'mineradio.critters': string;
37
- 'mineradio.mesh': string;
38
- 'mineradio.starDensity': string;
39
- 'mineradio.spotlight': string;
40
- 'mineradio.press': string;
41
- 'mineradio.audioReact': string;
42
- 'mineradio.blur': string;
43
- 'mineradio.frost': string;
44
- 'mineradio.fluidHue': string;
45
- 'mineradio.fluidDepth': string;
46
- 'mineradio.dispersionHue': string;
47
- 'mineradio.dispersionRefract': string;
48
- 'mineradio.bgBrightness': string;
49
- 'mineradio.bgBrightnessHintDark': string;
50
- 'mineradio.bgBrightnessHintLight': string;
51
- 'mineradio.background': string;
52
- 'mineradio.backgroundFluid': string;
53
- 'mineradio.backgroundWallpaper': string;
54
- 'mineradio.wallpaper': string;
55
- 'mineradio.autoTint': string;
56
- 'mineradio.wallpaperHint': string;
57
- 'mineradio.chooseImage': string;
58
- 'mineradio.chooseVideo': string;
59
- 'mineradio.deleteWallpaper': string;
60
- 'mineradio.wallpaperBlur': string;
61
- 'mineradio.wallpaperFrost': string;
62
- 'mineradio.wallpaperMask': string;
63
- 'mineradio.wallpaperMaskBlur': string;
64
- 'mineradio.wallpaperMaskOpacity': string;
65
- 'mineradio.videoBlur': string;
66
- 'mineradio.videoBrightness': string;
67
- 'mineradio.videoHint': string;
68
- };
69
- export type MineradioLocaleKey = keyof typeof zh;
70
- declare module '@deepseek-ai/dsh-client-ui-slots' {
71
- interface LocaleNamespaceMap {
72
- /** The Mineradio settings row's copy. */
73
- 'settings.mineradio': MineradioLocaleKey;
74
- }
75
- }
76
- /** English dictionary. */
77
- export declare const en: {
78
- 'mineradio.title': string;
79
- 'mineradio.description': string;
80
- 'mineradio.enable': string;
81
- 'mineradio.disable': string;
82
- 'mineradio.mode': string;
83
- 'mineradio.modeMica': string;
84
- 'mineradio.modeCompat': string;
85
- 'mineradio.textColor': string;
86
- 'mineradio.textColorChampagne': string;
87
- 'mineradio.textColorNeutral': string;
88
- 'mineradio.textColorMint': string;
89
- 'mineradio.textColorRose': string;
90
- 'mineradio.scene': string;
91
- 'mineradio.sceneStudio': string;
92
- 'mineradio.sceneDeepsea': string;
93
- 'mineradio.sceneMidnight': string;
94
- 'mineradio.sceneMist': string;
95
- 'mineradio.sceneRainbow': string;
96
- 'mineradio.perf': string;
97
- 'mineradio.perfPerformance': string;
98
- 'mineradio.perfBalanced': string;
99
- 'mineradio.perfVivid': string;
100
- 'mineradio.foldLooks': string;
101
- 'mineradio.foldMaterial': string;
102
- 'mineradio.foldBackdrop': string;
103
- 'mineradio.foldMotion': string;
104
- 'mineradio.materialGroup': string;
105
- 'mineradio.decorAmbient': string;
106
- 'mineradio.decorHover': string;
107
- 'mineradio.whale': string;
108
- 'mineradio.critters': string;
109
- 'mineradio.mesh': string;
110
- 'mineradio.starDensity': string;
111
- 'mineradio.spotlight': string;
112
- 'mineradio.press': string;
113
- 'mineradio.audioReact': string;
114
- 'mineradio.blur': string;
115
- 'mineradio.frost': string;
116
- 'mineradio.fluidHue': string;
117
- 'mineradio.fluidDepth': string;
118
- 'mineradio.dispersionHue': string;
119
- 'mineradio.dispersionRefract': string;
120
- 'mineradio.bgBrightness': string;
121
- 'mineradio.bgBrightnessHintDark': string;
122
- 'mineradio.bgBrightnessHintLight': string;
123
- 'mineradio.background': string;
124
- 'mineradio.backgroundFluid': string;
125
- 'mineradio.backgroundWallpaper': string;
126
- 'mineradio.wallpaper': string;
127
- 'mineradio.autoTint': string;
128
- 'mineradio.wallpaperHint': string;
129
- 'mineradio.chooseImage': string;
130
- 'mineradio.chooseVideo': string;
131
- 'mineradio.deleteWallpaper': string;
132
- 'mineradio.wallpaperBlur': string;
133
- 'mineradio.wallpaperFrost': string;
134
- 'mineradio.wallpaperMask': string;
135
- 'mineradio.wallpaperMaskBlur': string;
136
- 'mineradio.wallpaperMaskOpacity': string;
137
- 'mineradio.videoBlur': string;
138
- 'mineradio.videoBrightness': string;
139
- 'mineradio.videoHint': string;
140
- };
1
+ /** `settings.mineradio` namespace dictionaries (the settings-row copy). */
2
+ /** Dictionary namespace owned by this plugin. */
3
+ export declare const NS = "settings.mineradio";
4
+ /** Simplified Chinese dictionary (the key-set source of truth). */
5
+ export declare const zh: {
6
+ 'mineradio.title': string;
7
+ 'mineradio.description': string;
8
+ 'mineradio.enable': string;
9
+ 'mineradio.disable': string;
10
+ 'mineradio.mode': string;
11
+ 'mineradio.modeMica': string;
12
+ 'mineradio.modeCompat': string;
13
+ 'mineradio.textColor': string;
14
+ 'mineradio.textColorChampagne': string;
15
+ 'mineradio.textColorNeutral': string;
16
+ 'mineradio.textColorMint': string;
17
+ 'mineradio.textColorRose': string;
18
+ 'mineradio.scene': string;
19
+ 'mineradio.sceneStudio': string;
20
+ 'mineradio.sceneDeepsea': string;
21
+ 'mineradio.sceneMidnight': string;
22
+ 'mineradio.sceneMist': string;
23
+ 'mineradio.sceneRainbow': string;
24
+ 'mineradio.perf': string;
25
+ 'mineradio.perfPerformance': string;
26
+ 'mineradio.perfBalanced': string;
27
+ 'mineradio.perfVivid': string;
28
+ 'mineradio.foldLooks': string;
29
+ 'mineradio.foldMaterial': string;
30
+ 'mineradio.foldBackdrop': string;
31
+ 'mineradio.foldMotion': string;
32
+ 'mineradio.materialGroup': string;
33
+ 'mineradio.decorAmbient': string;
34
+ 'mineradio.decorHover': string;
35
+ 'mineradio.whale': string;
36
+ 'mineradio.critters': string;
37
+ 'mineradio.mesh': string;
38
+ 'mineradio.starDensity': string;
39
+ 'mineradio.spotlight': string;
40
+ 'mineradio.press': string;
41
+ 'mineradio.audioReact': string;
42
+ 'mineradio.blur': string;
43
+ 'mineradio.frost': string;
44
+ 'mineradio.fluidHue': string;
45
+ 'mineradio.fluidDepth': string;
46
+ 'mineradio.dispersionHue': string;
47
+ 'mineradio.dispersionRefract': string;
48
+ 'mineradio.bgBrightness': string;
49
+ 'mineradio.bgBrightnessHintDark': string;
50
+ 'mineradio.bgBrightnessHintLight': string;
51
+ 'mineradio.background': string;
52
+ 'mineradio.backgroundFluid': string;
53
+ 'mineradio.backgroundWallpaper': string;
54
+ 'mineradio.wallpaper': string;
55
+ 'mineradio.autoTint': string;
56
+ 'mineradio.wallpaperHint': string;
57
+ 'mineradio.chooseImage': string;
58
+ 'mineradio.chooseVideo': string;
59
+ 'mineradio.deleteWallpaper': string;
60
+ 'mineradio.wallpaperBlur': string;
61
+ 'mineradio.wallpaperFrost': string;
62
+ 'mineradio.wallpaperMask': string;
63
+ 'mineradio.wallpaperMaskBlur': string;
64
+ 'mineradio.wallpaperMaskOpacity': string;
65
+ 'mineradio.videoBlur': string;
66
+ 'mineradio.videoBrightness': string;
67
+ 'mineradio.videoHint': string;
68
+ };
69
+ export type MineradioLocaleKey = keyof typeof zh;
70
+ declare module '@deepseek-ai/dsh-client-ui-slots' {
71
+ interface LocaleNamespaceMap {
72
+ /** The Mineradio settings row's copy. */
73
+ 'settings.mineradio': MineradioLocaleKey;
74
+ }
75
+ }
76
+ /** English dictionary. */
77
+ export declare const en: {
78
+ 'mineradio.title': string;
79
+ 'mineradio.description': string;
80
+ 'mineradio.enable': string;
81
+ 'mineradio.disable': string;
82
+ 'mineradio.mode': string;
83
+ 'mineradio.modeMica': string;
84
+ 'mineradio.modeCompat': string;
85
+ 'mineradio.textColor': string;
86
+ 'mineradio.textColorChampagne': string;
87
+ 'mineradio.textColorNeutral': string;
88
+ 'mineradio.textColorMint': string;
89
+ 'mineradio.textColorRose': string;
90
+ 'mineradio.scene': string;
91
+ 'mineradio.sceneStudio': string;
92
+ 'mineradio.sceneDeepsea': string;
93
+ 'mineradio.sceneMidnight': string;
94
+ 'mineradio.sceneMist': string;
95
+ 'mineradio.sceneRainbow': string;
96
+ 'mineradio.perf': string;
97
+ 'mineradio.perfPerformance': string;
98
+ 'mineradio.perfBalanced': string;
99
+ 'mineradio.perfVivid': string;
100
+ 'mineradio.foldLooks': string;
101
+ 'mineradio.foldMaterial': string;
102
+ 'mineradio.foldBackdrop': string;
103
+ 'mineradio.foldMotion': string;
104
+ 'mineradio.materialGroup': string;
105
+ 'mineradio.decorAmbient': string;
106
+ 'mineradio.decorHover': string;
107
+ 'mineradio.whale': string;
108
+ 'mineradio.critters': string;
109
+ 'mineradio.mesh': string;
110
+ 'mineradio.starDensity': string;
111
+ 'mineradio.spotlight': string;
112
+ 'mineradio.press': string;
113
+ 'mineradio.audioReact': string;
114
+ 'mineradio.blur': string;
115
+ 'mineradio.frost': string;
116
+ 'mineradio.fluidHue': string;
117
+ 'mineradio.fluidDepth': string;
118
+ 'mineradio.dispersionHue': string;
119
+ 'mineradio.dispersionRefract': string;
120
+ 'mineradio.bgBrightness': string;
121
+ 'mineradio.bgBrightnessHintDark': string;
122
+ 'mineradio.bgBrightnessHintLight': string;
123
+ 'mineradio.background': string;
124
+ 'mineradio.backgroundFluid': string;
125
+ 'mineradio.backgroundWallpaper': string;
126
+ 'mineradio.wallpaper': string;
127
+ 'mineradio.autoTint': string;
128
+ 'mineradio.wallpaperHint': string;
129
+ 'mineradio.chooseImage': string;
130
+ 'mineradio.chooseVideo': string;
131
+ 'mineradio.deleteWallpaper': string;
132
+ 'mineradio.wallpaperBlur': string;
133
+ 'mineradio.wallpaperFrost': string;
134
+ 'mineradio.wallpaperMask': string;
135
+ 'mineradio.wallpaperMaskBlur': string;
136
+ 'mineradio.wallpaperMaskOpacity': string;
137
+ 'mineradio.videoBlur': string;
138
+ 'mineradio.videoBrightness': string;
139
+ 'mineradio.videoHint': string;
140
+ };
@@ -1,18 +1,18 @@
1
- /**
2
- * Interactive mesh: the deepseek.com/harness hero's dot-grid decoration —
3
- * a 90px grid of dots with spring physics that repel from the pointer
4
- * (radius 140px), the grid lines stretching with them. Faithful port of the
5
- * site's `h()` grid component (30fps, dpr ≤ 2, idle-pause). Rendered inside
6
- * the ambient scene behind the app content; pointer-events pass through.
7
- */
8
- /** Mesh handle: disposal. */
9
- export interface MeshHandle {
10
- /** Stop the engine and remove the canvas. */
11
- dispose: () => void;
12
- }
13
- /**
14
- * Mount the interactive mesh into `host` (the ambient scene).
15
- * @param host - the container the mesh canvas is appended to.
16
- * @returns the handle.
17
- */
18
- export declare function mountMesh(host: HTMLElement): MeshHandle;
1
+ /**
2
+ * Interactive mesh: the deepseek.com/harness hero's dot-grid decoration —
3
+ * a 90px grid of dots with spring physics that repel from the pointer
4
+ * (radius 140px), the grid lines stretching with them. Faithful port of the
5
+ * site's `h()` grid component (30fps, dpr ≤ 2, idle-pause). Rendered inside
6
+ * the ambient scene behind the app content; pointer-events pass through.
7
+ */
8
+ /** Mesh handle: disposal. */
9
+ export interface MeshHandle {
10
+ /** Stop the engine and remove the canvas. */
11
+ dispose: () => void;
12
+ }
13
+ /**
14
+ * Mount the interactive mesh into `host` (the ambient scene).
15
+ * @param host - the container the mesh canvas is appended to.
16
+ * @returns the handle.
17
+ */
18
+ export declare function mountMesh(host: HTMLElement): MeshHandle;
@@ -1,21 +1,21 @@
1
- /**
2
- * Runtime seam stamper.
3
- *
4
- * The Aqua stylesheet keys off stable data-* hooks (`data-dsh-frame`,
5
- * `data-dsh-sidebar-root`, `data-hero-headline`, …). In the monorepo those
6
- * hooks are authored into the base packages' source; for a self-contained
7
- * distribution (installed against a stock DSH) this module stamps them onto
8
- * the matching elements at runtime, so the stylesheet works with zero base
9
- * edits. Each selector uses only stable attributes already present in the
10
- * stock UI (`data-composer-card`, `data-conversation-composer-overlay`,
11
- * ARIA roles) or lightningcss-preserved class-name substrings.
12
- *
13
- * Stamps are idempotent and inert without the `data-dsh-aqua` root attribute
14
- * (the whole stylesheet is gated on it), so they are simply left in place when
15
- * the layer flips off — "off" still renders the exact stock UI.
16
- */
17
- /**
18
- * Stamp the seams once, then keep them stamped as React remounts nodes.
19
- * @returns a disposer that disconnects the observer.
20
- */
21
- export declare function startSeamStamper(): () => void;
1
+ /**
2
+ * Runtime seam stamper.
3
+ *
4
+ * The Aqua stylesheet keys off stable data-* hooks (`data-dsh-frame`,
5
+ * `data-dsh-sidebar-root`, `data-hero-headline`, …). In the monorepo those
6
+ * hooks are authored into the base packages' source; for a self-contained
7
+ * distribution (installed against a stock DSH) this module stamps them onto
8
+ * the matching elements at runtime, so the stylesheet works with zero base
9
+ * edits. Each selector uses only stable attributes already present in the
10
+ * stock UI (`data-composer-card`, `data-conversation-composer-overlay`,
11
+ * ARIA roles) or lightningcss-preserved class-name substrings.
12
+ *
13
+ * Stamps are idempotent and inert without the `data-dsh-aqua` root attribute
14
+ * (the whole stylesheet is gated on it), so they are simply left in place when
15
+ * the layer flips off — "off" still renders the exact stock UI.
16
+ */
17
+ /**
18
+ * Stamp the seams once, then keep them stamped as React remounts nodes.
19
+ * @returns a disposer that disconnects the observer.
20
+ */
21
+ export declare function startSeamStamper(): () => void;
@@ -3,7 +3,7 @@
3
3
  * knobs and the backdrop source). The plugin's apply-world change listener is
4
4
  * the only writer; the row component reads via props.useStore.
5
5
  */
6
- import { type EngineStoreHandle } from '@deepseek-ai/dsh-client-runtime/client';
6
+ import { type EngineStoreHandle } from './host-store.ts';
7
7
  import type { PerfTier, TextStyle } from './theme-layer.ts';
8
8
  /** Store state mirrored from the Mineradio settings scope. */
9
9
  export interface MineradioRowState {
@@ -105,7 +105,7 @@ export interface MineradioSettingsPayload {
105
105
  }
106
106
  /** Declared action shape giving the exported factory a stable return type. */
107
107
  type MineradioRowActions = {
108
- sync: (draft: MineradioRowState, next: MineradioSettingsPayload, revision: number) => void;
108
+ sync: (next: MineradioSettingsPayload, revision: number) => void;
109
109
  };
110
110
  /**
111
111
  * Declares the Mineradio row state and write surface.
@@ -1,5 +1,5 @@
1
- /**
2
- * Attach the specular parallax feed.
3
- * @returns a disposer that drops listeners and inline vars.
4
- */
5
- export declare function startSpecularParallax(): () => void;
1
+ /**
2
+ * Attach the specular parallax feed.
3
+ * @returns a disposer that drops listeners and inline vars.
4
+ */
5
+ export declare function startSpecularParallax(): () => void;
@@ -1,52 +1,52 @@
1
- /**
2
- * Spot geometry + overlay maintenance, shared by the spotlight/tilt
3
- * controller (spotlight.ts).
4
- *
5
- * A "spot" is a floating-glass pane stamped with `data-dsh-aqua-spot` by the
6
- * seam-stamper. One injected overlay lives inside a spot:
7
- * `data-dsh-aqua-glow` — the cursor glow surface (geometry set by the hover
8
- * controller; the radial fill lives in the stylesheet). It is re-attached
9
- * after React re-renders wipe it (one shared MutationObserver).
10
- */
11
- /** Seam attribute marking a floating-glass pane as a spotlight target. */
12
- export declare const SPOT_ATTR = "data-dsh-aqua-spot";
13
- /** Attribute on the injected glow overlay div. */
14
- export declare const GLOW_ATTR = "data-dsh-aqua-glow";
15
- /** Marker set on a pane while the pointer is inside it. */
16
- export declare const ON_ATTR = "data-spot-on";
17
- /** Selector matching every stamped pane. */
18
- export declare const SPOT_SELECTOR = "[data-dsh-aqua-spot]";
19
- /** Nearest stamped pane from an event target (null when outside all panes). */
20
- export declare function closestSpot(target: EventTarget | null): HTMLElement | null;
21
- /** Every stamped pane in document order. */
22
- export declare function spotElements(): HTMLElement[];
23
- /**
24
- * The visible glass region of a pane (viewport rect). The fused
25
- * composer+stats spot is the wider invisible inputbar wrapper — its glass is
26
- * the union of the composer card and the docked stats band, so the wrapper's
27
- * side gutters stay outside every effect.
28
- */
29
- export declare function visualRect(spot: HTMLElement): DOMRect;
30
- /** Is the pointer over the visible glass of the pane? */
31
- export declare function inside(visual: DOMRect, clientX: number, clientY: number): boolean;
32
- /**
33
- * The visible glass region of a pane in the pane's own local space
34
- * (untransformed — safe to measure while tilted). For the fused
35
- * composer+stats spot this is the union of the composer card and the docked
36
- * stats band; for the other panes it is the pane's own box.
37
- */
38
- export declare function glassLocalRect(spot: HTMLElement): {
39
- left: number;
40
- top: number;
41
- width: number;
42
- height: number;
43
- };
44
- /** Ensure the pane carries exactly one glow overlay div. */
45
- export declare function ensureGlow(spot: HTMLElement): HTMLElement;
46
- /**
47
- * One shared observer + resize feed: keeps the glow divs glued to the panes
48
- * through React re-renders and notifies the caller of DOM/layout changes
49
- * (the caller coalesces the callbacks).
50
- * @returns a disposer that removes every injected glow div.
51
- */
52
- export declare function startOverlayKeeper(onChange: () => void): () => void;
1
+ /**
2
+ * Spot geometry + overlay maintenance, shared by the spotlight/tilt
3
+ * controller (spotlight.ts).
4
+ *
5
+ * A "spot" is a floating-glass pane stamped with `data-dsh-aqua-spot` by the
6
+ * seam-stamper. One injected overlay lives inside a spot:
7
+ * `data-dsh-aqua-glow` — the cursor glow surface (geometry set by the hover
8
+ * controller; the radial fill lives in the stylesheet). It is re-attached
9
+ * after React re-renders wipe it (one shared MutationObserver).
10
+ */
11
+ /** Seam attribute marking a floating-glass pane as a spotlight target. */
12
+ export declare const SPOT_ATTR = "data-dsh-aqua-spot";
13
+ /** Attribute on the injected glow overlay div. */
14
+ export declare const GLOW_ATTR = "data-dsh-aqua-glow";
15
+ /** Marker set on a pane while the pointer is inside it. */
16
+ export declare const ON_ATTR = "data-spot-on";
17
+ /** Selector matching every stamped pane. */
18
+ export declare const SPOT_SELECTOR = "[data-dsh-aqua-spot]";
19
+ /** Nearest stamped pane from an event target (null when outside all panes). */
20
+ export declare function closestSpot(target: EventTarget | null): HTMLElement | null;
21
+ /** Every stamped pane in document order. */
22
+ export declare function spotElements(): HTMLElement[];
23
+ /**
24
+ * The visible glass region of a pane (viewport rect). The fused
25
+ * composer+stats spot is the wider invisible inputbar wrapper — its glass is
26
+ * the union of the composer card and the docked stats band, so the wrapper's
27
+ * side gutters stay outside every effect.
28
+ */
29
+ export declare function visualRect(spot: HTMLElement): DOMRect;
30
+ /** Is the pointer over the visible glass of the pane? */
31
+ export declare function inside(visual: DOMRect, clientX: number, clientY: number): boolean;
32
+ /**
33
+ * The visible glass region of a pane in the pane's own local space
34
+ * (untransformed — safe to measure while tilted). For the fused
35
+ * composer+stats spot this is the union of the composer card and the docked
36
+ * stats band; for the other panes it is the pane's own box.
37
+ */
38
+ export declare function glassLocalRect(spot: HTMLElement): {
39
+ left: number;
40
+ top: number;
41
+ width: number;
42
+ height: number;
43
+ };
44
+ /** Ensure the pane carries exactly one glow overlay div. */
45
+ export declare function ensureGlow(spot: HTMLElement): HTMLElement;
46
+ /**
47
+ * One shared observer + resize feed: keeps the glow divs glued to the panes
48
+ * through React re-renders and notifies the caller of DOM/layout changes
49
+ * (the caller coalesces the callbacks).
50
+ * @returns a disposer that removes every injected glow div.
51
+ */
52
+ export declare function startOverlayKeeper(onChange: () => void): () => void;
@@ -1,11 +1,11 @@
1
- /** html attribute the layer uses to switch the glow effect (its toggle). */
2
- export declare const SPOTLIGHT_ATTRIBUTE = "data-dsh-aqua-spotlight";
3
- /** html attribute the layer uses to switch the tilt effect (its toggle). */
4
- export declare const PRESS_ATTRIBUTE = "data-dsh-aqua-press";
5
- /**
6
- * Attach the delegated pointer feeds. Everything is document-level: no
7
- * per-pane listeners, and the rAF merge collapses pointermove bursts to one
8
- * style write per frame.
9
- * @returns a disposer that drops listeners, overlays, and inline styles.
10
- */
11
- export declare function startSpotlight(): () => void;
1
+ /** html attribute the layer uses to switch the glow effect (its toggle). */
2
+ export declare const SPOTLIGHT_ATTRIBUTE = "data-dsh-aqua-spotlight";
3
+ /** html attribute the layer uses to switch the tilt effect (its toggle). */
4
+ export declare const PRESS_ATTRIBUTE = "data-dsh-aqua-press";
5
+ /**
6
+ * Attach the delegated pointer feeds. Everything is document-level: no
7
+ * per-pane listeners, and the rAF merge collapses pointermove bursts to one
8
+ * style write per frame.
9
+ * @returns a disposer that drops listeners, overlays, and inline styles.
10
+ */
11
+ export declare function startSpotlight(): () => void;
@@ -1,43 +1,43 @@
1
- /**
2
- * Mineradio-style particle stage — a from-scratch Canvas 2D re-creation of the
3
- * music player's signature backdrop motion (no code copied from the player):
4
- *
5
- * 1. STAR RIVER — hundreds of dust points organised in horizontal "bands"
6
- * that drift sideways while sine waves carry them up/down. Cool
7
- * blue→violet particles with a warm champagne ridge per band, plus a
8
- * slow twinkle. Reads as a slow galaxy river flowing behind the glass.
9
- * 2. POINTER FIELD — particles near the cursor brighten and swell, like
10
- * the player's silk cover reacting to the mouse.
11
- * 3. RIPPLES — a click drops a ripple: particles ride the expanding ring
12
- * outwards and flash brighter, then everything settles back.
13
- *
14
- * Performance discipline: fixed particle cap, DPR capped at 1.5, sprite-based
15
- * rendering (one pre-baked radial dot per colour, no per-particle gradients),
16
- * `requestAnimationFrame` loop paused on `visibilitychange`, and a single
17
- * static frame under `prefers-reduced-motion`.
18
- */
19
- /** Public knob: dark scheme runs the full galaxy, light scheme dims it. */
20
- export interface StarRiverOptions {
21
- dark: boolean;
22
- /** Particle density, 0-100 (50 = 1× the default field, 100 = 2×). */
23
- density?: number;
24
- /** Respect the OS reduced-motion preference by rendering one static frame
25
- * instead of animating. OFF by default: the star river is the skin's
26
- * signature motion, so it animates unless an app-level switch opts in to
27
- * accessibility static frames. */
28
- respectReducedMotion?: boolean;
29
- }
30
- /** Handle returned by {@link mountStarRiver}. */
31
- export interface StarRiverHandle {
32
- /** Update the scheme knob. */
33
- setDark(dark: boolean): void;
34
- /** Update the particle density (0-100) and rebuild the field live. */
35
- setDensity(density: number): void;
36
- /** Audio reactivity: bass `low` drives the hop, treble `high` the sparkle. */
37
- setAudio(low: number, high: number): void;
38
- /** Tear the stage down (canvas, listeners, animation). */
39
- dispose(): void;
40
- }
41
- /** Mount the particle stage inside the ambient container. Idempotent: a
42
- * second call reuses the existing canvas. */
43
- export declare function mountStarRiver(ambient: HTMLElement, options: StarRiverOptions): StarRiverHandle;
1
+ /**
2
+ * Mineradio-style particle stage — a from-scratch Canvas 2D re-creation of the
3
+ * music player's signature backdrop motion (no code copied from the player):
4
+ *
5
+ * 1. STAR RIVER — hundreds of dust points organised in horizontal "bands"
6
+ * that drift sideways while sine waves carry them up/down. Cool
7
+ * blue→violet particles with a warm champagne ridge per band, plus a
8
+ * slow twinkle. Reads as a slow galaxy river flowing behind the glass.
9
+ * 2. POINTER FIELD — particles near the cursor brighten and swell, like
10
+ * the player's silk cover reacting to the mouse.
11
+ * 3. RIPPLES — a click drops a ripple: particles ride the expanding ring
12
+ * outwards and flash brighter, then everything settles back.
13
+ *
14
+ * Performance discipline: fixed particle cap, DPR capped at 1.5, sprite-based
15
+ * rendering (one pre-baked radial dot per colour, no per-particle gradients),
16
+ * `requestAnimationFrame` loop paused on `visibilitychange`, and a single
17
+ * static frame under `prefers-reduced-motion`.
18
+ */
19
+ /** Public knob: dark scheme runs the full galaxy, light scheme dims it. */
20
+ export interface StarRiverOptions {
21
+ dark: boolean;
22
+ /** Particle density, 0-100 (50 = 1× the default field, 100 = 2×). */
23
+ density?: number;
24
+ /** Respect the OS reduced-motion preference by rendering one static frame
25
+ * instead of animating. OFF by default: the star river is the skin's
26
+ * signature motion, so it animates unless an app-level switch opts in to
27
+ * accessibility static frames. */
28
+ respectReducedMotion?: boolean;
29
+ }
30
+ /** Handle returned by {@link mountStarRiver}. */
31
+ export interface StarRiverHandle {
32
+ /** Update the scheme knob. */
33
+ setDark(dark: boolean): void;
34
+ /** Update the particle density (0-100) and rebuild the field live. */
35
+ setDensity(density: number): void;
36
+ /** Audio reactivity: bass `low` drives the hop, treble `high` the sparkle. */
37
+ setAudio(low: number, high: number): void;
38
+ /** Tear the stage down (canvas, listeners, animation). */
39
+ dispose(): void;
40
+ }
41
+ /** Mount the particle stage inside the ambient container. Idempotent: a
42
+ * second call reuses the existing canvas. */
43
+ export declare function mountStarRiver(ambient: HTMLElement, options: StarRiverOptions): StarRiverHandle;