@itwin/itwinui-react 3.0.0-dev.1 → 3.0.0-dev.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/cjs/core/Alert/Alert.d.ts +47 -28
- package/cjs/core/Alert/Alert.js +73 -21
- package/cjs/core/Avatar/Avatar.js +1 -1
- package/cjs/core/AvatarGroup/AvatarGroup.js +1 -1
- package/cjs/core/Breadcrumbs/Breadcrumbs.js +2 -3
- package/cjs/core/ButtonGroup/ButtonGroup.js +1 -4
- package/cjs/core/Buttons/DropdownButton/DropdownButton.js +3 -5
- package/cjs/core/Carousel/Carousel.d.ts +2 -2
- package/cjs/core/Carousel/Carousel.js +3 -5
- package/cjs/core/Carousel/CarouselDotsList.js +8 -10
- package/cjs/core/Carousel/CarouselNavigation.d.ts +2 -2
- package/cjs/core/Carousel/CarouselNavigation.js +3 -5
- package/cjs/core/Carousel/CarouselSlider.js +10 -15
- package/cjs/core/ColorPicker/ColorBuilder.js +7 -10
- package/cjs/core/ColorPicker/ColorInputPanel.js +12 -15
- package/cjs/core/ColorPicker/ColorPalette.js +4 -6
- package/cjs/core/ColorPicker/ColorPicker.js +3 -3
- package/cjs/core/ComboBox/ComboBox.js +25 -32
- package/cjs/core/ComboBox/ComboBoxDropdown.js +1 -2
- package/cjs/core/ComboBox/ComboBoxEndIcon.js +1 -1
- package/cjs/core/ComboBox/ComboBoxInput.js +21 -20
- package/cjs/core/ComboBox/ComboBoxMenu.js +3 -4
- package/cjs/core/ComboBox/ComboBoxMenuItem.js +2 -2
- package/cjs/core/ComboBox/helpers.js +4 -5
- package/cjs/core/DatePicker/DatePicker.js +32 -32
- package/cjs/core/Dialog/Dialog.js +11 -4
- package/cjs/core/Dialog/DialogBackdrop.js +1 -1
- package/cjs/core/Dialog/DialogContext.d.ts +11 -0
- package/cjs/core/Dialog/DialogMain.js +16 -22
- package/cjs/core/DropdownMenu/DropdownMenu.js +6 -8
- package/cjs/core/ExpandableBlock/ExpandableBlock.js +2 -2
- package/cjs/core/FileUpload/FileEmptyCard.js +1 -1
- package/cjs/core/FileUpload/FileUpload.d.ts +3 -4
- package/cjs/core/FileUpload/FileUpload.js +5 -8
- package/cjs/core/FileUpload/FileUploadCard.js +9 -10
- package/cjs/core/FileUpload/FileUploadTemplate.d.ts +1 -0
- package/cjs/core/FileUpload/FileUploadTemplate.js +1 -0
- package/cjs/core/InformationPanel/InformationPanel.js +1 -4
- package/cjs/core/LabeledInput/LabeledInput.js +1 -1
- package/cjs/core/LabeledTextarea/LabeledTextarea.js +1 -1
- package/cjs/core/Menu/Menu.js +3 -4
- package/cjs/core/Menu/MenuItem.js +8 -11
- package/cjs/core/Modal/Modal.d.ts +8 -9
- package/cjs/core/Modal/Modal.js +7 -17
- package/cjs/core/SearchBox/SearchBox.js +12 -12
- package/cjs/core/Select/Select.js +12 -17
- package/cjs/core/SideNavigation/SideNavigation.js +2 -2
- package/cjs/core/Slider/Slider.js +16 -19
- package/cjs/core/Slider/Thumb.js +1 -1
- package/cjs/core/StatusMessage/StatusMessage.js +1 -1
- package/cjs/core/Stepper/Stepper.js +1 -1
- package/cjs/core/Stepper/StepperStep.js +1 -1
- package/cjs/core/Table/Table.js +15 -15
- package/cjs/core/Table/TablePaginator.js +2 -3
- package/cjs/core/Table/TableRowMemoized.js +38 -45
- package/cjs/core/Table/actionHandlers/expandHandler.js +3 -3
- package/cjs/core/Table/actionHandlers/filterHandler.js +4 -5
- package/cjs/core/Table/actionHandlers/selectHandler.js +6 -6
- package/cjs/core/Table/cells/DefaultCell.js +1 -1
- package/cjs/core/Table/cells/EditableCell.js +6 -12
- package/cjs/core/Table/columns/actionColumn.js +3 -6
- package/cjs/core/Table/columns/expanderColumn.js +3 -3
- package/cjs/core/Table/columns/selectionColumn.js +4 -4
- package/cjs/core/Table/filters/DateRangeFilter/DatePickerInput.js +2 -4
- package/cjs/core/Table/filters/DateRangeFilter/DateRangeFilter.js +2 -3
- package/cjs/core/Table/filters/NumberRangeFilter/NumberRangeFilter.js +2 -3
- package/cjs/core/Table/filters/TextFilter/TextFilter.js +1 -2
- package/cjs/core/Table/hooks/useResizeColumns.js +16 -22
- package/cjs/core/Table/hooks/useScrollToRow.js +1 -2
- package/cjs/core/Table/hooks/useStickyColumns.js +3 -5
- package/cjs/core/Table/hooks/useSubRowFiltering.js +2 -4
- package/cjs/core/Tabs/Tabs.js +13 -16
- package/cjs/core/ThemeProvider/ThemeContext.d.ts +1 -1
- package/cjs/core/ThemeProvider/ThemeProvider.d.ts +2 -3
- package/cjs/core/ThemeProvider/ThemeProvider.js +14 -13
- package/cjs/core/Tile/Tile.js +2 -3
- package/cjs/core/TimePicker/TimePicker.js +13 -13
- package/cjs/core/Toast/Toast.d.ts +5 -10
- package/cjs/core/Toast/Toast.js +17 -16
- package/cjs/core/Toast/Toaster.d.ts +24 -26
- package/cjs/core/Toast/Toaster.js +91 -121
- package/cjs/core/Toast/index.d.ts +1 -4
- package/cjs/core/Toast/index.js +3 -6
- package/cjs/core/TransferList/TransferList.js +3 -4
- package/cjs/core/Tree/Tree.js +9 -13
- package/cjs/core/Tree/TreeNode.js +9 -10
- package/cjs/core/index.d.ts +1 -2
- package/cjs/core/index.js +2 -5
- package/cjs/core/utils/color/ColorValue.js +9 -15
- package/cjs/core/utils/components/AutoclearingHiddenLiveRegion.js +2 -3
- package/cjs/core/utils/components/FocusTrap.js +4 -4
- package/cjs/core/utils/components/MiddleTextTruncation.js +1 -2
- package/cjs/core/utils/components/Popover.d.ts +1 -1
- package/cjs/core/utils/components/Popover.js +5 -8
- package/cjs/core/utils/components/Resizer.js +7 -6
- package/cjs/core/utils/components/VirtualScroll.js +14 -21
- package/cjs/core/utils/functions/dom.d.ts +0 -8
- package/cjs/core/utils/functions/dom.js +3 -26
- package/cjs/core/utils/functions/polymorphic.d.ts +1 -1
- package/cjs/core/utils/functions/polymorphic.js +1 -1
- package/cjs/core/utils/functions/supports.js +1 -1
- package/cjs/core/utils/hooks/index.d.ts +0 -1
- package/cjs/core/utils/hooks/index.js +0 -1
- package/cjs/core/utils/hooks/useContainerWidth.js +1 -1
- package/cjs/core/utils/hooks/useDragAndDrop.js +8 -10
- package/cjs/core/utils/hooks/useEventListener.js +1 -1
- package/cjs/core/utils/hooks/useGlobals.d.ts +9 -2
- package/cjs/core/utils/hooks/useGlobals.js +6 -4
- package/cjs/core/utils/hooks/useId.js +1 -2
- package/cjs/core/utils/hooks/useIntersection.js +2 -3
- package/cjs/core/utils/hooks/useMediaQuery.js +6 -8
- package/cjs/core/utils/hooks/useOverflow.js +1 -2
- package/cjs/core/utils/hooks/useResizeObserver.js +3 -4
- package/cjs/styles.js +1 -4
- package/esm/core/Alert/Alert.d.ts +47 -28
- package/esm/core/Alert/Alert.js +74 -22
- package/esm/core/Avatar/Avatar.js +1 -1
- package/esm/core/AvatarGroup/AvatarGroup.js +1 -1
- package/esm/core/Breadcrumbs/Breadcrumbs.js +2 -3
- package/esm/core/ButtonGroup/ButtonGroup.js +1 -4
- package/esm/core/Buttons/DropdownButton/DropdownButton.js +3 -5
- package/esm/core/Carousel/Carousel.d.ts +2 -2
- package/esm/core/Carousel/Carousel.js +3 -5
- package/esm/core/Carousel/CarouselDotsList.js +8 -10
- package/esm/core/Carousel/CarouselNavigation.d.ts +2 -2
- package/esm/core/Carousel/CarouselNavigation.js +3 -5
- package/esm/core/Carousel/CarouselSlider.js +10 -15
- package/esm/core/ColorPicker/ColorBuilder.js +7 -10
- package/esm/core/ColorPicker/ColorInputPanel.js +12 -15
- package/esm/core/ColorPicker/ColorPalette.js +4 -6
- package/esm/core/ColorPicker/ColorPicker.js +3 -3
- package/esm/core/ComboBox/ComboBox.js +25 -32
- package/esm/core/ComboBox/ComboBoxDropdown.js +1 -2
- package/esm/core/ComboBox/ComboBoxEndIcon.js +1 -1
- package/esm/core/ComboBox/ComboBoxInput.js +21 -20
- package/esm/core/ComboBox/ComboBoxMenu.js +3 -4
- package/esm/core/ComboBox/ComboBoxMenuItem.js +2 -2
- package/esm/core/ComboBox/helpers.js +4 -5
- package/esm/core/DatePicker/DatePicker.js +32 -32
- package/esm/core/Dialog/Dialog.js +12 -5
- package/esm/core/Dialog/DialogBackdrop.js +1 -1
- package/esm/core/Dialog/DialogContext.d.ts +11 -0
- package/esm/core/Dialog/DialogMain.js +16 -22
- package/esm/core/DropdownMenu/DropdownMenu.js +6 -8
- package/esm/core/ExpandableBlock/ExpandableBlock.js +2 -2
- package/esm/core/FileUpload/FileEmptyCard.js +1 -1
- package/esm/core/FileUpload/FileUpload.d.ts +3 -4
- package/esm/core/FileUpload/FileUpload.js +5 -8
- package/esm/core/FileUpload/FileUploadCard.js +9 -10
- package/esm/core/FileUpload/FileUploadTemplate.d.ts +1 -0
- package/esm/core/FileUpload/FileUploadTemplate.js +1 -0
- package/esm/core/InformationPanel/InformationPanel.js +1 -4
- package/esm/core/LabeledInput/LabeledInput.js +1 -1
- package/esm/core/LabeledTextarea/LabeledTextarea.js +1 -1
- package/esm/core/Menu/Menu.js +3 -4
- package/esm/core/Menu/MenuItem.js +8 -11
- package/esm/core/Modal/Modal.d.ts +8 -9
- package/esm/core/Modal/Modal.js +3 -10
- package/esm/core/SearchBox/SearchBox.js +12 -12
- package/esm/core/Select/Select.js +12 -17
- package/esm/core/SideNavigation/SideNavigation.js +2 -2
- package/esm/core/Slider/Slider.js +16 -19
- package/esm/core/Slider/Thumb.js +1 -1
- package/esm/core/StatusMessage/StatusMessage.js +1 -1
- package/esm/core/Stepper/Stepper.js +1 -1
- package/esm/core/Stepper/StepperStep.js +1 -1
- package/esm/core/Table/Table.js +15 -15
- package/esm/core/Table/TablePaginator.js +2 -3
- package/esm/core/Table/TableRowMemoized.js +38 -45
- package/esm/core/Table/actionHandlers/expandHandler.js +3 -3
- package/esm/core/Table/actionHandlers/filterHandler.js +4 -5
- package/esm/core/Table/actionHandlers/selectHandler.js +6 -6
- package/esm/core/Table/cells/DefaultCell.js +1 -1
- package/esm/core/Table/cells/EditableCell.js +6 -12
- package/esm/core/Table/columns/actionColumn.js +3 -6
- package/esm/core/Table/columns/expanderColumn.js +3 -3
- package/esm/core/Table/columns/selectionColumn.js +4 -4
- package/esm/core/Table/filters/DateRangeFilter/DatePickerInput.js +2 -4
- package/esm/core/Table/filters/DateRangeFilter/DateRangeFilter.js +2 -3
- package/esm/core/Table/filters/NumberRangeFilter/NumberRangeFilter.js +2 -3
- package/esm/core/Table/filters/TextFilter/TextFilter.js +1 -2
- package/esm/core/Table/hooks/useResizeColumns.js +16 -22
- package/esm/core/Table/hooks/useScrollToRow.js +1 -2
- package/esm/core/Table/hooks/useStickyColumns.js +3 -5
- package/esm/core/Table/hooks/useSubRowFiltering.js +2 -4
- package/esm/core/Tabs/Tabs.js +13 -16
- package/esm/core/ThemeProvider/ThemeContext.d.ts +1 -1
- package/esm/core/ThemeProvider/ThemeProvider.d.ts +2 -3
- package/esm/core/ThemeProvider/ThemeProvider.js +15 -14
- package/esm/core/Tile/Tile.js +2 -3
- package/esm/core/TimePicker/TimePicker.js +13 -13
- package/esm/core/Toast/Toast.d.ts +5 -10
- package/esm/core/Toast/Toast.js +18 -17
- package/esm/core/Toast/Toaster.d.ts +24 -26
- package/esm/core/Toast/Toaster.js +85 -121
- package/esm/core/Toast/index.d.ts +1 -4
- package/esm/core/Toast/index.js +1 -3
- package/esm/core/TransferList/TransferList.js +3 -4
- package/esm/core/Tree/Tree.js +9 -13
- package/esm/core/Tree/TreeNode.js +9 -10
- package/esm/core/index.d.ts +1 -2
- package/esm/core/index.js +1 -1
- package/esm/core/utils/color/ColorValue.js +9 -15
- package/esm/core/utils/components/AutoclearingHiddenLiveRegion.js +2 -3
- package/esm/core/utils/components/FocusTrap.js +4 -4
- package/esm/core/utils/components/MiddleTextTruncation.js +1 -2
- package/esm/core/utils/components/Popover.d.ts +1 -1
- package/esm/core/utils/components/Popover.js +5 -8
- package/esm/core/utils/components/Resizer.js +7 -6
- package/esm/core/utils/components/VirtualScroll.js +14 -21
- package/esm/core/utils/functions/dom.d.ts +0 -8
- package/esm/core/utils/functions/dom.js +2 -21
- package/esm/core/utils/functions/polymorphic.d.ts +1 -1
- package/esm/core/utils/functions/polymorphic.js +1 -1
- package/esm/core/utils/functions/supports.js +1 -1
- package/esm/core/utils/hooks/index.d.ts +0 -1
- package/esm/core/utils/hooks/index.js +0 -1
- package/esm/core/utils/hooks/useContainerWidth.js +1 -1
- package/esm/core/utils/hooks/useDragAndDrop.js +8 -10
- package/esm/core/utils/hooks/useEventListener.js +1 -1
- package/esm/core/utils/hooks/useGlobals.d.ts +9 -2
- package/esm/core/utils/hooks/useGlobals.js +6 -4
- package/esm/core/utils/hooks/useId.js +1 -2
- package/esm/core/utils/hooks/useIntersection.js +2 -3
- package/esm/core/utils/hooks/useMediaQuery.js +6 -8
- package/esm/core/utils/hooks/useOverflow.js +1 -2
- package/esm/core/utils/hooks/useResizeObserver.js +3 -4
- package/esm/styles.js +1 -4
- package/package.json +2 -2
- package/styles.css +19 -20
- package/cjs/core/Toast/ToastWrapper.d.ts +0 -10
- package/cjs/core/Toast/ToastWrapper.js +0 -49
- package/cjs/core/utils/hooks/useIsThemeAlreadySet.d.ts +0 -7
- package/cjs/core/utils/hooks/useIsThemeAlreadySet.js +0 -54
- package/esm/core/Toast/ToastWrapper.d.ts +0 -10
- package/esm/core/Toast/ToastWrapper.js +0 -20
- package/esm/core/utils/hooks/useIsThemeAlreadySet.d.ts +0 -7
- package/esm/core/utils/hooks/useIsThemeAlreadySet.js +0 -27
|
@@ -1,47 +1,66 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import type { PolymorphicForwardRefComponent } from '../utils/index.js';
|
|
3
|
-
declare type
|
|
3
|
+
declare type AlertOwnProps = {
|
|
4
4
|
/**
|
|
5
5
|
* Type of the alert.
|
|
6
6
|
* @default 'informational'
|
|
7
7
|
*/
|
|
8
8
|
type?: 'positive' | 'warning' | 'negative' | 'informational';
|
|
9
|
-
/**
|
|
10
|
-
* Text for the link you want to provide.
|
|
11
|
-
*/
|
|
12
|
-
clickableText?: React.ReactNode;
|
|
13
|
-
/**
|
|
14
|
-
* Props for the clickable text. Used for providing `href` and other attributes.
|
|
15
|
-
*/
|
|
16
|
-
clickableTextProps?: React.ComponentPropsWithRef<'a'>;
|
|
17
|
-
/**
|
|
18
|
-
* Action handler for close.
|
|
19
|
-
*/
|
|
20
|
-
onClose?: () => void;
|
|
21
9
|
/**
|
|
22
10
|
* Stick the alert to the top.
|
|
23
11
|
* @default false
|
|
24
12
|
*/
|
|
25
13
|
isSticky?: boolean;
|
|
26
|
-
/**
|
|
27
|
-
* Alert message text.
|
|
28
|
-
*/
|
|
29
|
-
children: React.ReactNode;
|
|
30
14
|
};
|
|
31
15
|
/**
|
|
32
16
|
* A small box to quickly grab user attention and communicate a brief message
|
|
33
17
|
* @example
|
|
34
|
-
* <Alert>
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* <Alert
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* >
|
|
43
|
-
*
|
|
18
|
+
* <Alert>
|
|
19
|
+
* <Alert.Message>This is an alert.</Alert.Message>
|
|
20
|
+
* </Alert>
|
|
21
|
+
* @example
|
|
22
|
+
* <Alert type='informational'>
|
|
23
|
+
* <Alert.Icon />
|
|
24
|
+
* <Alert.Message>This is an informational alert.</Alert.Message>
|
|
25
|
+
* <Alert.CloseButton onClick={() => {}} />
|
|
26
|
+
* </Alert>
|
|
27
|
+
* @example
|
|
28
|
+
* <Alert type='positive'>
|
|
29
|
+
* <Alert.Icon>
|
|
30
|
+
* <SvgSmileyHappy />
|
|
31
|
+
* </Alert.Icon>
|
|
32
|
+
* <Alert.Message>
|
|
33
|
+
* This is an alert.
|
|
34
|
+
* <Alert.Action>This is clickable text.</Alert.Action>
|
|
35
|
+
* </Alert.Message>
|
|
36
|
+
* <Alert.CloseButton onClick={() => {}}>
|
|
37
|
+
* <SvgCollapse />
|
|
38
|
+
* </Alert.CloseButton>
|
|
44
39
|
* </Alert>
|
|
45
40
|
*/
|
|
46
|
-
export declare const Alert: PolymorphicForwardRefComponent<"div",
|
|
41
|
+
export declare const Alert: PolymorphicForwardRefComponent<"div", AlertOwnProps> & {
|
|
42
|
+
/**
|
|
43
|
+
* Alert icon subcomponent
|
|
44
|
+
*/
|
|
45
|
+
Icon: PolymorphicForwardRefComponent<"span", Omit<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "key" | keyof React.HTMLAttributes<HTMLSpanElement>> & {
|
|
46
|
+
ref?: ((instance: HTMLSpanElement | null) => void) | React.RefObject<HTMLSpanElement> | null | undefined;
|
|
47
|
+
}, "as" | "fill" | "key" | "size" | keyof React.HTMLAttributes<HTMLSpanElement>> & {
|
|
48
|
+
size?: "small" | "auto" | "large" | "medium" | import("../utils/types.js").AnyString | undefined;
|
|
49
|
+
fill?: "default" | "informational" | "negative" | "positive" | "warning" | import("../utils/types.js").AnyString | undefined;
|
|
50
|
+
} & Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "key" | keyof React.HTMLAttributes<HTMLSpanElement>> & {
|
|
51
|
+
as?: "span" | undefined;
|
|
52
|
+
}>;
|
|
53
|
+
/**
|
|
54
|
+
* Alert message subcomponent
|
|
55
|
+
*/
|
|
56
|
+
Message: PolymorphicForwardRefComponent<"span", {}>;
|
|
57
|
+
/**
|
|
58
|
+
* Alert action subcomponent for the link you want to provide.
|
|
59
|
+
*/
|
|
60
|
+
Action: PolymorphicForwardRefComponent<"a", {}>;
|
|
61
|
+
/**
|
|
62
|
+
* Alert close button subcomponent
|
|
63
|
+
*/
|
|
64
|
+
CloseButton: PolymorphicForwardRefComponent<"button", {}>;
|
|
65
|
+
};
|
|
47
66
|
export default Alert;
|
package/esm/core/Alert/Alert.js
CHANGED
|
@@ -4,32 +4,84 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
import cx from 'classnames';
|
|
6
6
|
import * as React from 'react';
|
|
7
|
-
import { StatusIconMap, SvgCloseSmall, Box } from '../utils/index.js';
|
|
7
|
+
import { Icon, useSafeContext, polymorphic, StatusIconMap, SvgCloseSmall, Box, } from '../utils/index.js';
|
|
8
|
+
import { IconButton } from '../Buttons/index.js';
|
|
9
|
+
const AlertContext = React.createContext(undefined);
|
|
10
|
+
const AlertComponent = React.forwardRef((props, ref) => {
|
|
11
|
+
const { children, className, type = 'informational', isSticky = false, ...rest } = props;
|
|
12
|
+
return (React.createElement(Box, { className: cx('iui-alert', className), "data-iui-status": type, "data-iui-variant": isSticky ? 'sticky' : undefined, ref: ref, ...rest },
|
|
13
|
+
React.createElement(AlertContext.Provider, { value: { type } }, children)));
|
|
14
|
+
});
|
|
15
|
+
AlertComponent.displayName = 'Alert';
|
|
16
|
+
// ----------------------------------------------------------------------------
|
|
17
|
+
// Alert.Icon component
|
|
18
|
+
const AlertIcon = React.forwardRef((props, ref) => {
|
|
19
|
+
const { children, ...rest } = props;
|
|
20
|
+
const { type } = useSafeContext(AlertContext);
|
|
21
|
+
const StatusIcon = StatusIconMap[type];
|
|
22
|
+
return (React.createElement(Icon, { fill: type, ref: ref, ...rest }, children ?? React.createElement(StatusIcon, null)));
|
|
23
|
+
});
|
|
24
|
+
AlertIcon.displayName = 'Alert.Icon';
|
|
25
|
+
// ----------------------------------------------------------------------------
|
|
26
|
+
// Alert.Message component
|
|
27
|
+
const AlertMessage = polymorphic.span('iui-alert-message');
|
|
28
|
+
AlertMessage.displayName = 'Alert.Message';
|
|
29
|
+
// ----------------------------------------------------------------------------
|
|
30
|
+
// Alert.Action component
|
|
31
|
+
const AlertAction = React.forwardRef((props, ref) => {
|
|
32
|
+
const { children, className, ...rest } = props;
|
|
33
|
+
return (React.createElement(Box, { as: (!!props.href ? 'a' : 'button'), className: cx('iui-alert-link', className), ref: ref, ...rest }, children));
|
|
34
|
+
});
|
|
35
|
+
AlertAction.displayName = 'Alert.Action';
|
|
36
|
+
// ----------------------------------------------------------------------------
|
|
37
|
+
// Alert.CloseButton component
|
|
38
|
+
const AlertCloseButton = React.forwardRef((props, ref) => {
|
|
39
|
+
const { children, ...rest } = props;
|
|
40
|
+
return (React.createElement(IconButton, { styleType: 'borderless', size: 'small', "aria-label": 'Close', ref: ref, ...rest }, children ?? React.createElement(SvgCloseSmall, null)));
|
|
41
|
+
});
|
|
42
|
+
AlertCloseButton.displayName = 'Alert.CloseButton';
|
|
8
43
|
/**
|
|
9
44
|
* A small box to quickly grab user attention and communicate a brief message
|
|
10
45
|
* @example
|
|
11
|
-
* <Alert>
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* <Alert
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* >
|
|
20
|
-
*
|
|
46
|
+
* <Alert>
|
|
47
|
+
* <Alert.Message>This is an alert.</Alert.Message>
|
|
48
|
+
* </Alert>
|
|
49
|
+
* @example
|
|
50
|
+
* <Alert type='informational'>
|
|
51
|
+
* <Alert.Icon />
|
|
52
|
+
* <Alert.Message>This is an informational alert.</Alert.Message>
|
|
53
|
+
* <Alert.CloseButton onClick={() => {}} />
|
|
54
|
+
* </Alert>
|
|
55
|
+
* @example
|
|
56
|
+
* <Alert type='positive'>
|
|
57
|
+
* <Alert.Icon>
|
|
58
|
+
* <SvgSmileyHappy />
|
|
59
|
+
* </Alert.Icon>
|
|
60
|
+
* <Alert.Message>
|
|
61
|
+
* This is an alert.
|
|
62
|
+
* <Alert.Action>This is clickable text.</Alert.Action>
|
|
63
|
+
* </Alert.Message>
|
|
64
|
+
* <Alert.CloseButton onClick={() => {}}>
|
|
65
|
+
* <SvgCollapse />
|
|
66
|
+
* </Alert.CloseButton>
|
|
21
67
|
* </Alert>
|
|
22
68
|
*/
|
|
23
|
-
export const Alert =
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
69
|
+
export const Alert = Object.assign(AlertComponent, {
|
|
70
|
+
/**
|
|
71
|
+
* Alert icon subcomponent
|
|
72
|
+
*/
|
|
73
|
+
Icon: AlertIcon,
|
|
74
|
+
/**
|
|
75
|
+
* Alert message subcomponent
|
|
76
|
+
*/
|
|
77
|
+
Message: AlertMessage,
|
|
78
|
+
/**
|
|
79
|
+
* Alert action subcomponent for the link you want to provide.
|
|
80
|
+
*/
|
|
81
|
+
Action: AlertAction,
|
|
82
|
+
/**
|
|
83
|
+
* Alert close button subcomponent
|
|
84
|
+
*/
|
|
85
|
+
CloseButton: AlertCloseButton,
|
|
34
86
|
});
|
|
35
87
|
export default Alert;
|
|
@@ -30,7 +30,7 @@ export const Avatar = React.forwardRef((props, ref) => {
|
|
|
30
30
|
const { size = 'small', status, abbreviation, image, backgroundColor, title, translatedStatusTitles, className, style, ...rest } = props;
|
|
31
31
|
const statusTitles = { ...defaultStatusTitles, ...translatedStatusTitles };
|
|
32
32
|
return (React.createElement(Box, { as: 'span', className: cx('iui-avatar', { [`iui-${size}`]: size !== 'medium' }, className), title: title, style: { backgroundColor, ...style }, ref: ref, ...rest },
|
|
33
|
-
!image && (React.createElement(Box, { as: 'abbr', className: 'iui-initials' }, abbreviation
|
|
33
|
+
!image && (React.createElement(Box, { as: 'abbr', className: 'iui-initials' }, abbreviation?.substring(0, 2))),
|
|
34
34
|
image,
|
|
35
35
|
React.createElement(Box, { as: 'span', className: 'iui-stroke' }),
|
|
36
36
|
status && (React.createElement(Box, { as: 'span', title: statusTitles[status], className: cx('iui-status', {
|
|
@@ -50,7 +50,7 @@ export const AvatarGroup = React.forwardRef((props, ref) => {
|
|
|
50
50
|
childrenArray.length <= maxIcons + 1 && getAvatarList(maxIcons + 1),
|
|
51
51
|
childrenArray.length > maxIcons + 1 && (React.createElement(React.Fragment, null,
|
|
52
52
|
getAvatarList(maxIcons),
|
|
53
|
-
React.createElement(Box, { ...countIconProps, className: cx('iui-avatar', { [`iui-${iconSize}`]: iconSize !== 'medium' }, 'iui-avatar-count', countIconProps
|
|
53
|
+
React.createElement(Box, { ...countIconProps, className: cx('iui-avatar', { [`iui-${iconSize}`]: iconSize !== 'medium' }, 'iui-avatar-count', countIconProps?.className) },
|
|
54
54
|
React.createElement(Box, { as: 'abbr', className: 'iui-initials' }, childrenLength <= maxLength
|
|
55
55
|
? `${childrenLength - maxIcons}`
|
|
56
56
|
: `${maxLength}+`),
|
|
@@ -53,12 +53,11 @@ export const Breadcrumbs = React.forwardRef((props, ref) => {
|
|
|
53
53
|
}))));
|
|
54
54
|
});
|
|
55
55
|
const ListItem = ({ item, isActive, }) => {
|
|
56
|
-
var _a;
|
|
57
56
|
return (React.createElement(Box, { as: 'li', className: 'iui-breadcrumbs-item iui-breadcrumbs-item-overrides' }, React.isValidElement(item)
|
|
58
57
|
? React.cloneElement(item, {
|
|
59
|
-
'aria-current':
|
|
58
|
+
'aria-current': item.props['aria-current'] ?? isActive ? 'location' : undefined,
|
|
60
59
|
})
|
|
61
60
|
: item));
|
|
62
61
|
};
|
|
63
|
-
const Separator = ({ separator }) => (React.createElement(Box, { as: 'li', className: 'iui-breadcrumbs-separator', "aria-hidden": true }, separator
|
|
62
|
+
const Separator = ({ separator }) => (React.createElement(Box, { as: 'li', className: 'iui-breadcrumbs-separator', "aria-hidden": true }, separator ?? React.createElement(SvgChevronRight, null)));
|
|
64
63
|
export default Breadcrumbs;
|
|
@@ -35,10 +35,7 @@ import { useOverflow, useMergedRefs, Box } from '../utils/index.js';
|
|
|
35
35
|
*/
|
|
36
36
|
export const ButtonGroup = React.forwardRef((props, ref) => {
|
|
37
37
|
const { children, className, overflowButton, overflowPlacement = 'end', orientation = 'horizontal', ...rest } = props;
|
|
38
|
-
const items = React.useMemo(() =>
|
|
39
|
-
var _a, _b;
|
|
40
|
-
return (_b = (_a = React.Children.map(children, (child) => !!child ? React.createElement("div", null, child) : undefined)) === null || _a === void 0 ? void 0 : _a.filter(Boolean)) !== null && _b !== void 0 ? _b : [];
|
|
41
|
-
}, [children]);
|
|
38
|
+
const items = React.useMemo(() => React.Children.map(children, (child) => !!child ? React.createElement("div", null, child) : undefined)?.filter(Boolean) ?? [], [children]);
|
|
42
39
|
const [overflowRef, visibleCount] = useOverflow(items, !overflowButton, orientation);
|
|
43
40
|
const refs = useMergedRefs(overflowRef, ref);
|
|
44
41
|
return (React.createElement(Box, { className: cx({
|
|
@@ -28,14 +28,12 @@ export const DropdownButton = React.forwardRef((props, ref) => {
|
|
|
28
28
|
}
|
|
29
29
|
}, [children, size, styleType]);
|
|
30
30
|
return (React.createElement(DropdownMenu, { menuItems: menuItems, ...dropdownMenuProps, onShow: (i) => {
|
|
31
|
-
var _a;
|
|
32
31
|
setIsMenuOpen(true);
|
|
33
|
-
|
|
32
|
+
dropdownMenuProps?.onShow?.(i);
|
|
34
33
|
}, onHide: (i) => {
|
|
35
|
-
var _a;
|
|
36
34
|
setIsMenuOpen(false);
|
|
37
|
-
|
|
38
|
-
}, style: { minWidth: menuWidth, ...dropdownMenuProps
|
|
35
|
+
dropdownMenuProps?.onHide?.(i);
|
|
36
|
+
}, style: { minWidth: menuWidth, ...dropdownMenuProps?.style } },
|
|
39
37
|
React.createElement(Button, { className: cx('iui-button-dropdown', className), size: size, styleType: styleType, endIcon: isMenuOpen ? (React.createElement(SvgCaretUpSmall, { "aria-hidden": true })) : (React.createElement(SvgCaretDownSmall, { "aria-hidden": true })), ref: refs, "aria-label": 'Dropdown', ...rest }, children)));
|
|
40
38
|
});
|
|
41
39
|
export default DropdownButton;
|
|
@@ -38,7 +38,7 @@ export declare const Carousel: PolymorphicForwardRefComponent<"section", Carouse
|
|
|
38
38
|
Navigation: PolymorphicForwardRefComponent<"nav", {}> & {
|
|
39
39
|
PreviousButton: PolymorphicForwardRefComponent<"button", Omit<Pick<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "key" | keyof React.ButtonHTMLAttributes<HTMLButtonElement>> & {
|
|
40
40
|
ref?: ((instance: HTMLButtonElement | null) => void) | React.RefObject<HTMLButtonElement> | null | undefined;
|
|
41
|
-
}, "label" | "as" | "size" | "
|
|
41
|
+
}, "label" | "as" | "size" | "styleType" | "isActive"> & {
|
|
42
42
|
isActive?: boolean | undefined;
|
|
43
43
|
label?: React.ReactNode;
|
|
44
44
|
} & Omit<import("../Buttons/Button/Button.js").ButtonProps, "startIcon" | "endIcon"> & {
|
|
@@ -46,7 +46,7 @@ export declare const Carousel: PolymorphicForwardRefComponent<"section", Carouse
|
|
|
46
46
|
}>;
|
|
47
47
|
NextButton: PolymorphicForwardRefComponent<"button", Omit<Pick<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "key" | keyof React.ButtonHTMLAttributes<HTMLButtonElement>> & {
|
|
48
48
|
ref?: ((instance: HTMLButtonElement | null) => void) | React.RefObject<HTMLButtonElement> | null | undefined;
|
|
49
|
-
}, "label" | "as" | "size" | "
|
|
49
|
+
}, "label" | "as" | "size" | "styleType" | "isActive"> & {
|
|
50
50
|
isActive?: boolean | undefined;
|
|
51
51
|
label?: React.ReactNode;
|
|
52
52
|
} & Omit<import("../Buttons/Button/Button.js").ButtonProps, "startIcon" | "endIcon"> & {
|
|
@@ -14,7 +14,7 @@ import { CarouselNavigation } from './CarouselNavigation.js';
|
|
|
14
14
|
const CarouselComponent = React.forwardRef((props, ref) => {
|
|
15
15
|
const { activeSlideIndex: userActiveIndex = 0, onSlideChange, className, children, ...rest } = props;
|
|
16
16
|
// Generate a stateful random id if not specified
|
|
17
|
-
const [id] = React.useState(() =>
|
|
17
|
+
const [id] = React.useState(() => props.id ?? `iui-carousel-${getRandomValue(10)}`);
|
|
18
18
|
const isManuallyUpdating = React.useRef(false);
|
|
19
19
|
const carouselRef = React.useRef(null);
|
|
20
20
|
const refs = useMergedRefs(carouselRef, ref);
|
|
@@ -22,7 +22,6 @@ const CarouselComponent = React.forwardRef((props, ref) => {
|
|
|
22
22
|
const scrollToSlide = React.useRef(() => { }); // stub function populated in CarouselSlider
|
|
23
23
|
const justMounted = React.useRef(true);
|
|
24
24
|
React.useEffect(() => {
|
|
25
|
-
var _a;
|
|
26
25
|
setCurrentIndex(userActiveIndex);
|
|
27
26
|
scrollToSlide.current(userActiveIndex, {
|
|
28
27
|
instant: justMounted.current,
|
|
@@ -30,7 +29,7 @@ const CarouselComponent = React.forwardRef((props, ref) => {
|
|
|
30
29
|
// re-focus the carousel for keyboard nav, but not on first mount
|
|
31
30
|
// because it shows outline and might interfere with other components
|
|
32
31
|
if (!justMounted.current) {
|
|
33
|
-
|
|
32
|
+
carouselRef.current?.focus({ preventScroll: true });
|
|
34
33
|
}
|
|
35
34
|
justMounted.current = false;
|
|
36
35
|
}, [userActiveIndex]);
|
|
@@ -65,8 +64,7 @@ const CarouselComponent = React.forwardRef((props, ref) => {
|
|
|
65
64
|
};
|
|
66
65
|
const userOnSlideChange = React.useRef(onSlideChange);
|
|
67
66
|
React.useEffect(() => {
|
|
68
|
-
|
|
69
|
-
(_a = userOnSlideChange.current) === null || _a === void 0 ? void 0 : _a.call(userOnSlideChange, currentIndex);
|
|
67
|
+
userOnSlideChange.current?.(currentIndex);
|
|
70
68
|
}, [currentIndex]);
|
|
71
69
|
return (React.createElement(Box, { as: 'section', "aria-roledescription": 'carousel', tabIndex: 0, onKeyDown: handleKeyDown, onKeyUp: handleKeyUp, ref: refs, className: cx('iui-carousel', className), ...rest, id: id },
|
|
72
70
|
React.createElement(CarouselContext.Provider, { value: {
|
|
@@ -30,18 +30,17 @@ import { CarouselDot } from './CarouselDot.js';
|
|
|
30
30
|
* />
|
|
31
31
|
*/
|
|
32
32
|
export const CarouselDotsList = React.forwardRef((props, ref) => {
|
|
33
|
-
var _a, _b, _c;
|
|
34
33
|
const { currentIndex: userCurrentIndex, length, className, onSlideChange, children, ...rest } = props;
|
|
35
34
|
const context = React.useContext(CarouselContext);
|
|
36
|
-
const slideCount =
|
|
37
|
-
const currentIndex =
|
|
38
|
-
const idPrefix =
|
|
35
|
+
const slideCount = length ?? context?.slideCount ?? React.Children.count(children);
|
|
36
|
+
const currentIndex = userCurrentIndex ?? context?.currentIndex ?? 0;
|
|
37
|
+
const idPrefix = props.id ?? context?.idPrefix;
|
|
39
38
|
const handleSlideChange = React.useCallback((index) => {
|
|
40
39
|
if (context) {
|
|
41
40
|
context.setCurrentIndex(index);
|
|
42
41
|
context.scrollToSlide.current(index);
|
|
43
42
|
}
|
|
44
|
-
onSlideChange
|
|
43
|
+
onSlideChange?.(index);
|
|
45
44
|
}, [context, onSlideChange]);
|
|
46
45
|
const justMounted = React.useRef(true);
|
|
47
46
|
const [visibleCount, setVisibleCount] = React.useState(slideCount);
|
|
@@ -55,7 +54,7 @@ export const CarouselDotsList = React.forwardRef((props, ref) => {
|
|
|
55
54
|
const dotWidth = listRef.current.children[0].offsetWidth;
|
|
56
55
|
setVisibleCount(Math.floor(width / dotWidth));
|
|
57
56
|
});
|
|
58
|
-
React.useEffect(() => resizeObserver
|
|
57
|
+
React.useEffect(() => resizeObserver?.disconnect(), [resizeObserver]);
|
|
59
58
|
const refs = useMergedRefs(ref, resizeRef, listRef);
|
|
60
59
|
const firstVisibleDotIndex = React.useMemo(() => getBoundedValue(currentIndex - Math.ceil(visibleCount / 2) + 1, 0, slideCount - visibleCount), [currentIndex, slideCount, visibleCount]);
|
|
61
60
|
const lastVisibleDotIndex = React.useMemo(() => getBoundedValue(currentIndex + Math.floor(visibleCount / 2), visibleCount - 1, slideCount - 1), [currentIndex, slideCount, visibleCount]);
|
|
@@ -79,12 +78,11 @@ export const CarouselDotsList = React.forwardRef((props, ref) => {
|
|
|
79
78
|
handleSlideChange,
|
|
80
79
|
]);
|
|
81
80
|
React.useEffect(() => {
|
|
82
|
-
|
|
83
|
-
const firstDot = (_a = listRef.current) === null || _a === void 0 ? void 0 : _a.children[firstVisibleDotIndex];
|
|
81
|
+
const firstDot = listRef.current?.children[firstVisibleDotIndex];
|
|
84
82
|
if (!listRef.current || !firstDot) {
|
|
85
83
|
return;
|
|
86
84
|
}
|
|
87
|
-
const motionOk =
|
|
85
|
+
const motionOk = getWindow()?.matchMedia('(prefers-reduced-motion: no-preference)')?.matches;
|
|
88
86
|
listRef.current.scrollTo({
|
|
89
87
|
left: firstDot.offsetLeft - listRef.current.offsetLeft,
|
|
90
88
|
behavior: motionOk && !justMounted.current ? 'smooth' : 'auto',
|
|
@@ -94,5 +92,5 @@ export const CarouselDotsList = React.forwardRef((props, ref) => {
|
|
|
94
92
|
}
|
|
95
93
|
}, [currentIndex, firstVisibleDotIndex, slideCount, visibleCount, width]);
|
|
96
94
|
return (React.createElement(React.Fragment, null,
|
|
97
|
-
React.createElement(Box, { className: cx('iui-carousel-navigation-dots', className), role: 'tablist', "aria-label": 'Slides', ref: refs, ...rest }, children
|
|
95
|
+
React.createElement(Box, { className: cx('iui-carousel-navigation-dots', className), role: 'tablist', "aria-label": 'Slides', ref: refs, ...rest }, children ?? dots)));
|
|
98
96
|
});
|
|
@@ -9,7 +9,7 @@ import type { PolymorphicForwardRefComponent } from '../utils/index.js';
|
|
|
9
9
|
export declare const CarouselNavigation: PolymorphicForwardRefComponent<"nav", {}> & {
|
|
10
10
|
PreviousButton: PolymorphicForwardRefComponent<"button", Omit<Pick<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "key" | keyof React.ButtonHTMLAttributes<HTMLButtonElement>> & {
|
|
11
11
|
ref?: ((instance: HTMLButtonElement | null) => void) | React.RefObject<HTMLButtonElement> | null | undefined;
|
|
12
|
-
}, "label" | "as" | "size" | "
|
|
12
|
+
}, "label" | "as" | "size" | "styleType" | "isActive"> & {
|
|
13
13
|
isActive?: boolean | undefined;
|
|
14
14
|
label?: React.ReactNode;
|
|
15
15
|
} & Omit<import("../Buttons/Button/Button.js").ButtonProps, "startIcon" | "endIcon"> & {
|
|
@@ -17,7 +17,7 @@ export declare const CarouselNavigation: PolymorphicForwardRefComponent<"nav", {
|
|
|
17
17
|
}>;
|
|
18
18
|
NextButton: PolymorphicForwardRefComponent<"button", Omit<Pick<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "key" | keyof React.ButtonHTMLAttributes<HTMLButtonElement>> & {
|
|
19
19
|
ref?: ((instance: HTMLButtonElement | null) => void) | React.RefObject<HTMLButtonElement> | null | undefined;
|
|
20
|
-
}, "label" | "as" | "size" | "
|
|
20
|
+
}, "label" | "as" | "size" | "styleType" | "isActive"> & {
|
|
21
21
|
isActive?: boolean | undefined;
|
|
22
22
|
label?: React.ReactNode;
|
|
23
23
|
} & Omit<import("../Buttons/Button/Button.js").ButtonProps, "startIcon" | "endIcon"> & {
|
|
@@ -10,7 +10,7 @@ import { CarouselDotsList } from './CarouselDotsList.js';
|
|
|
10
10
|
import { Box, SvgChevronLeft, SvgChevronRight } from '../utils/index.js';
|
|
11
11
|
const CarouselNavigationComponent = React.forwardRef((props, ref) => {
|
|
12
12
|
const { className, children, ...rest } = props;
|
|
13
|
-
return (React.createElement(Box, { as: 'nav', className: cx('iui-carousel-navigation', className), ref: ref, ...rest }, children
|
|
13
|
+
return (React.createElement(Box, { as: 'nav', className: cx('iui-carousel-navigation', className), ref: ref, ...rest }, children ?? (React.createElement(React.Fragment, null,
|
|
14
14
|
React.createElement(Box, { className: 'iui-carousel-navigation-left' },
|
|
15
15
|
React.createElement(PreviousButton, null)),
|
|
16
16
|
React.createElement(CarouselDotsList, null),
|
|
@@ -25,11 +25,10 @@ const PreviousButton = React.forwardRef((props, ref) => {
|
|
|
25
25
|
}
|
|
26
26
|
const { slideCount, currentIndex, setCurrentIndex, keysPressed, scrollToSlide, } = context;
|
|
27
27
|
return (React.createElement(IconButton, { styleType: 'borderless', size: 'small', tabIndex: -1, "data-pressed": keysPressed['ArrowLeft'] || undefined, ref: ref, ...props, onClick: (e) => {
|
|
28
|
-
var _a;
|
|
29
28
|
const prevIndex = (slideCount + currentIndex - 1) % slideCount;
|
|
30
29
|
setCurrentIndex(prevIndex);
|
|
31
30
|
scrollToSlide.current(prevIndex, { instant: e.detail > 3 });
|
|
32
|
-
|
|
31
|
+
props?.onClick?.(e);
|
|
33
32
|
} },
|
|
34
33
|
React.createElement(SvgChevronLeft, null)));
|
|
35
34
|
});
|
|
@@ -41,11 +40,10 @@ const NextButton = React.forwardRef((props, ref) => {
|
|
|
41
40
|
}
|
|
42
41
|
const { slideCount, currentIndex, setCurrentIndex, keysPressed, scrollToSlide, } = context;
|
|
43
42
|
return (React.createElement(IconButton, { styleType: 'borderless', size: 'small', tabIndex: -1, "data-pressed": keysPressed['ArrowRight'] || undefined, ref: ref, ...props, onClick: (e) => {
|
|
44
|
-
var _a;
|
|
45
43
|
const nextIndex = (slideCount + currentIndex + 1) % slideCount;
|
|
46
44
|
setCurrentIndex(nextIndex);
|
|
47
45
|
scrollToSlide.current(nextIndex, { instant: e.detail > 3 });
|
|
48
|
-
|
|
46
|
+
props?.onClick?.(e);
|
|
49
47
|
} },
|
|
50
48
|
React.createElement(SvgChevronRight, null)));
|
|
51
49
|
});
|
|
@@ -16,28 +16,24 @@ export const CarouselSlider = React.forwardRef((props, ref) => {
|
|
|
16
16
|
throw new Error('CarouselSlider must be used within Carousel');
|
|
17
17
|
}
|
|
18
18
|
const { setSlideCount, idPrefix, scrollToSlide, isManuallyUpdating } = context;
|
|
19
|
-
const items = React.useMemo(() =>
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
})
|
|
26
|
-
: child)) !== null && _a !== void 0 ? _a : [];
|
|
27
|
-
}, [children, idPrefix]);
|
|
19
|
+
const items = React.useMemo(() => React.Children.map(children, (child, index) => React.isValidElement(child)
|
|
20
|
+
? React.cloneElement(child, {
|
|
21
|
+
id: `${idPrefix}--slide-${index}`,
|
|
22
|
+
index,
|
|
23
|
+
})
|
|
24
|
+
: child) ?? [], [children, idPrefix]);
|
|
28
25
|
useIsomorphicLayoutEffect(() => {
|
|
29
26
|
setSlideCount(items.length);
|
|
30
27
|
}, [items.length, setSlideCount]);
|
|
31
28
|
const sliderRef = React.useRef(null);
|
|
32
29
|
const refs = useMergedRefs(sliderRef, ref);
|
|
33
30
|
scrollToSlide.current = (slideIndex, { instant } = {}) => {
|
|
34
|
-
var _a, _b, _c;
|
|
35
31
|
isManuallyUpdating.current = true; // start manual update
|
|
36
|
-
const slideToShow =
|
|
32
|
+
const slideToShow = sliderRef.current?.children.item(slideIndex);
|
|
37
33
|
if (!sliderRef.current || !slideToShow) {
|
|
38
34
|
return;
|
|
39
35
|
}
|
|
40
|
-
const motionOk =
|
|
36
|
+
const motionOk = getWindow()?.matchMedia('(prefers-reduced-motion: no-preference)')?.matches;
|
|
41
37
|
sliderRef.current.scrollTo({
|
|
42
38
|
left: slideToShow.offsetLeft - sliderRef.current.offsetLeft,
|
|
43
39
|
behavior: (instant || !motionOk ? 'instant' : 'smooth'), // scrollTo accepts 'instant' but ScrollBehavior type is wrong
|
|
@@ -46,11 +42,10 @@ export const CarouselSlider = React.forwardRef((props, ref) => {
|
|
|
46
42
|
const scrollTimeout = React.useRef();
|
|
47
43
|
// reset isManuallyUpdating.current to false after the last scroll event
|
|
48
44
|
const handleOnScroll = React.useCallback(() => {
|
|
49
|
-
var _a, _b;
|
|
50
45
|
if (scrollTimeout.current) {
|
|
51
|
-
|
|
46
|
+
getWindow()?.clearTimeout(scrollTimeout.current);
|
|
52
47
|
}
|
|
53
|
-
scrollTimeout.current =
|
|
48
|
+
scrollTimeout.current = getWindow()?.setTimeout(() => {
|
|
54
49
|
isManuallyUpdating.current = false;
|
|
55
50
|
}, 100);
|
|
56
51
|
}, [isManuallyUpdating]);
|
|
@@ -21,7 +21,6 @@ const getHorizontalPercentageOfRectangle = (rect, pointer) => {
|
|
|
21
21
|
* and a set of sliders to adjust hue and alpha values.
|
|
22
22
|
*/
|
|
23
23
|
export const ColorBuilder = React.forwardRef((props, ref) => {
|
|
24
|
-
var _a, _b, _c;
|
|
25
24
|
const { className, ...rest } = props;
|
|
26
25
|
const builderRef = React.useRef();
|
|
27
26
|
const refs = useMergedRefs(builderRef, ref);
|
|
@@ -29,7 +28,7 @@ export const ColorBuilder = React.forwardRef((props, ref) => {
|
|
|
29
28
|
// Set values for slider
|
|
30
29
|
const hueSliderColor = React.useMemo(() => ColorValue.create({ h: hsvColor.h, s: 100, v: 100 }), [hsvColor.h]);
|
|
31
30
|
const sliderValue = React.useMemo(() => hsvColor.h, [hsvColor]);
|
|
32
|
-
const alphaValue = React.useMemo(() =>
|
|
31
|
+
const alphaValue = React.useMemo(() => (showAlpha ? hsvColor.a ?? 1 : 1), [hsvColor.a, showAlpha]);
|
|
33
32
|
// Set values for color square and color dot
|
|
34
33
|
const dotColorString = React.useMemo(() => activeColor.toHexString(), [activeColor]);
|
|
35
34
|
const [colorDotActive, setColorDotActive] = React.useState(false);
|
|
@@ -92,7 +91,7 @@ export const ColorBuilder = React.forwardRef((props, ref) => {
|
|
|
92
91
|
event.preventDefault();
|
|
93
92
|
event.stopPropagation();
|
|
94
93
|
}, [colorDotActive, updateSquareValue]);
|
|
95
|
-
useEventListener('pointerup', handleSquarePointerUp,
|
|
94
|
+
useEventListener('pointerup', handleSquarePointerUp, builderRef.current?.ownerDocument);
|
|
96
95
|
const handleSquarePointerMove = React.useCallback((event) => {
|
|
97
96
|
if (!colorDotActive) {
|
|
98
97
|
return;
|
|
@@ -101,7 +100,7 @@ export const ColorBuilder = React.forwardRef((props, ref) => {
|
|
|
101
100
|
event.stopPropagation();
|
|
102
101
|
updateSquareValue(event, 'onUpdate');
|
|
103
102
|
}, [colorDotActive, updateSquareValue]);
|
|
104
|
-
useEventListener('pointermove', handleSquarePointerMove,
|
|
103
|
+
useEventListener('pointermove', handleSquarePointerMove, builderRef.current?.ownerDocument);
|
|
105
104
|
const handleSquarePointerLeave = React.useCallback((event) => {
|
|
106
105
|
if (!colorDotActive) {
|
|
107
106
|
return;
|
|
@@ -109,7 +108,7 @@ export const ColorBuilder = React.forwardRef((props, ref) => {
|
|
|
109
108
|
updateSquareValue(event, 'onChange');
|
|
110
109
|
setColorDotActive(false);
|
|
111
110
|
}, [colorDotActive, updateSquareValue]);
|
|
112
|
-
useEventListener('pointerleave', handleSquarePointerLeave,
|
|
111
|
+
useEventListener('pointerleave', handleSquarePointerLeave, builderRef.current?.ownerDocument);
|
|
113
112
|
const keysPressed = React.useRef({}); // keep track of which keys are currently pressed
|
|
114
113
|
// Arrow key navigation for color dot
|
|
115
114
|
const handleColorDotKeyDown = (event) => {
|
|
@@ -153,7 +152,7 @@ export const ColorBuilder = React.forwardRef((props, ref) => {
|
|
|
153
152
|
keysPressed.current['ArrowRight']) {
|
|
154
153
|
return;
|
|
155
154
|
}
|
|
156
|
-
onChangeComplete
|
|
155
|
+
onChangeComplete?.(ColorValue.create(hsvColor));
|
|
157
156
|
break;
|
|
158
157
|
}
|
|
159
158
|
};
|
|
@@ -162,18 +161,16 @@ export const ColorBuilder = React.forwardRef((props, ref) => {
|
|
|
162
161
|
'--iui-color-field-hue': hueColorString,
|
|
163
162
|
'--iui-color-picker-selected-color': dotColorString,
|
|
164
163
|
}, ref: squareRef, onPointerDown: (event) => {
|
|
165
|
-
var _a;
|
|
166
164
|
event.preventDefault();
|
|
167
165
|
updateSquareValue(event, 'onClick');
|
|
168
166
|
setColorDotActive(true);
|
|
169
|
-
|
|
167
|
+
colorDotRef.current?.focus();
|
|
170
168
|
} },
|
|
171
169
|
React.createElement(Box, { className: 'iui-color-dot', style: {
|
|
172
170
|
'--iui-color-dot-inset': `${squareTop.toString()}% auto auto ${squareLeft.toString()}%`,
|
|
173
171
|
}, onPointerDown: () => {
|
|
174
|
-
var _a;
|
|
175
172
|
setColorDotActive(true);
|
|
176
|
-
|
|
173
|
+
colorDotRef.current?.focus();
|
|
177
174
|
}, onKeyDown: handleColorDotKeyDown, onKeyUp: handleColorDotKeyUp, tabIndex: 0, ref: colorDotRef })),
|
|
178
175
|
React.createElement(Slider, { minLabel: '', maxLabel: '', values: [sliderValue], className: 'iui-hue-slider', trackDisplayMode: 'none', tooltipProps: () => ({ visible: false }), onChange: (values) => {
|
|
179
176
|
updateHueSlider(values[0], true);
|