@nika-js/onlymap 0.2.3 → 0.3.1

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.
Files changed (62) hide show
  1. package/.vscode/onlymap.code-snippets +13 -0
  2. package/LICENSE.md +4 -0
  3. package/README.md +30 -7
  4. package/THIRD-PARTY-LICENSES.md +7874 -0
  5. package/dist/{Arrow.dom-7AXne1TU.js → Arrow.dom-BNjbQ9jb.js} +23 -23
  6. package/dist/LercDecode.es-CVmNpXBp.js +303 -0
  7. package/dist/assets/LercDecode.es-BJb2dZu5.js +305 -0
  8. package/dist/assets/__vite-browser-external-DDArsqdc.js +29 -0
  9. package/dist/assets/lerc-wasm.wasm +0 -0
  10. package/dist/assets/lzw-BY5a_5nb.js +83 -0
  11. package/dist/assets/worker-DtIrTJB7.js +305 -0
  12. package/dist/assets/zstd-QGAv3PMm.js +383 -0
  13. package/dist/{basemap-BdvB-SHy.js → basemap-BSb-g03Z.js} +5729 -5684
  14. package/dist/basemap-registry.d.ts +10 -0
  15. package/dist/basemap.d.ts +23 -0
  16. package/dist/color.d.ts +9 -0
  17. package/dist/{convert-arrow-schema-CvZ3cT5m.js → convert-arrow-schema-DrAihRf9.js} +31 -31
  18. package/dist/ctx.d.ts +3 -0
  19. package/dist/deck.d.ts +28 -0
  20. package/dist/deck.js +16 -0
  21. package/dist/elements/om-map.d.ts +29 -0
  22. package/dist/html-data.d.ts +2 -2
  23. package/dist/index-CIEkseeV.js +3108 -0
  24. package/dist/index-D67FynN5.js +594 -0
  25. package/dist/{index-CJOMgp8k.js → index-QSkZjzIL.js} +4 -4
  26. package/dist/index-WeMwLoaQ.js +1446 -0
  27. package/dist/{index-BxzDKZpu.js → index-lV5eG2Xt.js} +22439 -21347
  28. package/dist/index.d.ts +13 -0
  29. package/dist/ir-snapshot.d.ts +2 -0
  30. package/dist/ir.d.ts +10 -0
  31. package/dist/layer-registry.d.ts +15 -1
  32. package/dist/legend-spec.d.ts +66 -0
  33. package/dist/lerc-DJzRIT6z.js +30 -0
  34. package/dist/lerc-wasm.wasm +0 -0
  35. package/dist/lzw-BY5a_5nb.js +83 -0
  36. package/dist/mgrs-BY9bIvp4.js +799 -0
  37. package/dist/onlymapjs.css +1 -1
  38. package/dist/onlymapjs.js +55 -35
  39. package/dist/programmatic.d.ts +35 -0
  40. package/dist/raster-BKf1dx54.js +8843 -0
  41. package/dist/raster.d.ts +61 -0
  42. package/dist/react/om-layer.d.ts +2 -0
  43. package/dist/react.js +18 -16
  44. package/dist/{recordbatch-HRu0SMKp.js → recordbatch-Bpc0uxFn.js} +200 -200
  45. package/dist/runtime-core.d.ts +73 -1
  46. package/dist/scene-lighting.d.ts +83 -0
  47. package/dist/selection.d.ts +1 -1
  48. package/dist/snapshot.d.ts +14 -0
  49. package/dist/{table-accessors-DBjWgN0C.js → table-accessors-CYWTzpQI.js} +71 -76
  50. package/dist/terrain.d.ts +113 -0
  51. package/dist/version.d.ts +1 -1
  52. package/dist/zstd-jXobGRcq.js +14 -0
  53. package/docs/custom-layers.md +99 -0
  54. package/llms.txt +5 -5
  55. package/onlymapjs.html-data.json +163 -29
  56. package/package.json +35 -15
  57. package/skills/onlymapjs/SKILL.md +3 -1
  58. package/skills/onlymapjs/references/syntax.md +53 -3
  59. package/dist/index-BVQ0s1Zh.js +0 -1457
  60. package/dist/index-CvBHiOGD.js +0 -605
  61. package/dist/index-Vc8QfNEf.js +0 -3907
  62. package/dist/onlymapjs.umd.cjs +0 -8634
