@carbon/react 1.67.1 → 1.68.0-rc.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 (39) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +863 -863
  2. package/es/components/ComboBox/ComboBox.js +12 -0
  3. package/es/components/ComposedModal/ModalHeader.js +1 -1
  4. package/es/components/Dropdown/Dropdown.js +3 -2
  5. package/es/components/FeatureFlags/index.d.ts +56 -0
  6. package/es/components/FeatureFlags/index.js +2 -2
  7. package/es/components/FluidMultiSelect/FluidFilterableMultiSelect.d.ts +144 -0
  8. package/es/components/FluidMultiSelect/FluidMultiSelect.Skeleton.d.ts +15 -0
  9. package/es/components/FluidMultiSelect/FluidMultiSelect.Skeleton.js +1 -2
  10. package/es/components/FluidMultiSelect/FluidMultiSelect.d.ts +149 -0
  11. package/es/components/FluidMultiSelect/FluidMultiSelect.js +5 -3
  12. package/es/components/FluidMultiSelect/index.d.ts +13 -0
  13. package/es/components/FluidNumberInput/index.d.ts +2 -2
  14. package/es/components/FluidSearch/index.d.ts +2 -2
  15. package/es/components/FluidSelect/index.d.ts +2 -2
  16. package/es/components/FluidTimePicker/index.d.ts +2 -2
  17. package/es/components/Modal/Modal.js +1 -1
  18. package/es/components/MultiSelect/FilterableMultiSelect.d.ts +2 -2
  19. package/es/components/Tooltip/DefinitionTooltip.js +4 -2
  20. package/es/index.js +2 -2
  21. package/lib/components/ComboBox/ComboBox.js +12 -0
  22. package/lib/components/ComposedModal/ModalHeader.js +1 -1
  23. package/lib/components/Dropdown/Dropdown.js +3 -2
  24. package/lib/components/FeatureFlags/index.d.ts +56 -0
  25. package/lib/components/FluidMultiSelect/FluidFilterableMultiSelect.d.ts +144 -0
  26. package/lib/components/FluidMultiSelect/FluidMultiSelect.Skeleton.d.ts +15 -0
  27. package/lib/components/FluidMultiSelect/FluidMultiSelect.Skeleton.js +1 -2
  28. package/lib/components/FluidMultiSelect/FluidMultiSelect.d.ts +149 -0
  29. package/lib/components/FluidMultiSelect/FluidMultiSelect.js +5 -3
  30. package/lib/components/FluidMultiSelect/index.d.ts +13 -0
  31. package/lib/components/FluidNumberInput/index.d.ts +2 -2
  32. package/lib/components/FluidSearch/index.d.ts +2 -2
  33. package/lib/components/FluidSelect/index.d.ts +2 -2
  34. package/lib/components/FluidTimePicker/index.d.ts +2 -2
  35. package/lib/components/Modal/Modal.js +1 -1
  36. package/lib/components/MultiSelect/FilterableMultiSelect.d.ts +2 -2
  37. package/lib/components/Tooltip/DefinitionTooltip.js +4 -2
  38. package/lib/index.js +4 -4
  39. package/package.json +9 -9
