@chrtco/sdk 0.10.55 → 0.10.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -8
- package/README.md +31 -10
- package/dist/atlas/browser.cjs +5 -21
- package/dist/atlas/browser.cjs.map +1 -1
- package/dist/atlas/browser.js +5 -21
- package/dist/atlas/browser.js.map +1 -1
- package/dist/index.cjs +347 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2467 -2173
- package/dist/index.d.ts +2467 -2173
- package/dist/index.js +326 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -42,8 +42,11 @@ __export(index_exports, {
|
|
|
42
42
|
BUILD_MAXZOOM: () => BUILD_MAXZOOM,
|
|
43
43
|
BUILD_MINZOOM: () => BUILD_MINZOOM,
|
|
44
44
|
BUILD_PARAM: () => BUILD_PARAM,
|
|
45
|
+
CHART_ARCHIVE_MAXZOOM: () => CHART_ARCHIVE_MAXZOOM,
|
|
45
46
|
CHART_BAND_CODES: () => CHART_BAND_CODES,
|
|
46
47
|
CHART_CASCADE_CODES: () => CHART_CASCADE_CODES,
|
|
48
|
+
CHART_LOCK_BANDS: () => CHART_LOCK_BANDS,
|
|
49
|
+
CHART_LOCK_PARAMS: () => CHART_LOCK_PARAMS,
|
|
47
50
|
CHART_LOOKS: () => CHART_LOOKS,
|
|
48
51
|
CHART_SECTIONS: () => CHART_SECTIONS,
|
|
49
52
|
CHART_SOUNDINGS_RULE: () => CHART_SOUNDINGS_RULE,
|
|
@@ -72,6 +75,7 @@ __export(index_exports, {
|
|
|
72
75
|
DANGER_DEPTH_PLACER_ID: () => DANGER_DEPTH_PLACER_ID,
|
|
73
76
|
DANGER_DEPTH_PLACER_LAYOUT: () => DANGER_DEPTH_PLACER_LAYOUT,
|
|
74
77
|
DANGER_DEPTH_VISIBLE_LAYOUT: () => DANGER_DEPTH_VISIBLE_LAYOUT,
|
|
78
|
+
DEFAULT_CHART_LOCK_BAND: () => DEFAULT_CHART_LOCK_BAND,
|
|
75
79
|
DEFAULT_CLICK_TOLERANCE: () => DEFAULT_CLICK_TOLERANCE,
|
|
76
80
|
DEFAULT_CUSTOM_STYLE_CONFIG: () => DEFAULT_CUSTOM_STYLE_CONFIG,
|
|
77
81
|
DEFAULT_INSPECT_CLASS_RANK: () => DEFAULT_INSPECT_CLASS_RANK,
|
|
@@ -93,6 +97,7 @@ __export(index_exports, {
|
|
|
93
97
|
EINK_HATCH_PATTERN: () => EINK_HATCH_PATTERN,
|
|
94
98
|
EINK_MONO_GREYS: () => EINK_MONO_GREYS,
|
|
95
99
|
ENGRAVED_LOOKS: () => ENGRAVED_LOOKS,
|
|
100
|
+
FINER_DATA_DECISION_OFFSET: () => FINER_DATA_DECISION_OFFSET,
|
|
96
101
|
HAZARD_LABEL_PRIORITY: () => HAZARD_LABEL_PRIORITY,
|
|
97
102
|
INSPECT_CLASS_RANK: () => INSPECT_CLASS_RANK,
|
|
98
103
|
INSPECT_RANK_DEVIATIONS: () => INSPECT_RANK_DEVIATIONS,
|
|
@@ -120,6 +125,7 @@ __export(index_exports, {
|
|
|
120
125
|
LOOK_TONES: () => LOOK_TONES,
|
|
121
126
|
LOOK_WATERLINES_SOURCE: () => LOOK_WATERLINES_SOURCE,
|
|
122
127
|
MAPLIBRE_DEFAULT_TEXT_PADDING_PX: () => MAPLIBRE_DEFAULT_TEXT_PADDING_PX,
|
|
128
|
+
MAX_REDUCTION_LEVELS: () => MAX_REDUCTION_LEVELS,
|
|
123
129
|
NAUTICAL_SYMBOLS: () => NAUTICAL_SYMBOLS,
|
|
124
130
|
NAV_AID_LAYER_GROUPS: () => NAV_AID_LAYER_GROUPS,
|
|
125
131
|
NAV_AID_QUERY_LAYERS: () => NAV_AID_QUERY_LAYERS,
|
|
@@ -137,6 +143,7 @@ __export(index_exports, {
|
|
|
137
143
|
RASTER_ATON_CLASSES: () => RASTER_ATON_CLASSES,
|
|
138
144
|
RASTER_GLYPH_NAMES: () => RASTER_GLYPH_NAMES,
|
|
139
145
|
RASTER_ICON_PREFIX: () => RASTER_ICON_PREFIX,
|
|
146
|
+
REDUCED_SIZE_PROPERTIES: () => REDUCED_SIZE_PROPERTIES,
|
|
140
147
|
RELIEF_ATTRIBUTION: () => RELIEF_ATTRIBUTION,
|
|
141
148
|
RELIEF_ENCODING: () => RELIEF_ENCODING,
|
|
142
149
|
RELIEF_REGION: () => RELIEF_REGION,
|
|
@@ -232,6 +239,14 @@ __export(index_exports, {
|
|
|
232
239
|
capLuminance: () => capLuminance,
|
|
233
240
|
cellBandCharacters: () => cellBandCharacters,
|
|
234
241
|
cellBandMatch: () => cellBandMatch,
|
|
242
|
+
chartLockBandInfo: () => chartLockBandInfo,
|
|
243
|
+
chartLockDecisionZoom: () => chartLockDecisionZoom,
|
|
244
|
+
chartLockFloor: () => chartLockFloor,
|
|
245
|
+
chartLockGeneratorOptions: () => chartLockGeneratorOptions,
|
|
246
|
+
chartLockMinZoom: () => chartLockMinZoom,
|
|
247
|
+
chartLockParam: () => chartLockParam,
|
|
248
|
+
chartLockSourceMaxzoom: () => chartLockSourceMaxzoom,
|
|
249
|
+
chartLockStyleMode: () => chartLockStyleMode,
|
|
235
250
|
chartSymbolSizingCensus: () => chartSymbolSizingCensus,
|
|
236
251
|
chrtAtonTintExpression: () => chrtAtonTintExpression,
|
|
237
252
|
chrtHouseColor: () => chrtHouseColor,
|
|
@@ -271,6 +286,7 @@ __export(index_exports, {
|
|
|
271
286
|
extinguishedLightExpression: () => extinguishedLightExpression,
|
|
272
287
|
extractNavAidDesignation: () => extractNavAidDesignation,
|
|
273
288
|
featureIdentity: () => featureIdentity,
|
|
289
|
+
filterAtFloor: () => filterAtFloor,
|
|
274
290
|
formatDayboard: () => formatDayboard,
|
|
275
291
|
formatLightDescription: () => formatLightDescription,
|
|
276
292
|
formatLightRhythm: () => formatLightRhythm,
|
|
@@ -307,6 +323,7 @@ __export(index_exports, {
|
|
|
307
323
|
hazardFillExpression: () => hazardFillExpression,
|
|
308
324
|
iconExpressionForFamily: () => iconExpressionForFamily,
|
|
309
325
|
iconSliderFor: () => iconSliderFor,
|
|
326
|
+
isChartLockBand: () => isChartLockBand,
|
|
310
327
|
isDangerDepthPlacer: () => isDangerDepthPlacer,
|
|
311
328
|
isDepthAreaClassLayerId: () => isDepthAreaClassLayerId,
|
|
312
329
|
isDrapeable: () => isDrapeable,
|
|
@@ -345,6 +362,7 @@ __export(index_exports, {
|
|
|
345
362
|
normalizeTheme: () => normalizeTheme,
|
|
346
363
|
opaqueSplitBaseOf: () => opaqueSplitBaseOf,
|
|
347
364
|
paginate: () => paginate,
|
|
365
|
+
parseChartLock: () => parseChartLock,
|
|
348
366
|
parseChartLook: () => parseChartLook,
|
|
349
367
|
parseListCodes: () => parseListCodes,
|
|
350
368
|
parseSigseqTerms: () => parseSigseqTerms,
|
|
@@ -374,6 +392,7 @@ __export(index_exports, {
|
|
|
374
392
|
seafloorLayers: () => seafloorLayers,
|
|
375
393
|
sectorLimitToArcBearing: () => sectorLimitToArcBearing,
|
|
376
394
|
semiboldFontStack: () => semiboldFontStack,
|
|
395
|
+
servedChartLockMetadata: () => servedChartLockMetadata,
|
|
377
396
|
snapChartSymbolScale: () => snapChartSymbolScale,
|
|
378
397
|
soundingPadding: () => soundingPadding,
|
|
379
398
|
soundingPaddingValue: () => soundingPaddingValue,
|
|
@@ -386,8 +405,10 @@ __export(index_exports, {
|
|
|
386
405
|
themeChrtGlyph: () => themeChrtGlyph,
|
|
387
406
|
tileTemplate: () => tileTemplate,
|
|
388
407
|
uncoveredSectorArcs: () => uncoveredSectorArcs,
|
|
408
|
+
withChartReduction: () => withChartReduction,
|
|
389
409
|
withClassicMarks: () => withClassicMarks,
|
|
390
410
|
withLook: () => withLook,
|
|
411
|
+
withServedChartLock: () => withServedChartLock,
|
|
391
412
|
withWaterLines: () => withWaterLines,
|
|
392
413
|
withinBboxFilter: () => withinBboxFilter,
|
|
393
414
|
worldMinusBboxPolygon: () => worldMinusBboxPolygon
|
|
@@ -861,7 +882,9 @@ var TilesEndpoint = class {
|
|
|
861
882
|
const params = new URLSearchParams();
|
|
862
883
|
if (opts.theme) params.set("theme", opts.theme);
|
|
863
884
|
if (opts.symbols) params.set("symbols", opts.symbols);
|
|
885
|
+
if (opts.look) params.set("look", opts.look);
|
|
864
886
|
if (opts.mode) params.set("mode", opts.mode);
|
|
887
|
+
if (opts.lock) params.set("lock", opts.lock);
|
|
865
888
|
if (opts.land) params.set("land", "1");
|
|
866
889
|
if (opts.relief) params.set("relief", "1");
|
|
867
890
|
if (opts.units === "imperial") params.set("units", "imperial");
|
|
@@ -32332,8 +32355,11 @@ function washTint(cls, id, tints) {
|
|
|
32332
32355
|
if (cls === "LAKARE" || id === "chrtland-water" || id === "paper-base-lakes") return tints.lake;
|
|
32333
32356
|
return null;
|
|
32334
32357
|
}
|
|
32358
|
+
function lookSprite(style, look) {
|
|
32359
|
+
return typeof style.sprite === "string" ? { sprite: style.sprite.replace(/-day$/, `-look_${look}`) } : {};
|
|
32360
|
+
}
|
|
32335
32361
|
function withLook(style, look, opts = {}) {
|
|
32336
|
-
if (look === "paper") return withClassic(style);
|
|
32362
|
+
if (look === "paper") return { ...withClassic(style), ...lookSprite(style, look) };
|
|
32337
32363
|
const tone = LOOK_TONES[look];
|
|
32338
32364
|
const ink = tone.ink;
|
|
32339
32365
|
const tints = look === "handcolored" && opts.tints !== false ? WASH_TINTS : null;
|
|
@@ -32433,10 +32459,7 @@ function withLook(style, look, opts = {}) {
|
|
|
32433
32459
|
});
|
|
32434
32460
|
return {
|
|
32435
32461
|
...style,
|
|
32436
|
-
|
|
32437
|
-
// both looks: the day sheet's magenta anchors and light flares read as a
|
|
32438
|
-
// modern chart under the wash.
|
|
32439
|
-
...typeof style.sprite === "string" ? { sprite: style.sprite.replace(/-day$/, "-eink_mono") } : {},
|
|
32462
|
+
...lookSprite(style, look),
|
|
32440
32463
|
sources: {
|
|
32441
32464
|
...style.sources,
|
|
32442
32465
|
[LOOK_WATERLINES_SOURCE]: { type: "geojson", data: { type: "FeatureCollection", features: [] } }
|
|
@@ -34041,8 +34064,8 @@ var SYMBOL_SET_LABELS = {
|
|
|
34041
34064
|
var SPRITE_SHEET_FAMILY = {
|
|
34042
34065
|
s52: "s52",
|
|
34043
34066
|
chrt: "chrt",
|
|
34044
|
-
int1: "
|
|
34045
|
-
uschart1: "
|
|
34067
|
+
int1: "int1",
|
|
34068
|
+
uschart1: "uschart1"
|
|
34046
34069
|
};
|
|
34047
34070
|
function applySymbolFamily(style, family, palette) {
|
|
34048
34071
|
switch (family) {
|
|
@@ -35265,7 +35288,7 @@ function applyCustomStyleSettings(style, config) {
|
|
|
35265
35288
|
}
|
|
35266
35289
|
function generateCustomStyle(config, opts = {}) {
|
|
35267
35290
|
const { theme, ...generatorOpts } = opts;
|
|
35268
|
-
const { palette, themeFellBack } = resolveCustomTheme(config, theme ?? null);
|
|
35291
|
+
const { palette, themeFellBack } = generatorOpts.look !== void 0 ? { palette: "DAY", themeFellBack: theme != null && theme !== "DAY" } : resolveCustomTheme(config, theme ?? null);
|
|
35269
35292
|
const style = generateStyle(palette, {
|
|
35270
35293
|
...generatorOpts,
|
|
35271
35294
|
safetyContour: config.sounding_settings.safetyContour,
|
|
@@ -35339,6 +35362,301 @@ function splitOpaqueDepthAreas(layers) {
|
|
|
35339
35362
|
return out;
|
|
35340
35363
|
}
|
|
35341
35364
|
|
|
35365
|
+
// src/atlas/chart-reduction.ts
|
|
35366
|
+
var CHART_LOCK_BANDS = [
|
|
35367
|
+
{ band: 1, name: "Overview", floor: 5 },
|
|
35368
|
+
{ band: 2, name: "General", floor: 7 },
|
|
35369
|
+
{ band: 3, name: "Coastal", floor: 9 },
|
|
35370
|
+
{ band: 4, name: "Approach", floor: 11 },
|
|
35371
|
+
{ band: 5, name: "Harbor", floor: 13 },
|
|
35372
|
+
{ band: 6, name: "Berthing", floor: 14 }
|
|
35373
|
+
];
|
|
35374
|
+
var DEFAULT_CHART_LOCK_BAND = 5;
|
|
35375
|
+
var MAX_REDUCTION_LEVELS = 2;
|
|
35376
|
+
var CHART_ARCHIVE_MAXZOOM = 14;
|
|
35377
|
+
function isChartLockBand(v) {
|
|
35378
|
+
return v === 1 || v === 2 || v === 3 || v === 4 || v === 5 || v === 6;
|
|
35379
|
+
}
|
|
35380
|
+
function chartLockBandInfo(band) {
|
|
35381
|
+
return CHART_LOCK_BANDS[band - 1];
|
|
35382
|
+
}
|
|
35383
|
+
function chartLockFloor(band) {
|
|
35384
|
+
return chartLockBandInfo(band).floor;
|
|
35385
|
+
}
|
|
35386
|
+
function chartLockMinZoom(band) {
|
|
35387
|
+
return chartLockFloor(band) - MAX_REDUCTION_LEVELS;
|
|
35388
|
+
}
|
|
35389
|
+
function chartLockStyleMode(band) {
|
|
35390
|
+
const name = chartLockBandInfo(band).name;
|
|
35391
|
+
return { band: name === "Berthing" ? "Harbor" : name, finestBand: String(band) };
|
|
35392
|
+
}
|
|
35393
|
+
var FINER_DATA_DECISION_OFFSET = 1e-3;
|
|
35394
|
+
function chartLockDecisionZoom(band, bandOnly) {
|
|
35395
|
+
const floor = chartLockFloor(band);
|
|
35396
|
+
return bandOnly ? floor : floor - FINER_DATA_DECISION_OFFSET;
|
|
35397
|
+
}
|
|
35398
|
+
function chartLockSourceMaxzoom(band, archiveMax = CHART_ARCHIVE_MAXZOOM) {
|
|
35399
|
+
return Math.min(archiveMax, chartLockFloor(band));
|
|
35400
|
+
}
|
|
35401
|
+
var REDUCED_SIZE_PROPERTIES = /* @__PURE__ */ new Set([
|
|
35402
|
+
"text-size",
|
|
35403
|
+
"icon-size",
|
|
35404
|
+
"text-padding",
|
|
35405
|
+
"icon-padding",
|
|
35406
|
+
"icon-text-fit-padding",
|
|
35407
|
+
"symbol-spacing",
|
|
35408
|
+
"line-width",
|
|
35409
|
+
"line-gap-width",
|
|
35410
|
+
"line-offset",
|
|
35411
|
+
"line-blur",
|
|
35412
|
+
"circle-radius",
|
|
35413
|
+
"circle-stroke-width",
|
|
35414
|
+
"text-halo-width",
|
|
35415
|
+
"text-halo-blur",
|
|
35416
|
+
"icon-halo-width",
|
|
35417
|
+
"icon-halo-blur",
|
|
35418
|
+
"text-translate",
|
|
35419
|
+
"icon-translate",
|
|
35420
|
+
"line-translate",
|
|
35421
|
+
"fill-translate",
|
|
35422
|
+
"circle-translate"
|
|
35423
|
+
]);
|
|
35424
|
+
var REDUCTION_STOPS_PER_LEVEL = 4;
|
|
35425
|
+
var STEP_RAMP = 1e-3;
|
|
35426
|
+
var isZoom = (e) => Array.isArray(e) && e.length === 1 && e[0] === "zoom";
|
|
35427
|
+
function round2(n) {
|
|
35428
|
+
return Math.round(n * 1e4) / 1e4;
|
|
35429
|
+
}
|
|
35430
|
+
function mentionsZoom2(v) {
|
|
35431
|
+
if (Array.isArray(v)) {
|
|
35432
|
+
if (v[0] === "literal") return false;
|
|
35433
|
+
if (isZoom(v)) return true;
|
|
35434
|
+
return v.some(mentionsZoom2);
|
|
35435
|
+
}
|
|
35436
|
+
if (v !== null && typeof v === "object") return Object.values(v).some(mentionsZoom2);
|
|
35437
|
+
return false;
|
|
35438
|
+
}
|
|
35439
|
+
function isNumArray(v) {
|
|
35440
|
+
return Array.isArray(v) && v.length > 0 && v.every((n) => typeof n === "number");
|
|
35441
|
+
}
|
|
35442
|
+
function numArrayOf(v) {
|
|
35443
|
+
if (isNumArray(v)) return v;
|
|
35444
|
+
if (Array.isArray(v) && v.length === 2 && v[0] === "literal" && isNumArray(v[1])) return v[1];
|
|
35445
|
+
return null;
|
|
35446
|
+
}
|
|
35447
|
+
function asOutput(v) {
|
|
35448
|
+
return isNumArray(v) ? ["literal", v] : v;
|
|
35449
|
+
}
|
|
35450
|
+
function zoomCurveOf(v) {
|
|
35451
|
+
if (Array.isArray(v)) {
|
|
35452
|
+
if (v[0] === "interpolate" && isZoom(v[2])) {
|
|
35453
|
+
const stops = [];
|
|
35454
|
+
for (let i = 3; i + 1 < v.length; i += 2) {
|
|
35455
|
+
if (typeof v[i] !== "number") return null;
|
|
35456
|
+
stops.push([v[i], v[i + 1]]);
|
|
35457
|
+
}
|
|
35458
|
+
return stops.length > 0 ? { kind: "interpolate", type: v[1], first: void 0, stops } : null;
|
|
35459
|
+
}
|
|
35460
|
+
if (v[0] === "step" && isZoom(v[1])) {
|
|
35461
|
+
const stops = [];
|
|
35462
|
+
for (let i = 3; i + 1 < v.length; i += 2) {
|
|
35463
|
+
if (typeof v[i] !== "number") return null;
|
|
35464
|
+
stops.push([v[i], v[i + 1]]);
|
|
35465
|
+
}
|
|
35466
|
+
return { kind: "step", type: null, first: v[2], stops };
|
|
35467
|
+
}
|
|
35468
|
+
return null;
|
|
35469
|
+
}
|
|
35470
|
+
if (v !== null && typeof v === "object") {
|
|
35471
|
+
const f = v;
|
|
35472
|
+
if (f.property !== void 0 || !Array.isArray(f.stops) || f.stops.length === 0) return null;
|
|
35473
|
+
const stops = [];
|
|
35474
|
+
for (const s of f.stops) {
|
|
35475
|
+
if (!Array.isArray(s) || s.length !== 2 || typeof s[0] !== "number") return null;
|
|
35476
|
+
stops.push([s[0], s[1]]);
|
|
35477
|
+
}
|
|
35478
|
+
if (f.type === "interval") return { kind: "step", type: null, first: stops[0][1], stops: stops.slice(1) };
|
|
35479
|
+
if (f.type !== void 0 && f.type !== "exponential") return null;
|
|
35480
|
+
const base = typeof f.base === "number" ? f.base : 1;
|
|
35481
|
+
return { kind: "interpolate", type: base === 1 ? ["linear"] : ["exponential", base], first: void 0, stops };
|
|
35482
|
+
}
|
|
35483
|
+
return null;
|
|
35484
|
+
}
|
|
35485
|
+
function interpolationT(type, z, z0, z1) {
|
|
35486
|
+
if (Array.isArray(type) && type[0] === "exponential" && typeof type[1] === "number" && type[1] !== 1) {
|
|
35487
|
+
const b = type[1];
|
|
35488
|
+
return (b ** (z - z0) - 1) / (b ** (z1 - z0) - 1);
|
|
35489
|
+
}
|
|
35490
|
+
return (z - z0) / (z1 - z0);
|
|
35491
|
+
}
|
|
35492
|
+
function blend(a, b, t, numeric) {
|
|
35493
|
+
if (t <= 0) return a;
|
|
35494
|
+
if (t >= 1) return b;
|
|
35495
|
+
if (typeof a === "number" && typeof b === "number") return round2(a + (b - a) * t);
|
|
35496
|
+
const aa = numArrayOf(a);
|
|
35497
|
+
const bb = numArrayOf(b);
|
|
35498
|
+
if (aa && bb) return aa.length === bb.length ? aa.map((x, i) => round2(x + (bb[i] - x) * t)) : void 0;
|
|
35499
|
+
if (numeric && !aa && !bb && (typeof a === "number" || Array.isArray(a)) && (typeof b === "number" || Array.isArray(b))) {
|
|
35500
|
+
return ["+", ["*", a, round2(1 - t)], ["*", b, round2(t)]];
|
|
35501
|
+
}
|
|
35502
|
+
return void 0;
|
|
35503
|
+
}
|
|
35504
|
+
function valueAt(c, z, numeric) {
|
|
35505
|
+
if (c.kind === "step") {
|
|
35506
|
+
let out = c.first;
|
|
35507
|
+
for (const [sz, o] of c.stops) if (sz <= z) out = o;
|
|
35508
|
+
return out;
|
|
35509
|
+
}
|
|
35510
|
+
const s = c.stops;
|
|
35511
|
+
if (z <= s[0][0]) return s[0][1];
|
|
35512
|
+
if (z >= s[s.length - 1][0]) return s[s.length - 1][1];
|
|
35513
|
+
for (let j = 0; j + 1 < s.length; j++) {
|
|
35514
|
+
const [z0, o0] = s[j];
|
|
35515
|
+
const [z1, o1] = s[j + 1];
|
|
35516
|
+
if (z === z0) return o0;
|
|
35517
|
+
if (z0 < z && z < z1) return blend(o0, o1, interpolationT(c.type, z, z0, z1), numeric);
|
|
35518
|
+
}
|
|
35519
|
+
return void 0;
|
|
35520
|
+
}
|
|
35521
|
+
function scaled3(v, f) {
|
|
35522
|
+
if (typeof v === "number") return round2(v * f);
|
|
35523
|
+
const arr = numArrayOf(v);
|
|
35524
|
+
if (arr) return arr.map((n) => round2(n * f));
|
|
35525
|
+
if (Array.isArray(v) && typeof v[0] === "string") return ["*", v, round2(f)];
|
|
35526
|
+
return void 0;
|
|
35527
|
+
}
|
|
35528
|
+
function reducedSize(value, floor, levels) {
|
|
35529
|
+
const curve = zoomCurveOf(value);
|
|
35530
|
+
if (curve === null && mentionsZoom2(value)) return void 0;
|
|
35531
|
+
const atFloor = curve ? valueAt(curve, floor, true) : value;
|
|
35532
|
+
if (atFloor === void 0) return void 0;
|
|
35533
|
+
const out = [];
|
|
35534
|
+
for (let i = levels * REDUCTION_STOPS_PER_LEVEL; i >= 1; i--) {
|
|
35535
|
+
const dz = i / REDUCTION_STOPS_PER_LEVEL;
|
|
35536
|
+
const v = scaled3(atFloor, 2 ** -dz);
|
|
35537
|
+
if (v === void 0) return void 0;
|
|
35538
|
+
out.push(round2(floor - dz), asOutput(v));
|
|
35539
|
+
}
|
|
35540
|
+
out.push(floor, asOutput(atFloor));
|
|
35541
|
+
if (curve === null) return ["interpolate", ["linear"], ["zoom"], ...out];
|
|
35542
|
+
if (curve.kind === "interpolate") {
|
|
35543
|
+
for (const [z, o] of curve.stops) if (z > floor) out.push(z, o);
|
|
35544
|
+
return ["interpolate", curve.type, ["zoom"], ...out];
|
|
35545
|
+
}
|
|
35546
|
+
let prev = atFloor;
|
|
35547
|
+
for (const [z, o] of curve.stops) {
|
|
35548
|
+
if (z <= floor) continue;
|
|
35549
|
+
if (z - STEP_RAMP > floor) out.push(z - STEP_RAMP, asOutput(prev));
|
|
35550
|
+
out.push(z, asOutput(o));
|
|
35551
|
+
prev = o;
|
|
35552
|
+
}
|
|
35553
|
+
return ["interpolate", ["linear"], ["zoom"], ...out];
|
|
35554
|
+
}
|
|
35555
|
+
function heldAtFloor(value, floor) {
|
|
35556
|
+
const curve = zoomCurveOf(value);
|
|
35557
|
+
if (curve === null) return void 0;
|
|
35558
|
+
const atFloor = valueAt(curve, floor, false);
|
|
35559
|
+
if (atFloor === void 0) return void 0;
|
|
35560
|
+
const above = curve.stops.filter(([z]) => z > floor).flatMap(([z, o]) => [z, o]);
|
|
35561
|
+
if (above.length === 0) return atFloor;
|
|
35562
|
+
return curve.kind === "step" ? ["step", ["zoom"], atFloor, ...above] : ["interpolate", curve.type, ["zoom"], floor, asOutput(atFloor), ...above];
|
|
35563
|
+
}
|
|
35564
|
+
function filterAtFloor(filter, floor) {
|
|
35565
|
+
if (!Array.isArray(filter)) return filter;
|
|
35566
|
+
if (filter[0] === "literal") return filter;
|
|
35567
|
+
if (isZoom(filter)) return ["max", ["zoom"], floor];
|
|
35568
|
+
return filter.map((e) => filterAtFloor(e, floor));
|
|
35569
|
+
}
|
|
35570
|
+
function propsReduced(props, floor, decideAt, levels) {
|
|
35571
|
+
if (!props) return props;
|
|
35572
|
+
let next = null;
|
|
35573
|
+
for (const [name, value] of Object.entries(props)) {
|
|
35574
|
+
if (name === "visibility") continue;
|
|
35575
|
+
const moved = REDUCED_SIZE_PROPERTIES.has(name) ? reducedSize(value, floor, levels) : heldAtFloor(value, decideAt);
|
|
35576
|
+
if (moved === void 0) continue;
|
|
35577
|
+
next ??= { ...props };
|
|
35578
|
+
next[name] = moved;
|
|
35579
|
+
}
|
|
35580
|
+
return next ?? props;
|
|
35581
|
+
}
|
|
35582
|
+
function withChartReduction(layers, floor, options = {}) {
|
|
35583
|
+
const levels = options.levels ?? MAX_REDUCTION_LEVELS;
|
|
35584
|
+
const at = Math.min(floor, options.decideAt ?? floor);
|
|
35585
|
+
const lo = floor - levels;
|
|
35586
|
+
return layers.map((layer) => {
|
|
35587
|
+
const next = { ...layer };
|
|
35588
|
+
const min = layer.minzoom ?? 0;
|
|
35589
|
+
const max = layer.maxzoom ?? 24;
|
|
35590
|
+
if (min <= at && at < max) {
|
|
35591
|
+
if (min > lo) next.minzoom = lo;
|
|
35592
|
+
} else if (max <= at) {
|
|
35593
|
+
next.maxzoom = Math.max(min, Math.min(max, lo));
|
|
35594
|
+
}
|
|
35595
|
+
if (layer.filter !== void 0) next.filter = filterAtFloor(layer.filter, at);
|
|
35596
|
+
const paint = propsReduced(layer.paint, floor, at, levels);
|
|
35597
|
+
if (paint !== void 0) next.paint = paint;
|
|
35598
|
+
const layout = propsReduced(layer.layout, floor, at, levels);
|
|
35599
|
+
if (layout !== void 0) next.layout = layout;
|
|
35600
|
+
return next;
|
|
35601
|
+
});
|
|
35602
|
+
}
|
|
35603
|
+
|
|
35604
|
+
// src/atlas/served-chart-lock.ts
|
|
35605
|
+
var ONLY_SUFFIX = ":only";
|
|
35606
|
+
var CHART_LOCK_PARAMS = CHART_LOCK_BANDS.flatMap(({ name }) => {
|
|
35607
|
+
const band = name.toLowerCase();
|
|
35608
|
+
return [band, `${band}${ONLY_SUFFIX}`];
|
|
35609
|
+
});
|
|
35610
|
+
function chartLockParam(lock) {
|
|
35611
|
+
const band = chartLockBandInfo(lock.band).name.toLowerCase();
|
|
35612
|
+
return lock.bandOnly ? `${band}${ONLY_SUFFIX}` : band;
|
|
35613
|
+
}
|
|
35614
|
+
function parseChartLock(raw) {
|
|
35615
|
+
const lower = raw.toLowerCase();
|
|
35616
|
+
const bandOnly = lower.endsWith(ONLY_SUFFIX);
|
|
35617
|
+
const name = bandOnly ? lower.slice(0, -ONLY_SUFFIX.length) : lower;
|
|
35618
|
+
const info = CHART_LOCK_BANDS.find((b) => b.name.toLowerCase() === name);
|
|
35619
|
+
return info ? { band: info.band, bandOnly } : null;
|
|
35620
|
+
}
|
|
35621
|
+
function chartLockGeneratorOptions(lock) {
|
|
35622
|
+
return lock?.bandOnly ? { chartMode: chartLockStyleMode(lock.band) } : {};
|
|
35623
|
+
}
|
|
35624
|
+
function servedChartLockMetadata(lock) {
|
|
35625
|
+
const info = chartLockBandInfo(lock.band);
|
|
35626
|
+
return {
|
|
35627
|
+
"chrt:lock": chartLockParam(lock),
|
|
35628
|
+
"chrt:lock-band": info.name,
|
|
35629
|
+
"chrt:lock-floor": info.floor,
|
|
35630
|
+
"chrt:lock-min-zoom": chartLockMinZoom(lock.band),
|
|
35631
|
+
"chrt:lock-band-only": lock.bandOnly
|
|
35632
|
+
};
|
|
35633
|
+
}
|
|
35634
|
+
function withServedChartLock(style, lock, chartSource) {
|
|
35635
|
+
const info = chartLockBandInfo(lock.band);
|
|
35636
|
+
const param = chartLockParam(lock);
|
|
35637
|
+
const layers = withChartReduction(style.layers, info.floor, {
|
|
35638
|
+
decideAt: chartLockDecisionZoom(lock.band, lock.bandOnly)
|
|
35639
|
+
});
|
|
35640
|
+
let sources = style.sources;
|
|
35641
|
+
const chart = style.sources[chartSource];
|
|
35642
|
+
if (lock.bandOnly && chart !== null && typeof chart === "object") {
|
|
35643
|
+
const current = chart.maxzoom;
|
|
35644
|
+
const maxzoom = chartLockSourceMaxzoom(lock.band, typeof current === "number" ? current : CHART_ARCHIVE_MAXZOOM);
|
|
35645
|
+
sources = { ...style.sources, [chartSource]: { ...chart, maxzoom } };
|
|
35646
|
+
}
|
|
35647
|
+
return {
|
|
35648
|
+
...style,
|
|
35649
|
+
name: `${style.name.replace(/ — chart:[A-Za-z]+$/, "")} \u2014 lock:${param}`,
|
|
35650
|
+
metadata: {
|
|
35651
|
+
...style.metadata,
|
|
35652
|
+
"chrt:render-mode": "continuous",
|
|
35653
|
+
...servedChartLockMetadata(lock)
|
|
35654
|
+
},
|
|
35655
|
+
sources,
|
|
35656
|
+
layers
|
|
35657
|
+
};
|
|
35658
|
+
}
|
|
35659
|
+
|
|
35342
35660
|
// src/pagination.ts
|
|
35343
35661
|
async function* paginate(fetchPage, getItems, getTotalCount, options) {
|
|
35344
35662
|
const pageSize = options?.pageSize ?? 100;
|
|
@@ -35785,8 +36103,11 @@ var Chrt = class {
|
|
|
35785
36103
|
BUILD_MAXZOOM,
|
|
35786
36104
|
BUILD_MINZOOM,
|
|
35787
36105
|
BUILD_PARAM,
|
|
36106
|
+
CHART_ARCHIVE_MAXZOOM,
|
|
35788
36107
|
CHART_BAND_CODES,
|
|
35789
36108
|
CHART_CASCADE_CODES,
|
|
36109
|
+
CHART_LOCK_BANDS,
|
|
36110
|
+
CHART_LOCK_PARAMS,
|
|
35790
36111
|
CHART_LOOKS,
|
|
35791
36112
|
CHART_SECTIONS,
|
|
35792
36113
|
CHART_SOUNDINGS_RULE,
|
|
@@ -35815,6 +36136,7 @@ var Chrt = class {
|
|
|
35815
36136
|
DANGER_DEPTH_PLACER_ID,
|
|
35816
36137
|
DANGER_DEPTH_PLACER_LAYOUT,
|
|
35817
36138
|
DANGER_DEPTH_VISIBLE_LAYOUT,
|
|
36139
|
+
DEFAULT_CHART_LOCK_BAND,
|
|
35818
36140
|
DEFAULT_CLICK_TOLERANCE,
|
|
35819
36141
|
DEFAULT_CUSTOM_STYLE_CONFIG,
|
|
35820
36142
|
DEFAULT_INSPECT_CLASS_RANK,
|
|
@@ -35836,6 +36158,7 @@ var Chrt = class {
|
|
|
35836
36158
|
EINK_HATCH_PATTERN,
|
|
35837
36159
|
EINK_MONO_GREYS,
|
|
35838
36160
|
ENGRAVED_LOOKS,
|
|
36161
|
+
FINER_DATA_DECISION_OFFSET,
|
|
35839
36162
|
HAZARD_LABEL_PRIORITY,
|
|
35840
36163
|
INSPECT_CLASS_RANK,
|
|
35841
36164
|
INSPECT_RANK_DEVIATIONS,
|
|
@@ -35863,6 +36186,7 @@ var Chrt = class {
|
|
|
35863
36186
|
LOOK_TONES,
|
|
35864
36187
|
LOOK_WATERLINES_SOURCE,
|
|
35865
36188
|
MAPLIBRE_DEFAULT_TEXT_PADDING_PX,
|
|
36189
|
+
MAX_REDUCTION_LEVELS,
|
|
35866
36190
|
NAUTICAL_SYMBOLS,
|
|
35867
36191
|
NAV_AID_LAYER_GROUPS,
|
|
35868
36192
|
NAV_AID_QUERY_LAYERS,
|
|
@@ -35880,6 +36204,7 @@ var Chrt = class {
|
|
|
35880
36204
|
RASTER_ATON_CLASSES,
|
|
35881
36205
|
RASTER_GLYPH_NAMES,
|
|
35882
36206
|
RASTER_ICON_PREFIX,
|
|
36207
|
+
REDUCED_SIZE_PROPERTIES,
|
|
35883
36208
|
RELIEF_ATTRIBUTION,
|
|
35884
36209
|
RELIEF_ENCODING,
|
|
35885
36210
|
RELIEF_REGION,
|
|
@@ -35975,6 +36300,14 @@ var Chrt = class {
|
|
|
35975
36300
|
capLuminance,
|
|
35976
36301
|
cellBandCharacters,
|
|
35977
36302
|
cellBandMatch,
|
|
36303
|
+
chartLockBandInfo,
|
|
36304
|
+
chartLockDecisionZoom,
|
|
36305
|
+
chartLockFloor,
|
|
36306
|
+
chartLockGeneratorOptions,
|
|
36307
|
+
chartLockMinZoom,
|
|
36308
|
+
chartLockParam,
|
|
36309
|
+
chartLockSourceMaxzoom,
|
|
36310
|
+
chartLockStyleMode,
|
|
35978
36311
|
chartSymbolSizingCensus,
|
|
35979
36312
|
chrtAtonTintExpression,
|
|
35980
36313
|
chrtHouseColor,
|
|
@@ -36014,6 +36347,7 @@ var Chrt = class {
|
|
|
36014
36347
|
extinguishedLightExpression,
|
|
36015
36348
|
extractNavAidDesignation,
|
|
36016
36349
|
featureIdentity,
|
|
36350
|
+
filterAtFloor,
|
|
36017
36351
|
formatDayboard,
|
|
36018
36352
|
formatLightDescription,
|
|
36019
36353
|
formatLightRhythm,
|
|
@@ -36050,6 +36384,7 @@ var Chrt = class {
|
|
|
36050
36384
|
hazardFillExpression,
|
|
36051
36385
|
iconExpressionForFamily,
|
|
36052
36386
|
iconSliderFor,
|
|
36387
|
+
isChartLockBand,
|
|
36053
36388
|
isDangerDepthPlacer,
|
|
36054
36389
|
isDepthAreaClassLayerId,
|
|
36055
36390
|
isDrapeable,
|
|
@@ -36088,6 +36423,7 @@ var Chrt = class {
|
|
|
36088
36423
|
normalizeTheme,
|
|
36089
36424
|
opaqueSplitBaseOf,
|
|
36090
36425
|
paginate,
|
|
36426
|
+
parseChartLock,
|
|
36091
36427
|
parseChartLook,
|
|
36092
36428
|
parseListCodes,
|
|
36093
36429
|
parseSigseqTerms,
|
|
@@ -36117,6 +36453,7 @@ var Chrt = class {
|
|
|
36117
36453
|
seafloorLayers,
|
|
36118
36454
|
sectorLimitToArcBearing,
|
|
36119
36455
|
semiboldFontStack,
|
|
36456
|
+
servedChartLockMetadata,
|
|
36120
36457
|
snapChartSymbolScale,
|
|
36121
36458
|
soundingPadding,
|
|
36122
36459
|
soundingPaddingValue,
|
|
@@ -36129,8 +36466,10 @@ var Chrt = class {
|
|
|
36129
36466
|
themeChrtGlyph,
|
|
36130
36467
|
tileTemplate,
|
|
36131
36468
|
uncoveredSectorArcs,
|
|
36469
|
+
withChartReduction,
|
|
36132
36470
|
withClassicMarks,
|
|
36133
36471
|
withLook,
|
|
36472
|
+
withServedChartLock,
|
|
36134
36473
|
withWaterLines,
|
|
36135
36474
|
withinBboxFilter,
|
|
36136
36475
|
worldMinusBboxPolygon
|