import { dynamic } from "@solidjs/web";
import { createMemo, omit, Show } from "solid-js";
import { createChangeEventDetails, REASONS } from "../../internals/change-event-details.jsx";
import { composeRefs, userRef } from "../../internals/compose-refs.jsx";
import { mergeRootProps } from "../../internals/merge-root-props.jsx";
import { useOpenChangeComplete } from "../../internals/popups/use-open-change-complete.jsx";
import { resolveClassStyle } from "../../internals/resolve-class-style.jsx";
import { useButton } from "../../internals/use-button/use-button.jsx";
import { useTransitionStatus } from "../../internals/use-transition-status/use-transition-status.jsx";
import { useComboboxRootContext } from "../root/combobox-root-context.jsx";
/**
 * Clears the value when clicked. Renders a `<button>` element.
 */
export function ComboboxClear(props) {
  const root = useComboboxRootContext();
  const disabled = () => root.disabled() || (props.disabled ?? false);
  const nativeButton = () => props.nativeButton ?? true;
  const keepMounted = () => props.keepMounted ?? false;
  const visible = createMemo(() => {
    return root.selectedValue() != null || root.inputValue() !== "";
  });
  const {
    props: buttonProps,
    ref: buttonRef
  } = useButton({
    disabled,
    focusableWhenDisabled: () => false,
    native: nativeButton
  });
  const {
    mounted,
    transitionStatus,
    setMounted
  } = useTransitionStatus(visible, () => true, () => false);
  useOpenChangeComplete({
    open: visible,
    ref: root.clearRef,
    onComplete: () => {
      if (!visible()) setMounted(false);
    }
  });
  const state = createMemo(() => ({
    open: root.open(),
    disabled: disabled(),
    transitionStatus: transitionStatus()
  }));
  function onMouseDown(event) {
    event.preventDefault();
  }
  function onClick(event) {
    if (disabled() || root.readOnly()) return;
    const details = createChangeEventDetails(REASONS.clearPress, event);
    root.setInputValue("", details);
    root.setSelectedValue(null, details);
    root.setIndices({
      activeIndex: null,
      selectedIndex: null
    });
    root.inputRef.current?.focus();
  }
  const internal = {
    tabIndex: -1,
    onMouseDown,
    onClick,
    // clearStateAttributesMapping: open → data-popup-open; disabled →
    // data-disabled; transitionStatus → data-starting/ending-style.
    get "data-popup-open"() {
      return state().open ? "" : undefined;
    },
    get "data-disabled"() {
      return state().disabled ? "" : undefined;
    },
    get "data-starting-style"() {
      return state().transitionStatus === "starting" ? "" : undefined;
    },
    get "data-ending-style"() {
      return state().transitionStatus === "ending" ? "" : undefined;
    }
  };
  const userClassStyle = resolveClassStyle(props, () => state());
  const userProps = omit(props, "as", "class", "style", "attrs", "disabled", "nativeButton", "keepMounted");
  let merged = mergeRootProps(buttonProps, internal);
  merged = mergeRootProps(merged, userClassStyle);
  merged = mergeRootProps(merged, userProps);
  const setClearRef = el => {
    root.clearRef.current = el;
  };
  const Tag = dynamic(() => props.as ?? "button");
  const element = <Tag {...merged} ref={composeRefs(buttonRef, setClearRef, userRef(props))} />;
  return <Show when={keepMounted() || mounted()}>{element}</Show>;
}
//# sourceMappingURL=combobox-clear.jsx.map
