@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.cjs CHANGED
@@ -959,6 +959,7 @@ var import_react_dom2 = __toESM(require("react-dom"), 1);
959
959
  var import_jsx_runtime6 = require("react/jsx-runtime");
960
960
  function AnchoredPopover({ rect, width = 620, onClose, children }) {
961
961
  const ref = React4.useRef(null);
962
+ const isInnermostEscapeLayer = useEscapeLayer(!!rect);
962
963
  const w = Math.min(width, window.innerWidth - 32);
963
964
  const [h, setH] = React4.useState(0);
964
965
  React4.useLayoutEffect(() => {
@@ -975,7 +976,8 @@ function AnchoredPopover({ rect, width = 620, onClose, children }) {
975
976
  if (ref.current && !ref.current.contains(e.target)) onClose();
976
977
  };
977
978
  const esc = (e) => {
978
- if (e.key === "Escape") onClose();
979
+ if (e.key !== "Escape" || !isInnermostEscapeLayer()) return;
980
+ onClose();
979
981
  };
980
982
  const t = setTimeout(() => document.addEventListener("pointerdown", away), 0);
981
983
  document.addEventListener("keydown", esc);
@@ -984,7 +986,7 @@ function AnchoredPopover({ rect, width = 620, onClose, children }) {
984
986
  document.removeEventListener("pointerdown", away);
985
987
  document.removeEventListener("keydown", esc);
986
988
  };
987
- }, [onClose]);
989
+ }, [onClose, isInnermostEscapeLayer]);
988
990
  if (!rect) return null;
989
991
  const GAP = 8;
990
992
  const PAD = 16;
@@ -1621,14 +1623,16 @@ function useResponsiveRail(options = {}) {
1621
1623
  mq.addEventListener("change", handler);
1622
1624
  return () => mq.removeEventListener("change", handler);
1623
1625
  }, [breakpoint]);
1626
+ const isInnermostEscapeLayer = useEscapeLayer(overlay && open);
1624
1627
  React12.useEffect(() => {
1625
1628
  if (!overlay || !open) return;
1626
1629
  const handler = (e) => {
1627
- if (e.key === "Escape") close();
1630
+ if (e.key !== "Escape" || !isInnermostEscapeLayer()) return;
1631
+ close();
1628
1632
  };
1629
1633
  document.addEventListener("keydown", handler);
1630
1634
  return () => document.removeEventListener("keydown", handler);
1631
- }, [overlay, open, close]);
1635
+ }, [overlay, open, close, isInnermostEscapeLayer]);
1632
1636
  React12.useEffect(() => {
1633
1637
  if (!overlay || !open) return;
1634
1638
  const previousOverflow = document.body.style.overflow;
@@ -2034,10 +2038,12 @@ function Tooltip({ label, placement = "top", children, className = "" }) {
2034
2038
  onDetach: hide
2035
2039
  });
2036
2040
  const zIndex = useOverlayLayer(open);
2041
+ const isInnermostEscapeLayer = useEscapeLayer(open);
2037
2042
  React13.useEffect(() => {
2038
2043
  if (!open) return;
2039
2044
  const key = (e) => {
2040
- if (e.key === "Escape") hide();
2045
+ if (e.key !== "Escape" || !isInnermostEscapeLayer()) return;
2046
+ hide();
2041
2047
  };
2042
2048
  const away = (e) => {
2043
2049
  const t = e.target;
@@ -2051,7 +2057,7 @@ function Tooltip({ label, placement = "top", children, className = "" }) {
2051
2057
  document.removeEventListener("keydown", key);
2052
2058
  document.removeEventListener("pointerdown", away, true);
2053
2059
  };
2054
- }, [open, hide]);
2060
+ }, [open, hide, isInnermostEscapeLayer]);
2055
2061
  const isMouse = (e) => e.pointerType === "mouse";
