@pingux/astro 2.143.0-alpha.1 → 2.143.0-alpha.2
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/lib/cjs/components/ListBox/ListBox.js +4 -2
- package/lib/cjs/components/ListBox/Option.js +8 -4
- package/lib/cjs/components/SearchField/SearchAutoComplete.d.ts +3 -0
- package/lib/cjs/components/SearchField/SearchAutoComplete.js +168 -0
- package/lib/cjs/components/SearchField/SearchField.d.ts +2 -2
- package/lib/cjs/components/SearchField/SearchField.js +20 -78
- package/lib/cjs/components/SearchField/SearchField.stories.d.ts +8 -7
- package/lib/cjs/components/SearchField/SearchField.stories.js +43 -3
- package/lib/cjs/components/SearchField/SearchField.test.js +132 -0
- package/lib/cjs/components/SearchField/SearchFieldBase.d.ts +3 -0
- package/lib/cjs/components/SearchField/SearchFieldBase.js +91 -0
- package/lib/cjs/types/listBox.d.ts +2 -0
- package/lib/cjs/types/searchField.d.ts +11 -1
- package/lib/components/ListBox/ListBox.js +4 -2
- package/lib/components/ListBox/Option.js +8 -4
- package/lib/components/SearchField/SearchAutoComplete.js +156 -0
- package/lib/components/SearchField/SearchField.js +18 -78
- package/lib/components/SearchField/SearchField.stories.js +41 -3
- package/lib/components/SearchField/SearchField.test.js +132 -0
- package/lib/components/SearchField/SearchFieldBase.js +79 -0
- package/package.json +2 -1
@@ -0,0 +1,91 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
|
4
|
+
var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
|
5
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
|
6
|
+
var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
|
7
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
8
|
+
var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
|
9
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
|
10
|
+
var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
|
11
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
12
|
+
var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
|
13
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
14
|
+
_Object$defineProperty(exports, "__esModule", {
|
15
|
+
value: true
|
16
|
+
});
|
17
|
+
exports.SearchFieldBase = void 0;
|
18
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
19
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
20
|
+
var _react = _interopRequireWildcard(require("react"));
|
21
|
+
var _reactAria = require("react-aria");
|
22
|
+
var _reactStately = require("react-stately");
|
23
|
+
var _CloseIcon = _interopRequireDefault(require("@pingux/mdi-react/CloseIcon"));
|
24
|
+
var _ = require("../..");
|
25
|
+
var _hooks = require("../../hooks");
|
26
|
+
var _pendoID = require("../../utils/devUtils/constants/pendoID");
|
27
|
+
var _react2 = require("@emotion/react");
|
28
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
29
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
30
|
+
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
31
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
32
|
+
var displayName = 'SearchField';
|
33
|
+
var SearchFieldBase = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
34
|
+
var autocomplete = props.autocomplete,
|
35
|
+
hasAutoFocus = props.hasAutoFocus,
|
36
|
+
hasNoClearButton = props.hasNoClearButton,
|
37
|
+
icon = props.icon,
|
38
|
+
isExcludedFromTabOrder = props.isExcludedFromTabOrder,
|
39
|
+
label = props.label,
|
40
|
+
controlProps = props.controlProps,
|
41
|
+
iconProps = props.iconProps,
|
42
|
+
labelProps = props.labelProps;
|
43
|
+
(0, _hooks.usePropWarning)(props, 'disabled', 'isDisabled');
|
44
|
+
var searchRef = (0, _hooks.useLocalOrForwardRef)(ref);
|
45
|
+
var state = (0, _reactStately.useSearchFieldState)(props);
|
46
|
+
var _useSearchField = (0, _reactAria.useSearchField)(_objectSpread({
|
47
|
+
autoComplete: autocomplete,
|
48
|
+
autoFocus: hasAutoFocus,
|
49
|
+
excludeFromTabOrder: isExcludedFromTabOrder
|
50
|
+
}, props), state, searchRef),
|
51
|
+
raLabelProps = _useSearchField.labelProps,
|
52
|
+
raInputProps = _useSearchField.inputProps,
|
53
|
+
clearButtonProps = _useSearchField.clearButtonProps;
|
54
|
+
var _useField = (0, _hooks.useField)(_objectSpread(_objectSpread({}, props), {}, {
|
55
|
+
labelProps: _objectSpread(_objectSpread({}, labelProps), raLabelProps),
|
56
|
+
controlProps: _objectSpread(_objectSpread({}, controlProps), raInputProps)
|
57
|
+
})),
|
58
|
+
fieldContainerProps = _useField.fieldContainerProps,
|
59
|
+
fieldControlInputProps = _useField.fieldControlInputProps,
|
60
|
+
fieldControlWrapperProps = _useField.fieldControlWrapperProps,
|
61
|
+
fieldLabelProps = _useField.fieldLabelProps;
|
62
|
+
var handleKeyDownEvent = function handleKeyDownEvent(e) {
|
63
|
+
var key = e.key;
|
64
|
+
if (key === 'Enter' || key === ' ') {
|
65
|
+
state.setValue('');
|
66
|
+
}
|
67
|
+
};
|
68
|
+
return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({}, (0, _pendoID.getPendoID)(displayName), fieldContainerProps), label && (0, _react2.jsx)(_.Label, fieldLabelProps), (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
|
69
|
+
variant: "forms.search.wrapper"
|
70
|
+
}, fieldControlWrapperProps), (0, _react2.jsx)(_.Input, (0, _extends2["default"])({
|
71
|
+
variant: "forms.input.search",
|
72
|
+
ref: searchRef
|
73
|
+
}, fieldControlInputProps)), icon && (0, _react2.jsx)(_.Icon, (0, _extends2["default"])({
|
74
|
+
icon: icon,
|
75
|
+
variant: "forms.search.icon",
|
76
|
+
title: {
|
77
|
+
name: 'Search Icon'
|
78
|
+
}
|
79
|
+
}, iconProps)), !hasNoClearButton && state.value !== '' && (0, _react2.jsx)(_.IconButton, (0, _extends2["default"])({
|
80
|
+
tabIndex: 0,
|
81
|
+
onKeyDown: handleKeyDownEvent,
|
82
|
+
color: "text.secondary",
|
83
|
+
variant: "searchClearButton"
|
84
|
+
}, clearButtonProps), (0, _react2.jsx)(_.Icon, {
|
85
|
+
icon: _CloseIcon["default"],
|
86
|
+
title: {
|
87
|
+
name: 'Close Icon'
|
88
|
+
}
|
89
|
+
}))));
|
90
|
+
});
|
91
|
+
exports.SearchFieldBase = SearchFieldBase;
|
@@ -33,11 +33,13 @@ export interface ListBoxProps extends AriaListBoxOptions<object> {
|
|
33
33
|
variant?: string;
|
34
34
|
children?: CollectionChildren<object>;
|
35
35
|
isCondensed?: boolean;
|
36
|
+
showSelectedOption?: boolean;
|
36
37
|
}
|
37
38
|
export interface OptionType {
|
38
39
|
item: ListBoxItemType;
|
39
40
|
hasVirtualFocus?: boolean;
|
40
41
|
isCondensed?: boolean;
|
42
|
+
showSelectedOption?: boolean;
|
41
43
|
}
|
42
44
|
export interface OptionWithCheckboxType extends StyleProps {
|
43
45
|
isSelected?: boolean;
|
@@ -1,9 +1,10 @@
|
|
1
1
|
/// <reference types="react" />
|
2
|
+
import type { CollectionChildren } from '@react-types/shared';
|
2
3
|
import { ThemeUICSSObject } from 'theme-ui';
|
3
4
|
import { ControlProps } from '../hooks/useField/useField';
|
4
5
|
import { StyleProps } from './shared';
|
5
6
|
import { HelpHintProps, IconProps, IconTypeExtended, LabelProps } from '.';
|
6
|
-
export interface SearchFieldProps extends StyleProps {
|
7
|
+
export interface SearchFieldProps<T extends object> extends StyleProps {
|
7
8
|
/**
|
8
9
|
* @ignore
|
9
10
|
* Identifies the currently active element when DOM focus is on a composite widget, textbox,
|
@@ -169,4 +170,13 @@ export interface SearchFieldProps extends StyleProps {
|
|
169
170
|
labelProps?: LabelProps;
|
170
171
|
size?: string;
|
171
172
|
sx?: ThemeUICSSObject;
|
173
|
+
mode?: 'default' | 'autocomplete';
|
174
|
+
defaultItems?: Iterable<T>;
|
175
|
+
children?: CollectionChildren<T>;
|
176
|
+
}
|
177
|
+
export interface SearchItem extends StyleProps {
|
178
|
+
id: string;
|
179
|
+
text?: string;
|
180
|
+
name?: string;
|
181
|
+
[key: string]: unknown;
|
172
182
|
}
|
@@ -8,7 +8,7 @@ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object
|
|
8
8
|
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
9
9
|
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
10
10
|
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
11
|
-
var _excluded = ["defaultSelectedKeys", "disabledKeys", "hasAutoFocus", "hasFocusWrap", "hasNoEmptySelection", "hasVirtualFocus", "id", "isCondensed", "isLoading", "isFocusedOnHover", "isSelectedOnPressUp", "isVirtualized", "items", "keyboardDelegate", "label", "loadingState", "onLoadMore", "onLoadPrev", "onScroll", "onSelectionChange", "renderEmptyState", "selectedKeys", "selectionMode", "state", "aria-label", "aria-labelledby", "aria-describedby", "aria-details"];
|
11
|
+
var _excluded = ["defaultSelectedKeys", "disabledKeys", "hasAutoFocus", "hasFocusWrap", "hasNoEmptySelection", "hasVirtualFocus", "id", "isCondensed", "isLoading", "isFocusedOnHover", "isSelectedOnPressUp", "isVirtualized", "items", "keyboardDelegate", "label", "loadingState", "onLoadMore", "onLoadPrev", "onScroll", "onSelectionChange", "renderEmptyState", "selectedKeys", "selectionMode", "state", "aria-label", "aria-labelledby", "aria-describedby", "aria-details", "showSelectedOption"];
|
12
12
|
import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
|
13
13
|
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
14
14
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
@@ -82,6 +82,7 @@ var ListBox = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
82
82
|
ariaLabelledby = props['aria-labelledby'],
|
83
83
|
ariaDescribedby = props['aria-describedby'],
|
84
84
|
ariaDetails = props['aria-details'],
|
85
|
+
showSelectedOption = props.showSelectedOption,
|
85
86
|
others = _objectWithoutProperties(props, _excluded);
|
86
87
|
|
87
88
|
// Object matching React Aria API with all options
|
@@ -182,7 +183,8 @@ var ListBox = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
182
183
|
key: item.key,
|
183
184
|
item: item,
|
184
185
|
hasVirtualFocus: hasVirtualFocus,
|
185
|
-
isCondensed: isCondensed
|
186
|
+
isCondensed: isCondensed,
|
187
|
+
showSelectedOption: showSelectedOption
|
186
188
|
});
|
187
189
|
}
|
188
190
|
if (type === collectionTypes.LOADER) {
|
@@ -9,7 +9,7 @@ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object
|
|
9
9
|
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
10
10
|
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
11
11
|
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
12
|
-
var _excluded = ["item", "hasVirtualFocus", "isCondensed"],
|
12
|
+
var _excluded = ["item", "hasVirtualFocus", "isCondensed", "showSelectedOption"],
|
13
13
|
_excluded2 = ["onPressStart", "onPressUp"];
|
14
14
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
15
15
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
@@ -56,6 +56,7 @@ var Option = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
56
56
|
var item = props.item,
|
57
57
|
hasVirtualFocus = props.hasVirtualFocus,
|
58
58
|
isCondensed = props.isCondensed,
|
59
|
+
showSelectedOption = props.showSelectedOption,
|
59
60
|
others = _objectWithoutProperties(props, _excluded);
|
60
61
|
var key = item.key,
|
61
62
|
itemProps = item.props,
|
@@ -94,7 +95,7 @@ var Option = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
94
95
|
var _useStatusClasses = useStatusClasses(null, {
|
95
96
|
isDisabled: isDisabled || isSeparator,
|
96
97
|
isFocused: focused,
|
97
|
-
isSelected: isSelected,
|
98
|
+
isSelected: showSelectedOption ? isSelected : false,
|
98
99
|
isCondensed: isCondensed,
|
99
100
|
isFocusVisible: isFocusVisible,
|
100
101
|
isPressed: isPressed
|
@@ -131,12 +132,12 @@ var Option = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
131
132
|
mr: "xs",
|
132
133
|
className: classNames,
|
133
134
|
variant: "listBox.checkboxIcon"
|
134
|
-
}) : isSelected && !isOnyx && ___EmotionJSX(Icon, {
|
135
|
+
}) : isSelected && !isOnyx && showSelectedOption && ___EmotionJSX(Icon, {
|
135
136
|
icon: CircleSmallIcon,
|
136
137
|
title: {
|
137
138
|
name: 'Circle Small Icon'
|
138
139
|
}
|
139
|
-
}), rendered, isSelected && isOnyx && ___EmotionJSX(Icon, {
|
140
|
+
}), rendered, isSelected && isOnyx && showSelectedOption && ___EmotionJSX(Icon, {
|
140
141
|
icon: CheckIcon,
|
141
142
|
title: {
|
142
143
|
name: 'Check Icon'
|
@@ -144,4 +145,7 @@ var Option = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
144
145
|
color: "green-500"
|
145
146
|
}));
|
146
147
|
});
|
148
|
+
Option.defaultProps = {
|
149
|
+
showSelectedOption: true
|
150
|
+
};
|
147
151
|
export default Option;
|
@@ -0,0 +1,156 @@
|
|
1
|
+
import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
|
2
|
+
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
|
3
|
+
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
4
|
+
import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
|
5
|
+
import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
|
6
|
+
import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
|
7
|
+
import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
|
8
|
+
import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
|
9
|
+
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
10
|
+
import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
|
11
|
+
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
12
|
+
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
13
|
+
var _excluded = ["shouldFocusOnHover", "shouldSelectOnPressUp"];
|
14
|
+
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
15
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
16
|
+
import React, { forwardRef, useCallback, useLayoutEffect, useRef, useState } from 'react';
|
17
|
+
import { useComboBox, useFilter, useSearchField } from 'react-aria';
|
18
|
+
import { useComboBoxState, useSearchFieldState } from 'react-stately';
|
19
|
+
import CloseIcon from '@pingux/mdi-react/CloseIcon';
|
20
|
+
import { mergeProps, useResizeObserver } from '@react-aria/utils';
|
21
|
+
import { Box, Icon, IconButton, Input, Label, ScrollBox } from '../..';
|
22
|
+
import { useField, useLocalOrForwardRef, usePropWarning } from '../../hooks';
|
23
|
+
import { getPendoID } from '../../utils/devUtils/constants/pendoID';
|
24
|
+
import ListBox from '../ListBox/ListBox';
|
25
|
+
import Popover from '../Popover/Popover';
|
26
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
27
|
+
var displayName = 'SearchField';
|
28
|
+
export var SearchAutoComplete = /*#__PURE__*/forwardRef(function (props, ref) {
|
29
|
+
var autocomplete = props.autocomplete,
|
30
|
+
hasAutoFocus = props.hasAutoFocus,
|
31
|
+
hasNoClearButton = props.hasNoClearButton,
|
32
|
+
icon = props.icon,
|
33
|
+
isExcludedFromTabOrder = props.isExcludedFromTabOrder,
|
34
|
+
label = props.label,
|
35
|
+
controlProps = props.controlProps,
|
36
|
+
iconProps = props.iconProps,
|
37
|
+
labelProps = props.labelProps,
|
38
|
+
value = props.value,
|
39
|
+
onChange = props.onChange;
|
40
|
+
usePropWarning(props, 'disabled', 'isDisabled');
|
41
|
+
var _useFilter = useFilter({
|
42
|
+
sensitivity: 'base'
|
43
|
+
}),
|
44
|
+
contains = _useFilter.contains;
|
45
|
+
var comboBoxState = useComboBoxState(_objectSpread(_objectSpread({}, props), {}, {
|
46
|
+
inputValue: value,
|
47
|
+
defaultInputValue: props.defaultValue,
|
48
|
+
onInputChange: onChange,
|
49
|
+
defaultFilter: contains,
|
50
|
+
allowsCustomValue: true
|
51
|
+
}));
|
52
|
+
var inputRef = useLocalOrForwardRef(ref);
|
53
|
+
var outerRef = useRef(null);
|
54
|
+
var listBoxRef = useRef(null);
|
55
|
+
var popoverRef = useRef(null);
|
56
|
+
var clearButtonRef = useRef(null);
|
57
|
+
var _useComboBox = useComboBox(_objectSpread(_objectSpread({}, props), {}, {
|
58
|
+
inputRef: inputRef,
|
59
|
+
listBoxRef: listBoxRef,
|
60
|
+
popoverRef: popoverRef
|
61
|
+
}), comboBoxState),
|
62
|
+
inputProps = _useComboBox.inputProps,
|
63
|
+
listBoxProps = _useComboBox.listBoxProps,
|
64
|
+
rsLabelProps = _useComboBox.labelProps;
|
65
|
+
delete inputProps['data-testid'];
|
66
|
+
var shouldFocusOnHover = listBoxProps.shouldFocusOnHover,
|
67
|
+
shouldSelectOnPressUp = listBoxProps.shouldSelectOnPressUp,
|
68
|
+
otherListBoxProps = _objectWithoutProperties(listBoxProps, _excluded);
|
69
|
+
var searchProps = {
|
70
|
+
label: props.label,
|
71
|
+
value: comboBoxState.inputValue,
|
72
|
+
'aria-label': props['aria-label'],
|
73
|
+
onChange: function onChange(v) {
|
74
|
+
return comboBoxState.setInputValue(v);
|
75
|
+
},
|
76
|
+
onClear: props.onClear,
|
77
|
+
onSubmit: props.onSubmit
|
78
|
+
};
|
79
|
+
var searchState = useSearchFieldState(searchProps);
|
80
|
+
var _useSearchField = useSearchField(_objectSpread({
|
81
|
+
autoComplete: autocomplete,
|
82
|
+
autoFocus: hasAutoFocus,
|
83
|
+
excludeFromTabOrder: isExcludedFromTabOrder
|
84
|
+
}, searchProps), searchState, inputRef),
|
85
|
+
raLabelProps = _useSearchField.labelProps,
|
86
|
+
raInputProps = _useSearchField.inputProps,
|
87
|
+
clearButtonProps = _useSearchField.clearButtonProps;
|
88
|
+
var _useField = useField(_objectSpread(_objectSpread({}, props), {}, {
|
89
|
+
labelProps: _objectSpread(_objectSpread(_objectSpread({}, labelProps), raLabelProps), rsLabelProps),
|
90
|
+
controlProps: _objectSpread(_objectSpread({}, controlProps), raInputProps)
|
91
|
+
})),
|
92
|
+
fieldContainerProps = _useField.fieldContainerProps,
|
93
|
+
fieldControlInputProps = _useField.fieldControlInputProps,
|
94
|
+
fieldControlWrapperProps = _useField.fieldControlWrapperProps,
|
95
|
+
fieldLabelProps = _useField.fieldLabelProps;
|
96
|
+
var handleKeyDownEvent = function handleKeyDownEvent(e) {
|
97
|
+
var key = e.key;
|
98
|
+
if (key === 'Enter' || key === ' ') {
|
99
|
+
comboBoxState.setInputValue('');
|
100
|
+
}
|
101
|
+
};
|
102
|
+
|
103
|
+
// Popover width matches the input width
|
104
|
+
var _useState = useState(0),
|
105
|
+
_useState2 = _slicedToArray(_useState, 2),
|
106
|
+
popoverWidth = _useState2[0],
|
107
|
+
setPopoverWidth = _useState2[1];
|
108
|
+
var onResize = useCallback(function () {
|
109
|
+
/* istanbul ignore next */
|
110
|
+
if (outerRef.current) {
|
111
|
+
setPopoverWidth(outerRef.current.offsetWidth);
|
112
|
+
}
|
113
|
+
}, [outerRef, setPopoverWidth]);
|
114
|
+
useResizeObserver({
|
115
|
+
ref: outerRef,
|
116
|
+
onResize: onResize
|
117
|
+
});
|
118
|
+
useLayoutEffect(onResize, [onResize]);
|
119
|
+
return ___EmotionJSX(Box, _extends({}, getPendoID(displayName), fieldContainerProps), label && ___EmotionJSX(Label, fieldLabelProps), ___EmotionJSX(Box, _extends({
|
120
|
+
variant: "forms.search.wrapper",
|
121
|
+
ref: outerRef
|
122
|
+
}, fieldControlWrapperProps), ___EmotionJSX(Input, _extends({
|
123
|
+
variant: "forms.input.search",
|
124
|
+
ref: inputRef
|
125
|
+
}, mergeProps(fieldControlInputProps, inputProps))), icon && ___EmotionJSX(Icon, _extends({
|
126
|
+
icon: icon,
|
127
|
+
variant: "forms.search.icon",
|
128
|
+
title: {
|
129
|
+
name: 'Search Icon'
|
130
|
+
}
|
131
|
+
}, iconProps)), !hasNoClearButton && searchState.value !== '' && ___EmotionJSX(IconButton, _extends({
|
132
|
+
ref: clearButtonRef
|
133
|
+
}, clearButtonProps, {
|
134
|
+
tabIndex: 0,
|
135
|
+
onKeyDown: handleKeyDownEvent,
|
136
|
+
color: "text.secondary",
|
137
|
+
variant: "searchClearButton"
|
138
|
+
}), ___EmotionJSX(Icon, {
|
139
|
+
icon: CloseIcon,
|
140
|
+
title: {
|
141
|
+
name: 'Close Icon'
|
142
|
+
}
|
143
|
+
}))), comboBoxState.isOpen && ___EmotionJSX(Popover, {
|
144
|
+
popoverRef: popoverRef,
|
145
|
+
triggerRef: outerRef,
|
146
|
+
state: comboBoxState,
|
147
|
+
isNonModal: true,
|
148
|
+
width: popoverWidth
|
149
|
+
}, ___EmotionJSX(ScrollBox, null, ___EmotionJSX(ListBox, _extends({
|
150
|
+
ref: listBoxRef,
|
151
|
+
state: comboBoxState,
|
152
|
+
isFocusedOnHover: shouldFocusOnHover,
|
153
|
+
isSelectedOnPressUp: shouldSelectOnPressUp,
|
154
|
+
showSelectedOption: false
|
155
|
+
}, otherListBoxProps)))));
|
156
|
+
});
|
@@ -1,87 +1,27 @@
|
|
1
|
-
import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
|
2
|
-
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
|
3
|
-
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
4
|
-
import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
|
5
|
-
import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
|
6
|
-
import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
|
7
|
-
import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
|
8
|
-
import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
|
9
1
|
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
10
|
-
import
|
11
|
-
|
12
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
2
|
+
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
3
|
+
var _excluded = ["hasNoClearButton", "mode", "icon"];
|
13
4
|
import React, { forwardRef } from 'react';
|
14
|
-
import { useSearchField } from 'react-aria';
|
15
|
-
import { useSearchFieldState } from 'react-stately';
|
16
|
-
import CloseIcon from '@pingux/mdi-react/CloseIcon';
|
17
5
|
import SearchIcon from '@pingux/mdi-react/SearchIcon';
|
18
|
-
import {
|
19
|
-
import {
|
20
|
-
import { getPendoID } from '../../utils/devUtils/constants/pendoID';
|
6
|
+
import { SearchAutoComplete } from './SearchAutoComplete';
|
7
|
+
import { SearchFieldBase } from './SearchFieldBase';
|
21
8
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
22
9
|
var displayName = 'SearchField';
|
23
10
|
var SearchField = /*#__PURE__*/forwardRef(function (props, ref) {
|
24
|
-
var
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
autoFocus: hasAutoFocus,
|
39
|
-
excludeFromTabOrder: isExcludedFromTabOrder
|
40
|
-
}, props), state, searchRef),
|
41
|
-
raLabelProps = _useSearchField.labelProps,
|
42
|
-
raInputProps = _useSearchField.inputProps,
|
43
|
-
clearButtonProps = _useSearchField.clearButtonProps;
|
44
|
-
var _useField = useField(_objectSpread(_objectSpread({}, props), {}, {
|
45
|
-
labelProps: _objectSpread(_objectSpread({}, labelProps), raLabelProps),
|
46
|
-
controlProps: _objectSpread(_objectSpread({}, controlProps), raInputProps)
|
47
|
-
})),
|
48
|
-
fieldContainerProps = _useField.fieldContainerProps,
|
49
|
-
fieldControlInputProps = _useField.fieldControlInputProps,
|
50
|
-
fieldControlWrapperProps = _useField.fieldControlWrapperProps,
|
51
|
-
fieldLabelProps = _useField.fieldLabelProps;
|
52
|
-
var handleKeyDownEvent = function handleKeyDownEvent(e) {
|
53
|
-
var key = e.key;
|
54
|
-
if (key === 'Enter' || key === ' ') {
|
55
|
-
state.setValue('');
|
56
|
-
}
|
57
|
-
};
|
58
|
-
return ___EmotionJSX(Box, _extends({}, getPendoID(displayName), fieldContainerProps), label && ___EmotionJSX(Label, fieldLabelProps), ___EmotionJSX(Box, _extends({
|
59
|
-
variant: "forms.search.wrapper"
|
60
|
-
}, fieldControlWrapperProps), ___EmotionJSX(Input, _extends({
|
61
|
-
variant: "forms.input.search",
|
62
|
-
ref: searchRef
|
63
|
-
}, fieldControlInputProps)), icon && ___EmotionJSX(Icon, _extends({
|
64
|
-
icon: icon,
|
65
|
-
variant: "forms.search.icon",
|
66
|
-
size: 20,
|
67
|
-
title: {
|
68
|
-
name: 'Search Icon'
|
69
|
-
}
|
70
|
-
}, iconProps)), !hasNoClearButton && state.value !== '' && ___EmotionJSX(IconButton, _extends({
|
71
|
-
tabIndex: 0,
|
72
|
-
onKeyDown: handleKeyDownEvent,
|
73
|
-
color: "text.secondary",
|
74
|
-
variant: "searchClearButton"
|
75
|
-
}, clearButtonProps), ___EmotionJSX(Icon, {
|
76
|
-
icon: CloseIcon,
|
77
|
-
title: {
|
78
|
-
name: 'Close Icon'
|
79
|
-
}
|
80
|
-
}))));
|
11
|
+
var _props$hasNoClearButt = props.hasNoClearButton,
|
12
|
+
hasNoClearButton = _props$hasNoClearButt === void 0 ? false : _props$hasNoClearButt,
|
13
|
+
_props$mode = props.mode,
|
14
|
+
mode = _props$mode === void 0 ? 'default' : _props$mode,
|
15
|
+
_props$icon = props.icon,
|
16
|
+
icon = _props$icon === void 0 ? SearchIcon : _props$icon,
|
17
|
+
rest = _objectWithoutProperties(props, _excluded);
|
18
|
+
var Component = mode === 'autocomplete' ? SearchAutoComplete : SearchFieldBase;
|
19
|
+
return ___EmotionJSX(Component, _extends({
|
20
|
+
hasNoClearButton: hasNoClearButton,
|
21
|
+
icon: icon
|
22
|
+
}, rest, {
|
23
|
+
ref: ref
|
24
|
+
}));
|
81
25
|
});
|
82
|
-
SearchField.defaultProps = {
|
83
|
-
hasNoClearButton: false,
|
84
|
-
icon: SearchIcon
|
85
|
-
};
|
86
26
|
SearchField.displayName = displayName;
|
87
27
|
export default SearchField;
|
@@ -18,7 +18,7 @@ import FilterVariantIcon from '@pingux/mdi-react/FilterVariantIcon';
|
|
18
18
|
import SearchIcon from '@pingux/mdi-react/SearchIcon';
|
19
19
|
import DocsLayout from '../../../.storybook/storybookDocsLayout';
|
20
20
|
import { useDebounce, useGetTheme } from '../../hooks';
|
21
|
-
import { Box, Icon, IconButton, SearchField, Text } from '../../index';
|
21
|
+
import { Box, Icon, IconButton, Item, SearchField, Text } from '../../index';
|
22
22
|
import { FIGMA_LINKS } from '../../utils/designUtils/figmaLinks';
|
23
23
|
import { ariaAttributeBaseArgTypes, ariaAttributeBaseDocSettings } from '../../utils/docUtils/ariaAttributes';
|
24
24
|
import { inputFieldAttributeBaseArgTypes } from '../../utils/docUtils/fieldAttributes';
|
@@ -73,10 +73,9 @@ export var Default = function Default(args) {
|
|
73
73
|
icon: SearchIcon,
|
74
74
|
onSubmit: function onSubmit(text) {
|
75
75
|
return alert(text);
|
76
|
-
}
|
76
|
+
}
|
77
77
|
}));
|
78
78
|
};
|
79
|
-
|
80
79
|
Default.parameters = {
|
81
80
|
design: {
|
82
81
|
type: 'figma',
|
@@ -166,4 +165,43 @@ export var WithFilter = function WithFilter() {
|
|
166
165
|
name: 'Filter Icon'
|
167
166
|
}
|
168
167
|
})));
|
168
|
+
};
|
169
|
+
export var ControlledWithPopover = function ControlledWithPopover() {
|
170
|
+
var _useState5 = useState(''),
|
171
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
172
|
+
value = _useState6[0],
|
173
|
+
setValue = _useState6[1];
|
174
|
+
var items = [{
|
175
|
+
id: 'apple',
|
176
|
+
name: 'Apple'
|
177
|
+
}, {
|
178
|
+
id: 'banana',
|
179
|
+
name: 'Banana'
|
180
|
+
}, {
|
181
|
+
id: 'blueberry',
|
182
|
+
name: 'Blueberry'
|
183
|
+
}];
|
184
|
+
return ___EmotionJSX(Box, null, ___EmotionJSX(SearchField, {
|
185
|
+
mode: "autocomplete",
|
186
|
+
defaultItems: items,
|
187
|
+
value: value,
|
188
|
+
onChange: function onChange(val) {
|
189
|
+
setValue(val);
|
190
|
+
},
|
191
|
+
"aria-label": "Search Groups",
|
192
|
+
placeholder: "Search",
|
193
|
+
onSubmit: function onSubmit(text) {
|
194
|
+
return alert(text);
|
195
|
+
},
|
196
|
+
onClear: function onClear() {
|
197
|
+
setValue('');
|
198
|
+
}
|
199
|
+
}, function (item) {
|
200
|
+
return ___EmotionJSX(Item, {
|
201
|
+
key: item.id,
|
202
|
+
textValue: item.name
|
203
|
+
}, item.name);
|
204
|
+
}), ___EmotionJSX(Text, {
|
205
|
+
mt: "xs"
|
206
|
+
}, "value: ".concat(value)));
|
169
207
|
};
|