react-animated-select 0.5.2 → 0.6.0

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.
package/src/select.css DELETED
@@ -1,356 +0,0 @@
1
- @media (prefers-reduced-motion: reduce) {
2
- .rac-select {
3
- --rac-duration: 1ms;
4
- }
5
- }
6
-
7
- :root {
8
- --rac-base-red: #e7000b;
9
- --rac-base-green: #4caf50;
10
- --rac-base-yellow: #ffc107;
11
-
12
- --rac-select-background: color-mix(in srgb, Canvas 98%, CanvasText 2%);
13
- --rac-select-color: CanvasText;
14
- --rac-select-border: 2px solid color-mix(in srgb, Canvas 98%, CanvasText 2%);
15
- --rac-select-border-error: 2px solid color-mix(in srgb, var(--rac-base-red), CanvasText 15%);
16
- --rac-select-height: 2em;
17
- --rac-select-padding: 0em 0.5em;
18
- --rac-disabled-opacity: 0.75;
19
-
20
- --rac-title-anim-shift: 4px;
21
- --rac-title-anim-entry-ease: cubic-bezier(0.34, 1.56, 0.64, 1);
22
- --rac-title-font-size: 1em;
23
-
24
- --rac-dots-height: 3px;
25
- --rac-dots-width: 3px;
26
- --rac-dots-color: currentColor;
27
- --rac-dots-gap: 3px;
28
- --rac-dots-padding-left: 0.25em;
29
- --rac-dots-align: end;
30
- --rac-dots-animation-duration: 1.4s;
31
- --rac-dots-animation-delay-1: 0s;
32
- --rac-dots-animation-delay-2: 0.2s;
33
- --rac-dots-animation-delay-3: 0.4s;
34
-
35
- --rac-arrow-height: 1em;
36
- --rac-arrow-width: 1em;
37
- --rac-arrow-padding: 1px 0 2px;
38
-
39
- --rac-cancel-height: 0.9em;
40
- --rac-cancel-width: 0.9em;
41
-
42
- --rac-scroll-color: color-mix(in srgb, CanvasText 10%, Canvas);
43
- --rac-scroll-track: color-mix(in srgb, CanvasText 5%, Canvas);
44
- --rac-scroll-padding-top: 0.5em;
45
- --rac-scroll-padding-bottom: 0.5em;
46
-
47
- --rac-option-hover: color-mix(in srgb, CanvasText 6%, Canvas);
48
- --rac-option-highlight: color-mix(in srgb, CanvasText 10%, Canvas);
49
- --rac-option-selected: color-mix(in srgb, CanvasText 14%, Canvas);
50
-
51
- --rac-list-background: color-mix(in srgb, Canvas 98%, CanvasText 2%);
52
- --rac-list-color: CanvasText;
53
- --rac-list-max-height: 250px;
54
-
55
- --rac-option-padding: 0.5em;
56
- --rac-option-min-height: 1em;
57
- --rac-disabled-option-color: color-mix(in srgb, GrayText, CanvasText 20%);
58
- --rac-invalid-option-color: color-mix(in srgb, var(--rac-base-red), CanvasText 10%);
59
- --rac-true-option-color: color-mix(in srgb, var(--rac-base-green), CanvasText 10%);
60
- --rac-false-option-color: color-mix(in srgb, var(--rac-base-red), CanvasText 10%);
61
- --rac-warning-option-color: color-mix(in srgb, var(--rac-base-yellow), CanvasText 10%);
62
-
63
- --rac-group-header-font-size: 1.25em;
64
- --rac-group-header-font-weight: bold;
65
- --rac-group-header-min-height: 1em;
66
- --rac-group-header-padding: 0.5em;
67
- --rac-group-arrow-height: 1em;
68
- --rac-group-arrow-width: 1em;
69
- --rac-group-arrow-padding: 1px 0 2px;
70
- --rac-disabled-group-color: color-mix(in srgb, GrayText, CanvasText 20%);
71
-
72
- --rac-multiple-selected-border: 0.1em solid gray;
73
- --rac-multiple-selected-radius: 5px;
74
- --rac-checkbox-border: 1px solid gray;
75
- --rac-multiple-selected-padding: 0em 0.25em;
76
- --rac-multiple-selected-margin: 0em 0.25em;
77
- --rac-multiple-selected-gap: 0.5em 0;
78
- --rac-checkbox-margin-right: 0.20em;
79
- --rac-multiple-selected-min-height: 1.5em;
80
- --rac-checkbox-size: var(--rac-option-min-height);
81
-
82
- --rac-options-z-index: 1;
83
- }
84
-
85
- .rac-select {
86
- background: var(--rac-select-background);
87
- padding: var(--rac-select-padding);
88
- border: var(--rac-select-border);
89
- color: var(--rac-select-color);
90
-
91
- min-height: var(--rac-select-height);
92
- interpolate-size: allow-keywords;
93
- transition:
94
- border-color var(--rac-duration-base) ease,
95
- height var(--rac-duration-base) ease;
96
- justify-content: space-between;
97
- box-sizing: border-box;
98
- cursor: pointer;
99
- display: flex;
100
- }
101
-
102
- .rac-loading-style,
103
- .rac-disabled-style {
104
- opacity: var(--rac-disabled-opacity);
105
- transition:
106
- border-color var(--rac-duration-base),
107
- filter var(--rac-duration-base),
108
- opacity var(--rac-duration-base);
109
- cursor: wait;
110
- }
111
-
112
- .rac-disabled-style {
113
- cursor: not-allowed;
114
- }
115
-
116
- .rac-error-style {
117
- border: var(--rac-select-border-error);
118
- cursor: help;
119
- }
120
-
121
- .rac-select-title {
122
- display: flex;
123
- align-items: center;
124
- flex-wrap: wrap;
125
- gap: var(--rac-multiple-selected-gap);
126
- }
127
-
128
- .rac-title-text {
129
- display: block;
130
- animation: rac-fade-in var(--rac-duration-base) var(--rac-title-anim-entry-ease);
131
- height: 100%;
132
- align-content: center;
133
- font-size: var(--rac-title-font-size);
134
- }
135
-
136
- @keyframes rac-fade-in {
137
- from {
138
- opacity: 0;
139
- transform: translateY(var(--rac-title-anim-shift));
140
- }
141
- to {
142
- opacity: 1;
143
- transform: translateY(0);
144
- }
145
- }
146
-
147
- .rac-loading-dots {
148
- display: inline-flex;
149
- gap: var(--rac-dots-gap);
150
- padding-left: var(--rac-dots-padding-left);
151
- align-items: var(--rac-dots-align);
152
- }
153
-
154
- .rac-loading-dots i {
155
- width: var(--rac-dots-height);
156
- height: var(--rac-dots-width);
157
- background: var(--rac-dots-color);
158
- border-radius: 50%;
159
- animation: blink var(--rac-dots-animation-duration) infinite both;
160
- }
161
-
162
- .rac-loading-dots i:nth-child(1) {animation-delay: var(--rac-dots-animation-delay-1);}
163
- .rac-loading-dots i:nth-child(2) {animation-delay: var(--rac-dots-animation-delay-2);}
164
- .rac-loading-dots i:nth-child(3) {animation-delay: var(--rac-dots-animation-delay-3);}
165
-
166
- @keyframes blink {
167
- 0% {opacity: .2;}
168
- 20% {opacity: 1;}
169
- 100% {opacity: .2;}
170
- }
171
-
172
- .rac-select-buttons {
173
- display: flex;
174
- align-items: center;
175
- }
176
-
177
- .rac-select-cancel {
178
- height: var(--rac-cancel-height);
179
- width: var(--rac-cancel-width);
180
-
181
- transition:
182
- opacity var(--rac-duration-fast),
183
- border-color var(--rac-duration-fast);
184
- }
185
-
186
- .rac-select-arrow-wrapper {
187
- display: block;
188
- height: var(--rac-arrow-height);
189
- width: var(--rac-arrow-width);
190
- padding: var(--rac-arrow-padding);
191
-
192
- will-change: transform;
193
- transition:
194
- transform var(--rac-duration-base) cubic-bezier(.4,0,.2,1),
195
- padding var(--rac-duration-fast);
196
- transform-origin: 50% 50%;
197
- transform: translateZ(0);
198
- }
199
-
200
- .rac-select-arrow-wrapper.--open {
201
- transform: rotate(180deg);
202
- }
203
-
204
- .rac-select-arrow,
205
- .rac-select-cancel {
206
- object-fit: contain;
207
- }
208
-
209
- .rac-select-list {
210
- background-color: var(--rac-list-background);
211
- color: var(--rac-list-color);
212
- max-height: var(--rac-list-max-height);
213
- overflow-y: auto;
214
- scrollbar-color: var(--rac-scroll-color) var(--rac-scroll-track);
215
- scrollbar-width: thin;
216
- scrollbar-gutter: stable;
217
- scroll-behavior: smooth;
218
- scroll-padding-top: var(--rac-scroll-padding-top);
219
- scroll-padding-bottom: var(--rac-scroll-padding-bottom);
220
- z-index: 1;
221
- transition:
222
- border-color var(--rac-duration-fast),
223
- background-color var(--rac-duration-fast),
224
- opacity var(--rac-duration-base);
225
- }
226
-
227
- .rac-select-option {
228
- transition: background-color var(--rac-duration-fast) cubic-bezier(0.4,0,0.2,1);
229
- min-height: var(--rac-option-min-height);
230
- padding: var(--rac-option-padding);
231
- justify-content: space-between;
232
- align-items: center;
233
- display: flex;
234
- cursor: pointer;
235
- }
236
-
237
- .rac-select-option:not(.rac-disabled-option):not(.rac-group-option):hover {
238
- background-color: var(--rac-option-hover);
239
- }
240
-
241
- .rac-select-option.rac-highlighted {
242
- background-color: var(--rac-option-highlight);
243
- }
244
-
245
- .rac-select-option.rac-selected {
246
- background-color: var(--rac-option-selected);
247
- }
248
-
249
- .rac-select-option.rac-selected.rac-highlighted {
250
- background-color: var(--rac-option-selected);
251
- }
252
-
253
- .rac-disabled-option {
254
- cursor: not-allowed;
255
- color: var(--rac-disabled-option-color);
256
- }
257
-
258
- .rac-invalid-option {
259
- color: var(--rac-invalid-option-color);
260
- }
261
-
262
- .rac-true-option {
263
- color: var(--rac-true-option-color);
264
- }
265
-
266
- .rac-false-option {
267
- color: var(--rac-false-option-color);
268
- }
269
-
270
- .rac-loading-option {
271
- cursor: wait;
272
- }
273
-
274
- .rac-group-header {
275
- cursor: pointer;
276
- min-height: var(--rac-group-header-min-height);
277
- padding: var(--rac-group-header-padding);
278
- transition: background-color var(--rac-duration-fast) cubic-bezier(0.4,0,0.2,1);
279
- display: flex;
280
- justify-content: space-between;
281
- align-items: center;
282
- font-weight: var(--rac-group-header-font-weight);
283
- font-size: var(--rac-group-header-font-size);
284
- }
285
-
286
- .rac-group-arrow-wrapper {
287
- display: block;
288
- height: var(--rac-group-arrow-height);
289
- width: var(--rac-group-arrow-width);
290
- padding: var(--rac-group-arrow-padding);
291
-
292
- will-change: transform;
293
- transition:
294
- transform var(--rac-duration-base) cubic-bezier(.4,0,.2,1),
295
- padding var(--rac-duration-fast);
296
- transform-origin: 50% 50%;
297
- transform: translateZ(0);
298
- }
299
-
300
- .rac-group-arrow-wrapper.--open {
301
- transform: rotate(180deg);
302
- }
303
-
304
- .rac-disabled-group {
305
- cursor: not-allowed;
306
- color: var(--rac-disabled-group-color);
307
- }
308
-
309
- .rac-select-selected {
310
- display: flex;
311
- align-items: center;
312
- }
313
-
314
- .rac-multiple-selected-option {
315
- border: var(--rac-multiple-selected-border);
316
- border-radius: var(--rac-multiple-selected-radius);
317
- min-height: var(--rac-multiple-selected-min-height);
318
- transition: background-color var(--rac-duration-fast) cubic-bezier(0.4,0,0.2,1);
319
-
320
- display: inline-flex;
321
- align-items: center;
322
- vertical-align: middle;
323
- line-height: normal;
324
- padding: var(--rac-multiple-selected-padding);
325
- margin: var(--rac-multiple-selected-margin);
326
- white-space: nowrap;
327
- }
328
-
329
- .rac-multiple-selected-option:hover {
330
- background-color: color-mix(in srgb, CanvasText 6%, Canvas);
331
- }
332
-
333
- .rac-checkbox {
334
- min-height: var(--rac-option-min-height);
335
- min-width: var(--rac-option-min-height);
336
- border: var(--rac-checkbox-border);
337
- justify-content: center;
338
- align-items: center;
339
- display: flex;
340
- height: 100%;
341
- margin-right: var(--rac-checkbox-margin-right);
342
- }
343
-
344
- .rac-checkmark {
345
- color: var(--rac-base-green);
346
- opacity: 0;
347
- max-width: 0;
348
- max-height: 0;
349
- transition: opacity var(--rac-duration-base), max-height var(--rac-duration-base), max-width var(--rac-duration-base);
350
- }
351
-
352
- .rac-checkmark.--checked {
353
- opacity: 1;
354
- max-height: var(--rac-option-min-height);
355
- max-width: var(--rac-option-min-height);
356
- }
package/src/select.jsx DELETED
@@ -1,339 +0,0 @@
1
- import './select.css'
2
- import {XMarkIcon, ArrowUpIcon, CheckmarkIcon} from './icons'
3
- import {forwardRef, useImperativeHandle, useRef, useMemo, useState, useEffect, useCallback, useId, isValidElement, cloneElement} from 'react'
4
- import {makeId} from './makeId'
5
-
6
- import SelectJSX from './SelectJSX'
7
- import useSelect from './useSelect'
8
- import useSelectLogic from './useSelectLogic'
9
- import SlideDown from './slideDown'
10
- import SlideLeft from './slideLeft'
11
-
12
- // universal icon display
13
- const renderIcon = (Icon, defaultProps) => {
14
- if (!Icon) return null
15
- if (typeof Icon === 'string') return <img src={Icon} {...defaultProps} alt=''/>
16
- if (isValidElement(Icon)) return cloneElement(Icon, defaultProps)
17
- if (typeof Icon === 'function' || (typeof Icon === 'object' && Icon.$$typeof)) {
18
- const IconComponent = Icon
19
- return <IconComponent {...defaultProps}/>
20
- }
21
- return null
22
- }
23
-
24
- // adding classes to style options according to their state
25
- const getOptionClassName = (element, index, highlightedIndex, selectedId, loadingTitle, loadMoreText, invalidOption, selectedIDs) => {
26
- const multipleSelected = selectedIDs?.some(o => o.id === element.id)
27
-
28
- if (element.groupHeader) {
29
- return 'rac-select-option rac-group-option'
30
- }
31
-
32
- return [
33
- 'rac-select-option',
34
- element.className,
35
- (multipleSelected || selectedId === element.id) && 'rac-selected',
36
- index === highlightedIndex && 'rac-highlighted',
37
- (element.disabled || element.loading) && 'rac-disabled-option',
38
- (element.invalid || element.name === invalidOption) && 'rac-invalid-option',
39
- (element.loadMore && loadingTitle === loadMoreText) && 'rac-loading-option',
40
- typeof element.raw === 'boolean' && (element.raw ? 'rac-true-option' : 'rac-false-option')
41
- ].filter(Boolean).join(' ')
42
- }
43
-
44
- const Select = forwardRef(({
45
- unmount,
46
- children,
47
- visibility: externalVisibility,
48
- ownBehavior = false,
49
- alwaysOpen = false,
50
- duration = 300,
51
- easing = 'ease-out',
52
- offset = 0,
53
- animateOpacity = true,
54
- style = {},
55
- className = '',
56
- ArrowIcon = ArrowUpIcon,
57
- ClearIcon = XMarkIcon,
58
- DelIcon = XMarkIcon,
59
- CheckIcon = CheckmarkIcon,
60
- hasMore = false,
61
- loadMore = () => {console.warn('loadMore not implemented')},
62
- loadButton = false,
63
- loadButtonText = 'Load more',
64
- loadMoreText = 'Loading',
65
- selectedText = undefined,
66
- loadOffset = 100,
67
- loadAhead = 3,
68
- childrenFirst = false,
69
- groupsClosed = false,
70
- optionsClassName = '',
71
- ...props
72
- }, ref) => {
73
-
74
- const reactId = useId()
75
- const selectId = useMemo(() => reactId.replace(/:/g, ''), [reactId])
76
- const [jsxOptions, setJsxOptions] = useState([])
77
- const [internalVisibility, setInternalVisibility] = useState(false)
78
- const [loadingTitle, setLoadingTitle] = useState(loadButton ? loadButtonText : loadMoreText)
79
- const [animationFinished, setAnimationFinished] = useState(false)
80
- const selectRef = useRef(null)
81
-
82
- const registerOption = useCallback((opt) => {
83
- setJsxOptions(prev => {
84
- const index = prev.findIndex(o => o.id === opt.id)
85
- if (index !== -1) {
86
- const existing = prev[index]
87
- if (
88
- existing.label === opt.label &&
89
- existing.value === opt.value &&
90
- existing.disabled === opt.disabled &&
91
- existing.group === opt.group
92
- ) {
93
- return prev
94
- }
95
- const next = [...prev]
96
- next[index] = opt
97
- return next
98
- }
99
- return [...prev, opt]
100
- })
101
- }, [])
102
-
103
- const unregisterOption = useCallback((id) => {
104
- setJsxOptions(prev => {
105
- const filtered = prev.filter(o => o.id !== id)
106
- return filtered.length === prev.length ? prev : filtered
107
- })
108
- }, [])
109
-
110
- // select visibility control
111
- const visibility = alwaysOpen ? true : (ownBehavior ? !!externalVisibility : internalVisibility)
112
-
113
- const setVisibility = useCallback((newState) => {
114
- if (alwaysOpen || ownBehavior) return
115
- setInternalVisibility(newState)
116
- }, [alwaysOpen, ownBehavior])
117
-
118
- const logic = useSelectLogic({
119
- ...props, visibility, setVisibility, jsxOptions, hasMore,
120
- loadButton, loadingTitle, loadMore, loadMoreText, setLoadingTitle, childrenFirst, groupsClosed
121
- })
122
-
123
- const {multiple, normalizedOptions, selected, selectOption, clear, removeOption, hasOptions, active, selectedValue, disabled, loading, error, placeholder, invalidOption, emptyText, disabledText, loadingText, errorText, expandedGroups, selectedIDs, setSelectedIds} = logic
124
-
125
- const behavior = useSelect({setLoadingTitle, loadButton, loadButtonText, hasMore, loadMore, disabled, multiple, open: visibility, setOpen: setVisibility, options: normalizedOptions, selectOption, selected, loadOffset, loadAhead, expandedGroups})
126
-
127
- const {handleListScroll, handleBlur, handleFocus, handleToggle, handleKeyDown, highlightedIndex, setHighlightedIndex} = behavior
128
-
129
- useImperativeHandle(ref, () => selectRef.current)
130
-
131
- useEffect(() => {
132
- if (!visibility) setAnimationFinished(false)
133
- }, [visibility])
134
-
135
- useEffect(() => {
136
- if (error || disabled || loading || !hasOptions) setVisibility(false)
137
- }, [error, disabled, loading, hasOptions, setVisibility])
138
-
139
- useEffect(() => {
140
- if (visibility && animationFinished && highlightedIndex !== -1) {
141
- const option = normalizedOptions[highlightedIndex]
142
- if (option) {
143
- const domElement = document.getElementById(`opt-${selectId}-${makeId(option.id)}`)
144
- domElement?.scrollIntoView({block: 'nearest'})
145
- }
146
- }
147
- }, [highlightedIndex, visibility, animationFinished, normalizedOptions, selectId])
148
-
149
- const hasActualValue = useMemo(() => (
150
- selectedValue !== undefined &&
151
- selectedValue !== null &&
152
- !(Array.isArray(selectedValue) && selectedValue.length === 0) &&
153
- !(typeof selectedValue === 'object' && Object.keys(selectedValue).length === 0)
154
- ), [selectedValue])
155
-
156
- const title = useMemo(() => {
157
- if (error) return errorText
158
- if (loading) return loadingText
159
- if (disabled) return disabledText
160
- if (hasActualValue && selectedText) return selectedText
161
-
162
- if (selected) return selected.jsx ?? selected.name
163
-
164
- if (hasActualValue) {
165
- const recovered = normalizedOptions.find(o => o.raw === selectedValue)
166
- if (recovered) return recovered.name
167
- return (typeof selectedValue === 'object' && selectedValue !== null)
168
- ? (selectedValue.name ?? selectedValue.label ?? 'Selected Object')
169
- : String(selectedValue)
170
- }
171
- return hasOptions ? placeholder : emptyText
172
- }, [disabled, loading, error, hasOptions, selected, selectedValue, placeholder, errorText, loadingText, disabledText, emptyText, hasActualValue, normalizedOptions])
173
-
174
- const renderOptions = useMemo(() => {
175
- const nodes = []
176
- let currentGroupChildren = []
177
- let currentGroupName = null
178
-
179
- const groupCounts = normalizedOptions.reduce((acc, opt) => {
180
- if (opt.group) {
181
- acc[opt.group] = (acc[opt.group] || 0) + 1
182
- }
183
- return acc
184
- }, {})
185
-
186
- const flushGroup = (name) => {
187
- if (name === null || currentGroupChildren.length === 0) return
188
-
189
- nodes.push(
190
- <SlideDown
191
- key={`slide-${name}`}
192
- visibility={expandedGroups.has(name)}
193
- >
194
- {currentGroupChildren}
195
- </SlideDown>
196
- )
197
- currentGroupChildren = []
198
- }
199
-
200
- const createOptionNode = (element, index) => (
201
- <div
202
- key={element.id}
203
- id={`opt-${selectId}-${makeId(element.id)}`}
204
- role='option'
205
- aria-selected={selected?.id === element.id}
206
- aria-disabled={element.disabled || element.loading}
207
- className={getOptionClassName(element, index, highlightedIndex, selected?.id, loadingTitle, loadMoreText, invalidOption, selectedIDs)}
208
- onClick={(e) => !element.loading && selectOption(element, e)}
209
- onMouseEnter={() => (!element.disabled && !element.loading) && setHighlightedIndex(index)}
210
- >
211
- {element.jsx ?? element.name}
212
- {element.loading && <span className='rac-loading-dots'><i/><i/><i/></span>}
213
- {multiple && !element.disabled ?
214
- <div className='rac-checkbox'>
215
- {renderIcon(
216
- CheckmarkIcon, {
217
- className: `
218
- rac-checkmark
219
- ${selectedIDs?.some(o => o.id === element.id)
220
- ?
221
- '--checked'
222
- :
223
- ''
224
- }`})}
225
- </div> : null}
226
-
227
- </div>
228
- )
229
-
230
- normalizedOptions.forEach((element, index) => {
231
- const isHeader = element.groupHeader
232
- const belongsToGroup = !!element.group
233
-
234
- if (isHeader || (!belongsToGroup && currentGroupName !== null)) {
235
- flushGroup(currentGroupName)
236
- if (!isHeader) currentGroupName = null
237
- }
238
-
239
- if (isHeader) {
240
- currentGroupName = element.name
241
- const open = expandedGroups.has(element.name)
242
- const hasChildren = groupCounts[element.name] > 0
243
-
244
- nodes.push(
245
- <div
246
- key={element.id}
247
- className={[
248
- 'rac-group-header',
249
- element.disabled && 'rac-disabled-group'
250
- ].filter(Boolean).join(' ')}
251
- onClick={(e) => selectOption(element, e)}
252
- >
253
- <span className='rac-group-title-text'>{element.name}</span>
254
- <SlideLeft
255
- visibility={hasChildren && !element.disabled}
256
- duration={duration}
257
- style={{display: 'grid'}}
258
- >
259
- <span className={`rac-group-arrow-wrapper ${open ? '--open' : ''}`}>
260
- {renderIcon(ArrowIcon, {className: 'rac-select-arrow-wrapper'})}
261
- </span>
262
- </SlideLeft>
263
- </div>
264
- )
265
- } else if (belongsToGroup) {
266
- currentGroupChildren.push(createOptionNode(element, index))
267
- } else {
268
- nodes.push(createOptionNode(element, index))
269
- }
270
- })
271
-
272
- flushGroup(currentGroupName)
273
-
274
- return nodes
275
- }, [
276
- normalizedOptions, selectOption, selectId, selected, highlightedIndex,
277
- loadingTitle, loadMoreText, invalidOption, setHighlightedIndex,
278
- expandedGroups, ArrowIcon
279
- ])
280
-
281
- return (
282
- <SelectJSX
283
- selectedText={selectedText}
284
- selectRef={selectRef}
285
- selectId={selectId}
286
- selectedIDs={selectedIDs}
287
- setSelectedIds={setSelectedIds}
288
- multiple={multiple}
289
- removeOption={removeOption}
290
- optionsClassName={optionsClassName}
291
-
292
- renderIcon={renderIcon}
293
- normalizedOptions={normalizedOptions}
294
- renderOptions={renderOptions}
295
- selected={selected}
296
- title={title}
297
- visibility={visibility}
298
- active={active}
299
- hasOptions={hasOptions}
300
- hasActualValue={hasActualValue}
301
- highlightedIndex={highlightedIndex}
302
- animationFinished={animationFinished}
303
-
304
- disabled={disabled}
305
- loading={loading}
306
- error={error}
307
-
308
- setVisibility={setVisibility}
309
- setHighlightedIndex={setHighlightedIndex}
310
- setAnimationFinished={setAnimationFinished}
311
- handleBlur={handleBlur}
312
- handleFocus={handleFocus}
313
- handleToggle={handleToggle}
314
- handleKeyDown={handleKeyDown}
315
- handleListScroll={handleListScroll}
316
- selectOption={selectOption}
317
- clear={clear}
318
- registerOption={registerOption}
319
- unregisterOption={unregisterOption}
320
-
321
- children={children}
322
- placeholder={placeholder}
323
- className={className}
324
- style={style}
325
- duration={duration}
326
- easing={easing}
327
- offset={offset}
328
- animateOpacity={animateOpacity}
329
- unmount={unmount}
330
- ArrowIcon={ArrowIcon}
331
- ClearIcon={ClearIcon}
332
- DelIcon={DelIcon}
333
- hasMore={hasMore}
334
- loadButton={loadButton}
335
- />
336
- )
337
- })
338
-
339
- export default Select
@@ -1,3 +0,0 @@
1
- import {createContext} from 'react'
2
-
3
- export const SelectContext = createContext(null)