From b86737b698f46502d0e32bb1bfddd76cfa3f54ac Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 12 Apr 2024 15:54:01 +0200 Subject: [PATCH] Add new `CloseButton` component and `useClose` hook (#3096) * add `useClose` hook and `CloseButton` component * expose `useClose` hook and `CloseButton` components * use `CloseProvider` in the `Popover` component * use `CloseProvider` in the `Dialog` component * use `CloseProvider` in the `Disclosure` component * update changelog --- packages/@headlessui-react/CHANGELOG.md | 1 + .../components/close-button/close-button.tsx | 21 +++++++++++ .../src/components/dialog/dialog.tsx | 21 ++++++----- .../src/components/disclosure/disclosure.tsx | 31 ++++++++-------- .../src/components/popover/popover.tsx | 35 ++++++++++--------- packages/@headlessui-react/src/index.test.ts | 4 +++ packages/@headlessui-react/src/index.ts | 2 ++ .../src/internal/close-provider.tsx | 11 ++++++ 8 files changed, 87 insertions(+), 39 deletions(-) create mode 100644 packages/@headlessui-react/src/components/close-button/close-button.tsx create mode 100644 packages/@headlessui-react/src/internal/close-provider.tsx diff --git a/packages/@headlessui-react/CHANGELOG.md b/packages/@headlessui-react/CHANGELOG.md index 3694842..4c926d0 100644 --- a/packages/@headlessui-react/CHANGELOG.md +++ b/packages/@headlessui-react/CHANGELOG.md @@ -39,6 +39,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Expose `--input-width` and `--button-width` CSS variables on the `ComboboxOptions` component ([#3057](https://github.com/tailwindlabs/headlessui/pull/3057)) - Expose the `--button-width` CSS variable on the `PopoverPanel` component ([#3058](https://github.com/tailwindlabs/headlessui/pull/3058)) - Close the `Combobox`, `Dialog`, `Listbox`, `Menu` and `Popover` components when the trigger disappears ([#3075](https://github.com/tailwindlabs/headlessui/pull/3075)) +- Add new `CloseButton` component and `useClose` hook ([#3096](https://github.com/tailwindlabs/headlessui/pull/3096)) ## [2.0.0-alpha.4] - 2024-01-03 diff --git a/packages/@headlessui-react/src/components/close-button/close-button.tsx b/packages/@headlessui-react/src/components/close-button/close-button.tsx new file mode 100644 index 0000000..e873284 --- /dev/null +++ b/packages/@headlessui-react/src/components/close-button/close-button.tsx @@ -0,0 +1,21 @@ +'use client' + +import React, { type ElementType, type Ref } from 'react' +import { useClose } from '../../internal/close-provider' +import { forwardRefWithAs, mergeProps } from '../../utils/render' +import { Button, type ButtonProps, type _internal_ComponentButton } from '../button/button' + +let DEFAULT_BUTTON_TAG = 'button' as const + +export type CloseButtonProps = + ButtonProps + +function CloseButtonFn( + props: ButtonProps, + ref: Ref +) { + let close = useClose() + return