@chrtco/sdk 0.10.47 → 0.10.49

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
@@ -3072,112 +3072,6 @@ interface BuildSourcesOptions {
3072
3072
  */
3073
3073
  declare function buildSources(opts?: BuildSourcesOptions): Record<string, AnySourceSpec>;
3074
3074
 
3075
- /**
3076
- * DEPTH NUMBERS — how big the chart draws its depth figures.
3077
- *
3078
- * Asked for from the helm (chip 68, 2026-10-05), by a captain running CHRTsail
3079
- * desktop on a Raspberry Pi: *"I still need the depth numbers to be bolder
3080
- * which may be a setting. I just can't sail the boat and adjust all that stuff
3081
- * at the same time."* A set-and-forget choice, then, not a slider.
3082
- *
3083
- * ===========================================================================
3084
- * WHAT "LARGE" CHANGES, AND WHAT IT IS NOT ALLOWED TO TOUCH
3085
- * ===========================================================================
3086
- *
3087
- * It changes the SIZE of the glyphs (and, where a class was Regular, the
3088
- * WEIGHT, to the Semibold soundings already use), the halo a little — see
3089
- * `LARGE` for why less than the glyph — and the sounding collision padding —
3090
- * see `LARGE_SOUNDING_PADDING_PX` for why that one moves.
3091
- *
3092
- * It does not touch, and `depth-label-size.test.ts` holds every one of these
3093
- * equal to the Standard style in every palette and every symbol family:
3094
- *
3095
- * - `text-field` — the number itself, its unit conversion, its rounding.
3096
- * ENC content is never altered; a bigger "4" is still the cell's "4".
3097
- * - `text-color` / `text-halo-color` — §SOUNDG02's two shades against the
3098
- * safety contour, and the palette that draws them (red night included:
3099
- * it IS the NIGHT chart). A depth number shoaler than the contour stays
3100
- * the loud one.
3101
- * - `symbol-sort-key` — shallowest wins a collision, at any size.
3102
- * - `filter`, `minzoom`, `maxzoom`, layer ids and layer order — so the
3103
- * resident layer set the desktop builds at boot is the same set, and a
3104
- * switch is `setLayoutProperty` / `setPaintProperty` on layers already
3105
- * there. No layer and no draw call is added; what costs more is GPU fill,
3106
- * because a bigger glyph covers more pixels (about 6–7 % more blended
3107
- * fragments per pixel on the chart bench — the PR has the numbers).
3108
- *
3109
- * ===========================================================================
3110
- * WHICH LABELS ARE "DEPTH NUMBERS"
3111
- * ===========================================================================
3112
- *
3113
- * Exactly the ones the depth-unit switch converts (`buildLabelLayer` in
3114
- * `layer-builder.ts`): soundings, contour values, and the depth printed beside
3115
- * a rock, wreck or obstruction. The unit switch already treats those three as
3116
- * one claim — its own note says a rock's figure "is the SAME depth claim as a
3117
- * sounding" — and a size switch that enlarged the soundings around a rock but
3118
- * left the rock's own depth small would make the hazard the quietest number
3119
- * on that part of the chart.
3120
- *
3121
- * Not the dredged-channel note (`DRGNOTE`): it is a sentence fitted inside
3122
- * its own channel polygon at a computed size, and scaling it would stop it
3123
- * fitting. Not the bridge note: a clearance is a height, not a depth.
3124
- *
3125
- * ===========================================================================
3126
- * WHY NOT A BOLD FACE
3127
- * ===========================================================================
3128
- *
3129
- * The chart's glyph sets are Open Sans Regular, Semibold and Italic — the tile
3130
- * worker's `/v1/glyphs` (`cloudflare/tile-worker/glyphs/GLYPHS.json`) and the
3131
- * offline chart-assets pack serve those three and nothing else, and a
3132
- * fontstack no glyph host serves is the failure `labels.ts`'s SOUNDG note
3133
- * describes (Native lost every sounding). Soundings are already Semibold. So "bolder" here is
3134
- * size: stroke width scales with the glyph, and at 1x device pixels (a Pi's
3135
- * panel) a 14 px Semibold numeral is both heavier and crisper than a 10 px one.
3136
- */
3137
-
3138
- /** The two choices, in presentation order. */
3139
- declare const DEPTH_LABEL_SIZES: readonly ["standard", "large"];
3140
- type DepthLabelSize = (typeof DEPTH_LABEL_SIZES)[number];
3141
- /**
3142
- * Standard is the chart as it has always been drawn, and it is what a style
3143
- * generated without the option gets: byte-identical, so the served style, the
3144
- * native-render goldens and every client that never asks are unchanged.
3145
- */
3146
- declare const DEFAULT_DEPTH_LABEL_SIZE: DepthLabelSize;
3147
- /** Case-insensitive; anything unrecognised is `null`, never a throw. */
3148
- declare function parseDepthLabelSize(raw: string | null | undefined): DepthLabelSize | null;
3149
- /** The S-57 classes whose label is a depth figure. See the header. */
3150
- declare const DEPTH_LABEL_CLASSES: ReadonlySet<string>;
3151
- /**
3152
- * Sounding collision padding at Large, px. Standard is 6.
3153
- *
3154
- * ⚠ THIS IS THE ONE THAT DECIDES HOW MANY SOUNDINGS SURVIVE. MapLibre drops a
3155
- * sounding whose box (glyphs + padding) overlaps one already placed — the
3156
- * shallowest places first, so what drops is the deeper figure. A 1.4x numeral
3157
- * inside Standard's 6 px padding lost a quarter of the soundings: bigger
3158
- * numbers, fewer of them, which is not what was asked for. Trimming the
3159
- * padding gives the box back.
3160
- *
3161
- * Measured 2026-10-05 on the chart bench (`scripts/chart-bench`, Boston, DAY,
3162
- * 1280x800 at 1x), soundings placed, Standard → Large at this padding:
3163
- *
3164
- * z11.5 515 → 539 (+5%) z12.3 434 → 415 (−4%)
3165
- * z13 374 → 366 (−2%) z14 326 → 311 (−5%)
3166
- *
3167
- * and at Standard's 6 px: 391 / 246 at z11.5 / z14 (−24% / −25%). 3 px kept
3168
- * z14 level but put 17% MORE figures on the coastal view, which reads as
3169
- * clutter rather than as the same chart drawn bigger.
3170
- */
3171
- declare const LARGE_SOUNDING_PADDING_PX = 3.5;
3172
- /**
3173
- * Apply a depth-label size to one generated label layer.
3174
- *
3175
- * Standard — and any class that is not a depth figure — returns the SAME
3176
- * object, untouched. Large returns a copy with only the properties listed in
3177
- * the header changed.
3178
- */
3179
- declare function applyDepthLabelSize(objectClass: string, layer: StyleLayer, size: DepthLabelSize | undefined): StyleLayer;
3180
-
3181
3075
  /**
3182
3076
  * Builds Mapbox GL Style layer specs from S-52 lookup entries.
3183
3077
  * Wraps the existing atlas resolveStyle() and adds source/source-layer/filter.
@@ -3218,6 +3112,308 @@ declare function buildLayersForClass(objectClass: string, ct: ColorTableName, so
3218
3112
  */
3219
3113
  declare function getOrderedClasses(): string[];
3220
3114
 
3115
+ /**
3116
+ * CHART SIZING — five sliders over what the chart prints: LAND LABELS, WATER
3117
+ * LABELS, DEPTH NUMBERS, WAYPOINTS, CHART ICONS, 50–200 % (owner, 2026-10-05).
3118
+ *
3119
+ * ===========================================================================
3120
+ * ONE MODEL, EVERY CLIENT
3121
+ * ===========================================================================
3122
+ *
3123
+ * The owner asked for the sliders on CHRTsail iOS (*"please add the following
3124
+ * as sizing sliders: land label size, water label size, waypoint size, chart
3125
+ * icon size"*) the same day a captain at a Raspberry Pi helm asked CHRTsail
3126
+ * desktop for *"the depth numbers to be bolder"* (chip 68). The decisions:
3127
+ * desktop and web ADOPT the iOS model rather than ship a control of their own,
3128
+ * and every platform gains a FIFTH slider, DEPTH NUMBERS, for the depth
3129
+ * figures. So this file is a port of `ChartSymbolSizing.swift` (chrt-co/sail,
3130
+ * #1038 at d5cd7060, read 2026-10-05) plus DEPTH NUMBERS as agreed with
3131
+ * CHRTKit's owner (sail, 2026-10-05: `depthNumbers`, `chart.depthNumberScale`,
3132
+ * the ladder and rules below). The classification tables and the collision
3133
+ * rules are copied, not re-derived; a disagreement between the two clients is
3134
+ * a bug in one of them.
3135
+ *
3136
+ * WAYPOINTS is in the vocabulary but not in this file's transform: waypoints
3137
+ * are the app's own marks (DOM, not style layers) and the app scales them.
3138
+ *
3139
+ * ===========================================================================
3140
+ * THE RULE THE PORT KEEPS — iOS's, verbatim in substance
3141
+ * ===========================================================================
3142
+ *
3143
+ * A bigger symbol may OVERLAP the chart. It may never DISPLACE it.
3144
+ *
3145
+ * 1. 100 % is the generated style, byte for byte (`applyChartSymbolScales`
3146
+ * returns the same object).
3147
+ * 2. An enlarged layer stops taking part in other symbols' placement
3148
+ * (`*-ignore-placement: true`): it may vanish itself, it removes nothing.
3149
+ * 3. Enlarged hazard text — CHRT's label band 100, `chrt:labelPriority` —
3150
+ * also gets `text-allow-overlap: true`: never dropped.
3151
+ * 4. The soundings keep CHRT's collision flags (a sounding layer that ignored
3152
+ * placement would stop decluttering itself) — and OUTRANK every label
3153
+ * above them: whenever ANY label slider (land, water, chart icons) is off
3154
+ * 100 %, every text label placed before the soundings, hazard text and
3155
+ * unclassified labels included, stops taking part in placement. A
3156
+ * sounding then gives way only to a shallower sounding. iOS's
3157
+ * `ChartSoundingsRule.outrankLabels`, chosen by its Boston Inner Harbor
3158
+ * census (z13–16, every slider at 50/100/150/200 %): every rule that only
3159
+ * protected the ENLARGED layer lost a shallow sounding, including on the
3160
+ * way DOWN — a sea-area name shrunk to 50 % fitted where it used to be
3161
+ * culled, got placed, and culled a sounding beneath it.
3162
+ *
3163
+ * Its cost, measured on this chart (bench, Boston, LAND 105 %): 46–56 %
3164
+ * more soundings at z11.5–13, aid names up to 3.6x, sea and island names
3165
+ * drawn twice — labels above the soundings stop culling each other as well
3166
+ * as the soundings.
3167
+ *
3168
+ * **THE ZOOM SPLIT — the soundings rule in force** (owner, 2026-10-06;
3169
+ * CHRTKit `ChartSoundingsRule.zoomSplit(harbourFrom: 14)`, sail 20f9f56bb;
3170
+ * `CHART_SOUNDINGS_RULE`). MapLibre has one collision index and no
3171
+ * groups, so a label class above the soundings either culls them or culls
3172
+ * nothing, its own kind included (the pile-up). Rule 4 is therefore kept
3173
+ * only for what orients the chart — sea-area, island and land-region
3174
+ * names, CHRTland and CHRT_BASE labels, and label band 100
3175
+ * (`keptAboveSoundings`). Every OTHER text label above the soundings
3176
+ * (buoy, beacon and fog-signal names, the dredged-area note) moves
3177
+ * directly BELOW them, in its served order, and its collision flags step
3178
+ * with zoom: CHRT's own below zoom 14, where it thins out round the
3179
+ * soundings, and `true` from 14, where it is always drawn and displaces
3180
+ * nothing — exactly what rule 4 draws there. Measured on the bench: 0
3181
+ * shoals uncovered beyond rule 4's own; buoy names 33 / 12 / 5 at
3182
+ * z14 / 15 / 16 against served 25 / 11 / 5, and 5–27 against 60–78 below.
3183
+ * Layer order cannot change with zoom, but flags can, so this is one
3184
+ * order with zoom-stepped flags, the same edits on every platform.
3185
+ *
3186
+ * Shrinking keeps every served flag on the layer that shrinks: a smaller box
3187
+ * can only free space (rule 4 covers what that freed space then admits).
3188
+ *
3189
+ * ===========================================================================
3190
+ * DEPTH NUMBERS — 0.10.3's toggle, as a slider
3191
+ * ===========================================================================
3192
+ *
3193
+ * DEPTH NUMBERS takes the depth figures (`DEPTH_FIGURE_CLASSES`: soundings,
3194
+ * contour values, the depth beside a rock, wreck or obstruction) away from
3195
+ * WATER LABELS and CHART ICONS, and keeps CHRT's collision flags on the
3196
+ * soundings and contour values. OFF 100 %, EITHER WAY, IT TRIGGERS THE ZOOM
3197
+ * SPLIT (owner, 2026-10-06, `labelSlidersOffStandard`: "a size control must
3198
+ * never remove a shoal, whichever way it's moved"). Bigger depth glyphs collide
3199
+ * with more of the labels placed before them: on the bench at Boston DEPTH
3200
+ * 140 % alone left 7 / 3 / 1 shoals uncovered at z12.3 / 13 / 14 — 0.10.3's
3201
+ * Large left 8 / 4 / 1. With the split: 0. Shrinking is a trigger by the same
3202
+ * rule, measured or not (`scripts/chart-bench/depth-numbers-census.ts`).
3203
+ * Above 100 %:
3204
+ *
3205
+ * A. **Depth figures go Semibold** — each served Regular face swapped for its
3206
+ * Semibold (`semiboldFontStack`, derived from the name as CHRTKit does).
3207
+ * Soundings already are; contour values and the depth beside a rock,
3208
+ * wreck or obstruction are Regular, and an enlarged Regular numeral
3209
+ * beside an enlarged Semibold one reads as two kinds of figure. There is no Bold glyph set on any CHRT glyph host
3210
+ * (`cloudflare/tile-worker/glyphs/GLYPHS.json`), so this is the heaviest
3211
+ * face a client may ask for.
3212
+ * B. **Halos grow half as fast as the glyph** (`haloFactor`), on depth
3213
+ * figures only and at DEPTH NUMBERS' own factor — a contour value's
3214
+ * half-rate size does not halve its halo again (CHRTKit,
3215
+ * `ChartDepthFigureRules.haloWidth`). A halo is the S-52 cut-out, and in
3216
+ * DUSK it is dark like a deeper sounding's fill, so it THICKENS that
3217
+ * numeral instead of cutting it out (`s-52.md` §8a). Grown in proportion,
3218
+ * the deeper DUSK soundings out-weighed the shoal ones beside them — the
3219
+ * two-shade rule backwards.
3220
+ * C. **The sounding collision padding shrinks as the soundings grow**
3221
+ * (`soundingPadding`), so about as many soundings are placed at 140 % as
3222
+ * at 100 %: CHRT's 6 px padding at 1.4x placed a quarter fewer (326 → 246
3223
+ * at Boston z14, chip 68); 3.5 px held z11.5–15 within ±5 %.
3224
+ * D. **Contour values grow at half rate** (`contourValueFactor`) — 0.10.3's
3225
+ * 1.2x beside 1.4x soundings, so a contour label still fits its line.
3226
+ * And rule 3 for the depth callouts beside rocks, wrecks and obstructions
3227
+ * (CHRTKit's call): never dropped, never displacing, so a hazard is never
3228
+ * drawn with its depth culled.
3229
+ *
3230
+ * Nothing here touches a label's TEXT, its colours (the §SOUNDG02 two shades),
3231
+ * its sort key, filter or zoom gate, or the layer set.
3232
+ */
3233
+
3234
+ /**
3235
+ * Drawer order — iOS's `ChartSymbolSize.allCases` plus DEPTH NUMBERS.
3236
+ *
3237
+ * ⚠ DEPTH NUMBERS IS THE OWNER'S FIFTH SLIDER (2026-10-05), on every platform.
3238
+ * It takes the depth figures — soundings, contour values, the depth beside a
3239
+ * rock, wreck or obstruction — away from WATER LABELS and CHART ICONS, scales
3240
+ * them the way 0.10.3's DEPTH NUMBERS toggle did, and off 100 % — either way —
3241
+ * triggers the zoom split as LAND, WATER and CHART ICONS do (owner, 2026-10-06). 100 % on
3242
+ * every client by default. Name, wire and ladder as CHRTKit's shared model;
3243
+ * see `CHART_SYMBOL_SIZE_WIRE`.
3244
+ */
3245
+ declare const CHART_SYMBOL_SIZES: readonly ["landLabels", "waterLabels", "depthNumbers", "waypoints", "chartIcons"];
3246
+ type ChartSymbolSize = (typeof CHART_SYMBOL_SIZES)[number];
3247
+ /** The account key each slider syncs under — iOS `SettingKey.*Scale.wireName`. */
3248
+ declare const CHART_SYMBOL_SIZE_WIRE: Readonly<Record<ChartSymbolSize, string>>;
3249
+ /** The row names — `ChartSymbolSize.label`, verbatim. */
3250
+ declare const CHART_SYMBOL_SIZE_LABELS: Readonly<Record<ChartSymbolSize, string>>;
3251
+ /** What each slider reaches, one line — `ChartSymbolSize.reach`, verbatim. */
3252
+ declare const CHART_SYMBOL_SIZE_REACH: Readonly<Record<ChartSymbolSize, string>>;
3253
+ /** `ChartSymbolScale` — integer percent throughout. */
3254
+ declare const CHART_SYMBOL_SCALE: {
3255
+ readonly min: 50;
3256
+ readonly max: 200;
3257
+ readonly standard: 100;
3258
+ /** The − / + step. */
3259
+ readonly buttonStep: 10;
3260
+ /** The slider's snap. */
3261
+ readonly sliderStep: 5;
3262
+ };
3263
+ type ChartSymbolScales = Readonly<Record<ChartSymbolSize, number>>;
3264
+ declare const STANDARD_CHART_SYMBOL_SCALES: ChartSymbolScales;
3265
+ declare function clampChartSymbolScale(percent: number): number;
3266
+ /** A slider position → the stored percent: nearest 5, clamped. */
3267
+ declare function snapChartSymbolScale(value: number): number;
3268
+ /** One press of − or +, from wherever the value is (125 % − is 115 %). */
3269
+ declare function stepChartSymbolScale(percent: number, presses: number): number;
3270
+ /**
3271
+ * A stored or synced value. Unreadable → `null` (the caller's default);
3272
+ * out of range → clamped, so a newer client's wider range never reaches the
3273
+ * renderer raw. A string must be a whole number — "140", not "140%".
3274
+ */
3275
+ declare function decodeChartSymbolScale(raw: unknown): number | null;
3276
+ /** Text that names a place or a feature on LAND. */
3277
+ declare const LAND_TEXT_CLASSES: ReadonlySet<string>;
3278
+ /**
3279
+ * Text that names WATER, or states a clearance over it. LAKARE, RIVERS and
3280
+ * CANALS are here though CHRT files them under "Land": the label is the name
3281
+ * of water. SOUNDG and DEPCNT left for DEPTH NUMBERS (owner, 2026-10-05).
3282
+ */
3283
+ declare const WATER_TEXT_CLASSES: ReadonlySet<string>;
3284
+ /**
3285
+ * Text that belongs to a charted point symbol — it follows CHART ICONS so it
3286
+ * keeps its em offset from the symbol it annotates.
3287
+ */
3288
+ declare const SYMBOL_ANNOTATION_TEXT_CLASSES: ReadonlySet<string>;
3289
+ /** CHRT's hazard label band. Enlarged text in it is never dropped (rule 3). */
3290
+ declare const HAZARD_LABEL_PRIORITY = 100;
3291
+ /**
3292
+ * The depth figures — DEPTH NUMBERS' text. The labels the depth-unit switch
3293
+ * converts (`buildLabelLayer`): a sounding, a contour value, the depth beside a
3294
+ * rock, wreck or obstruction (that class's ICON stays CHART ICONS'). Not the
3295
+ * dredged-channel note: it is a sentence.
3296
+ */
3297
+ declare const DEPTH_FIGURE_CLASSES: ReadonlySet<string>;
3298
+ /**
3299
+ * Contour values grow at half DEPTH NUMBERS' rate: a contour value rides its
3300
+ * line and needs a straight-enough run to fit, and shares rank 300 with the
3301
+ * soundings, which place first. 0.10.3's Large drew them 1.2x when it drew the
3302
+ * soundings 1.4x, for that reason; this is the same ratio as a slider.
3303
+ */
3304
+ declare function contourValueFactor(depthNumbersFactor: number): number;
3305
+ /**
3306
+ * 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.
3308
+ */
3309
+ declare const SERVED_FONT_STACKS: readonly string[];
3310
+ /**
3311
+ * Rule A: the served font stack with each Regular face swapped for its
3312
+ * Semibold — DERIVED from the served name, not typed, as CHRTKit does, so a
3313
+ * family that changes its face is followed rather than overridden. A swap
3314
+ * that would ask for a face no glyph host serves is refused (the face stays
3315
+ * Regular), as CHRTKit's `servedFontStacks` does. Semibold and Italic faces
3316
+ * are left as served (soundings are already Semibold, so A changes the
3317
+ * contour values and the three callouts). Anything that is not a plain list
3318
+ * of names — absent, or an expression — is returned untouched.
3319
+ */
3320
+ declare function semiboldFontStack(font: unknown): unknown;
3321
+ /** The slider a layer's TEXT follows, or null (stays at 100 %, counted). */
3322
+ declare function textSliderFor(layer: StyleLayer): ChartSymbolSize | null;
3323
+ /** The slider a layer's ICON follows: every chart point symbol, no basemap one. */
3324
+ declare function iconSliderFor(layer: StyleLayer): ChartSymbolSize | null;
3325
+ /**
3326
+ * `value` × `factor`, keeping its zoom structure: the factor goes onto every
3327
+ * stop's OUTPUT, because MapLibre accepts `["zoom"]` only as the input of a
3328
+ * TOP-LEVEL `interpolate`/`step`. `null` for a shape this does not recognise —
3329
+ * the caller leaves that property at its served size rather than guess.
3330
+ * `undefined` (absent) is the renderer default × factor.
3331
+ */
3332
+ declare function scaleSizeExpression(value: unknown, factor: number, fallback: number): unknown;
3333
+ /** Rule B: a halo grows half as fast as its glyph, and only above 100 %. */
3334
+ declare function haloFactor(factor: number): number;
3335
+ /**
3336
+ * CHRT's sounding collision padding, px (`labels.ts`). Read from the generated
3337
+ * layer where it is a number; this is the fallback and the test's anchor.
3338
+ */
3339
+ declare const SERVED_SOUNDING_PADDING_PX = 6;
3340
+ /**
3341
+ * Rule C: px of padding taken off per unit of factor above 1. 6.25 puts 140 %
3342
+ * at 3.5 px — the value the chip-68 sweep chose — and reaches 0 at 196 %.
3343
+ * DEPTH NUMBERS alone (no rule 4) holds the soundings count to −9 % … +7 % of
3344
+ * the served chart across 120–200 %, z11.5–15 (bench, Boston, DAY, 1280×800 at
3345
+ * 1×; −9 % is z14 at 200 %). `.chrt/standards/s-52.md` §8a has the figures.
3346
+ */
3347
+ declare const SOUNDING_PADDING_PER_FACTOR = 6.25;
3348
+ /** Rule C: the sounding padding at a DEPTH NUMBERS factor. */
3349
+ declare function soundingPadding(factor: number, served?: number): number;
3350
+ /** MapLibre's `text-padding` when a layer sets none. */
3351
+ declare const MAPLIBRE_DEFAULT_TEXT_PADDING_PX = 2;
3352
+ /**
3353
+ * Rule C on whatever the served `text-padding` is, as CHRTKit's
3354
+ * `ChartDepthFigureRules.soundingPadding` does: absent is MapLibre's 2 px; a
3355
+ * number is reduced; a zoom `interpolate` or `step` has each OUTPUT reduced;
3356
+ * any other shape is left as served. At or below 100 % it is the served value.
3357
+ */
3358
+ declare function soundingPaddingValue(served: unknown, factor: number): unknown;
3359
+ /**
3360
+ * What the labels above the soundings do when LAND LABELS, WATER LABELS or
3361
+ * CHART ICONS leaves 100 % (the header's rule 4 and THE ZOOM SPLIT). CHRTKit's
3362
+ * `ChartSoundingsRule`, the two cases this client ships.
3363
+ */
3364
+ type ChartSoundingsRule = {
3365
+ readonly kind: "outrankLabels";
3366
+ } | {
3367
+ readonly kind: "zoomSplit";
3368
+ readonly harbourFrom: number;
3369
+ readonly splitLights?: boolean;
3370
+ };
3371
+ /** Rule 4 as iOS first shipped it: every text label above the soundings yields. */
3372
+ declare const OUTRANK_LABELS: ChartSoundingsRule;
3373
+ /** The rule in force — the owner's split at zoom 14 (2026-10-06), CHRTKit's default. */
3374
+ declare const CHART_SOUNDINGS_RULE: ChartSoundingsRule;
3375
+ /**
3376
+ * Whether a label stays above the soundings under the zoom split: label band
3377
+ * 100 (hazard text), the CHRTland and CHRT_BASE labels, and sea-area, island
3378
+ * and land-region names. With `splittingLights`, light characteristics are
3379
+ * split like the buoy names despite being band 100 (measured, not shipped).
3380
+ */
3381
+ declare function keptAboveSoundings(layer: StyleLayer, splittingLights?: boolean): boolean;
3382
+ /** `value` below zoom `z`, `true` from it — CHRTKit `fromZoom`. Absent is MapLibre's `false`. */
3383
+ declare function fromZoom(z: number, value: unknown): unknown[];
3384
+ /**
3385
+ * One generated layer at a set of scales. Returns the SAME object when nothing
3386
+ * reaches it (100 %, unclassified, not a symbol layer, or a size this cannot
3387
+ * multiply), so a standard chart is the generated chart, byte for byte.
3388
+ *
3389
+ * `yieldText` is rule 4, decided by the caller from the layer's position: the
3390
+ * layer is a label placed before the soundings, and some label slider is off
3391
+ * 100 %. Its text then takes no part in placement, whatever its own size.
3392
+ */
3393
+ declare function applyChartSymbolScalesToLayer(layer: StyleLayer, scales: ChartSymbolScales, yieldText?: boolean): StyleLayer;
3394
+ /**
3395
+ * Every layer of a generated style at a set of scales, in draw order — rule 4
3396
+ * reads the order (MapLibre places the TOP of the style first, so "above the
3397
+ * soundings" is "placed before them"). Standard → the same array.
3398
+ */
3399
+ declare function applyChartSymbolScales<L extends StyleLayer>(layers: readonly L[], scales: ChartSymbolScales | undefined, rule?: ChartSoundingsRule): L[];
3400
+ /**
3401
+ * The text labels the zoom split moves below the soundings at these scales,
3402
+ * in draw order — empty when nothing triggers the split
3403
+ * (`labelSlidersOffStandard`: LAND / WATER / DEPTH / ICONS off 100 %, either
3404
+ * way) or the rule does not split. For a client that reorders a live map.
3405
+ */
3406
+ declare function demotedBelowSoundings(layers: readonly StyleLayer[], scales: ChartSymbolScales | undefined, rule?: ChartSoundingsRule): string[];
3407
+ /**
3408
+ * What no slider reaches, and what a slider reaches but cannot multiply —
3409
+ * iOS's `unclassified` / `unscalable`, for a test that fails when CHRT adds a
3410
+ * label class nobody has decided about.
3411
+ */
3412
+ declare function chartSymbolSizingCensus(layers: readonly StyleLayer[]): {
3413
+ unclassified: string[];
3414
+ unscalable: string[];
3415
+ };
3416
+
3221
3417
  /**
3222
3418
  * Dominance fan-out collapse (P8 Phase 3.3 / D4 "axis 1").
3223
3419
  *
@@ -3394,13 +3590,20 @@ interface StyleGeneratorOptions extends BuildSourcesOptions {
3394
3590
  */
3395
3591
  soundingFontWeight?: "regular" | "semibold";
3396
3592
  /**
3397
- * How big the depth figures are drawn — soundings, contour values and the
3398
- * depth beside a rock, wreck or obstruction. "standard" (default) is
3399
- * byte-identical to omitting it; "large" enlarges those labels only, and
3400
- * never their text, colours, sort keys, filters or layer set. See
3401
- * depth-label-size.ts.
3593
+ * CHART SIZING — the five sliders, in percent (50–200; `waypoints` is the
3594
+ * app's and is ignored here). Omitted, or every value 100, is byte-identical
3595
+ * to the style without it. Applied LAST, after the symbol-family rewrite, so
3596
+ * it sizes what the chosen family draws. Never changes a label's text,
3597
+ * colours, sort key, filter, zoom gate or the layer set — see
3598
+ * chart-symbol-sizing.ts.
3599
+ */
3600
+ symbolScales?: ChartSymbolScales;
3601
+ /**
3602
+ * What the labels above the soundings do when LAND, WATER or CHART ICONS is
3603
+ * off 100 %, or DEPTH NUMBERS either way — `CHART_SOUNDINGS_RULE` (the owner's zoom split at 14) when
3604
+ * omitted. Rule 4 (`OUTRANK_LABELS`) is kept for measurement.
3402
3605
  */
3403
- depthLabelSize?: DepthLabelSize;
3606
+ soundingsRule?: ChartSoundingsRule;
3404
3607
  }
