Commit Graph

90 Commits

Author SHA1 Message Date
Robin Malfait cb86665f5b 2.1.5 - @headlessui/react 2024-09-04 16:36:30 +02:00
Robin Malfait 75619eef3b 2.1.4 - @headlessui/react 2024-09-03 17:23:03 +02:00
Philipp Spiess 49c081d199 2.1.3 - @headlessui/react 2024-08-23 15:49:35 +02:00
Robin Malfait a36380fdb6 2.1.2 - @headlessui/react 2024-07-05 18:13:14 +02:00
Robin Malfait d65829b08a Fix crash in Combobox component when in virtual mode when options are empty (#3356)
* bump `@tanstack/react-virtual`

* only enable the virtualizer when there are options

* update changelog
2024-07-03 00:37:02 +02:00
Robin Malfait abd86fca3e 2.1.1 - @headlessui/react 2024-06-26 15:10:43 +02:00
Robin Malfait d60ed6a670 2.1.0 - @headlessui/react 2024-06-21 16:13:50 +02:00
Robin Malfait e8c766190d bump dependencies (#3247) 2024-05-28 12:33:09 +02:00
Robin Malfait 7be23e5c7e 2.0.4 - @headlessui/react 2024-05-25 00:30:50 +02:00
Jordan Pittman f513614ffe 2.0.3 - @headlessui/react 2024-05-07 14:14:50 -04:00
Robin Malfait 48cf712d80 2.0.2 - @headlessui/react 2024-05-07 19:19:19 +02:00
Jordan Pittman 2d5d35a533 2.0.1 - @headlessui/react 2024-05-06 15:07:53 -04:00
Robin Malfait fb131905b4 2.0.0 - @headlessui/react 2024-05-06 17:41:56 +02:00
Robin Malfait f0e3e5b4a6 Bump dependencies (#3158)
* use `act` from `react` instead of `@testing-library/react`

* bump dependencies

* bump `@testing-library/react`

* bump `@react-aria/interactions`

* bump "@tanstack/react-virtual"

* add `ResizeObserver` polyfill, and enable it by default for tests

* mock `getBoundingClientRect`

Otherwise the virtualization tests don't work as expected because they
rely on the client rect which is not supported (or not correctly
measured) in JSDOM.
2024-05-02 14:41:58 +02:00
Robin Malfait 36616b217e Update minimal peer dependency version requirements for react and react-dom (#3131)
* require at least React 18

We already relied on React 18 for Headless UI v2, but now it's also
reflected in the package.json

* update changelog
2024-04-24 19:39:12 +02:00
Jordan Pittman 680db08b00 Remove outdated esbuild deps 2024-02-06 15:04:02 -05:00
Robin Malfait 33286d0c80 2.0.0-alpha.4 — @headlessui/react 2024-01-03 15:06:09 +01:00
Robin Malfait a73007388f Ensure playgrounds work + switch to npm workspaces (#2907)
* bump Next in playground

* convert legacy Link after Next.js bump

* update yarn.lock

* switch to npm workspaces

* move `packages/playground-*` to `playgrounds/*`

* use `npm` instead of `yarn`

* sync package-lock.json

* use node 20 for insiders releases
2024-01-03 14:26:12 +01:00
Robin Malfait d94038f198 2.0.0-alpha.3 — @headlessui/react 2023-12-21 02:51:25 +01:00
Robin Malfait 13f4cd5a7f 2.0.0-alpha.2 — @headlessui/react 2023-12-21 00:32:50 +01:00
Robin Malfait 9f0b19f41f 2.0.0-alpha.1 — @headlessui/react 2023-12-20 20:12:39 +01:00
Robin Malfait e662f12398 2.0.0 Alpha prep (#2887)
* bump React & React DOM dependencies

* fix typo `TOmitableProps` → `TOmittableProps`

* bump prettier

* run prettier after prettier version bump

* bump TypeScript

* run prettier after TypeScript version bump

* enable `verbatimModuleSyntax`

This ensures all imported types are using the `type` keyword.

* add `type` to type related imports

* add common testing scenarios

Will be used in the new and existing components.

* add script to make Next.js happy

Right now Next.js does barrel file optimization and re-writing imports
to a real path in the `dist` folder. Most of those rewrites don't
actually exist because they have an assumption:

```js
import { FooBar } from '@headlessui/react'
```

is rewritten as:
```js
import { FooBar } from '@headlessui/react/dist/components/foo-bar/foo-bar'
```

This script will make sure these paths exist...

* improve `by` prop, introduce `useByComparator`

This hook has a default implementation when comparing objects. If the
object contains an `id`, then we will compare the objects by their
`id`'s without the user of the library needing to specify `by="id"`.

If the objects don't have an `id` prop, then the default is still to
compare by reference (unless specicified otherwise).

* sync yarn.lock

* rename `Features` to `HiddenFeatures` for `Hidden` component

* rename `Features` to `FocusTrapFeatures` in `FocusTrap` component

* rename `Features` to `RenderFeatures` in `render` util

* add `floating-ui` as a dependency + introduce internal floating related components

* bump Vue dependencies

* ensure scroll bar calculations can't go negative

* improve types in `@headlessui/vue`

* use snapshot tests for `Transition` tests in `@headlessui/vue`

* use snapshot tests for `portal` tests in `@headlessui/vue`

* rename `src/components/transitions/` to `src/components/transition/` (singular)

This is so that we can be consistent with the other components.

* drop custom `toMatchFormattedCss`, prefer snapshot tests instead

* use snapshot tests for `Label` tests in `@headlessui/vue`

* use snapshot tests for `Description` tests in `@headlessui/vue`

* sort exported components in tests for `@headlessui/vue`

* use snapshot tests in `@headlessui/tailwindcss`

* rename `mergeProps` to `mergePropsAdvanced`

This is a more complex version of a soon to be exported `mergeProps`
that we will be using in our components.

* do not expose `aria-labelledby` if it is only referencing itself

* expose boolean state as `kebab-case` instead of `camelCase`

These are the ones being exposed inside `data-headlessui-state="..."`

* expose boolean data attributes

A slot with `{active,focus,hover}` will be exposed as:
```html
<span data-headlessui-state="active focus hover"></span>
```

But also as boolean attributes:
```html
<span data-active data-focus data-hover></span>
```

* improve internal types for `className` in `render` util

* ensure we keep exposed data attributes into account when trying to forward them to the component inside the `Fragment`

* add small typescript type fix

This is internal code, and the public API is not influenced by this
`:any`. It does make TypeScript happy.

* introduce `mergeProps` util to be used in our components

This will help us to merge props, when event handlers are available they
will be merged by wrapping them in a function such that both (or more)
event handlers are called for the same `event`.

* add new internal `Modal` component

* fix: when using `Focus.Previous` with `activeIndex = -1` should start at the end

* prefer `window.scrollY` instead of `window.pageYOffset`

Because `window.pageYOffset` is deprecated.

* add `'use client'` directives on client only components

These components use hooks that won't work in server components and you
will receive an error otherwise.

* drop `import 'client-only'` in favor of the `'use client'` directive

* add React Aria dependencies

* pin beta dependencies

* prettier bump formatting

* improve TypeScript types in tests

* use new Jest matchers instead of deprecated ones

* improve typescript types in Vue

* prefer `useLabelledBy` and `useDescribedBy`

* add internal `DisabledProvider`

* add internal `IdProvider`

* add internal `useDidElementMove` hook

* add internal `useElementSize` hook

* add internal `useIsTouchDevice` hook

* add internal `useActivePress` hook

* use snapshot tests for `Description` tests

* use snapshot tests for `Label` tests

* use snapshot tests for `Portal` tests

* use snapshot tests for `render` tests

* add (private) `Tooltip` component

Currently this one is not ready yet, so its not publicly exposed yet.

* add internal `FormFields` component

This one adds a component to render (hidden) inputs for native form
support. It also ensures that form fields can be hoisted to the end of
the nearest `Field`. If the components are not inside a `Field` they
will be rendered in place.

* add new `Button` component

* add new `Checkbox` component

* add new `DataInteractive` component

* add new `Field` component

* add new `Fieldset` component

* add new `Legend` component

* add new `Input` component

* add new `Select` component

* add new `Textarea` component

* export new components

* WIP

* remove `within: true`

This only makes sense if anything inside the current element receives
focus, which is not the case for `input`, `select`, `textarea` or
`Radio/RadioOption`.

* group focus/hover/active hooks together

* conditionally link anchor panel

* immediately focus the container

* prevent premature disabling of `Listbox`'s floating integration

+ Track whether the button moved or not when disabling such that we can
  disable the transitions earlier.

* improve scroll locking on iOS

* skip hydration tests for now

* skip certain focus trap tests for now

* update CHANGELOG.md

* add missing requires

* drop unused `@ts-expect-error`

* ignore type issues in playgrounds

These playgrounds are mainly test playgrounds. Lower priority for now,
we will get back to them.

* add yarn resolutions to solve swc bug
2023-12-20 19:57:57 +01:00
Jordan Pittman c25e2e6036 Fix CJS types (#2880)
* Fix Vue type error

* Add separate CTS types

* Add “Are The Types Wrong” CLI

* wip

* Bump node versions in workflows

* wip

* wip

* wip

* yolo

* yolo (again?)

* wip

* wip
2023-12-12 11:43:34 -05:00
Robin Malfait f016dc51db Add virtual prop to Combobox component (#2740)
* type timezones in playground data

* add `@tanstack/react-virtual` and `@tanstack/vue-virtual`

* use latest stable Tailwind CSS version

* add Combobox with virtual prop example

* add `virtual` prop to `Combobox`

Co-authored-by: Jordan Pittman <jordan@cryptica.me>

* add tests for `virtual` prop

- Also wrap `click` helpers in `act` for React (use `rawClick` without
  `act` in tests related to `Transition`)

* update changelog

---------

Co-authored-by: Jordan Pittman <jordan@cryptica.me>
2023-09-15 14:29:18 +02:00
Jordan Pittman 0b8bd32865 1.7.17 - @headlessui/react 2023-08-17 10:58:55 -04:00
Robin Malfait 0501475575 1.7.16 - @headlessui/react 2023-07-27 16:23:46 +02:00
Robin Malfait a1d7c69b69 1.7.15 - @headlessui/react 2023-06-01 12:40:00 +02:00
Mateusz Burzyński 0505e92b83 Move types condition to the front (#2469)
* move `types` condition to the front

* Update changelog

---------

Co-authored-by: Jordan Pittman <jordan@cryptica.me>
2023-05-01 12:21:28 -04:00
Robin Malfait c5d2e3b053 1.7.14 - @headlessui/react 2023-04-12 19:05:04 +02:00
Robin Malfait df61edcf3e 1.7.13 - @headlessui/react 2023-03-03 21:09:06 +01:00
Robin Malfait 885f446e4e 1.7.12 - @headlessui/react 2023-02-24 16:29:14 +01:00
Robin Malfait 2c2a22bd4f 1.7.11 - @headlessui/react 2023-02-15 15:10:39 +01:00
Robin Malfait 597256bd9e 1.7.10 - @headlessui/react 2023-02-06 12:33:23 +01:00
Robin Malfait 885fa6aedd 1.7.9 - @headlessui/react 2023-02-03 17:40:08 +01:00
Robin Malfait b3a0ccb2f8 1.7.8 - @headlessui/react 2023-01-27 17:24:04 +01:00
Robin Malfait b7c9e57343 1.7.7 - @headlessui/react 2022-12-16 17:38:32 +01:00
Robin Malfait 92e9302020 1.7.6 - @headlessui/react 2022-12-15 17:35:18 +01:00
Robin Malfait 326a43f73f 1.7.5 - @headlessui/react 2022-12-08 23:17:01 +01:00
Robin Malfait 74e7b43781 1.7.4 2022-11-03 16:21:15 +01:00
Robin Malfait f424aa20db Add client-only to mark everything as client components (#1981)
* add `client-only` to mark everything as client components

This should improve the error messages when using Headless UI in a
Next.js 13+ repo instead of getting a cryptic error message that
`createContext` doesn't exist.

* update changelog
2022-11-03 16:17:22 +01:00
Jordan Pittman fdccf0767a 1.7.3 2022-09-30 11:54:08 -04:00
Robin Malfait dd2feefb9e 1.7.2 2022-09-15 18:31:27 +02:00
Robin Malfait e926d693c5 1.7.1 2022-09-12 21:09:38 +02:00
Robin Malfait b93b7463bc 1.7.0 2022-09-06 16:22:42 +02:00
Robin Malfait 3799d6f438 1.6.6 2022-07-07 23:02:52 +02:00
Robin Malfait f4d1acb5d7 1.6.5 2022-06-20 17:57:56 +02:00
Robin Malfait 655107962f 1.6.4 2022-05-29 14:54:44 +02:00
Robin Malfait 3c32369851 1.6.3 2022-05-25 15:18:01 +02:00
Robin Malfait 46aab52ba5 1.6.2 - @headlessui/react 2022-05-19 16:33:21 +02:00
Robin Malfait 695bf299ed 1.6.1 - @headlessui/react 2022-05-03 13:19:16 +02:00