@chrtco/sdk 0.10.50 → 0.10.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -318,6 +318,15 @@ interface BBox {
318
318
  * spec; without that, MapLibre throws on style validation.
319
319
  */
320
320
  declare function withinBboxFilter(bbox: BBox): unknown[];
321
+ /**
322
+ * A GeoJSON Polygon, typed here rather than through the ambient `GeoJSON`
323
+ * namespace (@types/geojson): Deno, which type-checks this file for the paper
324
+ * functions (src/paper/detail.ts imports it), has no such namespace.
325
+ */
326
+ interface BboxPolygon {
327
+ type: "Polygon";
328
+ coordinates: Array<Array<[number, number]>>;
329
+ }
321
330
  /**
322
331
  * Build a GeoJSON Polygon for the world MINUS a given bbox — i.e. an
323
332
  * outer ring covering the whole world with a single hole punched at
@@ -327,7 +336,7 @@ declare function withinBboxFilter(bbox: BBox): unknown[];
327
336
  * Outer ring uses the standard antimeridian-safe world extent
328
337
  * (lng [-180, 180], lat [-85, 85] — Web Mercator's safe range).
329
338
  */
330
- declare function worldMinusBboxPolygon(bbox: BBox): GeoJSON.Polygon;
339
+ declare function worldMinusBboxPolygon(bbox: BBox): BboxPolygon;
331
340
 
332
341
  interface GeoJsonGeometry {
333
342
  type: string;
@@ -1892,6 +1901,106 @@ declare class OfflineEndpoint {
1892
1901
  private persistManifestEntry;
1893
1902
  }
1894
1903
 
1904
+ /**
1905
+ * THE light description — one formatter for every surface that prints a
1906
+ * light's characteristic: the chart label (tile path: a GL expression; GeoJSON
1907
+ * path: `preprocessLights`), the SDK `decodeNavAidProps().notation`, the app's
1908
+ * mirror of it (`src/lib/map/nav-aid-info.ts`), the popup and the CHRTweb
1909
+ * inspector. Each used to assemble its own string, and they disagreed: the map
1910
+ * printed `Al WR 10s 9M`, the inspector `Al W.R 10s`; neither printed the
1911
+ * height, and only the map printed the range.
1912
+ *
1913
+ * The JS formatter and the GL expression live side by side in this file so a
1914
+ * change to one is a change in front of the other; `light-description.test.ts`
1915
+ * evaluates both over the same fixtures and asserts they agree, and the corpus
1916
+ * check (`scripts/audit-light-descriptions.ts`) does it over every LIGHTS
1917
+ * feature in `chrt_baremetal`.
1918
+ *
1919
+ * ── Order (S-52 LITDSN01; US Chart No. 1 / INT 1 section P) ────────────────
1920
+ *
1921
+ * Dir · Aero · MLTYLT · character(group) · colours · (vert)/(hor) · period ·
1922
+ * height · range · (occas) · Priv · (extinguished)
1923
+ *
1924
+ * `Fl W 10s 31m 27M` — Boston Light (US5BOSCE), `102ft` in a feet style.
1925
+ * `2 F R (vert) 9m` — two fixed red lights, one above the other.
1926
+ * `Q(6)+LFl W 15s` — a south cardinal: SIGGRP `(6)(1)`, the six spliced
1927
+ * after the Q as the chart prints it.
1928
+ *
1929
+ * Tokens are space-separated, US Chart No. 1's form. Colours are the INT 1
1930
+ * colour group — the letters run together, `WR`, never `W.R` — in ascending
1931
+ * catalogue order (W R G Bu Y Am Vi Or). S-57 does not record the order in
1932
+ * which an alternating light shows its colours, and 34 corpus lights list them
1933
+ * the other way round (`["3","1"]`); ascending is deterministic and is the
1934
+ * chart form for the common pairs. A repeated colour (`["4","1","1"]`) prints
1935
+ * once.
1936
+ *
1937
+ * ── What is NOT printed ───────────────────────────────────────────────────
1938
+ *
1939
+ * - A light with no LITCHR gets no description at all (27 corpus lights). A
1940
+ * bare `W` reads as a fixed white light, which the chart does not say.
1941
+ * - SIGGRP that is not a well-formed group — `^(\([0-9A-Z+]+\))+$` — is
1942
+ * dropped, not printed: `()` (2,452 lights), `RDB` / `LDB` (USACE bank
1943
+ * codes that leaked into the attribute). `(1)` is a single flash and is
1944
+ * not printed either.
1945
+ * - Zero or absent SIGPER / HEIGHT / VALNMR / MLTYLT ≤ 1: absent, never `0s`.
1946
+ *
1947
+ * The values are printed as charted — this is a description of the source
1948
+ * cell, never a correction of it.
1949
+ */
1950
+ /** Units the height is printed in. `meters` is the S-52 default; `feet` is a style generated with `?units=imperial`. */
1951
+ type LightHeightUnits = "meters" | "feet";
1952
+ interface LightDescriptionOptions {
1953
+ /** Height units. Default `meters`. */
1954
+ readonly units?: LightHeightUnits;
1955
+ }
1956
+ /** The same constant the sounding and contour labels use (`layer-builder.ts`), so a feet chart is one system. */
1957
+ declare const LIGHT_LABEL_FEET_PER_METRE = 3.28084;
1958
+ /** S-57 STATUS 11 — the light is charted but not burning. */
1959
+ declare const STATUS_EXTINGUISHED = 11;
1960
+ /** True when STATUS lists 11 (extinguished). */
1961
+ declare function isExtinguishedLight(props: Readonly<Record<string, unknown>>): boolean;
1962
+ /** True when SIGGRP is a well-formed group string (the whitelist). */
1963
+ declare function isValidSiggrp(raw: unknown): raw is string;
1964
+ /**
1965
+ * The character and its group: `Fl(2+1)`, `Mo(A)`, `Q(6)+LFl`. Empty when
1966
+ * LITCHR is absent or not in the catalogue.
1967
+ */
1968
+ declare function lightCharacterText(props: Readonly<Record<string, unknown>>): string;
1969
+ /** The colour group, `WR` — every light colour charted, ascending, once each. */
1970
+ declare function lightColourText(colour: unknown): string;
1971
+ /** Height, rounded whole: `31m`, or `102ft` in feet. Null when absent or not positive. */
1972
+ declare function lightHeightText(raw: unknown, units?: LightHeightUnits): string | null;
1973
+ /**
1974
+ * The character, colours and period — `Fl(2) WR 6s`. What a SECTOR of a
1975
+ * sector light is described by; its range is carried beside it and its
1976
+ * height belongs to the light, not the sector.
1977
+ */
1978
+ declare function formatLightRhythm(props: Readonly<Record<string, unknown>>): string;
1979
+ /**
1980
+ * The full light description, LITDSN01 order (see the file header).
1981
+ * `props` are the LIGHTS feature's own attributes.
1982
+ */
1983
+ declare function formatLightDescription(props: Readonly<Record<string, unknown>>, opts?: LightDescriptionOptions): string;
1984
+ /** GL twin of `formatLightDescription` — the chart label's `text-field`. */
1985
+ declare function lightDescriptionExpression(opts?: LightDescriptionOptions): unknown[];
1986
+ /** GL predicate: the light is extinguished (STATUS lists 11). */
1987
+ declare function extinguishedLightExpression(): unknown[];
1988
+ /**
1989
+ * Copy the description attributes of `light` (a LIGHTS feature's properties)
1990
+ * onto `target` (the clicked structure's) under `LIGHT_` names. The merge
1991
+ * sites (SDK `attach.ts`, the app's `ChartCanvas` and `use-map-renderer`)
1992
+ * already copy LITCHR / SIGGRP / SIGPER / CATLIT and `LIGHT_COLOUR`.
1993
+ */
1994
+ declare function copyLightDescriptionAttributes(target: Record<string, unknown>, light: Readonly<Record<string, unknown>>): void;
1995
+ /**
1996
+ * The attributes a feature's light is described by. A LIGHTS feature: its
1997
+ * own. Anything else (a lighted buoy or beacon): the co-located light's,
1998
+ * as merged by the click — LITCHR / SIGGRP / SIGPER / CATLIT as copied,
1999
+ * `LIGHT_COLOUR` (else its own COLOUR, the historical fallback), and the
2000
+ * `LIGHT_`-prefixed rest.
2001
+ */
2002
+ declare function lightDescriptionProps(layerName: string, props: Readonly<Record<string, unknown>>): Record<string, unknown>;
2003
+
1895
2004
  /**
1896
2005
  * CHRTinteract decode core — S-57 attribute decoder and flash-pattern
1897
2006
  * generator for click-to-inspect.
@@ -1982,6 +2091,33 @@ interface SectorInfo {
1982
2091
  */
1983
2092
  allRound?: boolean;
1984
2093
  }
2094
+ /**
2095
+ * The dayboard a structure wears: an S-57 DAYMAR, which is the SLAVE of its
2096
+ * beacon (the beacon's LNAM_REFS points at it). Decoded from the tile's
2097
+ * derived `_daymark_*` properties — joined onto the master at build time
2098
+ * (CHRTbaremetal childAid.ts), or merged from a co-located DAYMAR by the
2099
+ * click path when the tile predates the join.
2100
+ */
2101
+ interface DecodedDayboard {
2102
+ /** The board's TOPSHP — "Rhombus (diamond)", "Square", "Triangle, point up". */
2103
+ shape: string | null;
2104
+ /** Every COLOUR of the board, in charted order. */
2105
+ colour: string | null;
2106
+ /** The board's COLPAT — "Border stripes, Squared". */
2107
+ pattern: string | null;
2108
+ /** How many boards the structure carries (a junction beacon can have two). */
2109
+ count: number;
2110
+ }
2111
+ /**
2112
+ * One line for a dayboard, the same on every surface: shape first (what you
2113
+ * see from a distance), then the colours in charted order, then how they are
2114
+ * arranged — "Rhombus (diamond) — White, Green (Border stripes, Squared)".
2115
+ */
2116
+ declare function formatDayboard(d: DecodedDayboard): string;
2117
+ interface DecodeNavAidOptions {
2118
+ /** Units the light's height is printed in, in `notation`. Default `meters`. */
2119
+ readonly units?: LightHeightUnits;
2120
+ }
1985
2121
  interface DecodedNavAid {
1986
2122
  name: string;
1987
2123
  /** Full official OBJNAM (e.g., "Boston South Channel Buoy 7") */
@@ -1997,6 +2133,17 @@ interface DecodedNavAid {
1997
2133
  shape: string | null;
1998
2134
  topmark: string | null;
1999
2135
  topmarkMeaning: string | null;
2136
+ /**
2137
+ * ⚠ ITS OWN FIELD, NEVER FOLDED INTO `colour`. Birch Point's stake is green
2138
+ * and white; the diamond on it is white and green in squares. Those are two
2139
+ * charted facts about two objects, and overwriting the stake's COLOUR with
2140
+ * the board's is how a dayboard used to repaint its beacon.
2141
+ */
2142
+ dayboard: DecodedDayboard | null;
2143
+ /** COLPAT — how the colours are arranged ("Horizontal stripes"). */
2144
+ colourPattern: string | null;
2145
+ /** NATCON — what the structure is built of, every value. */
2146
+ construction: string | null;
2000
2147
  lightCharacter: string | null;
2001
2148
  lightCharacterFull: string | null;
2002
2149
  period: number | null;
@@ -2042,7 +2189,7 @@ declare function deriveMarinerName(objnam: string, colourCode: number | null): s
2042
2189
  * rendering the hint.
2043
2190
  */
2044
2191
  declare function getTopmarkMeaning(topshpCode: number | null, rawLayer: string): string | null;
2045
- declare function decodeNavAidProps(layerName: string, props: Record<string, unknown>, coords?: [number, number]): DecodedNavAid;
2192
+ declare function decodeNavAidProps(layerName: string, props: Record<string, unknown>, coords?: [number, number], opts?: DecodeNavAidOptions): DecodedNavAid;
2046
2193
  interface FlashPhase {
2047
2194
  on: boolean;
2048
2195
  duration: number;
@@ -2632,7 +2779,10 @@ declare function collectClickCandidates(map: InteractMapLike, point: {
2632
2779
  * - OBJNAM / COLOUR inherited from a co-located parent buoy/beacon
2633
2780
  * - CATFOG from a co-located FOGSIG
2634
2781
  * - RETRFL presence from a co-located RTPBCN
2635
- * - TOPSHP from a co-located TOPMAR
2782
+ * - TOPSHP from the TOPMAR the structure's LNAM_REFS names (pointer first,
2783
+ * proximity only when the structure carries no pointers)
2784
+ * - the dayboard from the DAYMAR it names, into the derived `_daymark_*`
2785
+ * keys (its own "Dayboard" row — never the structure's COLOUR)
2636
2786
  * - LITCHR / SIGPER / SIGGRP / LIGHT_COLOUR / CATLIT from the primary
2637
2787
  * co-located LIGHTS (preferring a non-sector light)
2638
2788
  * - all co-located LIGHTS combined into the sector list
@@ -2875,14 +3025,49 @@ interface RasterDemSource {
2875
3025
  /** The credit a renderer shows for this source (MapLibre's attribution control). */
2876
3026
  attribution?: string;
2877
3027
  }
3028
+ /**
3029
+ * A plain colour raster — CHRT_SEAFLOOR's lossless WebP (ADR 0048). Never
3030
+ * `raster-dem`: the tiles carry one constant colour and the shade amount in
3031
+ * alpha, and no elevation, so nothing can decode a depth out of them and
3032
+ * `map.setTerrain` can never be pointed at them.
3033
+ */
3034
+ interface RasterSource {
3035
+ type: "raster";
3036
+ tiles: string[];
3037
+ tileSize: number;
3038
+ minzoom: number;
3039
+ maxzoom: number;
3040
+ /** The credit a renderer shows for this source (MapLibre's attribution control). */
3041
+ attribution?: string;
3042
+ }
2878
3043
  type VectorSourceSpec = MapboxVectorSource | PmtilesVectorSource;
2879
- type AnySourceSpec = VectorSourceSpec | RasterDemSource;
3044
+ type AnySourceSpec = VectorSourceSpec | RasterDemSource | RasterSource;
2880
3045
  /** CHRTland's vector land base. ADR 0023: its own archive, never chart data. */
2881
3046
  declare const LAND_REGION = "CHRT_LAND";
2882
3047
  /** CHRTland's terrarium relief. */
2883
3048
  declare const RELIEF_REGION = "CHRT_RELIEF";
2884
3049
  /** The world basemap under everything (completing-the-world-map, 2026-08-27). */
2885
3050
  declare const BASE_REGION = "CHRT_BASE";
3051
+ /** CHRTseafloor: seabed shape under the ENC, shading that carries no depth (ADR 0048). */
3052
+ declare const SEAFLOOR_REGION = "CHRT_SEAFLOOR";
3053
+ /**
3054
+ * The credit the CHRT_SEAFLOOR source carries — the builder's own MBTiles
3055
+ * `attribution` (tools/chrtseafloor-build/build.ts), so the archive and the
3056
+ * style name the same sources. NOAA's grids are public domain; GEBCO asks for
3057
+ * this form of credit.
3058
+ */
3059
+ declare const SEAFLOOR_ATTRIBUTION = "Seabed: NOAA OCS BlueTopo, NOAA NCEI CUDEM and Great Lakes Bathymetry, GEBCO Compilation Group (2026)";
3060
+ /**
3061
+ * CHRT_SEAFLOOR's zoom range: the builder's z4–13 (ADR 0048 §8b). Below z4 a
3062
+ * pixel spans more than the shelf, so there is nothing to shade; above z13
3063
+ * MapLibre overzooms the z13 tile. The ADR's target ceiling is z14 — raise
3064
+ * this only after the archive carries it (the coupling rule RELIEF_MAXZOOM
3065
+ * documents: a style zoom must never deploy ahead of its archive).
3066
+ */
3067
+ declare const SEAFLOOR_MINZOOM = 4;
3068
+ declare const SEAFLOOR_MAXZOOM = 13;
3069
+ /** 512 px tiles, as the builder writes them. */
3070
+ declare const SEAFLOOR_TILE_SIZE = 512;
2886
3071
  /**
2887
3072
  * CHRT_BASE's zoom range. 11 is the deepest zoom the archive's detail tier
2888
3073
  * carries honestly — the planet's inland water exists from z9 and is read at
@@ -2992,7 +3177,7 @@ declare const BUILD_PARAM = "v";
2992
3177
  * parameter at all instead of a bare `?v=` that would key its own useless
2993
3178
  * cache namespace.
2994
3179
  */
2995
- declare function tileTemplate(base: string, region: string, extension: "mvt" | "png", buildId?: string): string;
3180
+ declare function tileTemplate(base: string, region: string, extension: "mvt" | "png" | "webp", buildId?: string): string;
2996
3181
  /** Canonical source id used in `generateStyle()` — matches the region name
2997
3182
  * of the one consolidated PMTiles served by the tile-worker for this region. */
2998
3183
  declare const DEFAULT_REGION = "NOAA_ENC";
@@ -3057,6 +3242,12 @@ interface BuildSourcesOptions {
3057
3242
  * no-coverage hatch's companions and everything else; see baseLayers().
3058
3243
  */
3059
3244
  base?: boolean;
3245
+ /**
3246
+ * Emit CHRTseafloor's seabed shading as a `raster` source (ADR 0048). The
3247
+ * style generator draws it directly above the depth-area fills; see
3248
+ * seafloorLayers().
3249
+ */
3250
+ seafloor?: boolean;
3060
3251
  }
3061
3252
  /**
3062
3253
  * Build the "sources" block for a CHRT style.
@@ -3104,6 +3295,13 @@ interface StyleLayer {
3104
3295
  declare function buildLayersForClass(objectClass: string, ct: ColorTableName, sourceId?: string, opts?: {
3105
3296
  safetyContour?: number;
3106
3297
  }): StyleLayer[];
3298
+ /**
3299
+ * How the depth beside a rock, wreck or obstruction (VALSOU) is rounded to
3300
+ * the figure printed. "nearest" (the default) is the served style's form, the
3301
+ * one the danger-depth placement census measured. "down" is ADR 0047's rule:
3302
+ * toward the shallower figure, never a depth the source doesn't carry.
3303
+ */
3304
+ type DangerDepthRounding = "nearest" | "down";
3107
3305
  /**
3108
3306
  * Get the full ordered list of object classes for style generation.
3109
3307
  * Uses S52_DRAW_ORDER as base, then adds any missing classes from the
@@ -3304,7 +3502,9 @@ declare const DEPTH_FIGURE_CLASSES: ReadonlySet<string>;
3304
3502
  declare function contourValueFactor(depthNumbersFactor: number): number;
3305
3503
  /**
3306
3504
  * The font stacks a CHRT glyph host serves (`cloudflare/tile-worker/glyphs/
3307
- * GLYPHS.json`; the test pins this copy to it). There is no Bold.
3505
+ * GLYPHS.json`; the test pins this copy to it). Open Sans has no Bold; Old
3506
+ * Standard TT is CHRTpaper's engraving face (tools/chrt-paper/src/look.ts),
3507
+ * which has no Semibold, so rule A leaves it as it is.
3308
3508
  */
3309
3509
  declare const SERVED_FONT_STACKS: readonly string[];
3310
3510
  /**
@@ -3524,10 +3724,20 @@ interface StyleGeneratorOptions extends BuildSourcesOptions {
3524
3724
  * grey overlay outside the bbox so the lock boundary is still visible
3525
3725
  * to the user (the fallback data is dimmed by the overlay but not
3526
3726
  * filtered out).
3727
+ *
3728
+ * `finestBand` (optional, opt-in; CHRTpaper's band lock) makes the lock
3729
+ * strict: that one source band is the requested band and every coarser
3730
+ * band is the fallback, so nothing finer than it ever draws. Without it
3731
+ * the band's own `CHART_BAND_CODES` / `CHART_CASCADE_CODES` apply, as
3732
+ * CHRTweb has them (Harbor draws Berthing cells too). It also band-gates
3733
+ * the light layers chart mode otherwise emits once for every band (sector
3734
+ * legs and arcs, lamps), so a Harbour light's sectors don't draw on a
3735
+ * Coastal sheet. `band` still names the mode in the style's metadata.
3527
3736
  */
3528
3737
  chartMode?: {
3529
3738
  band: ScaleBand$1;
3530
3739
  lockedBounds?: BBox;
3740
+ finestBand?: BandCode;
3531
3741
  };
3532
3742
  /**
3533
3743
  * Display unit for depth labels (SOUNDG soundings, DEPCNT contour
@@ -3614,6 +3824,14 @@ interface StyleGeneratorOptions extends BuildSourcesOptions {
3614
3824
  * (`ChartCanvas`), and the style routes take `placers=1`.
3615
3825
  */
3616
3826
  dangerDepthPlacers?: boolean;
3827
+ /**
3828
+ * How the depth beside a rock, wreck or obstruction (VALSOU) rounds, in
3829
+ * either unit. "nearest" (default) is the served form, pinned to the danger-
3830
+ * depth placement census (danger-depth-callouts.test.ts). "down" is ADR
3831
+ * 0047's rule, never deeper than the source: whole feet floored, metres
3832
+ * floored to the decimetre. CHRTpaper prints with "down".
3833
+ */
3834
+ dangerDepthRounding?: DangerDepthRounding;
3617
3835
  }
3618
3836
  declare function generateStyle(palette?: ColorTableName, opts?: StyleGeneratorOptions & {
3619
3837
  bandFan?: BandFanMode;
@@ -4105,6 +4323,47 @@ declare function getLabelBehavior(layerName: string): LabelBehavior;
4105
4323
  * relief comes from dropping the LOWEST rung in a pile-up, never the top.
4106
4324
  */
4107
4325
  declare const LABEL_PRIORITY: Record<string, number>;
4326
+ /**
4327
+ * Priority slot for the NAME of a light's tower ("Minots Ledge Light
4328
+ * (conspic)") — the LNDMRK label's second scoped exception to its 400 rung.
4329
+ *
4330
+ * ── What it fixes ─────────────────────────────────────────────────────────
4331
+ *
4332
+ * The light characteristic ("Fl(1+4+3) W 45s 26m 10M") rides LIGHTS at 100
4333
+ * and always places; the name rides the tower (LNDMRK) at 400, placed after
4334
+ * every sounding, and needs room for two lines clear of the tower. Measured
4335
+ * on staging's NOAA_ENC build bf90d461 with MapLibre Native, a view centred
4336
+ * on each of the 37 named lights around Boston and Penobscot Bay: 13 named
4337
+ * none at z14 and 18 at z12 — Minots Ledge, Cape Ann, Eastern Point and Deer
4338
+ * Island among them. A collision-off control printed every one, so the data
4339
+ * was there; the name lost the space. Owner, 2026-10-30: "some who's names
4340
+ * aren't printing".
4341
+ *
4342
+ * ── Why 270, and why that is still safe ───────────────────────────────────
4343
+ *
4344
+ * 100 lights / hazard callouts / clearances untouched
4345
+ * 200 nav-aid designations untouched
4346
+ * 250 fog signals untouched
4347
+ * 270 the name of a light's tower ← here
4348
+ * 280 MAJOR water-area names
4349
+ * 300 soundings, contour values
4350
+ *
4351
+ * Same argument as MAJOR_WATER_LABEL_PRIORITY: the only rungs it outranks are
4352
+ * a bay name and the individually droppable depth field, and there is one
4353
+ * light where there are hundreds of soundings. Above the bay names because a
4354
+ * lighthouse is a point a reader takes a bearing on and a bay name can sit
4355
+ * anywhere in the bay.
4356
+ */
4357
+ declare const LIGHTHOUSE_NAME_LABEL_PRIORITY = 270;
4358
+ /**
4359
+ * The towers that hoist to LIGHTHOUSE_NAME_LABEL_PRIORITY: FUNCTN 33, S-57's
4360
+ * own "light support", AND a name. Not a spatial join to LIGHTS — the tile
4361
+ * carries none — and not a name match: on the bf90d461 sample (Boston and
4362
+ * Penobscot Bay, z14) FUNCTN 33 is on all 24 towers that carry a light. A
4363
+ * nameless light support still labels "Tower (conspic)", which is a category,
4364
+ * not a mark to find, so it stays at 400.
4365
+ */
4366
+ declare const LIGHTHOUSE_NAME_FILTER: unknown[];
4108
4367
  /**
4109
4368
  * Resolve the priority rank for an S-57 class's label. Orientation classes
4110
4369
  * report 900 regardless of ladder membership (PRDARE etc.) so the
@@ -4144,18 +4403,24 @@ declare function buildLabelLayer(layerId: string, sourceId: string, config: Labe
4144
4403
  * Pre-process SOUNDG GeoJSON to extract Z coordinates as `depth` properties.
4145
4404
  * Soundings are MultiPoint with Z values in geometry.coordinates[][2].
4146
4405
  * This explodes MultiPoints into individual Points with a `depth` property.
4406
+ *
4407
+ * The depth is FLOORED to the decimetre, never rounded: a sounding states
4408
+ * the shallower figure (ADR 0047). For decimetre source data — S-57 SOUNDG
4409
+ * is stored with SOMF 10 — this is the identity; it only bites on finer
4410
+ * values, and a drying sounding (negative) floors to the larger drying
4411
+ * height, which is the safe side there too.
4147
4412
  */
4148
4413
  declare function preprocessSoundings(fc: GeoJSON.FeatureCollection): GeoJSON.FeatureCollection;
4149
4414
  /**
4150
- * Pre-process LIGHTS GeoJSON to derive compact light characteristic labels.
4151
- * Adds `_lightLabel` property (e.g., "Fl(2) WR 4s 5M").
4415
+ * Pre-process LIGHTS GeoJSON to derive the light description label.
4416
+ * Adds `_lightLabel` (e.g. "Fl(2) WR 6s 31m 12M").
4152
4417
  *
4153
- * KEEP IN STEP WITH `buildLightLabelExpression()` in layer-builder.ts — that
4154
- * is the same label built as a GL expression for the tile path, which has no
4155
- * JS preprocessing step. `light-label-parity.test.ts` asserts the two agree
4156
- * on real tile features; if you change one, change both.
4418
+ * The text is `formatLightDescription` — the one formatter the tile path's GL
4419
+ * expression (`lightDescriptionExpression`), the SDK notation and the app's
4420
+ * popup and inspector all use (`light-description.ts`).
4421
+ * `light-description.test.ts` asserts the JS and GL forms agree.
4157
4422
  */
4158
- declare function preprocessLights(fc: GeoJSON.FeatureCollection): GeoJSON.FeatureCollection;
4423
+ declare function preprocessLights(fc: GeoJSON.FeatureCollection, opts?: LightDescriptionOptions): GeoJSON.FeatureCollection;
4159
4424
  /** List of layers that have labels */
4160
4425
  declare const LABELED_LAYERS: Set<string>;
4161
4426
  /**
@@ -4499,6 +4764,9 @@ declare const S101_SYMBOL_NAMES: ReadonlySet<string>;
4499
4764
  * exist (UWTROC03/04, SISTAT03, WATTUR02); the number encodes a
4500
4765
  * different portrayal case.
4501
4766
  * LIGHTHOUSE01 — a CHRT-local symbol name with no PresLib/S-101 analogue.
4767
+ * TMARDEF1 / TMARDEF2 — the PresLib TOPMAR01 "flag or other shape"
4768
+ * topmarks (beacon / buoy); the catalogue defines no TMARDEF symbols at
4769
+ * all. TMARDEF1 arrived with the rigid TOPMAR01 table (2026-10).
4502
4770
  *
4503
4771
  * Pinned by `s101-style.test.ts` so the set can only shrink deliberately
4504
4772
  * (e.g. when re-pinned to an in-force catalogue edition that adds them).
@@ -4641,11 +4909,22 @@ declare function chrtHouseColor(dayHex: string, palette?: ColorTableName): strin
4641
4909
  * its paint is the style's `icon-color`.
4642
4910
  */
4643
4911
  declare function themeChrtGlyph(svg: string, palette?: ColorTableName): string;
4644
- /** First-listed-colour-wins tint expression for SDF bodies. */
4912
+ /**
4913
+ * Tint expression for SDF bodies: the mark's DOMINANT colour — the first
4914
+ * chromatic code in COLOUR, which S-57 lists top band first.
4915
+ *
4916
+ * ⚠ It used to rank codes by salience (red before green) and take the first
4917
+ * one PRESENT, whatever its position. That painted a green-red-green
4918
+ * preferred-channel mark (`["4","3","4"]`) red — the opposite lateral side —
4919
+ * and contradicted the module header's own "first listed colour" contract.
4920
+ * White/black/brown/grey only tint a mark that carries no chromatic colour.
4921
+ */
4645
4922
  declare function chrtAtonTintExpression(palette?: ColorTableName): unknown[];
4646
- /** Lights tint: exact colour (incl. blue/orange — the house style renders
4647
- * the encoded colour, unlike the S-52 three-bucket flares); colourless
4648
- * lights read as white with the dark halo carrying contrast. */
4923
+ /** Lights tint: the exact colour of a one-colour light (incl. blue/orange —
4924
+ * the house style renders the encoded colour, unlike the S-52 three-bucket
4925
+ * flares), the LIGHTS06 fold for white+red / white+green, and the house
4926
+ * "unknown" grey for everything else — a red-and-green light or a light with
4927
+ * no charted colour has no one true colour, and painting one asserts it. */
4649
4928
  declare function chrtLightTintExpression(palette?: ColorTableName): unknown[];
4650
4929
  /** Per-class house icon expressions. Classes not listed keep their S-52
4651
4930
  * icons (e.g. TOPMAR's minimal black shapes already fit the house look). */
@@ -4778,12 +5057,13 @@ declare const S52_ATON_LOOKUPS_PAPER: Record<string, AtonClassLookup>;
4778
5057
  * LIGHTS has no lookup rows (the table delegates to CS(LIGHTS05)); the
4779
5058
  * flare selection here transcribes the PresLib LIGHTS05/06 procedure as
4780
5059
  * implemented by OpenCPN s52cnsy.cpp `_selSYcol()` + the CATLIT pre-checks:
4781
- * red→LIGHTS11, green→LIGHTS12, white/yellow/amber→LIGHTS13,
5060
+ * red→LIGHTS11, green→LIGHTS12, white/yellow/orange→LIGHTS13,
4782
5061
  * white+red→LIGHTS11, white+green→LIGHTS12, floodlight/fog-detector→LIGHTS82,
4783
5062
  * strip light→LIGHTS81, everything else→LITDEF11. The vendored flare SVGs
4784
5063
  * carry the spec colour and the 135° flare rotation baked in, so selection
4785
- * is purely icon-name choice. Sector geometry (SECTR1/SECTR2 arcs) stays
4786
- * app-side (P6); this module only picks the symbol at the light.
5064
+ * is purely icon-name choice. Sector lights get no flare at all — their legs
5065
+ * and arcs are `sector-lights.ts`; this module only picks the symbol at the
5066
+ * light.
4787
5067
  */
4788
5068
 
4789
5069
  /** Classes whose icon selection is fully lookup-table-driven. TOPMAR and
@@ -4800,7 +5080,7 @@ declare function atonIconExpression(objectClass: string): string | unknown[];
4800
5080
  /**
4801
5081
  * LIGHTS flare selection per the LIGHTS05/06 conditional symbology
4802
5082
  * procedure (see module header for provenance). COLOUR codes: 1 white,
4803
- * 3 red, 4 green, 6 yellow, 9 amber.
5083
+ * 3 red, 4 green, 6 yellow, 11 orange.
4804
5084
  */
4805
5085
  declare function lightsIconExpression(): unknown[];
4806
5086
 
@@ -4849,6 +5129,84 @@ declare const S52_PATTERN_SPRITE_PREFIX = "AP:";
4849
5129
  /** Registered image id for a PresLib pattern name, e.g. "VEGATN03" -> "AP:VEGATN03". */
4850
5130
  declare function patternSpriteId(patternName: string): string;
4851
5131
 
5132
+ /**
5133
+ * Sector lights in the generated style — S-52 LIGHTS05, drawn from the
5134
+ * tiles' own SECTR1 / SECTR2 with no derived geometry.
5135
+ *
5136
+ * LIGHTS05 gives a sectored light (SECTR1 and SECTR2 both charted) NO flare.
5137
+ * It gets two sector LEGS, dashed black, from the light along each limit, and
5138
+ * an ARC between them in the sector's colour over a black outline:
5139
+ * `LS(DASH,1,CHBLK)` legs 25 mm long, `CA(OUTLW,4,<colour>,2…)` at 20 mm, and
5140
+ * 25 mm where another sector at the same position overlaps this one. Before
5141
+ * this module the served style drew every sector as an ordinary flare at the
5142
+ * light's 135° offset, so co-located sectors stacked into one flare and the
5143
+ * chart said nothing about which way any colour shows (Hendricks Head,
5144
+ * US5ME1JP / US4ME1CE: W 000°–180°, R 180°–000°, drawn as one white flare).
5145
+ *
5146
+ * ⚠ BEARINGS ARE FROM SEAWARD. SECTR1/SECTR2 are the bearing of the light AS
5147
+ * SEEN FROM THE VESSEL, so a limit is drawn on its reciprocal (+180°) — the
5148
+ * same rule as `sectorLimitToArcBearing` in `../interact/decode.ts` and
5149
+ * `src/lib/map/nav-aid-info.ts`, whose geometry was verified light by light in
5150
+ * docs/validation/sector-light-audit-2026-09.md.
5151
+ *
5152
+ * ── Why sprites, not tile geometry ───────────────────────────────────────
5153
+ *
5154
+ * S-52 sizes legs and arcs in SCREEN millimetres: the ring is the same size
5155
+ * at every zoom. Geometry baked into tiles is geographic and would have to be
5156
+ * re-emitted per zoom, and it would ship only with a tile rebuild. A rotated
5157
+ * icon is screen-sized by construction and reads SECTR1/SECTR2 from tiles that
5158
+ * already exist, so the portrayal ships with the style.
5159
+ *
5160
+ * - A LEG is one dashed sprite anchored at its foot and turned to the limit
5161
+ * with `icon-rotate`. Exact to the charted tenth of a degree.
5162
+ * - An ARC of arbitrary sweep is composed from at most three segment sprites,
5163
+ * one per base-8 digit of the sweep in whole degrees: `64·a + 8·b + c`.
5164
+ * Layer k draws digit k's segment, rotated to start where the previous
5165
+ * digit's ended. 19 segment shapes (1–7°, 8–56°, 64–320°) per colour cover
5166
+ * every sweep from 1° to 360°, against 360 sprites for a one-per-degree set.
5167
+ * The sweep is rounded to whole degrees and the rounding is split across
5168
+ * both ends, so the arc lands within 0.5° of each leg — about a quarter of
5169
+ * a pixel at the radius drawn. The legs carry the exact limits.
5170
+ *
5171
+ * Segment sprites are cropped to their own ink; `icon-offset` puts each one's
5172
+ * box back where it belongs relative to the light, and MapLibre rotates the
5173
+ * offset with the icon, so the arc's centre stays on the light at any bearing.
5174
+ *
5175
+ * ── Sizes ───────────────────────────────────────────────────────────────
5176
+ *
5177
+ * The S-52 PROPORTION (leg 25 : arc 20, outline 4 : core 2) is kept. The
5178
+ * absolute size is the house one: the CHRTweb overlay's owner-tuned ~29 px
5179
+ * ring at z14 (`SECTOR_HIGH_ZOOM_RADIUS_NM` in nav-aid-info.ts), easing smaller
5180
+ * toward planning zooms the same way the flares do. Full S-52 size at CHRT's
5181
+ * 2× symbol scale would be a 125 px ring, which the owner already rejected as
5182
+ * the loudest layer on the chart when the overlay drew 58 px ones.
5183
+ */
5184
+
5185
+ declare function isSectorSpriteId(name: string): boolean;
5186
+ /**
5187
+ * A sectored light, per LIGHTS05: both limits charted and a non-zero sweep. A
5188
+ * light whose limits coincide is all-round and keeps its flare. (None of the
5189
+ * 4,361 corpus sectors do; the guard is for the spec, not the data.)
5190
+ */
5191
+ declare const IS_SECTOR_LIGHT: unknown[];
5192
+ declare const SECTOR_ARC_LAYER_IDS: readonly ["s52-LIGHTS-sector-arc-64", "s52-LIGHTS-sector-arc-8", "s52-LIGHTS-sector-arc-1"];
5193
+ declare const SECTOR_LEG_LAYER_IDS: readonly ["s52-LIGHTS-sector-leg-1", "s52-LIGHTS-sector-leg-2"];
5194
+ /**
5195
+ * Every layer this module emits — the ids an app with its own sector overlay
5196
+ * hides while that overlay is up (CHRTweb's ChartCanvas, the platform map).
5197
+ */
5198
+ declare const SECTOR_LIGHT_LAYER_IDS: readonly string[];
5199
+ /**
5200
+ * The sector-light layers for one source. Not band-fanned: every band's copy
5201
+ * of a light sits at the same position (Amelia Island is charted identically in
5202
+ * seven cells), so copies draw exactly over each other. Arcs first, legs over
5203
+ * them so each limit reads across the band.
5204
+ *
5205
+ * `ct` is accepted for symmetry with `buildLampLayers`; the sprites carry their
5206
+ * S-52 tokens and are themed by the sheet, so no paint here depends on it.
5207
+ */
5208
+ declare function buildSectorLightLayers(sourceId: string, _ct?: ColorTableName): StyleLayer[];
5209
+
4852
5210
  /**
4853
5211
  * S-52 SVG Loader — pure (DOM-free) string operations over the inlined S-52
4854
5212
  * SVG catalogue in `s52-svgs-generated.ts`. SVG files use S-52 color token
@@ -4933,6 +5291,71 @@ declare const BUILD_MAXZOOM = 14;
4933
5291
  */
4934
5292
  declare const LAND_BUILD_MAXZOOM = 14;
4935
5293
 
5294
+ /**
5295
+ * CHRTseafloor's one layer (ADR 0048): seabed shape under the ENC, as shading
5296
+ * that carries no depth.
5297
+ *
5298
+ * ── What the tiles are ─────────────────────────────────────────────────────
5299
+ *
5300
+ * 512 px lossless WebP whose RGB is ONE constant colour and whose alpha is the
5301
+ * shade amount, masked at build time to charted water. So the layer is a plain
5302
+ * `raster`, never `raster-dem`: there is no elevation in the bytes for MapLibre
5303
+ * to decode, and nothing can point `setTerrain` at it.
5304
+ *
5305
+ * ── Why it only ever errs shallow ──────────────────────────────────────────
5306
+ *
5307
+ * The bake is shadow only, in a colour on the SHALLOW side of every water tint,
5308
+ * so compositing it can only move a depth area toward the next-shallower band.
5309
+ * Its strength is capped by depth at build time so the safety contour stays a
5310
+ * colour edge (ADR 0048 §4). The paint below is the other half of that promise
5311
+ * and `seafloor-layers.test.ts` holds both halves against the S-52 palettes.
5312
+ *
5313
+ * DAY and DUSK draw the bake as is. NIGHT's depth ramp runs the other way (deep
5314
+ * water darkest), so "toward shallow" means LIGHTER there: the same tiles are
5315
+ * lifted with `raster-brightness-min` until they sit on the light side of every
5316
+ * NIGHT water tint. One bake, three themes, never a second archive.
5317
+ *
5318
+ * ── Where it goes ──────────────────────────────────────────────────────────
5319
+ *
5320
+ * Directly above the depth-area fills and below everything else (ADR 0048 §5):
5321
+ * shading is part of the water ground, never on top of a contour, sounding or
5322
+ * symbol. `style-generator.ts` places it.
5323
+ *
5324
+ * ── E-ink draws none ───────────────────────────────────────────────────────
5325
+ *
5326
+ * A continuous alpha ramp is what an e-ink panel cannot show, for the reason
5327
+ * CHRTland's hillshade is off there (`exaggeration: 0`, land-layers.ts).
5328
+ */
5329
+
5330
+ /** The one layer id. NOT `chrtland-`: that prefix is hoisted onto the land stack. */
5331
+ declare const SEAFLOOR_LAYER_ID = "chrtseafloor-shade";
5332
+ /**
5333
+ * What the tiles were baked with — the builder's `SHADE` defaults
5334
+ * (tools/chrtseafloor-build/shade.ts). Restated here because the SDK cannot
5335
+ * import from `tools/`; the colour gate needs them to model the composite.
5336
+ *
5337
+ * - `rgb`: #2f4858 slate, L* 29.
5338
+ * - `kneeAlpha`: the most alpha water at or above the protected safety
5339
+ * contour carries. DAY binds at 17; the bake uses 16.
5340
+ * - `protectedSafetyContourM`: CHRT's default safety contour, 10 m (owner
5341
+ * decision, 2026-10-26). The gate holds every setting from 1 m to this.
5342
+ * - `alphaMax`: the ceiling, reached at 30 m.
5343
+ */
5344
+ declare const SEAFLOOR_BAKE: Readonly<{
5345
+ rgb: readonly [47, 72, 88];
5346
+ kneeAlpha: 16;
5347
+ protectedSafetyContourM: 10;
5348
+ alphaMax: 90;
5349
+ }>;
5350
+ /** Per-theme raster paint. The single source of these values (ADR 0048 §5). */
5351
+ declare const SEAFLOOR_THEME_PAINT: Readonly<Record<"DAY" | "DUSK" | "NIGHT", {
5352
+ "raster-brightness-min": number;
5353
+ "raster-brightness-max": number;
5354
+ "raster-opacity": number;
5355
+ }>>;
5356
+ /** The seafloor layer for a palette, or none for the e-ink tables. */
5357
+ declare function seafloorLayers(palette?: ColorTableName): StyleLayer[];
5358
+
4936
5359
  /**
4937
5360
  * The CHRT_BASE BUNDLE — the app-embeddable world basemap, and the style
4938
5361
  * surgery that draws a chart over it with no network at all (CHRTsail #814).
@@ -5827,4 +6250,4 @@ declare class Chrt {
5827
6250
  warmTiles(region?: string): Promise<TileTokenResponse>;
5828
6251
  }
5829
6252
 
5830
- 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, CHART_SOUNDINGS_RULE, CHART_SYMBOL_SCALE, CHART_SYMBOL_SIZES, CHART_SYMBOL_SIZE_LABELS, CHART_SYMBOL_SIZE_REACH, CHART_SYMBOL_SIZE_WIRE, 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, type ChartSoundingsRule, type ChartSymbolScales, type ChartSymbolSize, 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, DANGER_DEPTH_LABEL_ID, DANGER_DEPTH_PLACER_ID, DANGER_DEPTH_PLACER_LAYOUT, DANGER_DEPTH_VISIBLE_LAYOUT, 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, DEPARE_FILL_BRANCH_TOKENS, DEPARE_FILL_FALLBACK_TOKEN, DEPTH_FIGURE_CLASSES, DRAPEABLE_LAYER_TYPES, type DecodedAreaFeature, type DecodedBridge, type DecodedNavAid, type DecodedProperty, type DisplayCategory, type DisplayMode, EINK_DANGER_PATTERN, EINK_DOTS_PATTERN, EINK_HATCH_PATTERN, type FeatureCollection, type FeaturesOptions, type FetchStyleOptions, FileSystemAdapter, type FlashPattern, type FlashPhase, type GenerateCustomStyleOptions, type GeneratedCustomStyle, type GeoJsonFeature, type GeoJsonGeometry, type GeomType, HAZARD_LABEL_PRIORITY, 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, LAND_TEXT_CLASSES, type LabelBehavior, type LabelConfigOptions, type LabelLayerConfig, type LabelSettings, type LampLayer, type LookupEntry, MAPLIBRE_DEFAULT_TEXT_PADDING_PX, 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, NIGHT_INK, NIGHT_MUTED_INK, NON_SOLAS_DISCLAIMER, NON_SOLAS_DISCLAIMER_SHORT, type NauticalCategory, type NauticalSymbol, type NavAidInspectResult, type NavAidSettings, type NearbyMarineStation, OPAQUE_SPLIT_OF, OUTRANK_LABELS, 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, SERVED_FONT_STACKS, SERVED_SOUNDING_PADDING_PX, SIGPER_TOLERANCE_SECONDS, SIGSEQ_MAX_TERMS, SOUNDING_LAYERS, SOUNDING_PADDING_PER_FACTOR, STANDARD_CHART_SYMBOL_SCALES, SYMBOL_ANNOTATION_TEXT_CLASSES, 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 SymbolGroup, TileAuth, type TileGroup, type TileGroupsResponse, TileTokenError, type TileTokenErrorCode, type TileTokenResponse, type TransformRequest, type TransformedRequest, type VectorSourceSpec, type VesselProfile, WATER_BODY_LAYER_GROUPS, WATER_TEXT_CLASSES, type WaterBodySettings, WeatherEndpoint, type WeatherReading, type WebhookEvent, type WebhookEventType, type WebhookPayload, addDangerDepthPlacers, applyBaseBundle, applyChartSymbolScales, applyChartSymbolScalesToLayer, applyChrtSymbolSet, applyColorTheme, applyCustomStyleSettings, applyEinkPortrayal, applyRasterSymbolSet, applyS101SymbolSet, atonIconExpression, bandFilterExpression, buildAirportTierExpression, buildBuiltUpAreaTierExpression, buildFlashPattern, buildLabelLayer, buildLakeTierExpression, buildLampLayers, buildLandAreaTierExpression, buildLandRegionTierExpression, buildLayersForClass, buildOfflineStyle, buildPlaceNameLayers, buildRiverTierExpression, buildSeaAreaTierExpression, buildSectorArcGeoJSON, buildSectorArcsFC, buildSectorsFromFeatures, buildSources, candidateRank, capLuminance, cellBandCharacters, cellBandMatch, chartSymbolSizingCensus, chrtAtonTintExpression, chrtHouseColor, chrtLightTintExpression, clampChartSymbolScale, collectCandidates, collectClickCandidates, combineWithBandFilter, contourValueFactor, contrastRatio, dangerDepthPlacerId, daymarkColor, decimateFeatures, decodeAreaFeatureProps, decodeBridgeProps, decodeCandidate, decodeChartSymbolScale, decodeNavAidProps, demotedBelowSoundings, depareColor, depareFillExpression, depthAreaClassLayerId, depthAreaSplitIds, deriveMarinerName, drapeHalves, drapedFirst, extractNavAidDesignation, featureIdentity, fromZoom, 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, haloFactor, hazardColor, hazardFillExpression, iconSliderFor, isDangerDepthPlacer, isDepthAreaClassLayerId, isDrapeable, isLabelLayerVisible, isMapLive, isNavAidLayer, isNavAidLayerVisible, isSoundingLayerVisible, isVisibleInMode, isWaterBodyLayerVisible, keptAboveSoundings, labelSortKey, lampRhythmColour, lampRhythmOpacity, lateralColor, lateralFillExpression, lightColor, lightFillExpression, lightsIconExpression, normalizeStyleMode, normalizeTheme, opaqueSplitBaseOf, paginate, parseListCodes, parseSigseqTerms, parseWebhook, patternSpriteId, preprocessLights, preprocessNavAids, preprocessSoundings, preprocessWaterBodies, rasterAtonIconExpression, relativeLuminance, resolveCustomTheme, resolveRasterImage, resolveS101Color, resolveStyle, resolveTargetClass, rhythmProperties, s101ArtworkProvenance, safetyContourValues, sanitizeCustomStyleConfig, scaleLinearLight, scaleSizeExpression, scaleSizeValue, scaminToMinZoom, sectorLimitToArcBearing, semiboldFontStack, snapChartSymbolScale, soundingPadding, soundingPaddingValue, splitOpaqueDepthAreas, stepChartSymbolScale, styleModeBand, terrainStackCount, textSliderFor, themeChrtGlyph, tileTemplate, uncoveredSectorArcs, withinBboxFilter, worldMinusBboxPolygon };
6253
+ 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, CHART_SOUNDINGS_RULE, CHART_SYMBOL_SCALE, CHART_SYMBOL_SIZES, CHART_SYMBOL_SIZE_LABELS, CHART_SYMBOL_SIZE_REACH, CHART_SYMBOL_SIZE_WIRE, 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, type ChartSoundingsRule, type ChartSymbolScales, type ChartSymbolSize, 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, DANGER_DEPTH_LABEL_ID, DANGER_DEPTH_PLACER_ID, DANGER_DEPTH_PLACER_LAYOUT, DANGER_DEPTH_VISIBLE_LAYOUT, 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, DEPARE_FILL_BRANCH_TOKENS, DEPARE_FILL_FALLBACK_TOKEN, DEPTH_FIGURE_CLASSES, DRAPEABLE_LAYER_TYPES, type DecodeNavAidOptions, type DecodedAreaFeature, type DecodedBridge, type DecodedDayboard, type DecodedNavAid, type DecodedProperty, type DisplayCategory, type DisplayMode, EINK_DANGER_PATTERN, EINK_DOTS_PATTERN, EINK_HATCH_PATTERN, type FeatureCollection, type FeaturesOptions, type FetchStyleOptions, FileSystemAdapter, type FlashPattern, type FlashPhase, type GenerateCustomStyleOptions, type GeneratedCustomStyle, type GeoJsonFeature, type GeoJsonGeometry, type GeomType, HAZARD_LABEL_PRIORITY, INSPECT_CLASS_RANK, INSPECT_RANK_DEVIATIONS, IS_SECTOR_LIGHT, 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, LAND_TEXT_CLASSES, LIGHTHOUSE_NAME_FILTER, LIGHTHOUSE_NAME_LABEL_PRIORITY, LIGHT_LABEL_FEET_PER_METRE, type LabelBehavior, type LabelConfigOptions, type LabelLayerConfig, type LabelSettings, type LampLayer, type LightDescriptionOptions, type LightHeightUnits, type LookupEntry, MAPLIBRE_DEFAULT_TEXT_PADDING_PX, 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, NIGHT_INK, NIGHT_MUTED_INK, NON_SOLAS_DISCLAIMER, NON_SOLAS_DISCLAIMER_SHORT, type NauticalCategory, type NauticalSymbol, type NavAidInspectResult, type NavAidSettings, type NearbyMarineStation, OPAQUE_SPLIT_OF, OUTRANK_LABELS, 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, SEAFLOOR_ATTRIBUTION, SEAFLOOR_BAKE, SEAFLOOR_LAYER_ID, SEAFLOOR_MAXZOOM, SEAFLOOR_MINZOOM, SEAFLOOR_REGION, SEAFLOOR_THEME_PAINT, SEAFLOOR_TILE_SIZE, SECTOR_ARC_LAYER_IDS, SECTOR_LEG_LAYER_IDS, SECTOR_LIGHT_LAYER_IDS, SERVED_FONT_STACKS, SERVED_SOUNDING_PADDING_PX, SIGPER_TOLERANCE_SECONDS, SIGSEQ_MAX_TERMS, SOUNDING_LAYERS, SOUNDING_PADDING_PER_FACTOR, STANDARD_CHART_SYMBOL_SCALES, STATUS_EXTINGUISHED, SYMBOL_ANNOTATION_TEXT_CLASSES, 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 SymbolGroup, TileAuth, type TileGroup, type TileGroupsResponse, TileTokenError, type TileTokenErrorCode, type TileTokenResponse, type TransformRequest, type TransformedRequest, type VectorSourceSpec, type VesselProfile, WATER_BODY_LAYER_GROUPS, WATER_TEXT_CLASSES, type WaterBodySettings, WeatherEndpoint, type WeatherReading, type WebhookEvent, type WebhookEventType, type WebhookPayload, addDangerDepthPlacers, applyBaseBundle, applyChartSymbolScales, applyChartSymbolScalesToLayer, applyChrtSymbolSet, applyColorTheme, applyCustomStyleSettings, applyEinkPortrayal, applyRasterSymbolSet, applyS101SymbolSet, atonIconExpression, bandFilterExpression, buildAirportTierExpression, buildBuiltUpAreaTierExpression, buildFlashPattern, buildLabelLayer, buildLakeTierExpression, buildLampLayers, buildLandAreaTierExpression, buildLandRegionTierExpression, buildLayersForClass, buildOfflineStyle, buildPlaceNameLayers, buildRiverTierExpression, buildSeaAreaTierExpression, buildSectorArcGeoJSON, buildSectorArcsFC, buildSectorLightLayers, buildSectorsFromFeatures, buildSources, candidateRank, capLuminance, cellBandCharacters, cellBandMatch, chartSymbolSizingCensus, chrtAtonTintExpression, chrtHouseColor, chrtLightTintExpression, clampChartSymbolScale, collectCandidates, collectClickCandidates, combineWithBandFilter, contourValueFactor, contrastRatio, copyLightDescriptionAttributes, dangerDepthPlacerId, daymarkColor, decimateFeatures, decodeAreaFeatureProps, decodeBridgeProps, decodeCandidate, decodeChartSymbolScale, decodeNavAidProps, demotedBelowSoundings, depareColor, depareFillExpression, depthAreaClassLayerId, depthAreaSplitIds, deriveMarinerName, drapeHalves, drapedFirst, extinguishedLightExpression, extractNavAidDesignation, featureIdentity, formatDayboard, formatLightDescription, formatLightRhythm, fromZoom, 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, haloFactor, hazardColor, hazardFillExpression, iconSliderFor, isDangerDepthPlacer, isDepthAreaClassLayerId, isDrapeable, isExtinguishedLight, isLabelLayerVisible, isMapLive, isNavAidLayer, isNavAidLayerVisible, isSectorSpriteId, isSoundingLayerVisible, isValidSiggrp, isVisibleInMode, isWaterBodyLayerVisible, keptAboveSoundings, labelSortKey, lampRhythmColour, lampRhythmOpacity, lateralColor, lateralFillExpression, lightCharacterText, lightColor, lightColourText, lightDescriptionExpression, lightDescriptionProps, lightFillExpression, lightHeightText, lightsIconExpression, normalizeStyleMode, normalizeTheme, opaqueSplitBaseOf, paginate, parseListCodes, parseSigseqTerms, parseWebhook, patternSpriteId, preprocessLights, preprocessNavAids, preprocessSoundings, preprocessWaterBodies, rasterAtonIconExpression, relativeLuminance, resolveCustomTheme, resolveRasterImage, resolveS101Color, resolveStyle, resolveTargetClass, rhythmProperties, s101ArtworkProvenance, safetyContourValues, sanitizeCustomStyleConfig, scaleLinearLight, scaleSizeExpression, scaleSizeValue, scaminToMinZoom, seafloorLayers, sectorLimitToArcBearing, semiboldFontStack, snapChartSymbolScale, soundingPadding, soundingPaddingValue, splitOpaqueDepthAreas, stepChartSymbolScale, styleModeBand, terrainStackCount, textSliderFor, themeChrtGlyph, tileTemplate, uncoveredSectorArcs, withinBboxFilter, worldMinusBboxPolygon };