@mailwoman/map-tui 9.2.0 → 9.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/{browser.ts → lib/browser.ts} +23 -34
- package/{cli-args.ts → lib/cli-args.ts} +7 -6
- package/{cli.ts → lib/cli.ts} +17 -19
- package/{frame.ts → lib/frame.ts} +4 -6
- package/lib/index.ts +13 -0
- package/{mercator.ts → lib/mercator.ts} +20 -0
- package/{mvt.ts → lib/mvt.ts} +2 -2
- package/{raster.ts → lib/raster.ts} +1 -1
- package/{renderer.ts → lib/renderer.ts} +14 -16
- package/{style.ts → lib/style.ts} +4 -4
- package/{tile-source.ts → lib/tile-source.ts} +24 -23
- package/out/browser.d.ts +1 -1
- package/out/browser.d.ts.map +1 -1
- package/out/browser.js +13 -26
- package/out/browser.js.map +1 -1
- package/out/cli-args.d.ts +0 -5
- package/out/cli-args.d.ts.map +1 -1
- package/out/cli-args.js +7 -4
- package/out/cli-args.js.map +1 -1
- package/out/cli.d.ts.map +1 -1
- package/out/cli.js +16 -19
- package/out/cli.js.map +1 -1
- package/out/frame.d.ts +3 -3
- package/out/frame.d.ts.map +1 -1
- package/out/frame.js +2 -3
- package/out/frame.js.map +1 -1
- package/out/index.d.ts +7 -7
- package/out/index.d.ts.map +1 -1
- package/out/index.js +7 -7
- package/out/index.js.map +1 -1
- package/out/input.d.ts.map +1 -1
- package/out/input.js.map +1 -1
- package/out/mercator.d.ts +13 -0
- package/out/mercator.d.ts.map +1 -1
- package/out/mercator.js +16 -0
- package/out/mercator.js.map +1 -1
- package/out/mvt.d.ts.map +1 -1
- package/out/mvt.js +2 -2
- package/out/mvt.js.map +1 -1
- package/out/raster.d.ts +1 -1
- package/out/raster.d.ts.map +1 -1
- package/out/raster.js.map +1 -1
- package/out/renderer.d.ts +3 -13
- package/out/renderer.d.ts.map +1 -1
- package/out/renderer.js +5 -12
- package/out/renderer.js.map +1 -1
- package/out/style.d.ts +3 -3
- package/out/style.d.ts.map +1 -1
- package/out/style.js +3 -3
- package/out/style.js.map +1 -1
- package/out/tile-source.d.ts +3 -3
- package/out/tile-source.d.ts.map +1 -1
- package/out/tile-source.js +19 -20
- package/out/tile-source.js.map +1 -1
- package/package.json +39 -5
- package/index.ts +0 -13
- package/out/tsconfig.tsbuildinfo +0 -1
- /package/{input.ts → lib/input.ts} +0 -0
|
@@ -20,13 +20,21 @@
|
|
|
20
20
|
* on is not a recoverable shell, so restore is the one operation that must survive any exit path.
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
|
+
import { errorMessage } from "@mailwoman/core/errors/schema"
|
|
24
|
+
import { clamp } from "@mailwoman/core/numeric"
|
|
23
25
|
import { AsciifyTerminal, cursorTo, SGR_RESET } from "@sister.software/asciify/tui"
|
|
24
26
|
|
|
25
|
-
import { blitFrame } from "
|
|
26
|
-
import { decodeInputChunk, type MapTUIInput, MOUSE_DISABLE, MOUSE_ENABLE } from "
|
|
27
|
-
import {
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
import { blitFrame } from "#frame"
|
|
28
|
+
import { decodeInputChunk, type MapTUIInput, MOUSE_DISABLE, MOUSE_ENABLE } from "#input"
|
|
29
|
+
import {
|
|
30
|
+
lonLatToWorldPx,
|
|
31
|
+
SUBPIXEL_COLUMNS_PER_CELL,
|
|
32
|
+
SUBPIXEL_ROWS_PER_CELL,
|
|
33
|
+
worldPxToLonLat,
|
|
34
|
+
wrapLongitude,
|
|
35
|
+
} from "#mercator"
|
|
36
|
+
import { MapRenderer } from "#renderer"
|
|
37
|
+
import type { TileSource } from "#tile-source"
|
|
30
38
|
|
|
31
39
|
const ALT_SCREEN_ENTER = "\u001B[?1049h"
|
|
32
40
|
const ALT_SCREEN_EXIT = "\u001B[?1049l"
|
|
@@ -36,12 +44,6 @@ const CLEAR_SCREEN = "\u001B[2J"
|
|
|
36
44
|
const CLEAR_LINE = "\u001B[2K"
|
|
37
45
|
const REVERSE_VIDEO = "\u001B[7m"
|
|
38
46
|
|
|
39
|
-
/**
|
|
40
|
-
* Subpixel dimensions of one braille cell — the unit every viewport-space conversion below works in.
|
|
41
|
-
*/
|
|
42
|
-
const SUBPIXELS_PER_COLUMN = 2
|
|
43
|
-
const SUBPIXELS_PER_ROW = 4
|
|
44
|
-
|
|
45
47
|
/**
|
|
46
48
|
* Rows reserved at the bottom of the terminal for the status bar.
|
|
47
49
|
*/
|
|
@@ -116,22 +118,9 @@ interface DragAnchor {
|
|
|
116
118
|
moved: boolean
|
|
117
119
|
}
|
|
118
120
|
|
|
119
|
-
function clamp(value: number, min: number, max: number): number {
|
|
120
|
-
return Math.min(Math.max(value, min), max)
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Wraps a longitude into [-180, 180) so panning past the antimeridian continues rather than running off the pyramid.
|
|
125
|
-
*/
|
|
126
|
-
function wrapLongitude(lon: number): number {
|
|
127
|
-
const wrapped = (((lon + 180) % 360) + 360) % 360
|
|
128
|
-
|
|
129
|
-
return wrapped - 180
|
|
130
|
-
}
|
|
131
|
-
|
|
132
121
|
/**
|
|
133
122
|
* Clips a string to a cell budget, counting codepoints — the status bar's arrows are one cell each but two UTF-16
|
|
134
|
-
* units, and `String.prototype.slice` would
|
|
123
|
+
* units, and `String.prototype.slice` would split one in half.
|
|
135
124
|
*/
|
|
136
125
|
function clipToCells(text: string, cells: number): string {
|
|
137
126
|
const codePoints = Array.from(text)
|
|
@@ -311,8 +300,8 @@ export class MapBrowser {
|
|
|
311
300
|
const center = lonLatToWorldPx(this.centerLon, this.centerLat, this.zoom)
|
|
312
301
|
|
|
313
302
|
const next = worldPxToLonLat(
|
|
314
|
-
center.x + columns *
|
|
315
|
-
center.y + rows *
|
|
303
|
+
center.x + columns * SUBPIXEL_COLUMNS_PER_CELL,
|
|
304
|
+
center.y + rows * SUBPIXEL_ROWS_PER_CELL,
|
|
316
305
|
this.zoom
|
|
317
306
|
)
|
|
318
307
|
|
|
@@ -329,12 +318,12 @@ export class MapBrowser {
|
|
|
329
318
|
*/
|
|
330
319
|
private cellToLonLat(column: number, row: number): { lon: number; lat: number } {
|
|
331
320
|
const center = lonLatToWorldPx(this.centerLon, this.centerLat, this.zoom)
|
|
332
|
-
const originX = center.x - (this.columns *
|
|
333
|
-
const originY = center.y - (this.paneRows *
|
|
321
|
+
const originX = center.x - (this.columns * SUBPIXEL_COLUMNS_PER_CELL) / 2
|
|
322
|
+
const originY = center.y - (this.paneRows * SUBPIXEL_ROWS_PER_CELL) / 2
|
|
334
323
|
|
|
335
324
|
return worldPxToLonLat(
|
|
336
|
-
originX + column *
|
|
337
|
-
originY + row *
|
|
325
|
+
originX + column * SUBPIXEL_COLUMNS_PER_CELL + SUBPIXEL_COLUMNS_PER_CELL / 2,
|
|
326
|
+
originY + row * SUBPIXEL_ROWS_PER_CELL + SUBPIXEL_ROWS_PER_CELL / 2,
|
|
338
327
|
this.zoom
|
|
339
328
|
)
|
|
340
329
|
}
|
|
@@ -405,8 +394,8 @@ export class MapBrowser {
|
|
|
405
394
|
const center = lonLatToWorldPx(anchor.centerLon, anchor.centerLat, anchor.zoom)
|
|
406
395
|
|
|
407
396
|
const next = worldPxToLonLat(
|
|
408
|
-
center.x + (anchor.column - column) *
|
|
409
|
-
center.y + (anchor.row - row) *
|
|
397
|
+
center.x + (anchor.column - column) * SUBPIXEL_COLUMNS_PER_CELL,
|
|
398
|
+
center.y + (anchor.row - row) * SUBPIXEL_ROWS_PER_CELL,
|
|
410
399
|
anchor.zoom
|
|
411
400
|
)
|
|
412
401
|
|
|
@@ -503,7 +492,7 @@ export class MapBrowser {
|
|
|
503
492
|
this.terminal.flush()
|
|
504
493
|
this.drawStatusBar(frame.attribution)
|
|
505
494
|
} catch (error) {
|
|
506
|
-
this.error =
|
|
495
|
+
this.error = errorMessage(error)
|
|
507
496
|
|
|
508
497
|
if (!this.restored) {
|
|
509
498
|
this.drawStatusBar("")
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { errorMessage } from "@mailwoman/core/errors/schema"
|
|
2
|
+
import { parseArguments } from "@mailwoman/core/scripting/arguments"
|
|
1
3
|
/**
|
|
2
4
|
* @copyright Sister Software.
|
|
3
5
|
* @license AGPL-3.0
|
|
@@ -12,8 +14,6 @@
|
|
|
12
14
|
* job (./cli.ts), which keeps every rejection path testable without a subprocess.
|
|
13
15
|
*/
|
|
14
16
|
|
|
15
|
-
import { parseArgs } from "node:util"
|
|
16
|
-
|
|
17
17
|
/**
|
|
18
18
|
* Center longitude when `--lon` is omitted — the world view mapscii opens on.
|
|
19
19
|
*/
|
|
@@ -41,6 +41,9 @@ const MIN_ZOOM = 0
|
|
|
41
41
|
*/
|
|
42
42
|
const MAX_ZOOM = 24
|
|
43
43
|
|
|
44
|
+
// True geographic bounds, not Web-Mercator's ±85.05113: the flag accepts any real latitude, and the browser clamps
|
|
45
|
+
// the CENTER to the projection's MERCATOR_LATITUDE_LIMIT itself (see ./browser.ts) — rejecting 87 here would refuse a
|
|
46
|
+
// value the viewport handles fine.
|
|
44
47
|
const MIN_LAT = -90
|
|
45
48
|
const MAX_LAT = 90
|
|
46
49
|
const MIN_LON = -180
|
|
@@ -179,7 +182,7 @@ interface ParsedFlags {
|
|
|
179
182
|
*/
|
|
180
183
|
function readFlags(argv: readonly string[]): ParsedFlags {
|
|
181
184
|
try {
|
|
182
|
-
const { values } =
|
|
185
|
+
const { values } = parseArguments({
|
|
183
186
|
args: joinNegativeNumbers(argv),
|
|
184
187
|
options: {
|
|
185
188
|
tiles: { type: "string" },
|
|
@@ -195,9 +198,7 @@ function readFlags(argv: readonly string[]): ParsedFlags {
|
|
|
195
198
|
|
|
196
199
|
return values
|
|
197
200
|
} catch (error) {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
throw new CLIArgsError(`${detail}\nRun \`map-tui --help\` for the supported flags.`)
|
|
201
|
+
throw new CLIArgsError(`${errorMessage(error)}\nRun \`map-tui --help\` for the supported flags.`)
|
|
201
202
|
}
|
|
202
203
|
}
|
|
203
204
|
|
package/{cli.ts → lib/cli.ts}
RENAMED
|
@@ -20,11 +20,12 @@
|
|
|
20
20
|
* that reason.
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
|
-
import {
|
|
23
|
+
import { errorMessage } from "@mailwoman/core/errors/schema"
|
|
24
|
+
import { createRequire } from "@mailwoman/core/module/resolvers"
|
|
24
25
|
|
|
25
|
-
import { MapBrowser } from "
|
|
26
|
-
import { type CLIArgs, CLIArgsError, HELP_TEXT, parseCLIArgs } from "
|
|
27
|
-
import { TileSource } from "
|
|
26
|
+
import { MapBrowser } from "#browser"
|
|
27
|
+
import { type CLIArgs, CLIArgsError, HELP_TEXT, parseCLIArgs } from "#cli-args"
|
|
28
|
+
import { TileSource } from "#tile-source"
|
|
28
29
|
|
|
29
30
|
/**
|
|
30
31
|
* Exit code for a command line that could not be parsed.
|
|
@@ -52,10 +53,8 @@ async function openTiles(path: string): Promise<TileSource> {
|
|
|
52
53
|
try {
|
|
53
54
|
return await TileSource.open(path)
|
|
54
55
|
} catch (error) {
|
|
55
|
-
const detail = error instanceof Error ? error.message : String(error)
|
|
56
|
-
|
|
57
56
|
throw new CLIArgsError(
|
|
58
|
-
`Could not open the tile archive at ${path}: ${
|
|
57
|
+
`Could not open the tile archive at ${path}: ${errorMessage(error)}\n` +
|
|
59
58
|
"Pass --tiles <archive.pmtiles>, or download one from https://protomaps.com/downloads"
|
|
60
59
|
)
|
|
61
60
|
}
|
|
@@ -96,10 +95,9 @@ async function main(): Promise<number> {
|
|
|
96
95
|
|
|
97
96
|
try {
|
|
98
97
|
/**
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* the package.
|
|
98
|
+
* `parseCLIArgs` keeps argv and the environment read on this one line, and nowhere else in the package —
|
|
99
|
+
* `@mailwoman/core/env`'s typed readers would pull core's data-backed environment schema behind a CLI whose whole
|
|
100
|
+
* premise is `npx`, so the bin passes the raw records to the pure parser instead.
|
|
103
101
|
*/
|
|
104
102
|
// oxlint-disable-next-line sister-software/no-process-globals -- see above.
|
|
105
103
|
args = parseCLIArgs(process.argv.slice(2), process.env)
|
|
@@ -123,21 +121,21 @@ async function main(): Promise<number> {
|
|
|
123
121
|
return 0
|
|
124
122
|
}
|
|
125
123
|
|
|
126
|
-
let
|
|
124
|
+
let opened: TileSource
|
|
127
125
|
|
|
126
|
+
// A bad `--tiles` path is a usage error, not a crash — the guard stays around the open, and ownership passes to the
|
|
127
|
+
// `using` declaration only once the open succeeded.
|
|
128
128
|
try {
|
|
129
|
-
|
|
129
|
+
opened = await openTiles(args.tiles)
|
|
130
130
|
} catch (error) {
|
|
131
|
-
process.stderr.write(`${
|
|
131
|
+
process.stderr.write(`${errorMessage(error)}\n`)
|
|
132
132
|
|
|
133
133
|
return EXIT_USAGE
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
await source.close()
|
|
140
|
-
}
|
|
136
|
+
await using source = opened
|
|
137
|
+
|
|
138
|
+
return await browse(source, args)
|
|
141
139
|
}
|
|
142
140
|
|
|
143
141
|
process.exitCode = await main()
|
|
@@ -11,15 +11,13 @@
|
|
|
11
11
|
* per cell. The braille dither/luminance work is asciify's — `FrameRasterizer` subclasses `AsciifyTerminal` with a
|
|
12
12
|
* no-op sink purely to reach its protected `_computeBrailleCells`, `_cellChars`, `_cellColors`, so this module never
|
|
13
13
|
* re-implements the dot math. `frameToANSILines` and `overlayText` then work on the plain `MapFrame` value, with no
|
|
14
|
-
* further asciify dependency; `blitFrame` is the
|
|
14
|
+
* further asciify dependency; `blitFrame` is the path back the other way, for callers driving a live terminal.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import { AsciifyTerminal } from "@sister.software/asciify/tui"
|
|
17
|
+
import { AsciifyTerminal, SGR_RESET } from "@sister.software/asciify/tui"
|
|
18
18
|
|
|
19
|
-
import type { RGBAGrid } from "
|
|
20
|
-
import type { RGB } from "
|
|
21
|
-
|
|
22
|
-
const SGR_RESET = "\u001B[0m"
|
|
19
|
+
import type { RGBAGrid } from "#raster"
|
|
20
|
+
import type { RGB } from "#style"
|
|
23
21
|
|
|
24
22
|
/**
|
|
25
23
|
* A rendered braille frame: one codepoint and one packed color per cell, row-major.
|
package/lib/index.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software.
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export * from "#frame"
|
|
8
|
+
export * from "#mercator"
|
|
9
|
+
export * from "#mvt"
|
|
10
|
+
export * from "#raster"
|
|
11
|
+
export * from "#renderer"
|
|
12
|
+
export * from "#style"
|
|
13
|
+
export * from "#tile-source"
|
|
@@ -53,3 +53,23 @@ const EARTH_CIRCUMFERENCE_M = 40_075_016.686
|
|
|
53
53
|
export function metersPerPixel(lat: number, zoom: number): number {
|
|
54
54
|
return (EARTH_CIRCUMFERENCE_M * Math.cos((lat * Math.PI) / 180)) / (TILE_SIZE * 2 ** zoom)
|
|
55
55
|
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Wraps a longitude into [-180, 180) so panning past the antimeridian continues rather than running off the pyramid.
|
|
59
|
+
*/
|
|
60
|
+
export function wrapLongitude(lon: number): number {
|
|
61
|
+
const wrapped = (((lon + 180) % 360) + 360) % 360
|
|
62
|
+
|
|
63
|
+
return wrapped - 180
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Subpixel dimensions of one braille cell — 2 columns wide, 4 rows tall. The unit every projection-to-cell conversion
|
|
68
|
+
* works in, shared by the renderer and the browser so both sides of the frame boundary agree on the grid.
|
|
69
|
+
*/
|
|
70
|
+
export const SUBPIXEL_COLUMNS_PER_CELL = 2
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* See {@link SUBPIXEL_COLUMNS_PER_CELL} — the vertical half of the braille 2×4 subpixel grid.
|
|
74
|
+
*/
|
|
75
|
+
export const SUBPIXEL_ROWS_PER_CELL = 4
|
package/{mvt.ts → lib/mvt.ts}
RENAMED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import { VectorTile } from "@mapbox/vector-tile"
|
|
15
|
-
import
|
|
15
|
+
import { PbfReader } from "pbf"
|
|
16
16
|
|
|
17
17
|
export interface DecodedFeature {
|
|
18
18
|
/**
|
|
@@ -34,7 +34,7 @@ export interface DecodedLayer {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
export function decodeMVT(data: Uint8Array): DecodedLayer[] {
|
|
37
|
-
const tile = new VectorTile(new
|
|
37
|
+
const tile = new VectorTile(new PbfReader(data))
|
|
38
38
|
|
|
39
39
|
return Object.entries(tile.layers).map(([name, layer]) => {
|
|
40
40
|
const features: DecodedFeature[] = []
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* {@link fillPolygon} does not — its scanline edge math keeps ring vertices as given, see its own docstring.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
import type { RGB } from "
|
|
16
|
+
import type { RGB } from "#style"
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* A row-major RGBA pixel buffer. Alpha starts at 0 (unlit/transparent) everywhere; drawing a pixel sets it to 255,
|
|
@@ -15,12 +15,20 @@
|
|
|
15
15
|
* requested marker always wins the cell.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
import type
|
|
21
|
-
import {
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
import { clamp } from "@mailwoman/core/numeric"
|
|
19
|
+
|
|
20
|
+
import { type MapFrame, overlayText, rasterizeToFrame, rgbToPacked } from "#frame"
|
|
21
|
+
import {
|
|
22
|
+
lonLatToWorldPx,
|
|
23
|
+
metersPerPixel,
|
|
24
|
+
SUBPIXEL_COLUMNS_PER_CELL,
|
|
25
|
+
SUBPIXEL_ROWS_PER_CELL,
|
|
26
|
+
TILE_SIZE,
|
|
27
|
+
} from "#mercator"
|
|
28
|
+
import type { DecodedFeature } from "#mvt"
|
|
29
|
+
import { drawCircle, drawPolyline, fillPolygon, RGBAGrid } from "#raster"
|
|
30
|
+
import { type LayerStyle, type RGB, styleForFeatureKind, stylesFor } from "#style"
|
|
31
|
+
import type { DecodedTile, TileProvider } from "#tile-source"
|
|
24
32
|
|
|
25
33
|
export interface Viewport {
|
|
26
34
|
centerLon: number
|
|
@@ -46,12 +54,6 @@ export interface RingSpec {
|
|
|
46
54
|
const DEFAULT_MARKER_CHAR = "●"
|
|
47
55
|
const DEFAULT_MARKER_COLOR: RGB = [255, 80, 80]
|
|
48
56
|
|
|
49
|
-
/**
|
|
50
|
-
* Subpixel dimensions per braille cell: 2 columns wide, 4 rows tall.
|
|
51
|
-
*/
|
|
52
|
-
const SUBPIXEL_COLUMNS_PER_CELL = 2
|
|
53
|
-
const SUBPIXEL_ROWS_PER_CELL = 4
|
|
54
|
-
|
|
55
57
|
/**
|
|
56
58
|
* Minimum ring radius (in device pixels) worth drawing — smaller than this, the midpoint circle algorithm degenerates
|
|
57
59
|
* to a single point or nothing useful.
|
|
@@ -109,10 +111,6 @@ interface ResolvedTile {
|
|
|
109
111
|
span: number
|
|
110
112
|
}
|
|
111
113
|
|
|
112
|
-
function clamp(value: number, min: number, max: number): number {
|
|
113
|
-
return Math.min(Math.max(value, min), max)
|
|
114
|
-
}
|
|
115
|
-
|
|
116
114
|
function projectPoint(projection: TileProjection, gx: number, gy: number): ProjectedPoint {
|
|
117
115
|
return {
|
|
118
116
|
x: projection.worldX + gx * projection.scale - projection.origin.x,
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
/**
|
|
8
8
|
* Protomaps-basemap style table for the map-tui debug view.
|
|
9
9
|
*
|
|
10
|
-
* Defines fill, line, and label styles for each of the nine protomaps-basemap layers,
|
|
10
|
+
* Defines fill, line, and label styles for each of the nine protomaps-basemap layers, restricted by zoom level. Color
|
|
11
11
|
* palette calibrated for dark-terminal rendering: dim fills (read as stipple density via dithering), bright lines and
|
|
12
12
|
* labels.
|
|
13
13
|
*/
|
|
@@ -48,7 +48,7 @@ const roadWidth = (zoom: number) => (zoom >= ROAD_WIDTH_THRESHOLD ? 2 : 1)
|
|
|
48
48
|
|
|
49
49
|
// At braille scale every road is one dot wide and every fill is stipple, so CLASS has to ride on color instead of
|
|
50
50
|
// geometry: arteries brighten toward amber, paths dim toward the vegetation green, and urban landuse runs warmer and
|
|
51
|
-
// brighter than vegetation so a city reads as denser texture. Luminance is
|
|
51
|
+
// brighter than vegetation so a city reads as denser texture. Luminance is required — asciify's ordered dither
|
|
52
52
|
// turns it into stipple density.
|
|
53
53
|
const VEGETATION_KINDS = [
|
|
54
54
|
"allotments",
|
|
@@ -92,8 +92,8 @@ const STYLE_TABLE: Record<string, LayerStyle[]> = {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
|
-
* Styles applying to a protomaps-basemap layer at a zoom, draw-ordered (fills < lines < labels). Empty for
|
|
96
|
-
*
|
|
95
|
+
* Styles applying to a protomaps-basemap layer at a zoom, draw-ordered (fills < lines < labels). Empty for unstyled or
|
|
96
|
+
* zoom-restricted layers.
|
|
97
97
|
*/
|
|
98
98
|
export function stylesFor(layerName: string, zoom: number): LayerStyle[] {
|
|
99
99
|
return (STYLE_TABLE[layerName] ?? []).filter((style) => zoom >= style.minZoom)
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
* same viewport don't re-decode.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import { type FileHandle, open } from "
|
|
16
|
-
|
|
15
|
+
import { type FileHandle, open } from "@mailwoman/core/fs/readers"
|
|
16
|
+
import { Parser } from "htmlparser2"
|
|
17
17
|
import { PMTiles, type RangeResponse, type Source } from "pmtiles"
|
|
18
18
|
|
|
19
|
-
import { type DecodedLayer, decodeMVT } from "
|
|
19
|
+
import { type DecodedLayer, decodeMVT } from "#mvt"
|
|
20
20
|
|
|
21
21
|
export interface DecodedTile {
|
|
22
22
|
layers: DecodedLayer[]
|
|
@@ -56,19 +56,6 @@ class FilePMTilesSource implements Source {
|
|
|
56
56
|
|
|
57
57
|
const TILE_CACHE_LIMIT = 64
|
|
58
58
|
|
|
59
|
-
/**
|
|
60
|
-
* The named entities attribution strings actually carry — archive metadata is HTML (`<a>© OpenStreetMap</a>`), and
|
|
61
|
-
* a terminal shows entities raw unless they decode here.
|
|
62
|
-
*/
|
|
63
|
-
const HTML_ENTITIES: Record<string, string> = {
|
|
64
|
-
"&": "&",
|
|
65
|
-
"©": "©",
|
|
66
|
-
">": ">",
|
|
67
|
-
"<": "<",
|
|
68
|
-
""": '"',
|
|
69
|
-
"'": "'",
|
|
70
|
-
}
|
|
71
|
-
|
|
72
59
|
/**
|
|
73
60
|
* Plain-text attribution out of archive metadata (HTML tags stripped, entities decoded); empty string when absent.
|
|
74
61
|
*/
|
|
@@ -82,10 +69,24 @@ export function readAttribution(metadata: unknown): string {
|
|
|
82
69
|
return ""
|
|
83
70
|
}
|
|
84
71
|
|
|
85
|
-
return (metadata as { attribution: string }).attribution
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
72
|
+
return htmlText((metadata as { attribution: string }).attribution)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Plain text out of an HTML fragment via `htmlparser2`'s event parser — a hand scan misreads `<` inside attribute
|
|
77
|
+
* values and unclosed tags, and the parser's own entity decoding covers the full named set a metadata field can carry.
|
|
78
|
+
* Local rather than `@mailwoman/core`'s `htmlToText`: this package stays standalone by design, and one attribution
|
|
79
|
+
* string does not price core's shipped data into every consumer.
|
|
80
|
+
*/
|
|
81
|
+
function htmlText(html: string): string {
|
|
82
|
+
let text = ""
|
|
83
|
+
|
|
84
|
+
const parser = new Parser({ ontext: (chunk) => (text += chunk) }, { decodeEntities: true })
|
|
85
|
+
|
|
86
|
+
parser.write(html)
|
|
87
|
+
parser.end()
|
|
88
|
+
|
|
89
|
+
return text.replaceAll(/\s+/gu, " ").trim()
|
|
89
90
|
}
|
|
90
91
|
|
|
91
92
|
/**
|
|
@@ -97,7 +98,7 @@ interface CacheEntry {
|
|
|
97
98
|
tile: DecodedTile | null
|
|
98
99
|
}
|
|
99
100
|
|
|
100
|
-
export class TileSource implements TileProvider {
|
|
101
|
+
export class TileSource implements TileProvider, AsyncDisposable {
|
|
101
102
|
readonly minZoom: number
|
|
102
103
|
readonly maxZoom: number
|
|
103
104
|
|
|
@@ -179,7 +180,7 @@ export class TileSource implements TileProvider {
|
|
|
179
180
|
return tile
|
|
180
181
|
}
|
|
181
182
|
|
|
182
|
-
async
|
|
183
|
-
await this.handle?.
|
|
183
|
+
async [Symbol.asyncDispose](): Promise<void> {
|
|
184
|
+
await this.handle?.[Symbol.asyncDispose]()
|
|
184
185
|
}
|
|
185
186
|
}
|
package/out/browser.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*/
|
|
6
|
-
import type { TileSource } from "
|
|
6
|
+
import type { TileSource } from "#tile-source";
|
|
7
7
|
/**
|
|
8
8
|
* The subset of a readable stream the browser drives. Structural so `process.stdin` satisfies it without the app being
|
|
9
9
|
* welded to it — the same reasoning asciify applies to its own output type.
|
package/out/browser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../lib/browser.ts"],"names":[],"mappings":"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"}
|
package/out/browser.js
CHANGED
|
@@ -18,11 +18,13 @@
|
|
|
18
18
|
* signal handler, an `exit` hook and the normal path can all call it. A terminal left in raw mode with mouse reporting
|
|
19
19
|
* on is not a recoverable shell, so restore is the one operation that must survive any exit path.
|
|
20
20
|
*/
|
|
21
|
+
import { errorMessage } from "@mailwoman/core/errors/schema";
|
|
22
|
+
import { clamp } from "@mailwoman/core/numeric";
|
|
21
23
|
import { AsciifyTerminal, cursorTo, SGR_RESET } from "@sister.software/asciify/tui";
|
|
22
|
-
import { blitFrame } from "
|
|
23
|
-
import { decodeInputChunk, MOUSE_DISABLE, MOUSE_ENABLE } from "
|
|
24
|
-
import { lonLatToWorldPx, worldPxToLonLat } from "
|
|
25
|
-
import { MapRenderer } from "
|
|
24
|
+
import { blitFrame } from "#frame";
|
|
25
|
+
import { decodeInputChunk, MOUSE_DISABLE, MOUSE_ENABLE } from "#input";
|
|
26
|
+
import { lonLatToWorldPx, SUBPIXEL_COLUMNS_PER_CELL, SUBPIXEL_ROWS_PER_CELL, worldPxToLonLat, wrapLongitude, } from "#mercator";
|
|
27
|
+
import { MapRenderer } from "#renderer";
|
|
26
28
|
const ALT_SCREEN_ENTER = "\u001B[?1049h";
|
|
27
29
|
const ALT_SCREEN_EXIT = "\u001B[?1049l";
|
|
28
30
|
const CURSOR_HIDE = "\u001B[?25l";
|
|
@@ -30,11 +32,6 @@ const CURSOR_SHOW = "\u001B[?25h";
|
|
|
30
32
|
const CLEAR_SCREEN = "\u001B[2J";
|
|
31
33
|
const CLEAR_LINE = "\u001B[2K";
|
|
32
34
|
const REVERSE_VIDEO = "\u001B[7m";
|
|
33
|
-
/**
|
|
34
|
-
* Subpixel dimensions of one braille cell — the unit every viewport-space conversion below works in.
|
|
35
|
-
*/
|
|
36
|
-
const SUBPIXELS_PER_COLUMN = 2;
|
|
37
|
-
const SUBPIXELS_PER_ROW = 4;
|
|
38
35
|
/**
|
|
39
36
|
* Rows reserved at the bottom of the terminal for the status bar.
|
|
40
37
|
*/
|
|
@@ -61,19 +58,9 @@ const PAN_FRACTION = 0.125;
|
|
|
61
58
|
*/
|
|
62
59
|
const MERCATOR_LATITUDE_LIMIT = 85.05112878;
|
|
63
60
|
const COORDINATE_DIGITS = 4;
|
|
64
|
-
function clamp(value, min, max) {
|
|
65
|
-
return Math.min(Math.max(value, min), max);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Wraps a longitude into [-180, 180) so panning past the antimeridian continues rather than running off the pyramid.
|
|
69
|
-
*/
|
|
70
|
-
function wrapLongitude(lon) {
|
|
71
|
-
const wrapped = (((lon + 180) % 360) + 360) % 360;
|
|
72
|
-
return wrapped - 180;
|
|
73
|
-
}
|
|
74
61
|
/**
|
|
75
62
|
* Clips a string to a cell budget, counting codepoints — the status bar's arrows are one cell each but two UTF-16
|
|
76
|
-
* units, and `String.prototype.slice` would
|
|
63
|
+
* units, and `String.prototype.slice` would split one in half.
|
|
77
64
|
*/
|
|
78
65
|
function clipToCells(text, cells) {
|
|
79
66
|
const codePoints = Array.from(text);
|
|
@@ -215,7 +202,7 @@ export class MapBrowser {
|
|
|
215
202
|
*/
|
|
216
203
|
panByCells(columns, rows) {
|
|
217
204
|
const center = lonLatToWorldPx(this.centerLon, this.centerLat, this.zoom);
|
|
218
|
-
const next = worldPxToLonLat(center.x + columns *
|
|
205
|
+
const next = worldPxToLonLat(center.x + columns * SUBPIXEL_COLUMNS_PER_CELL, center.y + rows * SUBPIXEL_ROWS_PER_CELL, this.zoom);
|
|
219
206
|
this.setCenter(next.lon, next.lat);
|
|
220
207
|
}
|
|
221
208
|
setCenter(lon, lat) {
|
|
@@ -227,9 +214,9 @@ export class MapBrowser {
|
|
|
227
214
|
*/
|
|
228
215
|
cellToLonLat(column, row) {
|
|
229
216
|
const center = lonLatToWorldPx(this.centerLon, this.centerLat, this.zoom);
|
|
230
|
-
const originX = center.x - (this.columns *
|
|
231
|
-
const originY = center.y - (this.paneRows *
|
|
232
|
-
return worldPxToLonLat(originX + column *
|
|
217
|
+
const originX = center.x - (this.columns * SUBPIXEL_COLUMNS_PER_CELL) / 2;
|
|
218
|
+
const originY = center.y - (this.paneRows * SUBPIXEL_ROWS_PER_CELL) / 2;
|
|
219
|
+
return worldPxToLonLat(originX + column * SUBPIXEL_COLUMNS_PER_CELL + SUBPIXEL_COLUMNS_PER_CELL / 2, originY + row * SUBPIXEL_ROWS_PER_CELL + SUBPIXEL_ROWS_PER_CELL / 2, this.zoom);
|
|
233
220
|
}
|
|
234
221
|
/**
|
|
235
222
|
* Zooms one or more whole levels. With an anchor cell (the wheel's pointer), the center shifts so whatever was under
|
|
@@ -279,7 +266,7 @@ export class MapBrowser {
|
|
|
279
266
|
return;
|
|
280
267
|
anchor.moved = true;
|
|
281
268
|
const center = lonLatToWorldPx(anchor.centerLon, anchor.centerLat, anchor.zoom);
|
|
282
|
-
const next = worldPxToLonLat(center.x + (anchor.column - column) *
|
|
269
|
+
const next = worldPxToLonLat(center.x + (anchor.column - column) * SUBPIXEL_COLUMNS_PER_CELL, center.y + (anchor.row - row) * SUBPIXEL_ROWS_PER_CELL, anchor.zoom);
|
|
283
270
|
this.setCenter(next.lon, next.lat);
|
|
284
271
|
this.scheduleRender();
|
|
285
272
|
}
|
|
@@ -358,7 +345,7 @@ export class MapBrowser {
|
|
|
358
345
|
this.drawStatusBar(frame.attribution);
|
|
359
346
|
}
|
|
360
347
|
catch (error) {
|
|
361
|
-
this.error =
|
|
348
|
+
this.error = errorMessage(error);
|
|
362
349
|
if (!this.restored) {
|
|
363
350
|
this.drawStatusBar("");
|
|
364
351
|
}
|
package/out/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAEnF,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,gBAAgB,EAAoB,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5F,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAG3C,MAAM,gBAAgB,GAAG,eAAe,CAAA;AACxC,MAAM,eAAe,GAAG,eAAe,CAAA;AACvC,MAAM,WAAW,GAAG,aAAa,CAAA;AACjC,MAAM,WAAW,GAAG,aAAa,CAAA;AACjC,MAAM,YAAY,GAAG,WAAW,CAAA;AAChC,MAAM,UAAU,GAAG,WAAW,CAAA;AAC9B,MAAM,aAAa,GAAG,WAAW,CAAA;AAEjC;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAAC,CAAA;AAC9B,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAE3B;;GAEG;AACH,MAAM,eAAe,GAAG,CAAC,CAAA;AAEzB;;;GAGG;AACH,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAC3B,MAAM,aAAa,GAAG,EAAE,CAAA;AAExB;;;GAGG;AACH,MAAM,WAAW,GAAG,CAAC,CAAA;AACrB,MAAM,aAAa,GAAG,CAAC,CAAA;AAEvB;;;GAGG;AACH,MAAM,YAAY,GAAG,KAAK,CAAA;AAE1B;;GAEG;AACH,MAAM,uBAAuB,GAAG,WAAW,CAAA;AAE3C,MAAM,iBAAiB,GAAG,CAAC,CAAA;AA4C3B,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACrD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW;IACjC,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;IAEjD,OAAO,OAAO,GAAG,GAAG,CAAA;AACrB,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa;IAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEnC,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC/E,CAAC;AAED,MAAM,OAAO,UAAU;IACL,MAAM,CAAY;IAClB,QAAQ,CAAa;IACrB,KAAK,CAAc;IACnB,MAAM,CAAe;IACrB,QAAQ,CAAiB;IAElC,SAAS,CAAQ;IACjB,SAAS,CAAQ;IACjB,IAAI,CAAQ;IAEZ,OAAO,GAAG,gBAAgB,CAAA;IAC1B,QAAQ,GAAG,aAAa,GAAG,eAAe,CAAA;IAE1C,IAAI,GAAsB,IAAI,CAAA;IAC9B,cAAc,GAAG,KAAK,CAAA;IACtB,YAAY,GAAG,KAAK,CAAA;IACpB,OAAO,GAAG,KAAK,CAAA;IACf,QAAQ,GAAG,KAAK,CAAA;IAChB,KAAK,GAAkB,IAAI,CAAA;IAC3B,WAAW,GAAoC,IAAI,CAAA;IAE3D;;;;OAIG;IACK,YAAY,GAAG,EAAE,CAAA;IAER,MAAM,GAAG,CAAC,KAAa,EAAQ,EAAE;QACjD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QAE1D,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,OAAO,CAAA;QAEnC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;IACF,CAAC,CAAA;IAEgB,QAAQ,GAAG,GAAS,EAAE;QACtC,IAAI,CAAC,OAAO,EAAE,CAAA;QACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAC/B,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAA;QAC1B,IAAI,CAAC,cAAc,EAAE,CAAA;IACtB,CAAC,CAAA;IAED,YAAY,OAA0B;QACrC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC/C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAE5B,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC3C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,uBAAuB,EAAE,uBAAuB,CAAC,CAAA;QACtF,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAE3F,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE;YAChD,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,WAAW;YACvB,kBAAkB,EAAE,IAAI;SACxB,CAAC,CAAA;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG;QACR,IAAI,CAAC,KAAK,EAAE,CAAA;QAEZ,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YAClD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,EAAE,CAAA;QAEd,OAAO,IAAI,CAAA;IACZ,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,IAAY;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAA;QAEhC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,OAAO,CAAC,IAAI,CAAC,CAAA;IACd,CAAC;IAED;;OAEG;IACH,KAAK;QACJ,IAAI,IAAI,CAAC,OAAO;YAAE,OAAM;QAExB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC,CAAA;QAE/E,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;QACnB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAEvC,IAAI,CAAC,OAAO,EAAE,CAAA;QACd,IAAI,CAAC,cAAc,EAAE,CAAA;IACtB,CAAC;IAED;;;OAGG;IACH,OAAO;QACN,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAM;QAE1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QAEpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAA;QAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAElB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,eAAe,CAAC,CAAA;IAC7E,CAAC;IAEO,WAAW,CAAC,KAAkB;QACrC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,MAAM;gBACV,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;YAE3B,KAAK,WAAW;gBACf,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;YAE7B,KAAK,KAAK;gBACT,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;YAE3C,KAAK,MAAM;gBACV,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YAEtC,KAAK,OAAO;gBACX,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;YAE1E,KAAK,OAAO;gBACX,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;YAE/C,KAAK,MAAM;gBACV,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;YAElD,KAAK,SAAS;gBACb,OAAO,IAAI,CAAC,OAAO,EAAE,CAAA;QACvB,CAAC;IACF,CAAC;IAEO,UAAU,CAAC,EAAU,EAAE,EAAU;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAA;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAA;QAErE,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,CAAA;QAC9C,IAAI,CAAC,cAAc,EAAE,CAAA;IACtB,CAAC;IAED;;;OAGG;IACK,UAAU,CAAC,OAAe,EAAE,IAAY;QAC/C,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAEzE,MAAM,IAAI,GAAG,eAAe,CAC3B,MAAM,CAAC,CAAC,GAAG,OAAO,GAAG,oBAAoB,EACzC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,iBAAiB,EACnC,IAAI,CAAC,IAAI,CACT,CAAA;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC;IAEO,SAAS,CAAC,GAAW,EAAE,GAAW;QACzC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,uBAAuB,EAAE,uBAAuB,CAAC,CAAA;IAC/E,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,MAAc,EAAE,GAAW;QAC/C,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACzE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAA;QACpE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;QAElE,OAAO,eAAe,CACrB,OAAO,GAAG,MAAM,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,CAAC,EAClE,OAAO,GAAG,GAAG,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,CAAC,EACzD,IAAI,CAAC,IAAI,CACT,CAAA;IACF,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,KAAa,EAAE,MAA8C;QAC3E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAE/E,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE,OAAM;QAE9B,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;YAChB,IAAI,CAAC,cAAc,EAAE,CAAA;YAErB,OAAM;QACP,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QAE3D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAEhB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QAC3D,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACzE,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACnE,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAEnE,MAAM,SAAS,GAAG,eAAe,CAChC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EACpC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EACpC,IAAI,CAAC,IAAI,CACT,CAAA;QAED,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAA;QAC5C,IAAI,CAAC,cAAc,EAAE,CAAA;IACtB,CAAC;IAEO,UAAU,CAAC,MAAc,EAAE,GAAW;QAC7C,OAAO,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC/E,CAAC;IAEO,SAAS,CAAC,MAAc,EAAE,GAAW;QAC5C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC;YAAE,OAAM;QAEzC,IAAI,CAAC,IAAI,GAAG;YACX,MAAM;YACN,GAAG;YACH,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,KAAK;SACZ,CAAA;IACF,CAAC;IAED;;;OAGG;IACK,YAAY,CAAC,MAAc,EAAE,GAAW;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAA;QAExB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE,OAAM;QAEhD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAA;QAEnB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAE/E,MAAM,IAAI,GAAG,eAAe,CAC3B,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,oBAAoB,EAC1D,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,iBAAiB,EACjD,MAAM,CAAC,IAAI,CACX,CAAA;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,CAAC,cAAc,EAAE,CAAA;IACtB,CAAC;IAED;;;OAGG;IACK,OAAO;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAA;QAExB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAEhB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK;YAAE,OAAM;QAEnC,8GAA8G;QAC9G,iCAAiC;QACjC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE,OAAM;QAErC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QAE3D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,cAAc,EAAE,CAAA;IACtB,CAAC;IAED;;OAEG;IACK,OAAO;QACd,0FAA0F;QAC1F,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAA;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,aAAa,CAAC,CAAA;QAE1D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,GAAG,eAAe,CAAC,CAAA;QAE/D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnD,CAAC;IAED;;;OAGG;IACK,cAAc;QACrB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;YAExB,OAAM;QACP,CAAC;QAED,KAAK,IAAI,CAAC,UAAU,EAAE,CAAA;IACvB,CAAC;IAEO,KAAK,CAAC,UAAU;QACvB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAE1B,IAAI,CAAC;YACJ,GAAG,CAAC;gBACH,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;gBAEzB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;YACxB,CAAC,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAC;QAC9C,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;QAC5B,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,UAAU;QACvB,MAAM,QAAQ,GAAG;YAChB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,QAAQ;SACnB,CAAA;QAED,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;YAEvD,wGAAwG;YACxG,gBAAgB;YAChB,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAM;YAEzB,2GAA2G;YAC3G,sCAAsC;YACtC,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ;gBAAE,OAAM;YAE1E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;YAEjB,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;YAC/B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;YACrB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAEnE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpB,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;YACvB,CAAC;QACF,CAAC;IACF,CAAC;IAEO,UAAU,CAAC,WAAmB;QACrC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,IAAI,CAAC,KAAK,UAAU,CAAA;QAEhD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QACrD,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,IAAI,8BAA8B,CAAA;QAExE,IAAI,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO,MAAM,CAAA;QAEtC,MAAM,QAAQ,GAAG,GAAG,MAAM,OAAO,WAAW,EAAE,CAAA;QAE9C,iGAAiG;QACjG,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAA;IACtE,CAAC;IAEO,aAAa,CAAC,WAAmB;QACxC,4GAA4G;QAC5G,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAA;QAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAE3E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,UAAU,GAAG,aAAa,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,CAAA;IACnG,CAAC;CACD"}
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../lib/browser.ts"],"names":[],"mappings":"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"}
|