@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.
Files changed (58) hide show
  1. package/{browser.ts → lib/browser.ts} +23 -34
  2. package/{cli-args.ts → lib/cli-args.ts} +7 -6
  3. package/{cli.ts → lib/cli.ts} +17 -19
  4. package/{frame.ts → lib/frame.ts} +4 -6
  5. package/lib/index.ts +13 -0
  6. package/{mercator.ts → lib/mercator.ts} +20 -0
  7. package/{mvt.ts → lib/mvt.ts} +2 -2
  8. package/{raster.ts → lib/raster.ts} +1 -1
  9. package/{renderer.ts → lib/renderer.ts} +14 -16
  10. package/{style.ts → lib/style.ts} +4 -4
  11. package/{tile-source.ts → lib/tile-source.ts} +24 -23
  12. package/out/browser.d.ts +1 -1
  13. package/out/browser.d.ts.map +1 -1
  14. package/out/browser.js +13 -26
  15. package/out/browser.js.map +1 -1
  16. package/out/cli-args.d.ts +0 -5
  17. package/out/cli-args.d.ts.map +1 -1
  18. package/out/cli-args.js +7 -4
  19. package/out/cli-args.js.map +1 -1
  20. package/out/cli.d.ts.map +1 -1
  21. package/out/cli.js +16 -19
  22. package/out/cli.js.map +1 -1
  23. package/out/frame.d.ts +3 -3
  24. package/out/frame.d.ts.map +1 -1
  25. package/out/frame.js +2 -3
  26. package/out/frame.js.map +1 -1
  27. package/out/index.d.ts +7 -7
  28. package/out/index.d.ts.map +1 -1
  29. package/out/index.js +7 -7
  30. package/out/index.js.map +1 -1
  31. package/out/input.d.ts.map +1 -1
  32. package/out/input.js.map +1 -1
  33. package/out/mercator.d.ts +13 -0
  34. package/out/mercator.d.ts.map +1 -1
  35. package/out/mercator.js +16 -0
  36. package/out/mercator.js.map +1 -1
  37. package/out/mvt.d.ts.map +1 -1
  38. package/out/mvt.js +2 -2
  39. package/out/mvt.js.map +1 -1
  40. package/out/raster.d.ts +1 -1
  41. package/out/raster.d.ts.map +1 -1
  42. package/out/raster.js.map +1 -1
  43. package/out/renderer.d.ts +3 -13
  44. package/out/renderer.d.ts.map +1 -1
  45. package/out/renderer.js +5 -12
  46. package/out/renderer.js.map +1 -1
  47. package/out/style.d.ts +3 -3
  48. package/out/style.d.ts.map +1 -1
  49. package/out/style.js +3 -3
  50. package/out/style.js.map +1 -1
  51. package/out/tile-source.d.ts +3 -3
  52. package/out/tile-source.d.ts.map +1 -1
  53. package/out/tile-source.js +19 -20
  54. package/out/tile-source.js.map +1 -1
  55. package/package.json +39 -5
  56. package/index.ts +0 -13
  57. package/out/tsconfig.tsbuildinfo +0 -1
  58. /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 "./frame.ts"
26
- import { decodeInputChunk, type MapTUIInput, MOUSE_DISABLE, MOUSE_ENABLE } from "./input.ts"
27
- import { lonLatToWorldPx, worldPxToLonLat } from "./mercator.ts"
28
- import { MapRenderer } from "./renderer.ts"
29
- import type { TileSource } from "./tile-source.ts"
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 cut one in half.
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 * SUBPIXELS_PER_COLUMN,
315
- center.y + rows * SUBPIXELS_PER_ROW,
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 * SUBPIXELS_PER_COLUMN) / 2
333
- const originY = center.y - (this.paneRows * SUBPIXELS_PER_ROW) / 2
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 * SUBPIXELS_PER_COLUMN + SUBPIXELS_PER_COLUMN / 2,
337
- originY + row * SUBPIXELS_PER_ROW + SUBPIXELS_PER_ROW / 2,
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) * SUBPIXELS_PER_COLUMN,
409
- center.y + (anchor.row - row) * SUBPIXELS_PER_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 = error instanceof Error ? error.message : String(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 } = parseArgs({
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
- const detail = error instanceof Error ? error.message : String(error)
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
 
@@ -20,11 +20,12 @@
20
20
  * that reason.
21
21
  */
22
22
 
23
- import { createRequire } from "node:module"
23
+ import { errorMessage } from "@mailwoman/core/errors/schema"
24
+ import { createRequire } from "@mailwoman/core/module/resolvers"
24
25
 
25
- import { MapBrowser } from "./browser.ts"
26
- import { type CLIArgs, CLIArgsError, HELP_TEXT, parseCLIArgs } from "./cli-args.ts"
27
- import { TileSource } from "./tile-source.ts"
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}: ${detail}\n` +
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
- * This package takes no `@mailwoman` dependency by design (see ./mercator.ts), so the blessed readers are out of
100
- * reach: `@mailwoman/core/env` would pull core's shipped data behind a CLI whose whole premise is `npx`.
101
- * `parseCLIArgs` is the local equivalent argv and the environment are read on this one line, and nowhere else in
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 source: TileSource
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
- source = await openTiles(args.tiles)
129
+ opened = await openTiles(args.tiles)
130
130
  } catch (error) {
131
- process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`)
131
+ process.stderr.write(`${errorMessage(error)}\n`)
132
132
 
