import { jsx as e } from "../../../external/.pnpm/preact@10.28.2/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js";
import to from "../Button/ButtonActions/ButtonActions.js";
import { ButtonActionsLayoutBasic as no } from "../Button/ButtonActions/types.js";
import { DEFAULT_POPOVER_CLASSNAME as i, POPOVER_HEADER_TITLE_CLASSNAME as co, TOOLTIP_CONTENT_CLASSNAME as x, POPOVER_CONTENT_CLASSNAME as A, POPOVER_FOOTER_CLASSNAME as io, DEFAULT_TOOLTIP_CLASSNAME as so, POPOVER_CONTAINER_CLASSNAME as ao, POPOVER_HEADER_CLASSNAME as D } from "./constants.js";
import uo from "./PopoverDismissButton/PopoverDismissButton.js";
import mo from "./PopoverTitle/PopoverTitle.js";
import { PopoverContainerVariant as s, PopoverContainerSize as B } from "./types.js";
import { InteractionKeyCode as fo } from "../../types.js";
import { useClickOutside as lo, ClickOutsideVariant as po, CONTROL_ELEMENT_PROPERTY as l } from "../../../hooks/element/useClickOutside.js";
import Eo from "../../../hooks/element/useFocusTrap.js";
import Oo from "../../../hooks/element/usePopoverPositioner.js";
import N from "../../../hooks/element/useUniqueIdentifier.js";
import Po from "../../../hooks/useReflex.js";
import { SELECTORS as To, isFocusable as Ao } from "../../../primitives/dom/tabbableRoot/tabbable.js";
import k from "classnames";
import { createPortal as No } from "../../../external/.pnpm/preact@10.28.2/node_modules/preact/compat/dist/compat.module.js";
import { useMemo as w, useRef as L, useCallback as C, useEffect as q } from "../../../external/.pnpm/preact@10.28.2/node_modules/preact/hooks/dist/hooks.module.js";
/* empty css             */
import { Fragment as _ } from "../../../external/.pnpm/preact@10.28.2/node_modules/preact/dist/preact.module.js";
import { isFunction as Lo } from "../../../utils/value/is.js";
import { boolOrTrue as Co } from "../../../utils/value/bool.js";
import { getModifierClasses as _o } from "../../../utils/preact/className.js";
const Ro = (a) => {
  let u;
  const p = a.querySelector(`:scope .${x}`)?.querySelectorAll(To);
  return p ? (Array.prototype.some.call(p, (r) => {
    if (Ao(r)) return u = r;
  }), u) : null;
}, yo = (a) => a === s.TOOLTIP ? [10, 3, 5, 5] : [8, 8, 8, 8];
function Qo({
  actions: a,
  disableFocusTrap: u = !1,
  actionsLayout: p = no.SPACE_BETWEEN,
  variant: r = s.TOOLTIP,
  title: E,
  open: m,
  dismissible: R,
  modifiers: U,
  divider: y,
  fitContent: v,
  withoutSpace: S,
  containerSize: d,
  position: K,
  targetElement: t,
  setToTargetWidth: W,
  dismiss: n,
  children: I,
  withContentPadding: H,
  classNameModifiers: j,
  showOverlay: f = !1,
  fitPosition: G,
  fixedPositioning: Y = !1,
  additionalStyle: J,
  setPopoverElement: Q,
  ...X
}) {
  const F = w(() => Lo(n) && Co(R), [n, R]), M = N(), V = N(), $ = L(), Z = C(
    (o) => {
      n && n(), o && t?.current?.focus();
    },
    [n, t]
  ), O = C(
    (o) => {
      o.code === fo.ESCAPE && (n && n(), (t?.current).focus());
    },
    [n, t]
  ), P = L(O), b = L(), h = lo(
    Oo(
      yo(r),
      t,
      r,
      K,
      M,
      W,
      f,
      G,
      Y,
      J,
      void 0,
      V
    ),
    n,
    r === s.TOOLTIP && !m,
    po.POPOVER
  ), g = Eo(u ? null : h, Z), T = Po(
    C(
      (o, c) => {
        c instanceof Element && (c[l] = void 0, delete c[l]), o instanceof Element && (o[l] = t.current, cancelAnimationFrame(b.current), b.current = requestAnimationFrame(() => {
          if ($.current === m || !($.current = m)) return;
          Ro(o)?.focus();
        }));
      },
      [m, t]
    ),
    u ? h : g
  ), z = N(T), oo = w(
    () => ({
      [`${i}--medium`]: d === B.MEDIUM,
      [`${i}--with-divider`]: !!y,
      [`${i}--wide`]: d === B.WIDE,
      [`${i}--fit-content`]: v,
      [`${i}--without-space`]: S,
      [`${i}--auto-width`]: f
    }),
    [d, y, S, v, f]
  );
  q(() => {
    const o = T.current;
    if (o) {
      const c = t.current;
      return o[l] = c, c?.setAttribute("aria-controls", o.id), () => {
        c?.removeAttribute("aria-controls"), o[l] = void 0;
      };
    }
  }, [T, t]), q(() => (document.removeEventListener("keydown", P.current), document.addEventListener("keydown", P.current = O), () => document.removeEventListener("keydown", P.current)), [O]);
  const eo = r === s.TOOLTIP ? so : `${i} ${ao}`, ro = r === s.TOOLTIP ? x : `${A}`;
  return No(
    /* @__PURE__ */ e(_, { children: m ? /* @__PURE__ */ e(_, { children: [
      f && /* @__PURE__ */ e("div", { className: "adyen-pe-popover__overlay" }),
      /* @__PURE__ */ e(
        "div",
        {
          ...X,
          ref: (o) => {
            z(o), Q?.(o);
          },
          "aria-labelledby": t.current?.id,
          className: k(eo, oo, j),
          role: r === s.POPOVER ? "dialog" : "tooltip",
          style: { visibility: "hidden" },
          children: [
            (E || F) && /* @__PURE__ */ e("div", { className: _o(D, U, [D]), children: [
              E && /* @__PURE__ */ e("div", { className: co, children: /* @__PURE__ */ e(mo, { title: E }) }),
              F && /* @__PURE__ */ e(uo, { onClick: n })
            ] }),
            I && /* @__PURE__ */ e(_, { children: [
              /* @__PURE__ */ e(
                "div",
                {
                  className: k(ro, {
                    [`${A}--with-padding`]: H,
                    [`${A}--overlay`]: f
                  }),
                  ref: V,
                  children: I
                }
              ),
              r === s.TOOLTIP && /* @__PURE__ */ e("span", { "data-popover-placement": "hidden", ref: M, className: "adyen-pe-tooltip__arrow" })
            ] }),
            a && /* @__PURE__ */ e("div", { className: io, children: /* @__PURE__ */ e(to, { actions: a, layout: p }) })
          ]
        }
      )
    ] }) : null }),
    document.getElementsByTagName("body")[0]
  );
}
export {
  Qo as default
};
