@primer/components 0.0.0-202197123143 → 0.0.0-20219715822

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,326 @@
1
+ import React from 'react';
2
+ import { ComponentProps } from './utils/types';
3
+ import { TokenSizeKeys } from './Token/TokenBase';
4
+ declare type AnyReactComponent = React.ComponentType<any>;
5
+ declare type TextInputWithTokensInternalProps<TokenComponentType extends AnyReactComponent> = {
6
+ /**
7
+ * The array of tokens to render
8
+ */
9
+ tokens: TokenComponentType extends React.ComponentType<infer TokenProps> ? TokenProps[] : never;
10
+ /**
11
+ * The function that gets called when a token is removed
12
+ */
13
+ onTokenRemove: (tokenId: string | number) => void;
14
+ /**
15
+ * The component used to render each token
16
+ */
17
+ tokenComponent?: TokenComponentType;
18
+ /**
19
+ * The maximum height of the component. If the content in the input exceeds this height,
20
+ * it will scroll vertically
21
+ */
22
+ maxHeight?: React.CSSProperties['maxHeight'];
23
+ /**
24
+ * Whether tokens should render inline horizontally. By default, tokens wrap to new lines.
25
+ */
26
+ preventTokenWrapping?: boolean;
27
+ /**
28
+ * The size of the tokens
29
+ */
30
+ size?: TokenSizeKeys;
31
+ /**
32
+ * Whether the remove buttons should be rendered in the tokens
33
+ */
34
+ hideTokenRemoveButtons?: boolean;
35
+ };
36
+ declare const TextInputWithTokens: React.ForwardRefExoticComponent<Pick<TextInputWithTokensInternalProps<AnyReactComponent> & Omit<Pick<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "key" | keyof React.InputHTMLAttributes<HTMLInputElement>> & {
37
+ ref?: ((instance: HTMLInputElement | null) => void) | React.RefObject<HTMLInputElement> | null | undefined;
38
+ }, string | number | symbol> & {
39
+ className?: string | undefined;
40
+ icon?: React.ComponentType<{
41
+ className?: string | undefined;
42
+ }> | undefined;
43
+ wrapperRef?: React.RefObject<HTMLSpanElement> | undefined;
44
+ } & Pick<{
45
+ color?: string | undefined;
46
+ maxWidth?: import("styled-system").ResponsiveValue<import("csstype").Property.MaxWidth<import("styled-system").TLengthStyledSystem>, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
47
+ minWidth?: import("styled-system").ResponsiveValue<import("csstype").Property.MinWidth<import("styled-system").TLengthStyledSystem>, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
48
+ translate?: "yes" | "no" | undefined;
49
+ width?: import("styled-system").ResponsiveValue<import("csstype").Property.Width<import("styled-system").TLengthStyledSystem>, Required<import("styled-system").Theme<import("styled-system").TLengthStyledSystem>>> | undefined;
50
+ hidden?: boolean | undefined;
51
+ children?: React.ReactNode;
52
+ ref?: ((instance: HTMLSpanElement | null) => void) | React.RefObject<HTMLSpanElement> | null | undefined;
53
+ slot?: string | undefined;
54
+ style?: React.CSSProperties | undefined;
55
+ title?: string | undefined;
56
+ key?: React.Key | null | undefined;
57
+ defaultChecked?: boolean | undefined;
58
+ defaultValue?: string | number | readonly string[] | undefined;
59
+ suppressContentEditableWarning?: boolean | undefined;
60
+ suppressHydrationWarning?: boolean | undefined;
61
+ accessKey?: string | undefined;
62
+ className?: string | undefined;
63
+ contentEditable?: "inherit" | (boolean | "true" | "false") | undefined;
64
+ contextMenu?: string | undefined;
65
+ dir?: string | undefined;
66
+ draggable?: (boolean | "true" | "false") | undefined;
67
+ id?: string | undefined;
68
+ lang?: string | undefined;
69
+ placeholder?: string | undefined;
70
+ spellCheck?: (boolean | "true" | "false") | undefined;
71
+ tabIndex?: number | undefined;
72
+ radioGroup?: string | undefined;
73
+ role?: React.AriaRole | undefined;
74
+ about?: string | undefined;
75
+ datatype?: string | undefined;
76
+ inlist?: any;
77
+ prefix?: string | undefined;
78
+ property?: string | undefined;
79
+ resource?: string | undefined;
80
+ typeof?: string | undefined;
81
+ vocab?: string | undefined;
82
+ autoCapitalize?: string | undefined;
83
+ autoCorrect?: string | undefined;
84
+ autoSave?: string | undefined;
85
+ itemProp?: string | undefined;
86
+ itemScope?: boolean | undefined;
87
+ itemType?: string | undefined;
88
+ itemID?: string | undefined;
89
+ itemRef?: string | undefined;
90
+ results?: number | undefined;
91
+ security?: string | undefined;
92
+ unselectable?: "on" | "off" | undefined;
93
+ inputMode?: "none" | "text" | "search" | "tel" | "url" | "email" | "numeric" | "decimal" | undefined;
94
+ is?: string | undefined;
95
+ 'aria-activedescendant'?: string | undefined;
96
+ 'aria-atomic'?: boolean | "true" | "false" | undefined;
97
+ 'aria-autocomplete'?: "none" | "list" | "inline" | "both" | undefined;
98
+ 'aria-busy'?: boolean | "true" | "false" | undefined;
99
+ 'aria-checked'?: boolean | "true" | "false" | "mixed" | undefined;
100
+ 'aria-colcount'?: number | undefined;
101
+ 'aria-colindex'?: number | undefined;
102
+ 'aria-colspan'?: number | undefined;
103
+ 'aria-controls'?: string | undefined;
104
+ 'aria-current'?: boolean | "time" | "true" | "false" | "page" | "step" | "location" | "date" | undefined;
105
+ 'aria-describedby'?: string | undefined;
106
+ 'aria-details'?: string | undefined;
107
+ 'aria-disabled'?: boolean | "true" | "false" | undefined;
108
+ 'aria-dropeffect'?: "none" | "link" | "copy" | "execute" | "move" | "popup" | undefined;
109
+ 'aria-errormessage'?: string | undefined;
110
+ 'aria-expanded'?: boolean | "true" | "false" | undefined;
111
+ 'aria-flowto'?: string | undefined;
112
+ 'aria-grabbed'?: boolean | "true" | "false" | undefined;
113
+ 'aria-haspopup'?: boolean | "grid" | "dialog" | "menu" | "listbox" | "tree" | "true" | "false" | undefined;
114
+ 'aria-hidden'?: boolean | "true" | "false" | undefined;
115
+ 'aria-invalid'?: boolean | "true" | "false" | "grammar" | "spelling" | undefined;
116
+ 'aria-keyshortcuts'?: string | undefined;
117
+ 'aria-label'?: string | undefined;
118
+ 'aria-labelledby'?: string | undefined;
119
+ 'aria-level'?: number | undefined;
120
+ 'aria-live'?: "off" | "assertive" | "polite" | undefined;
121
+ 'aria-modal'?: boolean | "true" | "false" | undefined;
122
+ 'aria-multiline'?: boolean | "true" | "false" | undefined;
123
+ 'aria-multiselectable'?: boolean | "true" | "false" | undefined;
124
+ 'aria-orientation'?: "horizontal" | "vertical" | undefined;
125
+ 'aria-owns'?: string | undefined;
126
+ 'aria-placeholder'?: string | undefined;
127
+ 'aria-posinset'?: number | undefined;
128
+ 'aria-pressed'?: boolean | "true" | "false" | "mixed" | undefined;
129
+ 'aria-readonly'?: boolean | "true" | "false" | undefined;
130
+ 'aria-relevant'?: "all" | "text" | "additions" | "additions removals" | "additions text" | "removals" | "removals additions" | "removals text" | "text additions" | "text removals" | undefined;
131
+ 'aria-required'?: boolean | "true" | "false" | undefined;
132
+ 'aria-roledescription'?: string | undefined;
133
+ 'aria-rowcount'?: number | undefined;
134
+ 'aria-rowindex'?: number | undefined;
135
+ 'aria-rowspan'?: number | undefined;
136
+ 'aria-selected'?: boolean | "true" | "false" | undefined;
137
+ 'aria-setsize'?: number | undefined;
138
+ 'aria-sort'?: "none" | "ascending" | "descending" | "other" | undefined;
139
+ 'aria-valuemax'?: number | undefined;
140
+ 'aria-valuemin'?: number | undefined;
141
+ 'aria-valuenow'?: number | undefined;
142
+ 'aria-valuetext'?: string | undefined;
143
+ dangerouslySetInnerHTML?: {
144
+ __html: string;
145
+ } | undefined;
146
+ onCopy?: React.ClipboardEventHandler<HTMLSpanElement> | undefined;
147
+ onCopyCapture?: React.ClipboardEventHandler<HTMLSpanElement> | undefined;
148
+ onCut?: React.ClipboardEventHandler<HTMLSpanElement> | undefined;
149
+ onCutCapture?: React.ClipboardEventHandler<HTMLSpanElement> | undefined;
150
+ onPaste?: React.ClipboardEventHandler<HTMLSpanElement> | undefined;
151
+ onPasteCapture?: React.ClipboardEventHandler<HTMLSpanElement> | undefined;
152
+ onCompositionEnd?: React.CompositionEventHandler<HTMLSpanElement> | undefined;
153
+ onCompositionEndCapture?: React.CompositionEventHandler<HTMLSpanElement> | undefined;
154
+ onCompositionStart?: React.CompositionEventHandler<HTMLSpanElement> | undefined;
155
+ onCompositionStartCapture?: React.CompositionEventHandler<HTMLSpanElement> | undefined;
156
+ onCompositionUpdate?: React.CompositionEventHandler<HTMLSpanElement> | undefined;
157
+ onCompositionUpdateCapture?: React.CompositionEventHandler<HTMLSpanElement> | undefined;
158
+ onFocus?: React.FocusEventHandler<HTMLSpanElement> | undefined;
159
+ onFocusCapture?: React.FocusEventHandler<HTMLSpanElement> | undefined;
160
+ onBlur?: React.FocusEventHandler<HTMLSpanElement> | undefined;
161
+ onBlurCapture?: React.FocusEventHandler<HTMLSpanElement> | undefined;
162
+ onChange?: React.FormEventHandler<HTMLSpanElement> | undefined;
163
+ onChangeCapture?: React.FormEventHandler<HTMLSpanElement> | undefined;
164
+ onBeforeInput?: React.FormEventHandler<HTMLSpanElement> | undefined;
165
+ onBeforeInputCapture?: React.FormEventHandler<HTMLSpanElement> | undefined;
166
+ onInput?: React.FormEventHandler<HTMLSpanElement> | undefined;
167
+ onInputCapture?: React.FormEventHandler<HTMLSpanElement> | undefined;
168
+ onReset?: React.FormEventHandler<HTMLSpanElement> | undefined;
169
+ onResetCapture?: React.FormEventHandler<HTMLSpanElement> | undefined;
170
+ onSubmit?: React.FormEventHandler<HTMLSpanElement> | undefined;
171
+ onSubmitCapture?: React.FormEventHandler<HTMLSpanElement> | undefined;
172
+ onInvalid?: React.FormEventHandler<HTMLSpanElement> | undefined;
173
+ onInvalidCapture?: React.FormEventHandler<HTMLSpanElement> | undefined;
174
+ onLoad?: React.ReactEventHandler<HTMLSpanElement> | undefined;
175
+ onLoadCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
176
+ onError?: React.ReactEventHandler<HTMLSpanElement> | undefined;
177
+ onErrorCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
178
+ onKeyDown?: React.KeyboardEventHandler<HTMLSpanElement> | undefined;
179
+ onKeyDownCapture?: React.KeyboardEventHandler<HTMLSpanElement> | undefined;
180
+ onKeyPress?: React.KeyboardEventHandler<HTMLSpanElement> | undefined;
181
+ onKeyPressCapture?: React.KeyboardEventHandler<HTMLSpanElement> | undefined;
182
+ onKeyUp?: React.KeyboardEventHandler<HTMLSpanElement> | undefined;
183
+ onKeyUpCapture?: React.KeyboardEventHandler<HTMLSpanElement> | undefined;
184
+ onAbort?: React.ReactEventHandler<HTMLSpanElement> | undefined;
185
+ onAbortCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
186
+ onCanPlay?: React.ReactEventHandler<HTMLSpanElement> | undefined;
187
+ onCanPlayCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
188
+ onCanPlayThrough?: React.ReactEventHandler<HTMLSpanElement> | undefined;
189
+ onCanPlayThroughCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
190
+ onDurationChange?: React.ReactEventHandler<HTMLSpanElement> | undefined;
191
+ onDurationChangeCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
192
+ onEmptied?: React.ReactEventHandler<HTMLSpanElement> | undefined;
193
+ onEmptiedCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
194
+ onEncrypted?: React.ReactEventHandler<HTMLSpanElement> | undefined;
195
+ onEncryptedCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
196
+ onEnded?: React.ReactEventHandler<HTMLSpanElement> | undefined;
197
+ onEndedCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
198
+ onLoadedData?: React.ReactEventHandler<HTMLSpanElement> | undefined;
199
+ onLoadedDataCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
200
+ onLoadedMetadata?: React.ReactEventHandler<HTMLSpanElement> | undefined;
201
+ onLoadedMetadataCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
202
+ onLoadStart?: React.ReactEventHandler<HTMLSpanElement> | undefined;
203
+ onLoadStartCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
204
+ onPause?: React.ReactEventHandler<HTMLSpanElement> | undefined;
205
+ onPauseCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
206
+ onPlay?: React.ReactEventHandler<HTMLSpanElement> | undefined;
207
+ onPlayCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
208
+ onPlaying?: React.ReactEventHandler<HTMLSpanElement> | undefined;
209
+ onPlayingCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
210
+ onProgress?: React.ReactEventHandler<HTMLSpanElement> | undefined;
211
+ onProgressCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
212
+ onRateChange?: React.ReactEventHandler<HTMLSpanElement> | undefined;
213
+ onRateChangeCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
214
+ onSeeked?: React.ReactEventHandler<HTMLSpanElement> | undefined;
215
+ onSeekedCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
216
+ onSeeking?: React.ReactEventHandler<HTMLSpanElement> | undefined;
217
+ onSeekingCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
218
+ onStalled?: React.ReactEventHandler<HTMLSpanElement> | undefined;
219
+ onStalledCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
220
+ onSuspend?: React.ReactEventHandler<HTMLSpanElement> | undefined;
221
+ onSuspendCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
222
+ onTimeUpdate?: React.ReactEventHandler<HTMLSpanElement> | undefined;
223
+ onTimeUpdateCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
224
+ onVolumeChange?: React.ReactEventHandler<HTMLSpanElement> | undefined;
225
+ onVolumeChangeCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
226
+ onWaiting?: React.ReactEventHandler<HTMLSpanElement> | undefined;
227
+ onWaitingCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
228
+ onAuxClick?: React.MouseEventHandler<HTMLSpanElement> | undefined;
229
+ onAuxClickCapture?: React.MouseEventHandler<HTMLSpanElement> | undefined;
230
+ onClick?: React.MouseEventHandler<HTMLSpanElement> | undefined;
231
+ onClickCapture?: React.MouseEventHandler<HTMLSpanElement> | undefined;
232
+ onContextMenu?: React.MouseEventHandler<HTMLSpanElement> | undefined;
233
+ onContextMenuCapture?: React.MouseEventHandler<HTMLSpanElement> | undefined;
234
+ onDoubleClick?: React.MouseEventHandler<HTMLSpanElement> | undefined;
235
+ onDoubleClickCapture?: React.MouseEventHandler<HTMLSpanElement> | undefined;
236
+ onDrag?: React.DragEventHandler<HTMLSpanElement> | undefined;
237
+ onDragCapture?: React.DragEventHandler<HTMLSpanElement> | undefined;
238
+ onDragEnd?: React.DragEventHandler<HTMLSpanElement> | undefined;
239
+ onDragEndCapture?: React.DragEventHandler<HTMLSpanElement> | undefined;
240
+ onDragEnter?: React.DragEventHandler<HTMLSpanElement> | undefined;
241
+ onDragEnterCapture?: React.DragEventHandler<HTMLSpanElement> | undefined;
242
+ onDragExit?: React.DragEventHandler<HTMLSpanElement> | undefined;
243
+ onDragExitCapture?: React.DragEventHandler<HTMLSpanElement> | undefined;
244
+ onDragLeave?: React.DragEventHandler<HTMLSpanElement> | undefined;
245
+ onDragLeaveCapture?: React.DragEventHandler<HTMLSpanElement> | undefined;
246
+ onDragOver?: React.DragEventHandler<HTMLSpanElement> | undefined;
247
+ onDragOverCapture?: React.DragEventHandler<HTMLSpanElement> | undefined;
248
+ onDragStart?: React.DragEventHandler<HTMLSpanElement> | undefined;
249
+ onDragStartCapture?: React.DragEventHandler<HTMLSpanElement> | undefined;
250
+ onDrop?: React.DragEventHandler<HTMLSpanElement> | undefined;
251
+ onDropCapture?: React.DragEventHandler<HTMLSpanElement> | undefined;
252
+ onMouseDown?: React.MouseEventHandler<HTMLSpanElement> | undefined;
253
+ onMouseDownCapture?: React.MouseEventHandler<HTMLSpanElement> | undefined;
254
+ onMouseEnter?: React.MouseEventHandler<HTMLSpanElement> | undefined;
255
+ onMouseLeave?: React.MouseEventHandler<HTMLSpanElement> | undefined;
256
+ onMouseMove?: React.MouseEventHandler<HTMLSpanElement> | undefined;
257
+ onMouseMoveCapture?: React.MouseEventHandler<HTMLSpanElement> | undefined;
258
+ onMouseOut?: React.MouseEventHandler<HTMLSpanElement> | undefined;
259
+ onMouseOutCapture?: React.MouseEventHandler<HTMLSpanElement> | undefined;
260
+ onMouseOver?: React.MouseEventHandler<HTMLSpanElement> | undefined;
261
+ onMouseOverCapture?: React.MouseEventHandler<HTMLSpanElement> | undefined;
262
+ onMouseUp?: React.MouseEventHandler<HTMLSpanElement> | undefined;
263
+ onMouseUpCapture?: React.MouseEventHandler<HTMLSpanElement> | undefined;
264
+ onSelect?: React.ReactEventHandler<HTMLSpanElement> | undefined;
265
+ onSelectCapture?: React.ReactEventHandler<HTMLSpanElement> | undefined;
266
+ onTouchCancel?: React.TouchEventHandler<HTMLSpanElement> | undefined;
267
+ onTouchCancelCapture?: React.TouchEventHandler<HTMLSpanElement> | undefined;
268
+ onTouchEnd?: React.TouchEventHandler<HTMLSpanElement> | undefined;
269
+ onTouchEndCapture?: React.TouchEventHandler<HTMLSpanElement> | undefined;
270
+ onTouchMove?: React.TouchEventHandler<HTMLSpanElement> | undefined;
271
+ onTouchMoveCapture?: React.TouchEventHandler<HTMLSpanElement> | undefined;
272
+ onTouchStart?: React.TouchEventHandler<HTMLSpanElement> | undefined;
273
+ onTouchStartCapture?: React.TouchEventHandler<HTMLSpanElement> | undefined;
274
+ onPointerDown?: React.PointerEventHandler<HTMLSpanElement> | undefined;
275
+ onPointerDownCapture?: React.PointerEventHandler<HTMLSpanElement> | undefined;
276
+ onPointerMove?: React.PointerEventHandler<HTMLSpanElement> | undefined;
277
+ onPointerMoveCapture?: React.PointerEventHandler<HTMLSpanElement> | undefined;
278
+ onPointerUp?: React.PointerEventHandler<HTMLSpanElement> | undefined;
279
+ onPointerUpCapture?: React.PointerEventHandler<HTMLSpanElement> | undefined;
280
+ onPointerCancel?: React.PointerEventHandler<HTMLSpanElement> | undefined;
281
+ onPointerCancelCapture?: React.PointerEventHandler<HTMLSpanElement> | undefined;
282
+ onPointerEnter?: React.PointerEventHandler<HTMLSpanElement> | undefined;
283
+ onPointerEnterCapture?: React.PointerEventHandler<HTMLSpanElement> | undefined;
284
+ onPointerLeave?: React.PointerEventHandler<HTMLSpanElement> | undefined;
285
+ onPointerLeaveCapture?: React.PointerEventHandler<HTMLSpanElement> | undefined;
286
+ onPointerOver?: React.PointerEventHandler<HTMLSpanElement> | undefined;
287
+ onPointerOverCapture?: React.PointerEventHandler<HTMLSpanElement> | undefined;
288
+ onPointerOut?: React.PointerEventHandler<HTMLSpanElement> | undefined;
289
+ onPointerOutCapture?: React.PointerEventHandler<HTMLSpanElement> | undefined;
290
+ onGotPointerCapture?: React.PointerEventHandler<HTMLSpanElement> | undefined;
291
+ onGotPointerCaptureCapture?: React.PointerEventHandler<HTMLSpanElement> | undefined;
292
+ onLostPointerCapture?: React.PointerEventHandler<HTMLSpanElement> | undefined;
293
+ onLostPointerCaptureCapture?: React.PointerEventHandler<HTMLSpanElement> | undefined;
294
+ onScroll?: React.UIEventHandler<HTMLSpanElement> | undefined;
295
+ onScrollCapture?: React.UIEventHandler<HTMLSpanElement> | undefined;
296
+ onWheel?: React.WheelEventHandler<HTMLSpanElement> | undefined;
297
+ onWheelCapture?: React.WheelEventHandler<HTMLSpanElement> | undefined;
298
+ onAnimationStart?: React.AnimationEventHandler<HTMLSpanElement> | undefined;
299
+ onAnimationStartCapture?: React.AnimationEventHandler<HTMLSpanElement> | undefined;
300
+ onAnimationEnd?: React.AnimationEventHandler<HTMLSpanElement> | undefined;
301
+ onAnimationEndCapture?: React.AnimationEventHandler<HTMLSpanElement> | undefined;
302
+ onAnimationIteration?: React.AnimationEventHandler<HTMLSpanElement> | undefined;
303
+ onAnimationIterationCapture?: React.AnimationEventHandler<HTMLSpanElement> | undefined;
304
+ onTransitionEnd?: React.TransitionEventHandler<HTMLSpanElement> | undefined;
305
+ onTransitionEndCapture?: React.TransitionEventHandler<HTMLSpanElement> | undefined;
306
+ block?: boolean | undefined;
307
+ sx?: import("@styled-system/css").SystemStyleObject | undefined;
308
+ disabled?: boolean | undefined;
309
+ variant?: "large" | "small" | undefined;
310
+ hasIcon?: boolean | undefined;
311
+ contrast?: boolean | undefined;
312
+ } & {
313
+ theme?: any;
314
+ }, "maxWidth" | "minWidth" | "width" | "theme" | "block" | "sx" | "disabled" | "variant" | "contrast"> & Omit<Pick<{
315
+ [x: string]: any;
316
+ [x: number]: any;
317
+ } & {
318
+ theme?: any;
319
+ } & {
320
+ as?: string | React.ComponentType<any> | undefined;
321
+ forwardedAs?: string | React.ComponentType<any> | undefined;
322
+ }, string | number | symbol>, "maxWidth" | "minWidth" | "width" | "theme" | "className" | "block" | "icon" | "sx" | "disabled" | "variant" | "contrast" | "wrapperRef"> & {
323
+ as?: "input" | undefined;
324
+ }, string | number | symbol> & React.RefAttributes<HTMLInputElement>>;
325
+ export declare type TextInputWithTokensProps = ComponentProps<typeof TextInputWithTokens>;
326
+ export default TextInputWithTokens;
@@ -0,0 +1,217 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ import React, { useRef, useState } from 'react';
4
+ import { omit } from '@styled-system/props';
5
+ import styled from 'styled-components';
6
+ import { FocusKeys } from './behaviors/focusZone';
7
+ import { useCombinedRefs } from './hooks/useCombinedRefs';
8
+ import { useFocusZone } from './hooks/useFocusZone';
9
+ import Token from './Token/Token';
10
+ import TextInput from './TextInput';
11
+ import { useProvidedRefOrCreate } from './hooks';
12
+ import UnstyledTextInput from './_UnstyledTextInput';
13
+ const InputWrapper = styled.div.withConfig({
14
+ displayName: "TextInputWithTokens__InputWrapper",
15
+ componentId: "sc-8z94t5-0"
16
+ })(["order:1;flex-grow:1;"]); // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+
18
+ // The inner contents of `TextInputWithTokens` are separated so they may be passed to the `as`
19
+ // prop of the `TextInput` component
20
+ function TextInputWithTokensInnerComponent({
21
+ tokens,
22
+ onTokenRemove,
23
+ tokenComponent: TokenComponent,
24
+ size,
25
+ hideTokenRemoveButtons,
26
+ selectedTokenIndex,
27
+ setSelectedTokenIndex,
28
+ ...rest
29
+ }, externalRef) {
30
+ const ref = useProvidedRefOrCreate(externalRef);
31
+ const {
32
+ onFocus,
33
+ onKeyDown,
34
+ ...inputPropsRest
35
+ } = omit(rest);
36
+
37
+ const handleTokenFocus = tokenIndex => () => {
38
+ setSelectedTokenIndex(tokenIndex);
39
+ };
40
+
41
+ const handleTokenBlur = () => {
42
+ setSelectedTokenIndex(undefined);
43
+ };
44
+
45
+ const handleTokenKeyUp = event => {
46
+ if (event.key === 'Escape') {
47
+ var _ref$current;
48
+
49
+ (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.focus();
50
+ }
51
+ };
52
+
53
+ const handleInputFocus = event => {
54
+ onFocus && onFocus(event);
55
+ setSelectedTokenIndex(undefined);
56
+ };
57
+
58
+ const handleInputKeyDown = event => {
59
+ var _ref$current2;
60
+
61
+ if (onKeyDown) {
62
+ onKeyDown(event);
63
+ }
64
+
65
+ if ((_ref$current2 = ref.current) !== null && _ref$current2 !== void 0 && _ref$current2.value) {
66
+ return;
67
+ }
68
+
69
+ const lastToken = tokens[tokens.length - 1];
70
+
71
+ if (event.key === 'Backspace' && lastToken) {
72
+ onTokenRemove(lastToken.id);
73
+
74
+ if (ref.current) {
75
+ // TODO: eliminate the first hack by making changes to the Autocomplete component
76
+ //
77
+ // HACKS:
78
+ // 1. Directly setting `ref.current.value` instead of updating state because the autocomplete
79
+ // highlight behavior doesn't work correctly if we update the value with a setState action in onChange
80
+ // 2. Adding an extra space so that when I backspace, it doesn't delete the last letter
81
+ ref.current.value = `${lastToken.text} `;
82
+ } // HACK: for some reason we need to wait a tick for `.select()` to work
83
+
84
+
85
+ setTimeout(() => {
86
+ var _ref$current3;
87
+
88
+ (_ref$current3 = ref.current) === null || _ref$current3 === void 0 ? void 0 : _ref$current3.select();
89
+ }, 0);
90
+ }
91
+ };
92
+
93
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(InputWrapper, {
94
+ key: "inputWrapper"
95
+ }, /*#__PURE__*/React.createElement(UnstyledTextInput, _extends({
96
+ ref: ref,
97
+ onFocus: handleInputFocus,
98
+ onKeyDown: handleInputKeyDown,
99
+ type: "text",
100
+ sx: {
101
+ height: '100%'
102
+ }
103
+ }, inputPropsRest))), tokens.length && TokenComponent ? tokens.map(({
104
+ id,
105
+ ...tokenRest
106
+ }, i) => /*#__PURE__*/React.createElement(TokenComponent, _extends({
107
+ key: id,
108
+ onFocus: handleTokenFocus(i),
109
+ onBlur: handleTokenBlur,
110
+ onKeyUp: handleTokenKeyUp,
111
+ isSelected: selectedTokenIndex === i,
112
+ onRemove: () => {
113
+ onTokenRemove(id);
114
+ },
115
+ hideRemoveButton: hideTokenRemoveButtons,
116
+ size: size,
117
+ tabIndex: 0
118
+ }, tokenRest))) : null);
119
+ } // using forwardRef is important so that other components (ex. Autocomplete) can use the ref
120
+
121
+
122
+ const TextInputWithTokensInnerComponentWithRef = /*#__PURE__*/React.forwardRef(TextInputWithTokensInnerComponent);
123
+
124
+ function TextInputWithTokensComponent({
125
+ tokens,
126
+ onTokenRemove,
127
+ sx: sxProp,
128
+ ...props
129
+ }, ref) {
130
+ const localInputRef = useRef(null);
131
+ const combinedInputRef = useCombinedRefs(localInputRef, ref);
132
+ const [selectedTokenIndex, setSelectedTokenIndex] = useState();
133
+ const {
134
+ containerRef
135
+ } = useFocusZone({
136
+ focusOutBehavior: 'wrap',
137
+ bindKeys: FocusKeys.ArrowHorizontal | FocusKeys.HomeAndEnd,
138
+ focusableElementFilter: element => {
139
+ return !element.getAttributeNames().includes('aria-hidden');
140
+ },
141
+ getNextFocusable: direction => {
142
+ var _containerRef$current;
143
+
144
+ if (!selectedTokenIndex && selectedTokenIndex !== 0) {
145
+ return undefined;
146
+ }
147
+
148
+ let nextIndex = selectedTokenIndex + 1; // "+ 1" accounts for the first element: the text input
149
+
150
+ if (direction === 'next') {
151
+ nextIndex += 1;
152
+ }
153
+
154
+ if (direction === 'previous') {
155
+ nextIndex -= 1;
156
+ }
157
+
158
+ if (nextIndex > tokens.length || nextIndex < 1) {
159
+ return combinedInputRef.current || undefined;
160
+ }
161
+
162
+ return (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.children[nextIndex];
163
+ }
164
+ }, [selectedTokenIndex]);
165
+
166
+ const handleTokenRemove = tokenId => {
167
+ onTokenRemove(tokenId);
168
+
169
+ if (selectedTokenIndex) {
170
+ var _containerRef$current2;
171
+
172
+ const nextElementToFocus = (_containerRef$current2 = containerRef.current) === null || _containerRef$current2 === void 0 ? void 0 : _containerRef$current2.children[selectedTokenIndex];
173
+ nextElementToFocus.focus();
174
+ }
175
+ };
176
+
177
+ return /*#__PURE__*/React.createElement(TextInput, _extends({
178
+ ref: combinedInputRef,
179
+ wrapperRef: containerRef,
180
+ as: TextInputWithTokensInnerComponentWithRef,
181
+ selectedTokenIndex: selectedTokenIndex,
182
+ setSelectedTokenIndex: setSelectedTokenIndex,
183
+ tokens: tokens,
184
+ onTokenRemove: handleTokenRemove,
185
+ sx: {
186
+ alignItems: 'center',
187
+ flexWrap: props.preventTokenWrapping ? 'nowrap' : 'wrap',
188
+ gap: '0.25rem',
189
+ '> *': {
190
+ flexShrink: 0
191
+ },
192
+ ...(props.block ? {
193
+ display: 'flex',
194
+ width: '100%'
195
+ } : {}),
196
+ ...(props.maxHeight ? {
197
+ maxHeight: props.maxHeight,
198
+ overflow: 'auto'
199
+ } : {}),
200
+ ...(props.preventTokenWrapping ? {
201
+ overflow: 'auto'
202
+ } : {}),
203
+ ...sxProp
204
+ }
205
+ }, props));
206
+ }
207
+
208
+ TextInputWithTokensComponent.displayName = "TextInputWithTokensComponent";
209
+ // using forwardRef is important so that other components (ex. Autocomplete) can use the ref
210
+ const TextInputWithTokens = /*#__PURE__*/React.forwardRef(TextInputWithTokensComponent);
211
+ TextInputWithTokens.defaultProps = {
212
+ tokenComponent: Token,
213
+ size: 'xlarge',
214
+ hideTokenRemoveButtons: false
215
+ };
216
+ TextInputWithTokens.displayName = 'TextInputWithTokens';
217
+ export default TextInputWithTokens;
@@ -0,0 +1,2 @@
1
+ declare const UnstyledTextInput: import("styled-components").StyledComponent<"input", any, import("./sx").SxProp, never>;
2
+ export default UnstyledTextInput;
@@ -0,0 +1,7 @@
1
+ import styled from 'styled-components';
2
+ import sx from './sx';
3
+ const UnstyledTextInput = styled.input.withConfig({
4
+ displayName: "_UnstyledTextInput__UnstyledTextInput",
5
+ componentId: "sc-1jgl33s-0"
6
+ })(["border:0;font-size:inherit;font-family:inherit;background-color:transparent;-webkit-appearance:none;color:inherit;width:100%;&:focus{outline:0;}", ";"], sx);
7
+ export default UnstyledTextInput;
@@ -98,6 +98,7 @@ export { default as TabNav } from './TabNav';
98
98
  export type { TabNavProps, TabNavLinkProps } from './TabNav';
99
99
  export { default as TextInput } from './TextInput';
100
100
  export type { TextInputProps } from './TextInput';
101
+ export { default as TextInputWithTokens } from './TextInputWithTokens';
101
102
  export { default as Text } from './Text';
102
103
  export type { TextProps } from './Text';
103
104
  export { default as Timeline } from './Timeline';
package/lib-esm/index.js CHANGED
@@ -61,6 +61,7 @@ export { default as StyledOcticon } from './StyledOcticon';
61
61
  export { default as SubNav } from './SubNav';
62
62
  export { default as TabNav } from './TabNav';
63
63
  export { default as TextInput } from './TextInput';
64
+ export { default as TextInputWithTokens } from './TextInputWithTokens';
64
65
  export { default as Text } from './Text';
65
66
  export { default as Timeline } from './Timeline';
66
67
  export { default as Token, IssueLabelToken, ProfileToken } from './Token';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primer/components",
3
- "version": "0.0.0-202197123143",
3
+ "version": "0.0.0-20219715822",
4
4
  "description": "Primer react components",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",