sit-onyx 1.4.0-dev-20251111093451 → 1.4.0-dev-20251111095201

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.
@@ -878,12 +878,42 @@ const useOutsideClick = ({
878
878
  };
879
879
  useGlobalEventListener({ type: "mousedown", listener: clickListener, disabled });
880
880
  if (checkOnTab) {
881
- const keydownListener = async (event) => {
881
+ const keydownListener = (event) => {
882
882
  if (event.key !== "Tab") return;
883
- await new Promise((resolve) => setTimeout(resolve));
884
883
  if (isOutsideClick(document.activeElement)) {
885
884
  onOutsideClick(event);
886
885
  }
886
+ const controller = new AbortController();
887
+ const { signal } = controller;
888
+ const onFocusIn = (event2) => {
889
+ const target = event2.target;
890
+ if (isOutsideClick(target)) {
891
+ onOutsideClick(event2);
892
+ }
893
+ controller.abort();
894
+ };
895
+ const onWindowBlur = (event2) => {
896
+ if (isOutsideClick(document.activeElement)) {
897
+ onOutsideClick(event2);
898
+ }
899
+ controller.abort();
900
+ };
901
+ const onKeyUp = (e) => {
902
+ if (e.key === "Tab") controller.abort();
903
+ };
904
+ document.addEventListener("focusin", onFocusIn, {
905
+ once: true,
906
+ capture: true,
907
+ // Capture phase to handle before component focus handlers
908
+ signal
909
+ });
910
+ window.addEventListener("blur", onWindowBlur, { once: true, signal });
911
+ document.addEventListener("keyup", onKeyUp, {
912
+ once: true,
913
+ capture: true,
914
+ // Capture phase to prevent conflicts with prevented keydown
915
+ signal
916
+ });
887
917
  };
888
918
  useGlobalEventListener({ type: "keydown", listener: keydownListener, disabled });
889
919
  }