Skip to content

Commit bb68793

Browse files
committed
correctly handle TypeScript render abstractions
1 parent d557d50 commit bb68793

File tree

4 files changed

+18
-8
lines changed

4 files changed

+18
-8
lines changed

packages/@headlessui-react/src/components/listbox/listbox.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ function Label<TTag extends ElementType = typeof DEFAULT_LABEL_TAG>(
365365
state.buttonRef,
366366
])
367367

368-
let propsBag = useMemo<OptionsRenderPropArg>(
368+
let propsBag = useMemo<LabelRenderPropArg>(
369369
() => ({ open: state.listboxState === ListboxStates.Open, disabled: state.disabled }),
370370
[state]
371371
)

packages/@headlessui-react/src/components/transitions/transition.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import React, {
1212
ElementType,
1313
MutableRefObject,
1414
} from 'react'
15-
import { Props, Expand } from '../../types'
15+
import { Props } from '../../types'
1616

1717
import { useId } from '../../hooks/use-id'
1818
import { useIsInitialRender } from '../../hooks/use-is-initial-render'
@@ -201,8 +201,10 @@ function TransitionChild<TTag extends ElementType = typeof DEFAULT_TRANSITION_CH
201201
leave,
202202
leaveFrom,
203203
leaveTo,
204+
205+
// @ts-expect-error
204206
...rest
205-
} = props as Expand<typeof props>
207+
} = props as typeof props
206208
let container = useRef<HTMLElement | null>(null)
207209
let [state, setState] = useState(TreeStates.Visible)
208210
let strategy = rest.unmount ? RenderStrategy.Unmount : RenderStrategy.Hidden
@@ -331,7 +333,8 @@ function TransitionChild<TTag extends ElementType = typeof DEFAULT_TRANSITION_CH
331333
export function Transition<TTag extends ElementType = typeof DEFAULT_TRANSITION_CHILD_TAG>(
332334
props: TransitionChildProps<TTag> & { show: boolean; appear?: boolean }
333335
) {
334-
let { show, appear = false, unmount, ...passthroughProps } = props as Expand<typeof props>
336+
// @ts-expect-error
337+
let { show, appear = false, unmount, ...passthroughProps } = props as typeof props
335338

336339
if (![true, false].includes(show)) {
337340
throw new Error('A <Transition /> is used but it is missing a `show={true | false}` prop.')

packages/@headlessui-react/src/types.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { ReactNode, ReactElement } from 'react'
12
// A unique placeholder we can use as some defaults. This is nice because we can use this instead of
23
// defaulting to null / never / ... and possibly collide with actual data.
34
const __: unique symbol = Symbol('__placeholder__')
@@ -9,11 +10,17 @@ export type PropsOf<TTag = any> = TTag extends React.ElementType
910
? React.ComponentProps<TTag>
1011
: never
1112

12-
export type Props<TTag, TSlot = {}, TOmitableProps extends keyof any = __> = {
13+
export type Props<
14+
TTag,
15+
TSlot = any,
16+
TOmitableProps extends keyof any = __
17+
> = (TOmitableProps extends __
18+
? Omit<PropsOf<TTag>, 'as' | 'children' | 'refName'>
19+
: Omit<PropsOf<TTag>, TOmitableProps | 'as' | 'children' | 'refName'>) & {
1320
as?: TTag
14-
children?: React.ReactNode | ((bag: TSlot) => React.ReactElement)
21+
children?: ReactNode | ((bag: TSlot) => ReactElement)
1522
refName?: string
16-
} & (TOmitableProps extends __ ? PropsOf<TTag> : Omit<PropsOf<TTag>, TOmitableProps>)
23+
}
1724

1825
type Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never }
1926
export type XOR<T, U> = T | U extends __

packages/@headlessui-react/src/utils/render.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export function render<TFeature extends Features, TTag extends ElementType, TBag
8888
}
8989

9090
function _render<TTag extends ElementType, TBag>(
91-
props: Expand<Props<TTag, TBag> & { ref?: unknown }>,
91+
props: Props<TTag, TBag> & { ref?: unknown },
9292
bag: TBag,
9393
tag: ElementType
9494
) {

0 commit comments

Comments
 (0)