Skip to content
This repository was archived by the owner on Oct 23, 2023. It is now read-only.

Commit 122b838

Browse files
authored
feat: declare exports explicitly (#26)
* feat: declare export explicitly * chore: refactor object to Record string unknown
1 parent 9fee30b commit 122b838

File tree

6 files changed

+44
-21
lines changed

6 files changed

+44
-21
lines changed

.changeset/hot-insects-jump.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@polymorphic-factory/react': minor
3+
---
4+
5+
Declared bundle exports explicitly.

.changeset/many-steaks-explode.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@polymorphic-factory/react': patch
3+
---
4+
5+
Fixed an issue where autocomplete for intrinsic element props did not show up.

packages/react/src/forwardRef.tsx

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import {
2-
ComponentProps,
3-
ComponentPropsWithoutRef,
4-
ElementType,
2+
type ComponentProps,
3+
type ComponentPropsWithoutRef,
4+
type ElementType,
5+
type ForwardRefRenderFunction,
6+
type ValidationMap,
7+
type WeakValidationMap,
58
forwardRef as forwardRefReact,
6-
ForwardRefRenderFunction,
7-
ValidationMap,
8-
WeakValidationMap,
99
} from 'react'
1010

1111
/**
@@ -15,20 +15,28 @@ export type PropsOf<T extends ElementType> = ComponentPropsWithoutRef<T> & {
1515
as?: ElementType
1616
}
1717

18+
/**
19+
* Assign property types from right to left.
20+
* Think `Object.assign` for types.
21+
*
22+
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
23+
*/
24+
export type Assign<Target, Source> = Omit<Target, keyof Source> & Source
25+
1826
export type OmitCommonProps<
1927
Target,
2028
OmitAdditionalProps extends string | number | symbol = never,
2129
> = Omit<Target, 'transition' | 'as' | 'color' | OmitAdditionalProps>
2230

23-
export type AssignCommon<
24-
SourceProps extends object = Record<string, unknown>,
25-
OverrideProps extends object = Record<string, unknown>,
26-
> = OmitCommonProps<SourceProps, keyof OverrideProps> & OverrideProps
31+
type AssignCommon<
32+
SourceProps extends Record<string, unknown> = Record<never, never>,
33+
OverrideProps extends Record<string, unknown> = Record<never, never>,
34+
> = Assign<OmitCommonProps<SourceProps>, OverrideProps>
2735

28-
export type MergeWithAs<
36+
type MergeWithAs<
2937
ComponentProps extends Record<string, unknown>,
3038
AsProps extends Record<string, unknown>,
31-
AdditionalProps extends Record<string, unknown> = Record<string, unknown>,
39+
AdditionalProps extends Record<string, unknown> = Record<never, never>,
3240
AsComponent extends ElementType = ElementType,
3341
> = AssignCommon<ComponentProps, AdditionalProps> &
3442
AssignCommon<AsProps, AdditionalProps> & {
@@ -37,7 +45,7 @@ export type MergeWithAs<
3745

3846
export type ComponentWithAs<
3947
Component extends ElementType,
40-
Props extends Record<string, unknown> = Record<string, unknown>,
48+
Props extends Record<string, unknown> = Record<never, never>,
4149
> = {
4250
<AsComponent extends ElementType = Component>(
4351
props: MergeWithAs<ComponentProps<Component>, ComponentProps<AsComponent>, Props, AsComponent>,
@@ -52,7 +60,7 @@ export type ComponentWithAs<
5260

5361
export function forwardRef<
5462
Component extends ElementType,
55-
Props extends Record<string, unknown> = Record<string, unknown>,
63+
Props extends Record<string, unknown> = Record<never, never>,
5664
>(
5765
component: ForwardRefRenderFunction<
5866
unknown,

packages/react/src/index.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
1-
export * from './forwardRef'
2-
export * from './polymorphic-factory'
1+
export { forwardRef, type ComponentWithAs, type PropsOf, type Assign } from './forwardRef'
2+
export {
3+
polymorphicFactory,
4+
type HTMLPolymorphicComponents,
5+
type HTMLPolymorphicProps,
6+
} from './polymorphic-factory'

packages/react/src/polymorphic-factory.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { ElementType } from 'react'
2-
import { ComponentWithAs, forwardRef, PropsOf } from './forwardRef'
1+
import type { ElementType } from 'react'
2+
import { type ComponentWithAs, forwardRef, type PropsOf } from './forwardRef'
33

4-
export type DOMElements = keyof JSX.IntrinsicElements
4+
type DOMElements = keyof JSX.IntrinsicElements
55

66
export type HTMLPolymorphicComponents = {
77
[Tag in DOMElements]: ComponentWithAs<Tag>
@@ -14,7 +14,7 @@ export type HTMLPolymorphicProps<T extends ElementType> = Omit<PropsOf<T>, 'ref'
1414
type PolymorphFactory = {
1515
<
1616
T extends ElementType,
17-
P extends Record<string, unknown> = Record<string, unknown>,
17+
P extends Record<string, unknown> = Record<never, never>,
1818
Options = never,
1919
>(
2020
component: T,

tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"isolatedModules": true,
1212
"esModuleInterop": true,
1313
"allowSyntheticDefaultImports": true,
14-
"noEmit": false
14+
"noEmit": false,
15+
"importsNotUsedAsValues": "error"
1516
}
1617
}

0 commit comments

Comments
 (0)