package/dist/index.d.ts CHANGED
@@ -27,6 +27,7 @@ import { registerSource, registerFormat, configureData } from "./data-layer";
27
27
  import { registerWidget } from "./widget-registry";
28
28
  import { registerAction } from "./actions";
29
29
  import { registerBasemap, configureBasemap } from "./basemap-registry";
30
+ import { registerTerrain } from "./terrain";
30
31
  import { configureTelemetry } from "./telemetry";
31
32
  import { configureLicense } from "./license";
32
33
  import { validateManifestString } from "./validation";
@@ -45,6 +46,11 @@ export { registerWidget } from "./widget-registry";
45
46
  export type { WidgetImpl, WidgetHost } from "./widget-registry";
46
47
  export { registerBasemap, configureBasemap, getBasemap } from "./basemap-registry";
47
48
  export type { BasemapPreset, BasemapStyle } from "./basemap-registry";
49
+ export { LIGHTING_PRESET_NAMES, resolveLighting, solarAzElDegrees } from "./scene-lighting";
50
+ export type { LightingIR, LightingOptions, LightingPresetName } from "./scene-lighting";
51
+ export { registerTerrain, getTerrain, parseTerrainAttrs } from "./terrain";
52
+ export type { TerrainPreset, TerrainIR, ElevationDecoder, LayerTerrainMode } from "./terrain";
53
+ export type { SnapshotOptions } from "./snapshot";
48
54
  export { configureTelemetry } from "./telemetry";
49
55
  export type { TelemetryConfig, TelemetrySnapshot } from "./telemetry";
50
56
  export { configureLicense, getEntitlements } from "./license";
@@ -68,6 +74,11 @@ export type { OmMapElement } from "./elements/om-map";
68
74
  export type { OmStoryElement, StoryState } from "./elements/om-story";
69
75
  export { computeTimeline, parseDurationMs } from "./timeline";
70
76
  export type { StepTiming, StepInterval, Timeline } from "./timeline";
77
+ export { Layer, CompositeLayer, LayerExtension, WebMercatorViewport, COORDINATE_SYSTEM } from "@deck.gl/core";
78
+ export { GeoJsonLayer, ScatterplotLayer, IconLayer, BitmapLayer } from "@deck.gl/layers";
79
+ export { TileLayer, Tile3DLayer } from "@deck.gl/geo-layers";
80
+ export { SimpleMeshLayer, ScenegraphLayer } from "@deck.gl/mesh-layers";
81
+ export declare function loadRasterModule(): Promise<typeof import("./raster")>;
71
82
  export { compileExpression, AccessorCache, CompileError } from "./expr";
72
83
  export type { Shape, CompileOptions, CompiledExpression } from "./expr";
73
84
  export { evaluateInSandbox, compileFullJsAccessorBlockInSandbox, sandboxHtml, destroySandbox } from "./csp-sandbox";
@@ -87,10 +98,12 @@ export declare const OmMap: {
87
98
  registerFormat: typeof registerFormat;
88
99
  registerSource: typeof registerSource;
89
100
  registerBasemap: typeof registerBasemap;
101
+ registerTerrain: typeof registerTerrain;
90
102
  configureBasemap: typeof configureBasemap;
91
103
  configureData: typeof configureData;
92
104
  configureTelemetry: typeof configureTelemetry;
93
105
  configureLicense: typeof configureLicense;
94
106
  validate: typeof validateManifestString;
95
107
  snapshotIR: typeof snapshotIR;
108
+ loadRasterModule: typeof loadRasterModule;
96
109
  };
@@ -34,6 +34,8 @@ export interface LayerIRSnapshot {
34
34
  rows: number;
35
35
  meta: LayerMeta;
36
36
  filter?: LayerFilter;
37
+ /** Per-layer terrain mode when authored (`terrain` attribute) — absent = the type default. */
38
+ terrain?: "drape" | "offset" | "off";
37
39
  /**
38
40
  * Resolved deck.gl props, made JSON-safe: compiled accessors appear as
39
41
  * their updateTrigger fingerprint (`[accessor <shape>|<source>]`), other
package/dist/ir.d.ts CHANGED
@@ -9,9 +9,12 @@
9
9
  export interface LayerMeta {
10
10
  label?: string;
11
11
  color?: string;
12
+ /** Statically-derived color symbology (spec: "Built-in widgets / legend") — set when get-fill-color is a recognizable scale()/categorical expression. */
13
+ legend?: LegendSpec;
12
14
  }
