@flytedan/flytebot-design-system 0.43.0 → 0.44.0

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/index.js CHANGED
@@ -715,6 +715,7 @@ import ReactDOM from "react-dom";
715
715
  import { jsx as jsx6 } from "react/jsx-runtime";
716
716
  function AnchoredPopover({ rect, width = 620, onClose, children }) {
717
717
  const ref = React4.useRef(null);
718
+ const isInnermostEscapeLayer = useEscapeLayer(!!rect);
718
719
  const w = Math.min(width, window.innerWidth - 32);
719
720
  const [h, setH] = React4.useState(0);
720
721
  React4.useLayoutEffect(() => {
@@ -731,7 +732,8 @@ function AnchoredPopover({ rect, width = 620, onClose, children }) {
731
732
  if (ref.current && !ref.current.contains(e.target)) onClose();
732
733
  };
733
734
  const esc = (e) => {
734
- if (e.key === "Escape") onClose();
735
+ if (e.key !== "Escape" || !isInnermostEscapeLayer()) return;
736
+ onClose();
735
737
  };
736
738
  const t = setTimeout(() => document.addEventListener("pointerdown", away), 0);
737
739
  document.addEventListener("keydown", esc);
@@ -740,7 +742,7 @@ function AnchoredPopover({ rect, width = 620, onClose, children }) {
740
742
  document.removeEventListener("pointerdown", away);
741
743
  document.removeEventListener("keydown", esc);
742
744
  };
743
- }, [onClose]);
745
+ }, [onClose, isInnermostEscapeLayer]);
744
746
  if (!rect) return null;
745
747
  const GAP = 8;
746
748
  const PAD = 16;
@@ -1377,14 +1379,16 @@ function useResponsiveRail(options = {}) {
1377
1379
  mq.addEventListener("change", handler);
1378
1380
  return () => mq.removeEventListener("change", handler);
1379
1381
  }, [breakpoint]);
1382
+ const isInnermostEscapeLayer = useEscapeLayer(overlay && open);
1380
1383
  React12.useEffect(() => {
1381
1384
  if (!overlay || !open) return;
1382
1385
  const handler = (e) => {
1383
- if (e.key === "Escape") close();
1386
+ if (e.key !== "Escape" || !isInnermostEscapeLayer()) return;
1387
+ close();
1384
1388
  };
1385
1389
  document.addEventListener("keydown", handler);
1386
1390
  return () => document.removeEventListener("keydown", handler);
1387
- }, [overlay, open, close]);
1391
+ }, [overlay, open, close, isInnermostEscapeLayer]);
1388
1392
  React12.useEffect(() => {
1389
1393
  if (!overlay || !open) return;
1390
1394
  const previousOverflow = document.body.style.overflow;
@@ -1790,10 +1794,12 @@ function Tooltip({ label, placement = "top", children, className = "" }) {
1790
1794
  onDetach: hide
1791
1795
  });
1792
1796
  const zIndex = useOverlayLayer(open);
1797
+ const isInnermostEscapeLayer = useEscapeLayer(open);
1793
1798
  React13.useEffect(() => {
1794
1799
  if (!open) return;
1795
1800
  const key = (e) => {
1796
- if (e.key === "Escape") hide();
1801
+ if (e.key !== "Escape" || !isInnermostEscapeLayer()) return;
1802
+ hide();
1797
1803
  };
1798
1804
  const away = (e) => {
1799
1805
  const t = e.target;
@@ -1807,7 +1813,7 @@ function Tooltip({ label, placement = "top", children, className = "" }) {
1807
1813
  document.removeEventListener("keydown", key);
1808
1814
  document.removeEventListener("pointerdown", away, true);
1809
1815
  };
1810
- }, [open, hide]);
1816
+ }, [open, hide, isInnermostEscapeLayer]);
1811
1817
  const isMouse = (e) => e.pointerType === "mouse";
