@lemoncat7/dsh-partner 1.6.1 → 1.7.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 +10 -1
- package/docs/THIRD_PARTY_LICENSES.md +231 -0
- package/docs/architecture.md +23 -0
- package/lib/api/features/pendant-api.d.ts +4 -0
- package/lib/api/features/pendant-api.d.ts.map +1 -0
- package/lib/api/features/pendant-api.js +37 -0
- package/lib/api/features/pendant-api.js.map +1 -0
- package/lib/api.d.ts +2 -0
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +3 -0
- package/lib/api.js.map +1 -1
- package/lib/client-controller.d.ts +6 -1
- package/lib/client-controller.d.ts.map +1 -1
- package/lib/client-controller.js +4 -1
- package/lib/client-controller.js.map +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +2364 -1442
- package/lib/client.js.map +4 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -2
- package/lib/index.js.map +1 -1
- package/lib/notifications/domain.d.ts +18 -0
- package/lib/notifications/domain.d.ts.map +1 -0
- package/lib/notifications/domain.js +2 -0
- package/lib/notifications/domain.js.map +1 -0
- package/lib/notifications/service.d.ts +15 -0
- package/lib/notifications/service.d.ts.map +1 -0
- package/lib/notifications/service.js +65 -0
- package/lib/notifications/service.js.map +1 -0
- package/lib/notifications/store.d.ts +14 -0
- package/lib/notifications/store.d.ts.map +1 -0
- package/lib/notifications/store.js +56 -0
- package/lib/notifications/store.js.map +1 -0
- package/lib/pendant/card-image.d.ts +6 -0
- package/lib/pendant/card-image.d.ts.map +1 -0
- package/lib/pendant/card-image.js +43 -0
- package/lib/pendant/card-image.js.map +1 -0
- package/lib/pendant/frame-loop.d.ts +18 -0
- package/lib/pendant/frame-loop.d.ts.map +1 -0
- package/lib/pendant/frame-loop.js +74 -0
- package/lib/pendant/frame-loop.js.map +1 -0
- package/lib/pendant/notice-motion.d.ts +12 -0
- package/lib/pendant/notice-motion.d.ts.map +1 -0
- package/lib/pendant/notice-motion.js +40 -0
- package/lib/pendant/notice-motion.js.map +1 -0
- package/lib/pendant/physics.d.ts +14 -0
- package/lib/pendant/physics.d.ts.map +1 -0
- package/lib/pendant/physics.js +29 -0
- package/lib/pendant/physics.js.map +1 -0
- package/lib/pendant/reader.d.ts +15 -0
- package/lib/pendant/reader.d.ts.map +1 -0
- package/lib/pendant/reader.js +37 -0
- package/lib/pendant/reader.js.map +1 -0
- package/lib/pendant/renderer.d.ts +24 -0
- package/lib/pendant/renderer.d.ts.map +1 -0
- package/lib/pendant/renderer.js +407 -0
- package/lib/pendant/renderer.js.map +1 -0
- package/lib/pendant/settings-panel.d.ts +2 -0
- package/lib/pendant/settings-panel.d.ts.map +1 -0
- package/lib/pendant/settings-panel.js +70 -0
- package/lib/pendant/settings-panel.js.map +1 -0
- package/lib/pendant/settings.d.ts +16 -0
- package/lib/pendant/settings.d.ts.map +1 -0
- package/lib/pendant/settings.js +18 -0
- package/lib/pendant/settings.js.map +1 -0
- package/lib/pendant/sheen.d.ts +11 -0
- package/lib/pendant/sheen.d.ts.map +1 -0
- package/lib/pendant/sheen.js +36 -0
- package/lib/pendant/sheen.js.map +1 -0
- package/lib/pendant/strap-geometry.d.ts +17 -0
- package/lib/pendant/strap-geometry.d.ts.map +1 -0
- package/lib/pendant/strap-geometry.js +69 -0
- package/lib/pendant/strap-geometry.js.map +1 -0
- package/lib/pendant/strap-preview.d.ts +5 -0
- package/lib/pendant/strap-preview.d.ts.map +1 -0
- package/lib/pendant/strap-preview.js +8 -0
- package/lib/pendant/strap-preview.js.map +1 -0
- package/lib/pendant/strap-style.d.ts +11 -0
- package/lib/pendant/strap-style.d.ts.map +1 -0
- package/lib/pendant/strap-style.js +13 -0
- package/lib/pendant/strap-style.js.map +1 -0
- package/lib/pendant/strap.d.ts +13 -0
- package/lib/pendant/strap.d.ts.map +1 -0
- package/lib/pendant/strap.js +73 -0
- package/lib/pendant/strap.js.map +1 -0
- package/lib/pendant/use-inbox.d.ts +9 -0
- package/lib/pendant/use-inbox.d.ts.map +1 -0
- package/lib/pendant/use-inbox.js +81 -0
- package/lib/pendant/use-inbox.js.map +1 -0
- package/lib/pendant/use-placement.d.ts +28 -0
- package/lib/pendant/use-placement.d.ts.map +1 -0
- package/lib/pendant/use-placement.js +108 -0
- package/lib/pendant/use-placement.js.map +1 -0
- package/lib/pendant/use-settings.d.ts +4 -0
- package/lib/pendant/use-settings.d.ts.map +1 -0
- package/lib/pendant/use-settings.js +44 -0
- package/lib/pendant/use-settings.js.map +1 -0
- package/lib/pendant/widget.d.ts +5 -0
- package/lib/pendant/widget.d.ts.map +1 -0
- package/lib/pendant/widget.js +92 -0
- package/lib/pendant/widget.js.map +1 -0
- package/lib/pendant-renderer.js +4124 -0
- package/lib/store.d.ts +2 -0
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +19 -0
- package/lib/store.js.map +1 -1
- package/lib/ui/task-board-panel.d.ts +4 -1
- package/lib/ui/task-board-panel.d.ts.map +1 -1
- package/lib/ui/task-board-panel.js +4 -2
- package/lib/ui/task-board-panel.js.map +1 -1
- package/package.json +9 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-panel.js","sourceRoot":"","sources":["../../src/pendant/settings-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type StrapMaterial = 'woven' | 'braided' | 'leather';
|
|
2
|
+
export type PendantFps = 24 | 30 | 60;
|
|
3
|
+
export interface PendantSettings {
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
fps: PendantFps;
|
|
6
|
+
material: StrapMaterial;
|
|
7
|
+
color: string;
|
|
8
|
+
image: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const PENDANT_SETTINGS_KEY = "dsh-partner:pendant-settings:v1";
|
|
11
|
+
export declare const DEFAULT_PENDANT_SETTINGS: Readonly<PendantSettings>;
|
|
12
|
+
export declare const MAX_CARD_IMAGE_LENGTH = 700000;
|
|
13
|
+
export declare function samePendantSettings(a: PendantSettings, b: PendantSettings): boolean;
|
|
14
|
+
export declare function normalizePendantFps(value: unknown): PendantFps;
|
|
15
|
+
export declare function normalizePendantSettings(value: unknown): PendantSettings;
|
|
16
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/pendant/settings.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;AAC3D,MAAM,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;AACrC,MAAM,WAAW,eAAe;IAAG,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAC7H,eAAO,MAAM,oBAAoB,oCAAoC,CAAA;AACrE,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,eAAe,CAA6F,CAAA;AAC5J,eAAO,MAAM,qBAAqB,SAAU,CAAA;AAE5C,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,eAAe,GAAG,OAAO,CAEnF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAAqD;AAEpH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CASxE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const PENDANT_SETTINGS_KEY = 'dsh-partner:pendant-settings:v1';
|
|
2
|
+
export const DEFAULT_PENDANT_SETTINGS = Object.freeze({ enabled: true, fps: 30, material: 'woven', color: '#617e73', image: '' });
|
|
3
|
+
export const MAX_CARD_IMAGE_LENGTH = 700_000;
|
|
4
|
+
export function samePendantSettings(a, b) {
|
|
5
|
+
return a.enabled === b.enabled && a.fps === b.fps && a.material === b.material && a.color === b.color && a.image === b.image;
|
|
6
|
+
}
|
|
7
|
+
export function normalizePendantFps(value) { return value === 24 || value === 60 ? value : 30; }
|
|
8
|
+
export function normalizePendantSettings(value) {
|
|
9
|
+
const input = value && typeof value === 'object' ? value : {};
|
|
10
|
+
return {
|
|
11
|
+
enabled: typeof input.enabled === 'boolean' ? input.enabled : true,
|
|
12
|
+
fps: normalizePendantFps(input.fps),
|
|
13
|
+
material: input.material === 'braided' || input.material === 'leather' ? input.material : 'woven',
|
|
14
|
+
color: typeof input.color === 'string' && /^#[0-9a-f]{6}$/i.test(input.color) ? input.color.toLowerCase() : DEFAULT_PENDANT_SETTINGS.color,
|
|
15
|
+
image: typeof input.image === 'string' && input.image.length <= MAX_CARD_IMAGE_LENGTH && /^data:image\/jpeg;base64,[a-z0-9+/]+={0,2}$/i.test(input.image) ? input.image : '',
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/pendant/settings.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,oBAAoB,GAAG,iCAAiC,CAAA;AACrE,MAAM,CAAC,MAAM,wBAAwB,GAA8B,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;AAC5J,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAA;AAE5C,MAAM,UAAU,mBAAmB,CAAC,CAAkB,EAAE,CAAkB;IACxE,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAA;AAC9H,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc,IAAgB,OAAO,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA,CAAC,CAAC;AAEpH,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,MAAM,KAAK,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAiC,CAAC,CAAC,CAAC,EAAE,CAAA;IACzF,OAAO;QACL,OAAO,EAAE,OAAO,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QAClE,GAAG,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC;QACnC,QAAQ,EAAE,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;QACjG,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAAK;QAC1I,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,qBAAqB,IAAI,8CAA8C,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;KAC7K,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
/** Two brief passes over the front art face, never a rectangular DOM
|
|
3
|
+
* overlay or a full-screen bloom pass. Shares geometry; owns only its material.
|
|
4
|
+
*/
|
|
5
|
+
export declare function createBadgeSheen(card: THREE.Group, face: THREE.BufferGeometry): {
|
|
6
|
+
start(now: number): void;
|
|
7
|
+
update(now: number, reduced: boolean): boolean;
|
|
8
|
+
clear(): void;
|
|
9
|
+
dispose(): void;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=sheen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheen.d.ts","sourceRoot":"","sources":["../../src/pendant/sheen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,cAAc;eAiB/D,MAAM;gBACL,MAAM,WAAW,OAAO,GAAG,OAAO;;;EAUjD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
/** Two brief passes over the front art face, never a rectangular DOM
|
|
3
|
+
* overlay or a full-screen bloom pass. Shares geometry; owns only its material.
|
|
4
|
+
*/
|
|
5
|
+
export function createBadgeSheen(card, face) {
|
|
6
|
+
const material = new THREE.ShaderMaterial({
|
|
7
|
+
uniforms: { progress: { value: 0 } }, transparent: true, depthWrite: false, toneMapped: false,
|
|
8
|
+
vertexShader: 'varying vec2 faceUv; void main() { faceUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); }',
|
|
9
|
+
fragmentShader: `varying vec2 faceUv; uniform float progress;
|
|
10
|
+
void main() {
|
|
11
|
+
float center = mix(-0.5, 1.6, progress);
|
|
12
|
+
float band = 1.0 - smoothstep(0.0, 0.22, abs(faceUv.x + faceUv.y * 0.35 - center));
|
|
13
|
+
float fade = smoothstep(0.0, 0.14, progress) * (1.0 - smoothstep(0.8, 1.0, progress));
|
|
14
|
+
gl_FragColor = vec4(0.88, 1.0, 0.95, band * fade * 0.38);
|
|
15
|
+
}`,
|
|
16
|
+
});
|
|
17
|
+
const front = new THREE.Mesh(face, material);
|
|
18
|
+
front.position.z = .067;
|
|
19
|
+
front.visible = false;
|
|
20
|
+
card.add(front);
|
|
21
|
+
let start;
|
|
22
|
+
return {
|
|
23
|
+
start(now) { start = now; },
|
|
24
|
+
update(now, reduced) {
|
|
25
|
+
if (reduced || (start !== undefined && now - start >= 2800))
|
|
26
|
+
start = undefined;
|
|
27
|
+
const elapsed = start === undefined ? -1 : now - start;
|
|
28
|
+
front.visible = elapsed >= 0 && elapsed % 1400 < 1000;
|
|
29
|
+
material.uniforms.progress.value = Math.max(0, elapsed % 1400) / 1000;
|
|
30
|
+
return start !== undefined;
|
|
31
|
+
},
|
|
32
|
+
clear() { start = undefined; front.visible = false; },
|
|
33
|
+
dispose() { card.remove(front); material.dispose(); },
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=sheen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheen.js","sourceRoot":"","sources":["../../src/pendant/sheen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAiB,EAAE,IAA0B;IAC5E,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC;QACxC,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK;QAC7F,YAAY,EAAE,2HAA2H;QACzI,cAAc,EAAE;;;;;;QAMZ;KACL,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC5C,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAA;IACvB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;IAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACtC,IAAI,KAAyB,CAAA;IAC7B,OAAO;QACL,KAAK,CAAC,GAAW,IAAI,KAAK,GAAG,GAAG,CAAA,CAAC,CAAC;QAClC,MAAM,CAAC,GAAW,EAAE,OAAgB;YAClC,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC;gBAAE,KAAK,GAAG,SAAS,CAAA;YAC9E,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAA;YACtD,KAAK,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,OAAO,GAAG,IAAI,GAAG,IAAI,CAAA;YACrD,QAAQ,CAAC,QAAQ,CAAC,QAAS,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;YACtE,OAAO,KAAK,KAAK,SAAS,CAAA;QAC5B,CAAC;QACD,KAAK,KAAK,KAAK,GAAG,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAA,CAAC,CAAC;QACpD,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA,CAAC,CAAC;KACrD,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { PendantSettings } from './settings.js';
|
|
2
|
+
export interface StrapPoint {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
}
|
|
6
|
+
export interface StrapLayer {
|
|
7
|
+
id: string;
|
|
8
|
+
d: string;
|
|
9
|
+
stroke: string;
|
|
10
|
+
width: number;
|
|
11
|
+
opacity: number;
|
|
12
|
+
}
|
|
13
|
+
/** Shared live/preview geometry. Texture follows arc distance/tangent, not
|
|
14
|
+
* screen axes. At most 256 samples / 8 paths, no filters or per-thread nodes.
|
|
15
|
+
*/
|
|
16
|
+
export declare function strapGeometry(points: readonly StrapPoint[], settings: Pick<PendantSettings, 'material' | 'color'>, scale: number): StrapLayer[];
|
|
17
|
+
//# sourceMappingURL=strap-geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strap-geometry.d.ts","sourceRoot":"","sources":["../../src/pendant/strap-geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGpD,MAAM,WAAW,UAAU;IAAG,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE;AACpD,MAAM,WAAW,UAAU;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAGrG;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAqD/I"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { strapStyle } from './strap-style.js';
|
|
2
|
+
const point = (p) => p.x.toFixed(2) + ' ' + p.y.toFixed(2);
|
|
3
|
+
/** Shared live/preview geometry. Texture follows arc distance/tangent, not
|
|
4
|
+
* screen axes. At most 256 samples / 8 paths, no filters or per-thread nodes.
|
|
5
|
+
*/
|
|
6
|
+
export function strapGeometry(points, settings, scale) {
|
|
7
|
+
if (points.length < 2 || !Number.isFinite(scale) || scale <= 0 || points.some(p => !Number.isFinite(p.x) || !Number.isFinite(p.y)))
|
|
8
|
+
return [];
|
|
9
|
+
const style = strapStyle(settings), width = style.width * scale;
|
|
10
|
+
const lengths = [0];
|
|
11
|
+
for (let i = 1; i < points.length; i++)
|
|
12
|
+
lengths.push(lengths[i - 1] + Math.hypot(points[i].x - points[i - 1].x, points[i].y - points[i - 1].y));
|
|
13
|
+
const total = lengths.at(-1);
|
|
14
|
+
if (total < .01)
|
|
15
|
+
return [];
|
|
16
|
+
const count = Math.min(256, Math.max(2, Math.ceil(total / Math.max(1.5, width * .18))));
|
|
17
|
+
let segment = 1;
|
|
18
|
+
const samples = Array.from({ length: count + 1 }, (_, i) => {
|
|
19
|
+
const distance = total * i / count;
|
|
20
|
+
while (segment < points.length - 1 && lengths[segment] < distance)
|
|
21
|
+
segment++;
|
|
22
|
+
const a = points[segment - 1], b = points[segment], length = lengths[segment] - lengths[segment - 1];
|
|
23
|
+
const t = length > 0 ? (distance - lengths[segment - 1]) / length : 0;
|
|
24
|
+
return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t, nx: length ? -(b.y - a.y) / length : 1, ny: length ? (b.x - a.x) / length : 0, distance };
|
|
25
|
+
});
|
|
26
|
+
const at = (i, offset) => { const p = samples[i]; return { x: p.x + p.nx * offset, y: p.y + p.ny * offset }; };
|
|
27
|
+
const line = (offset) => samples.map((p, i) => (i ? 'L' : 'M') + point(at(i, typeof offset === 'number' ? offset : offset(p.distance)))).join('');
|
|
28
|
+
const layers = [];
|
|
29
|
+
const add = (id, d, stroke, thickness, opacity = 1) => { layers.push({ id, d, stroke, width: thickness, opacity }); };
|
|
30
|
+
add('edge', line(0), style.edge, width);
|
|
31
|
+
add('surface', line(0), style.band, width * .84);
|
|
32
|
+
if (settings.material === 'woven') {
|
|
33
|
+
add('selvedge', line(-width * .36) + line(width * .36), style.light, width * .065, .85);
|
|
34
|
+
add('warp', line(-width * .15) + line(width * .15), style.shade, width * .075, .7);
|
|
35
|
+
let ribs = '';
|
|
36
|
+
for (let i = 1; i < count; i += 2)
|
|
37
|
+
ribs += 'M' + point(at(i, -width * .3)) + 'L' + point(at(i, width * .3));
|
|
38
|
+
add('weft', ribs, style.thread, Math.max(.55, width * .07), .6);
|
|
39
|
+
}
|
|
40
|
+
else if (settings.material === 'leather') {
|
|
41
|
+
add('rolled-edge', line(-width * .37), style.light, width * .09, .75);
|
|
42
|
+
add('polish', line(-width * .11), style.light, width * .22, .16);
|
|
43
|
+
let stitches = '';
|
|
44
|
+
for (let i = 1; i < count - 1; i += 4)
|
|
45
|
+
for (const side of [-1, 1])
|
|
46
|
+
stitches += 'M' + point(at(i, side * width * .28)) + 'L' + point(at(i + 1, side * width * .28));
|
|
47
|
+
add('seam-shadow', stitches, style.edge, width * .16, .85);
|
|
48
|
+
add('double-stitch', stitches, style.thread, Math.max(.65, width * .085));
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const pitch = width * 1.2;
|
|
52
|
+
const wave = (distance) => Math.sin(distance / pitch * Math.PI * 2) * width * .27;
|
|
53
|
+
const left = line(wave), right = line(distance => -wave(distance));
|
|
54
|
+
add('strand-grooves', left + right, style.edge, width * .42);
|
|
55
|
+
add('strand-body', left + right, style.light, width * .27, .8);
|
|
56
|
+
let over = '', lit = '';
|
|
57
|
+
for (let i = 0; i < count; i++) {
|
|
58
|
+
const s = samples[i], end = samples[i + 1];
|
|
59
|
+
const sign = Math.cos((s.distance + end.distance) / 2 / pitch * Math.PI * 2) >= 0 ? 1 : -1;
|
|
60
|
+
const a = wave(s.distance) * sign, b = wave(end.distance) * sign;
|
|
61
|
+
over += 'M' + point(at(i, a)) + 'L' + point(at(i + 1, b));
|
|
62
|
+
lit += 'M' + point(at(i, a - width * .055)) + 'L' + point(at(i + 1, b - width * .055));
|
|
63
|
+
}
|
|
64
|
+
add('overpass', over, style.band, width * .25);
|
|
65
|
+
add('strand-sheen', lit, style.thread, width * .095, .95);
|
|
66
|
+
}
|
|
67
|
+
return layers;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=strap-geometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strap-geometry.js","sourceRoot":"","sources":["../../src/pendant/strap-geometry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strap-preview.d.ts","sourceRoot":"","sources":["../../src/pendant/strap-preview.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGpD,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAMjJ"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { strapGeometry } from './strap-geometry.js';
|
|
4
|
+
export function StrapPreview({ material, color, swatch = false }) {
|
|
5
|
+
const layers = useMemo(() => strapGeometry(swatch ? [{ x: 8, y: 20 }, { x: 112, y: 20 }] : [{ x: 50, y: 6 }, { x: 50, y: 127 }], { material, color }, swatch ? 100 : 72), [material, color, swatch]);
|
|
6
|
+
return _jsxs("svg", { className: swatch ? 'dsh-partner-strap-swatch' : undefined, viewBox: swatch ? '0 0 120 40' : '0 0 100 130', "aria-hidden": "true", children: [layers.map(layer => _jsx("path", { d: layer.d, fill: "none", stroke: layer.stroke, strokeWidth: layer.width, opacity: layer.opacity, strokeLinecap: "round", strokeLinejoin: "round" }, layer.id)), !swatch && _jsx("rect", { x: "42", y: "3", width: "16", height: "6", rx: "3", fill: "#c3ced0" })] });
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=strap-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strap-preview.js","sourceRoot":"","sources":["../../src/pendant/strap-preview.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,MAAM,UAAU,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,EAAsE;IAClI,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;IACpM,OAAO,eAAK,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,iBAAc,MAAM,aACvI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,eAAqB,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAC,MAAM,EAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,IAAtJ,KAAK,CAAC,EAAE,CAAiJ,CAAC,EACzL,CAAC,MAAM,IAAI,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAC,SAAS,GAAG,IACzE,CAAA;AACR,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PendantSettings } from './settings.js';
|
|
2
|
+
/** World-unit width and color-relative textile lighting. */
|
|
3
|
+
export declare function strapStyle({ color, material }: Pick<PendantSettings, 'color' | 'material'>): {
|
|
4
|
+
width: number;
|
|
5
|
+
band: string;
|
|
6
|
+
edge: string;
|
|
7
|
+
shade: string;
|
|
8
|
+
light: string;
|
|
9
|
+
thread: string;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=strap-style.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strap-style.d.ts","sourceRoot":"","sources":["../../src/pendant/strap-style.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAOpD,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,UAAU,CAAC;;;;;;;EAM1F"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
function mix(color, target, amount) {
|
|
2
|
+
const channels = [1, 3, 5].map(offset => Math.round(parseInt(color.slice(offset, offset + 2), 16) * (1 - amount) + target * amount));
|
|
3
|
+
return '#' + channels.map(value => value.toString(16).padStart(2, '0')).join('');
|
|
4
|
+
}
|
|
5
|
+
/** World-unit width and color-relative textile lighting. */
|
|
6
|
+
export function strapStyle({ color, material }) {
|
|
7
|
+
return {
|
|
8
|
+
width: { woven: .17, braided: .145, leather: .195 }[material],
|
|
9
|
+
band: color, edge: mix(color, 0, .52), shade: mix(color, 0, .3),
|
|
10
|
+
light: mix(color, 255, .48), thread: mix(color, 255, .72),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=strap-style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strap-style.js","sourceRoot":"","sources":["../../src/pendant/strap-style.ts"],"names":[],"mappings":"AAEA,SAAS,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,MAAc;IACxD,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAA;IACpI,OAAO,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAClF,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAA+C;IACzF,OAAO;QACL,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC;QAC7D,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/D,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;KAC1D,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type PendantSettings } from './settings.js';
|
|
2
|
+
/** Fixed SVG layer pool, separate from the bounded WebGL card buffer. */
|
|
3
|
+
export declare function createLanyardStrap(canvas: HTMLCanvasElement): {
|
|
4
|
+
resize(scale: number): void;
|
|
5
|
+
setAppearance(settings: PendantSettings): void;
|
|
6
|
+
paint(points: ReadonlyArray<{
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
z: number;
|
|
10
|
+
}>, originX: number, originY: number, scale: number): void;
|
|
11
|
+
destroy(): void;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=strap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strap.d.ts","sourceRoot":"","sources":["../../src/pendant/strap.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAE9E,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB;kBA+B1C,MAAM;4BACI,eAAe;kBAMzB,aAAa,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,WAAW,MAAM,WAAW,MAAM,SAAS,MAAM;;EAYpH"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { CatmullRomCurve3, Vector3 } from 'three';
|
|
2
|
+
import { strapGeometry } from './strap-geometry.js';
|
|
3
|
+
import { DEFAULT_PENDANT_SETTINGS } from './settings.js';
|
|
4
|
+
/** Fixed SVG layer pool, separate from the bounded WebGL card buffer. */
|
|
5
|
+
export function createLanyardStrap(canvas) {
|
|
6
|
+
const ns = 'http://www.w3.org/2000/svg';
|
|
7
|
+
const svg = document.createElementNS(ns, 'svg');
|
|
8
|
+
svg.classList.add('dsh-partner-pendant-strap');
|
|
9
|
+
svg.setAttribute('aria-hidden', 'true');
|
|
10
|
+
const paths = Array.from({ length: 8 }, () => {
|
|
11
|
+
const path = document.createElementNS(ns, 'path');
|
|
12
|
+
path.setAttribute('fill', 'none');
|
|
13
|
+
path.setAttribute('stroke-linecap', 'round');
|
|
14
|
+
path.setAttribute('stroke-linejoin', 'round');
|
|
15
|
+
svg.append(path);
|
|
16
|
+
return path;
|
|
17
|
+
});
|
|
18
|
+
const stud = document.createElementNS(ns, 'circle');
|
|
19
|
+
stud.setAttribute('fill', '#c3ced0');
|
|
20
|
+
stud.setAttribute('stroke', '#667578');
|
|
21
|
+
stud.setAttribute('stroke-width', '1');
|
|
22
|
+
svg.append(stud);
|
|
23
|
+
canvas.before(svg);
|
|
24
|
+
const curve = new CatmullRomCurve3(Array.from({ length: 4 }, () => new Vector3())), point = new Vector3();
|
|
25
|
+
const projected = Array.from({ length: 49 }, () => ({ x: 0, y: 0 }));
|
|
26
|
+
let appearance = DEFAULT_PENDANT_SETTINGS, currentScale = 58;
|
|
27
|
+
let stylesDirty = true;
|
|
28
|
+
const redraw = () => {
|
|
29
|
+
const layers = strapGeometry(projected, appearance, currentScale);
|
|
30
|
+
paths.forEach((path, i) => {
|
|
31
|
+
const layer = layers[i];
|
|
32
|
+
if (stylesDirty)
|
|
33
|
+
path.style.display = layer ? '' : 'none';
|
|
34
|
+
if (!layer)
|
|
35
|
+
return;
|
|
36
|
+
path.setAttribute('d', layer.d);
|
|
37
|
+
if (stylesDirty) {
|
|
38
|
+
path.dataset.layer = layer.id;
|
|
39
|
+
path.setAttribute('stroke', layer.stroke);
|
|
40
|
+
path.setAttribute('stroke-width', String(layer.width));
|
|
41
|
+
path.setAttribute('opacity', String(layer.opacity));
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
if (layers.length)
|
|
45
|
+
stylesDirty = false;
|
|
46
|
+
};
|
|
47
|
+
return {
|
|
48
|
+
resize(scale) { currentScale = scale; stylesDirty = true; stud.setAttribute('r', String(scale * .06)); redraw(); },
|
|
49
|
+
setAppearance(settings) {
|
|
50
|
+
if (appearance.material === settings.material && appearance.color === settings.color && svg.dataset.material)
|
|
51
|
+
return;
|
|
52
|
+
appearance = { material: settings.material, color: settings.color };
|
|
53
|
+
stylesDirty = true;
|
|
54
|
+
svg.dataset.material = settings.material;
|
|
55
|
+
svg.dataset.color = settings.color;
|
|
56
|
+
redraw();
|
|
57
|
+
},
|
|
58
|
+
paint(points, originX, originY, scale) {
|
|
59
|
+
currentScale = scale;
|
|
60
|
+
points.forEach((p, i) => curve.points[i].copy(p));
|
|
61
|
+
for (let i = 0; i < projected.length; i++) {
|
|
62
|
+
curve.getPoint(i / (projected.length - 1), point);
|
|
63
|
+
projected[i].x = originX + point.x * scale;
|
|
64
|
+
projected[i].y = originY - point.y * scale;
|
|
65
|
+
}
|
|
66
|
+
redraw();
|
|
67
|
+
stud.setAttribute('cx', String(projected[0].x));
|
|
68
|
+
stud.setAttribute('cy', String(projected[0].y));
|
|
69
|
+
},
|
|
70
|
+
destroy() { svg.remove(); },
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=strap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strap.js","sourceRoot":"","sources":["../../src/pendant/strap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PartnerInbox, PartnerNotice } from '../notifications/domain.js';
|
|
2
|
+
/** One conditional poll while visible, with bounded error backoff and cancellation. */
|
|
3
|
+
export declare function usePartnerInbox(): {
|
|
4
|
+
inbox: PartnerInbox;
|
|
5
|
+
incoming: PartnerNotice | undefined;
|
|
6
|
+
error: string;
|
|
7
|
+
read(ids: string[]): Promise<void>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=use-inbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-inbox.d.ts","sourceRoot":"","sources":["../../src/pendant/use-inbox.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE7E,uFAAuF;AACvF,wBAAgB,eAAe,IAAI;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CA4CjJ"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { PARTNER_API, api } from '../client-api.js';
|
|
3
|
+
/** One conditional poll while visible, with bounded error backoff and cancellation. */
|
|
4
|
+
export function usePartnerInbox() {
|
|
5
|
+
const [inbox, setInbox] = useState({ items: [], unread: 0 });
|
|
6
|
+
const [incoming, setIncoming] = useState();
|
|
7
|
+
const [error, setError] = useState('');
|
|
8
|
+
const etag = useRef(''), latest = useRef(), initialized = useRef(false), mounted = useRef(true), mutationEpoch = useRef(0);
|
|
9
|
+
const apply = useCallback((value) => {
|
|
10
|
+
if (!mounted.current)
|
|
11
|
+
return;
|
|
12
|
+
const first = value.items[0];
|
|
13
|
+
if (initialized.current && first && first.id !== latest.current && first.readAt === undefined)
|
|
14
|
+
setIncoming(first);
|
|
15
|
+
initialized.current = true;
|
|
16
|
+
latest.current = first?.id;
|
|
17
|
+
setInbox(value);
|
|
18
|
+
setError('');
|
|
19
|
+
}, []);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
mounted.current = true;
|
|
22
|
+
let timer, request, failures = 0, stopped = false;
|
|
23
|
+
const poll = async () => {
|
|
24
|
+
if (stopped || document.hidden || request)
|
|
25
|
+
return;
|
|
26
|
+
clearTimeout(timer);
|
|
27
|
+
request = new AbortController();
|
|
28
|
+
const epoch = mutationEpoch.current;
|
|
29
|
+
const timeout = setTimeout(() => request?.abort(), 12_000);
|
|
30
|
+
try {
|
|
31
|
+
const response = await fetch(`${PARTNER_API}/pendant/inbox`, { signal: request.signal, headers: etag.current ? { 'If-None-Match': etag.current } : {} });
|
|
32
|
+
if (response.status !== 304) {
|
|
33
|
+
if (!response.ok)
|
|
34
|
+
throw new Error(`消息暂时不可用(${response.status})`);
|
|
35
|
+
const data = await response.json();
|
|
36
|
+
if (!stopped && epoch === mutationEpoch.current) {
|
|
37
|
+
etag.current = response.headers.get('etag') ?? '';
|
|
38
|
+
apply(data);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
failures = 0;
|
|
42
|
+
if (!stopped)
|
|
43
|
+
setError('');
|
|
44
|
+
}
|
|
45
|
+
catch (reason) {
|
|
46
|
+
if (!stopped && !document.hidden) {
|
|
47
|
+
failures++;
|
|
48
|
+
setError(reason instanceof Error ? reason.message : '消息读取失败');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
clearTimeout(timeout);
|
|
53
|
+
request = undefined;
|
|
54
|
+
if (!stopped && !document.hidden)
|
|
55
|
+
timer = setTimeout(() => { void poll(); }, Math.min(30_000, 4_000 * 2 ** failures));
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const visibility = () => { clearTimeout(timer); if (document.hidden)
|
|
59
|
+
request?.abort();
|
|
60
|
+
else
|
|
61
|
+
void poll(); };
|
|
62
|
+
document.addEventListener('visibilitychange', visibility);
|
|
63
|
+
void poll();
|
|
64
|
+
return () => { stopped = true; mounted.current = false; clearTimeout(timer); request?.abort(); document.removeEventListener('visibilitychange', visibility); };
|
|
65
|
+
}, [apply]);
|
|
66
|
+
const read = useCallback(async (ids) => {
|
|
67
|
+
mutationEpoch.current++;
|
|
68
|
+
try {
|
|
69
|
+
const value = await api('/pendant/read', { method: 'POST', body: JSON.stringify({ ids }) });
|
|
70
|
+
mutationEpoch.current++;
|
|
71
|
+
etag.current = '';
|
|
72
|
+
apply(value);
|
|
73
|
+
}
|
|
74
|
+
catch (reason) {
|
|
75
|
+
if (mounted.current)
|
|
76
|
+
setError(reason instanceof Error ? reason.message : '标记已读失败');
|
|
77
|
+
}
|
|
78
|
+
}, [apply]);
|
|
79
|
+
return { inbox, incoming, error, read };
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=use-inbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-inbox.js","sourceRoot":"","sources":["../../src/pendant/use-inbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type RefObject, type MutableRefObject, type PointerEvent, type KeyboardEvent } from 'react';
|
|
2
|
+
import type { LanyardHandle } from './renderer.js';
|
|
3
|
+
export declare function readerPlacement(anchor: {
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
}, viewport: {
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
}): {
|
|
12
|
+
width: number;
|
|
13
|
+
maxHeight: number;
|
|
14
|
+
left: number;
|
|
15
|
+
top: number;
|
|
16
|
+
};
|
|
17
|
+
/** Moving the hook changes placement, not the badge's elastic drag gesture.
|
|
18
|
+
* Persist only at gesture completion; movement has no React render loop.
|
|
19
|
+
*/
|
|
20
|
+
export declare function usePendantPlacement(root: RefObject<HTMLElement>, handle: MutableRefObject<LanyardHandle | undefined>): {
|
|
21
|
+
onPointerDown: (e: PointerEvent<HTMLButtonElement>) => void;
|
|
22
|
+
onPointerMove: (e: PointerEvent<HTMLButtonElement>) => void;
|
|
23
|
+
onPointerUp: (e: PointerEvent<HTMLButtonElement>) => void;
|
|
24
|
+
onPointerCancel: (e: PointerEvent<HTMLButtonElement>) => void;
|
|
25
|
+
onLostPointerCapture: (e: PointerEvent<HTMLButtonElement>) => void;
|
|
26
|
+
onKeyDown: (e: KeyboardEvent<HTMLButtonElement>) => void;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=use-placement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-placement.d.ts","sourceRoot":"","sources":["../../src/pendant/use-placement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;AACvH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAMlD,wBAAgB,eAAe,CAAC,MAAM,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;;;;;EAc3I;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,aAAa,GAAG,SAAS,CAAC;uBAyDvF,YAAY,CAAC,iBAAiB,CAAC;uBAAkD,YAAY,CAAC,iBAAiB,CAAC;qBAAgD,YAAY,CAAC,iBAAiB,CAAC;yBAAmD,YAAY,CAAC,iBAAiB,CAAC;8BAAwD,YAAY,CAAC,iBAAiB,CAAC;mBAA6C,aAAa,CAAC,iBAAiB,CAAC;EACld"}
|