import { dynamic } from "@solidjs/web";
import { createMemo, omit } from "solid-js";
import { composeRefs, userRef } from "../../internals/compose-refs.jsx";
import { mergeRootProps } from "../../internals/merge-root-props.jsx";
import { resolveClassStyle } from "../../internals/resolve-class-style.jsx";
import { useComboboxPositionerContext } from "../positioner/positioner-context.jsx";
import { useComboboxRootContext } from "../root/combobox-root-context.jsx";
/** Displays an element positioned against the anchor. Renders a `<div>`. */
export function ComboboxArrow(props) {
  const root = useComboboxRootContext();
  const positioner = useComboboxPositionerContext();
  const state = createMemo(() => ({
    open: root.open(),
    side: positioner.side(),
    align: positioner.align(),
    anchorHidden: positioner.anchorHidden()
  }));
  const internal = {
    "aria-hidden": true,
    get style() {
      return positioner.arrowStyles();
    },
    // P3: enumerate every data-* derived from state so Solid's spread
    // installs reactive bindings up front.
    get "data-open"() {
      return state().open ? "" : undefined;
    },
    get "data-closed"() {
      return state().open ? undefined : "";
    },
    get "data-anchor-hidden"() {
      return state().anchorHidden ? "" : undefined;
    },
    get "data-side"() {
      return state().side;
    },
    get "data-align"() {
      return state().align;
    }
  };
  const userClassStyle = resolveClassStyle(props, () => state());
  const userProps = omit(props, "as", "class", "style", "attrs");
  let merged = mergeRootProps(internal, userClassStyle);
  merged = mergeRootProps(merged, userProps);
  const setArrowRef = el => {
    positioner.arrowRef.current = el;
  };
  const Tag = dynamic(() => props.as ?? "div");
  return <Tag {...merged} ref={composeRefs(setArrowRef, userRef(props))} />;
}
//# sourceMappingURL=combobox-arrow.jsx.map
