UNPKG

12.7 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
7var slicedToArray = require('./slicedToArray-ef426d0f.js');
8require('./unsupportedIterableToArray-8a00e599.js');
9var React = require('react');
10var React__default = _interopDefault(React);
11require('./_commonjsHelpers-72d386ba.js');
12var index = require('./index-b0606964.js');
13require('./defineProperty-0921a47c.js');
14require('./toConsumableArray-7f36359f.js');
15var _styled = require('styled-components');
16var _styled__default = _interopDefault(_styled);
17require('./getPrototypeOf-e2d1e599.js');
18require('./color.js');
19require('./components.js');
20require('./contains-component.js');
21var css = require('./css.js');
22require('./dayjs.min-aa59a48e.js');
23require('./date.js');
24var miscellaneous = require('./miscellaneous.js');
25require('./environment.js');
26require('./font.js');
27require('./math-ecfd5d91.js');
28require('./characters.js');
29require('./format.js');
30var keycodes = require('./keycodes.js');
31require('./url.js');
32require('./web3.js');
33require('./constants.js');
34require('./breakpoints.js');
35var springs = require('./springs.js');
36require('./text-styles.js');
37require('./theme-dark.js');
38require('./theme-light.js');
39var Theme = require('./Theme.js');
40var _extends$1 = require('./extends-40571110.js');
41require('./objectWithoutProperties-35db8ab0.js');
42require('./index-ecc57c9f.js');
43require('./isObject-52908731.js');
44require('./Viewport-fe2db97a.js');
45require('./Layout.js');
46require('./FocusVisible.js');
47var ButtonBase = require('./ButtonBase.js');
48require('./IconPropTypes-086fd371.js');
49require('./IconAddUser.js');
50require('./IconAlert.js');
51require('./IconAlignCenter.js');
52require('./IconAlignJustify.js');
53require('./IconAlignLeft.js');
54require('./IconAlignRight.js');
55require('./IconAragon.js');
56require('./IconArrowDown.js');
57require('./IconArrowLeft.js');
58require('./IconArrowRight.js');
59require('./IconArrowUp.js');
60require('./IconAtSign.js');
61require('./IconBlock.js');
62require('./IconBookmark.js');
63require('./IconCalendar.js');
64require('./IconCanvas.js');
65require('./IconCaution.js');
66require('./IconCenter.js');
67require('./IconChart.js');
68require('./IconChat.js');
69require('./IconCheck.js');
70require('./IconChip.js');
71require('./IconCircleCheck.js');
72require('./IconCircleMinus.js');
73require('./IconCirclePlus.js');
74require('./IconClock.js');
75require('./IconCloudDownload.js');
76require('./IconCloudUpload.js');
77require('./IconCoin.js');
78require('./IconConfiguration.js');
79require('./IconConnect.js');
80require('./IconConnection.js');
81require('./IconConsole.js');
82require('./IconCopy.js');
83require('./IconCross.js');
84require('./IconDashedSquare.js');
85require('./IconDown.js');
86require('./IconDownload.js');
87require('./IconEdit.js');
88require('./IconEllipsis.js');
89require('./IconEnter.js');
90require('./IconEthereum.js');
91require('./IconExternal.js');
92require('./IconFile.js');
93require('./IconFilter.js');
94require('./IconFlag.js');
95require('./IconFolder.js');
96require('./IconGraph2.js');
97require('./IconGraph.js');
98require('./IconGrid.js');
99require('./IconGroup.js');
100require('./IconHash.js');
101require('./IconHeart.js');
102require('./IconHide.js');
103require('./IconHome.js');
104require('./IconImage.js');
105require('./IconInfo.js');
106require('./IconLabel.js');
107require('./IconLayers.js');
108require('./IconLeft.js');
109require('./IconLink.js');
110require('./IconLocation.js');
111require('./IconLock.js');
112require('./IconMail.js');
113require('./IconMaximize.js');
114require('./IconMenu.js');
115require('./IconMinimize.js');
116require('./IconMinus.js');
117require('./IconMove.js');
118require('./IconNoPicture.js');
119require('./IconPicture.js');
120require('./IconPlus.js');
121require('./IconPower.js');
122require('./IconPrint.js');
123require('./IconProhibited.js');
124require('./IconQuestion.js');
125require('./IconRefresh.js');
126require('./IconRemoveUser.js');
127require('./IconRight.js');
128require('./IconRotateLeft.js');
129require('./IconRotateRight.js');
130require('./IconSearch.js');
131require('./IconSettings.js');
132require('./IconShare.js');
133require('./IconSquareMinus.js');
134require('./IconSquarePlus.js');
135require('./IconSquare.js');
136require('./IconStarFilled.js');
137require('./IconStar.js');
138require('./IconSwap.js');
139require('./IconTarget.js');
140require('./IconToken.js');
141require('./IconTrash.js');
142require('./IconUnlock.js');
143require('./IconUp.js');
144require('./IconUpload.js');
145require('./IconUser.js');
146require('./IconView.js');
147require('./IconVote.js');
148require('./IconWallet.js');
149require('./IconWarning.js');
150require('./IconWorld.js');
151require('./IconWrite.js');
152require('./IconZoomIn.js');
153require('./IconZoomOut.js');
154require('./objectWithoutPropertiesLoose-1af20ad0.js');
155require('react-dom');
156var web = require('./web-d0294535.js');
157require('./Button.js');
158require('./ButtonIcon.js');
159require('./TextInput.js');
160var useArrowKeysFocus = require('./useArrowKeysFocus.js');
161var useClickOutside = require('./useClickOutside.js');
162require('./useFocusEnter.js');
163var useFocusLeave = require('./useFocusLeave.js');
164require('./useImageExists.js');
165var useKeyDown = require('./useKeyDown.js');
166require('./useOnBlur.js');
167var SearchInput = require('./SearchInput.js');
168
169var _StyledDiv = _styled__default("div").withConfig({
170 displayName: "AutoComplete___StyledDiv",
171 componentId: "bpnxyo-0"
172})(["position:relative"]);
173
174function 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 /*#__PURE__*/React__default.createElement(_StyledDiv, {
228 ref: wrapRef,
229 onBlur: handleFocusLeave
230 }, /*#__PURE__*/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 }), /*#__PURE__*/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 /* eslint-disable react/prop-types */
257 function (_ref2) {
258 var scale = _ref2.scale,
259 opacity = _ref2.opacity;
260 return /*#__PURE__*/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 /*#__PURE__*/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 /* eslint-enable react/prop-types */
284 ));
285}
286
287AutoComplete.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/* eslint-disable react/prop-types */
300
301var _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
308var _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
317var Item = /*#__PURE__*/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 /*#__PURE__*/React__default.createElement(_StyledLi, {
334 role: "option",
335 _css: css.unselectable()
336 }, /*#__PURE__*/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/* eslint-enable react/prop-types */
346
347/* eslint-disable react/prop-types */
348
349var _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
360var Items = function Items(props) {
361 var theme = Theme.useTheme();
362 return /*#__PURE__*/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/* eslint-enable react/prop-types */
371
372
373var AutoCompleteMemo = /*#__PURE__*/React__default.memo(AutoComplete);
374var AutoComplete$1 = /*#__PURE__*/React__default.forwardRef(function (props, ref) {
375 return /*#__PURE__*/React__default.createElement(AutoCompleteMemo, _extends$1._extends({}, props, {
376 forwardedRef: ref
377 }));
378});
379
380exports.default = AutoComplete$1;
381//# sourceMappingURL=AutoComplete.js.map