13
15
  export type { Shape } from "./expr";
14
16
  import type { Shape } from "./expr";
17
+ import type { LegendSpec } from "./legend-spec";
15
18
  /**
16
19
  * Columnar (GeoArrow-style) data: one array per field instead of one object
17
20
  * per row (spec: "Columnar / GeoArrow Ingestion"). Produced by the Data
@@ -55,6 +58,13 @@ export interface LayerIR {
55
58
  meta: LayerMeta;
56
59
  /** The layer's active declarative filter, if `filter-field`/`filter-range` are present. */
57
60
  filter?: LayerFilter;
61
+ /**
62
+ * Per-layer terrain mode (spec: "Terrain") — the `terrain` attribute:
63
+ * drape onto / sit on / ignore an active terrain surface. Absent = the
64
+ * type's default (3D-model layers offset, tiled 3D layers off, everything
65
+ * else drapes). Inert without map-level terrain.
66
+ */
67
+ terrain?: "drape" | "offset" | "off";
58
68
  /**
59
69
  * deck.gl `updateTriggers` — one behavioural fingerprint (`shape|paramName|source`)
60
70
  * per compiled accessor deckProp, so deck.gl recomputes an attribute iff the
@@ -15,7 +15,16 @@ export interface PropDescriptor {
15
15
  }
16
16
  export interface LayerSchema {
17
17
  type: string;
18
- deckClass: new (props: Record<string, unknown>) => Layer;
18
+ /** Absent only for lazy entries whose chunk hasn't loaded yet (see `loadClass`). */
19
+ deckClass?: new (props: Record<string, unknown>) => Layer;
20
+ /**
21
+ * Lazy-chunk seam (spec: "Raster / GeoTIFF"): a curated entry may ship its
22
+ * SCHEMA eagerly (attribute resolution and validation need it at parse
23
+ * time) while the deck class arrives via dynamic import on first use.
24
+ * `ensureLayerClass` runs the load exactly once; until it settles the
25
+ * runtime simply skips the layer and re-applies when the class lands.
26
+ */
27
+ loadClass?: () => Promise<new (props: Record<string, unknown>) => Layer>;
19
28
  props: PropDescriptor[];
20
29
  /** Hand-authored (curated, ~15) vs. runtime-derived from defaultProps (HU1 tiering). */
21
30
  tier: "curated" | "auto-derived";
