@chrtco/sdk 0.10.49 → 0.10.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1892,6 +1892,106 @@ declare class OfflineEndpoint {
1892
1892
  private persistManifestEntry;
1893
1893
  }
1894
1894
 
1895
+ /**
1896
+ * THE light description — one formatter for every surface that prints a
1897
+ * light's characteristic: the chart label (tile path: a GL expression; GeoJSON
1898
+ * path: `preprocessLights`), the SDK `decodeNavAidProps().notation`, the app's
1899
+ * mirror of it (`src/lib/map/nav-aid-info.ts`), the popup and the CHRTweb
1900
+ * inspector. Each used to assemble its own string, and they disagreed: the map
1901
+ * printed `Al WR 10s 9M`, the inspector `Al W.R 10s`; neither printed the
1902
+ * height, and only the map printed the range.
1903
+ *
1904
+ * The JS formatter and the GL expression live side by side in this file so a
1905
+ * change to one is a change in front of the other; `light-description.test.ts`
1906
+ * evaluates both over the same fixtures and asserts they agree, and the corpus
1907
+ * check (`scripts/audit-light-descriptions.ts`) does it over every LIGHTS
1908
+ * feature in `chrt_baremetal`.
1909
+ *
1910
+ * ── Order (S-52 LITDSN01; US Chart No. 1 / INT 1 section P) ────────────────
1911
+ *
1912
+ * Dir · Aero · MLTYLT · character(group) · colours · (vert)/(hor) · period ·
1913
+ * height · range · (occas) · Priv · (extinguished)
1914
+ *
1915
+ * `Fl W 10s 31m 27M` — Boston Light (US5BOSCE), `102ft` in a feet style.
1916
+ * `2 F R (vert) 9m` — two fixed red lights, one above the other.
1917
+ * `Q(6)+LFl W 15s` — a south cardinal: SIGGRP `(6)(1)`, the six spliced
1918
+ * after the Q as the chart prints it.
1919
+ *
1920
+ * Tokens are space-separated, US Chart No. 1's form. Colours are the INT 1
1921
+ * colour group — the letters run together, `WR`, never `W.R` — in ascending
1922
+ * catalogue order (W R G Bu Y Am Vi Or). S-57 does not record the order in
1923
+ * which an alternating light shows its colours, and 34 corpus lights list them
1924
+ * the other way round (`["3","1"]`); ascending is deterministic and is the
1925
+ * chart form for the common pairs. A repeated colour (`["4","1","1"]`) prints
1926
+ * once.
1927
+ *
1928
+ * ── What is NOT printed ───────────────────────────────────────────────────
1929
+ *
1930
+ * - A light with no LITCHR gets no description at all (27 corpus lights). A
1931
+ * bare `W` reads as a fixed white light, which the chart does not say.
1932
+ * - SIGGRP that is not a well-formed group — `^(\([0-9A-Z+]+\))+$` — is
1933
+ * dropped, not printed: `()` (2,452 lights), `RDB` / `LDB` (USACE bank
1934
+ * codes that leaked into the attribute). `(1)` is a single flash and is
1935
+ * not printed either.
1936
+ * - Zero or absent SIGPER / HEIGHT / VALNMR / MLTYLT ≤ 1: absent, never `0s`.
1937
+ *
1938
+ * The values are printed as charted — this is a description of the source
1939
+ * cell, never a correction of it.
1940
+ */
1941
+ /** Units the height is printed in. `meters` is the S-52 default; `feet` is a style generated with `?units=imperial`. */
1942
+ type LightHeightUnits = "meters" | "feet";
1943
+ interface LightDescriptionOptions {
1944
+ /** Height units. Default `meters`. */
1945
+ readonly units?: LightHeightUnits;
1946
+ }
1947
+ /** The same constant the sounding and contour labels use (`layer-builder.ts`), so a feet chart is one system. */
1948
+ declare const LIGHT_LABEL_FEET_PER_METRE = 3.28084;
1949
+ /** S-57 STATUS 11 — the light is charted but not burning. */
1950
+ declare const STATUS_EXTINGUISHED = 11;
1951
+ /** True when STATUS lists 11 (extinguished). */
1952
+ declare function isExtinguishedLight(props: Readonly<Record<string, unknown>>): boolean;
1953
+ /** True when SIGGRP is a well-formed group string (the whitelist). */
1954
+ declare function isValidSiggrp(raw: unknown): raw is string;
1955
+ /**
1956
+ * The character and its group: `Fl(2+1)`, `Mo(A)`, `Q(6)+LFl`. Empty when
1957
+ * LITCHR is absent or not in the catalogue.
1958
+ */
1959
+ declare function lightCharacterText(props: Readonly<Record<string, unknown>>): string;
1960
+ /** The colour group, `WR` — every light colour charted, ascending, once each. */
1961
+ declare function lightColourText(colour: unknown): string;
1962
+ /** Height, rounded whole: `31m`, or `102ft` in feet. Null when absent or not positive. */
1963
+ declare function lightHeightText(raw: unknown, units?: LightHeightUnits): string | null;
1964
+ /**
1965
+ * The character, colours and period — `Fl(2) WR 6s`. What a SECTOR of a
1966
+ * sector light is described by; its range is carried beside it and its
1967
+ * height belongs to the light, not the sector.
1968
+ */
1969
+ declare function formatLightRhythm(props: Readonly<Record<string, unknown>>): string;
1970
+ /**
1971
+ * The full light description, LITDSN01 order (see the file header).
1972
+ * `props` are the LIGHTS feature's own attributes.
1973
+ */
1974
+ declare function formatLightDescription(props: Readonly<Record<string, unknown>>, opts?: LightDescriptionOptions): string;
1975
+ /** GL twin of `formatLightDescription` — the chart label's `text-field`. */
1976
+ declare function lightDescriptionExpression(opts?: LightDescriptionOptions): unknown[];
1977
+ /** GL predicate: the light is extinguished (STATUS lists 11). */
1978
+ declare function extinguishedLightExpression(): unknown[];
1979
+ /**
1980
+ * Copy the description attributes of `light` (a LIGHTS feature's properties)
1981
+ * onto `target` (the clicked structure's) under `LIGHT_` names. The merge
1982
+ * sites (SDK `attach.ts`, the app's `ChartCanvas` and `use-map-renderer`)
1983
+ * already copy LITCHR / SIGGRP / SIGPER / CATLIT and `LIGHT_COLOUR`.
1984
+ */
1985
+ declare function copyLightDescriptionAttributes(target: Record<string, unknown>, light: Readonly<Record<string, unknown>>): void;
1986
+ /**
1987
+ * The attributes a feature's light is described by. A LIGHTS feature: its
1988
+ * own. Anything else (a lighted buoy or beacon): the co-located light's,
1989
+ * as merged by the click — LITCHR / SIGGRP / SIGPER / CATLIT as copied,
1990
+ * `LIGHT_COLOUR` (else its own COLOUR, the historical fallback), and the
1991
+ * `LIGHT_`-prefixed rest.
1992
+ */
1993
+ declare function lightDescriptionProps(layerName: string, props: Readonly<Record<string, unknown>>): Record<string, unknown>;
1994
+
1895
1995
  /**
1896
1996
  * CHRTinteract decode core — S-57 attribute decoder and flash-pattern
1897
1997
  * generator for click-to-inspect.
@@ -1982,6 +2082,33 @@ interface SectorInfo {
1982
2082
  */
