/**
 * `<Autocomplete.Trigger>` — same behavior as `<Combobox.Trigger>` but
 * without the `placeholder` state.
 */

import { dynamic } from "@solidjs/web";
import { createMemo, omit } from "solid-js";
import { useComboboxRootContext } from "../../combobox/root/combobox-root-context.jsx";
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 { resolveClassStyle } from "../../internals/resolve-class-style.jsx";
import { useButton } from "../../internals/use-button/use-button.jsx";
/**
 * A button that opens the popup. Renders a `<button>` element.
 */
export function AutocompleteTrigger(props) {
  const root = useComboboxRootContext();
  const disabled = () => root.disabled() || (props.disabled ?? false);
  const nativeButton = () => props.nativeButton ?? true;
  const listEmpty = createMemo(() => root.flatFilteredItems().length === 0);
  const {
    props: buttonProps,
    ref: buttonRef
  } = useButton({
    disabled,
    focusableWhenDisabled: () => false,
    native: nativeButton
  });
  const state = createMemo(() => ({
    open: root.open(),
    disabled: disabled(),
    readOnly: root.readOnly(),
    required: root.required(),
    popupSide: root.popupSide(),
    listEmpty: listEmpty()
  }));
  function onClick(event) {
    if (disabled() || root.readOnly()) return;
    const details = createChangeEventDetails(REASONS.triggerPress, event);
    root.setOpen(!root.open(), details);
    root.inputRef.current?.focus();
  }
  function onKeyDown(event) {
    if (disabled() || root.readOnly()) return;
    if (event.key === "ArrowDown" || event.key === "ArrowUp") {
      event.preventDefault();
      const details = createChangeEventDetails(REASONS.listNavigation, event);
      root.setOpen(true, details);
      root.inputRef.current?.focus();
    }
  }
  const internal = {
    tabIndex: -1,
    "aria-haspopup": "listbox",
    get "aria-expanded"() {
      return root.open() ? "true" : "false";
    },
    get "aria-controls"() {
      return root.open() ? root.listElement()?.id ?? "" : "";
    },
    onClick,
    onKeyDown,
    // triggerStateAttributesMapping projection.
    get "data-popup-open"() {
      return state().open ? "" : undefined;
    },
    get "data-pressed"() {
      return state().open ? "" : undefined;
    },
    get "data-disabled"() {
      return state().disabled ? "" : undefined;
    },
    get "data-readonly"() {
      return state().readOnly ? "" : undefined;
    },
    get "data-required"() {
      return state().required ? "" : undefined;
    },
    get "data-list-empty"() {
      return state().listEmpty ? "" : undefined;
    },
    get "data-popup-side"() {
      return state().popupSide ?? undefined;
    }
  };
  const userClassStyle = resolveClassStyle(props, () => state());
  const userProps = omit(props, "as", "class", "style", "attrs", "disabled", "nativeButton");
  let merged = mergeRootProps(buttonProps, internal);
  merged = mergeRootProps(merged, userClassStyle);
  merged = mergeRootProps(merged, userProps);
  const setTriggerEl = el => {
    root.setTriggerElement(el);
  };
  const Tag = dynamic(() => props.as ?? "button");
  return <Tag {...merged} ref={composeRefs(buttonRef, setTriggerEl, userRef(props))} />;
}
//# sourceMappingURL=autocomplete-trigger.jsx.map
