@optimum-intelligence/opti-ui 0.7.2 → 0.7.3

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 (53) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/components/app-shell/AppShell.d.ts +12 -3
  3. package/dist/components/app-shell/AppShell.js +45 -26
  4. package/dist/components/app-shell/AppShell.js.map +1 -1
  5. package/dist/components/data-table/DataTable.d.ts +25 -4
  6. package/dist/components/data-table/DataTable.js +238 -90
  7. package/dist/components/data-table/DataTable.js.map +1 -1
  8. package/dist/components/data-table/DataTableContent.d.ts +6 -1
  9. package/dist/components/data-table/DataTableContent.js +306 -409
  10. package/dist/components/data-table/DataTableContent.js.map +1 -1
  11. package/dist/components/data-table/DataTableFilters.d.ts +6 -1
  12. package/dist/components/data-table/DataTableFilters.js +65 -45
  13. package/dist/components/data-table/DataTableFilters.js.map +1 -1
  14. package/dist/components/data-table/DataTableRow.js +2 -0
  15. package/dist/components/data-table/DataTableRow.js.map +1 -1
  16. package/dist/components/data-table/types.d.ts +14 -1
  17. package/dist/components/data-table/useDataTable.js +2 -0
  18. package/dist/components/data-table/useDataTable.js.map +1 -1
  19. package/dist/components/drawer/Drawer.d.ts +7 -4
  20. package/dist/components/drawer/Drawer.js +2 -1
  21. package/dist/components/drawer/Drawer.js.map +1 -1
  22. package/dist/components/map/Map.d.ts +30 -6
  23. package/dist/components/map/Map.js +387 -271
  24. package/dist/components/map/Map.js.map +1 -1
  25. package/dist/components/stat-card/StatCard.d.ts +2 -2
  26. package/dist/components/stat-card/StatCard.js +1 -1
  27. package/dist/components/stat-card/StatCard.js.map +1 -1
  28. package/dist/components/stepper/Stepper.d.ts +7 -1
  29. package/dist/components/stepper/Stepper.js +46 -27
  30. package/dist/components/stepper/Stepper.js.map +1 -1
  31. package/dist/components/table/Table.d.ts +1 -1
  32. package/dist/components/table/Table.js +3 -1
  33. package/dist/components/table/Table.js.map +1 -1
  34. package/dist/components/tabs/Tabs.d.ts +4 -1
  35. package/dist/components/tabs/Tabs.js +33 -23
  36. package/dist/components/tabs/Tabs.js.map +1 -1
  37. package/dist/components/toggle/Toggle.d.ts +1 -1
  38. package/dist/components/toggle/Toggle.js.map +1 -1
  39. package/dist/components.json +101 -29
  40. package/dist/icons/index.d.ts +8 -0
  41. package/dist/icons/index.js +11 -1
  42. package/dist/icons/index.js.map +1 -1
  43. package/dist/index.js +2 -2
  44. package/dist/llms-full.txt +48 -19
  45. package/dist/llms.txt +7 -7
  46. package/dist/opti-ui.css +380 -29
  47. package/dist/utils/media.d.ts +4 -0
  48. package/dist/utils/media.js +34 -0
  49. package/dist/utils/media.js.map +1 -0
  50. package/dist/utils/scroll-fade.d.ts +9 -0
  51. package/dist/utils/scroll-fade.js +45 -0
  52. package/dist/utils/scroll-fade.js.map +1 -0
  53. package/package.json +1 -1
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
  import { cx } from "../../utils/cx.js";
3
3
  import { seriesColor } from "../../theme/series.js";
4
- import { EyeIcon, EyeOffIcon } from "../../icons/index.js";
4
+ import { EyeIcon, EyeOffIcon, LayersIcon } from "../../icons/index.js";
5
+ import { IconButton } from "../button/Button.js";
5
6
  import { SegmentedControl } from "../toggle/Toggle.js";
6
7
  import { useResolvedColors } from "./colors.js";
7
8
  import { c } from "react/compiler-runtime";
@@ -34,7 +35,8 @@ var defaultLabels = {
34
35
  depot: "Depot",
35
36
  noData: "No data to show",
36
37
  expand: "Expand map",
37
- collapse: "Exit expanded map"
38
+ collapse: "Exit expanded map",
39
+ baseLayer: "Base map"
38
40
  };
39
41
  var MapContext = React.createContext(null);