1983
2083
  allRound?: boolean;
1984
2084
  }
2085
+ /**
2086
+ * The dayboard a structure wears: an S-57 DAYMAR, which is the SLAVE of its
2087
+ * beacon (the beacon's LNAM_REFS points at it). Decoded from the tile's
2088
+ * derived `_daymark_*` properties — joined onto the master at build time
2089
+ * (CHRTbaremetal childAid.ts), or merged from a co-located DAYMAR by the
2090
+ * click path when the tile predates the join.
2091
+ */
2092
+ interface DecodedDayboard {
2093
+ /** The board's TOPSHP — "Rhombus (diamond)", "Square", "Triangle, point up". */
2094
+ shape: string | null;
2095
+ /** Every COLOUR of the board, in charted order. */
2096
+ colour: string | null;
2097
+ /** The board's COLPAT — "Border stripes, Squared". */
2098
+ pattern: string | null;
2099
+ /** How many boards the structure carries (a junction beacon can have two). */
2100
+ count: number;
2101
+ }
2102
+ /**
2103
+ * One line for a dayboard, the same on every surface: shape first (what you
2104
+ * see from a distance), then the colours in charted order, then how they are
2105
+ * arranged — "Rhombus (diamond) — White, Green (Border stripes, Squared)".
2106
+ */
2107
+ declare function formatDayboard(d: DecodedDayboard): string;
2108
+ interface DecodeNavAidOptions {
2109
+ /** Units the light's height is printed in, in `notation`. Default `meters`. */
2110
+ readonly units?: LightHeightUnits;
2111
+ }
1985
2112
  interface DecodedNavAid {
1986
2113
  name: string;
1987
2114
  /** Full official OBJNAM (e.g., "Boston South Channel Buoy 7") */
@@ -1997,6 +2124,17 @@ interface DecodedNavAid {
1997
2124
  shape: string | null;
1998
2125
  topmark: string | null;
1999
2126
  topmarkMeaning: string | null;
2127
+ /**
2128
+ * ⚠ ITS OWN FIELD, NEVER FOLDED INTO `colour`. Birch Point's stake is green
2129
+ * and white; the diamond on it is white and green in squares. Those are two
2130
+ * charted facts about two objects, and overwriting the stake's COLOUR with
2131
+ * the board's is how a dayboard used to repaint its beacon.
2132
+ */
2133
+ dayboard: DecodedDayboard | null;
2134
+ /** COLPAT — how the colours are arranged ("Horizontal stripes"). */
2135
+ colourPattern: string | null;
2136
+ /** NATCON — what the structure is built of, every value. */
2137
+ construction: string | null;
2000
2138
  lightCharacter: string | null;
2001
2139
  lightCharacterFull: string | null;
2002
2140
  period: number | null;
@@ -2042,7 +2180,7 @@ declare function deriveMarinerName(objnam: string, colourCode: number | null): s
2042
2180
  * rendering the hint.
2043
2181
  */
2044
2182
  declare function getTopmarkMeaning(topshpCode: number | null, rawLayer: string): string | null;
2045
- declare function decodeNavAidProps(layerName: string, props: Record<string, unknown>, coords?: [number, number]): DecodedNavAid;
2183
+ declare function decodeNavAidProps(layerName: string, props: Record<string, unknown>, coords?: [number, number], opts?: DecodeNavAidOptions): DecodedNavAid;
2046
2184
  interface FlashPhase {
2047
2185
  on: boolean;
2048
2186
  duration: number;
@@ -2632,7 +2770,10 @@ declare function collectClickCandidates(map: InteractMapLike, point: {
2632
2770
  * - OBJNAM / COLOUR inherited from a co-located parent buoy/beacon
2633
2771
  * - CATFOG from a co-located FOGSIG
2634
2772
  * - RETRFL presence from a co-located RTPBCN
2635
- * - TOPSHP from a co-located TOPMAR
2773
+ * - TOPSHP from the TOPMAR the structure's LNAM_REFS names (pointer first,
2774
+ * proximity only when the structure carries no pointers)
2775
+ * - the dayboard from the DAYMAR it names, into the derived `_daymark_*`
2776
+ * keys (its own "Dayboard" row — never the structure's COLOUR)
2636
2777
  * - LITCHR / SIGPER / SIGGRP / LIGHT_COLOUR / CATLIT from the primary
2637
2778
  * co-located LIGHTS (preferring a non-sector light)
2638
2779
  * - all co-located LIGHTS combined into the sector list
@@ -3604,6 +3745,16 @@ interface StyleGeneratorOptions extends BuildSourcesOptions {
3604
3745
  * omitted. Rule 4 (`OUTRANK_LABELS`) is kept for measurement.
3605
3746
  */
3606
3747
  soundingsRule?: ChartSoundingsRule;
3748
+ /**
3749
+ * DANGER DEPTHS AS A PAIR (`danger-depth-placer.ts`): an invisible placer in
3750
+ * 0.10.3's collision form beneath each visible callout, which is always
3751
+ * drawn and displaces nothing — no sounding is hidden, and a tile draws the
3752
+ * callouts once. Default OFF: the served style keeps 0.10.4's form (the
3753
+ * label alone, always drawn, still in collision) until CHRTsail has checked
3754
+ * the pair on MapLibre Native; CHRTweb and CHRTdesktop turn it on
3755
+ * (`ChartCanvas`), and the style routes take `placers=1`.
3756
+ */
3757
+ dangerDepthPlacers?: boolean;
3607
3758
  }
3608
3759
  declare function generateStyle(palette?: ColorTableName, opts?: StyleGeneratorOptions & {
3609
3760
  bandFan?: BandFanMode;
@@ -4137,15 +4288,15 @@ declare function buildLabelLayer(layerId: string, sourceId: string, config: Labe
4137
4288
  */
4138
4289
  declare function preprocessSoundings(fc: GeoJSON.FeatureCollection): GeoJSON.FeatureCollection;
4139
4290
  /**
4140
- * Pre-process LIGHTS GeoJSON to derive compact light characteristic labels.
4141
- * Adds `_lightLabel` property (e.g., "Fl(2) WR 4s 5M").
4291
+ * Pre-process LIGHTS GeoJSON to derive the light description label.
4292
+ * Adds `_lightLabel` (e.g. "Fl(2) WR 6s 31m 12M").
4142
4293
  *
4143
- * KEEP IN STEP WITH `buildLightLabelExpression()` in layer-builder.ts — that
4144
- * is the same label built as a GL expression for the tile path, which has no
4145
- * JS preprocessing step. `light-label-parity.test.ts` asserts the two agree
4146
- * on real tile features; if you change one, change both.
4294
+ * The text is `formatLightDescription` — the one formatter the tile path's GL
4295
+ * expression (`lightDescriptionExpression`), the SDK notation and the app's
4296
+ * popup and inspector all use (`light-description.ts`).
4297
+ * `light-description.test.ts` asserts the JS and GL forms agree.
4147
4298
  */
4148
- declare function preprocessLights(fc: GeoJSON.FeatureCollection): GeoJSON.FeatureCollection;
4299
+ declare function preprocessLights(fc: GeoJSON.FeatureCollection, opts?: LightDescriptionOptions): GeoJSON.FeatureCollection;
4149
4300
  /** List of layers that have labels */
4150
4301
  declare const LABELED_LAYERS: Set<string>;
4151
4302
  /**
@@ -4177,6 +4328,43 @@ declare const PLACENAME_LAND_CLASSES: readonly string[];
4177
4328
  */
4178
4329
  declare function buildPlaceNameLayers(sourceId: string, ct?: ColorTableName): maplibregl.LayerSpecification[];
4179
4330
 
4331
+ type Layer = {
4332
+ id: string;
4333
+ type: string;
4334
+ layout?: Record<string, unknown>;
4335
+ paint?: Record<string, unknown>;
4336
+ metadata?: Record<string, unknown>;
4337
+ };
4338
+ /** The visible danger-depth labels, and their legacy band-fan variants. */
4339
+ declare const DANGER_DEPTH_LABEL_ID: RegExp;
4340
+ /** The placers. Deliberately NOT matched by `^s52-(UWTROC|OBSTRN|WRECKS)-label`. */
4341
+ declare const DANGER_DEPTH_PLACER_ID: RegExp;
4342
+ /** `s52-UWTROC-label` → `s52-UWTROC-placer-label`; band variants keep their suffix. */
4343
+ declare function dangerDepthPlacerId(labelId: string): string;
4344
+ /** True for a placer layer id — invisible, never a hit target. */
4345
+ declare function isDangerDepthPlacer(layerId: string): boolean;
4346
+ /**
4347
+ * The visible half: always drawn, inserting no box, one sort key in source
4348
+ * order (a tile draws it once; "source" keeps the index buffer unsorted when
4349
+ * the chart rotates). Placement order is the placer's job.
4350
+ */
4351
+ declare const DANGER_DEPTH_VISIBLE_LAYOUT: Readonly<Record<string, unknown>>;
4352
+ /**
4353
+ * 0.10.3's placement, and nothing else: collision on, shallowest first. The
4354
+ * text is copied from the visible label, so the box is the same box.
4355
+ */
4356
+ declare const DANGER_DEPTH_PLACER_LAYOUT: Readonly<Record<string, unknown>>;
4357
+ /**
4358
+ * Every danger-depth text label turned into the visible half of a pair
4359
+ * (`DANGER_DEPTH_VISIBLE_LAYOUT`) and preceded (drawn below, so placed AFTER
4360
+ * it) by its invisible placer. A class emitted as a run of layers (the legacy band
4361
+ * fan, chart-mode cascades) gets its placers as one run directly beneath its
4362
+ * labels' run, so every role stays contiguous and the collapsed and legacy
4363
+ * emitters keep the same role order. A style without them returns the same
4364
+ * array.
4365
+ */
4366
+ declare function addDangerDepthPlacers<L extends Layer>(layers: readonly L[]): L[];
4367
+
4180
4368
  /**
4181
4369
  * Spatial grid-based feature decimation for performance at low zoom levels.
4182
4370
  * Thins dense GeoJSON feature sets by keeping only one representative
@@ -4452,6 +4640,9 @@ declare const S101_SYMBOL_NAMES: ReadonlySet<string>;
4452
4640
  * exist (UWTROC03/04, SISTAT03, WATTUR02); the number encodes a
4453
4641
  * different portrayal case.
4454
4642
  * LIGHTHOUSE01 — a CHRT-local symbol name with no PresLib/S-101 analogue.
4643
+ * TMARDEF1 / TMARDEF2 — the PresLib TOPMAR01 "flag or other shape"
4644
+ * topmarks (beacon / buoy); the catalogue defines no TMARDEF symbols at
4645
+ * all. TMARDEF1 arrived with the rigid TOPMAR01 table (2026-10).
4455
4646
  *
4456
4647
  * Pinned by `s101-style.test.ts` so the set can only shrink deliberately
4457
4648
  * (e.g. when re-pinned to an in-force catalogue edition that adds them).
@@ -4594,11 +4785,22 @@ declare function chrtHouseColor(dayHex: string, palette?: ColorTableName): strin
4594
4785
  * its paint is the style's `icon-color`.
4595
4786
  */
4596
4787
  declare function themeChrtGlyph(svg: string, palette?: ColorTableName): string;
4597
- /** First-listed-colour-wins tint expression for SDF bodies. */
4788
+ /**
4789
+ * Tint expression for SDF bodies: the mark's DOMINANT colour — the first
4790
+ * chromatic code in COLOUR, which S-57 lists top band first.
4791
+ *
4792
+ * ⚠ It used to rank codes by salience (red before green) and take the first
4793
+ * one PRESENT, whatever its position. That painted a green-red-green
4794
+ * preferred-channel mark (`["4","3","4"]`) red — the opposite lateral side —
4795
+ * and contradicted the module header's own "first listed colour" contract.
4796
+ * White/black/brown/grey only tint a mark that carries no chromatic colour.
4797
+ */
4598
4798
  declare function chrtAtonTintExpression(palette?: ColorTableName): unknown[];
4599
- /** Lights tint: exact colour (incl. blue/orange — the house style renders
4600
- * the encoded colour, unlike the S-52 three-bucket flares); colourless
4601
- * lights read as white with the dark halo carrying contrast. */
4799
+ /** Lights tint: the exact colour of a one-colour light (incl. blue/orange —
4800
+ * the house style renders the encoded colour, unlike the S-52 three-bucket
4801
+ * flares), the LIGHTS06 fold for white+red / white+green, and the house
4802
+ * "unknown" grey for everything else — a red-and-green light or a light with
4803
+ * no charted colour has no one true colour, and painting one asserts it. */
4602
4804
  declare function chrtLightTintExpression(palette?: ColorTableName): unknown[];
4603
4805
  /** Per-class house icon expressions. Classes not listed keep their S-52
4604
4806
  * icons (e.g. TOPMAR's minimal black shapes already fit the house look). */
@@ -4731,12 +4933,13 @@ declare const S52_ATON_LOOKUPS_PAPER: Record<string, AtonClassLookup>;
4731
4933
  * LIGHTS has no lookup rows (the table delegates to CS(LIGHTS05)); the
4732
4934
  * flare selection here transcribes the PresLib LIGHTS05/06 procedure as
4733
4935
  * implemented by OpenCPN s52cnsy.cpp `_selSYcol()` + the CATLIT pre-checks:
4734
- * red→LIGHTS11, green→LIGHTS12, white/yellow/amber→LIGHTS13,
4936
+ * red→LIGHTS11, green→LIGHTS12, white/yellow/orange→LIGHTS13,
4735
4937
  * white+red→LIGHTS11, white+green→LIGHTS12, floodlight/fog-detector→LIGHTS82,
4736
4938
  * strip light→LIGHTS81, everything else→LITDEF11. The vendored flare SVGs
4737
4939
  * carry the spec colour and the 135° flare rotation baked in, so selection
4738
- * is purely icon-name choice. Sector geometry (SECTR1/SECTR2 arcs) stays
4739
- * app-side (P6); this module only picks the symbol at the light.
4940
+ * is purely icon-name choice. Sector lights get no flare at all — their legs
4941
+ * and arcs are `sector-lights.ts`; this module only picks the symbol at the
4942
+ * light.
4740
4943
  */
4741
4944
 
4742
4945
  /** Classes whose icon selection is fully lookup-table-driven. TOPMAR and
@@ -4753,7 +4956,7 @@ declare function atonIconExpression(objectClass: string): string | unknown[];
4753
4956
  /**
4754
4957
  * LIGHTS flare selection per the LIGHTS05/06 conditional symbology
4755
4958
  * procedure (see module header for provenance). COLOUR codes: 1 white,
4756
- * 3 red, 4 green, 6 yellow, 9 amber.
4959
+ * 3 red, 4 green, 6 yellow, 11 orange.
4757
4960
  */
4758
4961
  declare function lightsIconExpression(): unknown[];
4759
4962
 
@@ -4802,6 +5005,84 @@ declare const S52_PATTERN_SPRITE_PREFIX = "AP:";
4802
5005
  /** Registered image id for a PresLib pattern name, e.g. "VEGATN03" -> "AP:VEGATN03". */
4803
5006
  declare function patternSpriteId(patternName: string): string;
4804
5007
 
5008
+ /**
5009
+ * Sector lights in the generated style — S-52 LIGHTS05, drawn from the
5010
+ * tiles' own SECTR1 / SECTR2 with no derived geometry.
5011
+ *
5012
+ * LIGHTS05 gives a sectored light (SECTR1 and SECTR2 both charted) NO flare.
5013
+ * It gets two sector LEGS, dashed black, from the light along each limit, and
5014
+ * an ARC between them in the sector's colour over a black outline:
5015
+ * `LS(DASH,1,CHBLK)` legs 25 mm long, `CA(OUTLW,4,<colour>,2…)` at 20 mm, and
5016
+ * 25 mm where another sector at the same position overlaps this one. Before
5017
+ * this module the served style drew every sector as an ordinary flare at the
5018
+ * light's 135° offset, so co-located sectors stacked into one flare and the
5019
+ * chart said nothing about which way any colour shows (Hendricks Head,
5020
+ * US5ME1JP / US4ME1CE: W 000°–180°, R 180°–000°, drawn as one white flare).
5021
+ *
5022
+ * ⚠ BEARINGS ARE FROM SEAWARD. SECTR1/SECTR2 are the bearing of the light AS
5023
+ * SEEN FROM THE VESSEL, so a limit is drawn on its reciprocal (+180°) — the
5024
+ * same rule as `sectorLimitToArcBearing` in `../interact/decode.ts` and
5025
+ * `src/lib/map/nav-aid-info.ts`, whose geometry was verified light by light in
5026
+ * docs/validation/sector-light-audit-2026-09.md.
5027
+ *
5028
+ * ── Why sprites, not tile geometry ───────────────────────────────────────
5029
+ *
5030
+ * S-52 sizes legs and arcs in SCREEN millimetres: the ring is the same size
5031
+ * at every zoom. Geometry baked into tiles is geographic and would have to be
5032
+ * re-emitted per zoom, and it would ship only with a tile rebuild. A rotated
5033
+ * icon is screen-sized by construction and reads SECTR1/SECTR2 from tiles that
5034
+ * already exist, so the portrayal ships with the style.
5035
+ *
5036
+ * - A LEG is one dashed sprite anchored at its foot and turned to the limit
5037
+ * with `icon-rotate`. Exact to the charted tenth of a degree.
5038
+ * - An ARC of arbitrary sweep is composed from at most three segment sprites,
5039
+ * one per base-8 digit of the sweep in whole degrees: `64·a + 8·b + c`.
5040
+ * Layer k draws digit k's segment, rotated to start where the previous
5041
+ * digit's ended. 19 segment shapes (1–7°, 8–56°, 64–320°) per colour cover
5042
+ * every sweep from 1° to 360°, against 360 sprites for a one-per-degree set.
5043
+ * The sweep is rounded to whole degrees and the rounding is split across
5044
+ * both ends, so the arc lands within 0.5° of each leg — about a quarter of
5045
+ * a pixel at the radius drawn. The legs carry the exact limits.
5046
+ *
5047
+ * Segment sprites are cropped to their own ink; `icon-offset` puts each one's
5048
+ * box back where it belongs relative to the light, and MapLibre rotates the
5049
+ * offset with the icon, so the arc's centre stays on the light at any bearing.
5050
+ *
5051
+ * ── Sizes ───────────────────────────────────────────────────────────────
5052
+ *
5053
+ * The S-52 PROPORTION (leg 25 : arc 20, outline 4 : core 2) is kept. The
5054
+ * absolute size is the house one: the CHRTweb overlay's owner-tuned ~29 px
5055
+ * ring at z14 (`SECTOR_HIGH_ZOOM_RADIUS_NM` in nav-aid-info.ts), easing smaller
5056
+ * toward planning zooms the same way the flares do. Full S-52 size at CHRT's
5057
+ * 2× symbol scale would be a 125 px ring, which the owner already rejected as
5058
+ * the loudest layer on the chart when the overlay drew 58 px ones.
5059
+ */
5060
+
5061
+ declare function isSectorSpriteId(name: string): boolean;
5062
+ /**
5063
+ * A sectored light, per LIGHTS05: both limits charted and a non-zero sweep. A
5064
+ * light whose limits coincide is all-round and keeps its flare. (None of the
5065
+ * 4,361 corpus sectors do; the guard is for the spec, not the data.)
5066
+ */
5067
+ declare const IS_SECTOR_LIGHT: unknown[];
5068
+ declare const SECTOR_ARC_LAYER_IDS: readonly ["s52-LIGHTS-sector-arc-64", "s52-LIGHTS-sector-arc-8", "s52-LIGHTS-sector-arc-1"];
5069
+ declare const SECTOR_LEG_LAYER_IDS: readonly ["s52-LIGHTS-sector-leg-1", "s52-LIGHTS-sector-leg-2"];
5070
+ /**
5071
+ * Every layer this module emits — the ids an app with its own sector overlay
5072
+ * hides while that overlay is up (CHRTweb's ChartCanvas, the platform map).
5073
+ */
5074
+ declare const SECTOR_LIGHT_LAYER_IDS: readonly string[];
5075
+ /**
5076
+ * The sector-light layers for one source. Not band-fanned: every band's copy
5077
+ * of a light sits at the same position (Amelia Island is charted identically in
5078
+ * seven cells), so copies draw exactly over each other. Arcs first, legs over
5079
+ * them so each limit reads across the band.
5080
+ *
5081
+ * `ct` is accepted for symmetry with `buildLampLayers`; the sprites carry their
5082
+ * S-52 tokens and are themed by the sheet, so no paint here depends on it.
5083
+ */
5084
+ declare function buildSectorLightLayers(sourceId: string, _ct?: ColorTableName): StyleLayer[];
5085
+
4805
5086
  /**
4806
5087
  * S-52 SVG Loader — pure (DOM-free) string operations over the inlined S-52
4807
5088
  * SVG catalogue in `s52-svgs-generated.ts`. SVG files use S-52 color token
@@ -5780,4 +6061,4 @@ declare class Chrt {
5780
6061
  warmTiles(region?: string): Promise<TileTokenResponse>;
5781
6062
  }
5782
6063
 
5783
- 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, 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, 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, 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, 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 };
6064
+ 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, 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, 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, sectorLimitToArcBearing, semiboldFontStack, snapChartSymbolScale, soundingPadding, soundingPaddingValue, splitOpaqueDepthAreas, stepChartSymbolScale, styleModeBand, terrainStackCount, textSliderFor, themeChrtGlyph, tileTemplate, uncoveredSectorArcs, withinBboxFilter, worldMinusBboxPolygon };