@nika-js/onlymap 0.5.12 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE.md +2 -0
  3. package/README.md +19 -7
  4. package/THIRD-PARTY-LICENSES.md +27 -0
  5. package/dist/{LercDecode.es-C97NsRLr.js → LercDecode.es-CJnypw8j.js} +1 -1
  6. package/dist/{basemap-kc0aQNqr.js → basemap-DrQ0-eyR.js} +1 -1
  7. package/dist/cityjson-D_V5GY8b.js +332 -0
  8. package/dist/crs-Ciu7Xs7a.js +108 -0
  9. package/dist/crs.d.ts +50 -0
  10. package/dist/ctx.d.ts +8 -1
  11. package/dist/elements/om-map.d.ts +26 -2
  12. package/dist/elements/om-overlay.d.ts +1 -1
  13. package/dist/elements/om-widget.d.ts +4 -0
  14. package/dist/feature-colors.d.ts +41 -0
  15. package/dist/{geoparquet-Dn1BypCS.js → geoparquet-Dix4lTNy.js} +1 -1
  16. package/dist/html-data.d.ts +1 -1
  17. package/dist/ifc-Dc-TdSJr.js +877 -0
  18. package/dist/ifc.d.ts +406 -0
  19. package/dist/{index-aBiHCzy-.js → index-1UgNlfGR.js} +20944 -18922
  20. package/dist/{index-BoUIm-jd.js → index-BQMjW5w0.js} +1 -1
  21. package/dist/{index-BcG3m2rF.js → index-B_1PPJgC.js} +1 -1
  22. package/dist/{index-DA_aop8u.js → index-CAuT5j9Y.js} +2 -2
  23. package/dist/{index-Dc-ZLLo8.js → index-CXPaeisL.js} +1 -1
  24. package/dist/index.d.ts +8 -0
  25. package/dist/layer-registry.d.ts +14 -0
  26. package/dist/layers/bim-layer.d.ts +104 -0
  27. package/dist/layers/feature-mesh-layer.d.ts +288 -0
  28. package/dist/layers/gltf-scene-walk.d.ts +55 -0
  29. package/dist/{lerc-74-SNPeU.js → lerc-CbTjQ7uI.js} +2 -2
  30. package/dist/license.d.ts +29 -5
  31. package/dist/meshopt_simplifier-Co6uRDDA.js +370 -0
  32. package/dist/onlymap.standalone.js +58057 -54751
  33. package/dist/onlymapjs.js +69 -67
  34. package/dist/programmatic.d.ts +22 -2
  35. package/dist/{raster-VyHCbPXy.js → raster-0b0nSHUh.js} +2 -2
  36. package/dist/{raster-pipeline-CGQTOUjw.js → raster-pipeline-D8siq7-4.js} +1 -1
  37. package/dist/react/om-overlay.d.ts +9 -0
  38. package/dist/react.js +144 -144
  39. package/dist/runtime-core.d.ts +110 -3
  40. package/dist/selection.d.ts +33 -0
  41. package/dist/site-placement.d.ts +85 -0
  42. package/dist/testing.d.ts +6 -2
  43. package/dist/tile3d-metadata.d.ts +185 -0
  44. package/dist/version.d.ts +1 -1
  45. package/dist/widget-registry.d.ts +11 -0
  46. package/dist/widgets/ifc-clash.d.ts +18 -0
  47. package/dist/widgets/ifc.d.ts +41 -0
  48. package/dist/{zarr-DddHNVim.js → zarr-DCYro_Vs.js} +79 -66
  49. package/docs/3d-assets.md +3 -3
  50. package/docs/live-data.md +2 -2
  51. package/docs/stories.md +1 -1
  52. package/docs/testing.md +2 -2
  53. package/llms.txt +3 -3
  54. package/onlymapjs.html-data.json +152 -0
  55. package/package.json +7 -2
  56. package/skills/onlymapjs/SKILL.md +4 -2
  57. package/skills/onlymapjs/references/react.md +1 -1
  58. package/skills/onlymapjs/references/syntax.md +299 -12
  59. package/dist/cityjson-urQeujQv.js +0 -407
@@ -1,5 +1,5 @@
1
- import { A as ur, d as lr, R as zt, e as fr, m as dr, p as St, f as hr, g as pr, h as mr } from "./raster-pipeline-CGQTOUjw.js";
2
- import { ap as gr } from "./index-aBiHCzy-.js";
1
+ import { A as ur, d as lr, R as zt, e as fr, m as dr, p as St, f as hr, g as pr, h as mr } from "./raster-pipeline-D8siq7-4.js";
2
+ import { ap as gr } from "./index-1UgNlfGR.js";
3
3
  import $t from "./index-CW1n5LdO.js";
4
4
  var Et;
