Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6b8ce44

Browse files
committed
Revert "wip"
This reverts commit 974fac5.
1 parent 974fac5 commit 6b8ce44

File tree

2 files changed

+66
-16
lines changed

2 files changed

+66
-16
lines changed

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

Lines changed: 63 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -384,19 +384,19 @@ export type ComboboxProps<
384384
}
385385

386386
function ComboboxFn<TValue, TTag extends ElementType = typeof DEFAULT_COMBOBOX_TAG>(
387-
props: ComboboxProps<TValue, true, true, TTag> & RefProp<TTag>,
387+
props: ComboboxProps<TValue, true, true, TTag>,
388388
ref: Ref<TTag>
389389
): JSX.Element
390390
function ComboboxFn<TValue, TTag extends ElementType = typeof DEFAULT_COMBOBOX_TAG>(
391-
props: ComboboxProps<TValue, true, false, TTag> & RefProp<TTag>,
391+
props: ComboboxProps<TValue, true, false, TTag>,
392392
ref: Ref<TTag>
393393
): JSX.Element
394394
function ComboboxFn<TValue, TTag extends ElementType = typeof DEFAULT_COMBOBOX_TAG>(
395-
props: ComboboxProps<TValue, false, false, TTag> & RefProp<TTag>,
395+
props: ComboboxProps<TValue, false, false, TTag>,
396396
ref: Ref<TTag>
397397
): JSX.Element
398398
function ComboboxFn<TValue, TTag extends ElementType = typeof DEFAULT_COMBOBOX_TAG>(
399-
props: ComboboxProps<TValue, false, true, TTag> & RefProp<TTag>,
399+
props: ComboboxProps<TValue, false, true, TTag>,
400400
ref: Ref<TTag>
401401
): JSX.Element
402402