3405
3608
  declare function generateStyle(palette?: ColorTableName, opts?: StyleGeneratorOptions & {
3406
3609
  bandFan?: BandFanMode;
@@ -5577,4 +5780,4 @@ declare class Chrt {
5577
5780
  warmTiles(region?: string): Promise<TileTokenResponse>;
5578
5781
  }
5579
5782
 
5580
- export { ALL_NAV_AID_LAYERS, ALL_WATER_BODY_LAYERS, AREA_QUERY_LAYERS, ATON_EXPRESSION_CLASSES, type AheadCoverageCell, type AheadFeatureProperties, type AheadOptions, type AheadResponse, type AlongRouteFeatureProperties, type AlongRouteOptions, type AlongRouteResponse, type AreaInspectResult, type AtlasStyle, type AttachOptions, BAND_CODE_ALIASES, BAND_DRAW_ORDER, BAND_PRIORITY_RANGES, BASE_ATTRIBUTION, BASE_BUNDLE_ATTRIBUTION, BASE_BUNDLE_ID, BASE_BUNDLE_MAXZOOM, BASE_BUNDLE_SCHEMA, BASE_BUNDLE_SOURCE_LAYERS, BASE_CLIENT_RASTER_BEFORE_ID, BASE_MAXZOOM, BASE_MINZOOM, BASE_REGION, type BBox, BRIDGE_QUERY_LAYERS, BUILD_MAXZOOM, BUILD_MINZOOM, BUILD_PARAM, type BandCode, type BandPriorityRange, type BridgeInspectResult, type BuildOfflineStyleOptions, type BuildSourcesOptions, CHART_BAND_CODES, CHART_CASCADE_CODES, CHART_SECTIONS, CHRTRASTER_REF_CROPS, CHRTRASTER_SVGS, CHRT_ATON_COLORS, CHRT_GLYPH_NAMES, CHRT_GLYPH_SVGS, CHRT_ICON_EXPRESSIONS, CHRT_ICON_PREFIX, CHRT_SDF_GLYPHS, CHRT_STYLE_MODES, type CandidateQueryOptions, type CandidatesEventContext, type CellDeletedEvent, type CellDetail, type CellEventData, type CellNewEvent, type CellUpdatedData, type CellUpdatedEvent, type CellsOptions, type CellsResponse, type ChartSection, Chrt, type ChrtConfig, ChrtError, type ChrtStyleMode, type ChrtStyleOptions, type ChrtStyleTheme, type ChrtSymbolSet, type ClickAnchor, ColorTableName, type CoverageOptions, type CoverageResponse, type CoverageRouteCell, type CoverageRouteOptions, type CoverageRouteResponse, type CoverageSource, type CustomStyleConfig, DEFAULT_CLICK_TOLERANCE, DEFAULT_CUSTOM_STYLE_CONFIG, DEFAULT_DEPTH_LABEL_SIZE, 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_LABEL_CLASSES, DEPTH_LABEL_SIZES, DRAPEABLE_LAYER_TYPES, type DecodedAreaFeature, type DecodedBridge, type DecodedNavAid, type DecodedProperty, type DepthLabelSize, 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, 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, LARGE_SOUNDING_PADDING_PX, type LabelBehavior, type LabelConfigOptions, type LabelLayerConfig, type LabelSettings, type LampLayer, type LookupEntry, type MapLibreStyle, type MapboxStyle, type MapboxVectorSource, type MarineAlert, type MarineAlertsOptions, type MarineAlertsResponse, type MarineConditionsObservation, type MarineConditionsOptions, type MarineConditionsResponse, type MarineConditionsSeries, type MarineForecastOptions, type MarineForecastPeriod, type MarineForecastResponse, type MarineSeas, type MarineStation, type MarineSwellTrain, type MarineWind, type MarineZoneRef, NAUTICAL_SYMBOLS, NAV_AID_LAYER_GROUPS, NAV_AID_QUERY_LAYERS, 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, type OfflineBundleResponse, type OfflineDownloadOptions, type OfflineDownloadProgress, type OfflineDownloadResult, OfflineError, type OfflineErrorCode, type OfflineFetchStyleOptions, type OfflineHeartbeatOptions, type OfflineRegionSummary, type OfflineRemoveOptions, OfflineStyleError, type OfflineStylePlatform, type OfflineStyleResponse, PLACENAME_LAND_CLASSES, PLACENAME_SOURCE_LAYER, PLACENAME_WATER_CLASSES, type ParsedSigseqTerms, type PmtilesVectorSource, type Poi, type PoiCoverage, type PoiDataset, type PoiOptions, type PoiResponse, type QueryFeatureProperties, type QueryOptions, type QueryResponse, RASTER_ATON_CLASSES, RASTER_GLYPH_NAMES, RASTER_ICON_PREFIX, RELIEF_ATTRIBUTION, RELIEF_ENCODING, RELIEF_REGION, RELIEF_TILE_SIZE, type ResolvedStyle, type ResolvedTheme, type S101ArtworkProvenance, type S101Feature, S101_AREA_FILL_NAMES, S101_CHART_SECTIONS, S101_FEATURES, S101_ICON_PREFIX, S101_LINE_STYLE_NAMES, S101_NEW_SYMBOLS, S101_NO_OFFICIAL_COUNTERPART, S101_SOURCE_COMMIT, S101_SYMBOL_GROUPS, S101_SYMBOL_NAMES, S52_ATON_LOOKUPS, S52_ATON_LOOKUPS_PAPER, S52_DRAW_ORDER, S52_LOOKUP, S52_PATTERN_SPRITE_PREFIX, SIGPER_TOLERANCE_SECONDS, SIGSEQ_MAX_TERMS, SOUNDING_LAYERS, SYMBOL_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, type WaterBodySettings, WeatherEndpoint, type WeatherReading, type WebhookEvent, type WebhookEventType, type WebhookPayload, applyBaseBundle, applyChrtSymbolSet, applyColorTheme, applyCustomStyleSettings, applyDepthLabelSize, 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, chrtAtonTintExpression, chrtHouseColor, chrtLightTintExpression, collectCandidates, collectClickCandidates, combineWithBandFilter, contrastRatio, daymarkColor, decimateFeatures, decodeAreaFeatureProps, decodeBridgeProps, decodeCandidate, decodeNavAidProps, depareColor, depareFillExpression, depthAreaClassLayerId, depthAreaSplitIds, deriveMarinerName, drapeHalves, drapedFirst, extractNavAidDesignation, featureIdentity, generateCustomStyle, generateSpriteManifest, generateSpriteSheet, generateStyle, generateStyleJSON, getAvailableLineSymbols, getAvailablePatterns, getAvailablePointSymbols, getCollisionSettings, getDrawPriority, getGridSizeForZoom, getIconExpression, getLabelBehavior, getLabelConfig, getLabelPriority, getLookupEntry, getMaxCellsForZoom, getOrderedClasses, getRasterSvg, getS52SvgString, getS52SymbolStats, getStyleStats, getSymbolSvgString, getThemedS101Svg, getThemedS52Svg, getTopmarkMeaning, hazardColor, hazardFillExpression, isDepthAreaClassLayerId, isDrapeable, isLabelLayerVisible, isMapLive, isNavAidLayer, isNavAidLayerVisible, isSoundingLayerVisible, isVisibleInMode, isWaterBodyLayerVisible, labelSortKey, lampRhythmColour, lampRhythmOpacity, lateralColor, lateralFillExpression, lightColor, lightFillExpression, lightsIconExpression, normalizeStyleMode, normalizeTheme, opaqueSplitBaseOf, paginate, parseDepthLabelSize, parseListCodes, parseSigseqTerms, parseWebhook, patternSpriteId, preprocessLights, preprocessNavAids, preprocessSoundings, preprocessWaterBodies, rasterAtonIconExpression, relativeLuminance, resolveCustomTheme, resolveRasterImage, resolveS101Color, resolveStyle, resolveTargetClass, rhythmProperties, s101ArtworkProvenance, safetyContourValues, sanitizeCustomStyleConfig, scaleLinearLight, scaleSizeValue, scaminToMinZoom, sectorLimitToArcBearing, splitOpaqueDepthAreas, styleModeBand, terrainStackCount, themeChrtGlyph, tileTemplate, uncoveredSectorArcs, withinBboxFilter, worldMinusBboxPolygon };
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 };