/**
 * `<Dialog.Close>` — button that closes the dialog.
 */

import { dynamic } from "@solidjs/web";
import { omit } 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 { resolveClassStyle } from "../../internals/resolve-class-style.jsx";
import { useButton } from "../../internals/use-button/use-button.jsx";
import { useDialogRootContext } from "../dialog-root-context.jsx";

// biome-ignore lint/complexity/noBannedTypes: matches Base UI React — close exposes no state fields.

/**
 * A button that closes the dialog. Renders a `<button>` by default.
 */
export function DialogClose(props) {
  const root = useDialogRootContext();
  const disabled = () => Boolean(props.disabled);
  const nativeButton = () => props.nativeButton ?? true;
  const {
    props: buttonProps,
    ref: buttonRef
  } = useButton({
    disabled,
    focusableWhenDisabled: () => false,
    native: nativeButton
  });
  const internal = {
    onClick(event) {
      if (!root.open()) return;
      const currentTarget = event.currentTarget;
      const details = createChangeEventDetails(REASONS.closePress, event, currentTarget ?? undefined, {
        preventUnmountOnClose: () => {}
      });
      root.setOpen(false, details);
    }
  };
  const userClassStyle = resolveClassStyle(props, () => ({}));
  const userProps = omit(props, "as", "class", "style", "attrs", "disabled", "nativeButton");
  let merged = mergeRootProps(internal, buttonProps);
  merged = mergeRootProps(merged, userClassStyle);
  merged = mergeRootProps(merged, userProps);
  const Tag = dynamic(() => props.as ?? "button");
  return <Tag {...merged} ref={composeRefs(buttonRef, userRef(props))} />;
}
//# sourceMappingURL=dialog-close.jsx.map
