1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, '__esModule', { value: true });
|
4 |
|
5 | function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
6 |
|
7 | var slicedToArray = require('./slicedToArray-0711941d.js');
|
8 | require('./unsupportedIterableToArray-68db1d3b.js');
|
9 | var React = require('react');
|
10 | var React__default = _interopDefault(React);
|
11 | require('./_commonjsHelpers-72d386ba.js');
|
12 | var index = require('./index-b0606964.js');
|
13 | require('./defineProperty-0921a47c.js');
|
14 | require('./toConsumableArray-d8a4a2c3.js');
|
15 | var _styled = require('styled-components');
|
16 | var _styled__default = _interopDefault(_styled);
|
17 | require('./getPrototypeOf-2a661a20.js');
|
18 | require('./color.js');
|
19 | require('./components.js');
|
20 | require('./contains-component.js');
|
21 | var css = require('./css.js');
|
22 | require('./dayjs.min-e07657bf.js');
|
23 | require('./date.js');
|
24 | var miscellaneous = require('./miscellaneous.js');
|
25 | require('./environment.js');
|
26 | require('./font.js');
|
27 | require('./math-f4029164.js');
|
28 | require('./characters.js');
|
29 | require('./format.js');
|
30 | var keycodes = require('./keycodes.js');
|
31 | require('./url.js');
|
32 | require('./web3.js');
|
33 | require('./constants.js');
|
34 | require('./breakpoints.js');
|
35 | var springs = require('./springs.js');
|
36 | require('./text-styles.js');
|
37 | require('./theme-dark.js');
|
38 | require('./theme-light.js');
|
39 | var Theme = require('./Theme.js');
|
40 | var _extends$1 = require('./extends-40571110.js');
|
41 | require('./objectWithoutProperties-35db8ab0.js');
|
42 | require('./index-ecc57c9f.js');
|
43 | require('./isObject-ec755c87.js');
|
44 | require('./Viewport-15101437.js');
|
45 | require('./Layout.js');
|
46 | require('./FocusVisible.js');
|
47 | var ButtonBase = require('./ButtonBase.js');
|
48 | require('./IconPropTypes-56de5759.js');
|
49 | require('./IconAddUser.js');
|
50 | require('./IconAlert.js');
|
51 | require('./IconAlignCenter.js');
|
52 | require('./IconAlignJustify.js');
|
53 | require('./IconAlignLeft.js');
|
54 | require('./IconAlignRight.js');
|
55 | require('./IconAragon.js');
|
56 | require('./IconArrowDown.js');
|
57 | require('./IconArrowLeft.js');
|
58 | require('./IconArrowRight.js');
|
59 | require('./IconArrowUp.js');
|
60 | require('./IconAtSign.js');
|
61 | require('./IconBlock.js');
|
62 | require('./IconBookmark.js');
|
63 | require('./IconCalendar.js');
|
64 | require('./IconCanvas.js');
|
65 | require('./IconCaution.js');
|
66 | require('./IconCenter.js');
|
67 | require('./IconChart.js');
|
68 | require('./IconChat.js');
|
69 | require('./IconCheck.js');
|
70 | require('./IconChip.js');
|
71 | require('./IconCircleCheck.js');
|
72 | require('./IconCircleMinus.js');
|
73 | require('./IconCirclePlus.js');
|
74 | require('./IconClock.js');
|
75 | require('./IconCloudDownload.js');
|
76 | require('./IconCloudUpload.js');
|
77 | require('./IconCoin.js');
|
78 | require('./IconConfiguration.js');
|
79 | require('./IconConnect.js');
|
80 | require('./IconConnection.js');
|
81 | require('./IconConsole.js');
|
82 | require('./IconCopy.js');
|
83 | require('./IconCross.js');
|
84 | require('./IconDashedSquare.js');
|
85 | require('./IconDown.js');
|
86 | require('./IconDownload.js');
|
87 | require('./IconEdit.js');
|
88 | require('./IconEllipsis.js');
|
89 | require('./IconEnter.js');
|
90 | require('./IconEthereum.js');
|
91 | require('./IconExternal.js');
|
92 | require('./IconFile.js');
|
93 | require('./IconFilter.js');
|
94 | require('./IconFlag.js');
|
95 | require('./IconFolder.js');
|
96 | require('./IconGraph2.js');
|
97 | require('./IconGraph.js');
|
98 | require('./IconGrid.js');
|
99 | require('./IconGroup.js');
|
100 | require('./IconHash.js');
|
101 | require('./IconHeart.js');
|
102 | require('./IconHide.js');
|
103 | require('./IconHome.js');
|
104 | require('./IconImage.js');
|
105 | require('./IconInfo.js');
|
106 | require('./IconLabel.js');
|
107 | require('./IconLayers.js');
|
108 | require('./IconLeft.js');
|
109 | require('./IconLink.js');
|
110 | require('./IconLocation.js');
|
111 | require('./IconLock.js');
|
112 | require('./IconMail.js');
|
113 | require('./IconMaximize.js');
|
114 | require('./IconMenu.js');
|
115 | require('./IconMinimize.js');
|
116 | require('./IconMinus.js');
|
117 | require('./IconMove.js');
|
118 | require('./IconNoPicture.js');
|
119 | require('./IconPicture.js');
|
120 | require('./IconPlus.js');
|
121 | require('./IconPower.js');
|
122 | require('./IconPrint.js');
|
123 | require('./IconProhibited.js');
|
124 | require('./IconQuestion.js');
|
125 | require('./IconRefresh.js');
|
126 | require('./IconRemoveUser.js');
|
127 | require('./IconRight.js');
|
128 | require('./IconRotateLeft.js');
|
129 | require('./IconRotateRight.js');
|
130 | require('./IconSearch.js');
|
131 | require('./IconSettings.js');
|
132 | require('./IconShare.js');
|
133 | require('./IconSquareMinus.js');
|
134 | require('./IconSquarePlus.js');
|
135 | require('./IconSquare.js');
|
136 | require('./IconStarFilled.js');
|
137 | require('./IconStar.js');
|
138 | require('./IconSwap.js');
|
139 | require('./IconTarget.js');
|
140 | require('./IconToken.js');
|
141 | require('./IconTrash.js');
|
142 | require('./IconUnlock.js');
|
143 | require('./IconUp.js');
|
144 | require('./IconUpload.js');
|
145 | require('./IconUser.js');
|
146 | require('./IconView.js');
|
147 | require('./IconVote.js');
|
148 | require('./IconWallet.js');
|
149 | require('./IconWarning.js');
|
150 | require('./IconWorld.js');
|
151 | require('./IconWrite.js');
|
152 | require('./IconZoomIn.js');
|
153 | require('./IconZoomOut.js');
|
154 | require('./objectWithoutPropertiesLoose-1af20ad0.js');
|
155 | require('react-dom');
|
156 | var web = require('./web-d0294535.js');
|
157 | require('./Button.js');
|
158 | require('./ButtonIcon.js');
|
159 | require('./TextInput.js');
|
160 | var useArrowKeysFocus = require('./useArrowKeysFocus.js');
|
161 | var useClickOutside = require('./useClickOutside.js');
|
162 | require('./useFocusEnter.js');
|
163 | var useFocusLeave = require('./useFocusLeave.js');
|
164 | require('./useImageExists.js');
|
165 | var useKeyDown = require('./useKeyDown.js');
|
166 | require('./useOnBlur.js');
|
167 | var SearchInput = require('./SearchInput.js');
|
168 |
|
169 | var _StyledDiv = _styled__default("div").withConfig({
|
170 | displayName: "AutoComplete___StyledDiv",
|
171 | componentId: "bpnxyo-0"
|
172 | })(["position:relative"]);
|
173 |
|
174 | function AutoComplete(_ref) {
|
175 | var forwardedRef = _ref.forwardedRef,
|
176 | _ref$itemButtonStyles = _ref.itemButtonStyles,
|
177 | itemButtonStyles = _ref$itemButtonStyles === void 0 ? '' : _ref$itemButtonStyles,
|
178 | _ref$items = _ref.items,
|
179 | items = _ref$items === void 0 ? [] : _ref$items,
|
180 | _ref$onSelect = _ref.onSelect,
|
181 | onSelect = _ref$onSelect === void 0 ? miscellaneous.noop : _ref$onSelect,
|
182 | _ref$onChange = _ref.onChange,
|
183 | onChange = _ref$onChange === void 0 ? miscellaneous.noop : _ref$onChange,
|
184 | placeholder = _ref.placeholder,
|
185 | _ref$renderItem = _ref.renderItem,
|
186 | renderItem = _ref$renderItem === void 0 ? miscellaneous.identity : _ref$renderItem,
|
187 | required = _ref.required,
|
188 | value = _ref.value,
|
189 | wide = _ref.wide;
|
190 | var ref = forwardedRef;
|
191 | var uniqueItems = new Set(items);
|
192 |
|
193 | var _useState = React.useState(true),
|
194 | _useState2 = slicedToArray._slicedToArray(_useState, 2),
|
195 | opened = _useState2[0],
|
196 | setOpened = _useState2[1];
|
197 |
|
198 | var wrapRef = React.useRef();
|
199 | var refs = React.useRef([]);
|
200 | var handleClose = React.useCallback(function () {
|
201 | return setOpened(false);
|
202 | }, []);
|
203 | var handleFocus = React.useCallback(function () {
|
204 | return setOpened(true);
|
205 | }, []);
|
206 | var handleSelect = React.useCallback(function (item) {
|
207 | onSelect(item);
|
208 | setOpened(false);
|
209 | }, [onSelect]);
|
210 | var handleInputChange = React.useCallback(function () {
|
211 | setOpened(true);
|
212 | onChange.apply(void 0, arguments);
|
213 | }, [onChange]);
|
214 |
|
215 | var _useFocusLeave = useFocusLeave.useFocusLeave(handleClose, wrapRef),
|
216 | handleFocusLeave = _useFocusLeave.handleFocusLeave;
|
217 |
|
218 | var _useArrowKeysFocus = useArrowKeysFocus.useArrowKeysFocus(refs),
|
219 | highlightedIndex = _useArrowKeysFocus.highlightedIndex,
|
220 | setHighlightedIndex = _useArrowKeysFocus.setHighlightedIndex;
|
221 |
|
222 | useClickOutside.useClickOutside(handleClose, wrapRef);
|
223 | useKeyDown.useKeyDown(keycodes.KEY_ESC, handleClose);
|
224 | React.useEffect(function () {
|
225 | setHighlightedIndex(-1);
|
226 | }, [opened, items, value, setHighlightedIndex]);
|
227 | return React__default.createElement(_StyledDiv, {
|
228 | ref: wrapRef,
|
229 | onBlur: handleFocusLeave
|
230 | }, React__default.createElement(SearchInput.default, {
|
231 | ref: ref,
|
232 | wide: wide,
|
233 | placeholder: placeholder,
|
234 | required: required,
|
235 | onChange: handleInputChange,
|
236 | onFocus: handleFocus,
|
237 | value: value
|
238 | }), React__default.createElement(web.Transition, {
|
239 | config: springs.springs.swift,
|
240 | items: opened && items.length > 0,
|
241 | from: {
|
242 | scale: 0.98,
|
243 | opacity: 0
|
244 | },
|
245 | enter: {
|
246 | scale: 1,
|
247 | opacity: 1
|
248 | },
|
249 | leave: {
|
250 | scale: 1,
|
251 | opacity: 0
|
252 | },
|
253 | native: true
|
254 | }, function (show) {
|
255 | return show &&
|
256 |
|
257 | function (_ref2) {
|
258 | var scale = _ref2.scale,
|
259 | opacity = _ref2.opacity;
|
260 | return React__default.createElement(Items, {
|
261 | style: {
|
262 | opacity: opacity,
|
263 | transform: scale.interpolate(function (t) {
|
264 | return "scale3d(".concat(t, ",").concat(t, ",1)");
|
265 | })
|
266 | }
|
267 | }, Array.from(uniqueItems).map(function (item, index) {
|
268 | return React__default.createElement(Item, {
|
269 | key: item.key || item,
|
270 | ref: function ref(node) {
|
271 | return refs.current[index] = node;
|
272 | },
|
273 | index: index,
|
274 | item: item,
|
275 | itemButtonStyles: itemButtonStyles,
|
276 | onHighlight: setHighlightedIndex,
|
277 | onSelect: handleSelect,
|
278 | selected: index === highlightedIndex
|
279 | }, renderItem(item, value));
|
280 | }));
|
281 | };
|
282 | }
|
283 |
|
284 | ));
|
285 | }
|
286 |
|
287 | AutoComplete.propTypes = {
|
288 | forwardedRef: index.PropTypes.object,
|
289 | itemButtonStyles: index.PropTypes.string,
|
290 | items: index.PropTypes.array.isRequired,
|
291 | onSelect: index.PropTypes.func.isRequired,
|
292 | onChange: index.PropTypes.func.isRequired,
|
293 | placeholder: index.PropTypes.string,
|
294 | renderItem: index.PropTypes.func,
|
295 | required: index.PropTypes.bool,
|
296 | value: index.PropTypes.string,
|
297 | wide: index.PropTypes.bool
|
298 | };
|
299 |
|
300 |
|
301 | var _StyledLi = _styled__default("li").withConfig({
|
302 | displayName: "AutoComplete___StyledLi",
|
303 | componentId: "bpnxyo-1"
|
304 | })(["overflow:hidden;cursor:pointer;", ";"], function (p) {
|
305 | return p._css;
|
306 | });
|
307 |
|
308 | var _StyledButtonBase = _styled__default(ButtonBase.default).withConfig({
|
309 | displayName: "AutoComplete___StyledButtonBase",
|
310 | componentId: "bpnxyo-2"
|
311 | })(["text-align:left;padding:4px 8px;width:100%;border-radius:0;border-left:3px solid transparent;cursor:pointer;", ";", ";"], function (p) {
|
312 | return p._css2;
|
313 | }, function (p) {
|
314 | return p._css3;
|
315 | });
|
316 |
|
317 | var Item = React__default.forwardRef(function Item(_ref3, ref) {
|
318 | var children = _ref3.children,
|
319 | index = _ref3.index,
|
320 | item = _ref3.item,
|
321 | itemButtonStyles = _ref3.itemButtonStyles,
|
322 | onHighlight = _ref3.onHighlight,
|
323 | onSelect = _ref3.onSelect,
|
324 | selected = _ref3.selected;
|
325 | var theme = Theme.useTheme();
|
326 | var handleClick = React.useCallback(function (event) {
|
327 | event.preventDefault();
|
328 | onSelect(item);
|
329 | }, [item, onSelect]);
|
330 | var handleFocusOrMouseOver = React.useCallback(function () {
|
331 | onHighlight(index);
|
332 | }, [index, onHighlight]);
|
333 | return React__default.createElement(_StyledLi, {
|
334 | role: "option",
|
335 | _css: css.unselectable()
|
336 | }, React__default.createElement(_StyledButtonBase, {
|
337 | ref: ref,
|
338 | onClick: handleClick,
|
339 | onFocus: handleFocusOrMouseOver,
|
340 | onMouseOver: handleFocusOrMouseOver,
|
341 | _css2: selected ? "\n outline: 2px solid ".concat(theme.accent, ";\n background: ").concat(theme.surfaceHighlight, ";\n border-left: 3px solid ").concat(theme.accent, ";\n ") : '',
|
342 | _css3: itemButtonStyles
|
343 | }, children));
|
344 | });
|
345 |
|
346 |
|
347 |
|
348 |
|
349 | var _StyledAnimatedUl = _styled__default(web.extendedAnimated.ul).withConfig({
|
350 | displayName: "AutoComplete___StyledAnimatedUl",
|
351 | componentId: "bpnxyo-3"
|
352 | })(["position:absolute;z-index:2;top:100%;width:100%;padding:8px 0;color:", ";background:", ";border:1px solid ", ";box-shadow:0 4px 4px 0 rgba(0,0,0,0.06);border-radius:3px;padding:0;margin:0;list-style:none;& > li:first-child{border-top-left-radius:3px;border-top-right-radius:3px;}& > li:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px;}"], function (p) {
|
353 | return p._css4;
|
354 | }, function (p) {
|
355 | return p._css5;
|
356 | }, function (p) {
|
357 | return p._css6;
|
358 | });
|
359 |
|
360 | var Items = function Items(props) {
|
361 | var theme = Theme.useTheme();
|
362 | return React__default.createElement(_StyledAnimatedUl, _extends$1._extends({
|
363 | role: "listbox"
|
364 | }, props, {
|
365 | _css4: theme.surfaceContent,
|
366 | _css5: theme.surface,
|
367 | _css6: theme.border
|
368 | }));
|
369 | };
|
370 |
|
371 |
|
372 |
|
373 | var AutoCompleteMemo = React__default.memo(AutoComplete);
|
374 | var AutoComplete$1 = React__default.forwardRef(function (props, ref) {
|
375 | return React__default.createElement(AutoCompleteMemo, _extends$1._extends({}, props, {
|
376 | forwardedRef: ref
|
377 | }));
|
378 | });
|
379 |
|
380 | exports.default = AutoComplete$1;
|
381 |
|