@elliemae/ds-controlled-form 2.3.0-next.9 → 2.3.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.
Files changed (79) hide show
  1. package/cjs/controlled-autocomplete/parts/controls/styled.js +2 -2
  2. package/cjs/controlled-autocomplete/parts/menu-list/MenuList.js +2 -2
  3. package/cjs/controlled-checkbox/ControlledCheckbox.js +54 -40
  4. package/cjs/controlled-checkbox/config/useValidateProps.js +2 -2
  5. package/cjs/controlled-checkbox/react-desc-prop-types.js +32 -0
  6. package/cjs/controlled-checkbox/utils/styleHelpers.js +4 -4
  7. package/cjs/controlled-combobox/ComboBoxCTX.js +1 -4
  8. package/cjs/controlled-combobox/config/useComboBox.js +6 -5
  9. package/cjs/controlled-combobox/parts/a11y-messages/SelectedValuesAllyMsg.js +7 -2
  10. package/cjs/controlled-combobox/parts/container/Container.js +2 -16
  11. package/cjs/controlled-combobox/parts/controls/Controls.js +1 -0
  12. package/cjs/controlled-combobox/parts/controls/styled.js +3 -3
  13. package/cjs/controlled-combobox/parts/controls-input/ControlsInput.js +5 -3
  14. package/cjs/controlled-combobox/parts/controls-input/useControlsInput.js +3 -1
  15. package/cjs/controlled-combobox/parts/header-list/HeaderList.js +4 -9
  16. package/cjs/controlled-combobox/parts/header-list/useHeaderListHandlers.js +8 -1
  17. package/cjs/controlled-combobox/parts/menu-list/MenuList.js +10 -13
  18. package/cjs/controlled-combobox/parts/menu-list/styled.js +4 -0
  19. package/cjs/controlled-combobox/parts/menu-list/useItemRenderer.js +4 -7
  20. package/cjs/controlled-combobox/parts/multi-selected-values-container/MultiSelectedValuesContainer.js +18 -8
  21. package/cjs/controlled-combobox/react-desc-prop-types.js +1 -1
  22. package/cjs/controlled-combobox/utils/hooks/useKeyboardNavigation.js +2 -5
  23. package/cjs/controlled-date-time-picker/parts/ControlledDateTimePickerContent.js +2 -2
  24. package/cjs/controlled-date-time-picker/parts/DateInputs/DateInputs.js +2 -2
  25. package/cjs/controlled-date-time-picker/parts/Pickers/Calendar/Styleds.js +2 -2
  26. package/cjs/controlled-date-time-picker/parts/Pickers/TimeWheel/Styleds.js +2 -2
  27. package/cjs/controlled-date-time-picker/parts/Styleds.js +6 -6
  28. package/cjs/controlled-date-time-picker/parts/TimeInputs/TimeInputs.js +2 -2
  29. package/esm/controlled-checkbox/ControlledCheckbox.js +49 -37
  30. package/esm/controlled-checkbox/config/useValidateProps.js +2 -2
  31. package/esm/controlled-checkbox/react-desc-prop-types.js +23 -0
  32. package/esm/controlled-checkbox/utils/styleHelpers.js +4 -4
  33. package/esm/controlled-combobox/ComboBoxCTX.js +2 -5
  34. package/esm/controlled-combobox/config/useComboBox.js +7 -6
  35. package/esm/controlled-combobox/parts/a11y-messages/SelectedValuesAllyMsg.js +7 -2
  36. package/esm/controlled-combobox/parts/container/Container.js +2 -16
  37. package/esm/controlled-combobox/parts/controls/Controls.js +1 -0
  38. package/esm/controlled-combobox/parts/controls-input/ControlsInput.js +5 -3
  39. package/esm/controlled-combobox/parts/controls-input/useControlsInput.js +3 -1
  40. package/esm/controlled-combobox/parts/header-list/HeaderList.js +4 -9
  41. package/esm/controlled-combobox/parts/header-list/useHeaderListHandlers.js +8 -1
  42. package/esm/controlled-combobox/parts/menu-list/MenuList.js +12 -15
  43. package/esm/controlled-combobox/parts/menu-list/styled.js +4 -1
  44. package/esm/controlled-combobox/parts/menu-list/useItemRenderer.js +2 -5
  45. package/esm/controlled-combobox/parts/multi-selected-values-container/MultiSelectedValuesContainer.js +19 -8
  46. package/esm/controlled-combobox/react-desc-prop-types.js +1 -1
  47. package/esm/controlled-combobox/utils/hooks/useKeyboardNavigation.js +2 -5
  48. package/package.json +13 -29
  49. package/types/controlled-checkbox/ControlledCheckbox.d.ts +4 -70
  50. package/types/controlled-checkbox/config/useValidateProps.d.ts +2 -2
  51. package/types/controlled-checkbox/react-desc-prop-types.d.ts +32 -0
  52. package/types/controlled-checkbox/styles.d.ts +3 -3
  53. package/types/controlled-checkbox/utils/setMultipleRefs.d.ts +1 -1
  54. package/types/controlled-checkbox/utils/styleHelpers.d.ts +3 -3
  55. package/types/controlled-combobox/config/useComboBox.d.ts +1 -1
  56. package/types/controlled-combobox/parts/controls/useOnPillsNavigation.d.ts +2 -2
  57. package/types/controlled-combobox/parts/header-list/useHeaderListHandlers.d.ts +2 -1
  58. package/types/controlled-combobox/parts/menu-list/styled.d.ts +1 -0
  59. package/types/controlled-combobox/parts/menu-list/useItemRenderer.d.ts +2 -2
  60. package/types/controlled-combobox/react-desc-prop-types.d.ts +9 -5
  61. package/types/controlled-combobox/sharedTypes.d.ts +0 -2
  62. package/cjs/controlled-checkbox/index.d.js +0 -2
  63. package/cjs/controlled-checkbox/propTypes.js +0 -22
  64. package/cjs/controlled-combobox/parts/dropdown-indicator/index.js +0 -2
  65. package/cjs/controlled-combobox/parts/empty-state/index.js +0 -23
  66. package/cjs/controlled-combobox/parts/empty-state/styled.js +0 -19
  67. package/cjs/controlled-combobox/parts/multi-selected-values-container/styled.js +0 -23
  68. package/esm/controlled-checkbox/index.d.js +0 -1
  69. package/esm/controlled-checkbox/propTypes.js +0 -18
  70. package/esm/controlled-combobox/parts/dropdown-indicator/index.js +0 -1
  71. package/esm/controlled-combobox/parts/empty-state/index.js +0 -15
  72. package/esm/controlled-combobox/parts/empty-state/styled.js +0 -10
  73. package/esm/controlled-combobox/parts/multi-selected-values-container/styled.js +0 -13
  74. package/types/controlled-checkbox/index.d.d.ts +0 -29
  75. package/types/controlled-checkbox/propTypes.d.ts +0 -60
  76. package/types/controlled-combobox/parts/dropdown-indicator/index.d.ts +0 -0
  77. package/types/controlled-combobox/parts/empty-state/index.d.ts +0 -3
  78. package/types/controlled-combobox/parts/empty-state/styled.d.ts +0 -2
  79. package/types/controlled-combobox/parts/multi-selected-values-container/styled.d.ts +0 -3
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var _taggedTemplateLiteral = require('@babel/runtime/helpers/taggedTemplateLiteral');
6
6
  var styled = require('styled-components');
