deck.gl 9.2.8 → 9.2.10

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/dist.dev.js CHANGED
@@ -52,10 +52,10 @@ var __exports__ = (() => {
52
52
  return value;
53
53
  };
54
54
 
55
- // ../../node_modules/@probe.gl/env/dist/lib/globals.js
55
+ // ../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/lib/globals.js
56
56
  var window_2, document_2, process_, console_, navigator_;
57
57
  var init_globals = __esm({
58
- "../../node_modules/@probe.gl/env/dist/lib/globals.js"() {
58
+ "../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/lib/globals.js"() {
59
59
  window_2 = globalThis;
60
60
  document_2 = globalThis.document || {};
61
61
  process_ = globalThis.process || {};
@@ -64,7 +64,7 @@ var __exports__ = (() => {
64
64
  }
65
65
  });
66
66
 
67
- // ../../node_modules/@probe.gl/env/dist/lib/is-electron.js
67
+ // ../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/lib/is-electron.js
68
68
  function isElectron(mockUserAgent) {
69
69
  if (typeof window !== "undefined" && window.process?.type === "renderer") {
70
70
  return true;
@@ -77,11 +77,11 @@ var __exports__ = (() => {
77
77
  return Boolean(userAgent2 && userAgent2.indexOf("Electron") >= 0);
78
78
  }
79
79
  var init_is_electron = __esm({
80
- "../../node_modules/@probe.gl/env/dist/lib/is-electron.js"() {
80
+ "../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/lib/is-electron.js"() {
81
81
  }
82
82
  });
83
83
 
84
- // ../../node_modules/@probe.gl/env/dist/lib/is-browser.js
84
+ // ../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/lib/is-browser.js
85
85
  function isBrowser2() {
86
86
  const isNode = (
87
87
  // @ts-expect-error
@@ -90,50 +90,165 @@ var __exports__ = (() => {
90
90
  return !isNode || isElectron();
91
91
  }
92
92
  var init_is_browser = __esm({
93
- "../../node_modules/@probe.gl/env/dist/lib/is-browser.js"() {
93
+ "../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/lib/is-browser.js"() {
94
94
  init_is_electron();
95
95
  }
96
96
  });
97
97
 
98
- // ../../node_modules/@probe.gl/env/dist/lib/get-browser.js
99
- function getBrowser(mockUserAgent) {
100
- if (!mockUserAgent && !isBrowser2()) {
101
- return "Node";
98
+ // ../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/index.js
99
+ var VERSION;
100
+ var init_dist = __esm({
101
+ "../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/index.js"() {
102
+ init_globals();
103
+ init_is_browser();
104
+ VERSION = true ? "4.1.1" : "untranspiled source";
102
105
  }
103
- if (isElectron(mockUserAgent)) {
104
- return "Electron";
106
+ });
107
+
108
+ // ../../node_modules/@probe.gl/log/dist/utils/assert.js
109
+ function assert3(condition, message2) {
110
+ if (!condition) {
111
+ throw new Error(message2 || "Assertion failed");
105
112
  }
106
- const userAgent2 = mockUserAgent || navigator_.userAgent || "";
107
- if (userAgent2.indexOf("Edge") > -1) {
108
- return "Edge";
113
+ }
114
+ var init_assert = __esm({
115
+ "../../node_modules/@probe.gl/log/dist/utils/assert.js"() {
109
116
  }
110
- if (globalThis.chrome) {
111
- return "Chrome";
117
+ });
118
+
119
+ // ../../node_modules/@probe.gl/log/dist/loggers/log-utils.js
120
+ function normalizeLogLevel(logLevel) {
121
+ if (!logLevel) {
122
+ return 0;
112
123
  }
113
- if (globalThis.safari) {
114
- return "Safari";
124
+ let resolvedLevel;
125
+ switch (typeof logLevel) {
126
+ case "number":
127
+ resolvedLevel = logLevel;
128
+ break;
129
+ case "object":
130
+ resolvedLevel = logLevel.logLevel || logLevel.priority || 0;
131
+ break;
132
+ default:
133
+ return 0;
115
134
  }
116
- if (globalThis.mozInnerScreenX) {
117
- return "Firefox";
135
+ assert3(Number.isFinite(resolvedLevel) && resolvedLevel >= 0);
136
+ return resolvedLevel;
137
+ }
138
+ function normalizeArguments(opts) {
139
+ const { logLevel, message: message2 } = opts;
140
+ opts.logLevel = normalizeLogLevel(logLevel);
141
+ const args = opts.args ? Array.from(opts.args) : [];
142
+ while (args.length && args.shift() !== message2) {
118
143
  }
119
- return "Unknown";
144
+ switch (typeof logLevel) {
145
+ case "string":
146
+ case "function":
147
+ if (message2 !== void 0) {
148
+ args.unshift(message2);
149
+ }
150
+ opts.message = logLevel;
151
+ break;
152
+ case "object":
153
+ Object.assign(opts, logLevel);
154
+ break;
155
+ default:
156
+ }
157
+ if (typeof opts.message === "function") {
158
+ opts.message = opts.message();
159
+ }
160
+ const messageType = typeof opts.message;
161
+ assert3(messageType === "string" || messageType === "object");
162
+ return Object.assign(opts, { args }, opts.opts);
120
163
  }
121
- var init_get_browser = __esm({
122
- "../../node_modules/@probe.gl/env/dist/lib/get-browser.js"() {
123
- init_is_browser();
124
- init_is_electron();
125
- init_globals();
164
+ var init_log_utils = __esm({
165
+ "../../node_modules/@probe.gl/log/dist/loggers/log-utils.js"() {
166
+ init_assert();
126
167
  }
127
168
  });
128
169
 
129
- // ../../node_modules/@probe.gl/env/dist/index.js
130
- var VERSION;
131
- var init_dist = __esm({
132
- "../../node_modules/@probe.gl/env/dist/index.js"() {
133
- init_globals();
134
- init_is_browser();
135
- init_get_browser();
136
- VERSION = true ? "4.1.0" : "untranspiled source";
170
+ // ../../node_modules/@probe.gl/log/dist/loggers/base-log.js
171
+ var noop, BaseLog;
172
+ var init_base_log = __esm({
173
+ "../../node_modules/@probe.gl/log/dist/loggers/base-log.js"() {
174
+ init_log_utils();
175
+ noop = () => {
176
+ };
177
+ BaseLog = class {
178
+ constructor({ level = 0 } = {}) {
179
+ this.userData = {};
180
+ this._onceCache = /* @__PURE__ */ new Set();
181
+ this._level = level;
182
+ }
183
+ set level(newLevel) {
184
+ this.setLevel(newLevel);
185
+ }
186
+ get level() {
187
+ return this.getLevel();
188
+ }
189
+ setLevel(level) {
190
+ this._level = level;
191
+ return this;
192
+ }
193
+ getLevel() {
194
+ return this._level;
195
+ }
196
+ // Unconditional logging
197
+ warn(message2, ...args) {
198
+ return this._log("warn", 0, message2, args, { once: true });
199
+ }
200
+ error(message2, ...args) {
201
+ return this._log("error", 0, message2, args);
202
+ }
203
+ // Conditional logging
204
+ log(logLevel, message2, ...args) {
205
+ return this._log("log", logLevel, message2, args);
206
+ }
207
+ info(logLevel, message2, ...args) {
208
+ return this._log("info", logLevel, message2, args);
209
+ }
210
+ once(logLevel, message2, ...args) {
211
+ return this._log("once", logLevel, message2, args, { once: true });
212
+ }
213
+ _log(type, logLevel, message2, args, options = {}) {
214
+ const normalized = normalizeArguments({
215
+ logLevel,
216
+ message: message2,
217
+ args: this._buildArgs(logLevel, message2, args),
218
+ opts: options
219
+ });
220
+ return this._createLogFunction(type, normalized, options);
221
+ }
222
+ _buildArgs(logLevel, message2, args) {
223
+ return [logLevel, message2, ...args];
224
+ }
225
+ _createLogFunction(type, normalized, options) {
226
+ if (!this._shouldLog(normalized.logLevel)) {
227
+ return noop;
228
+ }
229
+ const tag = this._getOnceTag(options.tag ?? normalized.tag ?? normalized.message);
230
+ if ((options.once || normalized.once) && tag !== void 0) {
231
+ if (this._onceCache.has(tag)) {
232
+ return noop;
233
+ }
234
+ this._onceCache.add(tag);
235
+ }
236
+ return this._emit(type, normalized);
237
+ }
238
+ _shouldLog(logLevel) {
239
+ return this.getLevel() >= normalizeLogLevel(logLevel);
240
+ }
241
+ _getOnceTag(tag) {
242
+ if (tag === void 0) {
243
+ return void 0;
244
+ }
245
+ try {
246
+ return typeof tag === "string" ? tag : String(tag);
247
+ } catch {
248
+ return void 0;
249
+ }
250
+ }
251
+ };
137
252
  }
138
253
  });
139
254
 
@@ -272,17 +387,6 @@ var __exports__ = (() => {
272
387
  }
273
388
  });
274
389
 
275
- // ../../node_modules/@probe.gl/log/dist/utils/assert.js
276
- function assert3(condition, message2) {
277
- if (!condition) {
278
- throw new Error(message2 || "Assertion failed");
279
- }
280
- }
281
- var init_assert = __esm({
282
- "../../node_modules/@probe.gl/log/dist/utils/assert.js"() {
283
- }
284
- });
285
-
286
390
  // ../../node_modules/@probe.gl/log/dist/utils/hi-res-timestamp.js
287
391
  function getHiResTimestamp() {
288
392
  let timestamp;
@@ -302,53 +406,7 @@ var __exports__ = (() => {
302
406
  }
303
407
  });
304
408
 
305
- // ../../node_modules/@probe.gl/log/dist/log.js
306
- function noop() {
307
- }
308
- function normalizeLogLevel(logLevel) {
309
- if (!logLevel) {
310
- return 0;
311
- }
312
- let resolvedLevel;
313
- switch (typeof logLevel) {
314
- case "number":
315
- resolvedLevel = logLevel;
316
- break;
317
- case "object":
318
- resolvedLevel = logLevel.logLevel || logLevel.priority || 0;
319
- break;
320
- default:
321
- return 0;
322
- }
323
- assert3(Number.isFinite(resolvedLevel) && resolvedLevel >= 0);
324
- return resolvedLevel;
325
- }
326
- function normalizeArguments(opts) {
327
- const { logLevel, message: message2 } = opts;
328
- opts.logLevel = normalizeLogLevel(logLevel);
329
- const args = opts.args ? Array.from(opts.args) : [];
330
- while (args.length && args.shift() !== message2) {
331
- }
332
- switch (typeof logLevel) {
333
- case "string":
334
- case "function":
335
- if (message2 !== void 0) {
336
- args.unshift(message2);
337
- }
338
- opts.message = logLevel;
339
- break;
340
- case "object":
341
- Object.assign(opts, logLevel);
342
- break;
343
- default:
344
- }
345
- if (typeof opts.message === "function") {
346
- opts.message = opts.message();
347
- }
348
- const messageType = typeof opts.message;
349
- assert3(messageType === "string" || messageType === "object");
350
- return Object.assign(opts, { args }, opts.opts);
351
- }
409
+ // ../../node_modules/@probe.gl/log/dist/loggers/probe-log.js
352
410
  function decorateMessage(id, message2, opts) {
353
411
  if (typeof message2 === "string") {
354
412
  const time = opts.time ? leftPad(formatTime(opts.total)) : "";
@@ -365,10 +423,11 @@ var __exports__ = (() => {
365
423
  }
366
424
  return "empty";
367
425
  }
368
- var originalConsole, DEFAULT_LOG_CONFIGURATION, cache, ONCE, Log;
369
- var init_log = __esm({
370
- "../../node_modules/@probe.gl/log/dist/log.js"() {
426
+ var originalConsole, DEFAULT_LOG_CONFIGURATION, ProbeLog;
427
+ var init_probe_log = __esm({
428
+ "../../node_modules/@probe.gl/log/dist/loggers/probe-log.js"() {
371
429
  init_dist();
430
+ init_base_log();
372
431
  init_local_storage();
373
432
  init_formatters();
374
433
  init_color();
@@ -386,10 +445,9 @@ var __exports__ = (() => {
386
445
  enabled: true,
387
446
  level: 0
388
447
  };
389
- cache = {};
390
- ONCE = { once: true };
391
- Log = class {
448
+ ProbeLog = class extends BaseLog {
392
449
  constructor({ id } = { id: "" }) {
450
+ super({ level: 0 });
393
451
  this.VERSION = VERSION;
394
452
  this._startTs = getHiResTimestamp();
395
453
  this._deltaTs = getHiResTimestamp();
@@ -397,22 +455,16 @@ var __exports__ = (() => {
397
455
  this.LOG_THROTTLE_TIMEOUT = 0;
398
456
  this.id = id;
399
457
  this.userData = {};
400
- this._storage = new LocalStorage(`__probe-${this.id}__`, DEFAULT_LOG_CONFIGURATION);
458
+ this._storage = new LocalStorage(`__probe-${this.id}__`, { [this.id]: DEFAULT_LOG_CONFIGURATION });
401
459
  this.timeStamp(`${this.id} started`);
402
460
  autobind(this);
403
461
  Object.seal(this);
404
462
  }
405
- set level(newLevel) {
406
- this.setLevel(newLevel);
407
- }
408
- get level() {
409
- return this.getLevel();
410
- }
411
463
  isEnabled() {
412
- return this._storage.config.enabled;
464
+ return this._getConfiguration().enabled;
413
465
  }
414
466
  getLevel() {
415
- return this._storage.config.level;
467
+ return this._getConfiguration().level;
416
468
  }
417
469
  /** @return milliseconds, with fractions */
418
470
  getTotal() {
@@ -436,20 +488,20 @@ var __exports__ = (() => {
436
488
  }
437
489
  // Configure
438
490
  enable(enabled = true) {
439
- this._storage.setConfiguration({ enabled });
491
+ this._updateConfiguration({ enabled });
440
492
  return this;
441
493
  }
442
494
  setLevel(level) {
443
- this._storage.setConfiguration({ level });
495
+ this._updateConfiguration({ level });
444
496
  return this;
445
497
  }
446
498
  /** return the current status of the setting */
447
499
  get(setting) {
448
- return this._storage.config[setting];
500
+ return this._getConfiguration()[setting];
449
501
  }
450
502
  // update the status of the setting
451
503
  set(setting, value) {
452
- this._storage.setConfiguration({ [setting]: value });
504
+ this._updateConfiguration({ [setting]: value });
453
505
  }
454
506
  /** Logs the current settings as a table */
455
507
  settings() {
@@ -465,11 +517,16 @@ var __exports__ = (() => {
465
517
  throw new Error(message2 || "Assertion failed");
466
518
  }
467
519
  }
468
- warn(message2) {
469
- return this._getLogFunction(0, message2, originalConsole.warn, arguments, ONCE);
520
+ warn(message2, ...args) {
521
+ return this._log("warn", 0, message2, args, {
522
+ method: originalConsole.warn,
523
+ once: true
524
+ });
470
525
  }
471
- error(message2) {
472
- return this._getLogFunction(0, message2, originalConsole.error, arguments);
526
+ error(message2, ...args) {
527
+ return this._log("error", 0, message2, args, {
528
+ method: originalConsole.error
529
+ });
473
530
  }
474
531
  /** Print a deprecation warning */
475
532
  deprecated(oldUsage, newUsage) {
@@ -479,50 +536,63 @@ var __exports__ = (() => {
479
536
  removed(oldUsage, newUsage) {
480
537
  return this.error(`\`${oldUsage}\` has been removed. Use \`${newUsage}\` instead`);
481
538
  }
482
- probe(logLevel, message2) {
483
- return this._getLogFunction(logLevel, message2, originalConsole.log, arguments, {
539
+ probe(logLevel, message2, ...args) {
540
+ return this._log("log", logLevel, message2, args, {
541
+ method: originalConsole.log,
484
542
  time: true,
485
543
  once: true
486
544
  });
487
545
  }
488
- log(logLevel, message2) {
489
- return this._getLogFunction(logLevel, message2, originalConsole.debug, arguments);
546
+ log(logLevel, message2, ...args) {
547
+ return this._log("log", logLevel, message2, args, {
548
+ method: originalConsole.debug
549
+ });
490
550
  }
491
- info(logLevel, message2) {
492
- return this._getLogFunction(logLevel, message2, console.info, arguments);
551
+ info(logLevel, message2, ...args) {
552
+ return this._log("info", logLevel, message2, args, { method: console.info });
493
553
  }
494
- once(logLevel, message2) {
495
- return this._getLogFunction(logLevel, message2, originalConsole.debug || originalConsole.info, arguments, ONCE);
554
+ once(logLevel, message2, ...args) {
555
+ return this._log("once", logLevel, message2, args, {
556
+ method: originalConsole.debug || originalConsole.info,
557
+ once: true
558
+ });
496
559
  }
497
560
  /** Logs an object as a table */
498
561
  table(logLevel, table, columns) {
499
562
  if (table) {
500
- return this._getLogFunction(logLevel, table, console.table || noop, columns && [columns], {
563
+ return this._log("table", logLevel, table, columns && [columns] || [], {
564
+ method: console.table || noop,
501
565
  tag: getTableHeader(table)
502
566
  });
503
567
  }
504
568
  return noop;
505
569
  }
506
570
  time(logLevel, message2) {
507
- return this._getLogFunction(logLevel, message2, console.time ? console.time : console.info);
571
+ return this._log("time", logLevel, message2, [], {
572
+ method: console.time ? console.time : console.info
573
+ });
508
574
  }
509
575
  timeEnd(logLevel, message2) {
510
- return this._getLogFunction(logLevel, message2, console.timeEnd ? console.timeEnd : console.info);
576
+ return this._log("time", logLevel, message2, [], {
577
+ method: console.timeEnd ? console.timeEnd : console.info
578
+ });
511
579
  }
512
580
  timeStamp(logLevel, message2) {
513
- return this._getLogFunction(logLevel, message2, console.timeStamp || noop);
581
+ return this._log("time", logLevel, message2, [], {
582
+ method: console.timeStamp || noop
583
+ });
514
584
  }
515
585
  group(logLevel, message2, opts = { collapsed: false }) {
516
- const options = normalizeArguments({ logLevel, message: message2, opts });
517
- const { collapsed } = opts;
518
- options.method = (collapsed ? console.groupCollapsed : console.group) || console.info;
519
- return this._getLogFunction(options);
586
+ const method = (opts.collapsed ? console.groupCollapsed : console.group) || console.info;
587
+ return this._log("group", logLevel, message2, [], { method });
520
588
  }
521
589
  groupCollapsed(logLevel, message2, opts = {}) {
522
590
  return this.group(logLevel, message2, Object.assign({}, opts, { collapsed: true }));
523
591
  }
524
592
  groupEnd(logLevel) {
525
- return this._getLogFunction(logLevel, "", console.groupEnd || noop);
593
+ return this._log("groupEnd", logLevel, "", [], {
594
+ method: console.groupEnd || noop
595
+ });
526
596
  }
527
597
  // EXPERIMENTAL
528
598
  withGroup(logLevel, message2, func) {
@@ -538,34 +608,34 @@ var __exports__ = (() => {
538
608
  console.trace();
539
609
  }
540
610
  }
541
- // PRIVATE METHODS
542
- /** Deduces log level from a variety of arguments */
543
611
  _shouldLog(logLevel) {
544
- return this.isEnabled() && this.getLevel() >= normalizeLogLevel(logLevel);
545
- }
546
- _getLogFunction(logLevel, message2, method, args, opts) {
547
- if (this._shouldLog(logLevel)) {
548
- opts = normalizeArguments({ logLevel, message: message2, args, opts });
549
- method = method || opts.method;
550
- assert3(method);
551
- opts.total = this.getTotal();
552
- opts.delta = this.getDelta();
553
- this._deltaTs = getHiResTimestamp();
554
- const tag = opts.tag || opts.message;
555
- if (opts.once && tag) {
556
- if (!cache[tag]) {
557
- cache[tag] = getHiResTimestamp();
558
- } else {
559
- return noop;
560
- }
561
- }
562
- message2 = decorateMessage(this.id, opts.message, opts);
563
- return method.bind(console, message2, ...opts.args);
612
+ return this.isEnabled() && super._shouldLog(logLevel);
613
+ }
614
+ _emit(_type, normalized) {
615
+ const method = normalized.method;
616
+ assert3(method);
617
+ normalized.total = this.getTotal();
618
+ normalized.delta = this.getDelta();
619
+ this._deltaTs = getHiResTimestamp();
620
+ const message2 = decorateMessage(this.id, normalized.message, normalized);
621
+ return method.bind(console, message2, ...normalized.args);
622
+ }
623
+ _getConfiguration() {
624
+ if (!this._storage.config[this.id]) {
625
+ this._updateConfiguration(DEFAULT_LOG_CONFIGURATION);
564
626
  }
565
- return noop;
627
+ return this._storage.config[this.id];
628
+ }
629
+ _updateConfiguration(configuration) {
630
+ const currentConfiguration = this._storage.config[this.id] || {
631
+ ...DEFAULT_LOG_CONFIGURATION
632
+ };
633
+ this._storage.setConfiguration({
634
+ [this.id]: { ...currentConfiguration, ...configuration }
635
+ });
566
636
  }
567
637
  };
568
- Log.VERSION = VERSION;
638
+ ProbeLog.VERSION = VERSION;
569
639
  }
570
640
  });
571
641
 
@@ -580,10 +650,10 @@ var __exports__ = (() => {
580
650
  var dist_default;
581
651
  var init_dist2 = __esm({
582
652
  "../../node_modules/@probe.gl/log/dist/index.js"() {
583
- init_log();
584
- init_log();
653
+ init_probe_log();
654
+ init_probe_log();
585
655
  init_init();
586
- dist_default = new Log({ id: "@probe.gl/log" });
656
+ dist_default = new ProbeLog({ id: "@probe.gl/log" });
587
657
  }
588
658
  });
589
659
 
@@ -828,10 +898,10 @@ var __exports__ = (() => {
828
898
 
829
899
  // ../../node_modules/@luma.gl/core/dist/utils/log.js
830
900
  var log2;
831
- var init_log2 = __esm({
901
+ var init_log = __esm({
832
902
  "../../node_modules/@luma.gl/core/dist/utils/log.js"() {
833
903
  init_dist2();
834
- log2 = new Log({ id: "luma.gl" });
904
+ log2 = new ProbeLog({ id: "luma.gl" });
835
905
  }
836
906
  });
837
907
 
@@ -1593,7 +1663,7 @@ var __exports__ = (() => {
1593
1663
  var init_device = __esm({
1594
1664
  "../../node_modules/@luma.gl/core/dist/adapter/device.js"() {
1595
1665
  init_stats_manager();
1596
- init_log2();
1666
+ init_log();
1597
1667
  init_uid();
1598
1668
  init_buffer();
1599
1669
  init_decode_vertex_format();
@@ -1894,7 +1964,7 @@ or create a device with the 'debug: true' prop.`;
1894
1964
  "../../node_modules/@luma.gl/core/dist/adapter/luma.js"() {
1895
1965
  init_device();
1896
1966
  init_stats_manager();
1897
- init_log2();
1967
+ init_log();
1898
1968
  STARTUP_MESSAGE = "set luma.log.level=1 (or higher) to trace rendering";
1899
1969
  ERROR_MESSAGE = "No matching device found. Ensure `@luma.gl/webgl` and/or `@luma.gl/webgpu` modules are imported.";
1900
1970
  _Luma = class {
@@ -2045,6 +2115,87 @@ or create a device with the 'debug: true' prop.`;
2045
2115
  }
2046
2116
  });
2047
2117
 
2118
+ // ../../node_modules/@probe.gl/env/dist/lib/globals.js
2119
+ var document_4, process_2, console_2, navigator_2;
2120
+ var init_globals2 = __esm({
2121
+ "../../node_modules/@probe.gl/env/dist/lib/globals.js"() {
2122
+ document_4 = globalThis.document || {};
2123
+ process_2 = globalThis.process || {};
2124
+ console_2 = globalThis.console;
2125
+ navigator_2 = globalThis.navigator || {};
2126
+ }
2127
+ });
2128
+
2129
+ // ../../node_modules/@probe.gl/env/dist/lib/is-electron.js
2130
+ function isElectron2(mockUserAgent) {
2131
+ if (typeof window !== "undefined" && window.process?.type === "renderer") {
2132
+ return true;
2133
+ }
2134
+ if (typeof process !== "undefined" && Boolean(process.versions?.["electron"])) {
2135
+ return true;
2136
+ }
2137
+ const realUserAgent = typeof navigator !== "undefined" && navigator.userAgent;
2138
+ const userAgent2 = mockUserAgent || realUserAgent;
2139
+ return Boolean(userAgent2 && userAgent2.indexOf("Electron") >= 0);
2140
+ }
2141
+ var init_is_electron2 = __esm({
2142
+ "../../node_modules/@probe.gl/env/dist/lib/is-electron.js"() {
2143
+ }
2144
+ });
2145
+
2146
+ // ../../node_modules/@probe.gl/env/dist/lib/is-browser.js
2147
+ function isBrowser4() {
2148
+ const isNode = (
2149
+ // @ts-expect-error
2150
+ typeof process === "object" && String(process) === "[object process]" && !process?.browser
2151
+ );
2152
+ return !isNode || isElectron2();
2153
+ }
2154
+ var init_is_browser2 = __esm({
2155
+ "../../node_modules/@probe.gl/env/dist/lib/is-browser.js"() {
2156
+ init_is_electron2();
2157
+ }
2158
+ });
2159
+
2160
+ // ../../node_modules/@probe.gl/env/dist/lib/get-browser.js
2161
+ function getBrowser(mockUserAgent) {
2162
+ if (!mockUserAgent && !isBrowser4()) {
2163
+ return "Node";
2164
+ }
2165
+ if (isElectron2(mockUserAgent)) {
2166
+ return "Electron";
2167
+ }
2168
+ const userAgent2 = mockUserAgent || navigator_2.userAgent || "";
2169
+ if (userAgent2.indexOf("Edge") > -1) {
2170
+ return "Edge";
2171
+ }
2172
+ if (globalThis.chrome) {
2173
+ return "Chrome";
2174
+ }
2175
+ if (globalThis.safari) {
2176
+ return "Safari";
2177
+ }
2178
+ if (globalThis.mozInnerScreenX) {
2179
+ return "Firefox";
2180
+ }
2181
+ return "Unknown";
2182
+ }
2183
+ var init_get_browser = __esm({
2184
+ "../../node_modules/@probe.gl/env/dist/lib/get-browser.js"() {
2185
+ init_is_browser2();
2186
+ init_is_electron2();
2187
+ init_globals2();
2188
+ }
2189
+ });
2190
+
2191
+ // ../../node_modules/@probe.gl/env/dist/index.js
2192
+ var init_dist4 = __esm({
2193
+ "../../node_modules/@probe.gl/env/dist/index.js"() {
2194
+ init_is_browser2();
2195
+ init_get_browser();
2196
+ }
2197
+ });
2198
+
2048
2199
  // ../../node_modules/@luma.gl/core/dist/adapter/adapter.js
2049
2200
  function getPageLoadPromise() {
2050
2201
  if (!pageLoadPromise) {
@@ -2059,7 +2210,7 @@ or create a device with the 'debug: true' prop.`;
2059
2210
  var Adapter, isPage, isPageLoaded, pageLoadPromise;
2060
2211
  var init_adapter = __esm({
2061
2212
  "../../node_modules/@luma.gl/core/dist/adapter/adapter.js"() {
2062
- init_dist();
2213
+ init_dist4();
2063
2214
  Adapter = class {
2064
2215
  /**
2065
2216
  * Page load promise
@@ -2072,7 +2223,7 @@ or create a device with the 'debug: true' prop.`;
2072
2223
  return getPageLoadPromise();
2073
2224
  }
2074
2225
  };
2075
- isPage = isBrowser2() && typeof document !== "undefined";
2226
+ isPage = isBrowser4() && typeof document !== "undefined";
2076
2227
  isPageLoaded = () => isPage && document.readyState === "complete";
2077
2228
  pageLoadPromise = null;
2078
2229
  }
@@ -2162,7 +2313,7 @@ or create a device with the 'debug: true' prop.`;
2162
2313
  var _CanvasContext, CanvasContext;
2163
2314
  var init_canvas_context = __esm({
2164
2315
  "../../node_modules/@luma.gl/core/dist/adapter/canvas-context.js"() {
2165
- init_dist();
2316
+ init_dist4();
2166
2317
  init_uid();
2167
2318
  init_promise_utils();
2168
2319
  _CanvasContext = class {
@@ -2211,7 +2362,7 @@ or create a device with the 'debug: true' prop.`;
2211
2362
  this.props = { ..._CanvasContext.defaultProps, ...props };
2212
2363
  props = this.props;
2213
2364
  this.initialized = this._initializedResolvers.promise;
2214
- if (!isBrowser2()) {
2365
+ if (!isBrowser4()) {
2215
2366
  this.canvas = { width: props.width || 1, height: props.height || 1 };
2216
2367
  } else if (!props.canvas) {
2217
2368
  this.canvas = createCanvasElement(props);
@@ -2497,7 +2648,7 @@ or create a device with the 'debug: true' prop.`;
2497
2648
  "../../node_modules/@luma.gl/core/dist/adapter/resources/texture.js"() {
2498
2649
  init_resource();
2499
2650
  init_sampler();
2500
- init_log2();
2651
+ init_log();
2501
2652
  BASE_DIMENSIONS = {
2502
2653
  "1d": "1d",
2503
2654
  "2d": "2d",
@@ -2916,7 +3067,7 @@ ${htmlLog}
2916
3067
  "../../node_modules/@luma.gl/core/dist/adapter/resources/framebuffer.js"() {
2917
3068
  init_resource();
2918
3069
  init_texture();
2919
- init_log2();
3070
+ init_log();
2920
3071
  _Framebuffer = class extends Resource {
2921
3072
  get [Symbol.toStringTag]() {
2922
3073
  return "Framebuffer";
@@ -3483,7 +3634,7 @@ ${htmlLog}
3483
3634
  }
3484
3635
  var init_get_attribute_from_layouts = __esm({
3485
3636
  "../../node_modules/@luma.gl/core/dist/adapter-utils/get-attribute-from-layouts.js"() {
3486
- init_log2();
3637
+ init_log();
3487
3638
  init_decode_shader_types();
3488
3639
  init_decode_vertex_format();
3489
3640
  }
@@ -3612,7 +3763,7 @@ ${htmlLog}
3612
3763
  init_decode_shader_types();
3613
3764
  init_array_utils_flat();
3614
3765
  init_is_array();
3615
- init_log2();
3766
+ init_log();
3616
3767
  minBufferSize = 1024;
3617
3768
  UniformBufferLayout = class {
3618
3769
  layout = {};
@@ -3773,7 +3924,7 @@ ${htmlLog}
3773
3924
  var init_uniform_store = __esm({
3774
3925
  "../../node_modules/@luma.gl/core/dist/portable/uniform-store.js"() {
3775
3926
  init_buffer();
3776
- init_log2();
3927
+ init_log();
3777
3928
  init_uniform_block();
3778
3929
  init_uniform_buffer_layout();
3779
3930
  UniformStore = class {
@@ -3883,7 +4034,7 @@ ${htmlLog}
3883
4034
  });
3884
4035
 
3885
4036
  // ../../node_modules/@luma.gl/core/dist/index.js
3886
- var init_dist4 = __esm({
4037
+ var init_dist5 = __esm({
3887
4038
  "../../node_modules/@luma.gl/core/dist/index.js"() {
3888
4039
  init_luma();
3889
4040
  init_adapter();
@@ -3908,7 +4059,7 @@ ${htmlLog}
3908
4059
  init_decode_shader_types();
3909
4060
  init_decode_vertex_format();
3910
4061
  init_texture_format_decoder();
3911
- init_log2();
4062
+ init_log();
3912
4063
  init_array_utils_flat();
3913
4064
  init_get_attribute_from_layouts();
3914
4065
  }
@@ -4570,7 +4721,7 @@ ${htmlLog}
4570
4721
  });
4571
4722
 
4572
4723
  // ../../node_modules/@luma.gl/constants/dist/index.js
4573
- var init_dist5 = __esm({
4724
+ var init_dist6 = __esm({
4574
4725
  "../../node_modules/@luma.gl/constants/dist/index.js"() {
4575
4726
  init_webgl_constants();
4576
4727
  }
@@ -4760,7 +4911,7 @@ ${htmlLog}
4760
4911
  var LOG_LEVEL, spector, initialized, DEFAULT_SPECTOR_PROPS;
4761
4912
  var init_spector = __esm({
4762
4913
  "../../node_modules/@luma.gl/webgl/dist/context/debug/spector.js"() {
4763
- init_dist4();
4914
+ init_dist5();
4764
4915
  init_load_script();
4765
4916
  LOG_LEVEL = 1;
4766
4917
  spector = null;
@@ -4782,7 +4933,7 @@ ${htmlLog}
4782
4933
  return gl.luma;
4783
4934
  }
4784
4935
  async function loadWebGLDeveloperTools() {
4785
- if (isBrowser2() && !globalThis.WebGLDebugUtils) {
4936
+ if (isBrowser4() && !globalThis.WebGLDebugUtils) {
4786
4937
  globalThis.global = globalThis.global || globalThis;
4787
4938
  globalThis.global.module = {};
4788
4939
  await loadScript(WEBGL_DEBUG_CDN_URL);
@@ -4853,9 +5004,9 @@ ${htmlLog}
4853
5004
  var WEBGL_DEBUG_CDN_URL;
4854
5005
  var init_webgl_developer_tools = __esm({
4855
5006
  "../../node_modules/@luma.gl/webgl/dist/context/debug/webgl-developer-tools.js"() {
4856
- init_dist4();
4857
5007
  init_dist5();
4858
- init_dist();
5008
+ init_dist6();
5009
+ init_dist4();
4859
5010
  init_load_script();
4860
5011
  WEBGL_DEBUG_CDN_URL = "https://unpkg.com/webgl-debug@2.0.1/index.js";
4861
5012
  }
@@ -4865,8 +5016,8 @@ ${htmlLog}
4865
5016
  function isArray2(array) {
4866
5017
  return Array.isArray(array) || ArrayBuffer.isView(array) && !(array instanceof DataView);
4867
5018
  }
4868
- function getValue(glEnum, values, cache3) {
4869
- return values[glEnum] !== void 0 ? values[glEnum] : cache3[glEnum];
5019
+ function getValue(glEnum, values, cache2) {
5020
+ return values[glEnum] !== void 0 ? values[glEnum] : cache2[glEnum];
4870
5021
  }
4871
5022
  var GL_PARAMETER_DEFAULTS, enable, hint, pixelStorei, bindFramebuffer, bindBuffer, GL_PARAMETER_SETTERS, GL_COMPOSITE_PARAMETER_SETTERS, GL_HOOKED_SETTERS, isEnabled, GL_PARAMETER_GETTERS, NON_CACHE_PARAMETERS;
4872
5023
  var init_webgl_parameter_tables = __esm({
@@ -5122,14 +5273,14 @@ ${htmlLog}
5122
5273
  viewport: (gl, value) => gl.viewport(...value)
5123
5274
  };
5124
5275
  GL_COMPOSITE_PARAMETER_SETTERS = {
5125
- blendEquation: (gl, values, cache3) => gl.blendEquationSeparate(getValue(32777, values, cache3), getValue(34877, values, cache3)),
5126
- blendFunc: (gl, values, cache3) => gl.blendFuncSeparate(getValue(32969, values, cache3), getValue(32968, values, cache3), getValue(32971, values, cache3), getValue(32970, values, cache3)),
5127
- polygonOffset: (gl, values, cache3) => gl.polygonOffset(getValue(32824, values, cache3), getValue(10752, values, cache3)),
5128
- sampleCoverage: (gl, values, cache3) => gl.sampleCoverage(getValue(32938, values, cache3), getValue(32939, values, cache3)),
5129
- stencilFuncFront: (gl, values, cache3) => gl.stencilFuncSeparate(1028, getValue(2962, values, cache3), getValue(2967, values, cache3), getValue(2963, values, cache3)),
5130
- stencilFuncBack: (gl, values, cache3) => gl.stencilFuncSeparate(1029, getValue(34816, values, cache3), getValue(36003, values, cache3), getValue(36004, values, cache3)),
5131
- stencilOpFront: (gl, values, cache3) => gl.stencilOpSeparate(1028, getValue(2964, values, cache3), getValue(2965, values, cache3), getValue(2966, values, cache3)),
5132
- stencilOpBack: (gl, values, cache3) => gl.stencilOpSeparate(1029, getValue(34817, values, cache3), getValue(34818, values, cache3), getValue(34819, values, cache3))
5276
+ blendEquation: (gl, values, cache2) => gl.blendEquationSeparate(getValue(32777, values, cache2), getValue(34877, values, cache2)),
5277
+ blendFunc: (gl, values, cache2) => gl.blendFuncSeparate(getValue(32969, values, cache2), getValue(32968, values, cache2), getValue(32971, values, cache2), getValue(32970, values, cache2)),
5278
+ polygonOffset: (gl, values, cache2) => gl.polygonOffset(getValue(32824, values, cache2), getValue(10752, values, cache2)),
5279
+ sampleCoverage: (gl, values, cache2) => gl.sampleCoverage(getValue(32938, values, cache2), getValue(32939, values, cache2)),
5280
+ stencilFuncFront: (gl, values, cache2) => gl.stencilFuncSeparate(1028, getValue(2962, values, cache2), getValue(2967, values, cache2), getValue(2963, values, cache2)),
5281
+ stencilFuncBack: (gl, values, cache2) => gl.stencilFuncSeparate(1029, getValue(34816, values, cache2), getValue(36003, values, cache2), getValue(36004, values, cache2)),
5282
+ stencilOpFront: (gl, values, cache2) => gl.stencilOpSeparate(1028, getValue(2964, values, cache2), getValue(2965, values, cache2), getValue(2966, values, cache2)),
5283
+ stencilOpBack: (gl, values, cache2) => gl.stencilOpSeparate(1029, getValue(34817, values, cache2), getValue(34818, values, cache2), getValue(34819, values, cache2))
5133
5284
  };
5134
5285
  GL_HOOKED_SETTERS = {
5135
5286
  // GENERIC SETTERS
@@ -5352,11 +5503,11 @@ ${htmlLog}
5352
5503
  }
5353
5504
  }
5354
5505
  }
5355
- const cache3 = gl.state && gl.state.cache;
5356
- if (cache3) {
5506
+ const cache2 = gl.state && gl.state.cache;
5507
+ if (cache2) {
5357
5508
  for (const key in compositeSetters) {
5358
5509
  const compositeSetter = GL_COMPOSITE_PARAMETER_SETTERS[key];
5359
- compositeSetter(gl, parameters2, cache3);
5510
+ compositeSetter(gl, parameters2, cache2);
5360
5511
  }
5361
5512
  }
5362
5513
  }
@@ -5801,7 +5952,7 @@ ${htmlLog}
5801
5952
  var X_S3TC, X_S3TC_SRGB, X_RGTC, X_BPTC, X_ETC2, X_ASTC, X_ETC1, X_PVRTC, X_ATC, EXT_texture_norm16, EXT_render_snorm, EXT_color_buffer_float, TEXTURE_FEATURES, WEBGL_TEXTURE_FORMATS;
5802
5953
  var init_webgl_texture_table = __esm({
5803
5954
  "../../node_modules/@luma.gl/webgl/dist/adapter/converters/webgl-texture-table.js"() {
5804
- init_dist4();
5955
+ init_dist5();
5805
5956
  init_webgl_extensions();
5806
5957
  init_webgl_vertex_formats();
5807
5958
  X_S3TC = "WEBGL_compressed_texture_s3tc";
@@ -5992,7 +6143,7 @@ ${htmlLog}
5992
6143
  var WEBGL_FEATURES, WebGLDeviceFeatures;
5993
6144
  var init_webgl_device_features = __esm({
5994
6145
  "../../node_modules/@luma.gl/webgl/dist/adapter/device-helpers/webgl-device-features.js"() {
5995
- init_dist4();
6146
+ init_dist5();
5996
6147
  init_webgl_extensions();
5997
6148
  init_webgl_texture_table();
5998
6149
  WEBGL_FEATURES = {
@@ -6072,7 +6223,7 @@ ${htmlLog}
6072
6223
  var WebGLDeviceLimits;
6073
6224
  var init_webgl_device_limits = __esm({
6074
6225
  "../../node_modules/@luma.gl/webgl/dist/adapter/device-helpers/webgl-device-limits.js"() {
6075
- init_dist4();
6226
+ init_dist5();
6076
6227
  WebGLDeviceLimits = class extends DeviceLimits {
6077
6228
  get maxTextureDimension1D() {
6078
6229
  return 0;
@@ -6208,7 +6359,7 @@ ${htmlLog}
6208
6359
  var WEBGLFramebuffer;
6209
6360
  var init_webgl_framebuffer = __esm({
6210
6361
  "../../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-framebuffer.js"() {
6211
- init_dist4();
6362
+ init_dist5();
6212
6363
  init_webgl_texture_table();
6213
6364
  WEBGLFramebuffer = class extends Framebuffer {
6214
6365
  device;
@@ -6305,7 +6456,7 @@ ${htmlLog}
6305
6456
  var WebGLCanvasContext;
6306
6457
  var init_webgl_canvas_context = __esm({
6307
6458
  "../../node_modules/@luma.gl/webgl/dist/adapter/webgl-canvas-context.js"() {
6308
- init_dist4();
6459
+ init_dist5();
6309
6460
  init_webgl_framebuffer();
6310
6461
  WebGLCanvasContext = class extends CanvasContext {
6311
6462
  device;
@@ -6372,7 +6523,7 @@ ${htmlLog}
6372
6523
  var WEBGLBuffer;
6373
6524
  var init_webgl_buffer = __esm({
6374
6525
  "../../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-buffer.js"() {
6375
- init_dist4();
6526
+ init_dist5();
6376
6527
  WEBGLBuffer = class extends Buffer2 {
6377
6528
  device;
6378
6529
  gl;
@@ -6534,7 +6685,7 @@ ${htmlLog}
6534
6685
  var WEBGLShader;
6535
6686
  var init_webgl_shader = __esm({
6536
6687
  "../../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-shader.js"() {
6537
- init_dist4();
6688
+ init_dist5();
6538
6689
  init_parse_shader_compiler_log();
6539
6690
  WEBGLShader = class extends Shader {
6540
6691
  device;
@@ -6867,7 +7018,7 @@ ${source4}`;
6867
7018
  }
6868
7019
  var init_device_parameters = __esm({
6869
7020
  "../../node_modules/@luma.gl/webgl/dist/adapter/converters/device-parameters.js"() {
6870
- init_dist4();
7021
+ init_dist5();
6871
7022
  init_unified_parameter_api();
6872
7023
  }
6873
7024
  });
@@ -6959,7 +7110,7 @@ ${source4}`;
6959
7110
  var WEBGLSampler;
6960
7111
  var init_webgl_sampler = __esm({
6961
7112
  "../../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-sampler.js"() {
6962
- init_dist4();
7113
+ init_dist5();
6963
7114
  init_sampler_parameters();
6964
7115
  WEBGLSampler = class extends Sampler {
6965
7116
  device;
@@ -7039,7 +7190,7 @@ ${source4}`;
7039
7190
  var WEBGLTextureView;
7040
7191
  var init_webgl_texture_view = __esm({
7041
7192
  "../../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-texture-view.js"() {
7042
- init_dist4();
7193
+ init_dist5();
7043
7194
  WEBGLTextureView = class extends TextureView {
7044
7195
  device;
7045
7196
  gl;
@@ -7081,7 +7232,7 @@ ${source4}`;
7081
7232
  var WEBGLTexture;
7082
7233
  var init_webgl_texture = __esm({
7083
7234
  "../../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-texture.js"() {
7084
- init_dist4();
7235
+ init_dist5();
7085
7236
  init_webgl_texture_table();
7086
7237
  init_sampler_parameters();
7087
7238
  init_with_parameters();
@@ -7589,7 +7740,7 @@ ${source4}`;
7589
7740
  }
7590
7741
  var init_get_shader_layout_from_glsl = __esm({
7591
7742
  "../../node_modules/@luma.gl/webgl/dist/adapter/helpers/get-shader-layout-from-glsl.js"() {
7592
- init_dist4();
7743
+ init_dist5();
7593
7744
  init_webgl_shadertypes();
7594
7745
  }
7595
7746
  });
@@ -7741,7 +7892,7 @@ ${source4}`;
7741
7892
  var LOG_PROGRAM_PERF_PRIORITY, WEBGLRenderPipeline;
7742
7893
  var init_webgl_render_pipeline = __esm({
7743
7894
  "../../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-render-pipeline.js"() {
7744
- init_dist4();
7895
+ init_dist5();
7745
7896
  init_get_shader_layout_from_glsl();
7746
7897
  init_device_parameters();
7747
7898
  init_set_uniform();
@@ -8241,7 +8392,7 @@ ${source4}`;
8241
8392
  var WEBGLCommandBuffer;
8242
8393
  var init_webgl_command_buffer = __esm({
8243
8394
  "../../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-command-buffer.js"() {
8244
- init_dist4();
8395
+ init_dist5();
8245
8396
  init_webgl_texture();
8246
8397
  init_webgl_texture_table();
8247
8398
  WEBGLCommandBuffer = class extends CommandBuffer {
@@ -8280,7 +8431,7 @@ ${source4}`;
8280
8431
  var COLOR_CHANNELS, WEBGLRenderPass;
8281
8432
  var init_webgl_render_pass = __esm({
8282
8433
  "../../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-render-pass.js"() {
8283
- init_dist4();
8434
+ init_dist5();
8284
8435
  init_with_parameters();
8285
8436
  init_unified_parameter_api();
8286
8437
  COLOR_CHANNELS = [1, 2, 4, 8];
@@ -8437,7 +8588,7 @@ ${source4}`;
8437
8588
  var WEBGLCommandEncoder;
8438
8589
  var init_webgl_command_encoder = __esm({
8439
8590
  "../../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-command-encoder.js"() {
8440
- init_dist4();
8591
+ init_dist5();
8441
8592
  init_webgl_command_buffer();
8442
8593
  init_webgl_render_pass();
8443
8594
  WEBGLCommandEncoder = class extends CommandEncoder {
@@ -8533,8 +8684,8 @@ ${source4}`;
8533
8684
  var WEBGLVertexArray;
8534
8685
  var init_webgl_vertex_array = __esm({
8535
8686
  "../../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-vertex-array.js"() {
8687
+ init_dist5();
8536
8688
  init_dist4();
8537
- init_dist();
8538
8689
  init_webgl_vertex_formats();
8539
8690
  init_fill_array();
8540
8691
  WEBGLVertexArray = class extends VertexArray {
@@ -8724,8 +8875,8 @@ ${source4}`;
8724
8875
  var WEBGLTransformFeedback;
8725
8876
  var init_webgl_transform_feedback = __esm({
8726
8877
  "../../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-transform-feedback.js"() {
8727
- init_dist4();
8728
- init_dist6();
8878
+ init_dist5();
8879
+ init_dist7();
8729
8880
  init_webgl_topology_utils();
8730
8881
  WEBGLTransformFeedback = class extends TransformFeedback {
8731
8882
  device;
@@ -8876,7 +9027,7 @@ ${source4}`;
8876
9027
  var WEBGLQuerySet;
8877
9028
  var init_webgl_query_set = __esm({
8878
9029
  "../../node_modules/@luma.gl/webgl/dist/adapter/resources/webgl-query-set.js"() {
8879
- init_dist4();
9030
+ init_dist5();
8880
9031
  WEBGLQuerySet = class extends QuerySet {
8881
9032
  device;
8882
9033
  handle;
@@ -9183,7 +9334,7 @@ ${source4}`;
9183
9334
  }
9184
9335
  var init_webgl_texture_utils = __esm({
9185
9336
  "../../node_modules/@luma.gl/webgl/dist/adapter/helpers/webgl-texture-utils.js"() {
9186
- init_dist4();
9337
+ init_dist5();
9187
9338
  init_webgl_shadertypes();
9188
9339
  init_format_utils();
9189
9340
  init_shader_formats();
@@ -9232,7 +9383,7 @@ ${source4}`;
9232
9383
  var WebGLDevice;
9233
9384
  var init_webgl_device = __esm({
9234
9385
  "../../node_modules/@luma.gl/webgl/dist/adapter/webgl-device.js"() {
9235
- init_dist4();
9386
+ init_dist5();
9236
9387
  init_webgl_state_tracker();
9237
9388
  init_create_browser_context();
9238
9389
  init_webgl_device_info();
@@ -9582,7 +9733,7 @@ ${source4}`;
9582
9733
  var LOG_LEVEL2, WebGLAdapter, webgl2Adapter;
9583
9734
  var init_webgl_adapter = __esm({
9584
9735
  "../../node_modules/@luma.gl/webgl/dist/adapter/webgl-adapter.js"() {
9585
- init_dist4();
9736
+ init_dist5();
9586
9737
  init_polyfill_webgl1_extensions();
9587
9738
  init_spector();
9588
9739
  init_webgl_developer_tools();
@@ -9668,7 +9819,7 @@ ${source4}`;
9668
9819
  });
9669
9820
 
9670
9821
  // ../../node_modules/@luma.gl/webgl/dist/index.js
9671
- var init_dist6 = __esm({
9822
+ var init_dist7 = __esm({
9672
9823
  "../../node_modules/@luma.gl/webgl/dist/index.js"() {
9673
9824
  init_webgl_adapter();
9674
9825
  init_webgl_device();
@@ -11897,27 +12048,27 @@ ${source4}`;
11897
12048
  var INT_CACHE2 = {};
11898
12049
  var UINT_CACHE2 = {};
11899
12050
  function fromInt2(value, unsigned) {
11900
- var obj, cachedObj, cache3;
12051
+ var obj, cachedObj, cache2;
11901
12052
  if (unsigned) {
11902
12053
  value >>>= 0;
11903
- if (cache3 = 0 <= value && value < 256) {
12054
+ if (cache2 = 0 <= value && value < 256) {
11904
12055
  cachedObj = UINT_CACHE2[value];
11905
12056
  if (cachedObj)
11906
12057
  return cachedObj;
11907
12058
  }
11908
12059
  obj = fromBits2(value, (value | 0) < 0 ? -1 : 0, true);
11909
- if (cache3)
12060
+ if (cache2)
11910
12061
  UINT_CACHE2[value] = obj;
11911
12062
  return obj;
11912
12063
  } else {
11913
12064
  value |= 0;
11914
- if (cache3 = -128 <= value && value < 128) {
12065
+ if (cache2 = -128 <= value && value < 128) {
11915
12066
  cachedObj = INT_CACHE2[value];
11916
12067
  if (cachedObj)
11917
12068
  return cachedObj;
11918
12069
  }
11919
12070
  obj = fromBits2(value, value < 0 ? -1 : 0, false);
11920
- if (cache3)
12071
+ if (cache2)
11921
12072
  INT_CACHE2[value] = obj;
11922
12073
  return obj;
11923
12074
  }
@@ -13337,7 +13488,7 @@ ${source4}`;
13337
13488
  var VERSION2 = true ? "4.3.3" : "latest";
13338
13489
  var version = VERSION2[0] >= "0" && VERSION2[0] <= "9" ? `v${VERSION2}` : "";
13339
13490
  function createLog() {
13340
- const log4 = new Log({ id: "loaders.gl" });
13491
+ const log4 = new ProbeLog({ id: "loaders.gl" });
13341
13492
  globalThis.loaders = globalThis.loaders || {};
13342
13493
  globalThis.loaders.log = log4;
13343
13494
  globalThis.loaders.version = version;
@@ -13416,7 +13567,7 @@ ${source4}`;
13416
13567
  typeof process !== "object" || String(process) !== "[object process]" || process.browser
13417
13568
  );
13418
13569
  var isWorker = typeof importScripts === "function";
13419
- var isMobile2 = typeof window !== "undefined" && typeof window.orientation !== "undefined";
13570
+ var isMobile = typeof window !== "undefined" && typeof window.orientation !== "undefined";
13420
13571
  var matches2 = typeof process !== "undefined" && process.version && /v([0-9]*)/.exec(process.version);
13421
13572
  var nodeVersion2 = matches2 && parseFloat(matches2[1]) || 0;
13422
13573
 
@@ -13798,7 +13949,7 @@ ${source4}`;
13798
13949
  return null;
13799
13950
  }
13800
13951
  _getMaxConcurrency() {
13801
- return isMobile2 ? this.maxMobileConcurrency : this.maxConcurrency;
13952
+ return isMobile ? this.maxMobileConcurrency : this.maxConcurrency;
13802
13953
  }
13803
13954
  };
13804
13955
 
@@ -14777,7 +14928,7 @@ ${source4}`;
14777
14928
 
14778
14929
  // ../core/node_modules/@loaders.gl/core/dist/lib/loader-utils/loggers.js
14779
14930
  init_dist2();
14780
- var probeLog = new Log({ id: "loaders.gl" });
14931
+ var probeLog = new ProbeLog({ id: "loaders.gl" });
14781
14932
  var NullLog = class {
14782
14933
  log() {
14783
14934
  return () => {
@@ -15991,7 +16142,7 @@ ${source4}`;
15991
16142
 
15992
16143
  // ../core/src/utils/log.ts
15993
16144
  init_dist2();
15994
- var defaultLogger = new Log({ id: "deck" });
16145
+ var defaultLogger = new ProbeLog({ id: "deck" });
15995
16146
  var log_default = defaultLogger;
15996
16147
 
15997
16148
  // ../core/src/debug/loggers.ts
@@ -17051,7 +17202,7 @@ void main() {
17051
17202
  }
17052
17203
 
17053
17204
  // ../../node_modules/@luma.gl/shadertools/dist/lib/wgsl/get-shader-layout-wgsl.js
17054
- init_dist4();
17205
+ init_dist5();
17055
17206
 
17056
17207
  // ../../node_modules/wgsl_reflect/wgsl_reflect.module.js
17057
17208
  var e = class {
@@ -29325,7 +29476,7 @@ vec4 picking_filterColor(vec4 color) {
29325
29476
  }
29326
29477
 
29327
29478
  // ../../node_modules/@luma.gl/shadertools/dist/modules/lighting/lights/lighting.js
29328
- init_dist4();
29479
+ init_dist5();
29329
29480
 
29330
29481
  // ../../node_modules/@luma.gl/shadertools/dist/modules/lighting/lights/lighting-glsl.js
29331
29482
  var lightingUniformsGLSL = (
@@ -35898,7 +36049,7 @@ ${fragment}
35898
36049
  };
35899
36050
 
35900
36051
  // ../../node_modules/@luma.gl/engine/dist/animation-loop/animation-loop.js
35901
- init_dist4();
36052
+ init_dist5();
35902
36053
 
35903
36054
  // ../../node_modules/@luma.gl/engine/dist/animation-loop/request-animation-frame.js
35904
36055
  function requestAnimationFramePolyfill(callback) {
@@ -36272,10 +36423,10 @@ ${fragment}
36272
36423
  });
36273
36424
 
36274
36425
  // ../../node_modules/@luma.gl/engine/dist/model/model.js
36275
- init_dist4();
36426
+ init_dist5();
36276
36427
 
36277
36428
  // ../../node_modules/@luma.gl/engine/dist/geometry/gpu-geometry.js
36278
- init_dist4();
36429
+ init_dist5();
36279
36430
 
36280
36431
  // ../../node_modules/@luma.gl/engine/dist/utils/uid.js
36281
36432
  var uidCounters2 = {};
@@ -36382,7 +36533,7 @@ ${fragment}
36382
36533
  }
36383
36534
 
36384
36535
  // ../../node_modules/@luma.gl/engine/dist/factories/pipeline-factory.js
36385
- init_dist4();
36536
+ init_dist5();
36386
36537
  var _PipelineFactory = class {
36387
36538
  /** Get the singleton default pipeline factory for the specified device */
36388
36539
  static getDefaultPipelineFactory(device) {
@@ -36415,23 +36566,23 @@ ${fragment}
36415
36566
  return this.device.createRenderPipeline(props);
36416
36567
  }
36417
36568
  const allProps = { ...RenderPipeline.defaultProps, ...props };
36418
- const cache3 = this._renderPipelineCache;
36569
+ const cache2 = this._renderPipelineCache;
36419
36570
  const hash = this._hashRenderPipeline(allProps);
36420
- let pipeline = cache3[hash]?.pipeline;
36571
+ let pipeline = cache2[hash]?.pipeline;
36421
36572
  if (!pipeline) {
36422
36573
  pipeline = this.device.createRenderPipeline({
36423
36574
  ...allProps,
36424
36575
  id: allProps.id ? `${allProps.id}-cached` : uid2("unnamed-cached")
36425
36576
  });
36426
36577
  pipeline.hash = hash;
36427
- cache3[hash] = { pipeline, useCount: 1 };
36578
+ cache2[hash] = { pipeline, useCount: 1 };
36428
36579
  if (this.debug) {
36429
- log2.log(3, `${this}: ${pipeline} created, count=${cache3[hash].useCount}`)();
36580
+ log2.log(3, `${this}: ${pipeline} created, count=${cache2[hash].useCount}`)();
36430
36581
  }
36431
36582
  } else {
36432
- cache3[hash].useCount++;
36583
+ cache2[hash].useCount++;
36433
36584
  if (this.debug) {
36434
- log2.log(3, `${this}: ${cache3[hash].pipeline} reused, count=${cache3[hash].useCount}, (id=${props.id})`)();
36585
+ log2.log(3, `${this}: ${cache2[hash].pipeline} reused, count=${cache2[hash].useCount}, (id=${props.id})`)();
36435
36586
  }
36436
36587
  }
36437
36588
  return pipeline;
@@ -36442,23 +36593,23 @@ ${fragment}
36442
36593
  return this.device.createComputePipeline(props);
36443
36594
  }
36444
36595
  const allProps = { ...ComputePipeline.defaultProps, ...props };
36445
- const cache3 = this._computePipelineCache;
36596
+ const cache2 = this._computePipelineCache;
36446
36597
  const hash = this._hashComputePipeline(allProps);
36447
- let pipeline = cache3[hash]?.pipeline;
36598
+ let pipeline = cache2[hash]?.pipeline;
36448
36599
  if (!pipeline) {
36449
36600
  pipeline = this.device.createComputePipeline({
36450
36601
  ...allProps,
36451
36602
  id: allProps.id ? `${allProps.id}-cached` : void 0
36452
36603
  });
36453
36604
  pipeline.hash = hash;
36454
- cache3[hash] = { pipeline, useCount: 1 };
36605
+ cache2[hash] = { pipeline, useCount: 1 };
36455
36606
  if (this.debug) {
36456
- log2.log(3, `${this}: ${pipeline} created, count=${cache3[hash].useCount}`)();
36607
+ log2.log(3, `${this}: ${pipeline} created, count=${cache2[hash].useCount}`)();
36457
36608
  }
36458
36609
  } else {
36459
- cache3[hash].useCount++;
36610
+ cache2[hash].useCount++;
36460
36611
  if (this.debug) {
36461
- log2.log(3, `${this}: ${cache3[hash].pipeline} reused, count=${cache3[hash].useCount}, (id=${props.id})`)();
36612
+ log2.log(3, `${this}: ${cache2[hash].pipeline} reused, count=${cache2[hash].useCount}, (id=${props.id})`)();
36462
36613
  }
36463
36614
  }
36464
36615
  return pipeline;
@@ -36468,50 +36619,50 @@ ${fragment}
36468
36619
  pipeline.destroy();
36469
36620
  return;
36470
36621
  }
36471
- const cache3 = this._getCache(pipeline);
36622
+ const cache2 = this._getCache(pipeline);
36472
36623
  const hash = pipeline.hash;
36473
- cache3[hash].useCount--;
36474
- if (cache3[hash].useCount === 0) {
36624
+ cache2[hash].useCount--;
36625
+ if (cache2[hash].useCount === 0) {
36475
36626
  this._destroyPipeline(pipeline);
36476
36627
  if (this.debug) {
36477
36628
  log2.log(3, `${this}: ${pipeline} released and destroyed`)();
36478
36629
  }
36479
- } else if (cache3[hash].useCount < 0) {
36630
+ } else if (cache2[hash].useCount < 0) {
36480
36631
  log2.error(`${this}: ${pipeline} released, useCount < 0, resetting`)();
36481
- cache3[hash].useCount = 0;
36632
+ cache2[hash].useCount = 0;
36482
36633
  } else if (this.debug) {
36483
- log2.log(3, `${this}: ${pipeline} released, count=${cache3[hash].useCount}`)();
36634
+ log2.log(3, `${this}: ${pipeline} released, count=${cache2[hash].useCount}`)();
36484
36635
  }
36485
36636
  }
36486
36637
  // PRIVATE
36487
36638
  /** Destroy a cached pipeline, removing it from the cache (depending on destroy policy) */
36488
36639
  _destroyPipeline(pipeline) {
36489
- const cache3 = this._getCache(pipeline);
36640
+ const cache2 = this._getCache(pipeline);
36490
36641
  switch (this.destroyPolicy) {
36491
36642
  case "never":
36492
36643
  return false;
36493
36644
  case "unused":
36494
- delete cache3[pipeline.hash];
36645
+ delete cache2[pipeline.hash];
36495
36646
  pipeline.destroy();
36496
36647
  return true;
36497
36648
  }
36498
36649
  }
36499
36650
  /** Get the appropriate cache for the type of pipeline */
36500
36651
  _getCache(pipeline) {
36501
- let cache3;
36652
+ let cache2;
36502
36653
  if (pipeline instanceof ComputePipeline) {
36503
- cache3 = this._computePipelineCache;
36654
+ cache2 = this._computePipelineCache;
36504
36655
  }
36505
36656
  if (pipeline instanceof RenderPipeline) {
36506
- cache3 = this._renderPipelineCache;
36657
+ cache2 = this._renderPipelineCache;
36507
36658
  }
36508
- if (!cache3) {
36659
+ if (!cache2) {
36509
36660
  throw new Error(`${this}`);
36510
36661
  }
36511
- if (!cache3[pipeline.hash]) {
36662
+ if (!cache2[pipeline.hash]) {
36512
36663
  throw new Error(`${this}: ${pipeline} matched incorrect entry`);
36513
36664
  }
36514
- return cache3;
36665
+ return cache2;
36515
36666
  }
36516
36667
  /** Calculate a hash based on all the inputs for a compute pipeline */
36517
36668
  _hashComputePipeline(props) {
@@ -36546,7 +36697,7 @@ ${fragment}
36546
36697
  __publicField(PipelineFactory, "defaultProps", { ...RenderPipeline.defaultProps });
36547
36698
 
36548
36699
  // ../../node_modules/@luma.gl/engine/dist/factories/shader-factory.js
36549
- init_dist4();
36700
+ init_dist5();
36550
36701
  var _ShaderFactory = class {
36551
36702
  /** Returns the default ShaderFactory for the given {@link Device}, creating one if necessary. */
36552
36703
  static getDefaultShaderFactory(device) {
@@ -36727,7 +36878,7 @@ ${fragment}
36727
36878
  }
36728
36879
 
36729
36880
  // ../../node_modules/@luma.gl/engine/dist/utils/buffer-layout-helper.js
36730
- init_dist4();
36881
+ init_dist5();
36731
36882
  var BufferLayoutHelper = class {
36732
36883
  bufferLayouts;
36733
36884
  constructor(bufferLayouts) {
@@ -36776,7 +36927,7 @@ ${fragment}
36776
36927
  }
36777
36928
 
36778
36929
  // ../../node_modules/@luma.gl/engine/dist/shader-inputs.js
36779
- init_dist4();
36930
+ init_dist5();
36780
36931
 
36781
36932
  // ../../node_modules/@math.gl/types/dist/is-array.js
36782
36933
  function isTypedArray2(value) {
@@ -36913,7 +37064,7 @@ ${fragment}
36913
37064
  };
36914
37065
 
36915
37066
  // ../../node_modules/@luma.gl/engine/dist/async-texture/async-texture.js
36916
- init_dist4();
37067
+ init_dist5();
36917
37068
 
36918
37069
  // ../../node_modules/@luma.gl/engine/dist/application-utils/load-file.js
36919
37070
  var pathPrefix2 = "";
@@ -37848,7 +37999,7 @@ ${fragment}
37848
37999
  }
37849
38000
 
37850
38001
  // ../../node_modules/@luma.gl/engine/dist/compute/buffer-transform.js
37851
- init_dist4();
38002
+ init_dist5();
37852
38003
  var _BufferTransform = class {
37853
38004
  device;
37854
38005
  model;
@@ -38327,7 +38478,7 @@ ${props.source}` };
38327
38478
  };
38328
38479
 
38329
38480
  // ../../node_modules/@luma.gl/engine/dist/scenegraph/group-node.js
38330
- init_dist4();
38481
+ init_dist5();
38331
38482
  var GroupNode = class extends ScenegraphNode {
38332
38483
  children;
38333
38484
  constructor(props = {}) {
@@ -39461,8 +39612,198 @@ void main() {
39461
39612
  return target2;
39462
39613
  }
39463
39614
 
39464
- // ../core/src/lib/layer-manager.ts
39465
- init_dist3();
39615
+ // ../core/node_modules/@probe.gl/stats/dist/utils/hi-res-timestamp.js
39616
+ function getHiResTimestamp3() {
39617
+ let timestamp;
39618
+ if (typeof window !== "undefined" && window.performance) {
39619
+ timestamp = window.performance.now();
39620
+ } else if (typeof process !== "undefined" && process.hrtime) {
39621
+ const timeParts = process.hrtime();
39622
+ timestamp = timeParts[0] * 1e3 + timeParts[1] / 1e6;
39623
+ } else {
39624
+ timestamp = Date.now();
39625
+ }
39626
+ return timestamp;
39627
+ }
39628
+
39629
+ // ../core/node_modules/@probe.gl/stats/dist/lib/stat.js
39630
+ var Stat2 = class {
39631
+ constructor(name13, type) {
39632
+ this.sampleSize = 1;
39633
+ this.time = 0;
39634
+ this.count = 0;
39635
+ this.samples = 0;
39636
+ this.lastTiming = 0;
39637
+ this.lastSampleTime = 0;
39638
+ this.lastSampleCount = 0;
39639
+ this._count = 0;
39640
+ this._time = 0;
39641
+ this._samples = 0;
39642
+ this._startTime = 0;
39643
+ this._timerPending = false;
39644
+ this.name = name13;
39645
+ this.type = type;
39646
+ this.reset();
39647
+ }
39648
+ reset() {
39649
+ this.time = 0;
39650
+ this.count = 0;
39651
+ this.samples = 0;
39652
+ this.lastTiming = 0;
39653
+ this.lastSampleTime = 0;
39654
+ this.lastSampleCount = 0;
39655
+ this._count = 0;
39656
+ this._time = 0;
39657
+ this._samples = 0;
39658
+ this._startTime = 0;
39659
+ this._timerPending = false;
39660
+ return this;
39661
+ }
39662
+ setSampleSize(samples) {
39663
+ this.sampleSize = samples;
39664
+ return this;
39665
+ }
39666
+ /** Call to increment count (+1) */
39667
+ incrementCount() {
39668
+ this.addCount(1);
39669
+ return this;
39670
+ }
39671
+ /** Call to decrement count (-1) */
39672
+ decrementCount() {
39673
+ this.subtractCount(1);
39674
+ return this;
39675
+ }
39676
+ /** Increase count */
39677
+ addCount(value) {
39678
+ this._count += value;
39679
+ this._samples++;
39680
+ this._checkSampling();
39681
+ return this;
39682
+ }
39683
+ /** Decrease count */
39684
+ subtractCount(value) {
39685
+ this._count -= value;
39686
+ this._samples++;
39687
+ this._checkSampling();
39688
+ return this;
39689
+ }
39690
+ /** Add an arbitrary timing and bump the count */
39691
+ addTime(time) {
39692
+ this._time += time;
39693
+ this.lastTiming = time;
39694
+ this._samples++;
39695
+ this._checkSampling();
39696
+ return this;
39697
+ }
39698
+ /** Start a timer */
39699
+ timeStart() {
39700
+ this._startTime = getHiResTimestamp3();
39701
+ this._timerPending = true;
39702
+ return this;
39703
+ }
39704
+ /** End a timer. Adds to time and bumps the timing count. */
39705
+ timeEnd() {
39706
+ if (!this._timerPending) {
39707
+ return this;
39708
+ }
39709
+ this.addTime(getHiResTimestamp3() - this._startTime);
39710
+ this._timerPending = false;
39711
+ this._checkSampling();
39712
+ return this;
39713
+ }
39714
+ getSampleAverageCount() {
39715
+ return this.sampleSize > 0 ? this.lastSampleCount / this.sampleSize : 0;
39716
+ }
39717
+ /** Calculate average time / count for the previous window */
39718
+ getSampleAverageTime() {
39719
+ return this.sampleSize > 0 ? this.lastSampleTime / this.sampleSize : 0;
39720
+ }
39721
+ /** Calculate counts per second for the previous window */
39722
+ getSampleHz() {
39723
+ return this.lastSampleTime > 0 ? this.sampleSize / (this.lastSampleTime / 1e3) : 0;
39724
+ }
39725
+ getAverageCount() {
39726
+ return this.samples > 0 ? this.count / this.samples : 0;
39727
+ }
39728
+ /** Calculate average time / count */
39729
+ getAverageTime() {
39730
+ return this.samples > 0 ? this.time / this.samples : 0;
39731
+ }
39732
+ /** Calculate counts per second */
39733
+ getHz() {
39734
+ return this.time > 0 ? this.samples / (this.time / 1e3) : 0;
39735
+ }
39736
+ _checkSampling() {
39737
+ if (this._samples === this.sampleSize) {
39738
+ this.lastSampleTime = this._time;
39739
+ this.lastSampleCount = this._count;
39740
+ this.count += this._count;
39741
+ this.time += this._time;
39742
+ this.samples += this._samples;
39743
+ this._time = 0;
39744
+ this._count = 0;
39745
+ this._samples = 0;
39746
+ }
39747
+ }
39748
+ };
39749
+
39750
+ // ../core/node_modules/@probe.gl/stats/dist/lib/stats.js
39751
+ var Stats2 = class {
39752
+ constructor(options) {
39753
+ this.stats = {};
39754
+ this.id = options.id;
39755
+ this.stats = {};
39756
+ this._initializeStats(options.stats);
39757
+ Object.seal(this);
39758
+ }
39759
+ /** Acquire a stat. Create if it doesn't exist. */
39760
+ get(name13, type = "count") {
39761
+ return this._getOrCreate({ name: name13, type });
39762
+ }
39763
+ get size() {
39764
+ return Object.keys(this.stats).length;
39765
+ }
39766
+ /** Reset all stats */
39767
+ reset() {
39768
+ for (const stat of Object.values(this.stats)) {
39769
+ stat.reset();
39770
+ }
39771
+ return this;
39772
+ }
39773
+ forEach(fn) {
39774
+ for (const stat of Object.values(this.stats)) {
39775
+ fn(stat);
39776
+ }
39777
+ }
39778
+ getTable() {
39779
+ const table = {};
39780
+ this.forEach((stat) => {
39781
+ table[stat.name] = {
39782
+ time: stat.time || 0,
39783
+ count: stat.count || 0,
39784
+ average: stat.getAverageTime() || 0,
39785
+ hz: stat.getHz() || 0
39786
+ };
39787
+ });
39788
+ return table;
39789
+ }
39790
+ _initializeStats(stats2 = []) {
39791
+ stats2.forEach((stat) => this._getOrCreate(stat));
39792
+ }
39793
+ _getOrCreate(stat) {
39794
+ const { name: name13, type } = stat;
39795
+ let result = this.stats[name13];
39796
+ if (!result) {
39797
+ if (stat instanceof Stat2) {
39798
+ result = stat;
39799
+ } else {
39800
+ result = new Stat2(name13, type);
39801
+ }
39802
+ this.stats[name13] = result;
39803
+ }
39804
+ return result;
39805
+ }
39806
+ };
39466
39807
 
39467
39808
  // ../core/src/lib/resource/resource.ts
39468
39809
  var Resource2 = class {
@@ -39685,7 +40026,7 @@ void main() {
39685
40026
  shaderAssembler: getShaderAssembler(device?.info?.shadingLanguage || "glsl"),
39686
40027
  defaultShaderModules: [layerUniforms],
39687
40028
  renderPass: void 0,
39688
- stats: stats2 || new Stats({ id: "deck.gl" }),
40029
+ stats: stats2 || new Stats2({ id: "deck.gl" }),
39689
40030
  // Make sure context.viewport is not empty on the first layer initialization
39690
40031
  viewport: viewport || new Viewport({ id: "DEFAULT-INITIAL-VIEWPORT" }),
39691
40032
  // Current viewport, exposed to layers for project* function
@@ -43455,10 +43796,9 @@ void main() {
43455
43796
  };
43456
43797
 
43457
43798
  // ../core/src/lib/deck.ts
43458
- init_dist4();
43459
- init_dist6();
43460
43799
  init_dist5();
43461
- init_dist3();
43800
+ init_dist7();
43801
+ init_dist6();
43462
43802
  function noop3() {
43463
43803
  }
43464
43804
  var getCursor = ({ isDragging }) => isDragging ? "grabbing" : "grab";
@@ -43532,7 +43872,7 @@ void main() {
43532
43872
  isHovering: false,
43533
43873
  isDragging: false
43534
43874
  };
43535
- this.stats = new Stats({ id: "deck.gl" });
43875
+ this.stats = new Stats2({ id: "deck.gl" });
43536
43876
  this.metrics = {
43537
43877
  fps: 0,
43538
43878
  setPropsTime: 0,
@@ -44234,10 +44574,10 @@ void main() {
44234
44574
  Deck.VERSION = VERSION5;
44235
44575
 
44236
44576
  // ../core/src/lib/attribute/data-column.ts
44237
- init_dist4();
44577
+ init_dist5();
44238
44578
 
44239
44579
  // ../core/src/lib/attribute/gl-utils.ts
44240
- init_dist4();
44580
+ init_dist5();
44241
44581
  function typedArrayFromDataType(type) {
44242
44582
  switch (type) {
44243
44583
  case "float64":
@@ -45160,7 +45500,7 @@ void main() {
45160
45500
  };
45161
45501
 
45162
45502
  // ../core/src/transitions/gpu-interpolation-transition.ts
45163
- init_dist5();
45503
+ init_dist6();
45164
45504
 
45165
45505
  // ../core/src/utils/array-utils.ts
45166
45506
  function padArrayChunk(options) {
@@ -45234,7 +45574,7 @@ void main() {
45234
45574
  }
45235
45575
 
45236
45576
  // ../core/src/transitions/gpu-transition-utils.ts
45237
- init_dist5();
45577
+ init_dist6();
45238
45578
  function cloneAttribute(attribute) {
45239
45579
  const { device, settings, value } = attribute;
45240
45580
  const newAttribute = new Attribute(device, settings);
@@ -46120,8 +46460,8 @@ void main(void) {
46120
46460
  };
46121
46461
 
46122
46462
  // ../core/src/lib/layer.ts
46123
- init_dist4();
46124
- init_dist6();
46463
+ init_dist5();
46464
+ init_dist7();
46125
46465
 
46126
46466
  // ../core/src/transitions/cpu-interpolation-transition.ts
46127
46467
  var CPUInterpolationTransition = class extends Transition {
@@ -46494,7 +46834,7 @@ void main(void) {
46494
46834
  }
46495
46835
 
46496
46836
  // ../core/src/utils/texture.ts
46497
- init_dist4();
46837
+ init_dist5();
46498
46838
  var DEFAULT_TEXTURE_PARAMETERS = {
46499
46839
  minFilter: "linear",
46500
46840
  mipmapFilter: "linear",
@@ -48963,7 +49303,7 @@ void main(void) {
48963
49303
  let { startZoom, startZoomPosition } = this.getState();
48964
49304
  if (!startZoomPosition) {
48965
49305
  startZoom = this.getViewportProps().zoom;
48966
- startZoomPosition = this._unproject(startPos) || this._unproject(pos);
49306
+ startZoomPosition = this._unproject(startPos || pos);
48967
49307
  }
48968
49308
  if (!startZoomPosition) {
48969
49309
  return this;
@@ -49028,9 +49368,13 @@ void main(void) {
49028
49368
  });
49029
49369
  }
49030
49370
  /* Private methods */
49371
+ _project(pos) {
49372
+ const viewport = this.makeViewport(this.getViewportProps());
49373
+ return viewport.project(pos);
49374
+ }
49031
49375
  _unproject(pos) {
49032
49376
  const viewport = this.makeViewport(this.getViewportProps());
49033
- return pos && viewport.unproject(pos);
49377
+ return viewport.unproject(pos);
49034
49378
  }
49035
49379
  // Calculates new zoom
49036
49380
  _calculateNewZoom({
@@ -49045,10 +49389,11 @@ void main(void) {
49045
49389
  return clamp(zoom, minZoom, maxZoom);
49046
49390
  }
49047
49391
  _panFromCenter(offset) {
49048
- const { width, height, target: target2 } = this.getViewportProps();
49392
+ const { target: target2 } = this.getViewportProps();
49393
+ const center2 = this._project(target2);
49049
49394
  return this.pan({
49050
49395
  startPosition: target2,
49051
- pos: [width / 2 + offset[0], height / 2 + offset[1]]
49396
+ pos: [center2[0] + offset[0], center2[1] + offset[1]]
49052
49397
  });
49053
49398
  }
49054
49399
  _getUpdatedState(newProps) {
@@ -49353,7 +49698,7 @@ void main(void) {
49353
49698
  };
49354
49699
 
49355
49700
  // ../core/src/utils/tesselator.ts
49356
- init_dist4();
49701
+ init_dist5();
49357
49702
  var Tesselator = class {
49358
49703
  constructor(opts) {
49359
49704
  this.indexStarts = [0];
@@ -50493,8 +50838,8 @@ void main(void) {
50493
50838
  var self_3 = globals3.self || globals3.window || globals3.global || {};
50494
50839
  var window_5 = globals3.window || globals3.self || globals3.global || {};
50495
50840
  var global_4 = globals3.global || globals3.self || globals3.window || {};
50496
- var document_4 = globals3.document || {};
50497
- var isBrowser4 = (
50841
+ var document_5 = globals3.document || {};
50842
+ var isBrowser5 = (
50498
50843
  // @ts-ignore process does not exist on browser
50499
50844
  Boolean(typeof process !== "object" || String(process) !== "[object process]" || process.browser)
50500
50845
  );
@@ -50553,8 +50898,8 @@ void main(void) {
50553
50898
  var self_4 = globals4.self || globals4.window || globals4.global || {};
50554
50899
  var window_6 = globals4.window || globals4.self || globals4.global || {};
50555
50900
  var global_5 = globals4.global || globals4.self || globals4.window || {};
50556
- var document_5 = globals4.document || {};
50557
- var isBrowser5 = (
50901
+ var document_6 = globals4.document || {};
50902
+ var isBrowser6 = (
50558
50903
  // @ts-ignore process.browser
50559
50904
  typeof process !== "object" || String(process) !== "[object process]" || process.browser
50560
50905
  );
@@ -50704,7 +51049,7 @@ void main(void) {
50704
51049
  _loadableURL = "";
50705
51050
  /** Checks if workers are supported on this platform */
50706
51051
  static isSupported() {
50707
- return typeof Worker !== "undefined" && isBrowser5 || typeof NodeWorker2 !== "undefined" && !isBrowser5;
51052
+ return typeof Worker !== "undefined" && isBrowser6 || typeof NodeWorker2 !== "undefined" && !isBrowser6;
50708
51053
  }
50709
51054
  constructor(props) {
50710
51055
  const { name: name13, source: source4, url } = props;
@@ -50714,7 +51059,7 @@ void main(void) {
50714
51059
  this.url = url;
50715
51060
  this.onMessage = NOOP2;
50716
51061
  this.onError = (error) => console.log(error);
50717
- this.worker = isBrowser5 ? this._createBrowserWorker() : this._createNodeWorker();
51062
+ this.worker = isBrowser6 ? this._createBrowserWorker() : this._createNodeWorker();
50718
51063
  }
50719
51064
  /**
50720
51065
  * Terminate this worker thread
@@ -50910,7 +51255,7 @@ void main(void) {
50910
51255
  const shouldDestroyWorker = (
50911
51256
  // Workers on Node.js prevent the process from exiting.
50912
51257
  // Until we figure out how to close them before exit, we always destroy them
50913
- !isBrowser5 || // If the pool is destroyed, there is no reason to keep the worker around
51258
+ !isBrowser6 || // If the pool is destroyed, there is no reason to keep the worker around
50914
51259
  this.isDestroyed || // If the app has disabled worker reuse, any completed workers should be destroyed
50915
51260
  !this.reuseWorkers || // If concurrency has been lowered, this worker might be surplus to requirements
50916
51261
  this.count > this._getMaxConcurrency()
@@ -51030,13 +51375,13 @@ void main(void) {
51030
51375
  // ../../node_modules/@loaders.gl/core/node_modules/@loaders.gl/worker-utils/dist/lib/worker-api/get-worker-url.js
51031
51376
  function getWorkerURL2(worker, options = {}) {
51032
51377
  const workerOptions = options[worker.id] || {};
51033
- const workerFile = isBrowser5 ? `${worker.id}-worker.js` : `${worker.id}-worker-node.js`;
51378
+ const workerFile = isBrowser6 ? `${worker.id}-worker.js` : `${worker.id}-worker-node.js`;
51034
51379
  let url = workerOptions.workerUrl;
51035
51380
  if (!url && worker.id === "compression") {
51036
51381
  url = options.workerUrl;
51037
51382
  }
51038
51383
  if (options._workerType === "test") {
51039
- if (isBrowser5) {
51384
+ if (isBrowser6) {
51040
51385
  url = `modules/${worker.module}/dist/${workerFile}`;
51041
51386
  } else {
51042
51387
  url = `modules/${worker.module}/src/workers/${worker.id}-worker-node.ts`;
@@ -51069,7 +51414,7 @@ void main(void) {
51069
51414
  if (!WorkerFarm2.isSupported()) {
51070
51415
  return false;
51071
51416
  }
51072
- if (!isBrowser5 && !options?._nodeWorkers) {
51417
+ if (!isBrowser6 && !options?._nodeWorkers) {
51073
51418
  return false;
51074
51419
  }
51075
51420
  return loader.worker && options?.worker;
@@ -51576,7 +51921,7 @@ void main(void) {
51576
51921
 
51577
51922
  // ../../node_modules/@loaders.gl/core/dist/lib/loader-utils/loggers.js
51578
51923
  init_dist2();
51579
- var probeLog2 = new Log({ id: "loaders.gl" });
51924
+ var probeLog2 = new ProbeLog({ id: "loaders.gl" });
51580
51925
  var NullLog2 = class {
51581
51926
  log() {
51582
51927
  return () => {
@@ -51630,7 +51975,7 @@ void main(void) {
51630
51975
  // How many worker instances should be created for each loader.
51631
51976
  maxMobileConcurrency: 1,
51632
51977
  // How many worker instances should be created for each loader on mobile devices.
51633
- reuseWorkers: isBrowser4,
51978
+ reuseWorkers: isBrowser5,
51634
51979
  // By default reuse workers in browser (Node.js refuses to terminate if browsers are running)
51635
51980
  _nodeWorkers: false,
51636
51981
  // By default do not support node workers
@@ -51802,7 +52147,7 @@ void main(void) {
51802
52147
 
51803
52148
  // ../../node_modules/@loaders.gl/core/dist/lib/utils/log.js
51804
52149
  init_dist2();
51805
- var log3 = new Log({ id: "loaders.gl" });
52150
+ var log3 = new ProbeLog({ id: "loaders.gl" });
51806
52151
 
51807
52152
  // ../../node_modules/@loaders.gl/core/dist/lib/api/select-loader.js
51808
52153
  var EXT_PATTERN2 = /\.([^.]+)$/;
@@ -52035,7 +52380,7 @@ void main(void) {
52035
52380
 
52036
52381
  // ../../node_modules/@loaders.gl/core/dist/iterators/make-iterator/make-stream-iterator.js
52037
52382
  function makeStreamIterator2(stream, options) {
52038
- return isBrowser4 ? makeBrowserStreamIterator2(stream, options) : makeNodeStreamIterator2(stream, options);
52383
+ return isBrowser5 ? makeBrowserStreamIterator2(stream, options) : makeNodeStreamIterator2(stream, options);
52039
52384
  }
52040
52385
  async function* makeBrowserStreamIterator2(stream, options) {
52041
52386
  const reader = stream.getReader();
@@ -55084,6 +55429,8 @@ void main(void) {
55084
55429
  vec2 offset = (rotationMatrix * positions.xy * strokeOffsetRatio + column.offset) * dotRadius;
55085
55430
  if (column.radiusUnits == UNIT_METERS) {
55086
55431
  offset = project_size(offset);
55432
+ } else if (column.radiusUnits == UNIT_PIXELS) {
55433
+ offset = project_pixel_size(offset);
55087
55434
  }
55088
55435
  vec3 pos = vec3(offset, 0.);
55089
55436
  DECKGL_FILTER_SIZE(pos, geometry);
@@ -57277,12 +57624,16 @@ void main(void) {
57277
57624
  updateState(params) {
57278
57625
  super.updateState(params);
57279
57626
  const { props, oldProps } = params;
57280
- let { outlineColor } = props;
57627
+ const { outlineColor } = props;
57281
57628
  if (outlineColor !== oldProps.outlineColor) {
57282
- outlineColor = outlineColor.map((x3) => x3 / 255);
57283
- outlineColor[3] = Number.isFinite(outlineColor[3]) ? outlineColor[3] : 1;
57629
+ const normalizedOutlineColor = [
57630
+ outlineColor[0] / 255,
57631
+ outlineColor[1] / 255,
57632
+ outlineColor[2] / 255,
57633
+ (outlineColor[3] ?? 255) / 255
57634
+ ];
57284
57635
  this.setState({
57285
- outlineColor
57636
+ outlineColor: normalizedOutlineColor
57286
57637
  });
57287
57638
  }
57288
57639
  if (!props.sdf && props.outlineWidth) {
@@ -57731,7 +58082,7 @@ void main(void) {
57731
58082
  var BASELINE_SCALE = 0.9;
57732
58083
  var HEIGHT_SCALE = 1.2;
57733
58084
  var CACHE_LIMIT = 3;
57734
- var cache2 = new LRUCache(CACHE_LIMIT);
58085
+ var cache = new LRUCache(CACHE_LIMIT);
57735
58086
  function getNewChars(cacheKey, characterSet) {
57736
58087
  let newCharSet;
57737
58088
  if (typeof characterSet === "string") {
@@ -57739,7 +58090,7 @@ void main(void) {
57739
58090
  } else {
57740
58091
  newCharSet = new Set(characterSet);
57741
58092
  }
57742
- const cachedFontAtlas = cache2.get(cacheKey);
58093
+ const cachedFontAtlas = cache.get(cacheKey);
57743
58094
  if (!cachedFontAtlas) {
57744
58095
  return newCharSet;
57745
58096
  }
@@ -57763,7 +58114,7 @@ void main(void) {
57763
58114
  }
57764
58115
  function setFontAtlasCacheLimit(limit) {
57765
58116
  log_default.assert(Number.isFinite(limit) && limit >= CACHE_LIMIT, "Invalid cache limit");
57766
- cache2 = new LRUCache(limit);
58117
+ cache = new LRUCache(limit);
57767
58118
  }
57768
58119
  var FontAtlasManager = class {
57769
58120
  constructor() {
@@ -57788,7 +58139,7 @@ void main(void) {
57788
58139
  Object.assign(this.props, props);
57789
58140
  this._key = this._getKey();
57790
58141
  const charSet = getNewChars(this._key, this.props.characterSet);
57791
- const cachedFontAtlas = cache2.get(this._key);
58142
+ const cachedFontAtlas = cache.get(this._key);
57792
58143
  if (cachedFontAtlas && charSet.size === 0) {
57793
58144
  if (this._atlas !== cachedFontAtlas) {
57794
58145
  this._atlas = cachedFontAtlas;
@@ -57797,7 +58148,7 @@ void main(void) {
57797
58148
  }
57798
58149
  const fontAtlas = this._generateFontAtlas(charSet, cachedFontAtlas);
57799
58150
  this._atlas = fontAtlas;
57800
- cache2.set(this._key, fontAtlas);
58151
+ cache.set(this._key, fontAtlas);
57801
58152
  }
57802
58153
  // eslint-disable-next-line max-statements
57803
58154
  _generateFontAtlas(characterSet, cachedFontAtlas) {
@@ -58124,7 +58475,12 @@ void main(void) {
58124
58475
  padding = [padding[0], padding[1], padding[0], padding[1]];
58125
58476
  }
58126
58477
  if (!Array.isArray(borderRadius)) {
58127
- borderRadius = [borderRadius, borderRadius, borderRadius, borderRadius];
58478
+ borderRadius = [
58479
+ borderRadius,
58480
+ borderRadius,
58481
+ borderRadius,
58482
+ borderRadius
58483
+ ];
58128
58484
  }
58129
58485
  const model = this.state.model;
58130
58486
  const textBackgroundProps = {
@@ -65412,7 +65768,7 @@ out float vTime;
65412
65768
  H3ClusterLayer.defaultProps = defaultProps27;
65413
65769
 
65414
65770
  // ../mesh-layers/src/simple-mesh-layer/simple-mesh-layer.ts
65415
- init_dist4();
65771
+ init_dist5();
65416
65772
 
65417
65773
  // ../mesh-layers/src/utils/matrix.ts
65418
65774
  var RADIAN_PER_DEGREE = Math.PI / 180;
@@ -65862,7 +66218,7 @@ void main(void) {
65862
66218
  SimpleMeshLayer.layerName = "SimpleMeshLayer";
65863
66219
 
65864
66220
  // ../../node_modules/@luma.gl/gltf/dist/parsers/parse-pbr-material.js
65865
- init_dist4();
66221
+ init_dist5();
65866
66222
 
65867
66223
  // ../../node_modules/@luma.gl/gltf/dist/webgl-to-webgpu/convert-webgl-sampler.js
65868
66224
  function convertSampler(gltfSampler) {
@@ -66073,7 +66429,7 @@ void main(void) {
66073
66429
  }
66074
66430
 
66075
66431
  // ../../node_modules/@luma.gl/gltf/dist/gltf/create-gltf-model.js
66076
- init_dist4();
66432
+ init_dist5();
66077
66433
  var SHADER = (
66078
66434
  /* WGSL */
66079
66435
  `
@@ -66311,10 +66667,10 @@ layout(0) positions: vec4; // in vec4 POSITION;
66311
66667
  }
66312
66668
 
66313
66669
  // ../../node_modules/@luma.gl/gltf/dist/gltf/gltf-animator.js
66314
- init_dist4();
66670
+ init_dist5();
66315
66671
 
66316
66672
  // ../../node_modules/@luma.gl/gltf/dist/gltf/animations/interpolate.js
66317
- init_dist4();
66673
+ init_dist5();
66318
66674
  var scratchQuaternion = new Quaternion();
66319
66675
  function interpolate(time, { input, interpolation, output }, target2, path) {
66320
66676
  const maxTime = input[input.length - 1];
@@ -76217,27 +76573,27 @@ void main(void) {
76217
76573
  var INT_CACHE = {};
76218
76574
  var UINT_CACHE = {};
76219
76575
  function fromInt(value, unsigned) {
76220
- var obj, cachedObj, cache3;
76576
+ var obj, cachedObj, cache2;
76221
76577
  if (unsigned) {
76222
76578
  value >>>= 0;
76223
- if (cache3 = 0 <= value && value < 256) {
76579
+ if (cache2 = 0 <= value && value < 256) {
76224
76580
  cachedObj = UINT_CACHE[value];
76225
76581
  if (cachedObj)
76226
76582
  return cachedObj;
76227
76583
  }
76228
76584
  obj = fromBits(value, 0, true);
76229
- if (cache3)
76585
+ if (cache2)
76230
76586
  UINT_CACHE[value] = obj;
76231
76587
  return obj;
76232
76588
  } else {
76233
76589
  value |= 0;
76234
- if (cache3 = -128 <= value && value < 128) {
76590
+ if (cache2 = -128 <= value && value < 128) {
76235
76591
  cachedObj = INT_CACHE[value];
76236
76592
  if (cachedObj)
76237
76593
  return cachedObj;
76238
76594
  }
76239
76595
  obj = fromBits(value, value < 0 ? -1 : 0, false);
76240
- if (cache3)
76596
+ if (cache2)
76241
76597
  INT_CACHE[value] = obj;
76242
76598
  return obj;
76243
76599
  }
@@ -80059,13 +80415,19 @@ vec4 project_position_to_clipspace(
80059
80415
  inject: {
80060
80416
  "vs:#decl": `
80061
80417
  in vec2 instanceDashArrays;
80418
+ #ifdef HIGH_PRECISION_DASH
80062
80419
  in float instanceDashOffsets;
80420
+ #endif
80063
80421
  out vec2 vDashArray;
80064
80422
  out float vDashOffset;
80065
80423
  `,
80066
80424
  "vs:#main-end": `
80067
80425
  vDashArray = instanceDashArrays;
80426
+ #ifdef HIGH_PRECISION_DASH
80068
80427
  vDashOffset = instanceDashOffsets / width.x;
80428
+ #else
80429
+ vDashOffset = 0.0;
80430
+ #endif
80069
80431
  `,
80070
80432
  "fs:#decl": `
80071
80433
  uniform pathStyleUniforms {
@@ -80172,8 +80534,12 @@ in float instanceOffsets;
80172
80534
  return null;
80173
80535
  }
80174
80536
  let result = {};
80537
+ const defines2 = {};
80175
80538
  if (extension.opts.dash) {
80176
80539
  result = mergeShaders(result, dashShaders);
80540
+ if (extension.opts.highPrecisionDash) {
80541
+ defines2.HIGH_PRECISION_DASH = true;
80542
+ }
80177
80543
  }
80178
80544
  if (extension.opts.offset) {
80179
80545
  result = mergeShaders(result, offsetShaders);
@@ -80188,7 +80554,8 @@ in float instanceOffsets;
80188
80554
  }
80189
80555
  };
80190
80556
  return {
80191
- modules: [pathStyle]
80557
+ modules: [pathStyle],
80558
+ defines: defines2
80192
80559
  };
80193
80560
  }
80194
80561
  initializeState(context, extension) {
@@ -80199,17 +80566,13 @@ in float instanceOffsets;
80199
80566
  if (extension.opts.dash) {
80200
80567
  attributeManager.addInstanced({
80201
80568
  instanceDashArrays: { size: 2, accessor: "getDashArray" },
80202
- instanceDashOffsets: extension.opts.highPrecisionDash ? {
80203
- size: 1,
80204
- accessor: "getPath",
80205
- transform: extension.getDashOffsets.bind(this)
80206
- } : {
80207
- size: 1,
80208
- update: (attribute) => {
80209
- attribute.constant = true;
80210
- attribute.value = [0];
80569
+ ...extension.opts.highPrecisionDash ? {
80570
+ instanceDashOffsets: {
80571
+ size: 1,
80572
+ accessor: "getPath",
80573
+ transform: extension.getDashOffsets.bind(this)
80211
80574
  }
80212
- }
80575
+ } : {}
80213
80576
  });
80214
80577
  }
80215
80578
  if (extension.opts.offset) {
@@ -81662,7 +82025,7 @@ if ((terrain.mode == TERRAIN_MODE_USE_COVER) || (terrain.mode == TERRAIN_MODE_US
81662
82025
  };
81663
82026
 
81664
82027
  // ../extensions/src/terrain/utils.ts
81665
- init_dist5();
82028
+ init_dist6();
81666
82029
  function createRenderTarget(device, opts) {
81667
82030
  return device.createFramebuffer({
81668
82031
  id: opts.id,
@@ -83908,8 +84271,8 @@ if ((terrain.mode == TERRAIN_MODE_USE_COVER) || (terrain.mode == TERRAIN_MODE_US
83908
84271
  setDefaultDeviceProps: () => setDefaultDeviceProps,
83909
84272
  stats: () => stats
83910
84273
  });
83911
- init_dist4();
83912
- init_dist4();
84274
+ init_dist5();
84275
+ init_dist5();
83913
84276
  var {
83914
84277
  stats,
83915
84278
  getSupportedAdapters,
@@ -88537,7 +88900,10 @@ void main() {
88537
88900
  if (colorDomain && aggregation === "SUM") {
88538
88901
  const { viewport: viewport2 } = this.context;
88539
88902
  const metersPerPixel = viewport2.distanceScales.metersPerUnit[2] * (commonBounds[2] - commonBounds[0]) / textureSize;
88540
- this.state.colorDomain = colorDomain.map((x3) => x3 * metersPerPixel * weightsScale);
88903
+ this.state.colorDomain = [
88904
+ colorDomain[0] * metersPerPixel * weightsScale,
88905
+ colorDomain[1] * metersPerPixel * weightsScale
88906
+ ];
88541
88907
  } else {
88542
88908
  this.state.colorDomain = colorDomain || DEFAULT_COLOR_DOMAIN;
88543
88909
  }
@@ -88626,10 +88992,11 @@ void main() {
88626
88992
  HeatmapLayer.defaultProps = defaultProps47;
88627
88993
 
88628
88994
  // ../google-maps/src/google-maps-overlay.ts
88629
- init_dist5();
88630
88995
  init_dist6();
88996
+ init_dist7();
88631
88997
 
88632
88998
  // ../google-maps/src/utils.ts
88999
+ var POSITIONING_CONTAINER_ID = "deck-gl-google-maps-container";
88633
89000
  var MAX_LATITUDE2 = 85.05113;
88634
89001
  function createDeckInstance(map3, overlay, deck, props) {
88635
89002
  if (deck) {
@@ -88647,7 +89014,8 @@ void main() {
88647
89014
  };
88648
89015
  const newDeck = new Deck({
88649
89016
  ...props,
88650
- useDevicePixels: props.interleaved ? true : props.useDevicePixels,
89017
+ // Default to true for high-DPI displays, but allow user override
89018
+ useDevicePixels: props.useDevicePixels ?? true,
88651
89019
  style: props.interleaved ? null : { pointerEvents: "none" },
88652
89020
  parent: getContainer2(overlay, props.style),
88653
89021
  views: new MapView({ repeat: true }),
@@ -88672,10 +89040,12 @@ void main() {
88672
89040
  const container = document.createElement("div");
88673
89041
  container.style.position = "absolute";
88674
89042
  Object.assign(container.style, style);
88675
- if ("getPanes" in overlay) {
89043
+ const googleMapsContainer = overlay.getMap().getDiv();
89044
+ const positioningContainer = googleMapsContainer.querySelector(`#${POSITIONING_CONTAINER_ID}`);
89045
+ if (positioningContainer) {
89046
+ positioningContainer.appendChild(container);
89047
+ } else if ("getPanes" in overlay) {
88676
89048
  overlay.getPanes()?.overlayLayer.appendChild(container);
88677
- } else {
88678
- overlay.getMap()?.getDiv().appendChild(container);
88679
89049
  }
88680
89050
  return container;
88681
89051
  }
@@ -88854,6 +89224,7 @@ void main() {
88854
89224
  this._map = null;
88855
89225
  this._deck = null;
88856
89226
  this._overlay = null;
89227
+ this._positioningOverlay = null;
88857
89228
  this.setProps({ ...defaultProps48, ...props });
88858
89229
  }
88859
89230
  /* Public API */
@@ -88868,6 +89239,7 @@ void main() {
88868
89239
  this._overlay.requestRedraw();
88869
89240
  }
88870
89241
  this._overlay?.setMap(null);
89242
+ this._positioningOverlay?.setMap(null);
88871
89243
  this._map = null;
88872
89244
  }
88873
89245
  if (map3) {
@@ -88919,30 +89291,45 @@ void main() {
88919
89291
  }
88920
89292
  /* Private API */
88921
89293
  _createOverlay(map3) {
88922
- const { interleaved } = this.props;
88923
89294
  const { VECTOR, UNINITIALIZED } = google.maps.RenderingType;
88924
89295
  const renderingType = map3.getRenderingType();
88925
89296
  if (renderingType === UNINITIALIZED) {
88926
89297
  return;
88927
89298
  }
88928
89299
  const isVectorMap = renderingType === VECTOR && google.maps.WebGLOverlayView;
88929
- const OverlayView = isVectorMap ? google.maps.WebGLOverlayView : google.maps.OverlayView;
88930
- const overlay = new OverlayView();
88931
- if (overlay instanceof google.maps.WebGLOverlayView) {
88932
- if (interleaved) {
88933
- overlay.onAdd = noop7;
88934
- overlay.onContextRestored = this._onContextRestored.bind(this);
88935
- overlay.onDraw = this._onDrawVectorInterleaved.bind(this);
88936
- } else {
88937
- overlay.onAdd = this._onAdd.bind(this);
88938
- overlay.onContextRestored = noop7;
88939
- overlay.onDraw = this._onDrawVectorOverlay.bind(this);
88940
- }
88941
- overlay.onContextLost = this._onContextLost.bind(this);
89300
+ if (isVectorMap) {
89301
+ this._createOverlayVector(map3);
88942
89302
  } else {
88943
- overlay.onAdd = this._onAdd.bind(this);
88944
- overlay.draw = this._onDrawRaster.bind(this);
89303
+ this._createOverlayRaster(map3);
88945
89304
  }
89305
+ }
89306
+ /**
89307
+ * Create overlays for vector maps.
89308
+ * Uses OverlayView for DOM positioning (correct z-index) and
89309
+ * WebGLOverlayView for camera data (smooth animations).
89310
+ * In interleaved mode, WebGLOverlayView also provides the shared GL context.
89311
+ */
89312
+ _createOverlayVector(map3) {
89313
+ const interleaved = this.props.interleaved ?? defaultProps48.interleaved;
89314
+ const positioningOverlay = new google.maps.OverlayView();
89315
+ positioningOverlay.onAdd = this._onAddVectorOverlay.bind(this);
89316
+ positioningOverlay.draw = this._updateContainerSize.bind(this);
89317
+ positioningOverlay.onRemove = this._onRemove.bind(this);
89318
+ this._positioningOverlay = positioningOverlay;
89319
+ this._positioningOverlay.setMap(map3);
89320
+ const overlay = new google.maps.WebGLOverlayView();
89321
+ overlay.onAdd = noop7;
89322
+ overlay.onContextRestored = interleaved ? this._onContextRestored.bind(this) : noop7;
89323
+ overlay.onDraw = this._onDrawVector.bind(this);
89324
+ overlay.onContextLost = interleaved ? this._onContextLost.bind(this) : noop7;
89325
+ overlay.onRemove = interleaved ? this._onRemove.bind(this) : noop7;
89326
+ this._overlay = overlay;
89327
+ this._overlay.setMap(map3);
89328
+ }
89329
+ _createOverlayRaster(map3) {
89330
+ const overlay = new google.maps.OverlayView();
89331
+ overlay.onAdd = this._onAdd.bind(this);
89332
+ overlay.draw = this._onDrawRaster.bind(this);
88946
89333
  overlay.onRemove = this._onRemove.bind(this);
88947
89334
  this._overlay = overlay;
88948
89335
  this._overlay.setMap(map3);
@@ -88950,6 +89337,33 @@ void main() {
88950
89337
  _onAdd() {
88951
89338
  this._deck = createDeckInstance(this._map, this._overlay, this._deck, this.props);
88952
89339
  }
89340
+ _onAddVectorOverlay() {
89341
+ const overlay = this._positioningOverlay;
89342
+ const panes = overlay.getPanes();
89343
+ if (panes) {
89344
+ const container = document.createElement("div");
89345
+ container.id = POSITIONING_CONTAINER_ID;
89346
+ container.style.position = "absolute";
89347
+ panes.overlayLayer.appendChild(container);
89348
+ }
89349
+ this._deck = createDeckInstance(this._map, overlay, this._deck, this.props);
89350
+ }
89351
+ _updateContainerSize() {
89352
+ if (!this._map)
89353
+ return;
89354
+ const container = this._map.getDiv().querySelector(`#${POSITIONING_CONTAINER_ID}`);
89355
+ if (!container)
89356
+ return;
89357
+ const mapContainer = this._map.getDiv().firstChild;
89358
+ if (!mapContainer)
89359
+ return;
89360
+ const width = mapContainer.offsetWidth;
89361
+ const height = mapContainer.offsetHeight;
89362
+ container.style.width = `${width}px`;
89363
+ container.style.height = `${height}px`;
89364
+ container.style.left = `${-width / 2}px`;
89365
+ container.style.top = `${-height / 2}px`;
89366
+ }
88953
89367
  _onContextRestored({ gl }) {
88954
89368
  if (!this._map || !this._overlay) {
88955
89369
  return;
@@ -89009,19 +89423,18 @@ void main() {
89009
89423
  });
89010
89424
  deck.redraw();
89011
89425
  }
89012
- // Vector code path
89013
- _onDrawVectorInterleaved({ gl, transformer }) {
89426
+ _onDrawVector({ gl, transformer }) {
89014
89427
  if (!this._deck || !this._map) {
89015
89428
  return;
89016
89429
  }
89017
89430
  const deck = this._deck;
89431
+ const { interleaved } = this.props;
89018
89432
  deck.setProps({
89019
89433
  ...getViewPropsFromCoordinateTransformer(this._map, transformer),
89020
89434
  // Using external gl context - do not set css size
89021
- width: null,
89022
- height: null
89435
+ ...interleaved && { width: null, height: null }
89023
89436
  });
89024
- if (deck.isInitialized) {
89437
+ if (interleaved && deck.isInitialized) {
89025
89438
  const device = deck.device;
89026
89439
  if (device instanceof WebGLDevice) {
89027
89440
  const _framebuffer = device.getParametersWebGL(GLEnum.FRAMEBUFFER_BINDING);
@@ -89040,18 +89453,10 @@ void main() {
89040
89453
  });
89041
89454
  });
89042
89455
  }
89456
+ } else if (!interleaved) {
89457
+ deck.redraw();
89043
89458
  }
89044
89459
  }
89045
- _onDrawVectorOverlay({ transformer }) {
89046
- if (!this._deck || !this._map) {
89047
- return;
89048
- }
89049
- const deck = this._deck;
89050
- deck.setProps({
89051
- ...getViewPropsFromCoordinateTransformer(this._map, transformer)
89052
- });
89053
- deck.redraw();
89054
- }
89055
89460
  };
89056
89461
 
89057
89462
  // ../mapbox/src/deck-utils.ts
@@ -90745,6 +91150,15 @@ void main() {
90745
91150
  }
90746
91151
 
90747
91152
  // ../widgets/src/lib/components/dropdown-menu.tsx
91153
+ function getMenuItemValue(item) {
91154
+ return typeof item === "string" ? item : item.value;
91155
+ }
91156
+ function getMenuItemLabel(item) {
91157
+ return typeof item === "string" ? item : item.label;
91158
+ }
91159
+ function getMenuItemIcon(item) {
91160
+ return typeof item === "string" ? void 0 : item.icon;
91161
+ }
90748
91162
  var DropdownMenu = (props) => {
90749
91163
  const [isOpen, setIsOpen] = h3(false);
90750
91164
  const dropdownRef = A4(null);
@@ -90760,74 +91174,37 @@ void main() {
90760
91174
  document.removeEventListener("mousedown", handleClickOutside);
90761
91175
  };
90762
91176
  }, []);
90763
- const handleSelect = (value) => {
90764
- props.onSelect(value);
91177
+ const handleSelect = (item) => {
91178
+ props.onSelect(getMenuItemValue(item));
90765
91179
  setIsOpen(false);
90766
91180
  };
90767
- return /* @__PURE__ */ u4(
90768
- "div",
90769
- {
90770
- className: "dropdown-container",
90771
- ref: dropdownRef,
90772
- style: {
90773
- position: "relative",
90774
- display: "inline-block",
90775
- ...props.style
90776
- },
90777
- children: [
90778
- /* @__PURE__ */ u4(
90779
- "button",
90780
- {
90781
- onClick: toggleDropdown,
90782
- style: {
90783
- width: "30px",
90784
- height: "30px",
90785
- display: "flex",
90786
- alignItems: "center",
90787
- justifyContent: "center",
90788
- border: "1px solid #ccc",
90789
- borderRadius: "4px",
90790
- background: "#fff",
90791
- cursor: "pointer",
90792
- padding: 0
90793
- },
90794
- children: "\u25BC"
90795
- }
90796
- ),
90797
- isOpen && /* @__PURE__ */ u4(
90798
- "ul",
90799
- {
90800
- style: {
90801
- position: "absolute",
90802
- top: "100%",
90803
- right: "100%",
90804
- background: "#fff",
90805
- border: "1px solid #ccc",
90806
- borderRadius: "4px",
90807
- listStyle: "none",
90808
- padding: "4px 0",
90809
- margin: 0,
90810
- zIndex: 1e3,
90811
- minWidth: "200px"
90812
- },
90813
- children: props.menuItems.map((item) => /* @__PURE__ */ u4(
90814
- "li",
91181
+ if (props.menuItems.length === 0) {
91182
+ return null;
91183
+ }
91184
+ return /* @__PURE__ */ u4("div", { className: "deck-widget-dropdown-container", ref: dropdownRef, style: props.style, children: [
91185
+ /* @__PURE__ */ u4("button", { className: "deck-widget-dropdown-button", onClick: toggleDropdown, children: /* @__PURE__ */ u4("span", { className: `deck-widget-dropdown-icon ${isOpen ? "open" : ""}` }) }),
91186
+ isOpen && /* @__PURE__ */ u4("ul", { className: "deck-widget-dropdown-menu", children: props.menuItems.map((item) => {
91187
+ const icon = getMenuItemIcon(item);
91188
+ return /* @__PURE__ */ u4(
91189
+ "li",
91190
+ {
91191
+ className: "deck-widget-dropdown-item",
91192
+ onClick: () => handleSelect(item),
91193
+ children: [
91194
+ icon && /* @__PURE__ */ u4(
91195
+ "span",
90815
91196
  {
90816
- onClick: () => handleSelect(item),
90817
- style: {
90818
- padding: "4px 8px",
90819
- cursor: "pointer",
90820
- whiteSpace: "nowrap"
90821
- },
90822
- children: item
90823
- },
90824
- item
90825
- ))
90826
- }
90827
- )
90828
- ]
90829
- }
90830
- );
91197
+ className: "deck-widget-dropdown-item-icon",
91198
+ style: { maskImage: `url("${icon}")`, WebkitMaskImage: `url("${icon}")` }
91199
+ }
91200
+ ),
91201
+ getMenuItemLabel(item)
91202
+ ]
91203
+ },
91204
+ getMenuItemValue(item)
91205
+ );
91206
+ }) })
91207
+ ] });
90831
91208
  };
90832
91209
 
90833
91210
  // ../widgets/src/lib/geocode/geocoder-history.ts
@@ -91020,6 +91397,12 @@ void main() {
91020
91397
 
91021
91398
  // ../widgets/src/geocoder-widget.tsx
91022
91399
  var CURRENT_LOCATION2 = "current";
91400
+ var LOCATION_ICON = `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 -960 960 960'%3E%3Cpath d='M480-480q33 0 56.5-23.5T560-560q0-33-23.5-56.5T480-640q-33 0-56.5 23.5T400-560q0 33 23.5 56.5T480-480Zm0 294q122-112 181-203.5T720-552q0-109-69.5-178.5T480-800q-101 0-170.5 69.5T240-552q0 71 59 162.5T480-186Zm0 106Q319-217 239.5-334.5T160-552q0-150 96.5-239T480-880q127 0 223.5 89T800-552q0 100-79.5 217.5T480-80Z'/%3E%3C/svg%3E`;
91401
+ var CURRENT_LOCATION_ITEM = {
91402
+ label: "Current location",
91403
+ value: CURRENT_LOCATION2,
91404
+ icon: LOCATION_ICON
91405
+ };
91023
91406
  var GeocoderWidget = class extends Widget {
91024
91407
  constructor(props = {}) {
91025
91408
  super(props);
@@ -91028,6 +91411,7 @@ void main() {
91028
91411
  this.geocodeHistory = new GeocoderHistory({});
91029
91412
  this.addressText = "";
91030
91413
  this.geocoder = CoordinatesGeocoder;
91414
+ this.isGettingLocation = false;
91031
91415
  this.setInput = (text) => {
91032
91416
  this.addressText = text;
91033
91417
  };
@@ -91036,23 +91420,48 @@ void main() {
91036
91420
  this.handleSubmit();
91037
91421
  }
91038
91422
  };
91039
- this.handleSelect = (address) => {
91040
- this.setInput(address);
91041
- this.handleSubmit();
91423
+ this.handleSelect = (value) => {
91424
+ if (value === CURRENT_LOCATION2) {
91425
+ this.getCurrentLocation();
91426
+ } else {
91427
+ this.setInput(value);
91428
+ this.handleSubmit();
91429
+ }
91042
91430
  };
91043
91431
  /** Sync wrapper for async geocode() */
91044
91432
  this.handleSubmit = () => {
91045
91433
  this.geocode(this.addressText);
91046
91434
  };
91435
+ /** Get current location via browser geolocation API */
91436
+ this.getCurrentLocation = async () => {
91437
+ this.isGettingLocation = true;
91438
+ if (this.rootElement) {
91439
+ this.updateHTML();
91440
+ }
91441
+ try {
91442
+ const coordinates = await CurrentLocationGeocoder.geocode();
91443
+ if (coordinates) {
91444
+ this.setViewState(coordinates);
91445
+ }
91446
+ } catch (error) {
91447
+ this.geocodeHistory.errorText = error instanceof Error ? error.message : "Location error";
91448
+ } finally {
91449
+ this.isGettingLocation = false;
91450
+ if (this.rootElement) {
91451
+ this.updateHTML();
91452
+ }
91453
+ }
91454
+ };
91047
91455
  /** Perform geocoding */
91048
91456
  this.geocode = async (address) => {
91049
- const useGeolocation = this.props._geolocation && address === CURRENT_LOCATION2;
91050
- const geocoder = useGeolocation ? CurrentLocationGeocoder : this.geocoder;
91051
91457
  const coordinates = await this.geocodeHistory.geocode(
91052
- geocoder,
91458
+ this.geocoder,
91053
91459
  this.addressText,
91054
91460
  this.props.apiKey
91055
91461
  );
91462
+ if (this.rootElement) {
91463
+ this.updateHTML();
91464
+ }
91056
91465
  if (coordinates) {
91057
91466
  this.setViewState(coordinates);
91058
91467
  }
@@ -91070,53 +91479,23 @@ void main() {
91070
91479
  super.setProps(props);
91071
91480
  }
91072
91481
  onRenderHTML(rootElement) {
91073
- const menuItems = this.props._geolocation ? [CURRENT_LOCATION2, ...this.geocodeHistory.addressHistory] : [...this.geocodeHistory.addressHistory];
91482
+ const menuItems = this.props._geolocation ? [CURRENT_LOCATION_ITEM, ...this.geocodeHistory.addressHistory] : [...this.geocodeHistory.addressHistory];
91074
91483
  B3(
91075
- /* @__PURE__ */ u4(
91076
- "div",
91077
- {
91078
- className: "deck-widget-geocoder",
91079
- style: {
91080
- pointerEvents: "auto",
91081
- display: "flex",
91082
- alignItems: "center",
91083
- flexWrap: "wrap"
91084
- // Allows wrapping on smaller screens
91085
- },
91086
- children: [
91087
- /* @__PURE__ */ u4(
91088
- "input",
91089
- {
91090
- type: "text",
91091
- placeholder: this.geocoder.placeholderLocation ?? "Enter address or location",
91092
- value: this.geocodeHistory.addressText,
91093
- onInput: (e6) => this.setInput(e6.target?.value || ""),
91094
- onKeyPress: this.handleKeyPress,
91095
- style: {
91096
- flex: "1 1 auto",
91097
- minWidth: "200px",
91098
- margin: 0,
91099
- padding: "8px",
91100
- boxSizing: "border-box"
91101
- }
91102
- }
91103
- ),
91104
- /* @__PURE__ */ u4(
91105
- DropdownMenu,
91106
- {
91107
- menuItems,
91108
- onSelect: this.handleSelect,
91109
- style: {
91110
- margin: 2,
91111
- padding: "4px 2px",
91112
- boxSizing: "border-box"
91113
- }
91114
- }
91115
- ),
91116
- this.geocodeHistory.errorText && /* @__PURE__ */ u4("div", { className: "error", children: this.geocodeHistory.errorText })
91117
- ]
91118
- }
91119
- ),
91484
+ /* @__PURE__ */ u4("div", { className: "deck-widget-geocoder", children: [
91485
+ /* @__PURE__ */ u4(
91486
+ "input",
91487
+ {
91488
+ className: "deck-widget-geocoder-input",
91489
+ type: "text",
91490
+ placeholder: this.isGettingLocation ? "Finding your location..." : this.geocoder.placeholderLocation ?? "Enter address or location",
91491
+ value: this.geocodeHistory.addressText,
91492
+ onInput: (e6) => this.setInput(e6.target?.value || ""),
91493
+ onKeyPress: this.handleKeyPress
91494
+ }
91495
+ ),
91496
+ /* @__PURE__ */ u4(DropdownMenu, { menuItems, onSelect: this.handleSelect }),
91497
+ this.geocodeHistory.errorText && /* @__PURE__ */ u4("div", { className: "deck-widget-geocoder-error", children: this.geocodeHistory.errorText })
91498
+ ] }),
91120
91499
  rootElement
91121
91500
  );
91122
91501
  }
@@ -91972,7 +92351,13 @@ void main() {
91972
92351
  "--button-text": "rgb(24, 24, 26, 1)",
91973
92352
  "--icon-compass-north-color": "rgb(240, 92, 68)",
91974
92353
  "--icon-compass-south-color": "rgb(204, 204, 204)",
91975
- "--menu-gap": "4px"
92354
+ "--menu-gap": "4px",
92355
+ "--menu-background": "#fff",
92356
+ "--menu-backdrop-filter": "unset",
92357
+ "--menu-border": "unset",
92358
+ "--menu-shadow": "0px 0px 8px 0px rgba(0, 0, 0, 0.25)",
92359
+ "--menu-text": "rgb(24, 24, 26, 1)",
92360
+ "--menu-item-hover": "rgba(0, 0, 0, 0.08)"
91976
92361
  };
91977
92362
  var DarkTheme = {
91978
92363
  "--widget-margin": "12px",
@@ -91988,7 +92373,13 @@ void main() {
91988
92373
  "--button-text": "rgb(215, 214, 229, 1)",
91989
92374
  "--icon-compass-north-color": "rgb(240, 92, 68)",
91990
92375
  "--icon-compass-south-color": "rgb(200, 199, 209)",
91991
- "--menu-gap": "4px"
92376
+ "--menu-gap": "4px",
92377
+ "--menu-background": "rgba(18, 18, 20, 1)",
92378
+ "--menu-backdrop-filter": "unset",
92379
+ "--menu-border": "unset",
92380
+ "--menu-shadow": "0px 0px 8px 0px rgba(0, 0, 0, 0.25)",
92381
+ "--menu-text": "rgb(215, 214, 229, 1)",
92382
+ "--menu-item-hover": "rgba(255, 255, 255, 0.1)"
91992
92383
  };
91993
92384
  var LightGlassTheme = {
91994
92385
  "--widget-margin": "12px",
@@ -92004,7 +92395,13 @@ void main() {
92004
92395
  "--button-text": "rgb(24, 24, 26, 1)",
92005
92396
  "--icon-compass-north-color": "rgb(240, 92, 68)",
92006
92397
  "--icon-compass-south-color": "rgb(204, 204, 204)",
92007
- "--menu-gap": "4px"
92398
+ "--menu-gap": "4px",
92399
+ "--menu-background": "rgba(255, 255, 255, 0.6)",
92400
+ "--menu-backdrop-filter": "blur(4px)",
92401
+ "--menu-border": "1px solid rgba(255, 255, 255, 0.6)",
92402
+ "--menu-shadow": "0px 0px 8px 0px rgba(0, 0, 0, 0.25), 0px 0px 8px 0px rgba(0, 0, 0, 0.1) inset",
92403
+ "--menu-text": "rgb(24, 24, 26, 1)",
92404
+ "--menu-item-hover": "rgba(0, 0, 0, 0.08)"
92008
92405
  };
92009
92406
  var DarkGlassTheme = {
92010
92407
  "--widget-margin": "12px",
@@ -92020,7 +92417,13 @@ void main() {
92020
92417
  "--button-text": "rgb(215, 214, 229, 1)",
92021
92418
  "--icon-compass-north-color": "rgb(240, 92, 68)",
92022
92419
  "--icon-compass-south-color": "rgb(200, 199, 209)",
92023
- "--menu-gap": "4px"
92420
+ "--menu-gap": "4px",
92421
+ "--menu-background": "rgba(18, 18, 20, 0.75)",
92422
+ "--menu-backdrop-filter": "blur(4px)",
92423
+ "--menu-border": "1px solid rgba(18, 18, 20, 0.75)",
92424
+ "--menu-shadow": "0px 0px 8px 0px rgba(0, 0, 0, 0.25), 0px 0px 8px 0px rgba(0, 0, 0, 0.1) inset",
92425
+ "--menu-text": "rgb(215, 214, 229, 1)",
92426
+ "--menu-item-hover": "rgba(255, 255, 255, 0.1)"
92024
92427
  };
92025
92428
 
92026
92429
  // ../widgets/src/theme-widget.tsx
@@ -92200,7 +92603,7 @@ void main() {
92200
92603
  };
92201
92604
 
92202
92605
  // ../widgets/src/stats-widget.tsx
92203
- init_dist4();
92606
+ init_dist5();
92204
92607
  var RIGHT_ARROW = "\u25B6";
92205
92608
  var DOWN_ARROW = "\u2B07";
92206
92609
  var DEFAULT_COUNT_FORMATTER = (stat) => `${stat.name}: ${stat.count}`;