40
42
  function useMapContext(part) {
@@ -369,7 +371,7 @@ function usePartId(prefix) {
369
371
  * </Map.Root>
370
372
  */
371
373
  function MapRoot(t0) {
372
- const $ = c(82);
374
+ const $ = c(87);
373
375
  let baseLayer;
374
376
  let baseLayers;
375
377
  let children;
@@ -387,8 +389,9 @@ function MapRoot(t0) {
387
389
  let t1;
388
390
  let t2;
389
391
  let t3;
392
+ let t4;
390
393
  if ($[0] !== t0) {
391
- ({ref, baseLayers, baseLayer, defaultBaseLayer, onBaseLayerChange, initialView, fit: t1, labels, controlsPosition: t2, expandable: t3, className, style, children, onClick, onMouseMove, onMouseOut, ...props} = t0);
394
+ ({ref, baseLayers, baseLayer, defaultBaseLayer, onBaseLayerChange, initialView, fit: t1, labels, controlsPosition: t2, expandable: t3, attributionCollapsed: t4, className, style, children, onClick, onMouseMove, onMouseOut, ...props} = t0);
392
395
  $[0] = t0;
393
396
  $[1] = baseLayer;
394
397
  $[2] = baseLayers;
@@ -407,6 +410,7 @@ function MapRoot(t0) {
407
410
  $[15] = t1;
408
411
  $[16] = t2;
409
412
  $[17] = t3;
413
+ $[18] = t4;
410
414
  } else {
411
415
  baseLayer = $[1];
412
416
  baseLayers = $[2];
@@ -425,62 +429,64 @@ function MapRoot(t0) {
425
429
  t1 = $[15];
426
430
  t2 = $[16];
427
431
  t3 = $[17];
432
+ t4 = $[18];
428
433
  }
429
434
  const fit = t1 === void 0 ? "data" : t1;
430
435
  const controlsPosition = t2 === void 0 ? "top-right" : t2;
431
436
  const expandable = t3 === void 0 ? false : t3;
437
+ const attributionCollapsed = t4 === void 0 ? false : t4;
432
438
  const [element, setElement] = React.useState(null);
433
439
  const [map, setMap] = React.useState(null);
434
- let t4;
435
- if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
436
- t4 = {};
437
- $[18] = t4;
438
- } else t4 = $[18];
439
- const [parts, setParts] = React.useState(t4);
440
- const [internalLayer, setInternalLayer] = React.useState(defaultBaseLayer ?? baseLayers[0]?.id ?? "");
441
- const [cursor, setCursor] = React.useState("");
442
- const [expanded, setExpanded] = React.useState(false);
443
440
  let t5;
444
441
  if ($[19] === Symbol.for("react.memo_cache_sentinel")) {
445
442
  t5 = {};
446
443
  $[19] = t5;
447
444
  } else t5 = $[19];
448
- const handlers = React.useRef(t5);
445
+ const [parts, setParts] = React.useState(t5);
446
+ const [internalLayer, setInternalLayer] = React.useState(defaultBaseLayer ?? baseLayers[0]?.id ?? "");
447
+ const [cursor, setCursor] = React.useState("");
448
+ const [expanded, setExpanded] = React.useState(false);
449
+ let t6;
450
+ if ($[20] === Symbol.for("react.memo_cache_sentinel")) {
451
+ t6 = {};
452
+ $[20] = t6;
453
+ } else t6 = $[20];
454
+ const handlers = React.useRef(t6);
449
455
  const hovered = React.useRef(null);
450
456
  const colors = useResolvedColors(element);
451
- let t6;
452
- if ($[20] !== labels) {
453
- t6 = {
457
+ let t7;
458
+ if ($[21] !== labels) {
459
+ t7 = {
454
460
  ...defaultLabels,
455
461
  ...labels
456
462
  };
457
- $[20] = labels;
458
- $[21] = t6;
459
- } else t6 = $[21];
460
- const text = t6;
463
+ $[21] = labels;
464
+ $[22] = t7;
465
+ } else t7 = $[22];
466
+ const text = t7;
461
467
  const currentId = baseLayer ?? internalLayer;
462
- let t7;
463
- if ($[22] !== baseLayers || $[23] !== currentId) {
464
- t7 = baseLayers.find((l) => l.id === currentId) ?? baseLayers[0];
465
- $[22] = baseLayers;
466
- $[23] = currentId;
467
- $[24] = t7;
468
- } else t7 = $[24];
469
- const current = t7;
470
- const mapStyle = colors.dark && current?.darkStyle ? current.darkStyle : current?.style;
471
468
  let t8;
472
- if ($[25] !== onBaseLayerChange) {
473
- t8 = (id) => {
469
+ if ($[23] !== baseLayers || $[24] !== currentId) {
470
+ t8 = baseLayers.find((l) => l.id === currentId) ?? baseLayers[0];
471
+ $[23] = baseLayers;
472
+ $[24] = currentId;
473
+ $[25] = t8;
474
+ } else t8 = $[25];
475
+ const current = t8;
476
+ const mapStyle = colors.dark && current?.darkStyle ? current.darkStyle : current?.style;
477
+ let t9;
478
+ if ($[26] !== onBaseLayerChange) {
479
+ t9 = (id) => {
474
480
  setInternalLayer(id);
475
481
  onBaseLayerChange?.(id);
476
482
  };
477
- $[25] = onBaseLayerChange;
478
- $[26] = t8;
479
- } else t8 = $[26];
480
- const setBaseLayer = t8;
481
- let t9;
482
- if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
483
- t9 = (partId, part) => {
483
+ $[26] = onBaseLayerChange;
484
+ $[27] = t9;
485
+ } else t9 = $[27];
486
+ const setBaseLayer = t9;
487
+ let t10;
488
+ if ($[28] === Symbol.for("react.memo_cache_sentinel")) {
489
+ t10 = (partId, part) => {
484
490
  setParts((prev) => {
485
491
  const next = { ...prev };
486
492
  if (part) next[partId] = part;
@@ -488,61 +494,61 @@ function MapRoot(t0) {
488
494
  return next;
489
495
  });
490
496
  };
491
- $[27] = t9;
492
- } else t9 = $[27];
493
- const register = t9;
494
- let t10;
495
- if ($[28] === Symbol.for("react.memo_cache_sentinel")) {
496
- t10 = (partId_0, value) => {
497
+ $[28] = t10;
498
+ } else t10 = $[28];
499
+ const register = t10;
500
+ let t11;
501
+ if ($[29] === Symbol.for("react.memo_cache_sentinel")) {
502
+ t11 = (partId_0, value) => {
497
503
  if (value) handlers.current[partId_0] = value;
498
504
  else delete handlers.current[partId_0];
499
505
  };
500
- $[28] = t10;
501
- } else t10 = $[28];
502
- const setHandlers = t10;
506
+ $[29] = t11;
507
+ } else t11 = $[29];
508
+ const setHandlers = t11;
503
509
  let dataKey;
504
510
  let empty;
505
511
  let interactiveLayerIds;
506
512
  let ownerOf;
507
- let t11;
508
- if ($[29] !== fit || $[30] !== parts) {
513
+ let t12;
514
+ if ($[30] !== fit || $[31] !== parts) {
509
515
  const entries = Object.entries(parts);
510
516
  interactiveLayerIds = entries.flatMap(_temp3);
511
- ownerOf = (layerId) => entries.find((t12) => {
512
- const [, part_1] = t12;
517
+ ownerOf = (layerId) => entries.find((t13) => {
518
+ const [, part_1] = t13;
513
519
  return part_1.layerIds.includes(layerId);
514
520
  })?.[0];
515
521
  empty = entries.length > 0 && entries.every(_temp4);
516
522
  const corners = _temp5;
517
523
  const boundsKey = _temp7;
518
- dataKey = fit === "none" ? "" : boundsKey(extend(null, entries.map((t13) => {
519
- const [, part_3] = t13;
524
+ dataKey = fit === "none" ? "" : boundsKey(extend(null, entries.map((t14) => {
525
+ const [, part_3] = t14;
520
526
  return corners(part_3.bounds);
521
527
  })));
522
- t11 = fit === "selected" ? boundsKey(extend(null, entries.map((t14) => {
523
- const [, part_4] = t14;
528
+ t12 = fit === "selected" ? boundsKey(extend(null, entries.map((t15) => {
529
+ const [, part_4] = t15;
524
530
  return corners(part_4.selectedBounds);
525
531
  }))) : "";
526
- $[29] = fit;
527
- $[30] = parts;
528
- $[31] = dataKey;
529
- $[32] = empty;
530
- $[33] = interactiveLayerIds;
531
- $[34] = ownerOf;
532
- $[35] = t11;
532
+ $[30] = fit;
533
+ $[31] = parts;
534
+ $[32] = dataKey;
535
+ $[33] = empty;
536
+ $[34] = interactiveLayerIds;
537
+ $[35] = ownerOf;
538
+ $[36] = t12;
533
539
  } else {
534
- dataKey = $[31];
535
- empty = $[32];
536
- interactiveLayerIds = $[33];
537
- ownerOf = $[34];
538
- t11 = $[35];
540
+ dataKey = $[32];
541
+ empty = $[33];
542
+ interactiveLayerIds = $[34];
543
+ ownerOf = $[35];
544
+ t12 = $[36];
539
545
  }
540
- const selectionKey = t11;
546
+ const selectionKey = t12;
541
547
  const userMoved = React.useRef(false);
542
- let t12;
543
548
  let t13;
544
- if ($[36] !== map) {
545
- t12 = () => {
549
+ let t14;
550
+ if ($[37] !== map) {
551
+ t13 = () => {
546
552
  const instance = map?.getMap();
547
553
  if (!instance) return;
548
554
  const onMoveStart = (event) => {
@@ -553,28 +559,28 @@ function MapRoot(t0) {
553
559
  instance.off("movestart", onMoveStart);
554
560
  };
555
561
  };
556
- t13 = [map];
557
- $[36] = map;
558
- $[37] = t12;
562
+ t14 = [map];
563
+ $[37] = map;
559
564
  $[38] = t13;
565
+ $[39] = t14;
560
566
  } else {
561
- t12 = $[37];
562
567
  t13 = $[38];
568
+ t14 = $[39];
563
569
  }
564
- React.useEffect(t12, t13);
565
- let t14;
566
- if ($[39] === Symbol.for("react.memo_cache_sentinel")) {
567
- t14 = {
570
+ React.useEffect(t13, t14);
571
+ let t15;
572
+ if ($[40] === Symbol.for("react.memo_cache_sentinel")) {
573
+ t15 = {
568
574
  data: "",
569
575
  selection: ""
570
576
  };
571
- $[39] = t14;
572
- } else t14 = $[39];
573
- const fitted = React.useRef(t14);
574
- let t15;
577
+ $[40] = t15;
578
+ } else t15 = $[40];
579
+ const fitted = React.useRef(t15);
575
580
  let t16;
576
- if ($[40] !== dataKey || $[41] !== map || $[42] !== selectionKey) {
577
- t15 = () => {
581
+ let t17;
582
+ if ($[41] !== dataKey || $[42] !== map || $[43] !== selectionKey) {
583
+ t16 = () => {
578
584
  if (!map) return;
579
585
  const prev_0 = fitted.current;
580
586
  fitted.current = {
@@ -592,24 +598,24 @@ function MapRoot(t0) {
592
598
  duration: 400
593
599
  });
594
600
  };
595
- t16 = [
601
+ t17 = [
596
602
  map,
597
603
  dataKey,
598
604
  selectionKey
599
605
  ];
600
- $[40] = dataKey;
601
- $[41] = map;
602
- $[42] = selectionKey;
603
- $[43] = t15;
606
+ $[41] = dataKey;
607
+ $[42] = map;
608
+ $[43] = selectionKey;
604
609
  $[44] = t16;
610
+ $[45] = t17;
605
611
  } else {
606
- t15 = $[43];
607
612
  t16 = $[44];
613
+ t17 = $[45];
608
614
  }
609
- React.useEffect(t15, t16);
610
- let t17;
611
- if ($[45] === Symbol.for("react.memo_cache_sentinel")) {
612
- t17 = (next_0, event_0) => {
615
+ React.useEffect(t16, t17);
616
+ let t18;
617
+ if ($[46] === Symbol.for("react.memo_cache_sentinel")) {
618
+ t18 = (next_0, event_0) => {
613
619
  const prev_1 = hovered.current;
614
620
  const key_0 = _temp8;
615
621
  if (key_0(prev_1) === key_0(next_0)) return;
@@ -625,13 +631,13 @@ function MapRoot(t0) {
625
631
  hovered.current = next_0;
626
632
  setCursor(next_0 ? "pointer" : "");
627
633
  };
628
- $[45] = t17;
629
- } else t17 = $[45];
630
- const setHover = t17;
631
- let t18;
634
+ $[46] = t18;
635
+ } else t18 = $[46];
636
+ const setHover = t18;
632
637
  let t19;
633
- if ($[46] !== expanded) {
634
- t18 = () => {
638
+ let t20;
639
+ if ($[47] !== expanded) {
640
+ t19 = () => {
635
641
  if (!expanded) return;
636
642
  const onKeyDown = (event_1) => {
637
643
  if (event_1.key === "Escape" && !event_1.defaultPrevented) setExpanded(false);
@@ -639,35 +645,66 @@ function MapRoot(t0) {
639
645
  document.addEventListener("keydown", onKeyDown);
640
646
  return () => document.removeEventListener("keydown", onKeyDown);
641
647
  };
642
- t19 = [expanded];
643
- $[46] = expanded;
644
- $[47] = t18;
648
+ t20 = [expanded];
649
+ $[47] = expanded;
645
650
  $[48] = t19;
651
+ $[49] = t20;
646
652
  } else {
647
- t18 = $[47];
648
653
  t19 = $[48];
654
+ t20 = $[49];
649
655
  }
650
- React.useEffect(t18, t19);
651
- let t20;
652
- if ($[49] !== initialView) {
653
- t20 = initialView && "bounds" in initialView ? {
654
- bounds: initialView.bounds,
655
- fitBoundsOptions: { padding: 48 }
656
- } : initialView;
657
- $[49] = initialView;
658
- $[50] = t20;
659
- } else t20 = $[50];
660
- const initialViewState = t20;
656
+ React.useEffect(t19, t20);
661
657
  let t21;
662
- if ($[51] !== className) {
663
- t21 = cx("oui-map", className);
664
- $[51] = className;
658
+ let t22;
659
+ if ($[50] !== attributionCollapsed || $[51] !== element) {
660
+ t21 = () => {
661
+ if (!element || !attributionCollapsed) return;
662
+ const collapse = () => {
663
+ const attribution = element.querySelector(".maplibregl-ctrl-attrib.maplibregl-compact-show:not([data-oui-collapsed])");
664
+ if (!attribution) return;
665
+ attribution.classList.remove("maplibregl-compact-show");
666
+ attribution.setAttribute("data-oui-collapsed", "");
667
+ };
668
+ const observer = new MutationObserver(collapse);
669
+ observer.observe(element, {
670
+ subtree: true,
671
+ childList: true,
672
+ attributes: true,
673
+ attributeFilter: ["class"]
674
+ });
675
+ collapse();
676
+ return () => observer.disconnect();
677
+ };
678
+ t22 = [element, attributionCollapsed];
679
+ $[50] = attributionCollapsed;
680
+ $[51] = element;
665
681
  $[52] = t21;
666
- } else t21 = $[52];
667
- const t22 = expanded || void 0;
682
+ $[53] = t22;
683
+ } else {
684
+ t21 = $[52];
685
+ t22 = $[53];
686
+ }
687
+ React.useEffect(t21, t22);
668
688
  let t23;
669
- if ($[53] !== baseLayers || $[54] !== children || $[55] !== colors || $[56] !== controlsPosition || $[57] !== current?.attribution || $[58] !== current?.id || $[59] !== cursor || $[60] !== element || $[61] !== empty || $[62] !== expandable || $[63] !== expanded || $[64] !== initialViewState || $[65] !== interactiveLayerIds || $[66] !== map || $[67] !== mapStyle || $[68] !== onClick || $[69] !== onMouseMove || $[70] !== onMouseOut || $[71] !== ownerOf || $[72] !== props || $[73] !== ref || $[74] !== setBaseLayer || $[75] !== text) {
670
- t23 = element && /* @__PURE__ */ jsx(Map, {
689
+ if ($[54] !== initialView) {
690
+ t23 = initialView && "bounds" in initialView ? {
691
+ bounds: initialView.bounds,
692
+ fitBoundsOptions: { padding: 48 }
693
+ } : initialView;
694
+ $[54] = initialView;
695
+ $[55] = t23;
696
+ } else t23 = $[55];
697
+ const initialViewState = t23;
698
+ let t24;
699
+ if ($[56] !== className) {
700
+ t24 = cx("oui-map", className);
701
+ $[56] = className;
702
+ $[57] = t24;
703
+ } else t24 = $[57];
704
+ const t25 = expanded || void 0;
705
+ let t26;
706
+ if ($[58] !== baseLayers || $[59] !== children || $[60] !== colors || $[61] !== controlsPosition || $[62] !== current?.attribution || $[63] !== current?.id || $[64] !== cursor || $[65] !== element || $[66] !== empty || $[67] !== expandable || $[68] !== expanded || $[69] !== initialViewState || $[70] !== interactiveLayerIds || $[71] !== map || $[72] !== mapStyle || $[73] !== onClick || $[74] !== onMouseMove || $[75] !== onMouseOut || $[76] !== ownerOf || $[77] !== props || $[78] !== ref || $[79] !== setBaseLayer || $[80] !== text) {
707
+ t26 = element && /* @__PURE__ */ jsx(Map, {
671
708
  ...props,
672
709
  mapLib: loadMapLib(),
673
710
  ref: (instance_1) => {
@@ -737,47 +774,47 @@ function MapRoot(t0) {
737
774
  ]
738
775
  })
739
776
  });
740
- $[53] = baseLayers;
741
- $[54] = children;
742
- $[55] = colors;
743
- $[56] = controlsPosition;
744
- $[57] = current?.attribution;
745
- $[58] = current?.id;
746
- $[59] = cursor;
747
- $[60] = element;
748
- $[61] = empty;
749
- $[62] = expandable;
750
- $[63] = expanded;
751
- $[64] = initialViewState;
752
- $[65] = interactiveLayerIds;
753
- $[66] = map;
754
- $[67] = mapStyle;
755
- $[68] = onClick;
756
- $[69] = onMouseMove;
757
- $[70] = onMouseOut;
758
- $[71] = ownerOf;
759
- $[72] = props;
760
- $[73] = ref;
761
- $[74] = setBaseLayer;
762
- $[75] = text;
763
- $[76] = t23;
764
- } else t23 = $[76];
765
- let t24;
766
- if ($[77] !== style || $[78] !== t21 || $[79] !== t22 || $[80] !== t23) {
767
- t24 = /* @__PURE__ */ jsx("div", {
777
+ $[58] = baseLayers;
778
+ $[59] = children;
779
+ $[60] = colors;
780
+ $[61] = controlsPosition;
781
+ $[62] = current?.attribution;
782
+ $[63] = current?.id;
783
+ $[64] = cursor;
784
+ $[65] = element;
785
+ $[66] = empty;
786
+ $[67] = expandable;
787
+ $[68] = expanded;
788
+ $[69] = initialViewState;
789
+ $[70] = interactiveLayerIds;
790
+ $[71] = map;
791
+ $[72] = mapStyle;
792
+ $[73] = onClick;
793
+ $[74] = onMouseMove;
794
+ $[75] = onMouseOut;
795
+ $[76] = ownerOf;
796
+ $[77] = props;
797
+ $[78] = ref;
798
+ $[79] = setBaseLayer;
799
+ $[80] = text;
800
+ $[81] = t26;
801
+ } else t26 = $[81];
802
+ let t27;
803
+ if ($[82] !== style || $[83] !== t24 || $[84] !== t25 || $[85] !== t26) {
804
+ t27 = /* @__PURE__ */ jsx("div", {
768
805
  ref: setElement,
769
- className: t21,
806
+ className: t24,
770
807
  style,
771
- "data-expanded": t22,
772
- children: t23
808
+ "data-expanded": t25,
809
+ children: t26
773
810
  });
774
- $[77] = style;
775
- $[78] = t21;
776
- $[79] = t22;
777
- $[80] = t23;
778
- $[81] = t24;
779
- } else t24 = $[81];
780
- return t24;
811
+ $[82] = style;
812
+ $[83] = t24;
813
+ $[84] = t25;
814
+ $[85] = t26;
815
+ $[86] = t27;
816
+ } else t27 = $[86];
817
+ return t27;
781
818
  }
782
819
  /** The expand button as a MapLibre control, so it stacks with the zoom buttons in the same corner. */
783
820
  function _temp9(value_0) {
@@ -1773,7 +1810,7 @@ function MapOverlay(t0) {
1773
1810
  * />
1774
1811
  */
1775
1812
  function MapLegend(t0) {
1776
- const $ = c(48);
1813
+ const $ = c(50);
1777
1814
  let className;
1778
1815
  let items;
1779
1816
  let onSelectedIdsChange;
@@ -1783,8 +1820,9 @@ function MapLegend(t0) {
1783
1820
  let t1;
1784
1821
  let t2;
1785
1822
  let t3;
1823
+ let t4;
1786
1824
  if ($[0] !== t0) {
1787
- ({items, selectionMode: t1, selectedIds: t2, onSelectedIdsChange, onVisibilityChange, showAllToggle: t3, className, ref, ...props} = t0);
1825
+ ({items, selectionMode: t1, selectedIds: t2, onSelectedIdsChange, onVisibilityChange, showAllToggle: t3, size: t4, className, ref, ...props} = t0);
1788
1826
  $[0] = t0;
1789
1827
  $[1] = className;
1790
1828
  $[2] = items;
@@ -1795,6 +1833,7 @@ function MapLegend(t0) {
1795
1833
  $[7] = t1;
1796
1834
  $[8] = t2;
1797
1835
  $[9] = t3;
1836
+ $[10] = t4;
1798
1837
  } else {
1799
1838
  className = $[1];
1800
1839
  items = $[2];
@@ -1805,63 +1844,65 @@ function MapLegend(t0) {
1805
1844
  t1 = $[7];
1806
1845
  t2 = $[8];
1807
1846
  t3 = $[9];
1847
+ t4 = $[10];
1808
1848
  }
1809
1849
  const selectionMode = t1 === void 0 ? "none" : t1;
1810
- let t4;
1811
- if ($[10] !== t2) {
1812
- t4 = t2 === void 0 ? [] : t2;
1813
- $[10] = t2;
1814
- $[11] = t4;
1815
- } else t4 = $[11];
1816
- const selectedIds = t4;
1850
+ let t5;
1851
+ if ($[11] !== t2) {
1852
+ t5 = t2 === void 0 ? [] : t2;
1853
+ $[11] = t2;
1854
+ $[12] = t5;
1855
+ } else t5 = $[12];
1856
+ const selectedIds = t5;
1817
1857
  const showAllToggle = t3 === void 0 ? false : t3;
1858
+ const size = t4 === void 0 ? "md" : t4;
1818
1859
  const labels = React.use(MapContext)?.labels ?? defaultLabels;
1819
- let t5;
1820
- if ($[12] !== items) {
1821
- t5 = items.every(_temp13);
1822
- $[12] = items;
1823
- $[13] = t5;
1824
- } else t5 = $[13];
1825
- const allVisible = t5;
1826
1860
  let t6;
1827
- if ($[14] !== onSelectedIdsChange || $[15] !== selectedIds || $[16] !== selectionMode) {
1828
- t6 = (id) => {
1861
+ if ($[13] !== items) {
1862
+ t6 = items.every(_temp13);
1863
+ $[13] = items;
1864
+ $[14] = t6;
1865
+ } else t6 = $[14];
1866
+ const allVisible = t6;
1867
+ let t7;
1868
+ if ($[15] !== onSelectedIdsChange || $[16] !== selectedIds || $[17] !== selectionMode) {
1869
+ t7 = (id) => {
1829
1870
  const on = selectedIds.includes(id);
1830
1871
  if (selectionMode === "single") onSelectedIdsChange?.(on ? [] : [id]);
1831
1872
  else onSelectedIdsChange?.(on ? selectedIds.filter((s) => s !== id) : [...selectedIds, id]);
1832
1873
  };
1833
- $[14] = onSelectedIdsChange;
1834
- $[15] = selectedIds;
1835
- $[16] = selectionMode;
1836
- $[17] = t6;
1837
- } else t6 = $[17];
1838
- const toggle = t6;
1839
- let t7;
1840
- if ($[18] !== className) {
1841
- t7 = cx("oui-map-legend", className);
1842
- $[18] = className;
1843
- $[19] = t7;
1844
- } else t7 = $[19];
1874
+ $[15] = onSelectedIdsChange;
1875
+ $[16] = selectedIds;
1876
+ $[17] = selectionMode;
1877
+ $[18] = t7;
1878
+ } else t7 = $[18];
1879
+ const toggle = t7;
1845
1880
  let t8;
1846
- if ($[20] !== allVisible || $[21] !== items || $[22] !== labels || $[23] !== onVisibilityChange || $[24] !== showAllToggle) {
1847
- t8 = onVisibilityChange && showAllToggle && /* @__PURE__ */ jsx("button", {
1881
+ if ($[19] !== className) {
1882
+ t8 = cx("oui-map-legend", className);
1883
+ $[19] = className;
1884
+ $[20] = t8;
1885
+ } else t8 = $[20];
1886
+ let t9;
1887
+ if ($[21] !== allVisible || $[22] !== items || $[23] !== labels || $[24] !== onVisibilityChange || $[25] !== showAllToggle) {
1888
+ t9 = onVisibilityChange && showAllToggle && /* @__PURE__ */ jsx("button", {
1848
1889
  type: "button",
1849
1890
  className: "oui-map-legend__toggle-all",
1850
1891
  onClick: () => onVisibilityChange(items.map(_temp14), !allVisible),
1851
1892
  children: allVisible ? labels.hideAll : labels.showAll
1852
1893
  });
1853
- $[20] = allVisible;
1854
- $[21] = items;
1855
- $[22] = labels;
1856
- $[23] = onVisibilityChange;
1857
- $[24] = showAllToggle;
1858
- $[25] = t8;
1859
- } else t8 = $[25];
1860
- let t9;
1861
- if ($[26] !== items || $[27] !== labels || $[28] !== onVisibilityChange || $[29] !== selectedIds || $[30] !== selectionMode || $[31] !== toggle) {
1862
- let t10;
1863
- if ($[33] !== labels || $[34] !== onVisibilityChange || $[35] !== selectedIds || $[36] !== selectionMode || $[37] !== toggle) {
1864
- t10 = (item_1) => {
1894
+ $[21] = allVisible;
1895
+ $[22] = items;
1896
+ $[23] = labels;
1897
+ $[24] = onVisibilityChange;
1898
+ $[25] = showAllToggle;
1899
+ $[26] = t9;
1900
+ } else t9 = $[26];
1901
+ let t10;
1902
+ if ($[27] !== items || $[28] !== labels || $[29] !== onVisibilityChange || $[30] !== selectedIds || $[31] !== selectionMode || $[32] !== toggle) {
1903
+ let t11;
1904
+ if ($[34] !== labels || $[35] !== onVisibilityChange || $[36] !== selectedIds || $[37] !== selectionMode || $[38] !== toggle) {
1905
+ t11 = (item_1) => {
1865
1906
  const selected = selectedIds.includes(item_1.id);
1866
1907
  const visible = item_1.visible !== false;
1867
1908
  const content = /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -1900,49 +1941,51 @@ function MapLegend(t0) {
1900
1941
  })]
1901
1942
  }, item_1.id);
1902
1943
  };
1903
- $[33] = labels;
1904
- $[34] = onVisibilityChange;
1905
- $[35] = selectedIds;
1906
- $[36] = selectionMode;
1907
- $[37] = toggle;
1908
- $[38] = t10;
1909
- } else t10 = $[38];
1910
- t9 = items.map(t10);
1911
- $[26] = items;
1912
- $[27] = labels;
1913
- $[28] = onVisibilityChange;
1914
- $[29] = selectedIds;
1915
- $[30] = selectionMode;
1916
- $[31] = toggle;
1917
- $[32] = t9;
1918
- } else t9 = $[32];
1919
- let t10;
1920
- if ($[39] !== t9) {
1921
- t10 = /* @__PURE__ */ jsx("ul", {
1944
+ $[34] = labels;
1945
+ $[35] = onVisibilityChange;
1946
+ $[36] = selectedIds;
1947
+ $[37] = selectionMode;
1948
+ $[38] = toggle;
1949
+ $[39] = t11;
1950
+ } else t11 = $[39];
1951
+ t10 = items.map(t11);
1952
+ $[27] = items;
1953
+ $[28] = labels;
1954
+ $[29] = onVisibilityChange;
1955
+ $[30] = selectedIds;
1956
+ $[31] = selectionMode;
1957
+ $[32] = toggle;
1958
+ $[33] = t10;
1959
+ } else t10 = $[33];
1960
+ let t11;
1961
+ if ($[40] !== t10) {
1962
+ t11 = /* @__PURE__ */ jsx("ul", {
1922
1963
  className: "oui-map-legend__list",
1923
- children: t9
1964
+ children: t10
1924
1965
  });
1925
- $[39] = t9;
1926
1966
  $[40] = t10;
1927
- } else t10 = $[40];
1928
- let t11;
1929
- if ($[41] !== props || $[42] !== ref || $[43] !== selectionMode || $[44] !== t10 || $[45] !== t7 || $[46] !== t8) {
1930
- t11 = /* @__PURE__ */ jsxs("div", {
1967
+ $[41] = t11;
1968
+ } else t11 = $[41];
1969
+ let t12;
1970
+ if ($[42] !== props || $[43] !== ref || $[44] !== selectionMode || $[45] !== size || $[46] !== t11 || $[47] !== t8 || $[48] !== t9) {
1971
+ t12 = /* @__PURE__ */ jsxs("div", {
1931
1972
  ref,
1932
- className: t7,
1973
+ className: t8,
1933
1974
  "data-selection-mode": selectionMode,
1975
+ "data-size": size,
1934
1976
  ...props,
1935
- children: [t8, t10]
1977
+ children: [t9, t11]
1936
1978
  });
1937
- $[41] = props;
1938
- $[42] = ref;
1939
- $[43] = selectionMode;
1940
- $[44] = t10;
1941
- $[45] = t7;
1942
- $[46] = t8;
1943
- $[47] = t11;
1944
- } else t11 = $[47];
1945
- return t11;
1979
+ $[42] = props;
1980
+ $[43] = ref;
1981
+ $[44] = selectionMode;
1982
+ $[45] = size;
1983
+ $[46] = t11;
1984
+ $[47] = t8;
1985
+ $[48] = t9;
1986
+ $[49] = t12;
1987
+ } else t12 = $[49];
1988
+ return t12;
1946
1989
  }
1947
1990
  function _temp14(item_0) {
1948
1991
  return item_0.id;
@@ -1950,45 +1993,118 @@ function _temp14(item_0) {
1950
1993
  function _temp13(item) {
1951
1994
  return item.visible !== false;
1952
1995
  }
1953
- /** Segmented switch between the root's `baseLayers` (e.g. streets and satellite). Put it in a `Map.Overlay`. */
1996
+ /**
1997
+ * Switch between the root's `baseLayers` (e.g. streets and satellite): a segmented switch, or with
1998
+ * `variant="icon"` a single button that cycles them. Put it in a `Map.Overlay`.
1999
+ */
1954
2000
  function MapBaseLayerSwitch(t0) {
1955
- const $ = c(11);
2001
+ const $ = c(33);
2002
+ let className;
1956
2003
  let props;
1957
2004
  let t1;
2005
+ let t2;
1958
2006
  if ($[0] !== t0) {
1959
- ({size: t1, ...props} = t0);
2007
+ ({variant: t1, size: t2, className, ...props} = t0);
1960
2008
  $[0] = t0;
1961
- $[1] = props;
1962
- $[2] = t1;
2009
+ $[1] = className;
2010
+ $[2] = props;
2011
+ $[3] = t1;
2012
+ $[4] = t2;
1963
2013
  } else {
1964
- props = $[1];
1965
- t1 = $[2];
2014
+ className = $[1];
2015
+ props = $[2];
2016
+ t1 = $[3];
2017
+ t2 = $[4];
2018
+ }
2019
+ const variant = t1 === void 0 ? "segmented" : t1;
2020
+ const size = t2 === void 0 ? "sm" : t2;
2021
+ const { baseLayers, baseLayer, setBaseLayer, labels } = useMapContext("Map.BaseLayerSwitch");
2022
+ if (variant === "icon") {
2023
+ let t3;
2024
+ if ($[5] !== baseLayer || $[6] !== baseLayers) {
2025
+ let t4;
2026
+ if ($[8] !== baseLayer) {
2027
+ t4 = (layer) => layer.id === baseLayer;
2028
+ $[8] = baseLayer;
2029
+ $[9] = t4;
2030
+ } else t4 = $[9];
2031
+ t3 = baseLayers.findIndex(t4);
2032
+ $[5] = baseLayer;
2033
+ $[6] = baseLayers;
2034
+ $[7] = t3;
2035
+ } else t3 = $[7];
2036
+ const index = Math.max(0, t3);
2037
+ const shown = baseLayers[index];
2038
+ const name = `${labels.baseLayer}: ${typeof shown?.label === "string" ? shown.label : shown?.id ?? ""}`;
2039
+ const t4 = typeof className === "string" && className;
2040
+ let t5;
2041
+ if ($[10] !== t4) {
2042
+ t5 = cx("oui-map__layer-switch", t4);
2043
+ $[10] = t4;
2044
+ $[11] = t5;
2045
+ } else t5 = $[11];
2046
+ const t6 = baseLayers.length < 2;
2047
+ let t7;
2048
+ if ($[12] !== baseLayers || $[13] !== index || $[14] !== setBaseLayer) {
2049
+ t7 = () => setBaseLayer(baseLayers[(index + 1) % baseLayers.length].id);
2050
+ $[12] = baseLayers;
2051
+ $[13] = index;
2052
+ $[14] = setBaseLayer;
2053
+ $[15] = t7;
2054
+ } else t7 = $[15];
2055
+ let t8;
2056
+ if ($[16] === Symbol.for("react.memo_cache_sentinel")) {
2057
+ t8 = /* @__PURE__ */ jsx(LayersIcon, {});
2058
+ $[16] = t8;
2059
+ } else t8 = $[16];
2060
+ let t9;
2061
+ if ($[17] !== name || $[18] !== size || $[19] !== t5 || $[20] !== t6 || $[21] !== t7) {
2062
+ t9 = /* @__PURE__ */ jsx(IconButton, {
2063
+ variant: "secondary",
2064
+ size,
2065
+ className: t5,
2066
+ "aria-label": name,
2067
+ title: name,
2068
+ disabled: t6,
2069
+ onClick: t7,
2070
+ children: t8
2071
+ });
2072
+ $[17] = name;
2073
+ $[18] = size;
2074
+ $[19] = t5;
2075
+ $[20] = t6;
2076
+ $[21] = t7;
2077
+ $[22] = t9;
2078
+ } else t9 = $[22];
2079
+ return t9;
1966
2080
  }
1967
- const size = t1 === void 0 ? "sm" : t1;
1968
- const { baseLayers, baseLayer, setBaseLayer } = useMapContext("Map.BaseLayerSwitch");
1969
- let t2;
1970
- if ($[3] !== baseLayers) {
1971
- t2 = baseLayers.map(_temp15);
1972
- $[3] = baseLayers;
1973
- $[4] = t2;
1974
- } else t2 = $[4];
1975
2081
  let t3;
1976
- if ($[5] !== baseLayer || $[6] !== props || $[7] !== setBaseLayer || $[8] !== size || $[9] !== t2) {
1977
- t3 = /* @__PURE__ */ jsx(SegmentedControl, {
2082
+ if ($[23] !== baseLayers) {
2083
+ t3 = baseLayers.map(_temp15);
2084
+ $[23] = baseLayers;
2085
+ $[24] = t3;
2086
+ } else t3 = $[24];
2087
+ let t4;
2088
+ if ($[25] !== baseLayer || $[26] !== className || $[27] !== props || $[28] !== setBaseLayer || $[29] !== size || $[30] !== t3 || $[31] !== variant) {
2089
+ t4 = /* @__PURE__ */ jsx(SegmentedControl, {
2090
+ variant,
1978
2091
  size,
1979
- options: t2,
2092
+ className,
2093
+ options: t3,
1980
2094
  value: baseLayer,
1981
2095
  onValueChange: setBaseLayer,
1982
2096
  ...props
1983
2097
  });
1984
- $[5] = baseLayer;
1985
- $[6] = props;
1986
- $[7] = setBaseLayer;
1987
- $[8] = size;
1988
- $[9] = t2;
1989
- $[10] = t3;
1990
- } else t3 = $[10];
1991
- return t3;
2098
+ $[25] = baseLayer;
2099
+ $[26] = className;
2100
+ $[27] = props;
2101
+ $[28] = setBaseLayer;
2102
+ $[29] = size;
2103
+ $[30] = t3;
2104
+ $[31] = variant;
2105
+ $[32] = t4;
2106
+ } else t4 = $[32];
2107
+ return t4;
1992
2108
  }
1993
2109
  /**
1994
2110
  * Map components on MapLibre, from `@optimum-intelligence/opti-ui/map`. `Map.Root` holds the map; inside
@@ -2008,10 +2124,10 @@ function MapBaseLayerSwitch(t0) {
2008
2124
  * </Map.Overlay>
2009
2125
  * </Map.Root>
2010
2126
  */
2011
- function _temp15(layer) {
2127
+ function _temp15(layer_0) {
2012
2128
  return {
2013
- value: layer.id,
2014
- label: layer.label
2129
+ value: layer_0.id,
2130
+ label: layer_0.label
2015
2131
  };
2016
2132
  }
2017
2133
  var Map$1 = {