7
7
  var dsSystem = require('@elliemae/ds-system');
8
- var Grid = require('@elliemae/ds-grid');
8
+ var dsGrid = require('@elliemae/ds-grid');
9
9
 
10
10
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
11
 
@@ -20,7 +20,7 @@ const focusBorder = dsSystem.css(_templateObject2 || (_templateObject2 = _tagged
20
20
  } = _ref;
21
21
  return theme.colors.brand[700];
22
22
  });
23
- const StyledControlsWrapper = /*#__PURE__*/styled__default["default"](Grid.Grid).withConfig({
23
+ const StyledControlsWrapper = /*#__PURE__*/styled__default["default"](dsGrid.Grid).withConfig({
24
24
  componentId: "sc-xlhlqm-0"
25
25
  })(["background:transparent;position:relative;border-radius:2px;min-width:", ";align-items:center;align-content:center;height:28px;padding-left:8px;::after{display:block;content:' ';position:absolute;top:0;left:0;right:0;bottom:0;border-radius:2px;", " pointer-events:none;z-index:7;}:focus-within{::after{", "}}"], _ref2 => {
26
26
  let {
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var _jsx = require('@babel/runtime/helpers/jsx');
6
6
  var React = require('react');
7
7
  var dsCircularProgressIndicator = require('@elliemae/ds-circular-progress-indicator');
8
- var Grid = require('@elliemae/ds-grid');
8
+ var dsGrid = require('@elliemae/ds-grid');
9
9
  var styled = require('./styled.js');
10
10
  var AutocompleteDataTestids = require('../../AutocompleteDataTestids.js');
11
11
  var AutocompleteCTX = require('../../AutocompleteCTX.js');
@@ -57,7 +57,7 @@ const MenuList = () => {
57
57
  minWidth: listWidth,
58
58
  id: "combo-listbox",
59
59
  role: "listbox",
60
- children: isLoading && ((_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.value) !== '' ? /*#__PURE__*/_jsx__default["default"](Grid.Grid, {
60
+ children: isLoading && ((_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.value) !== '' ? /*#__PURE__*/_jsx__default["default"](dsGrid.Grid, {
61
61
  justifyContent: "center",
62
62
  alignItems: "center",
63
63
  style: {
@@ -2,75 +2,89 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ require('core-js/modules/esnext.async-iterator.filter.js');
6
+ require('core-js/modules/esnext.iterator.constructor.js');
7
+ require('core-js/modules/esnext.iterator.filter.js');
8
+ require('core-js/modules/esnext.async-iterator.for-each.js');
9
+ require('core-js/modules/esnext.iterator.for-each.js');
5
10
  var _jsx = require('@babel/runtime/helpers/jsx');
11
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
12
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
6
13
  var React = require('react');
7
- var reactDesc = require('react-desc');
14
+ var dsPropsHelpers = require('@elliemae/ds-props-helpers');
8
15
  var dsTruncatedTooltipText = require('@elliemae/ds-truncated-tooltip-text');
9
- var propTypes = require('./propTypes.js');
10
16
  var styles = require('./styles.js');
11
- var useValidateProps = require('./config/useValidateProps.js');
17
+ var reactDescPropTypes = require('./react-desc-prop-types.js');
12
18
  var setMultipleRefs = require('./utils/setMultipleRefs.js');
19
+ var useValidateProps = require('./config/useValidateProps.js');
13
20
  var jsxRuntime = require('react/jsx-runtime');
14
21
 
15
22
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
16
23
 
17
24
  var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
25
+ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
26
+ var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
27
+
28
+ const _excluded = ["id", "disabled", "readOnly", "label", "aria-label", "aria-controls", "onKeyDown", "className"];
29
+
30
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
31
+
32
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18
33
 
19
34
  const DSControlledCheckbox = props => {
20
- useValidateProps.useValidateProps(props, propTypes.propTypes);
21
- const checkboxRef = React.useRef();
35
+ const propsWithDefault = dsPropsHelpers.useMemoMergePropsWithDefault(props, reactDescPropTypes.defaultProps);
36
+ useValidateProps.useValidateProps(props, reactDescPropTypes.propTypes);
37
+ const checkboxRef = React.useRef(null);
22
38
  const {
23
- autoFocus,
24
39
  checked,
25
- ariaControls,
26
- ariaLabel,
27
- disabled,
28
- id,
29
40
  label,
30
41
  hasError,
31
- onChange,
32
- onFocus,
33
- onBlur,
34
- value,
35
- readOnly,
36
- name,
37
42
  innerRef,
38
- tabIndex
39
- } = props;
43
+ tabIndex,
44
+ ariaLabel: legacyAriaLabel,
45
+ ariaControls: legacyAriaControls,
46
+ 'data-testid': dataTestid = 'ds-checkbox-container'
47
+ } = propsWithDefault;
40
48
  const handleOnKeyDown = React.useCallback(e => {
41
49
  if (checkboxRef.current && e.key === 'Enter') {
42
50
  checkboxRef.current.click();
43
51
  }
44
52
  }, []);
53
+
54
+ const _useGetGlobalAttribut = dsPropsHelpers.useGetGlobalAttributes(propsWithDefault, {
55
+ onKeyDown: handleOnKeyDown
56
+ }),
57
+ {
58
+ id,
59
+ disabled,
60
+ readOnly,
61
+ label: globalLabel,
62
+ 'aria-label': ariaLabel,
63
+ 'aria-controls': ariaControls,
64
+ onKeyDown,
65
+ className
66
+ } = _useGetGlobalAttribut,
67
+ restGlobals = _objectWithoutProperties__default["default"](_useGetGlobalAttribut, _excluded);
68
+
45
69
  return /*#__PURE__*/_jsx__default["default"](styles.StyledContainer, {
46
- "data-testid": "ds-checkbox-container"
70
+ "data-testid": dataTestid,
71
+ className: className
47
72
  }, void 0, /*#__PURE__*/_jsx__default["default"](styles.StyledCheckBox, {
48
- checked: props.checked,
73
+ checked: checked,
49
74
  hasError: hasError,
50
75
  disabled: disabled,
51
76
  readOnly: readOnly
52
- }, void 0, /*#__PURE__*/jsxRuntime.jsx(styles.StyledInput, {
53
- disabled: disabled,
77
+ }, void 0, /*#__PURE__*/jsxRuntime.jsx(styles.StyledInput, _objectSpread(_objectSpread({}, restGlobals), {}, {
78
+ "data-testid": "ds-checkbox",
79
+ id: id,
54
80
  ref: ref => setMultipleRefs.setMultipleRefs([checkboxRef, innerRef])(ref),
55
81
  onKeyDown: handleOnKeyDown,
56
82
  type: "checkbox",
57
83
  checked: checked !== 'mixed' ? checked : undefined,
58
- "aria-controls": ariaControls,
59
- "aria-checked": checked,
60
- "aria-disabled": disabled,
61
- "aria-invalid": hasError,
62
- "aria-readonly": readOnly,
63
- "aria-label": ariaLabel || label,
64
- onFocus: onFocus,
65
- onBlur: onBlur,
66
- name: name,
67
- value: value,
68
- onChange: onChange,
69
- id: id,
70
- "data-testid": "ds-checkbox",
71
- autoFocus: autoFocus,
72
- tabIndex: tabIndex || 0
73
- })), label && /*#__PURE__*/_jsx__default["default"](styles.StyledLabel, {
84
+ "aria-label": ariaLabel || legacyAriaLabel || label,
85
+ "aria-controls": ariaControls || legacyAriaControls,
86
+ tabIndex: tabIndex
87
+ }))), label && /*#__PURE__*/_jsx__default["default"](styles.StyledLabel, {
74
88
  htmlFor: id,
75
89
  disabled: disabled,
76
90
  readOnly: readOnly,
@@ -81,8 +95,8 @@ const DSControlledCheckbox = props => {
81
95
  })));
82
96
  };
83
97
 
84
- const DSControlledCheckboxWithSchema = reactDesc.describe(DSControlledCheckbox);
85
- DSControlledCheckboxWithSchema.propTypes = propTypes.propTypes;
98
+ const DSControlledCheckboxWithSchema = dsPropsHelpers.describe(DSControlledCheckbox);
99
+ DSControlledCheckboxWithSchema.propTypes = reactDescPropTypes.propTypes;
86
100
 
87
101
  exports.DSControlledCheckbox = DSControlledCheckbox;
88
102
  exports.DSControlledCheckboxWithSchema = DSControlledCheckboxWithSchema;
@@ -11,11 +11,11 @@ const throwError = message => {
11
11
  const useValidateProps = (props, propTypes) => {
12
12
  dsPropsHelpers.useValidateTypescriptPropTypes(props, propTypes);
13
13
 
14
- if (typeof props.label === 'undefined' && typeof props.ariaLabel === 'undefined') {
14
+ if (typeof props.label === 'undefined' && typeof props['aria-label'] === 'undefined') {
15
15
  throwError("Please provide a label or ariaLabel property to use this component.");
16
16
  }
17
17
 
18
- if (props.checked === 'mixed' && typeof props.ariaControls === 'undefined') {
18
+ if (props.checked === 'mixed' && typeof props['aria-controls'] === 'undefined') {
19
19
  throwError("Please provide an ariaControls property to use a checkbox mixed state. \n This property must be a string containing all the ids that this mixed checkbox is controlling.");
20
20
  }
21
21
  };
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ require('core-js/modules/esnext.async-iterator.filter.js');
6
+ require('core-js/modules/esnext.iterator.constructor.js');
7
+ require('core-js/modules/esnext.iterator.filter.js');
8
+ require('core-js/modules/esnext.async-iterator.for-each.js');
9
+ require('core-js/modules/esnext.iterator.for-each.js');
10
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
11
+ var dsPropsHelpers = require('@elliemae/ds-props-helpers');
12
+
13
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
14
+
15
+ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
16
+
17
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18
+
19
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
20
+ const defaultProps = {
21
+ hasError: false,
22
+ tabIndex: undefined,
23
+ checked: false
24
+ };
25
+ const propTypes = _objectSpread(_objectSpread({}, dsPropsHelpers.globalAttributesPropTypes), {}, {
26
+ label: dsPropsHelpers.PropTypes.string.description('Checkbox Label property. This label is also going to be used as an aria-label for screen readers.'),
27
+ hasError: dsPropsHelpers.PropTypes.bool.description('Whether the checkbox has error or not.'),
28
+ innerRef: dsPropsHelpers.PropTypes.oneOfType([dsPropsHelpers.PropTypes.func, dsPropsHelpers.PropTypes.object]).description('Checkbox input ref.')
29
+ });
30
+
31
+ exports.defaultProps = defaultProps;
32
+ exports.propTypes = propTypes;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  /* eslint-disable max-params */
6
- const handleCheckMarkColor = (_ref, disabled, readOnly, hasError, checked, isHovering) => {
6
+ const handleCheckMarkColor = (_ref, checked, isHovering, disabled, readOnly, hasError) => {
7
7
  let {
8
8
  colors
9
9
  } = _ref;
@@ -26,14 +26,14 @@ const handleCheckmark = function (theme, checked, disabled, readOnly, hasError)
26
26
  let isHovering = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
27
27
 
28
28
  if (checked === 'mixed') {
29
- return "&:before {\n position: absolute;\n content: '';\n top: 6px;\n left: 3px;\n background: ".concat(handleCheckMarkColor(theme, disabled, readOnly, hasError, checked, isHovering), ";\n width: ").concat(theme.space.xxs, ";\n height: 2px;\n }");
29
+ return "&:before {\n position: absolute;\n content: '';\n top: 6px;\n left: 3px;\n background: ".concat(handleCheckMarkColor(theme, checked, isHovering, disabled, readOnly, hasError), ";\n width: ").concat(theme.space.xxs, ";\n height: 2px;\n }");
30
30
  }
31
31
 
32
32
  if (checked) {
33
- return "&:before {\n position: absolute;\n content: '';\n top: 3px;\n left: 2px;\n border-left: 2px solid ".concat(handleCheckMarkColor(theme, disabled, readOnly, hasError, checked, isHovering), ";\n border-bottom: 2px solid ").concat(handleCheckMarkColor(theme, disabled, readOnly, hasError, checked, isHovering), ";\n height: 5px;\n width: 10px;\n transform: rotate(-45deg);\n }");
33
+ return "&:before {\n position: absolute;\n content: '';\n top: 3px;\n left: 2px;\n border-left: 2px solid ".concat(handleCheckMarkColor(theme, checked, isHovering, disabled, readOnly, hasError), ";\n border-bottom: 2px solid ").concat(handleCheckMarkColor(theme, checked, isHovering, disabled, readOnly, hasError), ";\n height: 5px;\n width: 10px;\n transform: rotate(-45deg);\n }");
34
34
  }
35
35
 
36
- return undefined;
36
+ return '';
37
37
  };
38
38
  const handleBackgroundColor = (_ref2, disabled) => {
39
39
  let {
@@ -24,8 +24,7 @@ const defaultProps = {
24
24
  onChange: lodash.noop,
25
25
  onKeyDown: lodash.noop,
26
26
  onFilter: lodash.noop,
27
- onMenuOpen: lodash.noop,
28
- innerRef: /*#__PURE__*/React.createRef()
27
+ onMenuOpen: lodash.noop
29
28
  };
30
29
  const defaultContext = {
31
30
  props: defaultProps,
@@ -43,8 +42,6 @@ const defaultContext = {
43
42
  selectedOptionsRef: /*#__PURE__*/React.createRef(),
44
43
  selectAllCheckboxRef: /*#__PURE__*/React.createRef(),
45
44
  toggleSelectionButtonRef: /*#__PURE__*/React.createRef(),
46
- showSelectedValue: false,
47
- setShowSelectedValue: lodash.noop,
48
45
  focusOptionIdx: '',
49
46
  setCurrentOption: lodash.noop,
50
47
  showSelectedOptions: false,
@@ -24,11 +24,14 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
24
24
 
25
25
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
26
26
  const useComboBox = props => {
27
- const propsWithDefaults = dsPropsHelpers.useMemoMergePropsWithDefault(props, ComboBoxCTX.defaultProps);
27
+ const defaultPropsWithInnerRef = _objectSpread(_objectSpread({}, ComboBoxCTX.defaultProps), {}, {
28
+ innerRef: React.useRef(null)
29
+ });
30
+
31
+ const propsWithDefaults = dsPropsHelpers.useMemoMergePropsWithDefault(props, defaultPropsWithInnerRef);
28
32
  dsPropsHelpers.useValidateTypescriptPropTypes(propsWithDefaults, reactDescPropTypes.ComboboxPropTypes);
29
33
  const [showPopover, setShowPopover] = React.useState(false);
30
34
  const [referenceElement, setReferenceElement] = React.useState(null);
31
- const [showSelectedValue, setShowSelectedValue] = React.useState(false);
32
35
  const [showSelectedOptions, setShowSelectedOptions] = React.useState(false);
33
36
  const [hasFocus, setHasFocus] = React.useState(false);
34
37
  const [focusOptionIdx, setCurrentOption] = React.useState('');
@@ -67,7 +70,6 @@ const useComboBox = props => {
67
70
  virtualListHelpers,
68
71
  showPopover,
69
72
  referenceElement,
70
- showSelectedValue,
71
73
  listRef,
72
74
  focusOptionIdx,
73
75
  selectedOptionsRef,
@@ -82,10 +84,9 @@ const useComboBox = props => {
82
84
  setHasFocus,
83
85
  setCurrentOption,
84
86
  scrollOptionIntoView,
85
- setShowSelectedValue,
86
87
  setReferenceElement,
87
88
  setShowPopover
88
- }), [scrollOptionIntoView, correctOptions, propsWithDefaults, virtualListHelpers, focusOptionIdx, showSelectedValue, wrapperListRef, showSelectedOptions, showPopover, pillGroupRef, referenceElement, selectedOptionsRef, controlsWrapperRef, selectAllCheckboxRef, toggleSelectionButtonRef, hasFocus, listRef]);
89
+ }), [scrollOptionIntoView, correctOptions, propsWithDefaults, virtualListHelpers, focusOptionIdx, wrapperListRef, showSelectedOptions, showPopover, pillGroupRef, referenceElement, selectedOptionsRef, controlsWrapperRef, selectAllCheckboxRef, toggleSelectionButtonRef, hasFocus, listRef]);
89
90
  return ctx;
90
91
  };
91
92
 
@@ -22,16 +22,21 @@ const SelectedValuesAllyMsg = () => {
22
22
  } = React.useContext(ComboBoxCTX.ComboBoxContext);
23
23
  const msg = React.useMemo(() => {
24
24
  if (Array.isArray(selectedValues)) {
25
- return "Options selected: ".concat(selectedValues.map(item => item.label).join(', '));
25
+ if (selectedValues.length > 0) {
26
+ return "Options selected: ".concat(selectedValues.map(item => item.label).join(', '));
27
+ }
28
+
29
+ return 'No Options Selected';
26
30
  }
27
31
 
28
32
  if (selectedValues) {
29
33
  return "Option selected: ".concat(selectedValues === null || selectedValues === void 0 ? void 0 : selectedValues.label);
30
34
  }
31
35
 
32
- return '';
36
+ return 'No Option Selected';
33
37
  }, [selectedValues]);
34
38
  return /*#__PURE__*/_jsx__default["default"](styled.StyledA11ySelectedValues, {
39
+ id: "combobox-selected-items",
35
40
  "data-testid": ComboboxDataTestids.ComboboxDataTestid.ALLY_SELECTED_VALUES,
36
41
  "aria-live": "polite",
37
42
  "aria-atomic": "false",
@@ -37,45 +37,31 @@ const Container = () => {
37
37
  const {
38
38
  props,
39
39
  showPopover,
40
- innerRef,
41
40
  setReferenceElement,
42
- setShowPopover,
43
41
  referenceElement
44
42
  } = React.useContext(ComboBoxCTX.ComboBoxContext);
45
43
  const {
46
44
  inline,
47
- disabled,
48
45
  startPlacementPreference,
49
46
  placementOrderPreference,
50
47
  withoutPortal,
51
48
  zIndex
52
49
  } = props;
53
- const handleCloseMenu = React.useCallback(() => {
54
- setShowPopover(false);
55
- if (innerRef.current) innerRef.current.blur();
56
- }, [innerRef, setShowPopover]);
57
50
  const handleMouseDown = React.useCallback(e => {
58
51
  e.preventDefault();
59
52
  }, []);
60
- const handleOnClickContainer = React.useCallback(() => {
61
- if (!disabled) setShowPopover(!showPopover);
62
- }, [setShowPopover, disabled, showPopover]);
63
53
  const StyledContainer = inline ? styled.StyledContainerInline : styled.StyledContainerWithPopper;
64
- const globalAttributes = dsPropsHelpers.useGetGlobalAttributes(props, {
65
- onClick: handleOnClickContainer
66
- }); // Removing possible collisionable props
54
+ const globalAttributes = dsPropsHelpers.useGetGlobalAttributes(props); // Removing possible collisionable props
67
55
 
68
56
  const rest = _objectWithoutProperties__default["default"](globalAttributes, _excluded);
69
57
 
70
58
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
71
59
  children: [/*#__PURE__*/jsxRuntime.jsxs(StyledContainer, _objectSpread(_objectSpread({
72
- ref: setReferenceElement,
73
- onClick: handleOnClickContainer
60
+ ref: setReferenceElement
74
61
  }, rest), {}, {
75
62
  children: [_Controls || (_Controls = /*#__PURE__*/_jsx__default["default"](Controls.Controls, {})), inline ? _MenuList || (_MenuList = /*#__PURE__*/_jsx__default["default"](MenuList.MenuList, {})) : null]
76
63
  })), !inline ? /*#__PURE__*/_jsx__default["default"](dsPopperjs.DSPopperJS, {
77
64
  customOffset: [0, 5],
78
- closeContextMenu: handleCloseMenu,
79
65
  referenceElement: referenceElement,
80
66
  showPopover: showPopover,
81
67
  startPlacementPreference: startPlacementPreference,
@@ -49,6 +49,7 @@ const Controls = () => {
49
49
  var _innerRef$current2;
50
50
 
51
51
  (_innerRef$current2 = innerRef.current) === null || _innerRef$current2 === void 0 ? void 0 : _innerRef$current2.focus();
52
+ setShowPopover(true);
52
53
  }
53
54
  }, [hasFocus, setShowPopover, showPopover, innerRef, inline]);
54
55
 
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var _taggedTemplateLiteral = require('@babel/runtime/helpers/taggedTemplateLiteral');
6
6
  var styled = require('styled-components');
7
7
  var dsSystem = require('@elliemae/ds-system');
8
- var Grid = require('@elliemae/ds-grid');
8
+ var dsGrid = require('@elliemae/ds-grid');
9
9
 
10
10
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
11
 
@@ -26,7 +26,7 @@ const focusBorder = dsSystem.css(_templateObject2 || (_templateObject2 = _tagged
26
26
  } = _ref2;
27
27
  return theme.colors.brand[700];
28
28
  });
29
- const StyledControlsWrapper = /*#__PURE__*/styled__default["default"](Grid.Grid).withConfig({
29
+ const StyledControlsWrapper = /*#__PURE__*/styled__default["default"](dsGrid.Grid).withConfig({
30
30
  componentId: "sc-z30aed-0"
31
31
  })(["background:", ";position:relative;border-radius:2px;min-width:", ";align-items:center;align-content:center;height:28px;padding-left:8px;margin:", ";&::after{display:block;content:' ';position:absolute;top:0;left:0;right:0;bottom:0;border-radius:2px;", " pointer-events:none;z-index:7;}"], _ref3 => {
32
32
  let {
@@ -54,7 +54,7 @@ const StyledControlsWrapper = /*#__PURE__*/styled__default["default"](Grid.Grid)
54
54
  const StyledSelection = /*#__PURE__*/styled__default["default"].div.withConfig({
55
55
  componentId: "sc-z30aed-1"
56
56
  })(["font-size:13px;margin-right:3px;line-height:13px;display:flex;"]);
57
- const StyledHeaderActionsWrapper = /*#__PURE__*/styled__default["default"](Grid.Grid).withConfig({
57
+ const StyledHeaderActionsWrapper = /*#__PURE__*/styled__default["default"](dsGrid.Grid).withConfig({
58
58
  componentId: "sc-z30aed-2"
59
59
  })(["height:100%;.em-ds-button--text:focus::after{border:none;}"]);
60
60
  const StyleDropdownIndicator = /*#__PURE__*/styled__default["default"].div.withConfig({
@@ -23,7 +23,8 @@ const ControlsInput = () => {
23
23
  disabled,
24
24
  innerRef
25
25
  },
26
- focusOptionIdx
26
+ focusOptionIdx,
27
+ showPopover
27
28
  } = React.useContext(ComboBoxCTX.ComboBoxContext);
28
29
  const {
29
30
  onInputKeyDown
@@ -46,10 +47,11 @@ const ControlsInput = () => {
46
47
  "data-testid": ComboboxDataTestids.ComboboxDataTestid.INPUT,
47
48
  autoFocus: autoFocus,
48
49
  id: "combo-input",
49
- "aria-owns": "combo-listbox",
50
+ "aria-controls": "combo-listbox",
50
51
  "aria-activedescendant": focusOptionIdx,
51
- "aria-expanded": "false",
52
+ "aria-expanded": showPopover,
52
53
  "aria-haspopup": "true",
54
+ "aria-describedby": "combobox-selected-items",
53
55
  role: "combobox",
54
56
  disabled: disabled,
55
57
  style: {
@@ -21,6 +21,7 @@ const useControlsInput = () => {
21
21
  },
22
22
  setShowPopover,
23
23
  setCurrentOption,
24
+ showSelectedOptions,
24
25
  wrapperListRef,
25
26
  setHasFocus,
26
27
  setShowSelectedOptions
@@ -52,12 +53,13 @@ const useControlsInput = () => {
52
53
 
53
54
  if (!(wrapperListRef !== null && wrapperListRef !== void 0 && (_wrapperListRef$curre = wrapperListRef.current) !== null && _wrapperListRef$curre !== void 0 && _wrapperListRef$curre.contains(document.activeElement))) {
54
55
  setShowPopover(false);
56
+ if (showSelectedOptions) setShowSelectedOptions(false);
55
57
  }
56
58
 
57
59
  setCurrentOption('');
58
60
  onFilter('');
59
61
  });
60
- }, [setHasFocus, setCurrentOption, wrapperListRef, onFilter, innerRef, setShowPopover]);
62
+ }, [setHasFocus, showSelectedOptions, setShowSelectedOptions, setCurrentOption, wrapperListRef, onFilter, innerRef, setShowPopover]);
61
63
  const handleOnFocus = React.useCallback(() => {
62
64
  setHasFocus(true);
63
65
  }, [setHasFocus]);
@@ -37,6 +37,7 @@ const HeaderList = () => {
37
37
  const {
38
38
  handleKeyDown,
39
39
  handleOnMouseDown,
40
+ handleFilterSelectionBtnOnBlur,
40
41
  handleToggle,
41
42
  checkboxStatus,
42
43
  handleSelectAllCheckboxChange
@@ -46,9 +47,9 @@ const HeaderList = () => {
46
47
  onMouseDown: handleOnMouseDown
47
48
  }, void 0, /*#__PURE__*/_jsx__default["default"](styled.StyledSelectAllCheckbox, {}, void 0, isSelectAllSupplied && isClearAllSupplied && /*#__PURE__*/_jsx__default["default"](dsControlledForm.DSControlledCheckbox, {
48
49
  checked: checkboxStatus,
49
- ariaControls: checkboxStatus === 'mixed' ? multiSelectedValues.map(item => item.dsId).join(' ') : '',
50
+ "aria-controls": checkboxStatus === 'mixed' ? multiSelectedValues.map(item => item.dsId).join(' ') : '',
50
51
  name: "select-all-checkbox",
51
- ariaLabel: "Select/Unselect All Items",
52
+ "aria-label": "Select/Unselect All Items",
52
53
  id: "select-all-checkbox",
53
54
  onChange: handleSelectAllCheckboxChange,
54
55
  "data-testid": ComboboxDataTestids.ComboboxDataTestid.SELECT_ALL_CHECKBOX,
@@ -63,13 +64,7 @@ const HeaderList = () => {
63
64
  },
64
65
  innerRef: selectAllCheckboxRef
65
66
  })), /*#__PURE__*/_jsx__default["default"](styled.StyledSelectedItems, {}, void 0, multiSelectedValues.length > 0 ? /*#__PURE__*/_jsx__default["default"](styled.StyledButtonSelection, {
66
- onBlur: () => {
67
- setTimeout(() => {
68
- var _innerRef$current2;
69
-
70
- return (_innerRef$current2 = innerRef.current) === null || _innerRef$current2 === void 0 ? void 0 : _innerRef$current2.focus();
71
- });
72
- },
67
+ onBlur: handleFilterSelectionBtnOnBlur,
73
68
  buttonType: "text",
74
69
  onClick: handleToggle,
75
70
  labelText: !showSelectedOptions ? "SHOW SELECTED [".concat(multiSelectedValues.length, "]") : 'SHOW ALL',
@@ -53,6 +53,12 @@ const useHeaderListHandlers = () => {
53
53
  setShowPopover(false);
54
54
  }
55
55
  }, [setShowPopover]);
56
+ const handleFilterSelectionBtnOnBlur = React.useCallback(() => {
57
+ var _innerRef$current;
58
+
59
+ if (showSelectedOptions) setShowSelectedOptions(false);
60
+ (_innerRef$current = innerRef.current) === null || _innerRef$current === void 0 ? void 0 : _innerRef$current.focus();
61
+ }, [setShowSelectedOptions, showSelectedOptions, innerRef]);
56
62
  React.useEffect(() => {
57
63
  if (multiSelectedValues.length === 0) {
58
64
  setShowSelectedOptions(false);
@@ -61,10 +67,11 @@ const useHeaderListHandlers = () => {
61
67
  return React.useMemo(() => ({
62
68
  handleKeyDown,
63
69
  handleToggle,
70
+ handleFilterSelectionBtnOnBlur,
64
71
  handleOnMouseDown,
65
72
  handleSelectAllCheckboxChange,
66
73
  checkboxStatus
67
- }), [handleKeyDown, handleToggle, handleOnMouseDown, checkboxStatus, handleSelectAllCheckboxChange]);
74
+ }), [handleKeyDown, handleFilterSelectionBtnOnBlur, handleToggle, handleOnMouseDown, checkboxStatus, handleSelectAllCheckboxChange]);
68
75
  };
69
76
 
70
77
  exports.useHeaderListHandlers = useHeaderListHandlers;
@@ -10,7 +10,6 @@ var ComboboxDataTestids = require('../../ComboboxDataTestids.js');
10
10
  var ComboBoxCTX = require('../../ComboBoxCTX.js');
11
11
  var HeaderList = require('../header-list/HeaderList.js');
12
12
  var useOnElementResize = require('../../utils/hooks/useOnElementResize.js');
13
- var index = require('../empty-state/index.js');
14
13
  var useItemRenderer = require('./useItemRenderer.js');
15
14
  var useMenuList = require('./useMenuList.js');
16
15
  var jsxRuntime = require('react/jsx-runtime');
@@ -19,7 +18,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
19
18
 
20
19
  var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
21
20
 
22
- var _HeaderList, _EmptyState;
21
+ var _HeaderList, _StyledNoResultsWrapp;
23
22
 
24
23
  const MenuList = () => {
25
24
  var _innerRef$current;
@@ -40,9 +39,6 @@ const MenuList = () => {
40
39
  controlsWrapperRef,
41
40
  virtualListHelpers
42
41
  } = React.useContext(ComboBoxCTX.ComboBoxContext);
43
- const {
44
- totalSize
45
- } = virtualListHelpers;
46
42
  const isOnCreatedSupplied = onCreate !== lodash.noop;
47
43
  const multiple = Array.isArray(selectedValues);
48
44
  const withHeader = !inline && multiple && options.length > 0 && ((_innerRef$current = innerRef.current) === null || _innerRef$current === void 0 ? void 0 : _innerRef$current.value) === '';
@@ -52,12 +48,8 @@ const MenuList = () => {
52
48
  width
53
49
  } = useOnElementResize.useOnElementResize(controlsWrapperRef);
54
50
  const listWidth = React.useMemo(() => menuMinWidth || "".concat(referenceElement === null || referenceElement === void 0 ? void 0 : referenceElement.offsetWidth), // eslint-disable-next-line react-hooks/exhaustive-deps
55
- [menuMinWidth, referenceElement, width]); // validate funcionality with ux
56
- // const handleOnFocus = useCallback(() => {
57
- // // innerRef.current?.focus();
58
- // }, [innerRef]);
59
-
60
- return /*#__PURE__*/jsxRuntime.jsxs(styled.StyledListWrapper, {
51
+ [menuMinWidth, referenceElement, width]);
52
+ const list = React.useMemo(() => /*#__PURE__*/jsxRuntime.jsxs(styled.StyledListWrapper, {
61
53
  ref: wrapperListRef,
62
54
  inline: inline,
63
55
  onMouseDown: e => e.preventDefault(),
@@ -72,11 +64,16 @@ const MenuList = () => {
72
64
  role: "listbox",
73
65
  "data-testid": ComboboxDataTestids.ComboboxDataTestid.LIST,
74
66
  style: {
75
- height: totalSize,
67
+ height: virtualListHelpers === null || virtualListHelpers === void 0 ? void 0 : virtualListHelpers.totalSize,
76
68
  margin: inline ? '0px' : '8px 0px'
77
69
  }
78
70
  }, void 0, ItemRenderer)
79
- }) : _EmptyState || (_EmptyState = /*#__PURE__*/_jsx__default["default"](index.EmptyState, {}))]
71
+ }) : _StyledNoResultsWrapp || (_StyledNoResultsWrapp = /*#__PURE__*/_jsx__default["default"](styled.StyledNoResultsWrapper, {
72
+ id: "id-no-results"
73
+ }, void 0, "No matches found"))]
74
+ }), [ItemRenderer, inline, isOnCreatedSupplied, listRef, listWidth, menuMaxHeight, options.length, virtualListHelpers === null || virtualListHelpers === void 0 ? void 0 : virtualListHelpers.totalSize, withHeader, wrapperListRef]);
75
+ return /*#__PURE__*/jsxRuntime.jsx(jsxRuntime.Fragment, {
76
+ children: list
80
77
  });
81
78
  };
82
79
 
@@ -30,8 +30,12 @@ const StyledVirtualListWrapper = /*#__PURE__*/styled__default["default"].div.wit
30
30
  const StyledCreatableLabel = /*#__PURE__*/styled__default["default"].span.withConfig({
31
31
  componentId: "sc-g2fmft-3"
32
32
  })(["font-weight:bold;font-style:italic;"]);
33
+ const StyledNoResultsWrapper = /*#__PURE__*/styled__default["default"].div.withConfig({
34
+ componentId: "sc-g2fmft-4"
35
+ })(["padding:16px;"]);
33
36
 
34
37
  exports.StyledCreatableLabel = StyledCreatableLabel;
35
38
  exports.StyledList = StyledList;
36
39
  exports.StyledListWrapper = StyledListWrapper;
40
+ exports.StyledNoResultsWrapper = StyledNoResultsWrapper;
37
41
  exports.StyledVirtualListWrapper = StyledVirtualListWrapper;