@spaced-out/ui-design-system 0.1.37-beta.1 → 0.1.37

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 (42) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/lib/components/ButtonDropdown/SimpleButtonDropdown.js +75 -0
  3. package/lib/components/ButtonDropdown/SimpleButtonDropdown.js.flow +142 -0
  4. package/lib/components/ButtonDropdown/index.js +21 -12
  5. package/lib/components/ButtonDropdown/index.js.flow +2 -2
  6. package/lib/components/Dropdown/Dropdown.js +1 -1
  7. package/lib/components/Dropdown/Dropdown.js.flow +1 -1
  8. package/lib/components/Dropdown/SimpleDropdown.js +74 -0
  9. package/lib/components/Dropdown/SimpleDropdown.js.flow +134 -0
  10. package/lib/components/Dropdown/index.js +11 -0
  11. package/lib/components/Dropdown/index.js.flow +1 -0
  12. package/lib/components/FocusManager/FocusManager.js +7 -1
  13. package/lib/components/FocusManager/FocusManager.js.flow +7 -0
  14. package/lib/components/FocusManagerWithArrowKeyNavigation/FocusManagerWithArrowKeyNavigation.js +102 -0
  15. package/lib/components/FocusManagerWithArrowKeyNavigation/FocusManagerWithArrowKeyNavigation.js.flow +118 -0
  16. package/lib/components/FocusManagerWithArrowKeyNavigation/FocusManagerWithArrowKeyNavigation.module.css +7 -0
  17. package/lib/components/FocusManagerWithArrowKeyNavigation/index.js +16 -0
  18. package/lib/components/FocusManagerWithArrowKeyNavigation/index.js.flow +3 -0
  19. package/lib/components/InlineDropdown/SimpleInlineDropdown.js +75 -0
  20. package/lib/components/InlineDropdown/SimpleInlineDropdown.js.flow +139 -0
  21. package/lib/components/InlineDropdown/index.js +11 -0
  22. package/lib/components/InlineDropdown/index.js.flow +1 -0
  23. package/lib/components/Menu/Menu.js +2 -1
  24. package/lib/components/Menu/Menu.js.flow +12 -0
  25. package/lib/components/Menu/MenuOptionButton.js +9 -4
  26. package/lib/components/Menu/MenuOptionButton.js.flow +10 -2
  27. package/lib/components/OptionButton/SimpleOptionButton.js +74 -0
  28. package/lib/components/OptionButton/SimpleOptionButton.js.flow +139 -0
  29. package/lib/components/OptionButton/index.js +21 -6
  30. package/lib/components/OptionButton/index.js.flow +3 -2
  31. package/lib/components/RadioButton/RadioButton.js +2 -1
  32. package/lib/components/RadioButton/RadioButton.js.flow +1 -0
  33. package/lib/components/RadioButton/RadioButton.module.css +4 -0
  34. package/lib/components/Typeahead/SimpleTypeahead.js +76 -0
  35. package/lib/components/Typeahead/SimpleTypeahead.js.flow +134 -0
  36. package/lib/components/Typeahead/Typeahead.js +3 -4
  37. package/lib/components/Typeahead/Typeahead.js.flow +123 -117
  38. package/lib/components/Typeahead/index.js +21 -6
  39. package/lib/components/Typeahead/index.js.flow +2 -2
  40. package/lib/components/index.js +11 -0
  41. package/lib/components/index.js.flow +1 -0
  42. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.1.37](https://github.com/spaced-out/ui-design-system/compare/v0.1.37-beta.1...v0.1.37) (2023-07-18)
6
+
7
+
8
+ ### Features
9
+
10
+ * focus manager with arrow keys navigation ([#126](https://github.com/spaced-out/ui-design-system/issues/126)) ([2c728f4](https://github.com/spaced-out/ui-design-system/commit/2c728f4c5e1ad10ed7ae1ca209a0038de6db0b9b))
11
+ * simple components for Dropdown, Typeahead and other Menu derivatives, option color fixes ([#123](https://github.com/spaced-out/ui-design-system/issues/123)) ([95c640e](https://github.com/spaced-out/ui-design-system/commit/95c640e34356e06d2a1be5e8d180dfb662d1045e))
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * ref-forwarding in Typeahead & handled cursor pointer on label in disabled case of radiobutton ([#124](https://github.com/spaced-out/ui-design-system/issues/124)) ([0d6af6e](https://github.com/spaced-out/ui-design-system/commit/0d6af6ea452c192827cbf0e504a7a3d6c23865ba))
17
+
5
18
  ### [0.1.37-beta.1](https://github.com/spaced-out/ui-design-system/compare/v0.1.37-beta.0...v0.1.37-beta.1) (2023-07-05)
6
19
 
7
20
 
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SimpleButtonDropdown = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _menu = require("../../utils/menu");
9
+ var _ButtonDropdown = require("./ButtonDropdown");
10
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
+ 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; }
12
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
13
+ const SimpleButtonDropdownBase = (props, ref) => {
14
+ const {
15
+ size = 'medium',
16
+ classNames,
17
+ anchorPosition,
18
+ options,
19
+ optionsVariant,
20
+ allowSearch,
21
+ selectedKeys,
22
+ onOptionSelect,
23
+ onMenuOpen,
24
+ onMenuClose,
25
+ resolveLabel,
26
+ resolveSecondaryLabel,
27
+ children,
28
+ isFluid,
29
+ ...buttonProps
30
+ } = props;
31
+ const [btnText, setBtnText] = React.useState('');
32
+ const [buttonDropdownSelectedKeys, setButtonDropdownSelectedKeys] = React.useState(selectedKeys);
33
+ React.useEffect(() => {
34
+ const newBtnText = (0, _menu.getButtonLabelFromSelectedKeys)(selectedKeys, children);
35
+ setButtonDropdownSelectedKeys(selectedKeys);
36
+ setBtnText(newBtnText);
37
+ }, [selectedKeys]);
38
+ const handleOptionChange = selectedOption => {
39
+ let newSelectedKeys = [];
40
+ if (optionsVariant === 'checkbox') {
41
+ newSelectedKeys = (0, _menu.getSelectedKeysFromSelectedOption)(selectedOption, buttonDropdownSelectedKeys);
42
+ } else {
43
+ newSelectedKeys = [selectedOption.key];
44
+ }
45
+ const newBtnText = (0, _menu.getButtonLabelFromSelectedKeys)(newSelectedKeys, children);
46
+ setButtonDropdownSelectedKeys(newSelectedKeys);
47
+ setBtnText(newBtnText);
48
+ setTimeout(() => {
49
+ onOptionSelect?.(selectedOption);
50
+ });
51
+ };
52
+ React.useImperativeHandle(ref, () => ({
53
+ selectedKeys: buttonDropdownSelectedKeys
54
+ }));
55
+ return /*#__PURE__*/React.createElement(_ButtonDropdown.ButtonDropdown, _extends({}, buttonProps, {
56
+ anchorPosition: anchorPosition,
57
+ classNames: classNames,
58
+ size: size,
59
+ onOptionSelect: handleOptionChange,
60
+ onMenuOpen: onMenuOpen,
61
+ onMenuClose: onMenuClose,
62
+ menu: {
63
+ isFluid,
64
+ options,
65
+ selectedKeys: buttonDropdownSelectedKeys,
66
+ optionsVariant,
67
+ allowSearch,
68
+ resolveLabel,
69
+ resolveSecondaryLabel,
70
+ size
71
+ }
72
+ }), optionsVariant === 'checkbox' ? btnText : children);
73
+ };
74
+ const SimpleButtonDropdown = /*#__PURE__*/React.forwardRef(SimpleButtonDropdownBase);
75
+ exports.SimpleButtonDropdown = SimpleButtonDropdown;
@@ -0,0 +1,142 @@
1
+ // @flow strict
2
+
3
+ import * as React from 'react';
4
+
5
+ import {
6
+ getButtonLabelFromSelectedKeys,
7
+ getSelectedKeysFromSelectedOption,
8
+ } from '../../utils/menu';
9
+ import type {ButtonProps} from '../Button';
10
+ import type {MenuOption, MenuOptionsVariant} from '../Menu';
11
+ import type {BaseTooltipProps} from '../Tooltip';
12
+
13
+ import type {AnchorType} from './ButtonDropdown';
14
+ import {ButtonDropdown} from './ButtonDropdown';
15
+
16
+
17
+ type ClassNames = $ReadOnly<{
18
+ buttonWrapper?: string,
19
+ dropdownContainer?: string,
20
+ buttonIcon?: string,
21
+ }>;
22
+
23
+ export type SimpleButtonDropdownRef = {
24
+ selectedKeys?: Array<string>,
25
+ };
26
+
27
+ export type SimpleButtonDropdownProps = {
28
+ // Input props
29
+ ...ButtonProps,
30
+
31
+ classNames?: ClassNames,
32
+ anchorPosition?: AnchorType,
33
+ tooltip?: BaseTooltipProps,
34
+
35
+ // Menu props
36
+ options?: Array<MenuOption>,
37
+
38
+ optionsVariant?: MenuOptionsVariant,
39
+ allowSearch?: boolean,
40
+ selectedKeys?: Array<string>,
41
+
42
+ // events
43
+ onOptionSelect?: (option: MenuOption) => mixed,
44
+ onMenuOpen?: () => mixed,
45
+ onMenuClose?: () => mixed,
46
+
47
+ // Resolvers
48
+ resolveLabel?: (option: MenuOption) => string | React.Node,
49
+ resolveSecondaryLabel?: (option: MenuOption) => string | React.Node,
50
+ ...
51
+ };
52
+
53
+ const SimpleButtonDropdownBase = (props: SimpleButtonDropdownProps, ref) => {
54
+ const {
55
+ size = 'medium',
56
+ classNames,
57
+ anchorPosition,
58
+ options,
59
+ optionsVariant,
60
+ allowSearch,
61
+ selectedKeys,
62
+ onOptionSelect,
63
+ onMenuOpen,
64
+ onMenuClose,
65
+ resolveLabel,
66
+ resolveSecondaryLabel,
67
+ children,
68
+ isFluid,
69
+ ...buttonProps
70
+ } = props;
71
+
72
+ const [btnText, setBtnText] = React.useState('');
73
+ const [buttonDropdownSelectedKeys, setButtonDropdownSelectedKeys] =
74
+ React.useState(selectedKeys);
75
+
76
+ React.useEffect(() => {
77
+ const newBtnText = getButtonLabelFromSelectedKeys(selectedKeys, children);
78
+
79
+ setButtonDropdownSelectedKeys(selectedKeys);
80
+ setBtnText(newBtnText);
81
+ }, [selectedKeys]);
82
+
83
+ const handleOptionChange = (selectedOption: MenuOption) => {
84
+ let newSelectedKeys = [];
85
+
86
+ if (optionsVariant === 'checkbox') {
87
+ newSelectedKeys = getSelectedKeysFromSelectedOption(
88
+ selectedOption,
89
+ buttonDropdownSelectedKeys,
90
+ );
91
+ } else {
92
+ newSelectedKeys = [selectedOption.key];
93
+ }
94
+
95
+ const newBtnText = getButtonLabelFromSelectedKeys(
96
+ newSelectedKeys,
97
+ children,
98
+ );
99
+
100
+ setButtonDropdownSelectedKeys(newSelectedKeys);
101
+ setBtnText(newBtnText);
102
+
103
+ setTimeout(() => {
104
+ onOptionSelect?.(selectedOption);
105
+ });
106
+ };
107
+
108
+ React.useImperativeHandle(ref, () => ({
109
+ selectedKeys: buttonDropdownSelectedKeys,
110
+ }));
111
+
112
+ return (
113
+ <ButtonDropdown
114
+ {...buttonProps}
115
+ anchorPosition={anchorPosition}
116
+ classNames={classNames}
117
+ size={size}
118
+ onOptionSelect={handleOptionChange}
119
+ onMenuOpen={onMenuOpen}
120
+ onMenuClose={onMenuClose}
121
+ menu={{
122
+ isFluid,
123
+ options,
124
+ selectedKeys: buttonDropdownSelectedKeys,
125
+ optionsVariant,
126
+ allowSearch,
127
+ resolveLabel,
128
+ resolveSecondaryLabel,
129
+ size,
130
+ }}
131
+ >
132
+ {optionsVariant === 'checkbox' ? btnText : children}
133
+ </ButtonDropdown>
134
+ );
135
+ };
136
+
137
+ export const SimpleButtonDropdown: React.AbstractComponent<
138
+ SimpleButtonDropdownProps,
139
+ SimpleButtonDropdownRef,
140
+ > = React.forwardRef<SimpleButtonDropdownProps, SimpleButtonDropdownRef>(
141
+ SimpleButtonDropdownBase,
142
+ );
@@ -3,16 +3,25 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "ANCHOR_POSITION_TYPE", {
7
- enumerable: true,
8
- get: function () {
9
- return _ButtonDropdown.ANCHOR_POSITION_TYPE;
10
- }
6
+ var _ButtonDropdown = require("./ButtonDropdown");
7
+ Object.keys(_ButtonDropdown).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _ButtonDropdown[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _ButtonDropdown[key];
14
+ }
15
+ });
11
16
  });
12
- Object.defineProperty(exports, "ButtonDropdown", {
13
- enumerable: true,
14
- get: function () {
15
- return _ButtonDropdown.ButtonDropdown;
16
- }
17
- });
18
- var _ButtonDropdown = require("./ButtonDropdown");
17
+ var _SimpleButtonDropdown = require("./SimpleButtonDropdown");
18
+ Object.keys(_SimpleButtonDropdown).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _SimpleButtonDropdown[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _SimpleButtonDropdown[key];
25
+ }
26
+ });
27
+ });
@@ -1,4 +1,4 @@
1
1
  // @flow strict