@@ -718,7 +718,7 @@ function InputFn<
718718
// TODO: One day we will be able to infer this type from the generic in Combobox itself.
719719
// But today is not that day..
720720
TType = Parameters<typeof ComboboxRoot>[0]['value']
721-
>(props: ComboboxInputProps<TTag, TType> & RefProp<HTMLInputElement>, ref: Ref<HTMLInputElement>) {
721+
>(props: ComboboxInputProps<TTag, TType>, ref: Ref<HTMLInputElement>) {
722722
let internalId = useId()
723723
let {
724724
id = `headlessui-combobox-input-${internalId}`,
@@ -1027,7 +1027,7 @@ export type ComboboxButtonProps<TTag extends ElementType> = Props<
10271027
>
10281028

10291029
function ButtonFn<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG>(
1030-
props: ComboboxButtonProps<TTag> & RefProp<HTMLButtonElement>,
1030+
props: ComboboxButtonProps<TTag>,
10311031
ref: Ref<HTMLButtonElement>
10321032
) {
10331033
let data = useData('Combobox.Button')
@@ -1140,7 +1140,7 @@ export type ComboboxLabelProps<TTag extends ElementType> = Props<
11401140
>
11411141

11421142
function LabelFn<TTag extends ElementType = typeof DEFAULT_LABEL_TAG>(
1143-
props: ComboboxLabelProps<TTag> & RefProp<HTMLLabelElement>,
1143+
props: ComboboxLabelProps<TTag>,
11441144
ref: Ref<HTMLLabelElement>
11451145
) {
11461146
let internalId = useId()
@@ -1189,7 +1189,7 @@ export type ComboboxOptionsProps<TTag extends ElementType> = Props<
11891189
}
11901190

11911191
function OptionsFn<TTag extends ElementType = typeof DEFAULT_OPTIONS_TAG>(
1192-
props: ComboboxOptionsProps<TTag> & RefProp<typeof HTMLUListElement>,
1192+
props: ComboboxOptionsProps<TTag>,
11931193
ref: Ref<HTMLUListElement>
11941194
) {
11951195
let internalId = useId()
@@ -1279,7 +1279,7 @@ function OptionFn<
12791279
// TODO: One day we will be able to infer this type from the generic in Combobox itself.
12801280
// But today is not that day..
12811281
TType = Parameters<typeof ComboboxRoot>[0]['value']
1282-
>(props: ComboboxOptionProps<TTag, TType> & RefProp<HTMLLIElement>, ref: Ref<HTMLLIElement>) {
1282+
>(props: ComboboxOptionProps<TTag, TType>, ref: Ref<HTMLLIElement>) {
12831283
let internalId = useId()
12841284
let {
12851285
id = `headlessui-combobox-option-${internalId}`,
@@ -1419,11 +1419,59 @@ function OptionFn<
14191419

14201420
// ---
14211421

1422-
let ComboboxRoot = forwardRefWithAs(ComboboxFn)
1423-
let Button = forwardRefWithAs(ButtonFn)
1424-
let Input = forwardRefWithAs(InputFn)
1425-
let Label = forwardRefWithAs(LabelFn)
1426-
let Options = forwardRefWithAs(OptionsFn)
1427-
let Option = forwardRefWithAs(OptionFn)
1422+
export interface ComponentCombobox extends HasDisplayName {
1423+
<TValue, TTag extends ElementType = typeof DEFAULT_COMBOBOX_TAG>(
1424+
props: ComboboxProps<TValue, true, true, TTag> & RefProp<typeof ComboboxFn>
1425+
): JSX.Element
1426+
<TValue, TTag extends ElementType = typeof DEFAULT_COMBOBOX_TAG>(
1427+
props: ComboboxProps<TValue, true, false, TTag> & RefProp<typeof ComboboxFn>
1428+
): JSX.Element
1429+
<TValue, TTag extends ElementType = typeof DEFAULT_COMBOBOX_TAG>(
1430+
props: ComboboxProps<TValue, false, false, TTag> & RefProp<typeof ComboboxFn>
1431+
): JSX.Element
1432+
<TValue, TTag extends ElementType = typeof DEFAULT_COMBOBOX_TAG>(
1433+
props: ComboboxProps<TValue, false, true, TTag> & RefProp<typeof ComboboxFn>
1434+
): JSX.Element
1435+
}
1436+
1437+
export interface ComponentComboboxButton extends HasDisplayName {
1438+
<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG>(
1439+
props: ComboboxButtonProps<TTag> & RefProp<typeof ButtonFn>
1440+
): JSX.Element
1441+
}
1442+
1443+
export interface ComponentComboboxInput extends HasDisplayName {
1444+
<TType, TTag extends ElementType = typeof DEFAULT_INPUT_TAG>(
1445+
props: ComboboxInputProps<TTag, TType> & RefProp<typeof InputFn>
1446+
): JSX.Element
1447+
}
1448+
1449+
export interface ComponentComboboxLabel extends HasDisplayName {
1450+
<TTag extends ElementType = typeof DEFAULT_LABEL_TAG>(
1451+
props: ComboboxLabelProps<TTag> & RefProp<typeof LabelFn>
1452+
): JSX.Element
1453+
}
1454+
1455+
export interface ComponentComboboxOptions extends HasDisplayName {
1456+
<TTag extends ElementType = typeof DEFAULT_OPTIONS_TAG>(
1457+
props: ComboboxOptionsProps<TTag> & RefProp<typeof OptionsFn>
1458+
): JSX.Element
1459+
}
1460+
1461+
export interface ComponentComboboxOption extends HasDisplayName {
1462+
<
1463+
TTag extends ElementType = typeof DEFAULT_OPTION_TAG,
1464+
TType = Parameters<typeof ComboboxRoot>[0]['value']
1465+
>(
1466+
props: ComboboxOptionProps<TTag, TType> & RefProp<typeof OptionFn>
1467+
): JSX.Element
1468+
}
1469+
1470+
let ComboboxRoot = forwardRefWithAs(ComboboxFn) as unknown as ComponentCombobox
1471+
let Button = forwardRefWithAs(ButtonFn) as unknown as ComponentComboboxButton
1472+
let Input = forwardRefWithAs(InputFn) as unknown as ComponentComboboxInput
1473+
let Label = forwardRefWithAs(LabelFn) as unknown as ComponentComboboxLabel
1474+
let Options = forwardRefWithAs(OptionsFn) as unknown as ComponentComboboxOptions
1475+
let Option = forwardRefWithAs(OptionFn) as unknown as ComponentComboboxOption
14281476

14291477
export let Combobox = Object.assign(ComboboxRoot, { Input, Button, Label, Options, Option })

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,9 @@ export type HasDisplayName = {
281281
displayName: string
282282
}
283283

284-
export type RefProp<RefType> = { ref?: Ref<RefType> }
284+
export type RefProp<T extends Function> = T extends (props: any, ref: Ref<infer RefType>) => any
285+
? { ref?: Ref<RefType> }
286+
: never
285287

286288
/**
287289
* This is a hack, but basically we want to keep the full 'API' of the component, but we do want to

0 commit comments

Comments
 (0)