2056
2062
  const onFocus = (e) => {
2057
2063
  const el = e.target;
@@ -5239,22 +5245,29 @@ var import_jsx_runtime54 = require("react/jsx-runtime");
5239
5245
  function SortMenu({ fields = [], sort, onSort, align = "right", size = "md", className = "", ...rest }) {
5240
5246
  const [open, setOpen] = React30.useState(false);
5241
5247
  const zIndex = useOverlayLayer(open);
5248
+ const isInnermostEscapeLayer = useEscapeLayer(open);
5242
5249
  const ref = React30.useRef(null);
5243
5250
  React30.useEffect(() => {
5244
5251
  if (!open) return;
5245
5252
  const away = (e) => {
5246
5253
  if (ref.current && !ref.current.contains(e.target)) setOpen(false);
5247
5254
  };
5255
+ document.addEventListener("pointerdown", away);
5256
+ return () => {
5257
+ document.removeEventListener("pointerdown", away);
5258
+ };
5259
+ }, [open]);
5260
+ React30.useEffect(() => {
5261
+ if (!open) return;
5248
5262
  const esc = (e) => {
5249
- if (e.key === "Escape") setOpen(false);
5263
+ if (e.key !== "Escape" || !isInnermostEscapeLayer()) return;
5264
+ setOpen(false);
5250
5265
  };
5251
- document.addEventListener("pointerdown", away);
5252
5266
  document.addEventListener("keydown", esc);
5253
5267
  return () => {
5254
- document.removeEventListener("pointerdown", away);
5255
5268
  document.removeEventListener("keydown", esc);
5256
5269
  };
5257
- }, [open]);
5270
+ }, [open, isInnermostEscapeLayer]);
5258
5271
  const cur = fields.find((f) => f.key === (sort && sort.key));
5259
5272
  const dir = sort && sort.dir;
5260
5273
  const arrow = (f, d) => {
@@ -10766,22 +10779,29 @@ function ModeSwitch({ canToggle = false, requestCount = 0, onClearLog, renderLog
10766
10779
  const mode2 = useRuntimeMode();
10767
10780
  const [open, setOpen] = React54.useState(false);
10768
10781
  const zIndex = useOverlayLayer(open);
10782
+ const isInnermostEscapeLayer = useEscapeLayer(open);
10769
10783
  const ref = React54.useRef(null);
10770
10784
  React54.useEffect(() => {
10771
10785
  if (!open) return;
10772
10786
  const away = (e) => {
10773
10787
  if (ref.current && !ref.current.contains(e.target)) setOpen(false);
10774
10788
  };
10789
+ document.addEventListener("pointerdown", away);
10790
+ return () => {
10791
+ document.removeEventListener("pointerdown", away);
10792
+ };
10793
+ }, [open]);
10794
+ React54.useEffect(() => {
10795
+ if (!open) return;
10775
10796
  const esc = (e) => {
10776
- if (e.key === "Escape") setOpen(false);
10797
+ if (e.key !== "Escape" || !isInnermostEscapeLayer()) return;
10798
+ setOpen(false);
10777
10799
  };
10778
- document.addEventListener("pointerdown", away);
10779
10800
  document.addEventListener("keydown", esc);
10780
10801
  return () => {
10781
- document.removeEventListener("pointerdown", away);
10782
10802
  document.removeEventListener("keydown", esc);
10783
10803
  };
10784
- }, [open]);
10804
+ }, [open, isInnermostEscapeLayer]);
10785
10805
  if (!canToggle) return null;
10786
10806
  const test = mode2 === "test";
10787
10807
  const s = summary || RuntimeKit.summary();
@@ -13276,22 +13296,29 @@ function FolderPickerMenu({
13276
13296
  }) {
13277
13297
  const [open, setOpen] = React65.useState(false);
13278
13298
  const zIndex = useOverlayLayer(open);
13299
+ const isInnermostEscapeLayer = useEscapeLayer(open);
13279
13300
  const ref = React65.useRef(null);
13280
13301
  React65.useEffect(() => {
13281
13302
  if (!open) return;
13282
13303
  const away = (e) => {
13283
13304
  if (ref.current && !ref.current.contains(e.target)) setOpen(false);
13284
13305
  };
13306
+ document.addEventListener("pointerdown", away);
13307
+ return () => {
13308
+ document.removeEventListener("pointerdown", away);
13309
+ };
13310
+ }, [open]);
13311
+ React65.useEffect(() => {
13312
+ if (!open) return;
13285
13313
  const esc = (e) => {
13286
- if (e.key === "Escape") setOpen(false);
13314
+ if (e.key !== "Escape" || !isInnermostEscapeLayer()) return;
13315
+ setOpen(false);
13287
13316
  };
13288
- document.addEventListener("pointerdown", away);
13289
13317
  document.addEventListener("keydown", esc);
13290
13318
  return () => {
13291
- document.removeEventListener("pointerdown", away);
13292
13319
  document.removeEventListener("keydown", esc);
13293
13320
  };
13294
- }, [open]);
13321
+ }, [open, isInnermostEscapeLayer]);
13295
13322
  return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("span", { className: "fd-fb-menu-anchor", ref, children: [
13296
13323
  /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
13297
13324
  IconButton,