@buley/hexgrid-3d 3.1.0 → 3.2.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/dist/HexGridEnhanced.d.ts +15 -0
- package/dist/HexGridEnhanced.d.ts.map +1 -0
- package/dist/HexGridEnhanced.js +1 -0
- package/dist/Snapshot.d.ts +594 -0
- package/dist/Snapshot.d.ts.map +1 -0
- package/dist/Snapshot.js +757 -0
- package/dist/adapters/DashAdapter.d.ts +18 -0
- package/dist/adapters/DashAdapter.d.ts.map +1 -0
- package/dist/adapters/DashAdapter.js +42 -0
- package/dist/adapters.d.ts +53 -0
- package/dist/adapters.d.ts.map +1 -0
- package/dist/adapters.js +14 -0
- package/dist/algorithms/AdvancedStatistics.d.ts +52 -0
- package/dist/algorithms/AdvancedStatistics.d.ts.map +1 -0
- package/dist/algorithms/AdvancedStatistics.js +307 -0
- package/dist/algorithms/BayesianStatistics.d.ts +86 -0
- package/dist/algorithms/BayesianStatistics.d.ts.map +1 -0
- package/dist/algorithms/BayesianStatistics.js +263 -0
- package/dist/algorithms/FlowField.d.ts +55 -0
- package/dist/algorithms/FlowField.d.ts.map +1 -0
- package/dist/algorithms/FlowField.js +80 -0
- package/dist/algorithms/FlowField3D.d.ts +166 -0
- package/dist/algorithms/FlowField3D.d.ts.map +1 -0
- package/dist/algorithms/FlowField3D.js +327 -0
- package/dist/algorithms/FluidEngineFactory.d.ts +15 -0
- package/dist/algorithms/FluidEngineFactory.d.ts.map +1 -0
- package/dist/algorithms/FluidEngineFactory.js +41 -0
- package/dist/algorithms/FluidSimulation.d.ts +41 -0
- package/dist/algorithms/FluidSimulation.d.ts.map +1 -0
- package/dist/algorithms/FluidSimulation.js +74 -0
- package/dist/algorithms/FluidSimulation3D.d.ts +137 -0
- package/dist/algorithms/FluidSimulation3D.d.ts.map +1 -0
- package/dist/algorithms/FluidSimulation3D.js +464 -0
- package/dist/algorithms/FluidSimulation3DGPU.d.ts +41 -0
- package/dist/algorithms/FluidSimulation3DGPU.d.ts.map +1 -0
- package/dist/algorithms/FluidSimulation3DGPU.js +328 -0
- package/dist/algorithms/FluidSimulationWebNN.d.ts +56 -0
- package/dist/algorithms/FluidSimulationWebNN.d.ts.map +1 -0
- package/dist/algorithms/FluidSimulationWebNN.js +84 -0
- package/dist/algorithms/GraphAlgorithms.d.ts +48 -0
- package/dist/algorithms/GraphAlgorithms.d.ts.map +1 -0
- package/dist/algorithms/GraphAlgorithms.js +122 -0
- package/dist/algorithms/OutlierDetection.d.ts +49 -0
- package/dist/algorithms/OutlierDetection.d.ts.map +1 -0
- package/dist/algorithms/OutlierDetection.js +284 -0
- package/dist/algorithms/ParticleSystem.d.ts +36 -0
- package/dist/algorithms/ParticleSystem.d.ts.map +1 -0
- package/dist/algorithms/ParticleSystem.js +59 -0
- package/dist/algorithms/ParticleSystem3D.d.ts +206 -0
- package/dist/algorithms/ParticleSystem3D.d.ts.map +1 -0
- package/dist/algorithms/ParticleSystem3D.js +371 -0
- package/dist/algorithms/index.d.ts +16 -0
- package/dist/algorithms/index.d.ts.map +1 -0
- package/{src/algorithms/index.ts → dist/algorithms/index.js} +0 -2
- package/dist/compat.d.ts +24 -0
- package/dist/compat.d.ts.map +1 -0
- package/dist/compat.js +88 -0
- package/dist/components/HexGrid.d.ts +5 -0
- package/dist/components/HexGrid.d.ts.map +1 -0
- package/dist/components/HexGrid.js +39 -0
- package/dist/components/NarrationOverlay.d.ts +16 -0
- package/dist/components/NarrationOverlay.d.ts.map +1 -0
- package/dist/components/NarrationOverlay.js +132 -0
- package/{src/components/index.ts → dist/components/index.d.ts} +1 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +1 -0
- package/dist/features.d.ts +54 -0
- package/dist/features.d.ts.map +1 -0
- package/dist/features.js +74 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/{src/index.ts → dist/index.js} +0 -9
- package/dist/lib/narration.d.ts +12 -0
- package/dist/lib/narration.d.ts.map +1 -0
- package/dist/lib/narration.js +8 -0
- package/dist/lib/stats-tracker.d.ts +7 -0
- package/dist/lib/stats-tracker.d.ts.map +1 -0
- package/dist/lib/stats-tracker.js +22 -0
- package/dist/lib/theme-colors.d.ts +7 -0
- package/dist/lib/theme-colors.d.ts.map +1 -0
- package/dist/lib/theme-colors.js +10 -0
- package/dist/math/HexCoordinates.d.ts +140 -0
- package/dist/math/HexCoordinates.d.ts.map +1 -0
- package/dist/math/HexCoordinates.js +741 -0
- package/dist/math/Matrix4.d.ts +9 -0
- package/dist/math/Matrix4.d.ts.map +1 -0
- package/dist/math/Matrix4.js +19 -0
- package/dist/math/Quaternion.d.ts +11 -0
- package/dist/math/Quaternion.d.ts.map +1 -0
- package/dist/math/Quaternion.js +23 -0
- package/dist/math/SpatialIndex.d.ts +34 -0
- package/dist/math/SpatialIndex.d.ts.map +1 -0
- package/dist/math/SpatialIndex.js +75 -0
- package/dist/math/Vector3.d.ts +110 -0
- package/dist/math/Vector3.d.ts.map +1 -0
- package/dist/math/Vector3.js +426 -0
- package/dist/math/index.d.ts +11 -0
- package/dist/math/index.d.ts.map +1 -0
- package/{src/math/index.ts → dist/math/index.js} +0 -1
- package/dist/note-adapter.d.ts +44 -0
- package/dist/note-adapter.d.ts.map +1 -0
- package/dist/note-adapter.js +86 -0
- package/dist/ontology-adapter.d.ts +13 -0
- package/dist/ontology-adapter.d.ts.map +1 -0
- package/dist/ontology-adapter.js +65 -0
- package/dist/stores/index.d.ts +2 -0
- package/dist/stores/index.d.ts.map +1 -0
- package/dist/stores/uiStore.d.ts +18 -0
- package/dist/stores/uiStore.d.ts.map +1 -0
- package/dist/stores/uiStore.js +77 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types.d.ts +126 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/utils/image-utils.d.ts +13 -0
- package/dist/utils/image-utils.d.ts.map +1 -0
- package/dist/utils/image-utils.js +23 -0
- package/dist/wasm/HexGridWasmWrapper.d.ts +131 -0
- package/dist/wasm/HexGridWasmWrapper.d.ts.map +1 -0
- package/dist/wasm/HexGridWasmWrapper.js +610 -0
- package/dist/wasm/index.d.ts +7 -0
- package/dist/wasm/index.d.ts.map +1 -0
- package/{src/wasm/index.ts → dist/wasm/index.js} +0 -1
- package/dist/webgpu/WebGPUContext.d.ts +20 -0
- package/dist/webgpu/WebGPUContext.d.ts.map +1 -0
- package/dist/webgpu/WebGPUContext.js +60 -0
- package/dist/webnn/WebNNContext.d.ts +38 -0
- package/dist/webnn/WebNNContext.d.ts.map +1 -0
- package/dist/webnn/WebNNContext.js +66 -0
- package/dist/workers/hexgrid-math.d.ts +79 -0
- package/dist/workers/hexgrid-math.d.ts.map +1 -0
- package/dist/workers/hexgrid-math.js +136 -0
- package/dist/workers/hexgrid-worker.worker.d.ts +35 -0
- package/dist/workers/hexgrid-worker.worker.d.ts.map +1 -0
- package/dist/workers/hexgrid-worker.worker.js +2014 -0
- package/package.json +20 -7
- package/.eslintrc.json +0 -28
- package/build_log.txt +0 -500
- package/build_src_log.txt +0 -8
- package/examples/basic-usage.tsx +0 -52
- package/public/hexgrid-worker.js +0 -2475
- package/rust/Cargo.toml +0 -41
- package/rust/src/lib.rs +0 -740
- package/rust/src/math.rs +0 -574
- package/rust/src/spatial.rs +0 -245
- package/rust/src/statistics.rs +0 -496
- package/site/.eslintrc.json +0 -3
- package/site/DEPLOYMENT.md +0 -196
- package/site/INDEX.md +0 -127
- package/site/QUICK_START.md +0 -86
- package/site/README.md +0 -85
- package/site/SITE_SUMMARY.md +0 -180
- package/site/next.config.js +0 -12
- package/site/package.json +0 -26
- package/site/src/app/docs/page.tsx +0 -272
- package/site/src/app/examples/page.tsx +0 -151
- package/site/src/app/globals.css +0 -160
- package/site/src/app/layout.tsx +0 -39
- package/site/src/app/page.tsx +0 -235
- package/site/tsconfig.json +0 -29
- package/site/vercel.json +0 -6
- package/src/HexGridEnhanced.ts +0 -16
- package/src/Snapshot.ts +0 -1607
- package/src/adapters/DashAdapter.ts +0 -57
- package/src/adapters.ts +0 -63
- package/src/algorithms/AdvancedStatistics.ts +0 -362
- package/src/algorithms/BayesianStatistics.ts +0 -348
- package/src/algorithms/FlowField.ts +0 -150
- package/src/algorithms/FlowField3D.ts +0 -573
- package/src/algorithms/FluidEngineFactory.ts +0 -44
- package/src/algorithms/FluidSimulation.ts +0 -115
- package/src/algorithms/FluidSimulation3D.ts +0 -664
- package/src/algorithms/FluidSimulation3DGPU.ts +0 -408
- package/src/algorithms/FluidSimulationWebNN.ts +0 -141
- package/src/algorithms/GraphAlgorithms.ts +0 -191
- package/src/algorithms/OutlierDetection.ts +0 -425
- package/src/algorithms/ParticleSystem.ts +0 -95
- package/src/algorithms/ParticleSystem3D.ts +0 -567
- package/src/compat.ts +0 -96
- package/src/components/HexGrid.tsx +0 -61
- package/src/components/NarrationOverlay.tsx +0 -309
- package/src/features.ts +0 -125
- package/src/lib/narration.ts +0 -17
- package/src/lib/stats-tracker.ts +0 -25
- package/src/lib/theme-colors.ts +0 -12
- package/src/math/HexCoordinates.ts +0 -863
- package/src/math/Matrix4.ts +0 -25
- package/src/math/Quaternion.ts +0 -37
- package/src/math/SpatialIndex.ts +0 -114
- package/src/math/Vector3.ts +0 -540
- package/src/note-adapter.ts +0 -132
- package/src/ontology-adapter.ts +0 -84
- package/src/stores/uiStore.ts +0 -85
- package/src/types/index.ts +0 -3
- package/src/types/shared-utils.d.ts +0 -10
- package/src/types/wgsl.d.ts +0 -4
- package/src/types.ts +0 -164
- package/src/utils/image-utils.ts +0 -28
- package/src/wasm/HexGridWasmWrapper.ts +0 -801
- package/src/webgpu/WebGPUContext.ts +0 -71
- package/src/webgpu/shaders/fluid_sim.wgsl +0 -140
- package/src/webnn/WebNNContext.ts +0 -99
- package/src/workers/hexgrid-math.ts +0 -182
- package/src/workers/hexgrid-worker.worker.ts +0 -2781
- package/tsconfig.json +0 -26
- /package/{src/stores/index.ts → dist/stores/index.js} +0 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// Safe localStorage helpers that never throw
|
|
2
|
+
const safeGetItem = (key) => {
|
|
3
|
+
// istanbul ignore next
|
|
4
|
+
if (typeof window === 'undefined')
|
|
5
|
+
return null;
|
|
6
|
+
try {
|
|
7
|
+
return window.localStorage.getItem(key);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
// istanbul ignore next
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const safeSetItem = (key, value) => {
|
|
15
|
+
// istanbul ignore next
|
|
16
|
+
if (typeof window === 'undefined')
|
|
17
|
+
return;
|
|
18
|
+
try {
|
|
19
|
+
window.localStorage.setItem(key, value);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// istanbul ignore next - private browsing, quota exceeded
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
// Initialize showNarration from localStorage if available
|
|
26
|
+
const savedNarration = safeGetItem('hexgrid.showNarration');
|
|
27
|
+
const initialShowNarration = savedNarration === 'true';
|
|
28
|
+
const state = {
|
|
29
|
+
debugOpen: false,
|
|
30
|
+
showStats: false,
|
|
31
|
+
cameraOpen: false,
|
|
32
|
+
showNarration: initialShowNarration,
|
|
33
|
+
};
|
|
34
|
+
const listeners = new Set();
|
|
35
|
+
const uiStore = {
|
|
36
|
+
getState() {
|
|
37
|
+
return { ...state };
|
|
38
|
+
},
|
|
39
|
+
set(partial) {
|
|
40
|
+
let changed = false;
|
|
41
|
+
for (const k of Object.keys(partial)) {
|
|
42
|
+
if (partial[k] !== undefined && state[k] !== partial[k]) {
|
|
43
|
+
// @ts-ignore
|
|
44
|
+
state[k] = partial[k];
|
|
45
|
+
changed = true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (changed) {
|
|
49
|
+
// Persist showNarration to localStorage for cross-refresh consistency
|
|
50
|
+
if (partial.showNarration !== undefined) {
|
|
51
|
+
safeSetItem('hexgrid.showNarration', String(!!partial.showNarration));
|
|
52
|
+
}
|
|
53
|
+
for (const cb of Array.from(listeners))
|
|
54
|
+
cb({ ...state });
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
subscribe(cb) {
|
|
58
|
+
listeners.add(cb);
|
|
59
|
+
// emit current immediately
|
|
60
|
+
cb({ ...state });
|
|
61
|
+
return () => listeners.delete(cb);
|
|
62
|
+
},
|
|
63
|
+
toggleDebug() {
|
|
64
|
+
this.set({ debugOpen: !state.debugOpen });
|
|
65
|
+
},
|
|
66
|
+
toggleStats() {
|
|
67
|
+
this.set({ showStats: !state.showStats });
|
|
68
|
+
},
|
|
69
|
+
toggleCamera() {
|
|
70
|
+
this.set({ cameraOpen: !state.cameraOpen });
|
|
71
|
+
},
|
|
72
|
+
toggleNarration() {
|
|
73
|
+
this.set({ showNarration: !state.showNarration });
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
export { uiStore };
|
|
77
|
+
export default uiStore;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for HexGrid Visualization
|
|
3
|
+
*/
|
|
4
|
+
import type { RefObject } from 'react';
|
|
5
|
+
import type { HexGridFeatureFlags } from './features';
|
|
6
|
+
export type { HexGridFeatureFlags } from './features';
|
|
7
|
+
/**
|
|
8
|
+
* Photo type for HexGrid visualization
|
|
9
|
+
*
|
|
10
|
+
* This is the unified Photo type used throughout the hexgrid-3d package.
|
|
11
|
+
* It includes all fields needed for display, media playback, and analytics.
|
|
12
|
+
*/
|
|
13
|
+
export interface Photo {
|
|
14
|
+
id: string;
|
|
15
|
+
title: string;
|
|
16
|
+
imageUrl: string;
|
|
17
|
+
url?: string;
|
|
18
|
+
thumbnailUrl?: string;
|
|
19
|
+
alt: string;
|
|
20
|
+
category: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
source: string;
|
|
23
|
+
sourceUrl?: string;
|
|
24
|
+
createdAt?: string;
|
|
25
|
+
shopUrl?: string;
|
|
26
|
+
location?: string;
|
|
27
|
+
isVideo?: boolean;
|
|
28
|
+
videoUrl?: string;
|
|
29
|
+
isTweet?: boolean;
|
|
30
|
+
tweetUrl?: string;
|
|
31
|
+
redditUrl?: string;
|
|
32
|
+
durationSeconds?: number;
|
|
33
|
+
velocity?: number;
|
|
34
|
+
userId?: string;
|
|
35
|
+
username?: string;
|
|
36
|
+
platform?: string;
|
|
37
|
+
author?: string;
|
|
38
|
+
authorUrl?: string;
|
|
39
|
+
views?: number;
|
|
40
|
+
likes?: number;
|
|
41
|
+
comments?: number;
|
|
42
|
+
shares?: number;
|
|
43
|
+
upvotes?: number;
|
|
44
|
+
retweets?: number;
|
|
45
|
+
replies?: number;
|
|
46
|
+
age_in_hours?: number;
|
|
47
|
+
dominantColor?: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Generic item that can represent any data object in the grid
|
|
51
|
+
* Extends Photo for backward compatibility while adding generic data support
|
|
52
|
+
*/
|
|
53
|
+
export interface GridItem<T = unknown> {
|
|
54
|
+
id: string;
|
|
55
|
+
type: string;
|
|
56
|
+
imageUrl?: string;
|
|
57
|
+
thumbnailUrl?: string;
|
|
58
|
+
videoUrl?: string;
|
|
59
|
+
title?: string;
|
|
60
|
+
alt?: string;
|
|
61
|
+
description?: string;
|
|
62
|
+
category?: string;
|
|
63
|
+
data?: T;
|
|
64
|
+
ontologyMetadata?: {
|
|
65
|
+
entityId?: string;
|
|
66
|
+
entityType?: string | string[];
|
|
67
|
+
properties?: Record<string, unknown>;
|
|
68
|
+
provenance?: {
|
|
69
|
+
source: string;
|
|
70
|
+
extractedAt: string;
|
|
71
|
+
confidence: number;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
velocity?: number;
|
|
75
|
+
source?: string;
|
|
76
|
+
sourceUrl?: string;
|
|
77
|
+
createdAt?: string;
|
|
78
|
+
metrics?: Record<string, number>;
|
|
79
|
+
url?: string;
|
|
80
|
+
userId?: string;
|
|
81
|
+
username?: string;
|
|
82
|
+
platform?: string;
|
|
83
|
+
author?: string;
|
|
84
|
+
authorUrl?: string;
|
|
85
|
+
likes?: number;
|
|
86
|
+
views?: number;
|
|
87
|
+
comments?: number;
|
|
88
|
+
dominantColor?: string;
|
|
89
|
+
}
|
|
90
|
+
export interface HexGridProps {
|
|
91
|
+
photos: Photo[];
|
|
92
|
+
onHexClick?: (photo: Photo) => void;
|
|
93
|
+
spacing?: number;
|
|
94
|
+
canvasRef?: RefObject<HTMLCanvasElement>;
|
|
95
|
+
onLeaderboardUpdate?: (leaderboard: any) => void;
|
|
96
|
+
autoplayQueueLimit?: number;
|
|
97
|
+
onAutoplayQueueLimitChange?: (limit: number) => void;
|
|
98
|
+
modalOpen?: boolean;
|
|
99
|
+
userId?: string;
|
|
100
|
+
username?: string;
|
|
101
|
+
featureFlags?: HexGridFeatureFlags;
|
|
102
|
+
enableEnhanced?: boolean;
|
|
103
|
+
enhancedConfig?: {
|
|
104
|
+
useWasm?: boolean;
|
|
105
|
+
enableParticles?: boolean;
|
|
106
|
+
enableFlowField?: boolean;
|
|
107
|
+
};
|
|
108
|
+
onTerritoryEvent?: (event: {
|
|
109
|
+
type: 'conquest' | 'birth' | 'death';
|
|
110
|
+
toOwner: number;
|
|
111
|
+
fromOwner?: number;
|
|
112
|
+
}) => Promise<void>;
|
|
113
|
+
}
|
|
114
|
+
export interface UIState {
|
|
115
|
+
debugOpen: boolean;
|
|
116
|
+
showStats: boolean;
|
|
117
|
+
cameraOpen: boolean;
|
|
118
|
+
showNarration: boolean;
|
|
119
|
+
}
|
|
120
|
+
export interface WorkerDebug {
|
|
121
|
+
curveUDeg: number;
|
|
122
|
+
curveVDeg: number;
|
|
123
|
+
batchPerFrame: number;
|
|
124
|
+
[key: string]: any;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IAGd,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO;IAEnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IAGb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,IAAI,CAAC,EAAE,CAAC,CAAC;IAGT,gBAAgB,CAAC,EAAE;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC/B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,UAAU,CAAC,EAAE;YACX,MAAM,EAAE,MAAM,CAAC;YACf,WAAW,EAAE,MAAM,CAAC;YACpB,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;KACH,CAAC;IAGF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACzC,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,KAAK,IAAI,CAAC;IACjD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE;QACf,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;IACF,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE;QACzB,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;QACrC,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure utility functions for HexGrid component.
|
|
3
|
+
* These functions have NO side effects and are deterministic.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Get proxied image URL for preview.redd.it images (CORS issues).
|
|
7
|
+
* External preview URLs work fine without proxying.
|
|
8
|
+
* @pure - No side effects, deterministic
|
|
9
|
+
* @param imageUrl Original image URL
|
|
10
|
+
* @returns Proxied URL if needed, otherwise original URL
|
|
11
|
+
*/
|
|
12
|
+
export declare function getProxiedImageUrl(imageUrl: string): string;
|
|
13
|
+
//# sourceMappingURL=image-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-utils.d.ts","sourceRoot":"","sources":["../../src/utils/image-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAe3D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure utility functions for HexGrid component.
|
|
3
|
+
* These functions have NO side effects and are deterministic.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Get proxied image URL for preview.redd.it images (CORS issues).
|
|
7
|
+
* External preview URLs work fine without proxying.
|
|
8
|
+
* @pure - No side effects, deterministic
|
|
9
|
+
* @param imageUrl Original image URL
|
|
10
|
+
* @returns Proxied URL if needed, otherwise original URL
|
|
11
|
+
*/
|
|
12
|
+
export function getProxiedImageUrl(imageUrl) {
|
|
13
|
+
if (!imageUrl || typeof imageUrl !== 'string') {
|
|
14
|
+
return imageUrl;
|
|
15
|
+
}
|
|
16
|
+
// Only proxy preview.redd.it URLs (they have CORS issues)
|
|
17
|
+
// external-preview.redd.it URLs work fine, so don't proxy them
|
|
18
|
+
if (imageUrl.includes('preview.redd.it') &&
|
|
19
|
+
!imageUrl.includes('external-preview.redd.it')) {
|
|
20
|
+
return `/api/proxy-image?url=${encodeURIComponent(imageUrl)}`;
|
|
21
|
+
}
|
|
22
|
+
return imageUrl;
|
|
23
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript wrapper for hexgrid-wasm
|
|
3
|
+
*
|
|
4
|
+
* Provides a seamless interface to the Rust/WASM module with
|
|
5
|
+
* automatic fallback to pure TypeScript implementations.
|
|
6
|
+
*
|
|
7
|
+
* @module wasm/HexGridWasmWrapper
|
|
8
|
+
*/
|
|
9
|
+
export interface WasmCellState {
|
|
10
|
+
owner: number;
|
|
11
|
+
population: number;
|
|
12
|
+
infectedBy: number;
|
|
13
|
+
infection: number;
|
|
14
|
+
resistance: number;
|
|
15
|
+
flags: number;
|
|
16
|
+
}
|
|
17
|
+
export interface WasmFluidSource {
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
radius: number;
|
|
21
|
+
density: number;
|
|
22
|
+
velocityX: number;
|
|
23
|
+
velocityY: number;
|
|
24
|
+
color?: [number, number, number];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Wrapper class that provides TypeScript interface to WASM
|
|
28
|
+
* with automatic fallback
|
|
29
|
+
*/
|
|
30
|
+
export declare class HexGridWasmWrapper {
|
|
31
|
+
private readonly width;
|
|
32
|
+
private readonly height;
|
|
33
|
+
private static module;
|
|
34
|
+
private static loading;
|
|
35
|
+
private static loadFailed;
|
|
36
|
+
private wasmInstance;
|
|
37
|
+
private fallbackData;
|
|
38
|
+
private constructor();
|
|
39
|
+
/**
|
|
40
|
+
* Load the WASM module
|
|
41
|
+
*/
|
|
42
|
+
static loadModule(): Promise<boolean>;
|
|
43
|
+
/**
|
|
44
|
+
* Create a new HexGrid wrapper
|
|
45
|
+
*/
|
|
46
|
+
static create(width: number, height: number): Promise<HexGridWasmWrapper>;
|
|
47
|
+
/**
|
|
48
|
+
* Check if WASM is being used
|
|
49
|
+
*/
|
|
50
|
+
isUsingWasm(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Get cell owner
|
|
53
|
+
*/
|
|
54
|
+
getOwner(index: number): number;
|
|
55
|
+
/**
|
|
56
|
+
* Set cell owner
|
|
57
|
+
*/
|
|
58
|
+
setOwner(index: number, owner: number): void;
|
|
59
|
+
/**
|
|
60
|
+
* Set cell population
|
|
61
|
+
*/
|
|
62
|
+
setPopulation(index: number, population: number): void;
|
|
63
|
+
/**
|
|
64
|
+
* Get neighbors of a cell
|
|
65
|
+
*/
|
|
66
|
+
getNeighbors(index: number): Int32Array;
|
|
67
|
+
/**
|
|
68
|
+
* Step the infection simulation
|
|
69
|
+
*/
|
|
70
|
+
stepInfection(infectionRate?: number, infectionThreshold?: number): number[];
|
|
71
|
+
/**
|
|
72
|
+
* Find connected regions for an owner
|
|
73
|
+
*/
|
|
74
|
+
findConnectedRegions(owner: number): number[];
|
|
75
|
+
/**
|
|
76
|
+
* Find border cells for an owner
|
|
77
|
+
*/
|
|
78
|
+
findBorderCells(owner: number): number[];
|
|
79
|
+
/**
|
|
80
|
+
* Find path between two cells
|
|
81
|
+
*/
|
|
82
|
+
findPath(start: number, end: number, ownerFilter?: number): number[];
|
|
83
|
+
/**
|
|
84
|
+
* Get territory counts
|
|
85
|
+
*/
|
|
86
|
+
getTerritoryCounts(): Map<number, number>;
|
|
87
|
+
/**
|
|
88
|
+
* Compute Gini coefficient
|
|
89
|
+
*/
|
|
90
|
+
computeGini(): number;
|
|
91
|
+
/**
|
|
92
|
+
* Compute Shannon entropy
|
|
93
|
+
*/
|
|
94
|
+
computeEntropy(): number;
|
|
95
|
+
/**
|
|
96
|
+
* K-means clustering
|
|
97
|
+
*/
|
|
98
|
+
kmeansCluster(k: number, iterations?: number): number[];
|
|
99
|
+
/**
|
|
100
|
+
* Get size
|
|
101
|
+
*/
|
|
102
|
+
size(): number;
|
|
103
|
+
/**
|
|
104
|
+
* Clear all cells
|
|
105
|
+
*/
|
|
106
|
+
clear(): void;
|
|
107
|
+
/**
|
|
108
|
+
* Dispose resources
|
|
109
|
+
*/
|
|
110
|
+
dispose(): void;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Flow Field WASM Wrapper
|
|
114
|
+
*/
|
|
115
|
+
export declare class FlowFieldWasmWrapper {
|
|
116
|
+
private readonly width;
|
|
117
|
+
private readonly height;
|
|
118
|
+
private wasmInstance;
|
|
119
|
+
private fallbackData;
|
|
120
|
+
private constructor();
|
|
121
|
+
static create(width: number, height: number): Promise<FlowFieldWasmWrapper>;
|
|
122
|
+
isUsingWasm(): boolean;
|
|
123
|
+
addSource(x: number, y: number, strength: number): void;
|
|
124
|
+
addVortex(x: number, y: number, strength: number): void;
|
|
125
|
+
sample(x: number, y: number): [number, number];
|
|
126
|
+
computeDivergence(): Float32Array;
|
|
127
|
+
computeCurl(): Float32Array;
|
|
128
|
+
clear(): void;
|
|
129
|
+
dispose(): void;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=HexGridWasmWrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HexGridWasmWrapper.d.ts","sourceRoot":"","sources":["../../src/wasm/HexGridWasmWrapper.ts"],"names":[],"mappings":"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"}
|