@bendyline/squisq-react 1.3.1 → 1.4.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/index.d.ts +766 -35
- package/dist/index.js +4793 -33
- package/dist/index.js.map +1 -1
- package/dist/squisq-player.css +1 -1
- package/dist/squisq-player.css.map +1 -1
- package/dist/squisq-player.global.js +17 -13
- package/dist/squisq-player.global.js.map +1 -1
- package/dist/standalone-source.js +1 -1
- package/package.json +3 -2
- package/src/BlockRenderer.tsx +15 -7
- package/src/DocPlayer.tsx +65 -12
- package/src/DocProgressBar.tsx +21 -3
- package/src/LinearDocView.tsx +11 -197
- package/src/MarkdownRenderer.tsx +165 -41
- package/src/MediaClipLayer.tsx +135 -0
- package/src/__tests__/DocPlayer.test.tsx +51 -0
- package/src/__tests__/DocProgressBar.test.tsx +76 -0
- package/src/__tests__/MarkdownRenderer.test.tsx +95 -1
- package/src/__tests__/PathLayer.test.tsx +73 -0
- package/src/__tests__/fillStyle.test.tsx +112 -0
- package/src/__tests__/transitionStyles.test.ts +125 -0
- package/src/__tests__/useDocPlayback.transition.test.ts +70 -0
- package/src/hooks/useAudioSync.ts +14 -1
- package/src/hooks/useDocPlayback.ts +81 -100
- package/src/hooks/useMediaSchedule.ts +39 -0
- package/src/index.ts +7 -0
- package/src/layers/ImageLayer.tsx +11 -1
- package/src/layers/PathLayer.tsx +146 -0
- package/src/layers/ShapeLayer.tsx +27 -5
- package/src/layers/TextLayer.tsx +395 -22
- package/src/layers/VideoLayer.tsx +16 -9
- package/src/layers/index.ts +1 -0
- package/src/styles/doc-animations.css +1857 -2
- package/src/utils/fillStyle.tsx +148 -0
- package/dist/BlockRenderer.d.ts +0 -37
- package/dist/BlockRenderer.d.ts.map +0 -1
- package/dist/BlockRenderer.js +0 -54
- package/dist/BlockRenderer.js.map +0 -1
- package/dist/CaptionOverlay.d.ts +0 -33
- package/dist/CaptionOverlay.d.ts.map +0 -1
- package/dist/CaptionOverlay.js +0 -44
- package/dist/CaptionOverlay.js.map +0 -1
- package/dist/DocControlsBottom.d.ts +0 -28
- package/dist/DocControlsBottom.d.ts.map +0 -1
- package/dist/DocControlsBottom.js +0 -27
- package/dist/DocControlsBottom.js.map +0 -1
- package/dist/DocControlsOverlay.d.ts +0 -28
- package/dist/DocControlsOverlay.d.ts.map +0 -1
- package/dist/DocControlsOverlay.js +0 -80
- package/dist/DocControlsOverlay.js.map +0 -1
- package/dist/DocControlsSidebar.d.ts +0 -27
- package/dist/DocControlsSidebar.d.ts.map +0 -1
- package/dist/DocControlsSidebar.js +0 -10
- package/dist/DocControlsSidebar.js.map +0 -1
- package/dist/DocControlsSlideshow.d.ts +0 -20
- package/dist/DocControlsSlideshow.d.ts.map +0 -1
- package/dist/DocControlsSlideshow.js +0 -69
- package/dist/DocControlsSlideshow.js.map +0 -1
- package/dist/DocPlayer.d.ts +0 -97
- package/dist/DocPlayer.d.ts.map +0 -1
- package/dist/DocPlayer.js +0 -657
- package/dist/DocPlayer.js.map +0 -1
- package/dist/DocPlayerWithSidebar.d.ts +0 -41
- package/dist/DocPlayerWithSidebar.d.ts.map +0 -1
- package/dist/DocPlayerWithSidebar.js +0 -69
- package/dist/DocPlayerWithSidebar.js.map +0 -1
- package/dist/DocProgressBar.d.ts +0 -31
- package/dist/DocProgressBar.d.ts.map +0 -1
- package/dist/DocProgressBar.js +0 -122
- package/dist/DocProgressBar.js.map +0 -1
- package/dist/InlineAudioPlayer.d.ts +0 -15
- package/dist/InlineAudioPlayer.d.ts.map +0 -1
- package/dist/InlineAudioPlayer.js +0 -22
- package/dist/InlineAudioPlayer.js.map +0 -1
- package/dist/InlineVideoPlayer.d.ts +0 -21
- package/dist/InlineVideoPlayer.d.ts.map +0 -1
- package/dist/InlineVideoPlayer.js +0 -29
- package/dist/InlineVideoPlayer.js.map +0 -1
- package/dist/LinearDocView.d.ts +0 -73
- package/dist/LinearDocView.d.ts.map +0 -1
- package/dist/LinearDocView.js +0 -451
- package/dist/LinearDocView.js.map +0 -1
- package/dist/MarkdownRenderer.d.ts +0 -32
- package/dist/MarkdownRenderer.d.ts.map +0 -1
- package/dist/MarkdownRenderer.js +0 -259
- package/dist/MarkdownRenderer.js.map +0 -1
- package/dist/SocialCaptionOverlay.d.ts +0 -27
- package/dist/SocialCaptionOverlay.d.ts.map +0 -1
- package/dist/SocialCaptionOverlay.js +0 -185
- package/dist/SocialCaptionOverlay.js.map +0 -1
- package/dist/__tests__/BlockRenderer.test.d.ts +0 -2
- package/dist/__tests__/BlockRenderer.test.d.ts.map +0 -1
- package/dist/__tests__/BlockRenderer.test.js +0 -82
- package/dist/__tests__/BlockRenderer.test.js.map +0 -1
- package/dist/__tests__/DocControlsSlideshow.test.d.ts +0 -2
- package/dist/__tests__/DocControlsSlideshow.test.d.ts.map +0 -1
- package/dist/__tests__/DocControlsSlideshow.test.js +0 -89
- package/dist/__tests__/DocControlsSlideshow.test.js.map +0 -1
- package/dist/__tests__/JsonView.test.d.ts +0 -2
- package/dist/__tests__/JsonView.test.d.ts.map +0 -1
- package/dist/__tests__/JsonView.test.js +0 -93
- package/dist/__tests__/JsonView.test.js.map +0 -1
- package/dist/__tests__/LinearDocView.test.d.ts +0 -2
- package/dist/__tests__/LinearDocView.test.d.ts.map +0 -1
- package/dist/__tests__/LinearDocView.test.js +0 -250
- package/dist/__tests__/LinearDocView.test.js.map +0 -1
- package/dist/__tests__/MarkdownRenderer.test.d.ts +0 -2
- package/dist/__tests__/MarkdownRenderer.test.d.ts.map +0 -1
- package/dist/__tests__/MarkdownRenderer.test.js +0 -208
- package/dist/__tests__/MarkdownRenderer.test.js.map +0 -1
- package/dist/__tests__/TableLayer.test.d.ts +0 -2
- package/dist/__tests__/TableLayer.test.d.ts.map +0 -1
- package/dist/__tests__/TableLayer.test.js +0 -121
- package/dist/__tests__/TableLayer.test.js.map +0 -1
- package/dist/__tests__/exports.test.d.ts +0 -2
- package/dist/__tests__/exports.test.d.ts.map +0 -1
- package/dist/__tests__/exports.test.js +0 -48
- package/dist/__tests__/exports.test.js.map +0 -1
- package/dist/hooks/AudioProvider.d.ts +0 -71
- package/dist/hooks/AudioProvider.d.ts.map +0 -1
- package/dist/hooks/AudioProvider.js +0 -52
- package/dist/hooks/AudioProvider.js.map +0 -1
- package/dist/hooks/MediaContext.d.ts +0 -35
- package/dist/hooks/MediaContext.d.ts.map +0 -1
- package/dist/hooks/MediaContext.js +0 -72
- package/dist/hooks/MediaContext.js.map +0 -1
- package/dist/hooks/index.d.ts +0 -6
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js +0 -5
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/useAudioSync.d.ts +0 -18
- package/dist/hooks/useAudioSync.d.ts.map +0 -1
- package/dist/hooks/useAudioSync.js +0 -340
- package/dist/hooks/useAudioSync.js.map +0 -1
- package/dist/hooks/useAutoSurface.d.ts +0 -11
- package/dist/hooks/useAutoSurface.d.ts.map +0 -1
- package/dist/hooks/useAutoSurface.js +0 -24
- package/dist/hooks/useAutoSurface.js.map +0 -1
- package/dist/hooks/useDocPlayback.d.ts +0 -47
- package/dist/hooks/useDocPlayback.d.ts.map +0 -1
- package/dist/hooks/useDocPlayback.js +0 -179
- package/dist/hooks/useDocPlayback.js.map +0 -1
- package/dist/hooks/useViewportOrientation.d.ts +0 -31
- package/dist/hooks/useViewportOrientation.d.ts.map +0 -1
- package/dist/hooks/useViewportOrientation.js +0 -92
- package/dist/hooks/useViewportOrientation.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/jsonView/JsonView.d.ts +0 -26
- package/dist/jsonView/JsonView.d.ts.map +0 -1
- package/dist/jsonView/JsonView.js +0 -12
- package/dist/jsonView/JsonView.js.map +0 -1
- package/dist/jsonView/RenderNode.d.ts +0 -22
- package/dist/jsonView/RenderNode.d.ts.map +0 -1
- package/dist/jsonView/RenderNode.js +0 -30
- package/dist/jsonView/RenderNode.js.map +0 -1
- package/dist/jsonView/index.d.ts +0 -3
- package/dist/jsonView/index.d.ts.map +0 -1
- package/dist/jsonView/index.js +0 -2
- package/dist/jsonView/index.js.map +0 -1
- package/dist/jsonView/useJsonViewTokens.d.ts +0 -14
- package/dist/jsonView/useJsonViewTokens.d.ts.map +0 -1
- package/dist/jsonView/useJsonViewTokens.js +0 -34
- package/dist/jsonView/useJsonViewTokens.js.map +0 -1
- package/dist/jsonView/viewers.d.ts +0 -30
- package/dist/jsonView/viewers.d.ts.map +0 -1
- package/dist/jsonView/viewers.js +0 -226
- package/dist/jsonView/viewers.js.map +0 -1
- package/dist/layers/ImageLayer.d.ts +0 -23
- package/dist/layers/ImageLayer.d.ts.map +0 -1
- package/dist/layers/ImageLayer.js +0 -104
- package/dist/layers/ImageLayer.js.map +0 -1
- package/dist/layers/MapLayer.d.ts +0 -29
- package/dist/layers/MapLayer.d.ts.map +0 -1
- package/dist/layers/MapLayer.js +0 -97
- package/dist/layers/MapLayer.js.map +0 -1
- package/dist/layers/ShapeLayer.d.ts +0 -20
- package/dist/layers/ShapeLayer.d.ts.map +0 -1
- package/dist/layers/ShapeLayer.js +0 -39
- package/dist/layers/ShapeLayer.js.map +0 -1
- package/dist/layers/TableLayer.d.ts +0 -23
- package/dist/layers/TableLayer.d.ts.map +0 -1
- package/dist/layers/TableLayer.js +0 -58
- package/dist/layers/TableLayer.js.map +0 -1
- package/dist/layers/TextLayer.d.ts +0 -23
- package/dist/layers/TextLayer.d.ts.map +0 -1
- package/dist/layers/TextLayer.js +0 -126
- package/dist/layers/TextLayer.js.map +0 -1
- package/dist/layers/VideoLayer.d.ts +0 -40
- package/dist/layers/VideoLayer.d.ts.map +0 -1
- package/dist/layers/VideoLayer.js +0 -105
- package/dist/layers/VideoLayer.js.map +0 -1
- package/dist/layers/index.d.ts +0 -6
- package/dist/layers/index.d.ts.map +0 -1
- package/dist/layers/index.js +0 -6
- package/dist/layers/index.js.map +0 -1
- package/dist/standalone-entry.d.ts +0 -69
- package/dist/standalone-entry.d.ts.map +0 -1
- package/dist/standalone-entry.js +0 -185
- package/dist/standalone-entry.js.map +0 -1
- package/dist/types.d.ts +0 -154
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -21
- package/dist/types.js.map +0 -1
- package/dist/utils/animationUtils.d.ts +0 -8
- package/dist/utils/animationUtils.d.ts.map +0 -1
- package/dist/utils/animationUtils.js +0 -8
- package/dist/utils/animationUtils.js.map +0 -1
- package/dist/utils/layerUtils.d.ts +0 -17
- package/dist/utils/layerUtils.d.ts.map +0 -1
- package/dist/utils/layerUtils.js +0 -37
- package/dist/utils/layerUtils.js.map +0 -1
- package/dist/utils/mapTileUtils.d.ts +0 -105
- package/dist/utils/mapTileUtils.d.ts.map +0 -1
- package/dist/utils/mapTileUtils.js +0 -268
- package/dist/utils/mapTileUtils.js.map +0 -1
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Map Tile Utilities
|
|
3
|
-
*
|
|
4
|
-
* Functions for fetching and composing map tiles from free/open-source providers.
|
|
5
|
-
* Converts lat/lng to tile coordinates and composites multiple tiles into a
|
|
6
|
-
* single image for SVG embedding.
|
|
7
|
-
*
|
|
8
|
-
* Supported Providers (all free with attribution):
|
|
9
|
-
* - terrain: OpenTopoMap (CC-BY-SA)
|
|
10
|
-
* - road: OpenStreetMap (ODbL)
|
|
11
|
-
* - satellite: ESRI World Imagery (free with attribution)
|
|
12
|
-
* - toner: Stadia/Stamen Toner (free tier)
|
|
13
|
-
* - watercolor: Stadia/Stamen Watercolor (free tier)
|
|
14
|
-
*
|
|
15
|
-
* See docs/MAP_TILES.md for full provider details and terms.
|
|
16
|
-
*/
|
|
17
|
-
/**
|
|
18
|
-
* Free tile providers for each map style.
|
|
19
|
-
* All require attribution to be displayed.
|
|
20
|
-
*/
|
|
21
|
-
export const TILE_PROVIDERS = {
|
|
22
|
-
terrain: {
|
|
23
|
-
url: 'https://tile.opentopomap.org/{z}/{x}/{y}.png',
|
|
24
|
-
attribution: 'Map: OpenTopoMap (CC-BY-SA)',
|
|
25
|
-
maxZoom: 17,
|
|
26
|
-
},
|
|
27
|
-
road: {
|
|
28
|
-
url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
|
|
29
|
-
attribution: '© OpenStreetMap contributors',
|
|
30
|
-
maxZoom: 19,
|
|
31
|
-
},
|
|
32
|
-
satellite: {
|
|
33
|
-
url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
|
|
34
|
-
attribution: 'Imagery: Esri, Maxar, Earthstar',
|
|
35
|
-
maxZoom: 18,
|
|
36
|
-
},
|
|
37
|
-
toner: {
|
|
38
|
-
url: 'https://tiles.stadiamaps.com/tiles/stamen_toner/{z}/{x}/{y}.png',
|
|
39
|
-
attribution: 'Map: Stadia Maps, Stamen Design',
|
|
40
|
-
maxZoom: 20,
|
|
41
|
-
},
|
|
42
|
-
watercolor: {
|
|
43
|
-
url: 'https://tiles.stadiamaps.com/tiles/stamen_watercolor/{z}/{x}/{y}.jpg',
|
|
44
|
-
attribution: 'Map: Stadia Maps, Stamen Design',
|
|
45
|
-
maxZoom: 16,
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
/**
|
|
49
|
-
* Convert latitude/longitude to tile coordinates at a given zoom level.
|
|
50
|
-
* Uses Web Mercator projection (EPSG:3857).
|
|
51
|
-
*/
|
|
52
|
-
export function latLngToTile(lat, lng, zoom) {
|
|
53
|
-
const n = Math.pow(2, zoom);
|
|
54
|
-
const x = Math.floor(((lng + 180) / 360) * n);
|
|
55
|
-
const latRad = (lat * Math.PI) / 180;
|
|
56
|
-
const y = Math.floor(((1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2) * n);
|
|
57
|
-
return { x, y };
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Convert tile coordinates back to lat/lng (top-left corner of tile).
|
|
61
|
-
*/
|
|
62
|
-
export function tileToLatLng(x, y, zoom) {
|
|
63
|
-
const n = Math.pow(2, zoom);
|
|
64
|
-
const lng = (x / n) * 360 - 180;
|
|
65
|
-
const latRad = Math.atan(Math.sinh(Math.PI * (1 - (2 * y) / n)));
|
|
66
|
-
const lat = (latRad * 180) / Math.PI;
|
|
67
|
-
return { lat, lng };
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Get the pixel offset within a tile for a given lat/lng.
|
|
71
|
-
*/
|
|
72
|
-
export function getPixelOffset(lat, lng, zoom, tileSize = 256) {
|
|
73
|
-
const n = Math.pow(2, zoom);
|
|
74
|
-
const xTile = ((lng + 180) / 360) * n;
|
|
75
|
-
const latRad = (lat * Math.PI) / 180;
|
|
76
|
-
const yTile = ((1 - Math.log(Math.tan(latRad) + 1 / Math.cos(latRad)) / Math.PI) / 2) * n;
|
|
77
|
-
return {
|
|
78
|
-
x: (xTile - Math.floor(xTile)) * tileSize,
|
|
79
|
-
y: (yTile - Math.floor(yTile)) * tileSize,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Calculate which tiles are needed to cover a viewport centered on lat/lng.
|
|
84
|
-
*/
|
|
85
|
-
export function getTilesForViewport(centerLat, centerLng, zoom, viewportWidth, viewportHeight, tileSize = 256) {
|
|
86
|
-
const centerTile = latLngToTile(centerLat, centerLng, zoom);
|
|
87
|
-
const pixelOffset = getPixelOffset(centerLat, centerLng, zoom, tileSize);
|
|
88
|
-
// How many tiles we need in each direction
|
|
89
|
-
const tilesX = Math.ceil(viewportWidth / tileSize) + 1;
|
|
90
|
-
const tilesY = Math.ceil(viewportHeight / tileSize) + 1;
|
|
91
|
-
// Start tile offset
|
|
92
|
-
const startX = centerTile.x - Math.floor(tilesX / 2);
|
|
93
|
-
const startY = centerTile.y - Math.floor(tilesY / 2);
|
|
94
|
-
// Screen position of the center tile
|
|
95
|
-
const centerScreenX = viewportWidth / 2 - pixelOffset.x;
|
|
96
|
-
const centerScreenY = viewportHeight / 2 - pixelOffset.y;
|
|
97
|
-
const tiles = [];
|
|
98
|
-
for (let dy = 0; dy < tilesY; dy++) {
|
|
99
|
-
for (let dx = 0; dx < tilesX; dx++) {
|
|
100
|
-
const tileX = startX + dx;
|
|
101
|
-
const tileY = startY + dy;
|
|
102
|
-
const screenX = centerScreenX + (tileX - centerTile.x) * tileSize;
|
|
103
|
-
const screenY = centerScreenY + (tileY - centerTile.y) * tileSize;
|
|
104
|
-
tiles.push({ x: tileX, y: tileY, screenX, screenY });
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
return tiles;
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Build a tile URL from the provider template.
|
|
111
|
-
*/
|
|
112
|
-
export function buildTileUrl(provider, x, y, z) {
|
|
113
|
-
return provider.url.replace('{z}', String(z)).replace('{x}', String(x)).replace('{y}', String(y));
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Fetch a single tile image as an HTMLImageElement.
|
|
117
|
-
*/
|
|
118
|
-
async function fetchTileImage(url) {
|
|
119
|
-
return new Promise((resolve, reject) => {
|
|
120
|
-
const img = new Image();
|
|
121
|
-
img.crossOrigin = 'anonymous';
|
|
122
|
-
img.onload = () => resolve(img);
|
|
123
|
-
img.onerror = () => reject(new Error(`Failed to load tile: ${url}`));
|
|
124
|
-
img.src = url;
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Compose map tiles into a single data URL image.
|
|
129
|
-
*
|
|
130
|
-
* This is the main function for generating map images for blocks.
|
|
131
|
-
* It fetches all needed tiles, composites them on a canvas, and
|
|
132
|
-
* returns a data URL that can be used in an SVG <image> element.
|
|
133
|
-
*/
|
|
134
|
-
export async function composeMapImage(options) {
|
|
135
|
-
const { center, zoom, style, width, height, markers = [], showAttribution = true } = options;
|
|
136
|
-
const provider = TILE_PROVIDERS[style];
|
|
137
|
-
const tileSize = provider.tileSize || 256;
|
|
138
|
-
const clampedZoom = Math.min(zoom, provider.maxZoom);
|
|
139
|
-
// Create canvas
|
|
140
|
-
const canvas = document.createElement('canvas');
|
|
141
|
-
canvas.width = width;
|
|
142
|
-
canvas.height = height;
|
|
143
|
-
const ctx = canvas.getContext('2d');
|
|
144
|
-
if (!ctx)
|
|
145
|
-
throw new Error('Failed to get canvas context');
|
|
146
|
-
// Fill with a neutral background in case tiles fail to load
|
|
147
|
-
ctx.fillStyle = style === 'toner' ? '#ffffff' : '#e5e7eb';
|
|
148
|
-
ctx.fillRect(0, 0, width, height);
|
|
149
|
-
// Get tiles needed
|
|
150
|
-
const tiles = getTilesForViewport(center.lat, center.lng, clampedZoom, width, height, tileSize);
|
|
151
|
-
// Fetch and draw tiles
|
|
152
|
-
const tilePromises = tiles.map(async (tile) => {
|
|
153
|
-
const url = buildTileUrl(provider, tile.x, tile.y, clampedZoom);
|
|
154
|
-
try {
|
|
155
|
-
const img = await fetchTileImage(url);
|
|
156
|
-
ctx.drawImage(img, tile.screenX, tile.screenY, tileSize, tileSize);
|
|
157
|
-
}
|
|
158
|
-
catch (err) {
|
|
159
|
-
// Tile failed to load - leave background color
|
|
160
|
-
console.warn(`Tile load failed: ${url}`, err);
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
await Promise.all(tilePromises);
|
|
164
|
-
// Draw markers
|
|
165
|
-
for (const marker of markers) {
|
|
166
|
-
drawMarker(ctx, marker, center, clampedZoom, width, height, tileSize);
|
|
167
|
-
}
|
|
168
|
-
// Draw attribution
|
|
169
|
-
if (showAttribution) {
|
|
170
|
-
drawAttribution(ctx, provider.attribution, width, height);
|
|
171
|
-
}
|
|
172
|
-
return canvas.toDataURL('image/png');
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Draw a marker on the canvas.
|
|
176
|
-
*/
|
|
177
|
-
function drawMarker(ctx, marker, center, zoom, width, height, tileSize) {
|
|
178
|
-
// Calculate screen position of marker relative to center
|
|
179
|
-
const centerTile = latLngToTile(center.lat, center.lng, zoom);
|
|
180
|
-
const markerTile = latLngToTile(marker.lat, marker.lng, zoom);
|
|
181
|
-
const centerOffset = getPixelOffset(center.lat, center.lng, zoom, tileSize);
|
|
182
|
-
const markerOffset = getPixelOffset(marker.lat, marker.lng, zoom, tileSize);
|
|
183
|
-
const dx = (markerTile.x - centerTile.x) * tileSize + (markerOffset.x - centerOffset.x);
|
|
184
|
-
const dy = (markerTile.y - centerTile.y) * tileSize + (markerOffset.y - centerOffset.y);
|
|
185
|
-
const screenX = width / 2 + dx;
|
|
186
|
-
const screenY = height / 2 + dy;
|
|
187
|
-
// Draw marker
|
|
188
|
-
const color = marker.color || '#ef4444';
|
|
189
|
-
const icon = marker.icon || 'pin';
|
|
190
|
-
ctx.save();
|
|
191
|
-
if (icon === 'pin') {
|
|
192
|
-
// Draw pin shape
|
|
193
|
-
ctx.fillStyle = color;
|
|
194
|
-
ctx.beginPath();
|
|
195
|
-
ctx.arc(screenX, screenY - 12, 8, Math.PI, 0, false);
|
|
196
|
-
ctx.lineTo(screenX, screenY);
|
|
197
|
-
ctx.closePath();
|
|
198
|
-
ctx.fill();
|
|
199
|
-
// White dot in center
|
|
200
|
-
ctx.fillStyle = '#ffffff';
|
|
201
|
-
ctx.beginPath();
|
|
202
|
-
ctx.arc(screenX, screenY - 12, 3, 0, Math.PI * 2);
|
|
203
|
-
ctx.fill();
|
|
204
|
-
}
|
|
205
|
-
else if (icon === 'circle') {
|
|
206
|
-
ctx.fillStyle = color;
|
|
207
|
-
ctx.beginPath();
|
|
208
|
-
ctx.arc(screenX, screenY, 8, 0, Math.PI * 2);
|
|
209
|
-
ctx.fill();
|
|
210
|
-
ctx.strokeStyle = '#ffffff';
|
|
211
|
-
ctx.lineWidth = 2;
|
|
212
|
-
ctx.stroke();
|
|
213
|
-
}
|
|
214
|
-
else if (icon === 'star') {
|
|
215
|
-
ctx.fillStyle = color;
|
|
216
|
-
drawStar(ctx, screenX, screenY, 5, 10, 5);
|
|
217
|
-
ctx.fill();
|
|
218
|
-
}
|
|
219
|
-
// Draw label if present
|
|
220
|
-
if (marker.label) {
|
|
221
|
-
ctx.fillStyle = '#1f2937';
|
|
222
|
-
ctx.font = 'bold 12px system-ui, sans-serif';
|
|
223
|
-
ctx.textAlign = 'center';
|
|
224
|
-
ctx.fillText(marker.label, screenX, screenY + 20);
|
|
225
|
-
}
|
|
226
|
-
ctx.restore();
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Draw a star shape.
|
|
230
|
-
*/
|
|
231
|
-
function drawStar(ctx, cx, cy, spikes, outerRadius, innerRadius) {
|
|
232
|
-
let rot = (Math.PI / 2) * 3;
|
|
233
|
-
const step = Math.PI / spikes;
|
|
234
|
-
ctx.beginPath();
|
|
235
|
-
ctx.moveTo(cx, cy - outerRadius);
|
|
236
|
-
for (let i = 0; i < spikes; i++) {
|
|
237
|
-
ctx.lineTo(cx + Math.cos(rot) * outerRadius, cy + Math.sin(rot) * outerRadius);
|
|
238
|
-
rot += step;
|
|
239
|
-
ctx.lineTo(cx + Math.cos(rot) * innerRadius, cy + Math.sin(rot) * innerRadius);
|
|
240
|
-
rot += step;
|
|
241
|
-
}
|
|
242
|
-
ctx.lineTo(cx, cy - outerRadius);
|
|
243
|
-
ctx.closePath();
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Draw attribution text on the canvas.
|
|
247
|
-
*/
|
|
248
|
-
function drawAttribution(ctx, text, width, height) {
|
|
249
|
-
ctx.save();
|
|
250
|
-
// Semi-transparent background
|
|
251
|
-
ctx.fillStyle = 'rgba(255, 255, 255, 0.8)';
|
|
252
|
-
const padding = 4;
|
|
253
|
-
ctx.font = '10px system-ui, sans-serif';
|
|
254
|
-
const textWidth = ctx.measureText(text).width;
|
|
255
|
-
ctx.fillRect(width - textWidth - padding * 2 - 4, height - 16, textWidth + padding * 2, 14);
|
|
256
|
-
// Text
|
|
257
|
-
ctx.fillStyle = '#374151';
|
|
258
|
-
ctx.textAlign = 'right';
|
|
259
|
-
ctx.fillText(text, width - padding - 4, height - 5);
|
|
260
|
-
ctx.restore();
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Get attribution text for a map style.
|
|
264
|
-
*/
|
|
265
|
-
export function getAttribution(style) {
|
|
266
|
-
return TILE_PROVIDERS[style].attribution;
|
|
267
|
-
}
|
|
268
|
-
//# sourceMappingURL=mapTileUtils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mapTileUtils.js","sourceRoot":"","sources":["../../src/utils/mapTileUtils.ts"],"names":[],"mappings":"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"}
|