@@ -304,6 +304,12 @@ const ComboBox = /*#__PURE__*/forwardRef((props, ref) => {
304
304
  if (onToggleClick) {
305
305
  onToggleClick(event);
306
306
  }
307
+ if (readOnly) {
308
+ // Prevent the list from opening if readOnly is true
309
+ event.preventDownshiftDefault = true;
310
+ event?.persist?.();
311
+ return;
312
+ }
307
313
  if (event.target === textInput.current && isOpen) {
308
314
  event.preventDownshiftDefault = true;
309
315
  event?.persist?.();
@@ -452,6 +458,12 @@ const ComboBox = /*#__PURE__*/forwardRef((props, ref) => {
452
458
  if (evt.key !== 'Tab') {
453
459
  evt.preventDefault();
454
460
  }
461
+ },
462
+ onClick: evt => {
463
+ // Prevent the default behavior which would open the list
464
+ evt.preventDefault();
465
+ // Focus on the element as per readonly input behavior
466
+ evt.currentTarget.focus();
455
467
  }
456
468
  } : {};
457
469
 
@@ -44,7 +44,7 @@ const ModalHeader = /*#__PURE__*/React__default.forwardRef(function ModalHeader(
44
44
  ref: ref
45
45
  }), label && /*#__PURE__*/React__default.createElement("h2", {
46
46
  className: labelClass
47
- }, label), title && /*#__PURE__*/React__default.createElement("h3", {
47
+ }, label), title && /*#__PURE__*/React__default.createElement("h2", {
48
48
  className: titleClass
49
49
  }, title), children, /*#__PURE__*/React__default.createElement("div", {
50
50
  className: `${prefix}--modal-close-button`
@@ -207,7 +207,9 @@ const Dropdown = /*#__PURE__*/React__default.forwardRef((_ref, ref) => {
207
207
 
208
208
  // needs to be Capitalized for react to render it correctly
209
209
  const ItemToElement = itemToElement;
210
- const toggleButtonProps = getToggleButtonProps();
210
+ const toggleButtonProps = getToggleButtonProps({
211
+ 'aria-label': ariaLabel || deprecatedAriaLabel
212
+ });
211
213
  const helper = helperText && !isFluid ? /*#__PURE__*/React__default.createElement("div", {
212
214
  id: helperId,
213
215
  className: helperClasses
@@ -282,7 +284,6 @@ const Dropdown = /*#__PURE__*/React__default.forwardRef((_ref, ref) => {
282
284
  }, getLabelProps()), titleText), /*#__PURE__*/React__default.createElement(ListBox, {
283
285
  onFocus: handleFocus,
284
286
  onBlur: handleFocus,
285
- "aria-label": deprecatedAriaLabel || ariaLabel,
286
287
  size: size$1,
287
288
  className: className,
288
289
  invalid: invalid,
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Copyright IBM Corp. 2015, 2023
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import PropTypes from 'prop-types';
8
+ import React, { ReactNode } from 'react';
9
+ interface FeatureFlagsProps {
10
+ children?: ReactNode;
11
+ flags?: Record<string, boolean>;
12
+ enableV12TileDefaultIcons?: boolean;
13
+ enableV12TileRadioIcons?: boolean;
14
+ enableV12Overflowmenu?: boolean;
15
+ enableTreeviewControllable?: boolean;
16
+ enableExperimentalFocusWrapWithoutSentinels?: boolean;
17
+ }
18
+ /**
19
+ * Our FeatureFlagContext is used alongside the FeatureFlags component to enable
20
+ * or disable feature flags in a given React tree
21
+ */
22
+ declare const FeatureFlagContext: React.Context<any>;
23
+ /**
24
+ * Supports an object of feature flag values with the `flags` prop, merging them
25
+ * along with the current `FeatureFlagContext` to provide consumers to check if
26
+ * a feature flag is enabled or disabled in a given React tree
27
+ */
28
+ declare function FeatureFlags({ children, flags, enableV12TileDefaultIcons, enableV12TileRadioIcons, enableV12Overflowmenu, enableTreeviewControllable, enableExperimentalFocusWrapWithoutSentinels, }: FeatureFlagsProps): JSX.Element;
29
+ declare namespace FeatureFlags {
30
+ var propTypes: {
31
+ children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
32
+ /**
33
+ * Provide the feature flags to enabled or disabled in the current Rea,ct tree
34
+ */
35
+ flags: (props: any, propName: any, componentName: any, ...rest: any[]) => any;
36
+ enableV12TileDefaultIcons: PropTypes.Requireable<boolean>;
37
+ enableV12TileRadioIcons: PropTypes.Requireable<boolean>;
38
+ enableV12Overflowmenu: PropTypes.Requireable<boolean>;
39
+ enableTreeviewControllable: PropTypes.Requireable<boolean>;
40
+ enableExperimentalFocusWrapWithoutSentinels: PropTypes.Requireable<boolean>;
41
+ };
42
+ }
43
+ /**
44
+ * Access whether a given flag is enabled or disabled in a given
45
+ * FeatureFlagContext
46
+ *
47
+ * @returns {boolean}
48
+ */
49
+ declare function useFeatureFlag(flag: any): any;
50
+ /**
51
+ * Access all feature flag information for the given FeatureFlagContext
52
+ *
53
+ * @returns {FeatureFlagScope}
54
+ */
55
+ declare function useFeatureFlags(): any;
56
+ export { FeatureFlags, FeatureFlagContext, useFeatureFlags, useFeatureFlag };
@@ -5,9 +5,9 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import { FeatureFlags as FeatureFlags$1, createScope } from '@carbon/feature-flags';
8
+ import { createScope, FeatureFlags as FeatureFlags$1 } from '@carbon/feature-flags';
9
9
  import PropTypes from 'prop-types';
10
- import React__default, { createContext, useContext, useState, useRef, useEffect } from 'react';
10
+ import React__default, { useContext, useState, useRef, useEffect, createContext } from 'react';
11
11
  import deprecate from '../../prop-types/deprecate.js';
12
12
 
13
13
  /**
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React, { FunctionComponent } from 'react';
8
+ import { UseComboboxProps, UseMultipleSelectionProps } from 'downshift';
9
+ import { FilterableMultiSelectProps } from '../MultiSelect/FilterableMultiSelect';
10
+ interface OnChangeData<ItemType> {
11
+ selectedItems: ItemType[] | null;
12
+ }
13
+ export interface FluidFilterableMultiSelectProps<ItemType> extends FilterableMultiSelectProps<ItemType> {
14
+ /**
15
+ * Specify an optional className to be applied to the outer FluidForm wrapper
16
+ */
17
+ className?: string;
18
+ /**
19
+ * Specify the text that should be read for screen readers that describes total items selected
20
+ */
21
+ clearSelectionDescription?: string;
22
+ /**
23
+ * Specify the text that should be read for screen readers to clear selection.
24
+ */
25
+ clearSelectionText?: string;
26
+ /**
27
+ * Specify the direction of the multiselect dropdown. Can be either top or bottom.
28
+ */
29
+ direction?: 'top' | 'bottom';
30
+ /**
31
+ * Specify whether the `<input>` should be disabled
32
+ */
33
+ disabled?: boolean;
34
+ /**
35
+ * Additional props passed to Downshift.
36
+ *
37
+ * **Use with caution:** anything you define here overrides the components'
38
+ * internal handling of that prop. Downshift APIs and internals are subject to
39
+ * change, and in some cases they can not be shimmed by Carbon to shield you
40
+ * from potentially breaking changes.
41
+ */
42
+ downshiftProps?: Partial<UseMultipleSelectionProps<ItemType>>;
43
+ /**
44
+ * Specify a custom `id` for the `<input>`
45
+ */
46
+ id: string;
47
+ /**
48
+ * Allow users to pass in arbitrary items from their collection that are
49
+ * pre-selected
50
+ */
51
+ initialSelectedItems?: ItemType[];
52
+ /**
53
+ * Specify if the currently selected value is invalid.
54
+ */
55
+ invalid?: boolean;
56
+ /**
57
+ * Provide the text that is displayed when the control is in an invalid state
58
+ */
59
+ invalidText?: React.ReactNode;
60
+ /**
61
+ * Specify if the `FluidMultiSelect` should render its menu items in condensed mode
62
+ */
63
+ isCondensed?: boolean;
64
+ /**
65
+ * Function to render items as custom components instead of strings.
66
+ * Defaults to null and is overridden by a getter
67
+ */
68
+ itemToElement?: FunctionComponent<ItemType>;
69
+ /**
70
+ * Helper function passed to downshift that allows the library to render a
71
+ * given item to a string label. By default, it extracts the `label` field
72
+ * from a given item to serve as the item label in the list. Consider
73
+ * declaring function with `useCallback` to prevent unnecessary re-renders.
74
+ */
75
+ itemToString?(item: ItemType): string;
76
+ /**
77
+ * We try to stay as generic as possible here to allow individuals to pass
78
+ * in a collection of whatever kind of data structure they prefer
79
+ */
80
+ items: ItemType[];
81
+ /**
82
+ * Generic `label` that will be used as the textual representation of what
83
+ * this field is for
84
+ */
85
+ label: NonNullable<React.ReactNode>;
86
+ /**
87
+ * Specify the locale of the control. Used for the default `compareItems`
88
+ * used for sorting the list of items in the control.
89
+ */
90
+ locale?: string;
91
+ /**
92
+ * `onChange` is a utility for this controlled component to communicate to a
93
+ * consuming component what kind of internal state changes are occurring.
94
+ */
95
+ onChange?(data: OnChangeData<ItemType>): void;
96
+ /**
97
+ * **Filterable variant only** - `onInputValueChange` is a utility for this controlled component to communicate to
98
+ * the currently typed input.
99
+ */
100
+ onInputValueChange?: UseComboboxProps<ItemType>['onInputValueChange'];
101
+ /**
102
+ * `onMenuChange` is a utility for this controlled component to communicate to a
103
+ * consuming component that the menu was open(`true`)/closed(`false`).
104
+ */
105
+ onMenuChange?(open: boolean): void;
106
+ /**
107
+ * Whether or not the Multiselect is readonly
108
+ */
109
+ readOnly?: boolean;
110
+ /**
111
+ * For full control of the selected items
112
+ */
113
+ selectedItems?: ItemType[];
114
+ /**
115
+ * Specify feedback (mode) of the selection.
116
+ * `top`: selected item jumps to top
117
+ * `fixed`: selected item stays at it's position
118
+ * `top-after-reopen`: selected item jump to top after reopen dropdown
119
+ */
120
+ selectionFeedback?: 'top' | 'fixed' | 'top-after-reopen';
121
+ /**
122
+ * Provide the title text that will be read by a screen reader when
123
+ * visiting this control
124
+ */
125
+ titleText?: React.ReactNode;
126
+ /**
127
+ * Callback function for translating ListBoxMenuIcon SVG title
128
+ */
129
+ translateWithId?: (id: string) => string;
130
+ /**
131
+ * Specify title to show title on hover
132
+ */
133
+ useTitleInItem?: boolean;
134
+ /**
135
+ * Specify whether the control is currently in warning state
136
+ */
137
+ warn?: boolean;
138
+ /**
139
+ * Provide the text that is displayed when the control is in warning state
140
+ */
141
+ warnText?: React.ReactNode;
142
+ }
143
+ declare const FluidMultiSelect: React.ForwardRefExoticComponent<Omit<FluidFilterableMultiSelectProps<unknown>, "ref"> & React.RefAttributes<HTMLDivElement>>;
144
+ export default FluidMultiSelect;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Copyright IBM Corp. 2016, 2023
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React from 'react';
8
+ export interface FluidMultiSelectSkeletonProps {
9
+ /**
10
+ * Specify an optional className to add.
11
+ */
12
+ className?: string;
13
+ }
14
+ declare const FluidMultiSelectSkeleton: React.FC<FluidMultiSelectSkeletonProps>;
15
+ export default FluidMultiSelectSkeleton;
@@ -34,6 +34,5 @@ FluidMultiSelectSkeleton.propTypes = {
34
34
  */
35
35
  className: PropTypes.string
36
36
  };
37
- var FluidMultiSelectSkeleton$1 = FluidMultiSelectSkeleton;
38
37
 
39
- export { FluidMultiSelectSkeleton$1 as default };
38
+ export { FluidMultiSelectSkeleton as default };
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import React from 'react';
8
+ import { UseSelectProps } from 'downshift';
9
+ import { MultiSelectProps } from '../MultiSelect/MultiSelect';
10
+ interface OnChangeData<ItemType> {
11
+ selectedItems: ItemType[] | null;
12
+ }
13
+ export interface FluidMultiSelectProps<ItemType> extends MultiSelectProps<ItemType> {
14
+ /**
15
+ * Specify an optional className to be applied to the outer FluidForm wrapper
16
+ */
17
+ className?: string;
18
+ /**
19
+ * Specify the text that should be read for screen readers that describes total items selected
20
+ */
21
+ clearSelectionDescription?: string;
22
+ /**
23
+ * Specify the text that should be read for screen readers to clear selection.
24
+ */
25
+ clearSelectionText?: string;
26
+ /**
27
+ * Specify the direction of the multiselect dropdown. Can be either top or bottom.
28
+ */
29
+ direction?: 'top' | 'bottom';
30
+ /**
31
+ * Specify whether the `<input>` should be disabled
32
+ */
33
+ disabled?: boolean;
34
+ /**
35
+ * Additional props passed to Downshift.
36
+ *
37
+ * **Use with caution:** anything you define here overrides the components'
38
+ * internal handling of that prop. Downshift APIs and internals are subject to
39
+ * change, and in some cases they can not be shimmed by Carbon to shield you
40
+ * from potentially breaking changes.
41
+ */
42
+ downshiftProps?: Partial<UseSelectProps<ItemType>>;
43
+ /**
44
+ * Specify a custom `id` for the `<input>`
45
+ */
46
+ id: string;
47
+ /**
48
+ * Allow users to pass in arbitrary items from their collection that are
49
+ * pre-selected
50
+ */
51
+ initialSelectedItems?: ItemType[];
52
+ /**
53
+ * Specify if the currently selected value is invalid.
54
+ */
55
+ invalid?: boolean;
56
+ /**
57
+ * Provide the text that is displayed when the control is in an invalid state
58
+ */
59
+ invalidText?: React.ReactNode;
60
+ /**
61
+ * Specify if the `FluidMultiSelect` should render its menu items in condensed mode
62
+ */
63
+ isCondensed?: boolean;
64
+ /**
65
+ * Specify if the `FluidMultiSelect` should render the `filterable` variant of `FluidMultiSelect`
66
+ * @deprecated This prop is deprecated in favor of new component called FluidFilterableMultiSelect and will be removed in the next major release
67
+ */
68
+ isFilterable?: boolean;
69
+ /**
70
+ * Function to render items as custom components instead of strings.
71
+ * Defaults to null and is overridden by a getter
72
+ */
73
+ itemToElement?: React.JSXElementConstructor<ItemType>;
74
+ /**
75
+ * Helper function passed to downshift that allows the library to render a
76
+ * given item to a string label. By default, it extracts the `label` field
77
+ * from a given item to serve as the item label in the list. Consider
78
+ * declaring function with `useCallback` to prevent unnecessary re-renders.
79
+ */
80
+ itemToString?(item: ItemType): string;
81
+ /**
82
+ * We try to stay as generic as possible here to allow individuals to pass
83
+ * in a collection of whatever kind of data structure they prefer
84
+ */
85
+ items: ItemType[];
86
+ /**
87
+ * Generic `label` that will be used as the textual representation of what
88
+ * this field is for
89
+ */
90
+ label: NonNullable<React.ReactNode>;
91
+ /**
92
+ * Specify the locale of the control. Used for the default `compareItems`
93
+ * used for sorting the list of items in the control.
94
+ */
95
+ locale?: string;
96
+ /**
97
+ * `onChange` is a utility for this controlled component to communicate to a
98
+ * consuming component what kind of internal state changes are occurring.
99
+ */
100
+ onChange?(data: OnChangeData<ItemType>): void;
101
+ /**
102
+ * **Filterable variant only** - `onInputValueChange` is a utility for this controlled component to communicate to
103
+ * the currently typed input.
104
+ */
105
+ onInputValueChange?: (inputValue: string) => void;
106
+ /**
107
+ * `onMenuChange` is a utility for this controlled component to communicate to a
108
+ * consuming component that the menu was open(`true`)/closed(`false`).
109
+ */
110
+ onMenuChange?(open: boolean): void;
111
+ /**
112
+ * Whether or not the Multiselect is readonly
113
+ */
114
+ readOnly?: boolean;
115
+ /**
116
+ * For full control of the selected items
117
+ */
118
+ selectedItems?: ItemType[];
119
+ /**
120
+ * Specify feedback (mode) of the selection.
121
+ * `top`: selected item jumps to top
122
+ * `fixed`: selected item stays at it's position
123
+ * `top-after-reopen`: selected item jump to top after reopen dropdown
124
+ */
125
+ selectionFeedback?: 'top' | 'fixed' | 'top-after-reopen';
126
+ /**
127
+ * Provide the title text that will be read by a screen reader when
128
+ * visiting this control
129
+ */
130
+ titleText?: React.ReactNode;
131
+ /**
132
+ * Callback function for translating ListBoxMenuIcon SVG title
133
+ */
134
+ translateWithId?: (id: string) => string;
135
+ /**
136
+ * Specify title to show title on hover
137
+ */
138
+ useTitleInItem?: boolean;
139
+ /**
140
+ * Specify whether the control is currently in warning state
141
+ */
142
+ warn?: boolean;
143
+ /**
144
+ * Provide the text that is displayed when the control is in warning state
145
+ */
146
+ warnText?: React.ReactNode;
147
+ }
148
+ declare const FluidMultiSelect: React.ForwardRefExoticComponent<FluidMultiSelectProps<unknown> & React.RefAttributes<HTMLButtonElement>>;
149
+ export default FluidMultiSelect;
@@ -30,7 +30,10 @@ const FluidMultiSelect = /*#__PURE__*/React__default.forwardRef(function FluidMu
30
30
  value: {
31
31
  isFluid: true
32
32
  }
33
- }, isFilterable ? /*#__PURE__*/React__default.createElement(FilterableMultiSelect, _extends({
33
+ }, isFilterable ?
34
+ /*#__PURE__*/
35
+ // @ts-ignore
36
+ React__default.createElement(FilterableMultiSelect, _extends({
34
37
  ref: ref,
35
38
  className: classNames
36
39
  }, other)) : /*#__PURE__*/React__default.createElement(MultiSelect, _extends({
@@ -199,6 +202,5 @@ FluidMultiSelect.propTypes = {
199
202
  */
200
203
  warnText: PropTypes.node
201
204
  };
202
- var FluidMultiSelect$1 = FluidMultiSelect;
203
205
 
204
- export { FluidMultiSelect$1 as default };
206
+ export { FluidMultiSelect as default };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import FluidMultiSelect from './FluidMultiSelect';
8
+ import type { FluidMultiSelectProps } from './FluidMultiSelect';
9
+ import type { FluidMultiSelectSkeletonProps } from './FluidMultiSelect.Skeleton';
10
+ export type { FluidMultiSelectProps, FluidMultiSelectSkeletonProps };
11
+ export default FluidMultiSelect;
12
+ export { FluidMultiSelect };
13
+ export { default as FluidMultiSelectSkeleton } from './FluidMultiSelect.Skeleton';
@@ -4,8 +4,8 @@
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import { FluidNumberInputProps } from './FluidNumberInput';
8
- import { FluidNumberInputSkeletonProps } from './FluidNumberInput.Skeleton';
7
+ import type { FluidNumberInputProps } from './FluidNumberInput';
8
+ import type { FluidNumberInputSkeletonProps } from './FluidNumberInput.Skeleton';
9
9
  export { type FluidNumberInputProps, type FluidNumberInputSkeletonProps };
10
10
  export { default, default as FluidNumberInput } from './FluidNumberInput';
11
11
  export { default as FluidNumberInputSkeleton } from './FluidNumberInput.Skeleton';
@@ -4,8 +4,8 @@
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import { FluidSearchProps } from './FluidSearch';
8
- import { FluidSearchSkeletonProps } from './FluidSearch.Skeleton';
7
+ import type { FluidSearchProps } from './FluidSearch';
8
+ import type { FluidSearchSkeletonProps } from './FluidSearch.Skeleton';
9
9
  export { default, default as FluidSearch } from './FluidSearch';
10
10
  export { type FluidSearchProps, type FluidSearchSkeletonProps };
11
11
  export { default as FluidSearchSkeleton } from './FluidSearch.Skeleton';
@@ -5,8 +5,8 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import FluidSelect from './FluidSelect';
8
- import FluidSelectSkeletonProps from './FluidSelect.Skeleton';
9
- import FluidSelectProps from './FluidSelect.Skeleton';
8
+ import type FluidSelectSkeletonProps from './FluidSelect.Skeleton';
9
+ import type FluidSelectProps from './FluidSelect.Skeleton';
10
10
  export type { FluidSelectSkeletonProps, FluidSelectProps };
11
11
  export default FluidSelect;
12
12
  export { FluidSelect };
@@ -5,8 +5,8 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import FluidTimePicker from './FluidTimePicker';
8
- import { FluidTimePickerProps } from './FluidTimePicker';
9
- import { FluidTimePickerSkeletonProps } from './FluidTimePicker.Skeleton';
8
+ import { type FluidTimePickerProps } from './FluidTimePicker';
9
+ import { type FluidTimePickerSkeletonProps } from './FluidTimePicker.Skeleton';
10
10
  export { default as FluidTimePickerSkeleton } from './FluidTimePicker.Skeleton';
11
11
  export type { FluidTimePickerProps, FluidTimePickerSkeletonProps };
12
12
  export default FluidTimePicker;
@@ -264,7 +264,7 @@ const Modal = /*#__PURE__*/React__default.forwardRef(function Modal(_ref, ref) {
264
264
  id: modalLabelId,
265
265
  className: `${prefix}--modal-header__label`
266
266
  }, modalLabel), /*#__PURE__*/React__default.createElement(Text, {
267
- as: "h3",
267
+ as: "h2",
268
268
  id: modalHeadingId,
269
269
  className: `${prefix}--modal-header__heading`
270
270
  }, modalHeading), normalizedSlug, !passiveModal && modalButton), /*#__PURE__*/React__default.createElement(Layer, _extends({
@@ -5,7 +5,7 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  import { type UseComboboxProps, type UseMultipleSelectionProps } from 'downshift';
8
- import { ReactNode, FunctionComponent, ReactElement } from 'react';
8
+ import React, { ReactNode, FunctionComponent, ReactElement } from 'react';
9
9
  import { type MultiSelectSortingProps } from './MultiSelectPropTypes';
10
10
  import { TranslateWithId } from '../../types/common';
11
11
  /**
@@ -16,7 +16,7 @@ import { TranslateWithId } from '../../types/common';
16
16
  * ends up just being defined as "string".)
17
17
  */
18
18
  type TranslationKey = 'close.menu' | 'open.menu' | 'clear.all' | 'clear.selection';
19
- export interface FilterableMultiSelectProps<ItemType> extends MultiSelectSortingProps<ItemType>, TranslateWithId<TranslationKey> {
19
+ export interface FilterableMultiSelectProps<ItemType> extends MultiSelectSortingProps<ItemType>, React.RefAttributes<HTMLDivElement>, TranslateWithId<TranslationKey> {
20
20
  /**
21
21
  * Specify a label to be read by screen readers on the container node
22
22
  * @deprecated
@@ -60,8 +60,10 @@ const DefinitionTooltip = _ref => {
60
60
  onBlur: () => {
61
61
  setOpen(false);
62
62
  },
63
- onClick: () => {
64
- setOpen(!isOpen);
63
+ onMouseDown: event => {
64
+ // We use onMouseDown rather than onClick to make sure this triggers
65
+ // before onFocus.
66
+ if (event.button === 0) setOpen(!isOpen);
65
67
  },
66
68
  onKeyDown: onKeyDown,
67
69
  type: "button"
package/es/index.js CHANGED
@@ -159,6 +159,8 @@ export { default as SideNavMenuItem } from './components/UIShell/SideNavMenuItem
159
159
  export { default as SideNavSwitcher } from './components/UIShell/SideNavSwitcher.js';
160
160
  export { default as UnorderedList } from './components/UnorderedList/UnorderedList.js';
161
161
  export { FeatureFlags as unstable_FeatureFlags, useFeatureFlag as unstable_useFeatureFlag, useFeatureFlags as unstable_useFeatureFlags } from './components/FeatureFlags/index.js';
162
+ export { default as unstable__FluidMultiSelect } from './components/FluidMultiSelect/FluidMultiSelect.js';
163
+ export { default as unstable__FluidMultiSelectSkeleton } from './components/FluidMultiSelect/FluidMultiSelect.Skeleton.js';
162
164
  export { default as unstable__FluidSelect } from './components/FluidSelect/FluidSelect.js';
163
165
  export { default as unstable__FluidSelectSkeleton } from './components/FluidSelect/FluidSelect.Skeleton.js';
164
166
  export { default as unstable__FluidSearch } from './components/FluidSearch/FluidSearch.js';
@@ -205,8 +207,6 @@ export { default as unstable__FluidDatePicker } from './components/FluidDatePick
205
207
  export { default as unstable__FluidDatePickerInput } from './components/FluidDatePickerInput/FluidDatePickerInput.js';
206
208
  export { default as unstable__FluidDropdown } from './components/FluidDropdown/FluidDropdown.js';
207
209
  export { default as unstable__FluidDropdownSkeleton } from './components/FluidDropdown/FluidDropdown.Skeleton.js';
208
- export { default as unstable__FluidMultiSelect } from './components/FluidMultiSelect/FluidMultiSelect.js';
209
- export { default as unstable__FluidMultiSelectSkeleton } from './components/FluidMultiSelect/FluidMultiSelect.Skeleton.js';
210
210
  export { LayoutDirection as unstable_LayoutDirection } from './components/LayoutDirection/LayoutDirection.js';
211
211
  export { useLayoutDirection as unstable_useLayoutDirection } from './components/LayoutDirection/useLayoutDirection.js';
212
212
  export { Text as unstable_Text } from './components/Text/Text.js';
@@ -314,6 +314,12 @@ const ComboBox = /*#__PURE__*/React.forwardRef((props, ref) => {
314
314
  if (onToggleClick) {
315
315
  onToggleClick(event);
316
316
  }
317
+ if (readOnly) {
318
+ // Prevent the list from opening if readOnly is true
319
+ event.preventDownshiftDefault = true;
320
+ event?.persist?.();
321
+ return;
322
+ }
317
323
  if (event.target === textInput.current && isOpen) {
318
324
  event.preventDownshiftDefault = true;
319
325
  event?.persist?.();
@@ -462,6 +468,12 @@ const ComboBox = /*#__PURE__*/React.forwardRef((props, ref) => {
462
468
  if (evt.key !== 'Tab') {
463
469
  evt.preventDefault();
464
470
  }
471
+ },
472
+ onClick: evt => {
473
+ // Prevent the default behavior which would open the list
474
+ evt.preventDefault();
475
+ // Focus on the element as per readonly input behavior
476
+ evt.currentTarget.focus();
465
477
  }
466
478
  } : {};
467
479
 
@@ -54,7 +54,7 @@ const ModalHeader = /*#__PURE__*/React__default["default"].forwardRef(function M
54
54
  ref: ref
55
55
  }), label && /*#__PURE__*/React__default["default"].createElement("h2", {
56
56
  className: labelClass
57
- }, label), title && /*#__PURE__*/React__default["default"].createElement("h3", {
57
+ }, label), title && /*#__PURE__*/React__default["default"].createElement("h2", {
58
58
  className: titleClass
59
59
  }, title), children, /*#__PURE__*/React__default["default"].createElement("div", {
60
60
  className: `${prefix}--modal-close-button`
@@ -217,7 +217,9 @@ const Dropdown = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
217
217
 
218
218
  // needs to be Capitalized for react to render it correctly
219
219
  const ItemToElement = itemToElement;
220
- const toggleButtonProps = getToggleButtonProps();
220
+ const toggleButtonProps = getToggleButtonProps({
221
+ 'aria-label': ariaLabel || deprecatedAriaLabel
222
+ });
221
223
  const helper = helperText && !isFluid ? /*#__PURE__*/React__default["default"].createElement("div", {
222
224
  id: helperId,
223
225
  className: helperClasses
@@ -292,7 +294,6 @@ const Dropdown = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
292
294
  }, getLabelProps()), titleText), /*#__PURE__*/React__default["default"].createElement(index["default"], {
293
295
  onFocus: handleFocus,
294
296
  onBlur: handleFocus,
295
- "aria-label": deprecatedAriaLabel || ariaLabel,
296
297
  size: size,
297
298
  className: className,
298
299
  invalid: invalid,