133
133
  return EXIT_USAGE
134
134
  }
135
135
 
136
- try {
137
- return await browse(source, args)
138
- } finally {
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 seam back the other way, for callers driving a live terminal.
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 "./raster.ts"
20
- import type { RGB } from "./style.ts"
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
@@ -12,7 +12,7 @@
12
12
  */
13
13
 
14
14
  import { VectorTile } from "@mapbox/vector-tile"
15
- import Pbf from "pbf"
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 Pbf(data))
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 "./style.ts"
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 { type MapFrame, overlayText, rasterizeToFrame, rgbToPacked } from "./frame.ts"
19
- import { lonLatToWorldPx, metersPerPixel, TILE_SIZE } from "./mercator.ts"
20
- import type { DecodedFeature } from "./mvt.ts"
21
- import { drawCircle, drawPolyline, fillPolygon, RGBAGrid } from "./raster.ts"
22
- import { type LayerStyle, type RGB, styleForFeatureKind, stylesFor } from "./style.ts"
23
- import type { DecodedTile, TileProvider } from "./tile-source.ts"
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, gated by zoom level. Color
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 load-bearing — asciify's ordered dither
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
- * unstyled/gated layers.
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 "node:fs/promises"
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 "./mvt.ts"
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>&copy; OpenStreetMap</a>`), and
61
- * a terminal shows entities raw unless they decode here.
62
- */
63
- const HTML_ENTITIES: Record<string, string> = {
64
- "&amp;": "&",
65
- "&copy;": "©",
66
- "&gt;": ">",
67
- "&lt;": "<",
68
- "&quot;": '"',
69
- "&#39;": "'",
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
- .replaceAll(/<[^>]+>/gu, "")
87
- .replaceAll(/&[a-z]+;|&#\d+;/gu, (entity) => HTML_ENTITIES[entity] ?? entity)
88
- .trim()
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 close(): Promise<void> {
183
- await this.handle?.close()
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 "./tile-source.ts";
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.
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../browser.ts"],"names":[],"mappings":"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"}
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 "./frame.js";
23
- import { decodeInputChunk, MOUSE_DISABLE, MOUSE_ENABLE } from "./input.js";
24
- import { lonLatToWorldPx, worldPxToLonLat } from "./mercator.js";
25
- import { MapRenderer } from "./renderer.js";
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 cut one in half.
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 * SUBPIXELS_PER_COLUMN, center.y + rows * SUBPIXELS_PER_ROW, this.zoom);
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 * SUBPIXELS_PER_COLUMN) / 2;
231
- const originY = center.y - (this.paneRows * SUBPIXELS_PER_ROW) / 2;
232
- return worldPxToLonLat(originX + column * SUBPIXELS_PER_COLUMN + SUBPIXELS_PER_COLUMN / 2, originY + row * SUBPIXELS_PER_ROW + SUBPIXELS_PER_ROW / 2, this.zoom);
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) * SUBPIXELS_PER_COLUMN, center.y + (anchor.row - row) * SUBPIXELS_PER_ROW, anchor.zoom);
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 = error instanceof Error ? error.message : String(error);
348
+ this.error = errorMessage(error);
362
349
  if (!this.restored) {
363
350
  this.drawStatusBar("");
364
351
  }
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../lib/browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAEnF,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAClC,OAAO,EAAE,gBAAgB,EAAoB,aAAa,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACxF,OAAO,EACN,eAAe,EACf,yBAAyB,EACzB,sBAAsB,EACtB,eAAe,EACf,aAAa,GACb,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAGvC,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,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;;;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,yBAAyB,EAC9C,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,sBAAsB,EACxC,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,yBAAyB,CAAC,GAAG,CAAC,CAAA;QACzE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAA;QAEvE,OAAO,eAAe,CACrB,OAAO,GAAG,MAAM,GAAG,yBAAyB,GAAG,yBAAyB,GAAG,CAAC,EAC5E,OAAO,GAAG,GAAG,GAAG,sBAAsB,GAAG,sBAAsB,GAAG,CAAC,EACnE,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,yBAAyB,EAC/D,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,sBAAsB,EACtD,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,YAAY,CAAC,KAAK,CAAC,CAAA;YAEhC,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"}