Skip to content

Commit 23cc762

Browse files
author
Emily
authored
Merge pull request #544 from primer/users/dmarcey/nativeProps
Have primer components extend props for their native elements.
2 parents d70a101 + ddf8d1c commit 23cc762

File tree

1 file changed

+34
-48
lines changed

1 file changed

+34
-48
lines changed

index.d.ts

Lines changed: 34 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -80,33 +80,34 @@ declare module '@primer/components' {
8080
Item: React.FunctionComponent<FlexItemProps>
8181
}
8282

83-
export interface BoxProps extends BaseProps, CommonProps, LayoutProps {}
83+
export interface BoxProps extends BaseProps, CommonProps, LayoutProps, React.HTMLAttributes<HTMLDivElement> {}
8484

8585
export const Box: React.FunctionComponent<BoxProps>
8686

87-
export interface TextProps extends BaseProps, CommonProps, TypographyProps {}
87+
export interface TextProps extends BaseProps, CommonProps, TypographyProps, React.HTMLAttributes<HTMLSpanElement> {}
8888

8989
export const Text: React.FunctionComponent<TextProps>
9090

91-
export interface HeadingProps extends BaseProps, CommonProps, TypographyProps {}
91+
export interface HeadingProps
92+
extends BaseProps,
93+
CommonProps,
94+
TypographyProps,
95+
React.HTMLAttributes<HTMLHeadingElement> {}
9296

9397
export const Heading: React.FunctionComponent<HeadingProps>
9498

9599
type DetailsRenderFunction = (args: {open: boolean; toggle: () => void}) => React.ReactElement
96100