1812
1818
  const onFocus = (e) => {
1813
1819
  const el = e.target;
@@ -4995,22 +5001,29 @@ import { jsx as jsx53, jsxs as jsxs47 } from "react/jsx-runtime";
4995
5001
  function SortMenu({ fields = [], sort, onSort, align = "right", size = "md", className = "", ...rest }) {
4996
5002
  const [open, setOpen] = React30.useState(false);
4997
5003
  const zIndex = useOverlayLayer(open);
5004
+ const isInnermostEscapeLayer = useEscapeLayer(open);
4998
5005
  const ref = React30.useRef(null);
4999
5006
  React30.useEffect(() => {
5000
5007
  if (!open) return;
5001
5008
  const away = (e) => {
5002
5009
  if (ref.current && !ref.current.contains(e.target)) setOpen(false);
5003
5010
  };
5011
+ document.addEventListener("pointerdown", away);
5012
+ return () => {
5013
+ document.removeEventListener("pointerdown", away);
5014
+ };
5015
+ }, [open]);
5016
+ React30.useEffect(() => {
5017
+ if (!open) return;
5004
5018
  const esc = (e) => {
5005
- if (e.key === "Escape") setOpen(false);
5019
+ if (e.key !== "Escape" || !isInnermostEscapeLayer()) return;
5020
+ setOpen(false);
5006
5021
  };
5007
- document.addEventListener("pointerdown", away);
5008
5022
  document.addEventListener("keydown", esc);
5009
5023
  return () => {
5010
- document.removeEventListener("pointerdown", away);
5011
5024
  document.removeEventListener("keydown", esc);
5012
5025
  };
5013
- }, [open]);
5026
+ }, [open, isInnermostEscapeLayer]);
5014
5027
  const cur = fields.find((f) => f.key === (sort && sort.key));
5015
5028
  const dir = sort && sort.dir;
5016
5029
  const arrow = (f, d) => {
@@ -10522,22 +10535,29 @@ function ModeSwitch({ canToggle = false, requestCount = 0, onClearLog, renderLog
10522
10535
  const mode2 = useRuntimeMode();
10523
10536
  const [open, setOpen] = React54.useState(false);
10524
10537
  const zIndex = useOverlayLayer(open);
10538
+ const isInnermostEscapeLayer = useEscapeLayer(open);
10525
10539
  const ref = React54.useRef(null);
10526
10540
  React54.useEffect(() => {
10527
10541
  if (!open) return;
10528
10542
  const away = (e) => {
10529
10543
  if (ref.current && !ref.current.contains(e.target)) setOpen(false);
10530
10544
  };
10545
+ document.addEventListener("pointerdown", away);
10546
+ return () => {
10547
+ document.removeEventListener("pointerdown", away);
10548
+ };
10549
+ }, [open]);
10550
+ React54.useEffect(() => {
10551
+ if (!open) return;
10531
10552
  const esc = (e) => {
10532
- if (e.key === "Escape") setOpen(false);
10553
+ if (e.key !== "Escape" || !isInnermostEscapeLayer()) return;
10554
+ setOpen(false);
10533
10555
  };
10534
- document.addEventListener("pointerdown", away);
10535
10556
  document.addEventListener("keydown", esc);
10536
10557
  return () => {
10537
- document.removeEventListener("pointerdown", away);
10538
10558
  document.removeEventListener("keydown", esc);
10539
10559
  };
10540
- }, [open]);
10560
+ }, [open, isInnermostEscapeLayer]);
10541
10561
  if (!canToggle) return null;
10542
10562
  const test = mode2 === "test";
10543
10563
  const s = summary || RuntimeKit.summary();
@@ -13032,22 +13052,29 @@ function FolderPickerMenu({
13032
13052
  }) {
13033
13053
  const [open, setOpen] = React65.useState(false);
13034
13054
  const zIndex = useOverlayLayer(open);
13055
+ const isInnermostEscapeLayer = useEscapeLayer(open);
13035
13056
  const ref = React65.useRef(null);
13036
13057
  React65.useEffect(() => {
13037
13058
  if (!open) return;
13038
13059
  const away = (e) => {
13039
13060
  if (ref.current && !ref.current.contains(e.target)) setOpen(false);
13040
13061
  };
13062
+ document.addEventListener("pointerdown", away);
13063
+ return () => {
13064
+ document.removeEventListener("pointerdown", away);
13065
+ };
13066
+ }, [open]);
13067
+ React65.useEffect(() => {
13068
+ if (!open) return;
13041
13069
  const esc = (e) => {
13042
- if (e.key === "Escape") setOpen(false);
13070
+ if (e.key !== "Escape" || !isInnermostEscapeLayer()) return;
13071
+ setOpen(false);
13043
13072
  };
13044
- document.addEventListener("pointerdown", away);
13045
13073
  document.addEventListener("keydown", esc);
13046
13074
  return () => {
13047
- document.removeEventListener("pointerdown", away);
13048
13075
  document.removeEventListener("keydown", esc);
13049
13076
  };
13050
- }, [open]);
13077
+ }, [open, isInnermostEscapeLayer]);
13051
13078
  return /* @__PURE__ */ jsxs87("span", { className: "fd-fb-menu-anchor", ref, children: [
13052
13079
  /* @__PURE__ */ jsx94(
13053
13080
  IconButton,