@chrtco/sdk 0.10.39 → 0.10.41
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/CHANGELOG.md +146 -0
- package/dist/index.cjs +991 -656
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +531 -17
- package/dist/index.d.ts +531 -17
- package/dist/index.js +960 -656
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -265,6 +265,35 @@ declare function styleModeBand(mode: ChrtStyleMode): ScaleBand$1 | null;
|
|
|
265
265
|
* band code(s) by extracting the band character from `_cell_id`.
|
|
266
266
|
*/
|
|
267
267
|
declare function bandFilterExpression(codes: BandCode | readonly BandCode[]): unknown[];
|
|
268
|
+
/**
|
|
269
|
+
* Cell-id band characters that are NOT NOAA usage bands but are exported
|
|
270
|
+
* under one of them, keyed by the band they stand in for.
|
|
271
|
+
*
|
|
272
|
+
* USACE Inland ENC cell ids are `U37…` — the third character is `7` on every
|
|
273
|
+
* one of the 109 cells and means nothing (`sources.ts` `cellIdCarriesBand:
|
|
274
|
+
* false`). The pipeline assigns the whole product to band 5 (`layers.ts`
|
|
275
|
+
* `USACE_IENC_BAND = 5`: 1:5,000 compilation scale sits inside NOAA's
|
|
276
|
+
* Harbour band) and exports it with band 5's zoom policy and dominance tags.
|
|
277
|
+
* So a band-5 gate on `slice(_cell_id, 2, 3)` is exactly the gate those
|
|
278
|
+
* features were built for — it just never matched the character `7`. Every
|
|
279
|
+
* band-5 gate in the style therefore also admits `7`, and nothing else
|
|
280
|
+
* changes: no seventh band, no new draw order, no new zoom range.
|
|
281
|
+
*
|
|
282
|
+
* CHRTsail friction #269: the offline USACE_IENC bundle downloaded, verified
|
|
283
|
+
* and served, and the style drew none of it — 1,250 of 1,251 layers gated on
|
|
284
|
+
* bands 1–6.
|
|
285
|
+
*/
|
|
286
|
+
declare const BAND_CODE_ALIASES: Readonly<Partial<Record<BandCode, readonly string[]>>>;
|
|
287
|
+
/** A band code plus every character that stands in for it. */
|
|
288
|
+
declare function cellBandCharacters(code: BandCode): readonly string[];
|
|
289
|
+
/**
|
|
290
|
+
* Match `cellBandExpr` (an expression yielding the cell id's band character)
|
|
291
|
+
* against one or more bands, aliases included. `==` when exactly one
|
|
292
|
+
* character qualifies, `in` otherwise — the shape a consumer reads, so a
|
|
293
|
+
* single-band filter stays the same expression it has always been unless the
|
|
294
|
+
* band has an alias.
|
|
295
|
+
*/
|
|
296
|
+
declare function cellBandMatch(cellBandExpr: unknown, codes: BandCode | readonly BandCode[]): unknown[];
|
|
268
297
|
/**
|
|
269
298
|
* Combine a base filter (may be undefined) with a band filter via `["all"]`.
|
|
270
299
|
* If the base filter is itself an `["all", ...]`, flatten so we don't end
|
|
@@ -896,6 +925,12 @@ interface MarineConditionsOptions {
|
|
|
896
925
|
* asked for.
|
|
897
926
|
*/
|
|
898
927
|
station?: string;
|
|
928
|
+
/**
|
|
929
|
+
* Add the chosen station's last `hours` hours of readings as `series`.
|
|
930
|
+
* A whole number, 1–1080 (45 days — all NDBC's per-station file holds).
|
|
931
|
+
* Omit it and the response is unchanged.
|
|
932
|
+
*/
|
|
933
|
+
hours?: number;
|
|
899
934
|
signal?: AbortSignal;
|
|
900
935
|
}
|
|
901
936
|
interface MarineStation {
|
|
@@ -940,6 +975,39 @@ interface MarineConditionsResponse {
|
|
|
940
975
|
dataQuality: "live" | "degraded";
|
|
941
976
|
attribution: string;
|
|
942
977
|
disclaimer: string;
|
|
978
|
+
/** Present only when `hours` was passed. */
|
|
979
|
+
series?: MarineConditionsSeries;
|
|
980
|
+
}
|
|
981
|
+
/**
|
|
982
|
+
* One reading, in exactly the shape of the top-level `conditions` /
|
|
983
|
+
* `unavailable` — same units, same rule that a field the buoy did not report is
|
|
984
|
+
* absent from `conditions` and named in `unavailable`.
|
|
985
|
+
*/
|
|
986
|
+
interface MarineConditionsObservation {
|
|
987
|
+
time: string;
|
|
988
|
+
conditions: Record<string, WeatherReading | undefined>;
|
|
989
|
+
unavailable: string[];
|
|
990
|
+
}
|
|
991
|
+
/**
|
|
992
|
+
* A station's recent readings. **Never interpolated, smoothed, resampled or
|
|
993
|
+
* gap-filled** — if you draw a line between two observations, it is yours;
|
|
994
|
+
* label it as drawn. Every observation is at or before the top-level
|
|
995
|
+
* `observed.time`.
|
|
996
|
+
*/
|
|
997
|
+
interface MarineConditionsSeries {
|
|
998
|
+
/** Start of the window asked for: request time minus `hours`. */
|
|
999
|
+
from: string;
|
|
1000
|
+
/** End of the window asked for: request time. */
|
|
1001
|
+
to: string;
|
|
1002
|
+
order: "oldest-first";
|
|
1003
|
+
/**
|
|
1004
|
+
* The station's normal spacing in this window, in minutes — the most common
|
|
1005
|
+
* interval between consecutive readings. `null` below two readings. Per
|
|
1006
|
+
* station (10, 30 or 60): use it to tell a dropped report from ordinary
|
|
1007
|
+
* spacing.
|
|
1008
|
+
*/
|
|
1009
|
+
cadenceMinutes: number | null;
|
|
1010
|
+
observations: MarineConditionsObservation[];
|
|
943
1011
|
}
|
|
944
1012
|
interface MarineAlertsOptions {
|
|
945
1013
|
lat?: number;
|
|
@@ -955,6 +1023,12 @@ interface MarineZoneRef {
|
|
|
955
1023
|
office?: string;
|
|
956
1024
|
/** Other zones the same bulletin forecasts for. */
|
|
957
1025
|
alsoCovers?: string[];
|
|
1026
|
+
/**
|
|
1027
|
+
* `[west, south, east, north]` of the zone, from the same build the `NWS_MARINE_ZONES` tiles
|
|
1028
|
+
* draw. **A camera hint — fit the map to it; never draw it as the zone.** `west > east` means
|
|
1029
|
+
* the box crosses 180°. Absent for a zone that build does not contain. (marine-forecast only)
|
|
1030
|
+
*/
|
|
1031
|
+
bbox?: [west: number, south: number, east: number, north: number];
|
|
958
1032
|
}
|
|
959
1033
|
interface MarineAlert {
|
|
960
1034
|
id: string;
|
|
@@ -1524,6 +1598,14 @@ interface StyleUrlOptions {
|
|
|
1524
1598
|
* so this currently returns 403 for every key. It will start working
|
|
1525
1599
|
* with no SDK change once that grant ships. */
|
|
1526
1600
|
relief?: boolean;
|
|
1601
|
+
/** The unit every number in the document prints in — soundings,
|
|
1602
|
+
* depth-contour labels, dredged-channel notes and bridge notes:
|
|
1603
|
+
* `"metric"` (default; S-57's own metres) or `"imperial"` (feet). Same
|
|
1604
|
+
* vocabulary as the weather API's `units`. Send the reader's setting
|
|
1605
|
+
* here rather than converting soundings client-side: a bridge note is
|
|
1606
|
+
* composed text, and a chart whose soundings read feet beside a note
|
|
1607
|
+
* that reads metres is exactly the disagreement this prevents. */
|
|
1608
|
+
units?: "metric" | "imperial";
|
|
1527
1609
|
}
|
|
1528
1610
|
interface FetchStyleOptions extends StyleUrlOptions {
|
|
1529
1611
|
signal?: AbortSignal;
|
|
@@ -1637,6 +1719,9 @@ declare class WeatherEndpoint {
|
|
|
1637
1719
|
*
|
|
1638
1720
|
* `unavailable` names every field the station did not report, so absence is
|
|
1639
1721
|
* stated rather than inferred from a missing key.
|
|
1722
|
+
*
|
|
1723
|
+
* Pass `hours` for the station's recent readings as `series` — NDBC's own
|
|
1724
|
+
* readings at NDBC's own instants, never interpolated.
|
|
1640
1725
|
*/
|
|
1641
1726
|
conditions(options: MarineConditionsOptions): Promise<MarineConditionsResponse>;
|
|
1642
1727
|
/**
|
|
@@ -1797,6 +1882,22 @@ declare class OfflineEndpoint {
|
|
|
1797
1882
|
private persistManifestEntry;
|
|
1798
1883
|
}
|
|
1799
1884
|
|
|
1885
|
+
/**
|
|
1886
|
+
* CHRTinteract decode core — S-57 attribute decoder and flash-pattern
|
|
1887
|
+
* generator for click-to-inspect.
|
|
1888
|
+
*
|
|
1889
|
+
* Framework-free, zero-dependency port of the first-party decode brain
|
|
1890
|
+
* (`src/lib/map/nav-aid-info.ts` in the CHRT platform repo). The platform file
|
|
1891
|
+
* remains the reference implementation; parity between the two is enforced by
|
|
1892
|
+
* `decode-parity.test.ts`, which runs both against shared fixtures. Behavioral
|
|
1893
|
+
* changes must land in both places.
|
|
1894
|
+
*
|
|
1895
|
+
* Translates raw S-57 codes (LITCHR, COLOUR, SIGPER, SIGGRP, CATxxx, …) as
|
|
1896
|
+
* they appear in CHRT vector-tile attributes into human-readable strings,
|
|
1897
|
+
* mariner notation ("Fl(2+1) W 10s"), animated light phase timing, and sector
|
|
1898
|
+
* geometry.
|
|
1899
|
+
*/
|
|
1900
|
+
|
|
1800
1901
|
/** Style-layer ids (CHRT S-52 atlas) that carry point nav-aid features. */
|
|
1801
1902
|
declare const NAV_AID_QUERY_LAYERS: string[];
|
|
1802
1903
|
/** Style-layer ids for area / hazard / regulated / infrastructure features. */
|
|
@@ -1844,11 +1945,30 @@ interface SectorInfo {
|
|
|
1844
1945
|
colourHex: string;
|
|
1845
1946
|
notation: string;
|
|
1846
1947
|
nominalRange?: number | null;
|
|
1948
|
+
/** Every charted COLOUR code, in charted order — an alternating sector has two. */
|
|
1949
|
+
colourCodes: number[];
|
|
1950
|
+
/**
|
|
1951
|
+
* S-52 LIGHTS05's arc colour for this sector, as a palette token: LITRD /
|
|
1952
|
+
* LITGN / LITYW (white, yellow and orange all draw yellow — white ink on a
|
|
1953
|
+
* chart is no ink), CHMGD where the colours do not resolve, CHBRN when
|
|
1954
|
+
* obscured. `arcColourHex` is that token resolved in the palette the sectors
|
|
1955
|
+
* were built for.
|
|
1956
|
+
*/
|
|
1957
|
+
arcColourToken: SectorArcColourToken;
|
|
1958
|
+
arcColourHex: string;
|
|
1959
|
+
/** LITVIS 3 (faint), 7 (obscured) or 8 (partially obscured): drawn brown, not lit. */
|
|
1960
|
+
obscured: boolean;
|
|
1961
|
+
/** The charted `SIGSEQ` and `SIGPER`, verbatim, for the lamp's rhythm. */
|
|
1962
|
+
sigseq: string | null;
|
|
1963
|
+
sigper: number | null;
|
|
1847
1964
|
/**
|
|
1848
1965
|
* True when this entry is DERIVED: an all-round light (no `SECTR1`/`SECTR2`)
|
|
1849
|
-
* sharing its position with sectored lights,
|
|
1850
|
-
* leave uncovered
|
|
1851
|
-
*
|
|
1966
|
+
* sharing its position with sectored lights, spread over the arc the
|
|
1967
|
+
* sectors leave uncovered. It is what a reader IN that arc sees, and the
|
|
1968
|
+
* bearing lookup needs it — but it is NOT drawn: S-52 LIGHTS05 gives an
|
|
1969
|
+
* all-round light its flare and no arc, and `buildSectorArcsFC` follows the
|
|
1970
|
+
* procedure. Mirrors `src/lib/map/nav-aid-info.ts`; the parity suite holds
|
|
1971
|
+
* the two together.
|
|
1852
1972
|
*/
|
|
1853
1973
|
allRound?: boolean;
|
|
1854
1974
|
}
|
|
@@ -1871,6 +1991,8 @@ interface DecodedNavAid {
|
|
|
1871
1991
|
lightCharacterFull: string | null;
|
|
1872
1992
|
period: number | null;
|
|
1873
1993
|
group: number[] | null;
|
|
1994
|
+
/** The charted on/off sequence, verbatim (`"00.4+(03.6)"`), or null. */
|
|
1995
|
+
sigseq: string | null;
|
|
1874
1996
|
fogSignal: string | null;
|
|
1875
1997
|
fogSignalAbbr: string | null;
|
|
1876
1998
|
radarReflector: boolean;
|
|
@@ -1920,6 +2042,8 @@ interface FlashPattern {
|
|
|
1920
2042
|
phases: FlashPhase[];
|
|
1921
2043
|
totalCycle: number;
|
|
1922
2044
|
notation: string;
|
|
2045
|
+
/** "charted": from the light's own SIGSEQ. "invented": a plausible animation of the character code. */
|
|
2046
|
+
timing: "charted" | "invented";
|
|
1923
2047
|
}
|
|
1924
2048
|
declare function buildFlashPattern(decoded: DecodedNavAid): FlashPattern | null;
|
|
1925
2049
|
/** Minimal GeoJSON shapes for the sector-arc builders (kept dependency-free). */
|
|
@@ -1950,21 +2074,10 @@ declare function uncoveredSectorArcs(sectors: ReadonlyArray<{
|
|
|
1950
2074
|
start: number;
|
|
1951
2075
|
end: number;
|
|
1952
2076
|
}>;
|
|
1953
|
-
|
|
1954
|
-
* Build all sectors from multiple LIGHTS features at the same position.
|
|
1955
|
-
* Each LIGHTS feature with SECTR1/SECTR2 defines one sector.
|
|
1956
|
-
*
|
|
1957
|
-
* An ALL-ROUND light (no `SECTR1`/`SECTR2`) at the same position as sectored
|
|
1958
|
-
* lights is added too, over the arc the sectors leave uncovered — S-52
|
|
1959
|
-
* LIGHTS05 draws such a light as an arc so its colour is not lost. Isle au
|
|
1960
|
-
* Haut (Robinson Point) is encoded exactly this way: `Fl R 4s` all-round plus
|
|
1961
|
-
* a white sector 034°–060°; without this the red never appeared at all. An
|
|
1962
|
-
* all-round light with no charted colour, or with no sectored sibling, adds
|
|
1963
|
-
* nothing (a plain light is a flare, not a ring).
|
|
1964
|
-
*/
|
|
2077
|
+
type SectorArcColourToken = "LITRD" | "LITGN" | "LITYW" | "CHMGD" | "CHBRN";
|
|
1965
2078
|
declare function buildSectorsFromFeatures(features: Array<{
|
|
1966
2079
|
properties: Record<string, unknown>;
|
|
1967
|
-
}
|
|
2080
|
+
}>, ct?: ColorTableName): SectorInfo[];
|
|
1968
2081
|
/**
|
|
1969
2082
|
* Convert a charted sector limit (`SECTR1`/`SECTR2`) into the bearing FROM
|
|
1970
2083
|
* THE LIGHT at which its limit line is drawn on the chart.
|
|
@@ -2527,6 +2640,97 @@ declare function collectClickCandidates(map: InteractMapLike, point: {
|
|
|
2527
2640
|
*/
|
|
2528
2641
|
declare function decodeCandidate(map: InteractMapLike, candidate: InspectCandidate, at: ClickAnchor, opts?: AttachOptions): InspectResult;
|
|
2529
2642
|
|
|
2643
|
+
/**
|
|
2644
|
+
* `SIGSEQ` — THE RHYTHM A LIGHT ACTUALLY BURNS, for the map as well as the card.
|
|
2645
|
+
*
|
|
2646
|
+
* `SIGSEQ` is the literal on/off timing string the chart carries:
|
|
2647
|
+
* `"00.4+(03.6)"` is 0.4 s lit, 3.6 s dark; parenthesised terms are ECLIPSE.
|
|
2648
|
+
* That is the whole grammar. 44,181 of the 59,331 lights in the national
|
|
2649
|
+
* archive carry one (measured 2026-09-11), and only 17 exceed twelve terms.
|
|
2650
|
+
*
|
|
2651
|
+
* ===========================================================================
|
|
2652
|
+
* ⚠ ONE PARSER. THIS FILE IS IT.
|
|
2653
|
+
* ===========================================================================
|
|
2654
|
+
*
|
|
2655
|
+
* The inspect card's `light-rhythm.ts` had the honest parser — with the
|
|
2656
|
+
* `SIGPER` checksum and the refusal semantics `FlashPattern.swift` settled —
|
|
2657
|
+
* and `nav-aid-info.ts`'s `buildFlashPattern` had the other kind: 400 ms
|
|
2658
|
+
* flashes, 300 ms gaps, a 6 s period when none was charted, `SIGSEQ` never
|
|
2659
|
+
* read. The audit of 2026-09-11 found the popup drawing the invented one.
|
|
2660
|
+
* *"A wrong rhythm on screen is worse than no rhythm, because a skipper
|
|
2661
|
+
* identifies a light BY its rhythm — the pattern is the light's name."*
|
|
2662
|
+
*
|
|
2663
|
+
* So the grammar lives HERE, in the SDK's interact layer, and reaches the
|
|
2664
|
+
* app through `@chrtco/sdk` (`src/lib/map/light-sigseq.ts` re-exports it);
|
|
2665
|
+
* `light-rhythm.ts` delegates to `parseSigseqTerms` and keeps its disclosure
|
|
2666
|
+
* layer, and `buildFlashPattern` reads the chart's timing before it invents.
|
|
2667
|
+
*
|
|
2668
|
+
* ===========================================================================
|
|
2669
|
+
* THE NIGHT VIEW'S LAMPS FLASH FROM THIS TOO
|
|
2670
|
+
* ===========================================================================
|
|
2671
|
+
*
|
|
2672
|
+
* A style expression cannot parse a string, so the canvas parses each light
|
|
2673
|
+
* once (`rhythmProperties`) into cumulative phase ends `r1..rN`, on-flags
|
|
2674
|
+
* `o1..oN` and per-phase colours `c1..cN` on a GeoJSON feature, and a 10 Hz
|
|
2675
|
+
* tick sets ONE paint property — `lampRhythmOpacity(now)` — that every lamp
|
|
2676
|
+
* evaluates for itself on the GPU. Ten repaints a second of a one-stack style
|
|
2677
|
+
* is ~17 ms each (#1769); this is the budget that made flashing affordable.
|
|
2678
|
+
* Ten hertz quantises a VQ (0.2 s on) to two ticks, which reads as quick
|
|
2679
|
+
* flashing rather than as its exact rate; that is the accepted cost.
|
|
2680
|
+
*/
|
|
2681
|
+
/** The most terms a `SIGSEQ` may have and still be drawn. Twelve pairs. */
|
|
2682
|
+
declare const SIGSEQ_MAX_TERMS = 24;
|
|
2683
|
+
/**
|
|
2684
|
+
* How far the segment sum may differ from `SIGPER` and still be believed.
|
|
2685
|
+
* `SIGSEQ` is published to 0.1 s per term, so a handful of terms can round
|
|
2686
|
+
* apart by a few hundredths. FlashPattern.swift:117-121.
|
|
2687
|
+
*/
|
|
2688
|
+
declare const SIGPER_TOLERANCE_SECONDS = 0.06;
|
|
2689
|
+
/** The lamp tick. */
|
|
2690
|
+
declare const LAMP_TICK_MS = 100;
|
|
2691
|
+
type SigseqRefusal = "malformed" | "nonPositiveDuration" | "sigperMismatch";
|
|
2692
|
+
interface SigseqTerm {
|
|
2693
|
+
readonly seconds: number;
|
|
2694
|
+
/** True for a lit segment, false for an eclipse. */
|
|
2695
|
+
readonly isOn: boolean;
|
|
2696
|
+
}
|
|
2697
|
+
interface ParsedSigseqTerms {
|
|
2698
|
+
readonly phases: readonly SigseqTerm[];
|
|
2699
|
+
readonly periodSeconds: number;
|
|
2700
|
+
/** True when `SIGPER` was present and the sum agreed with it. */
|
|
2701
|
+
readonly checkedAgainstSigper: boolean;
|
|
2702
|
+
}
|
|
2703
|
+
/**
|
|
2704
|
+
* Parse a `SIGSEQ` against its `SIGPER`. Refuses rather than guesses: a
|
|
2705
|
+
* malformed term, a zero-length segment, or a sum that disagrees with the
|
|
2706
|
+
* charted period is a data anomaly and must not be drawn.
|
|
2707
|
+
*/
|
|
2708
|
+
declare function parseSigseqTerms(sigseq: unknown, sigper: number | null): ParsedSigseqTerms | {
|
|
2709
|
+
readonly refusal: SigseqRefusal | "absent";
|
|
2710
|
+
};
|
|
2711
|
+
/**
|
|
2712
|
+
* The feature properties a lamp needs to flash on the GPU: `rp` the period,
|
|
2713
|
+
* `rn` the term count, `r{k}` the cumulative end of term k in seconds,
|
|
2714
|
+
* `o{k}` 1 for lit / 0 for eclipse, `c{k}` the colour of a lit term. Lit
|
|
2715
|
+
* terms cycle through `onColoursHex` — that is how `Al WR` alternates.
|
|
2716
|
+
* `rn: 0` is a steady light: `lampRhythmOpacity` treats it as always on.
|
|
2717
|
+
*/
|
|
2718
|
+
declare function rhythmProperties(parsed: ParsedSigseqTerms | null, onColoursHex: readonly string[]): Record<string, number | string>;
|
|
2719
|
+
/**
|
|
2720
|
+
* `circle-opacity` at `nowSeconds` for every lamp at once: `base` while the
|
|
2721
|
+
* lamp's current term is lit, 0 in an eclipse, `base` for a steady light.
|
|
2722
|
+
* Terms are tested in order against their cumulative ends; a light with
|
|
2723
|
+
* fewer than `SIGSEQ_MAX_TERMS` terms leaves the later `r{k}` absent, which
|
|
2724
|
+
* `coalesce`s to a sentinel the phase can never reach.
|
|
2725
|
+
*/
|
|
2726
|
+
declare function lampRhythmOpacity(nowSeconds: number, base: number): unknown[];
|
|
2727
|
+
/**
|
|
2728
|
+
* `circle-color` at `nowSeconds`: the lit term's colour, so an alternating
|
|
2729
|
+
* light changes colour flash by flash; `fallback` (the light's colour
|
|
2730
|
+
* expression) for a steady light or an eclipse.
|
|
2731
|
+
*/
|
|
2732
|
+
declare function lampRhythmColour(nowSeconds: number, fallback: unknown): unknown[];
|
|
2733
|
+
|
|
2530
2734
|
/**
|
|
2531
2735
|
* CHRTinteract — productized click-to-inspect for CHRT charts.
|
|
2532
2736
|
*
|
|
@@ -3280,6 +3484,8 @@ interface PmtilesVectorSource {
|
|
|
3280
3484
|
tiles: string[];
|
|
3281
3485
|
minzoom: number;
|
|
3282
3486
|
maxzoom: number;
|
|
3487
|
+
/** The credit a renderer shows for this source (MapLibre's attribution control). */
|
|
3488
|
+
attribution?: string;
|
|
3283
3489
|
}
|
|
3284
3490
|
/**
|
|
3285
3491
|
* Terrarium elevation, served as PNG from `CHRT_RELIEF`. Separate from the
|
|
@@ -3294,6 +3500,8 @@ interface RasterDemSource {
|
|
|
3294
3500
|
tileSize: number;
|
|
3295
3501
|
minzoom: number;
|
|
3296
3502
|
maxzoom: number;
|
|
3503
|
+
/** The credit a renderer shows for this source (MapLibre's attribution control). */
|
|
3504
|
+
attribution?: string;
|
|
3297
3505
|
}
|
|
3298
3506
|
type VectorSourceSpec = MapboxVectorSource | PmtilesVectorSource;
|
|
3299
3507
|
type AnySourceSpec = VectorSourceSpec | RasterDemSource;
|
|
@@ -3314,6 +3522,40 @@ declare const BASE_REGION = "CHRT_BASE";
|
|
|
3314
3522
|
*/
|
|
3315
3523
|
declare const BASE_MINZOOM = 0;
|
|
3316
3524
|
declare const BASE_MAXZOOM = 11;
|
|
3525
|
+
/**
|
|
3526
|
+
* The credit the ONLINE CHRT_BASE source carries (owner wording, 2026-09-16).
|
|
3527
|
+
*
|
|
3528
|
+
* OpenStreetMap is named because the online archive's z9–11 detail tier IS
|
|
3529
|
+
* OSM-derived inland water (ODbL, `public/chrtbase-derivation.json`). The
|
|
3530
|
+
* app-embeddable offline bundle is a z0–6 cut that contains no OSM data and
|
|
3531
|
+
* carries `BASE_BUNDLE_ATTRIBUTION` instead (base-layers.ts) — one credit per
|
|
3532
|
+
* artefact, each naming exactly the data it holds.
|
|
3533
|
+
*/
|
|
3534
|
+
declare const BASE_ATTRIBUTION = "\u00A9 CHRT \u00B7 Made with Natural Earth \u00B7 \u00A9 OpenStreetMap contributors";
|
|
3535
|
+
/**
|
|
3536
|
+
* The credit the CHRT_LAND source carries. CHRTland's land, land use, roads,
|
|
3537
|
+
* places, peaks and marinas are OpenStreetMap via the Protomaps planet, and the
|
|
3538
|
+
* ODbL requires this notice wherever the map is shown (.chrt/legal.md
|
|
3539
|
+
* "Required notices"). Its other inputs — the ENC's charted land, USGS 3DEP
|
|
3540
|
+
* contours, GNIS names — are US federal public domain and owe none. Same
|
|
3541
|
+
* string as the offline land bundle's (offline-worker `LAND_PROVENANCE`).
|
|
3542
|
+
*/
|
|
3543
|
+
declare const LAND_ATTRIBUTION = "\u00A9 OpenStreetMap contributors";
|
|
3544
|
+
/**
|
|
3545
|
+
* The credit the CHRT_RELIEF source carries. USGS 3DEP elevation, public
|
|
3546
|
+
* domain (17 U.S.C. § 105) — no notice is required, so this is a courtesy that
|
|
3547
|
+
* names the source. There is no OpenStreetMap in it.
|
|
3548
|
+
*/
|
|
3549
|
+
declare const RELIEF_ATTRIBUTION = "Elevation: USGS 3D Elevation Program";
|
|
3550
|
+
/** Terrarium tiles are 512 px; the default 256 would halve the apparent relief. */
|
|
3551
|
+
declare const RELIEF_TILE_SIZE = 512;
|
|
3552
|
+
/**
|
|
3553
|
+
* How `CHRT_RELIEF`'s PNGs encode elevation. MapLibre's raster-dem default is
|
|
3554
|
+
* `mapbox`, which decodes terrarium RGB into nonsense heights — so every
|
|
3555
|
+
* surface that describes this source (this registry, the tile-worker's
|
|
3556
|
+
* TileJSON) has to say it.
|
|
3557
|
+
*/
|
|
3558
|
+
declare const RELIEF_ENCODING = "terrarium";
|
|
3317
3559
|
type SourceMode = "mapbox" | "pmtiles";
|
|
3318
3560
|
/**
|
|
3319
3561
|
* Query parameter carrying the resolved build id on every tile URL.
|
|
@@ -4167,6 +4409,91 @@ declare const BUILD_MAXZOOM = 14;
|
|
|
4167
4409
|
*/
|
|
4168
4410
|
declare const LAND_BUILD_MAXZOOM = 14;
|
|
4169
4411
|
|
|
4412
|
+
/**
|
|
4413
|
+
* The CHRT_BASE BUNDLE — the app-embeddable world basemap, and the style
|
|
4414
|
+
* surgery that draws a chart over it with no network at all (CHRTsail #814).
|
|
4415
|
+
*
|
|
4416
|
+
* ── What the bundle is ──────────────────────────────────────────────────────
|
|
4417
|
+
*
|
|
4418
|
+
* A z0–6 cut of the CHRT_BASE archive holding FOUR Natural Earth layers:
|
|
4419
|
+
* the landmass, world lakes, the admin-0 outline and land borders. Measured
|
|
4420
|
+
* 2026-09-16: 3,319 tiles, 5.28 MB MBTiles / 4.21 MB PMTiles. An app may ship
|
|
4421
|
+
* it inside its binary (owner, 2026-09-16: any CHRT API key, attribution
|
|
4422
|
+
* shown, no resale as a standalone dataset).
|
|
4423
|
+
*
|
|
4424
|
+
* ── What it deliberately is NOT ─────────────────────────────────────────────
|
|
4425
|
+
*
|
|
4426
|
+
* No `jurisdiction`, no `state_*`, no `inland_water*`, no `base_river`. Owner
|
|
4427
|
+
* decision 2026-09-16, and the reason is sovereignty, not size: every one of
|
|
4428
|
+
* those layers is shaped by WHICH countries CHRT carries charts for
|
|
4429
|
+
* (`JURISDICTION_ISO_BY_SOURCE`), and that list changes when a source goes
|
|
4430
|
+
* live — or is withdrawn. A copy compiled into an app binary cannot heartbeat.
|
|
4431
|
+
* A stale one that still painted a withdrawn country tan would claim coverage
|
|
4432
|
+
* the live service no longer claims. The neutral four layers are geography
|
|
4433
|
+
* only; they assert nothing about CHRT, so a bundled copy can be old without
|
|
4434
|
+
* being wrong, and it never expires.
|
|
4435
|
+
*
|
|
4436
|
+
* The cost is honest and stated in the docs: offline, the "ours, not yet
|
|
4437
|
+
* charted" tan does not exist. Uncharted land and water read as no coverage
|
|
4438
|
+
* (the crosshatch), and charted water still paints its ground from the CHART
|
|
4439
|
+
* bundle's own `M_COVR` — the chart is what claims coverage, never the base.
|
|
4440
|
+
*
|
|
4441
|
+
* ── No OpenStreetMap, by construction ───────────────────────────────────────
|
|
4442
|
+
*
|
|
4443
|
+
* The archive's OSM-derived detail tier is tiled from z9 (`build.mjs`
|
|
4444
|
+
* DETAIL_MINZOOM), so no z≤6 tile can contain it, and none of the four layers
|
|
4445
|
+
* is a detail-tier layer name. `tools/chrtbase-build/chrtbase.test.mjs` pins
|
|
4446
|
+
* both. Hence the bundle credit names Natural Earth only.
|
|
4447
|
+
*/
|
|
4448
|
+
/** The bundle id in the offline catalogue — the same string as the source. */
|
|
4449
|
+
declare const BASE_BUNDLE_ID = "CHRT_BASE";
|
|
4450
|
+
/**
|
|
4451
|
+
* The bundle's layer contract version. Bumped only when the SET of layers or
|
|
4452
|
+
* their meaning changes — never per build — so a bundle shipped in an app
|
|
4453
|
+
* keeps rendering under every offline style that declares the same schema.
|
|
4454
|
+
*/
|
|
4455
|
+
declare const BASE_BUNDLE_SCHEMA = "chrt.basemap-bundle/1";
|
|
4456
|
+
/** The cut's zoom ceiling. Above it MapLibre overzooms z6 — geography only. */
|
|
4457
|
+
declare const BASE_BUNDLE_MAXZOOM = 6;
|
|
4458
|
+
/**
|
|
4459
|
+
* The only source-layers a bundle holds. Everything jurisdiction-shaped is
|
|
4460
|
+
* absent — see the header. Must equal `BUNDLE_LAYERS` in
|
|
4461
|
+
* `tools/chrtbase-build/bundle.mjs` (gated by chrtbase.test.mjs).
|
|
4462
|
+
*/
|
|
4463
|
+
declare const BASE_BUNDLE_SOURCE_LAYERS: readonly string[];
|
|
4464
|
+
/** The bundle's credit (owner wording 2026-09-16). Natural Earth only: the cut holds no OSM. */
|
|
4465
|
+
declare const BASE_BUNDLE_ATTRIBUTION = "\u00A9 CHRT \u00B7 Made with Natural Earth";
|
|
4466
|
+
/**
|
|
4467
|
+
* Where a client's OWN raster (satellite, scanned chart, anything) goes in a
|
|
4468
|
+
* `base=1` style: `map.addLayer(yourRaster, BASE_CLIENT_RASTER_BEFORE_ID)`.
|
|
4469
|
+
*
|
|
4470
|
+
* Directly under the no-coverage crosshatch, so the raster replaces the base
|
|
4471
|
+
* geography but can never hide the absence marker, and the chart's
|
|
4472
|
+
* coverage ground and the chart paint over it wherever a chart exists.
|
|
4473
|
+
*/
|
|
4474
|
+
declare const BASE_CLIENT_RASTER_BEFORE_ID = "chrtbase-nocoverage";
|
|
4475
|
+
interface StyleLike {
|
|
4476
|
+
sources: Record<string, unknown>;
|
|
4477
|
+
layers: unknown[];
|
|
4478
|
+
}
|
|
4479
|
+
/**
|
|
4480
|
+
* Point a `generateStyle(…, { base: true })` document at a local CHRT_BASE
|
|
4481
|
+
* bundle, and drop every base layer the bundle cannot feed.
|
|
4482
|
+
*
|
|
4483
|
+
* Mutates and returns `style` (the same convention as `applyS101SymbolSet`).
|
|
4484
|
+
* Order is untouched: the kept layers stay exactly where the online style
|
|
4485
|
+
* puts them, so the offline document is the online one minus the
|
|
4486
|
+
* jurisdiction-shaped layers.
|
|
4487
|
+
*
|
|
4488
|
+
* Layers are dropped rather than left pointing at absent source-layers: a
|
|
4489
|
+
* layer that silently draws nothing is how a style looks complete while it
|
|
4490
|
+
* is not, and a future bundle carrying a layer of that name must not light
|
|
4491
|
+
* one up under an old style.
|
|
4492
|
+
*/
|
|
4493
|
+
declare function applyBaseBundle<T extends StyleLike>(style: T, opts: {
|
|
4494
|
+
tiles: string;
|
|
4495
|
+
}): T;
|
|
4496
|
+
|
|
4170
4497
|
/**
|
|
4171
4498
|
* CHRTstyle custom styles — the customer-facing map_styles config applied
|
|
4172
4499
|
* on top of the generated S-52 style.
|
|
@@ -4375,6 +4702,193 @@ declare function generateCustomStyle(config: CustomStyleConfig, opts?: GenerateC
|
|
|
4375
4702
|
bandFan?: "collapsed" | "legacy";
|
|
4376
4703
|
}): GeneratedCustomStyle;
|
|
4377
4704
|
|
|
4705
|
+
/**
|
|
4706
|
+
* DRAPED LAYERS FIRST — the one ordering rule that makes 3D terrain affordable.
|
|
4707
|
+
*
|
|
4708
|
+
* ===========================================================================
|
|
4709
|
+
* 1 · WHAT MAPLIBRE DOES WITH THE LAYER ORDER WHEN TERRAIN IS ON
|
|
4710
|
+
* ===========================================================================
|
|
4711
|
+
*
|
|
4712
|
+
* With `map.setTerrain(...)` set, MapLibre GL JS (5.24, `render_to_texture.ts`)
|
|
4713
|
+
* cannot draw fills and lines straight to the screen: it renders them into a
|
|
4714
|
+
* texture per terrain tile and drapes that texture over the mesh. Only
|
|
4715
|
+
* `background`, `fill`, `line`, `raster`, `hillshade` and `color-relief` are
|
|
4716
|
+
* drapeable; `symbol`, `circle`, `fill-extrusion` and `heatmap` are drawn
|
|
4717
|
+
* directly, depth-tested against the terrain.
|
|
4718
|
+
*
|
|
4719
|
+
* It walks the style in order and cuts a new "stack" every time a
|
|
4720
|
+
* non-drapeable layer sits between two drapeable ones. Then, per frame, FOR
|
|
4721
|
+
* EVERY STACK it (a) renders that stack's layers into a texture for every
|
|
4722
|
+
* visible terrain tile and (b) draws every tile's full mesh — 128×128×2 =
|
|
4723
|
+
* 32,768 triangles — with that texture. The texture cache is a 30-slot LRU
|
|
4724
|
+
* pool that is freed after every stack, so with two or more stacks NO texture
|
|
4725
|
+
* survives to the next frame: everything is re-rendered, every frame.
|
|
4726
|
+
*
|
|
4727
|
+
* The chart interleaves symbols with fills and lines per band, so at z12+ it
|
|
4728
|
+
* produced **130 stacks** across 1,313 visible layers. Measured 2026-09-11 at
|
|
4729
|
+
* Mount Desert, 1100×800, pitch 45, 6 terrain tiles, a 4 s pan:
|
|
4730
|
+
*
|
|
4731
|
+
* interleaved order 130 stacks 37 ms/frame (1,015 ms cold, while
|
|
4732
|
+
* tiles were still arriving)
|
|
4733
|
+
* draped-first order 1 stack 17 ms/frame — identical to the 2D chart
|
|
4734
|
+
*
|
|
4735
|
+
* The cold figure is the one the owner reported as "SUPER slow" and "crashes
|
|
4736
|
+
* the web app if you try to pan": every arriving tile invalidates its
|
|
4737
|
+
* textures, the frame takes a second, and the browser's GPU watchdog takes
|
|
4738
|
+
* the context. Halving the mesh (`meshSize` 64) and capping tile LOD
|
|
4739
|
+
* (`setSourceTileLodParams`) were measured in the same run and moved nothing;
|
|
4740
|
+
* the multiplier is the stack count, and only the layer order sets it.
|
|
4741
|
+
*
|
|
4742
|
+
* ===========================================================================
|
|
4743
|
+
* 2 · WHY THIS IS SAFE TO APPLY TO THE 2D CHART TOO, AND WHY IT MUST BE
|
|
4744
|
+
* ===========================================================================
|
|
4745
|
+
*
|
|
4746
|
+
* It must be, because the app's layer set is constant after boot
|
|
4747
|
+
* (`constant-layer-set.ts`): layers are added once in style order and never
|
|
4748
|
+
* moved — `moveLayer` forces a full symbol placement and was removed for that
|
|
4749
|
+
* reason. A terrain-only order would mean a remount on every mode switch.
|
|
4750
|
+
*
|
|
4751
|
+
* It is safe because moving every symbol and circle above every fill and line
|
|
4752
|
+
* is what S-52 asks for anyway: display priority draws areas, then lines, then
|
|
4753
|
+
* point symbols, then text. The only pixels that change are where a symbol
|
|
4754
|
+
* used to sit UNDER a later line or fill. Measured on live prod tiles, same
|
|
4755
|
+
* archive, six views: 0.1–0.3 % of pixels at Martha's Vineyard z9.4, Bath
|
|
4756
|
+
* z14.2, the Columbia z9.4, Chicago z13.4 and Mount Desert z12.2, and 2.7 % at
|
|
4757
|
+
* Boston Harbor z11.4 — all antialiasing-scale tone shifts where a symbol's
|
|
4758
|
+
* edge now lies over a magenta line or a black outline. The two Boston frames
|
|
4759
|
+
* are indistinguishable by eye.
|
|
4760
|
+
*
|
|
4761
|
+
* What the partition deliberately preserves:
|
|
4762
|
+
* · relative order WITHIN the drapeable set — so every ground-order rule in
|
|
4763
|
+
* this generator (base block under the chart, relief last over ground, the
|
|
4764
|
+
* repaint clones, the country border on top of the fills) holds unchanged;
|
|
4765
|
+
* · relative order WITHIN the non-drapeable set — a symbol's collision
|
|
4766
|
+
* priority is its array position among symbols, so the major-city and
|
|
4767
|
+
* port-town hoists still place first.
|
|
4768
|
+
*
|
|
4769
|
+
* A stable partition is the whole algorithm. It is applied LAST in
|
|
4770
|
+
* `generateStyle`, after every hoist, so nothing can interleave again behind
|
|
4771
|
+
* its back; `terrain-order.test.ts` pins the single-stack property on the
|
|
4772
|
+
* generated style.
|
|
4773
|
+
*/
|
|
4774
|
+
/**
|
|
4775
|
+
* Layer types MapLibre renders to texture under terrain
|
|
4776
|
+
* (`LAYERS_TO_TEXTURES` in `render_to_texture.ts`, 5.24).
|
|
4777
|
+
*/
|
|
4778
|
+
declare const DRAPEABLE_LAYER_TYPES: ReadonlySet<string>;
|
|
4779
|
+
/** True for a layer MapLibre drapes over terrain rather than drawing directly. */
|
|
4780
|
+
declare function isDrapeable(layer: {
|
|
4781
|
+
type: string;
|
|
4782
|
+
}): boolean;
|
|
4783
|
+
/**
|
|
4784
|
+
* Stable partition: every drapeable layer, in its existing order, then every
|
|
4785
|
+
* other layer, in its existing order. Returns a new array.
|
|
4786
|
+
*/
|
|
4787
|
+
declare function drapedFirst<T extends {
|
|
4788
|
+
type: string;
|
|
4789
|
+
}>(layers: readonly T[]): T[];
|
|
4790
|
+
/**
|
|
4791
|
+
* The number of render-to-texture stacks MapLibre would cut for this order —
|
|
4792
|
+
* the multiplier on every per-frame terrain cost. 1 is the floor; anything
|
|
4793
|
+
* above it means a non-drapeable layer sits between two drapeable ones.
|
|
4794
|
+
*/
|
|
4795
|
+
declare function terrainStackCount<T extends {
|
|
4796
|
+
type: string;
|
|
4797
|
+
}>(layers: readonly T[]): number;
|
|
4798
|
+
/**
|
|
4799
|
+
* The two halves the partition produces, for tests that assert an ORDER
|
|
4800
|
+
* invariant. After the partition, cross-half order carries no paint meaning
|
|
4801
|
+
* (every direct layer is above every draped one by construction), so a rule
|
|
4802
|
+
* like "band N+1 after band N" or "the base block under everything" is stated
|
|
4803
|
+
* per half — index positions here are positions WITHIN the half.
|
|
4804
|
+
*/
|
|
4805
|
+
declare function drapeHalves<T extends {
|
|
4806
|
+
type: string;
|
|
4807
|
+
}>(layers: readonly T[]): {
|
|
4808
|
+
draped: T[];
|
|
4809
|
+
direct: T[];
|
|
4810
|
+
};
|
|
4811
|
+
|
|
4812
|
+
/**
|
|
4813
|
+
* LAMPS — lighted aids to navigation drawn as the lights they are at night.
|
|
4814
|
+
*
|
|
4815
|
+
* Owner, 2026-09-11: *"when you're in night mode, it will show you the lights
|
|
4816
|
+
* from the lighted AtoNs as they look in front of you all the way to the
|
|
4817
|
+
* horizon"* — the view horizon mode (`chrome/horizon.ts`) was built for.
|
|
4818
|
+
*
|
|
4819
|
+
* ===========================================================================
|
|
4820
|
+
* 1 · WHAT A LAMP IS, AND WHAT IT IS NOT
|
|
4821
|
+
* ===========================================================================
|
|
4822
|
+
*
|
|
4823
|
+
* S-52 draws a light as a magenta FLARE beside its structure — an annotation
|
|
4824
|
+
* that says "there is a light here" and, through LIGHTS05/06, what colour it
|
|
4825
|
+
* is. That is the daytime chart's job and it stays. A lamp is the other
|
|
4826
|
+
* thing: a point of light, the colour the light actually shows, sized by how
|
|
4827
|
+
* far it carries, drawn on top of everything, and — because it is a `circle`
|
|
4828
|
+
* layer and not draped — depth-tested against the terrain, so a light behind a
|
|
4829
|
+
* headland is hidden by the headland exactly as it is from the deck.
|
|
4830
|
+
*
|
|
4831
|
+
* Two circles per light: a wide, soft GLOW at low opacity and a small, hard
|
|
4832
|
+
* CORE at full. That is how a distant light reads to the eye — a halo with a
|
|
4833
|
+
* pinprick in it — and two layers is what MapLibre needs to draw it, since one
|
|
4834
|
+
* circle has one blur.
|
|
4835
|
+
*
|
|
4836
|
+
* ===========================================================================
|
|
4837
|
+
* 2 · COLOUR, SIZE, AND WHAT IS DELIBERATELY NOT MODELLED
|
|
4838
|
+
* ===========================================================================
|
|
4839
|
+
*
|
|
4840
|
+
* · COLOUR is `lightFillExpression` — the same LIGHTS05 reading the flare
|
|
4841
|
+
* uses, so a lamp and its flare cannot disagree about red and green.
|
|
4842
|
+
* · SIZE is the nominal range `VALNMR`, in nautical miles: a 20 nm light is
|
|
4843
|
+
* bigger and brighter than a 4 nm one. It is a monotone ramp and not a
|
|
4844
|
+
* model of luminous intensity, because the chart carries no intensity.
|
|
4845
|
+
* · The CHARACTERISTIC (`LITCHR` / `SIGPER`) is NOT animated here. Every lamp
|
|
4846
|
+
* is steady. Flashing would need a per-frame paint update across the whole
|
|
4847
|
+
* style, and the cost of that is the thing #1769 just removed; it is a
|
|
4848
|
+
* separate decision with its own measurement.
|
|
4849
|
+
* · DISTANCE from the observer is not modelled either: a 4 nm light 12 nm
|
|
4850
|
+
* away still draws. A style expression cannot know where the camera is.
|
|
4851
|
+
*
|
|
4852
|
+
* ===========================================================================
|
|
4853
|
+
* 3 · OFF BY DEFAULT, AND SHOWN BY THE APP
|
|
4854
|
+
* ===========================================================================
|
|
4855
|
+
*
|
|
4856
|
+
* The layers ship in every generated style with `visibility: "none"`, the way
|
|
4857
|
+
* the sector arcs do, so the app can switch them without an `addLayer` — its
|
|
4858
|
+
* layer set is constant after boot. `ChartCanvas` shows them for horizon mode
|
|
4859
|
+
* in the night palette (`lamps` prop). Native clients receive them hidden.
|
|
4860
|
+
*
|
|
4861
|
+
* Every band's lights draw: the fan-out that dedupes overlapping cells is not
|
|
4862
|
+
* applied, because at horizon distances the far tiles are coarse and a
|
|
4863
|
+
* dominance filter would hide a band-4 lighthouse whose band-5 twin is in a
|
|
4864
|
+
* tile that is not loaded. Where two cells carry the same light the glow is
|
|
4865
|
+
* simply brighter, which is the failure to prefer.
|
|
4866
|
+
*/
|
|
4867
|
+
|
|
4868
|
+
/**
|
|
4869
|
+
* `s52-LIGHTS-` on purpose: the P6 sector-light z-order guard reads that prefix
|
|
4870
|
+
* as "LIGHTS geometry", which is what a lamp is — it rides on the flares, above
|
|
4871
|
+
* every other feature and below the labels, in both render modes.
|
|
4872
|
+
*/
|
|
4873
|
+
declare const LAMP_GLOW_LAYER_ID = "s52-LIGHTS-lamp-glow";
|
|
4874
|
+
declare const LAMP_CORE_LAYER_ID = "s52-LIGHTS-lamp-core";
|
|
4875
|
+
/** The layers the app flips together. Both or neither. */
|
|
4876
|
+
declare const LAMP_LAYER_IDS: readonly ["s52-LIGHTS-lamp-glow", "s52-LIGHTS-lamp-core"];
|
|
4877
|
+
interface LampLayer {
|
|
4878
|
+
readonly id: string;
|
|
4879
|
+
readonly type: "circle";
|
|
4880
|
+
readonly source: string;
|
|
4881
|
+
readonly "source-layer": "LIGHTS";
|
|
4882
|
+
readonly filter: unknown[];
|
|
4883
|
+
readonly layout: {
|
|
4884
|
+
readonly visibility: "none";
|
|
4885
|
+
};
|
|
4886
|
+
readonly paint: Record<string, unknown>;
|
|
4887
|
+
readonly metadata: Record<string, unknown>;
|
|
4888
|
+
}
|
|
4889
|
+
/** The two lamp layers for this source and palette. Glow first, core on top. */
|
|
4890
|
+
declare function buildLampLayers(sourceId: string, ct: ColorTableName): LampLayer[];
|
|
4891
|
+
|
|
4378
4892
|
/**
|
|
4379
4893
|
* Generic async auto-pagination generator.
|
|
4380
4894
|
*
|
|
@@ -4765,4 +5279,4 @@ declare class Chrt {
|
|
|
4765
5279
|
warmTiles(region?: string): Promise<TileTokenResponse>;
|
|
4766
5280
|
}
|
|
4767
5281
|
|
|
4768
|
-
export { ALL_NAV_AID_LAYERS, ALL_WATER_BODY_LAYERS, AREA_QUERY_LAYERS, ATON_EXPRESSION_CLASSES, type AheadCoverageCell, type AheadFeatureProperties, type AheadOptions, type AheadResponse, type AlongRouteFeatureProperties, type AlongRouteOptions, type AlongRouteResponse, type AreaInspectResult, type AtlasStyle, type AttachOptions, BAND_DRAW_ORDER, BAND_PRIORITY_RANGES, BASE_MAXZOOM, BASE_MINZOOM, BASE_REGION, type BBox, BRIDGE_QUERY_LAYERS, BUILD_MAXZOOM, BUILD_MINZOOM, BUILD_PARAM, type BandCode, type BandPriorityRange, type BridgeInspectResult, type BuildOfflineStyleOptions, type BuildSourcesOptions, CHART_BAND_CODES, CHART_CASCADE_CODES, CHART_SECTIONS, CHRTRASTER_REF_CROPS, CHRTRASTER_SVGS, CHRT_ATON_COLORS, CHRT_GLYPH_NAMES, CHRT_GLYPH_SVGS, CHRT_ICON_EXPRESSIONS, CHRT_ICON_PREFIX, CHRT_SDF_GLYPHS, CHRT_STYLE_MODES, type CandidateQueryOptions, type CandidatesEventContext, type CellDeletedEvent, type CellDetail, type CellEventData, type CellNewEvent, type CellUpdatedData, type CellUpdatedEvent, type CellsOptions, type CellsResponse, type ChartSection, Chrt, type ChrtConfig, ChrtError, type ChrtStyleMode, type ChrtStyleOptions, type ChrtStyleTheme, type ChrtSymbolSet, type ClickAnchor, ColorTableName, type CoverageOptions, type CoverageResponse, type CoverageRouteCell, type CoverageRouteOptions, type CoverageRouteResponse, type CoverageSource, type CustomStyleConfig, DEFAULT_CLICK_TOLERANCE, DEFAULT_CUSTOM_STYLE_CONFIG, DEFAULT_INSPECT_CLASS_RANK, DEFAULT_LABEL_SETTINGS, DEFAULT_NAV_AID_SETTINGS, DEFAULT_REGION, DEFAULT_SAFETY_CONTOUR_M, DEFAULT_SOUNDING_SETTINGS, DEFAULT_TILE_BASE_URL, DEFAULT_TILE_REGION, DEFAULT_WATER_BODY_SETTINGS, type DecodedAreaFeature, type DecodedBridge, type DecodedNavAid, type DecodedProperty, type DisplayCategory, type DisplayMode, type FeatureCollection, type FeaturesOptions, type FetchStyleOptions, FileSystemAdapter, type FlashPattern, type FlashPhase, type GenerateCustomStyleOptions, type GeneratedCustomStyle, type GeoJsonFeature, type GeoJsonGeometry, type GeomType, INSPECT_CLASS_RANK, INSPECT_RANK_DEVIATIONS, type InspectCandidate, type InspectCandidateSet, type InspectEnrichment, type InspectEventContext, type InspectNotice, type InspectOptions, type InspectResult, type InspectTargetClass, type InspectableFeature, InteractClient, type InteractEntitlement, InteractError, type InteractErrorCode, type InteractHandle, type InteractMapLike, type InteractMapMouseEvent, LABELED_LAYERS, LABEL_BEHAVIOR, LABEL_LAYER_GROUPS, LABEL_PRIORITY, LAND_BUILD_MAXZOOM, LAND_REGION, type LabelBehavior, type LabelConfigOptions, type LabelLayerConfig, type LabelSettings, type LookupEntry, type MapLibreStyle, type MapboxStyle, type MapboxVectorSource, type MarineAlert, type MarineAlertsOptions, type MarineAlertsResponse, type MarineConditionsOptions, type MarineConditionsResponse, type MarineForecastOptions, type MarineForecastPeriod, type MarineForecastResponse, type MarineSeas, type MarineStation, type MarineSwellTrain, type MarineWind, type MarineZoneRef, NAUTICAL_SYMBOLS, NAV_AID_LAYER_GROUPS, NAV_AID_QUERY_LAYERS, NON_SOLAS_DISCLAIMER, NON_SOLAS_DISCLAIMER_SHORT, type NauticalCategory, type NauticalSymbol, type NavAidInspectResult, type NavAidSettings, type NearbyMarineStation, type OfflineBundleResponse, type OfflineDownloadOptions, type OfflineDownloadProgress, type OfflineDownloadResult, OfflineError, type OfflineErrorCode, type OfflineFetchStyleOptions, type OfflineHeartbeatOptions, type OfflineRegionSummary, type OfflineRemoveOptions, OfflineStyleError, type OfflineStylePlatform, type OfflineStyleResponse, PLACENAME_LAND_CLASSES, PLACENAME_SOURCE_LAYER, PLACENAME_WATER_CLASSES, type PmtilesVectorSource, type Poi, type PoiCoverage, type PoiDataset, type PoiOptions, type PoiResponse, type QueryFeatureProperties, type QueryOptions, type QueryResponse, RASTER_ATON_CLASSES, RASTER_GLYPH_NAMES, RASTER_ICON_PREFIX, RELIEF_REGION, type ResolvedStyle, type ResolvedTheme, type S101ArtworkProvenance, type S101Feature, S101_AREA_FILL_NAMES, S101_CHART_SECTIONS, S101_FEATURES, S101_ICON_PREFIX, S101_LINE_STYLE_NAMES, S101_NEW_SYMBOLS, S101_NO_OFFICIAL_COUNTERPART, S101_SOURCE_COMMIT, S101_SYMBOL_GROUPS, S101_SYMBOL_NAMES, S52_ATON_LOOKUPS, S52_ATON_LOOKUPS_PAPER, S52_DRAW_ORDER, S52_LOOKUP, S52_PATTERN_SPRITE_PREFIX, SOUNDING_LAYERS, SYMBOL_FAMILIES, SYMBOL_FAMILY_META, SYMBOL_GROUPS, SYMBOL_MAP, type ScaleBand, type SearchCoverageNotice, type SearchHit, type SearchOptions, type SearchResponse, type SectorArcFeature, type SectorArcFeatureCollection, type SectorInfo, type SoundingSettings, type SourceMode, type StyleGeneratorOptions, type StyleLayer, type StyleUrlOptions, type SymbolFamily, type SymbolFamilyMeta, type SymbolGroup, TileAuth, type TileGroup, type TileGroupsResponse, TileTokenError, type TileTokenErrorCode, type TileTokenResponse, type TransformRequest, type TransformedRequest, type VectorSourceSpec, type VesselProfile, WATER_BODY_LAYER_GROUPS, type WaterBodySettings, WeatherEndpoint, type WeatherReading, type WebhookEvent, type WebhookEventType, type WebhookPayload, applyChrtSymbolSet, applyColorTheme, applyCustomStyleSettings, applyRasterSymbolSet, applyS101SymbolSet, atonIconExpression, bandFilterExpression, buildAirportTierExpression, buildBuiltUpAreaTierExpression, buildFlashPattern, buildLabelLayer, buildLakeTierExpression, buildLandAreaTierExpression, buildLandRegionTierExpression, buildLayersForClass, buildOfflineStyle, buildPlaceNameLayers, buildRiverTierExpression, buildSeaAreaTierExpression, buildSectorArcGeoJSON, buildSectorArcsFC, buildSectorsFromFeatures, buildSources, candidateRank, chrtAtonTintExpression, chrtLightTintExpression, collectCandidates, collectClickCandidates, combineWithBandFilter, daymarkColor, decimateFeatures, decodeAreaFeatureProps, decodeBridgeProps, decodeCandidate, decodeNavAidProps, depareColor, depareFillExpression, deriveMarinerName, extractNavAidDesignation, featureIdentity, generateCustomStyle, generateSpriteManifest, generateSpriteSheet, generateStyle, generateStyleJSON, getAvailableLineSymbols, getAvailablePatterns, getAvailablePointSymbols, getCollisionSettings, getDrawPriority, getGridSizeForZoom, getIconExpression, getLabelBehavior, getLabelConfig, getLabelPriority, getLookupEntry, getMaxCellsForZoom, getOrderedClasses, getRasterSvg, getS52SvgString, getS52SymbolStats, getStyleStats, getSymbolSvgString, getThemedS101Svg, getThemedS52Svg, getTopmarkMeaning, hazardColor, hazardFillExpression, iconExpressionForFamily, isLabelLayerVisible, isNavAidLayer, isNavAidLayerVisible, isSoundingLayerVisible, isVisibleInMode, isWaterBodyLayerVisible, labelSortKey, lateralColor, lateralFillExpression, lightColor, lightFillExpression, lightsIconExpression, normalizeStyleMode, normalizeTheme, paginate, parseListCodes, parseSymbolFamily, parseWebhook, patternSpriteId, preprocessLights, preprocessNavAids, preprocessSoundings, preprocessWaterBodies, rasterAtonIconExpression, resolveCustomTheme, resolveRasterImage, resolveS101Color, resolveStyle, resolveTargetClass, s101ArtworkProvenance, sanitizeCustomStyleConfig, scaleSizeValue, scaminToMinZoom, sectorLimitToArcBearing, styleModeBand, tileTemplate, uncoveredSectorArcs, withinBboxFilter, worldMinusBboxPolygon };
|
|
5282
|
+
export { ALL_NAV_AID_LAYERS, ALL_WATER_BODY_LAYERS, AREA_QUERY_LAYERS, ATON_EXPRESSION_CLASSES, type AheadCoverageCell, type AheadFeatureProperties, type AheadOptions, type AheadResponse, type AlongRouteFeatureProperties, type AlongRouteOptions, type AlongRouteResponse, type AreaInspectResult, type AtlasStyle, type AttachOptions, BAND_CODE_ALIASES, BAND_DRAW_ORDER, BAND_PRIORITY_RANGES, BASE_ATTRIBUTION, BASE_BUNDLE_ATTRIBUTION, BASE_BUNDLE_ID, BASE_BUNDLE_MAXZOOM, BASE_BUNDLE_SCHEMA, BASE_BUNDLE_SOURCE_LAYERS, BASE_CLIENT_RASTER_BEFORE_ID, BASE_MAXZOOM, BASE_MINZOOM, BASE_REGION, type BBox, BRIDGE_QUERY_LAYERS, BUILD_MAXZOOM, BUILD_MINZOOM, BUILD_PARAM, type BandCode, type BandPriorityRange, type BridgeInspectResult, type BuildOfflineStyleOptions, type BuildSourcesOptions, CHART_BAND_CODES, CHART_CASCADE_CODES, CHART_SECTIONS, CHRTRASTER_REF_CROPS, CHRTRASTER_SVGS, CHRT_ATON_COLORS, CHRT_GLYPH_NAMES, CHRT_GLYPH_SVGS, CHRT_ICON_EXPRESSIONS, CHRT_ICON_PREFIX, CHRT_SDF_GLYPHS, CHRT_STYLE_MODES, type CandidateQueryOptions, type CandidatesEventContext, type CellDeletedEvent, type CellDetail, type CellEventData, type CellNewEvent, type CellUpdatedData, type CellUpdatedEvent, type CellsOptions, type CellsResponse, type ChartSection, Chrt, type ChrtConfig, ChrtError, type ChrtStyleMode, type ChrtStyleOptions, type ChrtStyleTheme, type ChrtSymbolSet, type ClickAnchor, ColorTableName, type CoverageOptions, type CoverageResponse, type CoverageRouteCell, type CoverageRouteOptions, type CoverageRouteResponse, type CoverageSource, type CustomStyleConfig, DEFAULT_CLICK_TOLERANCE, DEFAULT_CUSTOM_STYLE_CONFIG, DEFAULT_INSPECT_CLASS_RANK, DEFAULT_LABEL_SETTINGS, DEFAULT_NAV_AID_SETTINGS, DEFAULT_REGION, DEFAULT_SAFETY_CONTOUR_M, DEFAULT_SOUNDING_SETTINGS, DEFAULT_TILE_BASE_URL, DEFAULT_TILE_REGION, DEFAULT_WATER_BODY_SETTINGS, DRAPEABLE_LAYER_TYPES, type DecodedAreaFeature, type DecodedBridge, type DecodedNavAid, type DecodedProperty, type DisplayCategory, type DisplayMode, type FeatureCollection, type FeaturesOptions, type FetchStyleOptions, FileSystemAdapter, type FlashPattern, type FlashPhase, type GenerateCustomStyleOptions, type GeneratedCustomStyle, type GeoJsonFeature, type GeoJsonGeometry, type GeomType, INSPECT_CLASS_RANK, INSPECT_RANK_DEVIATIONS, type InspectCandidate, type InspectCandidateSet, type InspectEnrichment, type InspectEventContext, type InspectNotice, type InspectOptions, type InspectResult, type InspectTargetClass, type InspectableFeature, InteractClient, type InteractEntitlement, InteractError, type InteractErrorCode, type InteractHandle, type InteractMapLike, type InteractMapMouseEvent, LABELED_LAYERS, LABEL_BEHAVIOR, LABEL_LAYER_GROUPS, LABEL_PRIORITY, LAMP_CORE_LAYER_ID, LAMP_GLOW_LAYER_ID, LAMP_LAYER_IDS, LAMP_TICK_MS, LAND_ATTRIBUTION, LAND_BUILD_MAXZOOM, LAND_REGION, type LabelBehavior, type LabelConfigOptions, type LabelLayerConfig, type LabelSettings, type LampLayer, type LookupEntry, type MapLibreStyle, type MapboxStyle, type MapboxVectorSource, type MarineAlert, type MarineAlertsOptions, type MarineAlertsResponse, type MarineConditionsObservation, type MarineConditionsOptions, type MarineConditionsResponse, type MarineConditionsSeries, type MarineForecastOptions, type MarineForecastPeriod, type MarineForecastResponse, type MarineSeas, type MarineStation, type MarineSwellTrain, type MarineWind, type MarineZoneRef, NAUTICAL_SYMBOLS, NAV_AID_LAYER_GROUPS, NAV_AID_QUERY_LAYERS, NON_SOLAS_DISCLAIMER, NON_SOLAS_DISCLAIMER_SHORT, type NauticalCategory, type NauticalSymbol, type NavAidInspectResult, type NavAidSettings, type NearbyMarineStation, type OfflineBundleResponse, type OfflineDownloadOptions, type OfflineDownloadProgress, type OfflineDownloadResult, OfflineError, type OfflineErrorCode, type OfflineFetchStyleOptions, type OfflineHeartbeatOptions, type OfflineRegionSummary, type OfflineRemoveOptions, OfflineStyleError, type OfflineStylePlatform, type OfflineStyleResponse, PLACENAME_LAND_CLASSES, PLACENAME_SOURCE_LAYER, PLACENAME_WATER_CLASSES, type ParsedSigseqTerms, type PmtilesVectorSource, type Poi, type PoiCoverage, type PoiDataset, type PoiOptions, type PoiResponse, type QueryFeatureProperties, type QueryOptions, type QueryResponse, RASTER_ATON_CLASSES, RASTER_GLYPH_NAMES, RASTER_ICON_PREFIX, RELIEF_ATTRIBUTION, RELIEF_ENCODING, RELIEF_REGION, RELIEF_TILE_SIZE, type ResolvedStyle, type ResolvedTheme, type S101ArtworkProvenance, type S101Feature, S101_AREA_FILL_NAMES, S101_CHART_SECTIONS, S101_FEATURES, S101_ICON_PREFIX, S101_LINE_STYLE_NAMES, S101_NEW_SYMBOLS, S101_NO_OFFICIAL_COUNTERPART, S101_SOURCE_COMMIT, S101_SYMBOL_GROUPS, S101_SYMBOL_NAMES, S52_ATON_LOOKUPS, S52_ATON_LOOKUPS_PAPER, S52_DRAW_ORDER, S52_LOOKUP, S52_PATTERN_SPRITE_PREFIX, SIGPER_TOLERANCE_SECONDS, SIGSEQ_MAX_TERMS, SOUNDING_LAYERS, SYMBOL_FAMILIES, SYMBOL_FAMILY_META, SYMBOL_GROUPS, SYMBOL_MAP, type ScaleBand, type SearchCoverageNotice, type SearchHit, type SearchOptions, type SearchResponse, type SectorArcFeature, type SectorArcFeatureCollection, type SectorInfo, type SigseqRefusal, type SigseqTerm, type SoundingSettings, type SourceMode, type StyleGeneratorOptions, type StyleLayer, type StyleUrlOptions, type SymbolFamily, type SymbolFamilyMeta, type SymbolGroup, TileAuth, type TileGroup, type TileGroupsResponse, TileTokenError, type TileTokenErrorCode, type TileTokenResponse, type TransformRequest, type TransformedRequest, type VectorSourceSpec, type VesselProfile, WATER_BODY_LAYER_GROUPS, type WaterBodySettings, WeatherEndpoint, type WeatherReading, type WebhookEvent, type WebhookEventType, type WebhookPayload, applyBaseBundle, applyChrtSymbolSet, applyColorTheme, applyCustomStyleSettings, applyRasterSymbolSet, applyS101SymbolSet, atonIconExpression, bandFilterExpression, buildAirportTierExpression, buildBuiltUpAreaTierExpression, buildFlashPattern, buildLabelLayer, buildLakeTierExpression, buildLampLayers, buildLandAreaTierExpression, buildLandRegionTierExpression, buildLayersForClass, buildOfflineStyle, buildPlaceNameLayers, buildRiverTierExpression, buildSeaAreaTierExpression, buildSectorArcGeoJSON, buildSectorArcsFC, buildSectorsFromFeatures, buildSources, candidateRank, cellBandCharacters, cellBandMatch, chrtAtonTintExpression, chrtLightTintExpression, collectCandidates, collectClickCandidates, combineWithBandFilter, daymarkColor, decimateFeatures, decodeAreaFeatureProps, decodeBridgeProps, decodeCandidate, decodeNavAidProps, depareColor, depareFillExpression, deriveMarinerName, drapeHalves, drapedFirst, extractNavAidDesignation, featureIdentity, generateCustomStyle, generateSpriteManifest, generateSpriteSheet, generateStyle, generateStyleJSON, getAvailableLineSymbols, getAvailablePatterns, getAvailablePointSymbols, getCollisionSettings, getDrawPriority, getGridSizeForZoom, getIconExpression, getLabelBehavior, getLabelConfig, getLabelPriority, getLookupEntry, getMaxCellsForZoom, getOrderedClasses, getRasterSvg, getS52SvgString, getS52SymbolStats, getStyleStats, getSymbolSvgString, getThemedS101Svg, getThemedS52Svg, getTopmarkMeaning, hazardColor, hazardFillExpression, iconExpressionForFamily, isDrapeable, isLabelLayerVisible, isNavAidLayer, isNavAidLayerVisible, isSoundingLayerVisible, isVisibleInMode, isWaterBodyLayerVisible, labelSortKey, lampRhythmColour, lampRhythmOpacity, lateralColor, lateralFillExpression, lightColor, lightFillExpression, lightsIconExpression, normalizeStyleMode, normalizeTheme, paginate, parseListCodes, parseSigseqTerms, parseSymbolFamily, parseWebhook, patternSpriteId, preprocessLights, preprocessNavAids, preprocessSoundings, preprocessWaterBodies, rasterAtonIconExpression, resolveCustomTheme, resolveRasterImage, resolveS101Color, resolveStyle, resolveTargetClass, rhythmProperties, s101ArtworkProvenance, sanitizeCustomStyleConfig, scaleSizeValue, scaminToMinZoom, sectorLimitToArcBearing, styleModeBand, terrainStackCount, tileTemplate, uncoveredSectorArcs, withinBboxFilter, worldMinusBboxPolygon };
|