2
2
 
3
- export type {AnchorType, ButtonDropdownProps} from './ButtonDropdown';
4
- export {ANCHOR_POSITION_TYPE, ButtonDropdown} from './ButtonDropdown';
3
+ export * from './ButtonDropdown';
4
+ export * from './SimpleButtonDropdown';
@@ -65,7 +65,7 @@ const Dropdown = /*#__PURE__*/React.forwardRef((_ref, ref) => {
65
65
  placeholder: placeholder,
66
66
  value: dropdownInputText,
67
67
  classNames: {
68
- box: _DropdownModule.default.inputBox
68
+ box: (0, _classify.classify)(_DropdownModule.default.inputBox, classNames?.box)
69
69
  },
70
70
  iconRightName: isOpen ? 'angle-up' : 'angle-down',
71
71
  readOnly: true,
@@ -83,7 +83,7 @@ export const Dropdown: React$AbstractComponent<
83
83
  size={size}
84
84
  placeholder={placeholder}
85
85
  value={dropdownInputText}
86
- classNames={{box: css.inputBox}}
86
+ classNames={{box: classify(css.inputBox, classNames?.box)}}
87
87
  iconRightName={isOpen ? 'angle-up' : 'angle-down'}
88
88
  readOnly
89
89
  onContainerClick={(e) => {
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SimpleDropdown = void 0;
7
+ var React = _interopRequireWildcard(require("react"));
8
+ var _menu = require("../../utils/menu");
9
+ var _Dropdown = require("./Dropdown");
10
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
+ 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; }
12
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
13
+ const SimpleDropdownBase = (props, ref) => {
14
+ const {
15
+ size = 'medium',
16
+ classNames,
17
+ placeholder = 'Select...',
18
+ options,
19
+ optionsVariant,
20
+ allowSearch,
21
+ selectedKeys,
22
+ onChange,
23
+ onMenuOpen,
24
+ onMenuClose,
25
+ resolveLabel,
26
+ resolveSecondaryLabel,
27
+ ...inputProps
28
+ } = props;
29
+ const [dropdownInputText, setDropdownInputText] = React.useState('');
30
+ const [dropdownSelectedKeys, setDropdownSelectedKeys] = React.useState(selectedKeys);
31
+ React.useEffect(() => {
32
+ const newDropdownText = (0, _menu.getTextLabelFromSelectedKeys)(selectedKeys, options);
33
+ setDropdownSelectedKeys(selectedKeys);
34
+ setDropdownInputText(newDropdownText);
35
+ }, [selectedKeys]);
36
+ const handleOptionChange = selectedOption => {
37
+ let newSelectedKeys = [];
38
+ if (optionsVariant === 'checkbox') {
39
+ newSelectedKeys = (0, _menu.getSelectedKeysFromSelectedOption)(selectedOption, dropdownSelectedKeys);
40
+ } else {
41
+ newSelectedKeys = [selectedOption.key];
42
+ }
43
+ const newDropdownText = (0, _menu.getTextLabelFromSelectedKeys)(newSelectedKeys, options);
44
+ setDropdownSelectedKeys(newSelectedKeys);
45
+ setDropdownInputText(newDropdownText);
46
+ setTimeout(() => {
47
+ onChange?.(selectedOption);
48
+ });
49
+ };
50
+ React.useImperativeHandle(ref, () => ({
51
+ selectedKeys: dropdownSelectedKeys
52
+ }));
53
+ return /*#__PURE__*/React.createElement(_Dropdown.Dropdown, _extends({}, inputProps, {
54
+ classNames: classNames,
55
+ label: "Form Label",
56
+ size: size,
57
+ placeholder: placeholder,
58
+ onChange: handleOptionChange,
59
+ onMenuOpen: onMenuOpen,
60
+ onMenuClose: onMenuClose,
61
+ dropdownInputText: dropdownInputText,
62
+ menu: {
63
+ options,
64
+ selectedKeys: dropdownSelectedKeys,
65
+ optionsVariant,
66
+ allowSearch,
67
+ resolveLabel,
68
+ resolveSecondaryLabel,
69
+ size
70
+ }
71
+ }));
72
+ };
73
+ const SimpleDropdown = /*#__PURE__*/React.forwardRef(SimpleDropdownBase);
74
+ exports.SimpleDropdown = SimpleDropdown;
@@ -0,0 +1,134 @@
1
+ // @flow strict
2
+
3
+ import * as React from 'react';
4
+
5
+ import {
6
+ getSelectedKeysFromSelectedOption,
7
+ getTextLabelFromSelectedKeys,
8
+ } from '../../utils/menu';
9
+ import type {InputProps} from '../Input';
10
+ import type {MenuOption, MenuOptionsVariant} from '../Menu';
11
+
12
+ import {Dropdown} from './Dropdown';
13
+
14
+
15
+ type ClassNames = $ReadOnly<{
16
+ wrapper?: string,
17
+ box?: string,
18
+ }>;
19
+
20
+ export type SimpleDropdownRef = {
21
+ selectedKeys?: Array<string>,
22
+ };
23
+
24
+ export type SimpleDropdownProps = {
25
+ // Input props
26
+ ...InputProps,
27
+
28
+ classNames?: ClassNames,
29
+
30
+ // Menu props
31
+ options?: Array<MenuOption>,
32
+
33
+ optionsVariant?: MenuOptionsVariant,
34
+ allowSearch?: boolean,
35
+ selectedKeys?: Array<string>,
36
+
37
+ // events
38
+ onChange?: (option: MenuOption) => mixed,
39
+ onMenuOpen?: () => mixed,
40
+ onMenuClose?: () => mixed,
41
+
42
+ // Resolvers
43
+ resolveLabel?: (option: MenuOption) => string | React.Node,
44
+ resolveSecondaryLabel?: (option: MenuOption) => string | React.Node,
45
+ ...
46
+ };
47
+
48
+ const SimpleDropdownBase = (props: SimpleDropdownProps, ref) => {
49
+ const {
50
+ size = 'medium',
51
+ classNames,
52
+ placeholder = 'Select...',
53
+ options,
54
+ optionsVariant,
55
+ allowSearch,
56
+ selectedKeys,
57
+ onChange,
58
+ onMenuOpen,
59
+ onMenuClose,
60
+ resolveLabel,
61
+ resolveSecondaryLabel,
62
+ ...inputProps
63
+ } = props;
64
+
65
+ const [dropdownInputText, setDropdownInputText] = React.useState('');
66
+ const [dropdownSelectedKeys, setDropdownSelectedKeys] =
67
+ React.useState(selectedKeys);
68
+
69
+ React.useEffect(() => {
70
+ const newDropdownText = getTextLabelFromSelectedKeys(selectedKeys, options);
71
+
72
+ setDropdownSelectedKeys(selectedKeys);
73
+ setDropdownInputText(newDropdownText);
74
+ }, [selectedKeys]);
75
+
76
+ const handleOptionChange = (selectedOption: MenuOption) => {
77
+ let newSelectedKeys = [];
78
+
79
+ if (optionsVariant === 'checkbox') {
80
+ newSelectedKeys = getSelectedKeysFromSelectedOption(
81
+ selectedOption,
82
+ dropdownSelectedKeys,
83
+ );
84
+ } else {
85
+ newSelectedKeys = [selectedOption.key];
86
+ }
87
+
88
+ const newDropdownText = getTextLabelFromSelectedKeys(
89
+ newSelectedKeys,
90
+ options,
91
+ );
92
+
93
+ setDropdownSelectedKeys(newSelectedKeys);
94
+ setDropdownInputText(newDropdownText);
95
+
96
+ setTimeout(() => {
97
+ onChange?.(selectedOption);
98
+ });
99
+ };
100
+
101
+ React.useImperativeHandle(ref, () => ({
102
+ selectedKeys: dropdownSelectedKeys,
103
+ }));
104
+
105
+ return (
106
+ <Dropdown
107
+ {...inputProps}
108
+ classNames={classNames}
109
+ label="Form Label"
110
+ size={size}
111
+ placeholder={placeholder}
112
+ onChange={handleOptionChange}
113
+ onMenuOpen={onMenuOpen}
114
+ onMenuClose={onMenuClose}
115
+ dropdownInputText={dropdownInputText}
116
+ menu={{
117
+ options,
118
+ selectedKeys: dropdownSelectedKeys,
119
+ optionsVariant,
120
+ allowSearch,
121
+ resolveLabel,
122
+ resolveSecondaryLabel,
123
+ size,
124
+ }}
125
+ />
126
+ );
127
+ };
128
+
129
+ export const SimpleDropdown: React.AbstractComponent<
130
+ SimpleDropdownProps,
131
+ SimpleDropdownRef,
132
+ > = React.forwardRef<SimpleDropdownProps, SimpleDropdownRef>(
133
+ SimpleDropdownBase,
134
+ );
@@ -13,4 +13,15 @@ Object.keys(_Dropdown).forEach(function (key) {
13
13
  return _Dropdown[key];
14
14
  }
15
15
  });
16
+ });
17
+ var _SimpleDropdown = require("./SimpleDropdown");
18
+ Object.keys(_SimpleDropdown).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _SimpleDropdown[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _SimpleDropdown[key];
25
+ }
26
+ });
16
27
  });