97-
export interface DetailsProps extends CommonProps {
98-
open?: boolean
101+
export interface DetailsProps extends CommonProps, React.HTMLAttributes<HTMLDetailsElement> {
99102
render?: DetailsRenderFunction
100103
children?: DetailsRenderFunction | React.ReactNode
101104
overlay?: boolean
102105
}
103106

104107
export const Details: React.FunctionComponent<DetailsProps>
105108

106-
export interface ButtonProps extends BaseProps, CommonProps {
107-
disabled?: boolean
109+
export interface ButtonProps extends BaseProps, CommonProps, React.HTMLAttributes<HTMLDetailsElement> {
108110
grouped?: boolean
109-
onClick?: Function
110111
size?: 'sm' | 'large'
111112
}
112113

@@ -115,9 +116,7 @@ declare module '@primer/components' {
115116
export const ButtonDanger: React.FunctionComponent<ButtonProps>
116117
export const Button: React.FunctionComponent<ButtonProps>
117118

118-
export interface AvatarProps extends CommonProps {
119-
alt: string
120-
src: string
119+
export interface AvatarProps extends CommonProps, React.HTMLAttributes<HTMLImageElement> {
121120
isChild?: boolean
122121
size?: number
123122
}
@@ -128,7 +127,7 @@ declare module '@primer/components' {
128127

129128
export const BaseStyles: React.FunctionComponent<BaseStylesProps>
130129

131-
export interface BorderBoxProps extends CommonProps, LayoutProps {
130+
export interface BorderBoxProps extends CommonProps, LayoutProps, BoxProps {
132131
border?: string
133132
borderColor?: string
134133
borderRadius?: string | number
@@ -137,19 +136,17 @@ declare module '@primer/components' {
137136

138137
export const BorderBox: React.FunctionComponent<BorderBoxProps>
139138

140-
export interface BranchNameProps extends CommonProps {
141-
href?: string
142-
}
139+
export interface BranchNameProps extends CommonProps, React.HTMLAttributes<HTMLAnchorElement> {}
143140

144141
export const BranchName: React.FunctionComponent<BranchNameProps>
145142

146-
export interface CircleBadgeProps extends CommonProps {
143+
export interface CircleBadgeProps extends CommonProps, React.HTMLAttributes<HTMLDivElement> {
147144
size?: string | number
148145
}
149146

150147
export const CircleBadge: React.FunctionComponent<CircleBadgeProps>
151148

152-
export interface CircleOcticonProps extends CommonProps {
149+
export interface CircleOcticonProps extends CommonProps, FlexProps {
153150
size?: number
154151
icon: React.ReactNode
155152
}
@@ -163,9 +160,9 @@ declare module '@primer/components' {
163160

164161
export const StyledOcticon: React.FunctionComponent<StyledOcticonProps>
165162

166-
export interface DropdownProps extends CommonProps {}
163+
export interface DropdownProps extends CommonProps, ButtonProps {}
167164

168-
export interface DropdownMenuProps extends CommonProps {
165+
export interface DropdownMenuProps extends CommonProps, React.HTMLAttributes<HTMLUListElement> {
169166
direction?: string
170167
title: string
171168
}
@@ -175,11 +172,11 @@ declare module '@primer/components' {
175172
Item: React.FunctionComponent<DropdownProps>
176173
}
177174

178-
export interface FilterListProps extends CommonProps {
175+
export interface FilterListProps extends CommonProps, React.HTMLAttributes<HTMLUListElement> {
179176
small?: boolean
180177
}
181178

182-
export interface FilterListItemProps extends CommonProps {
179+
export interface FilterListItemProps extends CommonProps, React.HTMLAttributes<HTMLAnchorElement> {
183180
count?: number
184181
selected?: boolean
185182
}
@@ -188,41 +185,44 @@ declare module '@primer/components' {
188185
Item: React.FunctionComponent<FilterListItemProps>
189186
}
190187

191-
export interface FlashProps extends CommonProps {
188+
export interface FlashProps extends CommonProps, React.HTMLAttributes<HTMLDivElement> {
192189
full?: boolean
193190
scheme?: string
194191
}
195192

196193
export const Flash: React.FunctionComponent<FlashProps>
197194

198-
export interface CounterLabelProps extends CommonProps {
195+
export interface CounterLabelProps extends CommonProps, React.HTMLAttributes<HTMLSpanElement> {
199196
scheme?: string
200197
}
201198

202199
export const CounterLabel: React.FunctionComponent<CounterLabelProps>
203200

204-
export interface LabelProps extends CommonProps {
201+
export interface LabelProps extends CommonProps, React.HTMLAttributes<HTMLSpanElement> {
205202
outline?: boolean
206203
size?: 'small' | 'medium' | 'large' | 'xl'
207204
dropshadow?: boolean
208205
}
209206

210207
export const Label: React.FunctionComponent<LabelProps>
211208

212-
export interface LinkProps extends CommonProps, TypographyProps {
213-
href?: string
209+
export interface LinkProps extends CommonProps, TypographyProps, React.HTMLAttributes<HTMLAnchorElement> {
214210
underline?: boolean
215211
}
216212

217213
export const Link: React.FunctionComponent<LinkProps>
218214

219-
export interface PointerBoxProps extends CommonProps, LayoutProps {
215+
export interface PointerBoxProps extends CommonProps, LayoutProps, BorderBoxProps {
220216
caret?: string
221217
}
222218

223219
export const PointerBox: React.FunctionComponent<PointerBoxProps>
224220

225-
export interface PositionComponentProps extends PositionProps, CommonProps, LayoutProps {}
221+
export interface PositionComponentProps
222+
extends PositionProps,
223+
CommonProps,
224+
LayoutProps,
225+
React.HTMLAttributes<HTMLDivElement> {}
226226

227227
export const Relative: React.FunctionComponent<PositionComponentProps>
228228
export const Absolute: React.FunctionComponent<PositionComponentProps>
@@ -236,38 +236,26 @@ declare module '@primer/components' {
236236

237237
export const StateLabel: React.FunctionComponent<StateLabelProps>
238238

239-
export interface TabNavProps extends CommonProps {
240-
'aria-label'?: string
241-
}
239+
export interface TabNavProps extends CommonProps, React.HTMLAttributes<HTMLDivElement> {}
242240

243-
export interface TabNavLinkProps extends CommonProps {
244-
href?: string
241+
export interface TabNavLinkProps extends CommonProps, React.HTMLAttributes<HTMLAnchorElement> {
245242
selected?: boolean
246243
}
247244

248245
export const TabNav: React.FunctionComponent<TabNavProps> & {
249246
Link: React.FunctionComponent<TabNavLinkProps>
250247
}
251248

252-
export interface TextInputProps extends CommonProps {
249+
export interface TextInputProps extends CommonProps, React.HTMLAttributes<HTMLInputElement> {
253250
autocomplete?: string
254-
'aria-label'?: string
255251
block?: boolean
256-
disabled?: boolean
257-
id?: string
258-
name?: string
259-
onChange?: (evt: React.ChangeEvent<HTMLInputElement>) => void
260-
placeholder?: string
261-
required?: boolean
262252
size?: 'small' | 'large'
263-
value?: string
264253
}
265254

266255
export const TextInput: React.FunctionComponent<TextInputProps>
267256

268-
export interface TooltipProps extends CommonProps {
257+
export interface TooltipProps extends CommonProps, React.HTMLAttributes<HTMLSpanElement> {
269258
align?: 'left' | 'right'
270-
'aria-label'?: string
271259
direction?: 'n' | 'ne' | 'e' | 'se' | 's' | 'sw' | 'w' | 'nw'
272260
noDelay?: boolean
273261
text?: string
@@ -276,16 +264,14 @@ declare module '@primer/components' {
276264

277265
export const Tooltip: React.FunctionComponent<TooltipProps>
278266

279-
export interface UnderlineNavProps extends CommonProps {
267+
export interface UnderlineNavProps extends CommonProps, React.HTMLAttributes<HTMLDivElement> {
280268
actions?: React.ReactNode
281269
align?: 'right'
282-
'aria-label'?: string
283270
full?: boolean
284271
label?: string
285272
}
286273

287-
export interface UnderlineNavLinkProps extends CommonProps {
288-
href?: string
274+
export interface UnderlineNavLinkProps extends CommonProps, React.HTMLAttributes<HTMLAnchorElement> {
289275
selected?: boolean
290276
}
291277

0 commit comments

Comments
 (0)