5
5
  function h(e, t, n) {
@@ -48,7 +48,7 @@ class zn extends Error {
48
48
  }
49
49
  (Et = globalThis).__zod_globalConfig ?? (Et.__zod_globalConfig = {});
50
50
  const et = globalThis.__zod_globalConfig;
51
- function L(e) {
51
+ function M(e) {
52
52
  return et;
53
53
  }
54
54
  function Sn(e) {
@@ -396,7 +396,7 @@ const st = (e) => (t, n, r, o) => {
396
396
  if (i instanceof Promise)
397
397
  throw new ee();
398
398
  if (i.issues.length) {
399
- const a = new (o?.Err ?? e)(i.issues.map((c) => D(c, s, L())));
399
+ const a = new (o?.Err ?? e)(i.issues.map((c) => D(c, s, M())));
400
400
  throw $n(a, o?.callee), a;
401
401
  }
402
402
  return i.value;
@@ -404,7 +404,7 @@ const st = (e) => (t, n, r, o) => {
404
404
  const s = r ? { ...r, async: !0 } : { async: !0 };
405
405
  let i = t._zod.run({ value: n, issues: [] }, s);
406
406
  if (i instanceof Promise && (i = await i), i.issues.length) {
407
- const a = new (o?.Err ?? e)(i.issues.map((c) => D(c, s, L())));
407
+ const a = new (o?.Err ?? e)(i.issues.map((c) => D(c, s, M())));
408
408
  throw $n(a, o?.callee), a;
409
409
  }
410
410
  return i.value;
@@ -414,14 +414,14 @@ const st = (e) => (t, n, r, o) => {
414
414
  throw new ee();
415
415
  return s.issues.length ? {
416
416
  success: !1,
417
- error: new (e ?? In)(s.issues.map((i) => D(i, o, L())))
417
+ error: new (e ?? In)(s.issues.map((i) => D(i, o, M())))
418
418
  } : { success: !0, data: s.value };
419
419
  }, Cr = /* @__PURE__ */ Pe(Zn), je = (e) => async (t, n, r) => {
420
420
  const o = r ? { ...r, async: !0 } : { async: !0 };
421
421
  let s = t._zod.run({ value: n, issues: [] }, o);
422
422
  return s instanceof Promise && (s = await s), s.issues.length ? {
423
423
  success: !1,
424
- error: new e(s.issues.map((i) => D(i, o, L())))
424
+ error: new e(s.issues.map((i) => D(i, o, M())))
425
425
  } : { success: !0, data: s.value };
426
426
  }, Pr = /* @__PURE__ */ je(Zn), jr = (e) => (t, n, r) => {
427
427
  const o = r ? { ...r, direction: "backward" } : { direction: "backward" };
@@ -429,7 +429,7 @@ const st = (e) => (t, n, r, o) => {
429
429
  }, xr = (e) => (t, n, r) => st(e)(t, n, r), Rr = (e) => async (t, n, r) => {
430
430
  const o = r ? { ...r, direction: "backward" } : { direction: "backward" };
431
431
  return it(e)(t, n, o);
432
- }, Mr = (e) => async (t, n, r) => it(e)(t, n, r), Lr = (e) => (t, n, r) => {
432
+ }, Lr = (e) => async (t, n, r) => it(e)(t, n, r), Mr = (e) => (t, n, r) => {
433
433
  const o = r ? { ...r, direction: "backward" } : { direction: "backward" };
434
434
  return Pe(e)(t, n, o);
435
435
  }, Dr = (e) => (t, n, r) => Pe(e)(t, n, r), Ur = (e) => async (t, n, r) => {
@@ -925,9 +925,9 @@ const Io = {
925
925
  t.pattern ?? (t.pattern = Jr), z.init(e, t);
926
926
  }), Ro = /* @__PURE__ */ h("$ZodULID", (e, t) => {
927
927
  t.pattern ?? (t.pattern = Vr), z.init(e, t);
928
- }), Mo = /* @__PURE__ */ h("$ZodXID", (e, t) => {
928
+ }), Lo = /* @__PURE__ */ h("$ZodXID", (e, t) => {
929
929
  t.pattern ?? (t.pattern = Wr), z.init(e, t);
930
- }), Lo = /* @__PURE__ */ h("$ZodKSUID", (e, t) => {
930
+ }), Mo = /* @__PURE__ */ h("$ZodKSUID", (e, t) => {
931
931
  t.pattern ?? (t.pattern = Gr), z.init(e, t);
932
932
  }), Do = /* @__PURE__ */ h("$ZodISODateTime", (e, t) => {
933
933
  t.pattern ?? (t.pattern = uo(t)), z.init(e, t);
@@ -1046,7 +1046,7 @@ const Qo = /* @__PURE__ */ h("$ZodJWT", (e, t) => {
1046
1046
  continue: !t.abort
1047
1047
  });
1048
1048
  };
1049
- }), Mn = /* @__PURE__ */ h("$ZodNumber", (e, t) => {
1049
+ }), Ln = /* @__PURE__ */ h("$ZodNumber", (e, t) => {
1050
1050
  $.init(e, t), e._zod.pattern = e._zod.bag.pattern ?? Cn, e._zod.parse = (n, r) => {
1051
1051
  if (t.coerce)
1052
1052
  try {
@@ -1066,7 +1066,7 @@ const Qo = /* @__PURE__ */ h("$ZodJWT", (e, t) => {
1066
1066
  }), n;
1067
1067
  };
1068
1068
  }), es = /* @__PURE__ */ h("$ZodNumberFormat", (e, t) => {
1069
- go.init(e, t), Mn.init(e, t);
1069
+ go.init(e, t), Ln.init(e, t);
1070
1070
  }), ts = /* @__PURE__ */ h("$ZodUnknown", (e, t) => {
1071
1071
  $.init(e, t), e._zod.parse = (n) => n;
1072
1072
  }), ns = /* @__PURE__ */ h("$ZodNever", (e, t) => {
@@ -1120,7 +1120,7 @@ function ve(e, t, n, r, o, s) {
1120
1120
  }
1121
1121
  e.value === void 0 ? i && (t.value[n] = void 0) : t.value[n] = e.value;
1122
1122
  }
1123
- function Ln(e) {
1123
+ function Mn(e) {
1124
1124
  const t = Object.keys(e.shape);
1125
1125
  for (const r of t)
1126
1126
  if (!e.shape?.[r]?._zod?.traits?.has("$ZodType"))
@@ -1165,7 +1165,7 @@ const os = /* @__PURE__ */ h("$ZodObject", (e, t) => {
1165
1165
  }
1166
1166
  });
1167
1167
  }
1168
- const r = tt(() => Ln(t));
1168
+ const r = tt(() => Mn(t));
1169
1169
  v(e._zod, "propValues", () => {
1170
1170
  const a = t.shape, c = {};
1171
1171
  for (const u in a) {
@@ -1200,7 +1200,7 @@ const os = /* @__PURE__ */ h("$ZodObject", (e, t) => {
1200
1200
  };
1201
1201
  }), ss = /* @__PURE__ */ h("$ZodObjectJIT", (e, t) => {
1202
1202
  os.init(e, t);
1203
- const n = e._zod.parse, r = tt(() => Ln(t)), o = (d) => {
1203
+ const n = e._zod.parse, r = tt(() => Mn(t)), o = (d) => {
1204
1204
  const p = new To(["shape", "payload", "ctx"]), g = r.value, k = (O) => {
1205
1205
  const y = It(O);
1206
1206
  return `shape[${y}]._zod.run({ value: input[${y}], issues: [] }, ctx)`;
@@ -1301,7 +1301,7 @@ function At(e, t, n, r) {
1301
1301
  code: "invalid_union",
1302
1302
  input: t.value,
1303
1303
  inst: n,
1304
- errors: e.map((s) => s.issues.map((i) => D(i, r, L())))
1304
+ errors: e.map((s) => s.issues.map((i) => D(i, r, M())))
1305
1305
  }), t);
1306
1306
  }
1307
1307
  const is = /* @__PURE__ */ h("$ZodUnion", (e, t) => {
@@ -1501,7 +1501,7 @@ const us = /* @__PURE__ */ h("$ZodRecord", (e, t) => {
1501
1501
  n.issues.push({
1502
1502
  code: "invalid_key",
1503
1503
  origin: "record",
1504
- issues: l.issues.map((p) => D(p, r, L())),
1504
+ issues: l.issues.map((p) => D(p, r, M())),
1505
1505
  input: u,
1506
1506
  path: [u],
1507
1507
  inst: e
@@ -1540,7 +1540,7 @@ const us = /* @__PURE__ */ h("$ZodRecord", (e, t) => {
1540
1540
  t.mode === "loose" ? n.value[a] = o[a] : n.issues.push({
1541
1541
  code: "invalid_key",
1542
1542
  origin: "record",
1543
- issues: c.issues.map((f) => D(f, r, L())),
1543
+ issues: c.issues.map((f) => D(f, r, M())),
1544
1544
  input: a,
1545
1545
  path: [a],
1546
1546
  inst: e
@@ -1621,10 +1621,10 @@ const ms = /* @__PURE__ */ h("$ZodPrefault", (e, t) => {
1621
1621
  return n ? new Set([...n].filter((r) => r !== void 0)) : void 0;
1622
1622
  }), e._zod.parse = (n, r) => {
1623
1623
  const o = t.innerType._zod.run(n, r);
1624
- return o instanceof Promise ? o.then((s) => Mt(s, e)) : Mt(o, e);
1624
+ return o instanceof Promise ? o.then((s) => Lt(s, e)) : Lt(o, e);
1625
1625
  };
1626
1626
  });
1627
- function Mt(e, t) {
1627
+ function Lt(e, t) {
1628
1628
  return !e.issues.length && e.value === void 0 && e.issues.push({
1629
1629
  code: "invalid_type",
1630
1630
  expected: "nonoptional",
@@ -1640,13 +1640,13 @@ const ys = /* @__PURE__ */ h("$ZodCatch", (e, t) => {
1640
1640
  return o instanceof Promise ? o.then((s) => (n.value = s.value, s.issues.length && (n.value = t.catchValue({
1641
1641
  ...n,
1642
1642
  error: {
1643
- issues: s.issues.map((i) => D(i, r, L()))
1643
+ issues: s.issues.map((i) => D(i, r, M()))
1644
1644
  },
1645
1645
  input: n.value
1646
1646
  }), n.issues = [], n.fallback = !0), n)) : (n.value = o.value, o.issues.length && (n.value = t.catchValue({
1647
1647
  ...n,
1648
1648
  error: {
1649
- issues: o.issues.map((s) => D(s, r, L()))
1649
+ issues: o.issues.map((s) => D(s, r, M()))
1650
1650
  },
1651
1651
  input: n.value
1652
1652
  }), n.issues = [], n.fallback = !0), n);
@@ -1669,10 +1669,10 @@ const ws = /* @__PURE__ */ h("$ZodReadonly", (e, t) => {
1669
1669
  if (r.direction === "backward")
1670
1670
  return t.innerType._zod.run(n, r);
1671
1671
  const o = t.innerType._zod.run(n, r);
1672
- return o instanceof Promise ? o.then(Lt) : Lt(o);
1672
+ return o instanceof Promise ? o.then(Mt) : Mt(o);
1673
1673
  };
1674
1674
  });
1675
- function Lt(e) {
1675
+ function Mt(e) {
1676
1676
  return e.value = Object.freeze(e.value), e;
1677
1677
  }
1678
1678
  const bs = /* @__PURE__ */ h("$ZodCustom", (e, t) => {
@@ -1894,7 +1894,7 @@ function Rs(e, t) {
1894
1894
  });
1895
1895
  }
1896
1896
  // @__NO_SIDE_EFFECTS__
1897
- function Ms(e, t) {
1897
+ function Ls(e, t) {
1898
1898
  return new e({
1899
1899
  type: "string",
1900
1900
  format: "ipv6",
@@ -1904,7 +1904,7 @@ function Ms(e, t) {
1904
1904
  });
1905
1905
  }
1906
1906
  // @__NO_SIDE_EFFECTS__
1907
- function Ls(e, t) {
1907
+ function Ms(e, t) {
1908
1908
  return new e({
1909
1909
  type: "string",
1910
1910
  format: "cidrv4",
@@ -2044,7 +2044,7 @@ function Bt(e, t) {
2044
2044
  });
2045
2045
  }
2046
2046
  // @__NO_SIDE_EFFECTS__
2047
- function Me(e, t) {
2047
+ function Le(e, t) {
2048
2048
  return new jn({
2049
2049
  check: "less_than",
2050
2050
  ...m(t),
@@ -2062,7 +2062,7 @@ function Jt(e, t) {
2062
2062
  });
2063
2063
  }
2064
2064
  // @__NO_SIDE_EFFECTS__
2065
- function Le(e, t) {
2065
+ function Me(e, t) {
2066
2066
  return new xn({
2067
2067
  check: "greater_than",
2068
2068
  ...m(t),
@@ -2625,11 +2625,11 @@ const pi = (e, t = {}) => (n) => {
2625
2625
  function Ri(e) {
2626
2626
  return /* @__PURE__ */ Vs(xi, e);
2627
2627
  }
2628
- const Mi = /* @__PURE__ */ h("ZodISODate", (e, t) => {
2628
+ const Li = /* @__PURE__ */ h("ZodISODate", (e, t) => {
2629
2629
  Uo.init(e, t), E.init(e, t);
2630
2630
  });
2631
- function Li(e) {
2632
- return /* @__PURE__ */ Ws(Mi, e);
2631
+ function Mi(e) {
2632
+ return /* @__PURE__ */ Ws(Li, e);
2633
2633
  }
2634
2634
  const Di = /* @__PURE__ */ h("ZodISOTime", (e, t) => {
2635
2635
  Fo.init(e, t), E.init(e, t);
@@ -2674,7 +2674,7 @@ const Ji = (e, t) => {
2674
2674
  });
2675
2675
  }, x = /* @__PURE__ */ h("ZodError", Ji, {
2676
2676
  Parent: Error
2677
- }), Vi = /* @__PURE__ */ st(x), Wi = /* @__PURE__ */ it(x), Gi = /* @__PURE__ */ Pe(x), Ki = /* @__PURE__ */ je(x), Yi = /* @__PURE__ */ jr(x), qi = /* @__PURE__ */ xr(x), Xi = /* @__PURE__ */ Rr(x), Hi = /* @__PURE__ */ Mr(x), Qi = /* @__PURE__ */ Lr(x), ea = /* @__PURE__ */ Dr(x), ta = /* @__PURE__ */ Ur(x), na = /* @__PURE__ */ Fr(x), Wt = /* @__PURE__ */ new WeakMap();
2677
+ }), Vi = /* @__PURE__ */ st(x), Wi = /* @__PURE__ */ it(x), Gi = /* @__PURE__ */ Pe(x), Ki = /* @__PURE__ */ je(x), Yi = /* @__PURE__ */ jr(x), qi = /* @__PURE__ */ xr(x), Xi = /* @__PURE__ */ Rr(x), Hi = /* @__PURE__ */ Lr(x), Qi = /* @__PURE__ */ Mr(x), ea = /* @__PURE__ */ Dr(x), ta = /* @__PURE__ */ Ur(x), na = /* @__PURE__ */ Fr(x), Wt = /* @__PURE__ */ new WeakMap();
2678
2678
  function fe(e, t, n) {
2679
2679
  const r = Object.getPrototypeOf(e);
2680
2680
  let o = Wt.get(r);
@@ -2770,7 +2770,7 @@ const I = /* @__PURE__ */ h("ZodType", (e, t) => ($.init(e, t), Object.assign(e[
2770
2770
  return Xt(this, Ca(n));
2771
2771
  },
2772
2772
  default(n) {
2773
- return Ma(this, n);
2773
+ return La(this, n);
2774
2774
  },
2775
2775
  prefault(n) {
2776
2776
  return Da(this, n);
@@ -2859,9 +2859,9 @@ const I = /* @__PURE__ */ h("ZodType", (e, t) => ($.init(e, t), Object.assign(e[
2859
2859
  }
2860
2860
  });
2861
2861
  }), ra = /* @__PURE__ */ h("ZodString", (e, t) => {
2862
- at.init(e, t), Kn.init(e, t), e.email = (n) => e.check(/* @__PURE__ */ Ss(oa, n)), e.url = (n) => e.check(/* @__PURE__ */ Zs(sa, n)), e.jwt = (n) => e.check(/* @__PURE__ */ Js(ba, n)), e.emoji = (n) => e.check(/* @__PURE__ */ Os(ia, n)), e.guid = (n) => e.check(/* @__PURE__ */ Ft(Gt, n)), e.uuid = (n) => e.check(/* @__PURE__ */ $s(ye, n)), e.uuidv4 = (n) => e.check(/* @__PURE__ */ Es(ye, n)), e.uuidv6 = (n) => e.check(/* @__PURE__ */ Ts(ye, n)), e.uuidv7 = (n) => e.check(/* @__PURE__ */ Is(ye, n)), e.nanoid = (n) => e.check(/* @__PURE__ */ As(aa, n)), e.guid = (n) => e.check(/* @__PURE__ */ Ft(Gt, n)), e.cuid = (n) => e.check(/* @__PURE__ */ Ns(ca, n)), e.cuid2 = (n) => e.check(/* @__PURE__ */ Cs(ua, n)), e.ulid = (n) => e.check(/* @__PURE__ */ Ps(la, n)), e.base64 = (n) => e.check(/* @__PURE__ */ Us(ya, n)), e.base64url = (n) => e.check(/* @__PURE__ */ Fs(_a, n)), e.xid = (n) => e.check(/* @__PURE__ */ js(fa, n)), e.ksuid = (n) => e.check(/* @__PURE__ */ xs(da, n)), e.ipv4 = (n) => e.check(/* @__PURE__ */ Rs(ha, n)), e.ipv6 = (n) => e.check(/* @__PURE__ */ Ms(pa, n)), e.cidrv4 = (n) => e.check(/* @__PURE__ */ Ls(ma, n)), e.cidrv6 = (n) => e.check(/* @__PURE__ */ Ds(ga, n)), e.e164 = (n) => e.check(/* @__PURE__ */ Bs(wa, n)), e.datetime = (n) => e.check(Ri(n)), e.date = (n) => e.check(Li(n)), e.time = (n) => e.check(Ui(n)), e.duration = (n) => e.check(Bi(n));
2862
+ at.init(e, t), Kn.init(e, t), e.email = (n) => e.check(/* @__PURE__ */ Ss(oa, n)), e.url = (n) => e.check(/* @__PURE__ */ Zs(sa, n)), e.jwt = (n) => e.check(/* @__PURE__ */ Js(ba, n)), e.emoji = (n) => e.check(/* @__PURE__ */ Os(ia, n)), e.guid = (n) => e.check(/* @__PURE__ */ Ft(Gt, n)), e.uuid = (n) => e.check(/* @__PURE__ */ $s(ye, n)), e.uuidv4 = (n) => e.check(/* @__PURE__ */ Es(ye, n)), e.uuidv6 = (n) => e.check(/* @__PURE__ */ Ts(ye, n)), e.uuidv7 = (n) => e.check(/* @__PURE__ */ Is(ye, n)), e.nanoid = (n) => e.check(/* @__PURE__ */ As(aa, n)), e.guid = (n) => e.check(/* @__PURE__ */ Ft(Gt, n)), e.cuid = (n) => e.check(/* @__PURE__ */ Ns(ca, n)), e.cuid2 = (n) => e.check(/* @__PURE__ */ Cs(ua, n)), e.ulid = (n) => e.check(/* @__PURE__ */ Ps(la, n)), e.base64 = (n) => e.check(/* @__PURE__ */ Us(ya, n)), e.base64url = (n) => e.check(/* @__PURE__ */ Fs(_a, n)), e.xid = (n) => e.check(/* @__PURE__ */ js(fa, n)), e.ksuid = (n) => e.check(/* @__PURE__ */ xs(da, n)), e.ipv4 = (n) => e.check(/* @__PURE__ */ Rs(ha, n)), e.ipv6 = (n) => e.check(/* @__PURE__ */ Ls(pa, n)), e.cidrv4 = (n) => e.check(/* @__PURE__ */ Ms(ma, n)), e.cidrv6 = (n) => e.check(/* @__PURE__ */ Ds(ga, n)), e.e164 = (n) => e.check(/* @__PURE__ */ Bs(wa, n)), e.datetime = (n) => e.check(Ri(n)), e.date = (n) => e.check(Mi(n)), e.time = (n) => e.check(Ui(n)), e.duration = (n) => e.check(Bi(n));
2863
2863
  });
2864
- function M(e) {
2864
+ function L(e) {
2865
2865
  return /* @__PURE__ */ zs(ra, e);
2866
2866
  }
2867
2867
  const E = /* @__PURE__ */ h("ZodStringFormat", (e, t) => {
@@ -2885,9 +2885,9 @@ const E = /* @__PURE__ */ h("ZodStringFormat", (e, t) => {
2885
2885
  }), la = /* @__PURE__ */ h("ZodULID", (e, t) => {
2886
2886
  Ro.init(e, t), E.init(e, t);
2887
2887
  }), fa = /* @__PURE__ */ h("ZodXID", (e, t) => {
2888
- Mo.init(e, t), E.init(e, t);
2889
- }), da = /* @__PURE__ */ h("ZodKSUID", (e, t) => {
2890
2888
  Lo.init(e, t), E.init(e, t);
2889
+ }), da = /* @__PURE__ */ h("ZodKSUID", (e, t) => {
2890
+ Mo.init(e, t), E.init(e, t);
2891
2891
  }), ha = /* @__PURE__ */ h("ZodIPv4", (e, t) => {
2892
2892
  Jo.init(e, t), E.init(e, t);
2893
2893
  }), pa = /* @__PURE__ */ h("ZodIPv6", (e, t) => {
@@ -2905,24 +2905,24 @@ const E = /* @__PURE__ */ h("ZodStringFormat", (e, t) => {
2905
2905
  }), ba = /* @__PURE__ */ h("ZodJWT", (e, t) => {
2906
2906
  Qo.init(e, t), E.init(e, t);
2907
2907
  }), Yn = /* @__PURE__ */ h("ZodNumber", (e, t) => {
2908
- Mn.init(e, t), I.init(e, t), e._zod.processJSONSchema = (r, o, s) => yi(e, r, o), fe(e, "ZodNumber", {
2908
+ Ln.init(e, t), I.init(e, t), e._zod.processJSONSchema = (r, o, s) => yi(e, r, o), fe(e, "ZodNumber", {
2909
2909
  gt(r, o) {
2910
2910
  return this.check(/* @__PURE__ */ Jt(r, o));
2911
2911
  },
2912
2912
  gte(r, o) {
2913
- return this.check(/* @__PURE__ */ Le(r, o));
2913
+ return this.check(/* @__PURE__ */ Me(r, o));
2914
2914
  },
2915
2915
  min(r, o) {
2916
- return this.check(/* @__PURE__ */ Le(r, o));
2916
+ return this.check(/* @__PURE__ */ Me(r, o));
2917
2917
  },
2918
2918
  lt(r, o) {
2919
2919
  return this.check(/* @__PURE__ */ Bt(r, o));
2920
2920
  },
2921
2921
  lte(r, o) {
2922
- return this.check(/* @__PURE__ */ Me(r, o));
2922
+ return this.check(/* @__PURE__ */ Le(r, o));
2923
2923
  },
2924
2924
  max(r, o) {
2925
- return this.check(/* @__PURE__ */ Me(r, o));
2925
+ return this.check(/* @__PURE__ */ Le(r, o));
2926
2926
  },
2927
2927
  int(r) {
2928
2928
  return this.check(Se(r));
@@ -2934,13 +2934,13 @@ const E = /* @__PURE__ */ h("ZodStringFormat", (e, t) => {
2934
2934
  return this.check(/* @__PURE__ */ Jt(0, r));
2935
2935
  },
2936
2936
  nonnegative(r) {
2937
- return this.check(/* @__PURE__ */ Le(0, r));
2937
+ return this.check(/* @__PURE__ */ Me(0, r));
2938
2938
  },
2939
2939
  negative(r) {
2940
2940
  return this.check(/* @__PURE__ */ Bt(0, r));
2941
2941
  },
2942
2942
  nonpositive(r) {
2943
- return this.check(/* @__PURE__ */ Me(0, r));
2943
+ return this.check(/* @__PURE__ */ Le(0, r));
2944
2944
  },
2945
2945
  multipleOf(r, o) {
2946
2946
  return this.check(/* @__PURE__ */ Vt(r, o));
@@ -3090,7 +3090,7 @@ const Kt = /* @__PURE__ */ h("ZodRecord", (e, t) => {
3090
3090
  function Aa(e, t, n) {
3091
3091
  return !t || !t._zod ? new Kt({
3092
3092
  type: "record",
3093
- keyType: M(),
3093
+ keyType: L(),
3094
3094
  valueType: e,
3095
3095
  ...m(t)
3096
3096
  }) : new Kt({
@@ -3191,7 +3191,7 @@ function qt(e) {
3191
3191
  const Ra = /* @__PURE__ */ h("ZodDefault", (e, t) => {
3192
3192
  ps.init(e, t), I.init(e, t), e._zod.processJSONSchema = (n, r, o) => Ai(e, n, r, o), e.unwrap = () => e._zod.def.innerType, e.removeDefault = e.unwrap;
3193
3193
  });
3194
- function Ma(e, t) {
3194
+ function La(e, t) {
3195
3195
  return new Ra({
3196
3196
  type: "default",
3197
3197
  innerType: e,
@@ -3200,11 +3200,11 @@ function Ma(e, t) {
3200
3200
  }
3201
3201
  });
3202
3202
  }
3203
- const La = /* @__PURE__ */ h("ZodPrefault", (e, t) => {
3203
+ const Ma = /* @__PURE__ */ h("ZodPrefault", (e, t) => {
3204
3204
  ms.init(e, t), I.init(e, t), e._zod.processJSONSchema = (n, r, o) => Ni(e, n, r, o), e.unwrap = () => e._zod.def.innerType;
3205
3205
  });
3206
3206
  function Da(e, t) {
3207
- return new La({
3207
+ return new Ma({
3208
3208
  type: "prefault",
3209
3209
  innerType: e,
3210
3210
  get defaultValue() {
@@ -3264,9 +3264,9 @@ function Ya(e, t) {
3264
3264
  const qa = {
3265
3265
  custom: "custom"
3266
3266
  }, Xa = ct([
3267
- J({ "proj:code": M().regex(/^[A-Z]+:[0-9]+$/) }),
3268
- J({ "proj:wkt2": M() }),
3269
- J({ "proj:projjson": Aa(M(), Ke()) })
3267
+ J({ "proj:code": L().regex(/^[A-Z]+:[0-9]+$/) }),
3268
+ J({ "proj:wkt2": L() }),
3269
+ J({ "proj:projjson": Aa(L(), Ke()) })
3270
3270
  ]), Qn = $e([
3271
3271
  A(),
3272
3272
  A(),
@@ -3275,23 +3275,23 @@ const qa = {
3275
3275
  A(),
3276
3276
  A()
3277
3277
  ]), er = $e([Se().min(1), Se().min(1)]), Ha = J({
3278
- asset: M(),
3279
- derived_from: M().optional(),
3278
+ asset: L(),
3279
+ derived_from: L().optional(),
3280
3280
  transform: J({
3281
3281
  scale: le(A()).optional(),
3282
3282
  translation: le(A()).optional()
3283
3283
  }).optional(),
3284
- resampling_method: M().optional(),
3284
+ resampling_method: L().optional(),
3285
3285
  // spatial: overrides per level — required here when not at group level
3286
3286
  "spatial:transform": Qn.optional(),
3287
3287
  "spatial:shape": er.optional()
3288
3288
  }).passthrough(), Qa = J({
3289
3289
  multiscales: J({
3290
3290
  layout: le(Ha).min(1),
3291
- resampling_method: M().optional()
3291
+ resampling_method: L().optional()
3292
3292
  })
3293
3293
  }), ec = J({
3294
- "spatial:dimensions": le(M()).min(2).max(3),
3294
+ "spatial:dimensions": le(L()).min(2).max(3),
3295
3295
  "spatial:transform": Qn.optional(),
3296
3296
  "spatial:shape": er.optional(),
3297
3297
  "spatial:bbox": ct([
@@ -3305,7 +3305,7 @@ const qa = {
3305
3305
  A()
3306
3306
  ])
3307
3307
  ]).optional(),
3308
- "spatial:transform_type": M().optional(),
3308
+ "spatial:transform_type": L().optional(),
3309
3309
  "spatial:registration": qn(["node", "pixel"]).optional(),
3310
3310
  multiscales: Qa.shape.multiscales.optional()
3311
3311
  }), tc = ec.superRefine((e, t) => {
@@ -4778,15 +4778,15 @@ function Rc(e, t) {
4778
4778
  n instanceof Promise ? n = n.then((o) => r(o)) : n = r(n);
4779
4779
  return n;
4780
4780
  }
4781
- function Mc(e, ...t) {
4781
+ function Lc(e, ...t) {
4782
4782
  return Rc(e, t);
4783
4783
  }
4784
4784
  async function ar(e) {
4785
4785
  let t = e.store.arrayExtensions;
4786
- return t?.length ? await Mc(e, ...t) : e;
4786
+ return t?.length ? await Lc(e, ...t) : e;
4787
4787
  }
4788
- let pe = Lc();
4789
- function Lc() {
4788
+ let pe = Mc();
4789
+ function Mc() {
4790
4790
  let e = /* @__PURE__ */ new WeakMap();
4791
4791
  function t(n) {
4792
4792
  let r = e.get(n) ?? { v2: 0, v3: 0 };
@@ -5428,8 +5428,20 @@ const ku = async (e, t) => {
5428
5428
  function _e(e) {
5429
5429
  return JSON.stringify([e.src ?? "", e.variable ?? "", e.select ?? "", e.bounds ?? null, e.crs ?? "", e.spatialDims ?? ""]);
5430
5430
  }
5431
+ class zu extends _u {
5432
+ static layerName = "OmZarrTileLayer";
5433
+ renderLayers() {
5434
+ const t = super.renderLayers();
5435
+ if (!t) return t;
5436
+ const r = {
5437
+ updateTriggers: { ...t.props.updateTriggers, getTileData: this.props.selectTrigger },
5438
+ onViewportLoad: () => requestAnimationFrame(() => this.setNeedsRedraw())
5439
+ };
5440
+ return t.clone(r);
5441
+ }
5442
+ }
5431
5443
  const kn = /* @__PURE__ */ new Map();
5432
- async function zu(e) {
5444
+ async function Su(e) {
5433
5445
  const t = new URL(e.src ?? "", typeof document < "u" ? document.baseURI : void 0).href, n = new oc(t);
5434
5446
  let r = n;
5435
5447
  try {
@@ -5446,7 +5458,7 @@ async function zu(e) {
5446
5458
  }
5447
5459
  return { node: o, variable: e.variable };
5448
5460
  }
5449
- class Iu extends gr {
5461
+ class Zu extends gr {
5450
5462
  static layerName = "OmZarrLayer";
5451
5463
  static defaultProps = {
5452
5464
  src: "",
@@ -5470,7 +5482,7 @@ class Iu extends gr {
5470
5482
  if (!t.src) throw new Error('ZarrLayer requires a src (the ".zarr" store URL).');
5471
5483
  const r = bu(t.select), o = JSON.stringify([t.src, t.variable ?? "", t.bounds ?? null, t.crs ?? "", t.spatialDims ?? ""]);
5472
5484
  let s = kn.get(o);
5473
- if (s || (s = await zu(t), kn.set(o, s)), n !== _e(this.props)) return;
5485
+ if (s || (s = await Su(t), kn.set(o, s)), n !== _e(this.props)) return;
5474
5486
  this.setState({ status: "ready", node: s.node, variable: s.variable, metadata: s.metadata, selection: r, loadKey: n });
5475
5487
  } catch (r) {
5476
5488
  console.error(`[onlymapjs] ZarrLayer src="${t.src}" failed to load:`, r), n === _e(this.props) && this.setState({ status: "error", loadKey: n });
@@ -5485,13 +5497,14 @@ class Iu extends gr {
5485
5497
  colormap: this.props.colormap,
5486
5498
  nodataOverride: this.props.nodataOverride
5487
5499
  };
5488
- return new _u(
5500
+ return new zu(
5489
5501
  this.getSubLayerProps({
5490
5502
  id: "zarr",
5491
5503
  node: n,
5492
5504
  ...r !== void 0 ? { variable: r } : {},
5493
5505
  ...o !== void 0 ? { metadata: o } : {},
5494
5506
  selection: s,
5507
+ selectTrigger: this.props.select,
5495
5508
  getTileData: ku,
5496
5509
  renderTile: (a) => pr(a, i),
5497
5510
  opacity: this.props.opacity
@@ -5500,7 +5513,7 @@ class Iu extends gr {
5500
5513
  }
5501
5514
  }
5502
5515
  export {
5503
- Iu as OmZarrLayer,
5516
+ Zu as OmZarrLayer,
5504
5517
  vu as buildManualGeoZarrAttrs,
5505
5518
  bu as parseZarrSelection
5506
5519
  };
package/docs/3d-assets.md CHANGED
@@ -30,7 +30,7 @@ Things worth knowing:
30
30
  - **`get-scale` is in model space** `[x, y, z]` — for an upright Y-up model that's `[width, height, depth]` in meters (if the model is unit-sized).
31
31
  - **`lighting="pbr"`** shades models by their glTF materials; the default is flat.
32
32
  - **One model, many instances.** `ScenegraphLayer` draws the *same* GLB at every row. Different models per row means one layer per model — or, at city scale, 3D Tiles (below).
33
- - Runnable example: [`dev/examples/scenegraph.html`](../dev/examples/scenegraph.html) (its `box.glb` is a placeholder — a stand-in for the pipeline below).
33
+ - Runnable example: [`dev/examples/features/terrain-3d/place-a-3d-model.html`](../dev/examples/features/terrain-3d/place-a-3d-model.html) (its `box.glb` is a placeholder — a stand-in for the pipeline below).
34
34
 
35
35
  ## The pipeline half (your server)
36
36
 
@@ -110,7 +110,7 @@ So CityJSON is ingested natively — point `data` at it, no converter, in either
110
110
  </om-map>
111
111
  ```
112
112
 
113
- Runnable, both modes toggled side by side: [`dev/examples/cityjson.html`](../dev/examples/cityjson.html).
113
+ Runnable, both modes toggled side by side: [`dev/examples/features/terrain-3d/load-a-cityjson-model.html`](../dev/examples/features/terrain-3d/load-a-cityjson-model.html).
114
114
 
115
115
  ### What you get
116
116
 
@@ -127,7 +127,7 @@ This convention (a `defaultExpr` on the `get-fill-color` `PropDescriptor`, resol
127
127
 
128
128
  ### Row budget (surfaces mode)
129
129
 
130
- Surfaces mode multiplies the row count by however many faces a building has: the 3DBAG tile in `dev/examples/cityjson.html` decodes to 120 rows as footprints and **3,940 rows** as surfaces — roughly 33×. That lands against the [free tier's](../README.md#free-tier--licensing) 25,000-row cap at around 750 buildings, where the footprint mode would still be nowhere near it. Past the cap the layer renders its first 25,000 rows — an arbitrary subset in source order, with a dismissible on-map notice — rather than going blank, so a slightly-too-big scene still draws. Because faces are emitted per building, the cut lands mid-building. To show a whole scene rather than part of one: pin a lower LoD with `?om-lod=` (1.3 is ~15× instead of ~33×), tile the source, or extrude footprints instead.
130
+ Surfaces mode multiplies the row count by however many faces a building has: the 3DBAG tile in `dev/examples/features/terrain-3d/load-a-cityjson-model.html` decodes to 120 rows as footprints and **3,940 rows** as surfaces — roughly 33×. That lands against the [free tier's](../README.md#free-tier--licensing) 25,000-row cap at around 750 buildings, where the footprint mode would still be nowhere near it. Past the cap the layer renders its first 25,000 rows — an arbitrary subset in source order, with a dismissible on-map notice — rather than going blank, so a slightly-too-big scene still draws. Because faces are emitted per building, the cut lands mid-building. To show a whole scene rather than part of one: pin a lower LoD with `?om-lod=` (1.3 is ~15× instead of ~33×), tile the source, or extrude footprints instead.
131
131
 
132
132
  Face counts are long-tailed, so the building count you can fit is not predictable from the average: in that same tile the median building is 17 faces but the largest is 963 — one building, 24% of the tile's rows.
133
133
 
package/docs/live-data.md CHANGED
@@ -40,7 +40,7 @@ OmMap.registerSource("ais", {
40
40
  });
41
41
  ```
42
42
 
43
- Register the plugin in the same module script that imports the library (registration is also tolerated late — plugins resolve lazily — but same-task is the tidy order). Runnable example: [`dev/examples/ais.html`](../dev/examples/ais.html), which speaks aisstream.io's real message format against a simulated feed.
43
+ Register the plugin in the same module script that imports the library (registration is also tolerated late — plugins resolve lazily — but same-task is the tidy order). Runnable example: [`dev/examples/maps/transport-logistics/bay-area-shipping.html`](../dev/examples/maps/transport-logistics/bay-area-shipping.html), which speaks aisstream.io's real message format against a simulated feed.
44
44
 
45
45
  ## Polling (`refresh`)
46
46
 
@@ -54,7 +54,7 @@ Register the plugin in the same module script that imports the library (registra
54
54
  - **Failures don't blank the map**: a failing refresh keeps the last good snapshot and keeps polling, warning once per outage and once on recovery. The *initial* load settles `om-map-ready` even on error.
55
55
  - Interval floor is 250ms. Works for Arrow (`.arrow`) URLs too — re-fetched and re-parsed per poll.
56
56
 
57
- Runnable example: [`dev/examples/fleet.html`](../dev/examples/fleet.html) — 20 drivers polled at 1s from an **auth-protected** endpoint.
57
+ Runnable example: [`dev/examples/maps/transport-logistics/san-francisco-last-mile.html`](../dev/examples/maps/transport-logistics/san-francisco-last-mile.html) — 20 drivers polled at 1s from an **auth-protected** endpoint.
58
58
 
59
59
  ## Authenticated endpoints — `configureData`
60
60
 
package/docs/stories.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Map stories — guided tours as markup
2
2
 
3
- A story turns a map into a narrated sequence: fly here, reveal this, highlight that — authored declaratively, played back with a scrubber, and testable like everything else. Runnable example: [`dev/examples/story.html`](../dev/examples/story.html).
3
+ A story turns a map into a narrated sequence: fly here, reveal this, highlight that — authored declaratively, played back with a scrubber, and testable like everything else. Runnable example: [`dev/examples/features/stories/build-a-map-story.html`](../dev/examples/features/stories/build-a-map-story.html).
4
4
 
5
5
  ## The one rule
6
6
 
package/docs/testing.md CHANGED
@@ -11,7 +11,7 @@ This guide is the complete workflow. It assumes a page like this (a manifest in
11
11
  get-position="[$lon, $lat]"
12
12
  get-fill-color="scale($magnitude, sequential, ['#fee8c8','#b30000'], domain=[0,7])"
13
13
  filter-field="magnitude" filter-range="[0, 10]" pickable></om-layer>
14
- <om-overlay id="detail" anchor-from="selection" visible="false">
14
+ <om-overlay id="detail" anchor-from="selection" selection-type="click" visible="false">
15
15
  <div><b>{{place}}</b> — M {{magnitude}}</div>
16
16
  </om-overlay>
17
17
  <om-behavior on="click" layer="quakes" action="show-overlay" target="detail"></om-behavior>
@@ -111,7 +111,7 @@ it("panning away empties viewport-scoped widgets", async () => {
111
111
  });
112
112
  ```
113
113
 
114
- The harness API: `pick` (synthetic picks fed through the exact code path real deck.gl picks take — columnar layers pick object-less by index, exactly like live), `clearSelection` (hover-off; runs the tooltip auto-hide path), `mapPoint` (a click/hover map coordinate through the real onMapPoint path — fires `om-map-point`, drives the draw controller), `emit` (any action, same payload contract as `ctx.emit`/`data-emit`), `setView`, `layers()` (the live IR), `flush`, `unmount`. Every verb settles the library's internal batching before resolving — **you never write a sleep**.
114
+ The harness API: `pick` (synthetic picks fed through the exact code path real deck.gl picks take — columnar layers pick object-less by index, exactly like live), `clearSelection` (an empty pick — default kind `"hover"`, a hover-off that runs the tooltip auto-hide path; pass `"click"` for a click on empty space, the gesture that dismisses a `selection-type="click"` popup), `mapPoint` (a click/hover map coordinate through the real onMapPoint path — fires `om-map-point`, drives the draw controller), `emit` (any action, same payload contract as `ctx.emit`/`data-emit`), `setView`, `layers()` (the live IR), `flush`, `unmount`. Every verb settles the library's internal batching before resolving — **you never write a sleep**.
115
115
 
116
116
  **Remote data:** mock `fetch` and the harness waits for it via the readiness signal:
117
117