@@ -23,5 +32,10 @@ export interface LayerSchema {
23
32
  export declare function registerLayer(schema: Omit<LayerSchema, "tier"> & {
24
33
  tier?: LayerSchema["tier"];
25
34
  }): void;
35
+ /**
36
+ * Kick (or join) the lazy class load for a schema. Returns null when there
37
+ * is nothing to load (class already present, or a plain eager entry).
38
+ */
39
+ export declare function ensureLayerClass(schema: LayerSchema): Promise<void> | null;
26
40
  export declare function getLayerSchema(type: string): LayerSchema | undefined;
27
41
  export declare function getAllLayerSchemas(): ReadonlyMap<string, LayerSchema>;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Legend spec derivation (spec: "Built-in widgets / legend") — the legend
3
+ * widget's default reflects each layer's ACTUAL color symbology, derived
4
+ * statically from the authored `get-fill-color` expression:
5
+ *
6
+ * scale($f, sequential|diverging, [...], domain=[a,b]) → gradient ramp
7
+ * scale($f, threshold, [...], domain=[b1..bN-1]) → class ranges
8
+ * $f == 'x' ? c1 : $f == 'y' ? c2 : cDefault → categories
9
+ * '#hex' literal / `color` shorthand → single swatch
10
+ *
11
+ * Anything else (arithmetic, js blocks, function accessors on the
12
+ * programmatic front-end) falls back to the single `color` swatch —
13
+ * best-effort static analysis, never a guess. Pure string/AST work over the
14
+ * SOURCE attribute, deliberately separate from the expression compiler: the
15
+ * legend needs structure, the compiler needs functions, and coupling them
16
+ * would make every legend tweak a compiler change.
17
+ */
18
+ export type LegendSpec = {
19
+ kind: "ramp";
20
+ field: string;
21
+ /** CSS color stops in order (hex/rgb strings as authored). */
22
+ colors: string[];
23
+ /** [min, max] displayed at the ramp ends. */
24
+ domain: [number, number];
25
+ } | {
26
+ kind: "classes";
27
+ field: string;
28
+ /** One entry per class: color + human-readable range label. */
29
+ entries: {
30
+ color: string;
31
+ label: string;
32
+ }[];
33
+ } | {
34
+ kind: "categories";
35
+ field: string;
36
+ entries: {
37
+ color: string;
38
+ label: string;
39
+ }[];
40
+ /** The ternary chain's fallback color, when authored. */
41
+ defaultColor?: string;
42
+ };
43
+ /**
44
+ * Representative gradient stops per bundled raster colormap — used to PAINT
45
+ * THE LEGEND, not the map (the map samples the GPU sprite; a 1-D CSS
46
+ * gradient bar only needs a few stops and the eye fills in the rest).
47
+ * Matplotlib reference colors at 0/.25/.5/.75/1. The sprite ships ~107
48
+ * colormaps; this curated dozen covers the ones worth suggesting — an
49
+ * authored name outside it still RENDERS (sprite lookup), it just gets the
50
+ * single-swatch legend fallback.
51
+ */
52
+ export declare const RASTER_COLORMAP_STOPS: Record<string, string[]>;
53
+ /**
54
+ * Raster twin of deriveLegendSpec: a COGLayer with an authored rescale
55
+ * window exposes its colormap as a ramp. Both `min` and `max` must be
56
+ * authored — without a window the ramp ends would be a guess (the runtime
57
+ * defaults to 0–255, but promising that in a legend for float data would
58
+ * label it wrong).
59
+ */
60
+ export declare function deriveRasterLegendSpec(colormap: string | null | undefined, min: number | null | undefined, max: number | null | undefined): LegendSpec | undefined;
61
+ /**
62
+ * Derive a LegendSpec from a `get-fill-color` source expression. Returns
63
+ * undefined when the expression isn't one of the recognizable shapes (the
64
+ * widget falls back to the single swatch).
65
+ */
66
+ export declare function deriveLegendSpec(source: string | undefined | null): LegendSpec | undefined;
@@ -0,0 +1,30 @@
1
+ import { C as a, D as s } from "./raster-BKf1dx54.js";
2
+ const D = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3
+ __proto__: null
4
+ }, Symbol.toStringTag, { value: "Module" }));
5
+ var t;
6
+ (function(e) {
7
+ e[e.None = 0] = "None", e[e.Deflate = 1] = "Deflate", e[e.Zstd = 2] = "Zstd";
8
+ })(t || (t = {}));
9
+ let l = !1;
10
+ async function d() {
11
+ const e = await import("./LercDecode.es-CVmNpXBp.js");
12
+ return l || (await e.load(), l = !0), e;
13
+ }
14
+ async function i(e, r) {
15
+ const o = r.lercParameters?.[1] ?? t.None;
16
+ let n = e;
17
+ if (o === t.Deflate || o === t.Zstd) {
18
+ const c = o === t.Deflate ? a.Deflate : a.Zstd;
19
+ n = await (await s.get(c)())(e, r);
20
+ }
21
+ return { layout: "band-separate", bands: (await d()).decode(n).pixels };
22
+ }
23
+ const b = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
24
+ __proto__: null,
25
+ decode: i
26
+ }, Symbol.toStringTag, { value: "Module" }));
27
+ export {
28
+ D as _,
29
+ b as l
30
+ };
Binary file
@@ -0,0 +1,83 @@
1
+ function F(A, g) {
2
+ try {
3
+ const o = C.__wbindgen_add_to_stack_pointer(-16), y = (function(t, h) {
4
+ const c = h(1 * t.length, 1) >>> 0;
5
+ return G().set(t, c / 1), n = t.length, c;
6
+ })(A, C.__wbindgen_export), e = n;
7
+ C.decompress(o, y, e, g);
8
+ var E = a().getInt32(o + 0, !0), i = a().getInt32(o + 4, !0), I = (B = E, Q = i, B >>>= 0, G().subarray(B / 1, B / 1 + Q)).slice();
9
+ return C.__wbindgen_export2(E, 1 * i, 1), I;
10
+ } finally {
11
+ C.__wbindgen_add_to_stack_pointer(16);
12
+ }
13
+ var B, Q;
14
+ }
15
+ let s = null;
16
+ function a() {
17
+ return (s === null || s.buffer.detached === !0 || s.buffer.detached === void 0 && s.buffer !== C.memory.buffer) && (s = new DataView(C.memory.buffer)), s;
18
+ }
19
+ let D = null;
20
+ function G() {
21
+ return D !== null && D.byteLength !== 0 || (D = new Uint8Array(C.memory.buffer)), D;
22
+ }
23
+ let C, n = 0;
24
+ const R = [62, 0, 0, 0, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51];
25
+ function w(A) {
26
+ return R[A - 43];
27
+ }
28
+ var N = (function(A) {
29
+ let g, E = A.endsWith("==") ? 2 : A.endsWith("=") ? 1 : 0, i = A.length, I = new Uint8Array(i / 4 * 3);
30
+ for (let B = 0, Q = 0; B < i; B += 4, Q += 3) g = w(A.charCodeAt(B)) << 18 | w(A.charCodeAt(B + 1)) << 12 | w(A.charCodeAt(B + 2)) << 6 | w(A.charCodeAt(B + 3)), I[Q] = g >> 16, I[Q + 1] = g >> 8 & 255, I[Q + 2] = 255 & g;
31
+ return I.subarray(0, I.length - E);
32
+ })("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AAAgAkUNAQNAQayJwAAtAAANAEGsicAAQayJwAAtAAAiAkEBIAIbOgAAIAINAAsMAQsgBCADQQEgAhAMIgUNAUEBEBcACyAEIAMQBkGsicAAQQA6AAAgASgCCCECCyABIAU2AgQLIAAgAjYCBCAAIAEoAgQ2AgALqQEBAX8jAEEQayIDJAACfyAARQRAQQAhACADQQxqDAELIANBAjYCDCAAIAJsIQAgA0EIagsgADYCAAJAIAMoAgxFDQAgAygCCCICRQ0AQayJwABBrInAAC0AACIAQQEgABs6AAAgAARAA0BBrInAAC0AAA0AQayJwABBrInAAC0AACIAQQEgABs6AAAgAA0ACwsgASACEAZBrInAAEEAOgAACyADQRBqJAALewECfyACQf//A3EiBSABSQRAIAAgBUECdGotAAMgBARAIANBAWshAyACIQEDQCADIARqIAAgAUH//wNxQQJ0aiIBLQACOgAAIAEvAQAiASACQf//A3EiBiABIAZJGyEBIARBAWsiBA0ACwsPC0EAIAUgAUG8hsAAEBQAC4MBAQJ/IABBADYCCAJAIAEoAhQiBCACQf//A3EiA0sEQCAAKAIEIgQgASgCECADQQF0ai8BACIDSQ0BIAEoAgQgASgCCCACIAAoAgAiASADEAogACADNgIMIAAgBDYCBCAAIAE2AgAPCyADIARBnIfAABAOAAtBACADIARBrIfAABAUAAt8ACACIAMQAyICBEAgAyABIAEgA0sbIgMEQCACIAAgA/wKAAALQayJwABBrInAAC0AACIDQQEgAxs6AAAgAwRAA0BBrInAAC0AAA0AQayJwABBrInAAC0AACIDQQEgAxs6AAAgAw0ACwsgACABEAZBrInAAEEAOgAACyACC3sBAn8jAEEQayIDJABBxInAAEHEicAAKAIAIgRBAWo2AgACQCAEQQBIDQACQEHAicAALQAARQRAQbyJwABBvInAACgCAEEBajYCAEHIicAAKAIAQQBODQEMAgsgA0EIaiAAIAERAAAAC0HAicAAQQA6AAAgAkUNAAALAAtOAgF/AX4jAEEgayIDJAAgAyABNgIMIAMgADYCCCADQoCAgIAQIgQgA0EIaq2ENwMYIAMgBCADQQxqrYQ3AxBBqIDAACADQRBqIAIQFQALWwAgAQRAQayJwABBrInAAC0AACICQQEgAhs6AAAgAgRAA0BBrInAAC0AAA0AQayJwABBrInAAC0AACICQQEgAhs6AAAgAg0ACwsgACABEAZBrInAAEEAOgAACwtHAQN/IAEoAgwiAiABKAIIIgNPIAIgASgCBCIETXFFBEAgAyACIARBvIfAABAUAAsgACACIANrNgIEIAAgASgCACADajYCAAtFAQJ/IwBBEGsiASQAIAFBCGogACAAKAIAQQFBAkEEEAcgASgCCCIAQYGAgIB4RwRAIAEoAgwhAiAAEBcACyABQRBqJAALRQECfyMAQRBrIgEkACABQQhqIAAgACgCAEEBQQJBAhAHIAEoAggiAEGBgICAeEcEQCABKAIMIQIgABAXAAsgAUEQaiQAC0IBAn8jAEEQayIFJAAgBUEIaiAAIAEgAiADIAQQByAFKAIIIgBBgYCAgHhHBEAgBSgCDCEGIAAQFwALIAVBEGokAAv4AQACQCAAIAJNBEAgACABTSABIAJLcg0BIwBBIGsiAiQAIAIgATYCDCACIAA2AgggAiACQQxqrUKAgICAEIQ3AxggAiACQQhqrUKAgICAEIQ3AxBBgIDAACACQRBqIAMQFQALIwBBIGsiASQAIAEgAjYCDCABIAA2AgggASABQQxqrUKAgICAEIQ3AxggASABQQhqrUKAgICAEIQ3AxBB34DAACABQRBqIAMQFQALIwBBIGsiACQAIAAgAjYCDCAAIAE2AgggACAAQQxqrUKAgICAEIQ3AxggACAAQQhqrUKAgICAEIQ3AxBBmIHAACAAQRBqIAMQFQAL2QECAX8BfiMAQSBrIgMkACADIAE2AhAgAyAANgIMIANBATsBHCADIAI2AhggAyADQQxqNgIUIwBBEGsiASQAIANBFGoiACkCACEEIAEgADYCDCABIAQ3AgQjAEEQayIAJAAgAUEEaiIBKAIAIgIoAgQiA0EBcUUEQCAAQYCAgIB4NgIAIAAgATYCDCABKAIIIgEtAAghAiABLQAJGiAAQQMgAhANAAsgAigCACECIAAgA0EBdjYCBCAAIAI2AgAgASgCCCIBLQAIIQIgAS0ACRogAEEEIAIQDQALLgACQCABaUEBRyAAQYCAgIB4IAFrS3INACAABEAgASAAEAMiAUUNAQsgAQ8LAAsZACAABEAQGQALQfyDwABBI0GQhMAAEBUACwsAIAAjAGokACMACw0AQbiJwABBAToAAAALDAAgACABKQIANwMACwkAIABBADYCAAsLwAkCAEGAgMAAC6kJFnNsaWNlIGluZGV4IHN0YXJ0cyBhdCDADSBidXQgZW5kcyBhdCDAACBpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzIMASIGJ1dCB0aGUgaW5kZXggaXMgwAAScmFuZ2Ugc3RhcnQgaW5kZXggwCIgb3V0IG9mIHJhbmdlIGZvciBzbGljZSBvZiBsZW5ndGggwAAQcmFuZ2UgZW5kIGluZGV4IMAiIG91dCBvZiByYW5nZSBmb3Igc2xpY2Ugb2YgbGVuZ3RoIMAAbGlicmFyeS9jb3JlL3NyYy9mbXQvbnVtLnJzAC9Vc2Vycy9reWxlLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvd2FzbS1iaW5kZ2VuLTAuMi4xMDgvc3JjL2V4dGVybnJlZi5ycwAvVXNlcnMva3lsZS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3dlZXpsLTAuMS4xMi9zcmMvZGVjb2RlLnJzAGxpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMvbW9kLnJzAHNyYy9saWIucnMAAADPARAACgAAACoAAAAYAAAAzwEQAAoAAAArAAAAHgAAAGNhcGFjaXR5IG92ZXJmbG93AAAArgEQACAAAAAcAAAABQAAADAwMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5zwAQABsAAABXAgAABQAAAFJlZkNlbGwgYWxyZWFkeSBib3Jyb3dlZOsAEABmAAAAfwAAABEAAADrABAAZgAAAIwAAAARAAAAbWlkID4gbGVuAAAAUgEQAFsAAADRBQAAIAAAAFIBEABbAAAAvwUAACQAAABSARAAWwAAAKcFAAAUAAAAUgEQAFsAAAC0BQAAIAAAAFIBEABbAAAAawUAACcAAABSARAAWwAAAGsFAAAJAAAAUgEQAFsAAAB1BQAAIQAAAFIBEABbAAAAeAUAAB4AAABSARAAWwAAAIEFAAAUAAAAUgEQAFsAAADABAAAFwAAAFIBEABbAAAAugQAABcAAABSARAAWwAAAKoDAAAgAAAAUgEQAFsAAACvAwAAMAAAAFIBEABbAAAAxgMAADAAAABSARAAWwAAANUDAAAVAAAAUgEQAFsAAADeAwAALwAAAFIBEABbAAAACQQAACYAAABSARAAWwAAAAcEAAAmAAAAUgEQAFsAAAA1BAAANwAAAFIBEABbAAAAOwQAAB8AAABSARAAWwAAADwEAAAZAAAAUgEQAFsAAAAiBAAALgAAAFIBEABbAAAAagQAAB4AQbCJwAALBf////8EAEgJcHJvZHVjZXJzAQxwcm9jZXNzZWQtYnkCBndhbHJ1cwYwLjI0LjQMd2FzbS1iaW5kZ2VuEzAuMi4xMDggKGE3ODhmNThmOSk=");
33
+ function r(A, g) {
34
+ const E = F(A, g);
35
+ if (E.length === 0) throw Error("Failed to decode with LZW decoder.");
36
+ return E;
37
+ }
38
+ await (async function(A) {
39
+ if (C !== void 0) return C;
40
+ A !== void 0 && (Object.getPrototypeOf(A) === Object.prototype ? { module_or_path: A } = A : console.warn("using deprecated parameters for the initialization function; pass a single object instead"));
41
+ const g = { __proto__: null, "./index_bg.js": { __proto__: null } };
42
+ (typeof A == "string" || typeof Request == "function" && A instanceof Request || typeof URL == "function" && A instanceof URL) && (A = fetch(A));
43
+ const { instance: E, module: i } = await (async function(I, B) {
44
+ if (typeof Response == "function" && I instanceof Response) {
45
+ if (typeof WebAssembly.instantiateStreaming == "function") try {
46
+ return await WebAssembly.instantiateStreaming(I, B);
47
+ } catch (o) {
48
+ if (!I.ok || !(function(y) {
49
+ switch (y) {
50
+ case "basic":
51
+ case "cors":
52
+ case "default":
53
+ return !0;
54
+ }
55
+ return !1;
56
+ })(I.type) || I.headers.get("Content-Type") === "application/wasm") throw o;
57
+ console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", o);
58
+ }
59
+ const Q = await I.arrayBuffer();
60
+ return await WebAssembly.instantiate(Q, B);
61
+ }
62
+ {
63
+ const Q = await WebAssembly.instantiate(I, B);
64
+ return Q instanceof WebAssembly.Instance ? { instance: Q, module: I } : Q;
65
+ }
66
+ })(await A, g);
67
+ return (function(I) {
68
+ return C = I.exports, s = null, D = null, C;
69
+ })(E);
70
+ })({ module_or_path: N });
71
+ async function S(A, g) {
72
+ const { width: E, height: i, samplesPerPixel: I, bitsPerSample: B } = g, Q = E * i * I * (B / 8), o = r(new Uint8Array(A), Q);
73
+ return M(o);
74
+ }
75
+ function M(A) {
76
+ if (A.byteOffset === 0 && A.byteLength === A.buffer.byteLength)
77
+ return A.buffer;
78
+ const g = new Uint8Array(A.byteLength);
79
+ return g.set(A), g.buffer;
80
+ }
81
+ export {
82
+ S as decode
83
+ };