@@ -1,3 +1,4 @@
1
1
  // @flow strict
2
2
 
3
3
  export * from './Dropdown';
4
+ export * from './SimpleDropdown';
@@ -23,11 +23,17 @@ const FocusManager = props => {
23
23
  classNames,
24
24
  children,
25
25
  initialFocus = -1,
26
+ returnFocus = true,
27
+ modal = true,
28
+ guards = true,
26
29
  ...restFloatingFocusManagerProps
27
30
  } = props;
28
31
  return /*#__PURE__*/React.createElement(_react2.FloatingFocusManager, _extends({
29
32
  context: context,
30
- initialFocus: initialFocus
33
+ initialFocus: initialFocus,
34
+ modal: modal,
35
+ guards: guards,
36
+ returnFocus: returnFocus
31
37
  }, restFloatingFocusManagerProps), /*#__PURE__*/React.createElement("div", {
32
38
  ref: refs.setFloating,
33
39
  "data-testid": "FocusManager",
@@ -21,6 +21,7 @@ export type FocusManagerProps = {
21
21
  initialFocus?: number,
22
22
  returnFocus?: boolean,
23
23
  guards?: boolean,
24
+ modal?: boolean,
24
25
  };
25
26
 
26
27
  export const FocusManager = (props: FocusManagerProps): React.Node => {
@@ -29,6 +30,9 @@ export const FocusManager = (props: FocusManagerProps): React.Node => {
29
30
  classNames,
30
31
  children,
31
32
  initialFocus = -1,
33
+ returnFocus = true,
34
+ modal = true,
35
+ guards = true,
32
36
  ...restFloatingFocusManagerProps
33
37
  } = props;
34
38
 
@@ -36,6 +40,9 @@ export const FocusManager = (props: FocusManagerProps): React.Node => {
36
40
  <FloatingFocusManager
37
41
  context={context}
38
42
  initialFocus={initialFocus}
43
+ modal={modal}
44
+ guards={guards}
45
+ returnFocus={returnFocus}
39
46
  {...restFloatingFocusManagerProps}
40
47
  >
41
48
  <div