@hitachivantara/uikit-react-core 5.19.3 → 5.20.1
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/dist/cjs/components/Accordion/Accordion.cjs +19 -11
- package/dist/cjs/components/Accordion/Accordion.cjs.map +1 -1
- package/dist/cjs/components/Accordion/Accordion.styles.cjs +44 -68
- package/dist/cjs/components/Accordion/Accordion.styles.cjs.map +1 -1
- package/dist/cjs/components/ActionsGeneric/ActionsGeneric.cjs +22 -12
- package/dist/cjs/components/ActionsGeneric/ActionsGeneric.cjs.map +1 -1
- package/dist/cjs/components/ActionsGeneric/ActionsGeneric.styles.cjs +17 -53
- package/dist/cjs/components/ActionsGeneric/ActionsGeneric.styles.cjs.map +1 -1
- package/dist/cjs/components/AppSwitcher/Action/Action.cjs +23 -16
- package/dist/cjs/components/AppSwitcher/Action/Action.cjs.map +1 -1
- package/dist/cjs/components/AppSwitcher/Action/Action.styles.cjs +51 -91
- package/dist/cjs/components/AppSwitcher/Action/Action.styles.cjs.map +1 -1
- package/dist/cjs/components/AppSwitcher/AppSwitcher.cjs +28 -24
- package/dist/cjs/components/AppSwitcher/AppSwitcher.cjs.map +1 -1
- package/dist/cjs/components/AppSwitcher/AppSwitcher.styles.cjs +52 -116
- package/dist/cjs/components/AppSwitcher/AppSwitcher.styles.cjs.map +1 -1
- package/dist/cjs/components/AppSwitcher/TitleWithTooltip.cjs +3 -6
- package/dist/cjs/components/AppSwitcher/TitleWithTooltip.cjs.map +1 -1
- package/dist/cjs/components/BaseDropdown/BaseDropdown.cjs +6 -14
- package/dist/cjs/components/BaseDropdown/BaseDropdown.cjs.map +1 -1
- package/dist/cjs/components/BreadCrumb/Page/Page.styles.cjs +2 -2
- package/dist/cjs/components/BreadCrumb/Page/Page.styles.cjs.map +1 -1
- package/dist/cjs/components/Button/Button.cjs +1 -1
- package/dist/cjs/components/Button/Button.cjs.map +1 -1
- package/dist/cjs/components/Button/Button.styles.cjs +2 -2
- package/dist/cjs/components/Button/Button.styles.cjs.map +1 -1
- package/dist/cjs/components/Calendar/CalendarHeader/CalendarHeader.cjs +2 -6
- package/dist/cjs/components/Calendar/CalendarHeader/CalendarHeader.cjs.map +1 -1
- package/dist/cjs/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.cjs +2 -3
- package/dist/cjs/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.cjs.map +1 -1
- package/dist/cjs/components/Calendar/CalendarNavigation/Navigation/Navigation.cjs +2 -3
- package/dist/cjs/components/Calendar/CalendarNavigation/Navigation/Navigation.cjs.map +1 -1
- package/dist/cjs/components/Calendar/SingleCalendar/SingleCalendar.cjs +6 -14
- package/dist/cjs/components/Calendar/SingleCalendar/SingleCalendar.cjs.map +1 -1
- package/dist/cjs/components/Dialog/Actions/Actions.cjs.map +1 -1
- package/dist/cjs/components/Dialog/Content/Content.cjs.map +1 -1
- package/dist/cjs/components/Dialog/Dialog.cjs +47 -46
- package/dist/cjs/components/Dialog/Dialog.cjs.map +1 -1
- package/dist/cjs/components/Dialog/Dialog.styles.cjs +15 -0
- package/dist/cjs/components/Dialog/Dialog.styles.cjs.map +1 -1
- package/dist/cjs/components/Dialog/Title/Title.cjs.map +1 -1
- package/dist/cjs/components/Drawer/Drawer.cjs +1 -1
- package/dist/cjs/components/Drawer/Drawer.cjs.map +1 -1
- package/dist/cjs/components/DropDownMenu/DropDownMenu.cjs +2 -3
- package/dist/cjs/components/DropDownMenu/DropDownMenu.cjs.map +1 -1
- package/dist/cjs/components/FileUploader/DropZone/DropZone.cjs +2 -3
- package/dist/cjs/components/FileUploader/DropZone/DropZone.cjs.map +1 -1
- package/dist/cjs/components/Focus/Focus.cjs +22 -44
- package/dist/cjs/components/Focus/Focus.cjs.map +1 -1
- package/dist/cjs/components/Focus/utils.cjs +0 -5
- package/dist/cjs/components/Focus/utils.cjs.map +1 -1
- package/dist/cjs/components/Header/Navigation/MenuBar/MenuBar.cjs +5 -1
- package/dist/cjs/components/Header/Navigation/MenuBar/MenuBar.cjs.map +1 -1
- package/dist/cjs/components/Header/Navigation/MenuItem/MenuItem.cjs +9 -6
- package/dist/cjs/components/Header/Navigation/MenuItem/MenuItem.cjs.map +1 -1
- package/dist/cjs/components/Header/Navigation/Navigation.cjs +4 -1
- package/dist/cjs/components/Header/Navigation/Navigation.cjs.map +1 -1
- package/dist/cjs/components/InlineEditor/InlineEditor.cjs +4 -5
- package/dist/cjs/components/InlineEditor/InlineEditor.cjs.map +1 -1
- package/dist/cjs/components/Input/Input.cjs +5 -6
- package/dist/cjs/components/Input/Input.cjs.map +1 -1
- package/dist/cjs/components/Pagination/Pagination.cjs +2 -6
- package/dist/cjs/components/Pagination/Pagination.cjs.map +1 -1
- package/dist/cjs/components/ScrollTo/Horizontal/ScrollToHorizontal.cjs +2 -6
- package/dist/cjs/components/ScrollTo/Horizontal/ScrollToHorizontal.cjs.map +1 -1
- package/dist/cjs/components/ScrollTo/Vertical/ScrollToVertical.cjs +2 -6
- package/dist/cjs/components/ScrollTo/Vertical/ScrollToVertical.cjs.map +1 -1
- package/dist/cjs/components/SelectionList/SelectionList.cjs +3 -8
- package/dist/cjs/components/SelectionList/SelectionList.cjs.map +1 -1
- package/dist/cjs/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.styles.cjs +5 -2
- package/dist/cjs/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.styles.cjs.map +1 -1
- package/dist/cjs/components/TagsInput/TagsInput.cjs +3 -4
- package/dist/cjs/components/TagsInput/TagsInput.cjs.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.cjs +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
- package/dist/cjs/components/Typography/Typography.cjs +1 -1
- package/dist/cjs/components/Typography/Typography.cjs.map +1 -1
- package/dist/cjs/components/VerticalNavigation/Actions/Action.cjs +2 -3
- package/dist/cjs/components/VerticalNavigation/Actions/Action.cjs.map +1 -1
- package/dist/cjs/hooks/useCss.cjs +4 -13
- package/dist/cjs/hooks/useCss.cjs.map +1 -1
- package/dist/cjs/hooks/useEmotionCache.cjs +4 -4
- package/dist/cjs/hooks/useEmotionCache.cjs.map +1 -1
- package/dist/cjs/hooks/useTheme.cjs +3 -1
- package/dist/cjs/hooks/useTheme.cjs.map +1 -1
- package/dist/cjs/index.cjs +25 -19
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/providers/Provider.cjs +5 -4
- package/dist/cjs/providers/Provider.cjs.map +1 -1
- package/dist/cjs/providers/ThemeProvider.cjs +13 -15
- package/dist/cjs/providers/ThemeProvider.cjs.map +1 -1
- package/dist/cjs/utils/keyboardUtils.cjs +30 -0
- package/dist/cjs/utils/keyboardUtils.cjs.map +1 -0
- package/dist/esm/components/Accordion/Accordion.js +22 -13
- package/dist/esm/components/Accordion/Accordion.js.map +1 -1
- package/dist/esm/components/Accordion/Accordion.styles.js +44 -66
- package/dist/esm/components/Accordion/Accordion.styles.js.map +1 -1
- package/dist/esm/components/ActionsGeneric/ActionsGeneric.js +25 -14
- package/dist/esm/components/ActionsGeneric/ActionsGeneric.js.map +1 -1
- package/dist/esm/components/ActionsGeneric/ActionsGeneric.styles.js +17 -51
- package/dist/esm/components/ActionsGeneric/ActionsGeneric.styles.js.map +1 -1
- package/dist/esm/components/AppSwitcher/Action/Action.js +26 -18
- package/dist/esm/components/AppSwitcher/Action/Action.js.map +1 -1
- package/dist/esm/components/AppSwitcher/Action/Action.styles.js +51 -89
- package/dist/esm/components/AppSwitcher/Action/Action.styles.js.map +1 -1
- package/dist/esm/components/AppSwitcher/AppSwitcher.js +31 -26
- package/dist/esm/components/AppSwitcher/AppSwitcher.js.map +1 -1
- package/dist/esm/components/AppSwitcher/AppSwitcher.styles.js +52 -114
- package/dist/esm/components/AppSwitcher/AppSwitcher.styles.js.map +1 -1
- package/dist/esm/components/AppSwitcher/TitleWithTooltip.js +3 -6
- package/dist/esm/components/AppSwitcher/TitleWithTooltip.js.map +1 -1
- package/dist/esm/components/BaseDropdown/BaseDropdown.js +6 -14
- package/dist/esm/components/BaseDropdown/BaseDropdown.js.map +1 -1
- package/dist/esm/components/BreadCrumb/Page/Page.styles.js +1 -1
- package/dist/esm/components/BreadCrumb/Page/Page.styles.js.map +1 -1
- package/dist/esm/components/Button/Button.js +1 -1
- package/dist/esm/components/Button/Button.js.map +1 -1
- package/dist/esm/components/Button/Button.styles.js +2 -2
- package/dist/esm/components/Button/Button.styles.js.map +1 -1
- package/dist/esm/components/Calendar/CalendarHeader/CalendarHeader.js +2 -6
- package/dist/esm/components/Calendar/CalendarHeader/CalendarHeader.js.map +1 -1
- package/dist/esm/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.js +2 -3
- package/dist/esm/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.js.map +1 -1
- package/dist/esm/components/Calendar/CalendarNavigation/Navigation/Navigation.js +2 -3
- package/dist/esm/components/Calendar/CalendarNavigation/Navigation/Navigation.js.map +1 -1
- package/dist/esm/components/Calendar/SingleCalendar/SingleCalendar.js +6 -14
- package/dist/esm/components/Calendar/SingleCalendar/SingleCalendar.js.map +1 -1
- package/dist/esm/components/Dialog/Actions/Actions.js.map +1 -1
- package/dist/esm/components/Dialog/Content/Content.js.map +1 -1
- package/dist/esm/components/Dialog/Dialog.js +47 -46
- package/dist/esm/components/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/Dialog/Dialog.styles.js +15 -0
- package/dist/esm/components/Dialog/Dialog.styles.js.map +1 -1
- package/dist/esm/components/Dialog/Title/Title.js.map +1 -1
- package/dist/esm/components/Drawer/Drawer.js +1 -1
- package/dist/esm/components/Drawer/Drawer.js.map +1 -1
- package/dist/esm/components/DropDownMenu/DropDownMenu.js +2 -3
- package/dist/esm/components/DropDownMenu/DropDownMenu.js.map +1 -1
- package/dist/esm/components/FileUploader/DropZone/DropZone.js +2 -3
- package/dist/esm/components/FileUploader/DropZone/DropZone.js.map +1 -1
- package/dist/esm/components/Focus/Focus.js +23 -45
- package/dist/esm/components/Focus/Focus.js.map +1 -1
- package/dist/esm/components/Focus/utils.js +0 -5
- package/dist/esm/components/Focus/utils.js.map +1 -1
- package/dist/esm/components/Header/Navigation/MenuBar/MenuBar.js +5 -1
- package/dist/esm/components/Header/Navigation/MenuBar/MenuBar.js.map +1 -1
- package/dist/esm/components/Header/Navigation/MenuItem/MenuItem.js +9 -6
- package/dist/esm/components/Header/Navigation/MenuItem/MenuItem.js.map +1 -1
- package/dist/esm/components/Header/Navigation/Navigation.js +4 -1
- package/dist/esm/components/Header/Navigation/Navigation.js.map +1 -1
- package/dist/esm/components/InlineEditor/InlineEditor.js +3 -4
- package/dist/esm/components/InlineEditor/InlineEditor.js.map +1 -1
- package/dist/esm/components/Input/Input.js +5 -6
- package/dist/esm/components/Input/Input.js.map +1 -1
- package/dist/esm/components/Pagination/Pagination.js +2 -6
- package/dist/esm/components/Pagination/Pagination.js.map +1 -1
- package/dist/esm/components/ScrollTo/Horizontal/ScrollToHorizontal.js +2 -6
- package/dist/esm/components/ScrollTo/Horizontal/ScrollToHorizontal.js.map +1 -1
- package/dist/esm/components/ScrollTo/Vertical/ScrollToVertical.js +2 -6
- package/dist/esm/components/ScrollTo/Vertical/ScrollToVertical.js.map +1 -1
- package/dist/esm/components/SelectionList/SelectionList.js +3 -8
- package/dist/esm/components/SelectionList/SelectionList.js.map +1 -1
- package/dist/esm/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.styles.js +5 -2
- package/dist/esm/components/Snackbar/SnackbarContentWrapper/SnackbarContentWrapper.styles.js.map +1 -1
- package/dist/esm/components/TagsInput/TagsInput.js +3 -4
- package/dist/esm/components/TagsInput/TagsInput.js.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.js +1 -1
- package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/components/Typography/Typography.js +1 -1
- package/dist/esm/components/Typography/Typography.js.map +1 -1
- package/dist/esm/components/VerticalNavigation/Actions/Action.js +2 -3
- package/dist/esm/components/VerticalNavigation/Actions/Action.js.map +1 -1
- package/dist/esm/hooks/useCss.js +4 -13
- package/dist/esm/hooks/useCss.js.map +1 -1
- package/dist/esm/hooks/useEmotionCache.js +4 -4
- package/dist/esm/hooks/useEmotionCache.js.map +1 -1
- package/dist/esm/hooks/useTheme.js +3 -1
- package/dist/esm/hooks/useTheme.js.map +1 -1
- package/dist/esm/index.js +241 -244
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/providers/Provider.js +4 -3
- package/dist/esm/providers/Provider.js.map +1 -1
- package/dist/esm/providers/ThemeProvider.js +4 -13
- package/dist/esm/providers/ThemeProvider.js.map +1 -1
- package/dist/esm/utils/keyboardUtils.js +30 -0
- package/dist/esm/utils/keyboardUtils.js.map +1 -0
- package/dist/types/index.d.ts +261 -317
- package/package.json +4 -4
- package/dist/cjs/components/Accordion/accordionClasses.cjs +0 -8
- package/dist/cjs/components/Accordion/accordionClasses.cjs.map +0 -1
- package/dist/cjs/components/ActionsGeneric/actionsGenericClasses.cjs +0 -8
- package/dist/cjs/components/ActionsGeneric/actionsGenericClasses.cjs.map +0 -1
- package/dist/cjs/components/AppSwitcher/Action/actionClasses.cjs +0 -8
- package/dist/cjs/components/AppSwitcher/Action/actionClasses.cjs.map +0 -1
- package/dist/cjs/components/AppSwitcher/appSwitcherClasses.cjs +0 -8
- package/dist/cjs/components/AppSwitcher/appSwitcherClasses.cjs.map +0 -1
- package/dist/cjs/utils/keyboardUtils/keyCheck.cjs +0 -9
- package/dist/cjs/utils/keyboardUtils/keyCheck.cjs.map +0 -1
- package/dist/cjs/utils/keyboardUtils/keyboardCodes.cjs +0 -105
- package/dist/cjs/utils/keyboardUtils/keyboardCodes.cjs.map +0 -1
- package/dist/esm/components/Accordion/accordionClasses.js +0 -8
- package/dist/esm/components/Accordion/accordionClasses.js.map +0 -1
- package/dist/esm/components/ActionsGeneric/actionsGenericClasses.js +0 -8
- package/dist/esm/components/ActionsGeneric/actionsGenericClasses.js.map +0 -1
- package/dist/esm/components/AppSwitcher/Action/actionClasses.js +0 -8
- package/dist/esm/components/AppSwitcher/Action/actionClasses.js.map +0 -1
- package/dist/esm/components/AppSwitcher/appSwitcherClasses.js +0 -8
- package/dist/esm/components/AppSwitcher/appSwitcherClasses.js.map +0 -1
- package/dist/esm/utils/keyboardUtils/keyCheck.js +0 -9
- package/dist/esm/utils/keyboardUtils/keyCheck.js.map +0 -1
- package/dist/esm/utils/keyboardUtils/keyboardCodes.js +0 -105
- package/dist/esm/utils/keyboardUtils/keyboardCodes.js.map +0 -1
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { useRef, useMemo } from "react";
|
|
2
|
-
import { StyledTitleWithTooltip } from "./AppSwitcher.styles.js";
|
|
3
2
|
import { jsx } from "@emotion/react/jsx-runtime";
|
|
4
3
|
import { HvTooltip } from "../Tooltip/Tooltip.js";
|
|
5
4
|
import { HvTypography } from "../Typography/Typography.js";
|
|
6
5
|
const TitleWithTooltip = ({
|
|
7
6
|
className,
|
|
8
|
-
title
|
|
9
|
-
type
|
|
7
|
+
title
|
|
10
8
|
}) => {
|
|
11
9
|
const textRef = useRef(null);
|
|
12
10
|
const isOverflowed = useMemo(() => {
|
|
@@ -21,12 +19,11 @@ const TitleWithTooltip = ({
|
|
|
21
19
|
title: /* @__PURE__ */ jsx(HvTypography, {
|
|
22
20
|
children: title
|
|
23
21
|
}),
|
|
24
|
-
children: /* @__PURE__ */ jsx(
|
|
22
|
+
children: /* @__PURE__ */ jsx(HvTypography, {
|
|
23
|
+
className,
|
|
25
24
|
variant: "label",
|
|
26
25
|
component: "span",
|
|
27
26
|
ref: textRef,
|
|
28
|
-
className,
|
|
29
|
-
$type: type,
|
|
30
27
|
children: title
|
|
31
28
|
})
|
|
32
29
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TitleWithTooltip.js","sources":["../../../../src/components/AppSwitcher/TitleWithTooltip.tsx"],"sourcesContent":["import { useMemo, useRef } from \"react\";\nimport { HvTooltip, HvTypography } from \"@core/components\";\
|
|
1
|
+
{"version":3,"file":"TitleWithTooltip.js","sources":["../../../../src/components/AppSwitcher/TitleWithTooltip.tsx"],"sourcesContent":["import { useMemo, useRef } from \"react\";\nimport { HvTooltip, HvTypography } from \"@core/components\";\n\nconst TitleWithTooltip = ({ className, title }) => {\n const textRef = useRef<HTMLDivElement>(null);\n\n const isOverflowed = useMemo(() => {\n const el = textRef.current;\n if (!el) return false;\n\n return el.scrollWidth > el.clientWidth || el.scrollHeight > el.clientHeight;\n }, []);\n\n return (\n <HvTooltip\n disableHoverListener={!isOverflowed}\n placement=\"top-start\"\n title={<HvTypography>{title}</HvTypography>}\n >\n <HvTypography\n className={className}\n variant=\"label\"\n component=\"span\"\n ref={textRef}\n >\n {title}\n </HvTypography>\n </HvTooltip>\n );\n};\n\nexport default TitleWithTooltip;\n"],"names":["TitleWithTooltip","className","title","textRef","useRef","isOverflowed","useMemo","el","current","scrollWidth","clientWidth","scrollHeight","clientHeight","HvTooltip","disableHoverListener","placement","HvTypography","children","variant","component","ref"],"mappings":";;;;AAGA,MAAMA,mBAAmBA,CAAC;AAAA,EAAEC;AAAAA,EAAWC;AAAM,MAAM;AAC3CC,QAAAA,UAAUC,OAAuB,IAAI;AAErCC,QAAAA,eAAeC,QAAQ,MAAM;AACjC,UAAMC,KAAKJ,QAAQK;AACnB,QAAI,CAACD;AAAW,aAAA;AAEhB,WAAOA,GAAGE,cAAcF,GAAGG,eAAeH,GAAGI,eAAeJ,GAAGK;AAAAA,EACjE,GAAG,CAAE,CAAA;AAEL,6BACGC,WAAS;AAAA,IACRC,sBAAsB,CAACT;AAAAA,IACvBU,WAAU;AAAA,IACVb,2BAAQc,cAAY;AAAA,MAAAC,UAAEf;AAAAA,IAAAA,CAAoB;AAAA,IAAEe,8BAE3CD,cAAY;AAAA,MACXf;AAAAA,MACAiB,SAAQ;AAAA,MACRC,WAAU;AAAA,MACVC,KAAKjB;AAAAA,MAAQc,UAEZf;AAAAA,IAAAA,CACW;AAAA,EAAA,CACL;AAEf;AAEA,MAAA,qBAAeF;"}
|
|
@@ -15,16 +15,8 @@ import useUniqueId from "../../hooks/useUniqueId.js";
|
|
|
15
15
|
import BaseDropdownContext from "./BaseDropdownContext/BaseDropdownContext.js";
|
|
16
16
|
import { useTheme } from "../../hooks/useTheme.js";
|
|
17
17
|
import { useControlled } from "../../hooks/useControlled.js";
|
|
18
|
-
import {
|
|
18
|
+
import { isKey, isOneOfKeys } from "../../utils/keyboardUtils.js";
|
|
19
19
|
import { setId } from "../../utils/setId.js";
|
|
20
|
-
import { keyboardCodes } from "../../utils/keyboardUtils/keyboardCodes.js";
|
|
21
|
-
const {
|
|
22
|
-
Tab,
|
|
23
|
-
Enter,
|
|
24
|
-
Esc,
|
|
25
|
-
Space,
|
|
26
|
-
ArrowDown
|
|
27
|
-
} = keyboardCodes;
|
|
28
20
|
const HvBaseDropdown = ({
|
|
29
21
|
id,
|
|
30
22
|
className,
|
|
@@ -150,11 +142,11 @@ const HvBaseDropdown = ({
|
|
|
150
142
|
});
|
|
151
143
|
const popperPlacement = ((_a = attributes.popper) == null ? void 0 : _a["data-popper-placement"]) ?? "bottom";
|
|
152
144
|
const handleToggle = useCallback((event) => {
|
|
153
|
-
if (event && !
|
|
145
|
+
if (event && !isKey(event, "Tab")) {
|
|
154
146
|
event.preventDefault();
|
|
155
147
|
}
|
|
156
|
-
const notControlKey = [Tab, Enter, Esc, ArrowDown, Space]
|
|
157
|
-
const ignoredCombinations =
|
|
148
|
+
const notControlKey = !!(event == null ? void 0 : event.code) && !isOneOfKeys(event, ["Tab", "Enter", "Esc", "ArrowDown", "Space"]);
|
|
149
|
+
const ignoredCombinations = isKey(event, "Esc") && !isOpen || isKey(event, "ArrowDown") && isOpen || isKey(event, "Tab") && !isOpen;
|
|
158
150
|
if (disabled || notControlKey || ignoredCombinations)
|
|
159
151
|
return;
|
|
160
152
|
const newOpen = !isOpen;
|
|
@@ -214,10 +206,10 @@ const HvBaseDropdown = ({
|
|
|
214
206
|
const containerComponent = (() => {
|
|
215
207
|
const handleContainerKeyDown = (event) => {
|
|
216
208
|
var _a2;
|
|
217
|
-
if (
|
|
209
|
+
if (isKey(event, "Esc")) {
|
|
218
210
|
handleToggle(event);
|
|
219
211
|
}
|
|
220
|
-
if (
|
|
212
|
+
if (isKey(event, "Tab") && !event.shiftKey) {
|
|
221
213
|
const focusList = getFirstAndLastFocus(popperElement);
|
|
222
214
|
if (document.activeElement === (focusList == null ? void 0 : focusList.last)) {
|
|
223
215
|
event.preventDefault();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseDropdown.js","sources":["../../../../src/components/BaseDropdown/BaseDropdown.tsx"],"sourcesContent":["import React, {\n useMemo,\n useState,\n useCallback,\n KeyboardEventHandler,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { clsx } from \"clsx\";\nimport {\n ClickAwayListener,\n ClickAwayListenerProps,\n PopperPlacementType,\n PopperProps,\n} from \"@mui/material\";\nimport { theme } from \"@hitachivantara/uikit-styles\";\nimport { DropDownXS, DropUpXS } from \"@hitachivantara/uikit-react-icons\";\nimport { useControlled, useForkRef, useTheme, useUniqueId } from \"@core/hooks\";\nimport { isKeypress, keyboardCodes, setId } from \"@core/utils\";\nimport { getFirstAndLastFocus } from \"@core/utils/focusableElementFinder\";\nimport { HvBaseProps } from \"@core/types\";\nimport { usePopper } from \"react-popper\";\nimport { detectOverflow, ModifierArguments, Options } from \"@popperjs/core\";\nimport {\n StyledAdornment,\n StyledAnchor,\n StyledContainer,\n StyledExtension,\n StyledHeaderRoot,\n StyledPanel,\n StyledPlaceholder,\n StyledRoot,\n StyledSelection,\n} from \"./BaseDropdown.styles\";\nimport BaseDropdownContext from \"./BaseDropdownContext\";\nimport baseDropdownClasses, {\n HvBaseDropdownClasses,\n} from \"./baseDropdownClasses\";\n\nconst { Tab, Enter, Esc, Space, ArrowDown } = keyboardCodes;\n\nexport interface HvBaseDropdownProps\n extends HvBaseProps<HTMLDivElement, \"placeholder\"> {\n /**\n * The role of the element that triggers the popup.\n *\n * Defaults to \"combobox\" if `component` and the default\n * \"textbox\" header is used, undefined otherwise.\n */\n role?: string;\n /**\n * Header placeholder.\n */\n placeholder?: string | React.ReactNode;\n /**\n * If `true` the dropdown is disabled unable to be interacted, if `false` it is enabled.\n */\n disabled?: boolean;\n /**\n * If `true` the dropdown will be in read only mode, unable to be interacted.\n */\n readOnly?: boolean;\n /**\n * Disable the portal behavior.\n * The children stay within it's parent DOM hierarchy.\n */\n disablePortal?: boolean;\n /**\n * If `true` the dropdown width depends size of content if `false` the width depends on the header size.\n * Defaults to `false`.\n */\n variableWidth?: boolean;\n /**\n * If `true` the dropdown starts opened if `false` it starts closed.\n */\n expanded?: boolean;\n /**\n * When uncontrolled, defines the initial expanded state.\n */\n defaultExpanded?: boolean;\n /**\n * An object containing props to be wired to the popper component.\n */\n popperProps?: Partial<PopperProps>;\n /**\n * Placement of the dropdown.\n */\n placement?: \"left\" | \"right\";\n /**\n * Replacement for the header component.\n */\n component?: React.ReactNode;\n /**\n * Adornment to replace the default arrows.\n */\n adornment?: React.ReactNode;\n /**\n * When dropdown changes the expanded state.\n */\n onToggle?: (event: Event, open: boolean) => void;\n /**\n * When user click outside the open container.\n */\n onClickOutside?: (event: Event) => void;\n /**\n * Callback called when the dropdown is opened and ready,\n * commonly used to set focus to the content.\n */\n onContainerCreation?: (container: HTMLElement | null) => void;\n /**\n * Attributes applied to the dropdown header element.\n */\n dropdownHeaderProps?: React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n >;\n /**\n * Pass a ref to the dropdown header element.\n */\n dropdownHeaderRef?: React.Ref<any>;\n /**\n * A Jss Object used to override or extend the component styles applied.\n */\n classes?: HvBaseDropdownClasses;\n}\n\nexport const HvBaseDropdown = ({\n id,\n className,\n classes,\n children,\n role,\n placeholder,\n component,\n adornment,\n expanded,\n dropdownHeaderProps,\n defaultExpanded = false,\n disabled = false,\n readOnly = false,\n disablePortal = false,\n variableWidth = false,\n placement = \"right\",\n popperProps = {},\n dropdownHeaderRef: dropdownHeaderRefProp,\n onToggle,\n onClickOutside,\n onContainerCreation,\n ...others\n}: HvBaseDropdownProps) => {\n const { rootId } = useTheme();\n\n const [isOpen, setIsOpen] = useControlled(expanded, Boolean(defaultExpanded));\n\n const [referenceElement, setReferenceElement] = useState<HTMLElement | null>(\n null\n );\n const [popperElement, setPopperElement] = useState<HTMLElement | null>(null);\n const [popperMaxSize, setPopperMaxSize] = useState<{\n width?: number;\n height?: number;\n }>({});\n\n const handleDropdownHeaderRefProp = useForkRef(\n dropdownHeaderRefProp,\n dropdownHeaderProps?.ref\n );\n const handleDropdownHeaderRef = useForkRef(\n setReferenceElement,\n handleDropdownHeaderRefProp\n );\n\n const ariaRole = role || (component == null ? \"combobox\" : undefined);\n\n const elementId = useUniqueId(id, \"hvbasedropdown\");\n\n const bottom: PopperPlacementType =\n placement && `bottom-${placement === \"right\" ? \"start\" : \"end\"}`;\n\n const extensionWidth = referenceElement\n ? referenceElement?.offsetWidth\n : \"inherit\";\n\n const { modifiers: popperPropsModifiers = [], ...otherPopperProps } =\n popperProps;\n\n const onFirstUpdate = useCallback(() => {\n if (onContainerCreation) onContainerCreation(popperElement);\n }, [onContainerCreation, popperElement]);\n\n const widthCalculator = useCallback(\n ({ state }: ModifierArguments<Options>) => {\n state.styles.popper.width = `${state.rects.reference.width}px`;\n },\n []\n );\n\n const widthCalculatorEffect = useCallback(\n ({ state }: ModifierArguments<Options>) => {\n state.elements.popper.style.width = `${\n (state.elements.reference as any).offsetWidth\n }px`;\n },\n []\n );\n\n const applyMaxSizeCalculator = useCallback(\n ({ state }: ModifierArguments<Options>) => {\n // The `maxSize` modifier provides this data\n const { width, height } = state.modifiersData.maxSize;\n if (width !== popperMaxSize?.width || height !== popperMaxSize?.height) {\n setPopperMaxSize({ width, height });\n }\n\n state.styles.popper = {\n ...state.styles.popper,\n maxWidth: `${width}px`,\n maxHeight: `${height}px`,\n };\n },\n [popperMaxSize]\n );\n\n const maxSizeCalculator = useCallback(\n ({ state, name, options }: ModifierArguments<Options>) => {\n const overflow = detectOverflow(state, options);\n\n const x = state.modifiersData.preventOverflow?.x || 0;\n const y = state.modifiersData.preventOverflow?.y || 0;\n\n const popperWidth = state.rects.popper.width;\n const popperHeight = state.rects.popper.height;\n\n const basePlacement = state.placement.split(\"-\")[0];\n\n const widthProp = basePlacement === \"left\" ? \"left\" : \"right\";\n const heightProp = basePlacement === \"top\" ? \"top\" : \"bottom\";\n\n state.modifiersData[name] = {\n width: popperWidth - overflow[widthProp] - x,\n height: popperHeight - overflow[heightProp] - y,\n };\n },\n []\n );\n\n const modifiers: PopperProps[\"modifiers\"] = useMemo(\n () => [\n {\n name: \"variableWidth\",\n enabled: !variableWidth,\n phase: \"beforeWrite\",\n requires: [\"computeStyles\"],\n fn: widthCalculator,\n effect: widthCalculatorEffect,\n },\n {\n name: \"maxSize\",\n enabled: true,\n phase: \"main\",\n requiresIfExists: [\"offset\", \"preventOverflow\", \"flip\"],\n fn: maxSizeCalculator,\n },\n {\n name: \"applyMaxSize\",\n enabled: true,\n phase: \"beforeWrite\",\n requires: [\"maxSize\"],\n fn: applyMaxSizeCalculator,\n },\n ...popperPropsModifiers,\n ],\n [\n maxSizeCalculator,\n applyMaxSizeCalculator,\n popperPropsModifiers,\n variableWidth,\n widthCalculator,\n widthCalculatorEffect,\n ]\n );\n\n const { styles: popperStyles, attributes } = usePopper(\n referenceElement,\n popperElement,\n {\n placement: bottom,\n modifiers,\n onFirstUpdate,\n ...otherPopperProps,\n }\n );\n\n const popperPlacement =\n attributes.popper?.[\"data-popper-placement\"] ?? \"bottom\";\n\n const handleToggle = useCallback(\n (event) => {\n if (event && !isKeypress(event, Tab)) {\n event.preventDefault();\n }\n\n // We are checking specifically for false because if \"isKeypress\" returns true or undefined it should continue\n const notControlKey = [Tab, Enter, Esc, ArrowDown, Space].every(\n (key) => isKeypress(event, key) === false\n );\n\n const ignoredCombinations =\n (isKeypress(event, Esc) && !isOpen) ||\n (isKeypress(event, ArrowDown) && isOpen) ||\n (isKeypress(event, Tab) && !isOpen);\n\n if (disabled || notControlKey || ignoredCombinations) return;\n\n const newOpen = !isOpen;\n\n /* If about to close focus on the header component. */\n const focusHeader = () => {\n if (!newOpen) {\n // Focus-ring won't be visible even if using the keyboard:\n // https://github.com/WICG/focus-visible/issues/88\n referenceElement?.focus({ preventScroll: true });\n }\n\n return newOpen;\n };\n setIsOpen(focusHeader());\n\n onToggle?.(event, newOpen);\n },\n [isOpen, disabled, setIsOpen, onToggle, referenceElement]\n );\n\n const headerComponent = (() => {\n if (component) {\n return React.cloneElement(component as React.ReactElement, {\n ref: handleDropdownHeaderRef,\n });\n }\n\n const ExpanderComponent = isOpen ? DropUpXS : DropDownXS;\n\n return (\n <StyledHeaderRoot\n id={setId(id, \"header\")}\n className={clsx(\n baseDropdownClasses.header,\n classes?.header,\n disabled &&\n clsx(baseDropdownClasses.headerDisabled, classes?.headerDisabled),\n readOnly &&\n clsx(baseDropdownClasses.headerReadOnly, classes?.headerReadOnly),\n isOpen && clsx(baseDropdownClasses.headerOpen, classes?.headerOpen),\n isOpen &&\n popperPlacement.includes(\"top\") &&\n clsx(baseDropdownClasses.headerOpenUp, classes?.headerOpenUp),\n isOpen &&\n popperPlacement.includes(\"bottom\") &&\n clsx(baseDropdownClasses.headerOpenDown, classes?.headerOpenDown)\n )}\n $disabled={disabled}\n $readOnly={readOnly}\n $opened={isOpen}\n $openedUp={isOpen && popperPlacement.includes(\"top\")}\n $openedDown={isOpen && popperPlacement.includes(\"bottom\")}\n role={ariaRole === \"combobox\" ? \"textbox\" : undefined}\n style={disabled || readOnly ? { pointerEvents: \"none\" } : undefined}\n aria-controls={\n isOpen ? setId(elementId, \"children-container\") : undefined\n }\n aria-label={others[\"aria-label\"] ?? undefined}\n aria-labelledby={others[\"aria-labelledby\"] ?? undefined}\n // Removes the element from the navigation sequence for keyboard focus if disabled\n tabIndex={disabled ? -1 : 0}\n ref={handleDropdownHeaderRef}\n {...dropdownHeaderProps}\n >\n <StyledSelection\n className={clsx(baseDropdownClasses.selection, classes?.selection)}\n >\n {placeholder && typeof placeholder === \"string\" ? (\n <StyledPlaceholder\n className={clsx(\n baseDropdownClasses.placeholder,\n classes?.placeholder,\n disabled &&\n clsx(\n baseDropdownClasses.selectionDisabled,\n classes?.selectionDisabled\n )\n )}\n $disabled={disabled}\n variant=\"body\"\n >\n {placeholder}\n </StyledPlaceholder>\n ) : (\n placeholder\n )}\n </StyledSelection>\n <StyledAdornment>\n {adornment || (\n <ExpanderComponent\n iconSize=\"XS\"\n color={disabled ? theme.colors.secondary_60 : undefined}\n className={clsx(baseDropdownClasses.arrow, classes?.arrow)}\n />\n )}\n </StyledAdornment>\n </StyledHeaderRoot>\n );\n })();\n\n const containerComponent = (() => {\n /**\n * Handle keyboard inside children container.\n */\n const handleContainerKeyDown: KeyboardEventHandler = (event) => {\n if (isKeypress(event, Esc)) {\n handleToggle(event);\n }\n if (isKeypress(event, Tab) && !event.shiftKey) {\n const focusList = getFirstAndLastFocus(popperElement);\n if (document.activeElement === focusList?.last) {\n event.preventDefault();\n focusList?.first?.focus();\n }\n }\n };\n\n const handleOutside: ClickAwayListenerProps[\"onClickAway\"] = (event) => {\n const isButtonClick = referenceElement?.contains(event.target as any);\n if (!isButtonClick) {\n onClickOutside?.(event);\n setIsOpen(false);\n onToggle?.(event, false);\n }\n };\n\n const container = (\n <StyledContainer\n role=\"tooltip\"\n ref={setPopperElement}\n className={clsx(baseDropdownClasses.container, classes?.container)}\n style={popperStyles.popper}\n {...attributes.popper}\n >\n <ClickAwayListener onClickAway={handleOutside}>\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div onKeyDown={handleContainerKeyDown}>\n {popperPlacement.includes(\"bottom\") && (\n <StyledExtension\n style={{ width: extensionWidth }}\n className={clsx(\n baseDropdownClasses.inputExtensionOpen,\n classes?.inputExtensionOpen,\n popperPlacement.includes(\"end\") &&\n clsx(\n baseDropdownClasses.inputExtensionLeftPosition,\n classes?.inputExtensionLeftPosition\n )\n )}\n $leftPosition={popperPlacement.includes(\"end\")}\n $openShadow={false}\n $floatLeft={false}\n $floatRight={false}\n />\n )}\n <BaseDropdownContext.Provider value={popperMaxSize}>\n <StyledPanel\n id={setId(elementId, \"children-container\")}\n className={clsx(baseDropdownClasses.panel, classes?.panel)}\n $popperPlacement={\n popperPlacement.includes(\"top\") ? \"top\" : \"bottom\"\n }\n >\n {children}\n </StyledPanel>\n </BaseDropdownContext.Provider>\n {popperPlacement.includes(\"top\") && (\n <StyledExtension\n style={{ width: extensionWidth }}\n className={clsx(\n baseDropdownClasses.inputExtensionOpen,\n classes?.inputExtensionOpen,\n baseDropdownClasses.inputExtensionOpenShadow,\n classes?.inputExtensionOpenShadow,\n popperPlacement.includes(\"end\") &&\n clsx(\n baseDropdownClasses.inputExtensionFloatRight,\n classes?.inputExtensionFloatRight\n ),\n popperPlacement.includes(\"start\") &&\n clsx(\n baseDropdownClasses.inputExtensionFloatLeft,\n classes?.inputExtensionFloatLeft\n )\n )}\n $leftPosition={false}\n $openShadow\n $floatLeft={popperPlacement.includes(\"start\")}\n $floatRight={popperPlacement.includes(\"end\")}\n />\n )}\n </div>\n </ClickAwayListener>\n </StyledContainer>\n );\n\n if (disablePortal) return container;\n\n return createPortal(\n container,\n document.getElementById(rootId || \"\") || document.body\n );\n })();\n\n return (\n <StyledRoot className={clsx(baseDropdownClasses.root, classes?.root)}>\n <StyledAnchor\n id={id}\n role={ariaRole}\n aria-expanded={!!isOpen}\n aria-owns={isOpen ? setId(elementId, \"children-container\") : undefined}\n className={clsx(\n className,\n baseDropdownClasses.anchor,\n classes?.anchor,\n disabled &&\n clsx(baseDropdownClasses.rootDisabled, classes?.rootDisabled)\n )}\n $disabled={disabled}\n {...(!readOnly && {\n onKeyDown: handleToggle,\n onClick: handleToggle,\n })}\n // Removes the element from the navigation sequence for keyboard focus\n tabIndex={-1}\n {...others}\n >\n {headerComponent}\n </StyledAnchor>\n {isOpen && containerComponent}\n </StyledRoot>\n );\n};\n"],"names":["Tab","Enter","Esc","Space","ArrowDown","keyboardCodes","HvBaseDropdown","id","className","classes","children","role","placeholder","component","adornment","expanded","dropdownHeaderProps","defaultExpanded","disabled","readOnly","disablePortal","variableWidth","placement","popperProps","dropdownHeaderRef","dropdownHeaderRefProp","onToggle","onClickOutside","onContainerCreation","others","rootId","useTheme","isOpen","setIsOpen","useControlled","Boolean","referenceElement","setReferenceElement","useState","popperElement","setPopperElement","popperMaxSize","setPopperMaxSize","handleDropdownHeaderRefProp","useForkRef","ref","handleDropdownHeaderRef","ariaRole","undefined","elementId","useUniqueId","bottom","extensionWidth","offsetWidth","modifiers","popperPropsModifiers","otherPopperProps","onFirstUpdate","useCallback","widthCalculator","state","styles","popper","width","rects","reference","widthCalculatorEffect","elements","style","applyMaxSizeCalculator","height","modifiersData","maxSize","maxWidth","maxHeight","maxSizeCalculator","name","options","overflow","detectOverflow","x","preventOverflow","y","popperWidth","popperHeight","basePlacement","split","widthProp","heightProp","useMemo","enabled","phase","requires","fn","effect","requiresIfExists","popperStyles","attributes","usePopper","popperPlacement","handleToggle","event","isKeypress","preventDefault","notControlKey","every","key","ignoredCombinations","newOpen","focusHeader","focus","preventScroll","headerComponent","React","cloneElement","ExpanderComponent","DropUpXS","DropDownXS","StyledHeaderRoot","setId","clsx","baseDropdownClasses","header","headerDisabled","headerReadOnly","headerOpen","includes","headerOpenUp","headerOpenDown","$disabled","$readOnly","$opened","$openedUp","$openedDown","pointerEvents","tabIndex","_jsx","StyledSelection","selection","StyledPlaceholder","selectionDisabled","variant","StyledAdornment","iconSize","color","theme","colors","secondary_60","arrow","containerComponent","handleContainerKeyDown","shiftKey","focusList","getFirstAndLastFocus","document","activeElement","last","first","handleOutside","isButtonClick","contains","target","container","StyledContainer","ClickAwayListener","onClickAway","onKeyDown","StyledExtension","inputExtensionOpen","inputExtensionLeftPosition","$leftPosition","$openShadow","$floatLeft","$floatRight","BaseDropdownContext","Provider","value","StyledPanel","panel","$popperPlacement","inputExtensionOpenShadow","inputExtensionFloatRight","inputExtensionFloatLeft","createPortal","getElementById","body","StyledRoot","root","StyledAnchor","anchor","rootDisabled","onClick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BaseDropdown.js","sources":["../../../../src/components/BaseDropdown/BaseDropdown.tsx"],"sourcesContent":["import React, {\n useMemo,\n useState,\n useCallback,\n KeyboardEventHandler,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { clsx } from \"clsx\";\nimport {\n ClickAwayListener,\n ClickAwayListenerProps,\n PopperPlacementType,\n PopperProps,\n} from \"@mui/material\";\nimport { theme } from \"@hitachivantara/uikit-styles\";\nimport { DropDownXS, DropUpXS } from \"@hitachivantara/uikit-react-icons\";\nimport { useControlled, useForkRef, useTheme, useUniqueId } from \"@core/hooks\";\nimport { isKey, isOneOfKeys, setId } from \"@core/utils\";\nimport { getFirstAndLastFocus } from \"@core/utils/focusableElementFinder\";\nimport { HvBaseProps } from \"@core/types\";\nimport { usePopper } from \"react-popper\";\nimport { detectOverflow, ModifierArguments, Options } from \"@popperjs/core\";\nimport {\n StyledAdornment,\n StyledAnchor,\n StyledContainer,\n StyledExtension,\n StyledHeaderRoot,\n StyledPanel,\n StyledPlaceholder,\n StyledRoot,\n StyledSelection,\n} from \"./BaseDropdown.styles\";\nimport BaseDropdownContext from \"./BaseDropdownContext\";\nimport baseDropdownClasses, {\n HvBaseDropdownClasses,\n} from \"./baseDropdownClasses\";\n\nexport interface HvBaseDropdownProps\n extends HvBaseProps<HTMLDivElement, \"placeholder\"> {\n /**\n * The role of the element that triggers the popup.\n *\n * Defaults to \"combobox\" if `component` and the default\n * \"textbox\" header is used, undefined otherwise.\n */\n role?: string;\n /**\n * Header placeholder.\n */\n placeholder?: string | React.ReactNode;\n /**\n * If `true` the dropdown is disabled unable to be interacted, if `false` it is enabled.\n */\n disabled?: boolean;\n /**\n * If `true` the dropdown will be in read only mode, unable to be interacted.\n */\n readOnly?: boolean;\n /**\n * Disable the portal behavior.\n * The children stay within it's parent DOM hierarchy.\n */\n disablePortal?: boolean;\n /**\n * If `true` the dropdown width depends size of content if `false` the width depends on the header size.\n * Defaults to `false`.\n */\n variableWidth?: boolean;\n /**\n * If `true` the dropdown starts opened if `false` it starts closed.\n */\n expanded?: boolean;\n /**\n * When uncontrolled, defines the initial expanded state.\n */\n defaultExpanded?: boolean;\n /**\n * An object containing props to be wired to the popper component.\n */\n popperProps?: Partial<PopperProps>;\n /**\n * Placement of the dropdown.\n */\n placement?: \"left\" | \"right\";\n /**\n * Replacement for the header component.\n */\n component?: React.ReactNode;\n /**\n * Adornment to replace the default arrows.\n */\n adornment?: React.ReactNode;\n /**\n * When dropdown changes the expanded state.\n */\n onToggle?: (event: Event, open: boolean) => void;\n /**\n * When user click outside the open container.\n */\n onClickOutside?: (event: Event) => void;\n /**\n * Callback called when the dropdown is opened and ready,\n * commonly used to set focus to the content.\n */\n onContainerCreation?: (container: HTMLElement | null) => void;\n /**\n * Attributes applied to the dropdown header element.\n */\n dropdownHeaderProps?: React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n >;\n /**\n * Pass a ref to the dropdown header element.\n */\n dropdownHeaderRef?: React.Ref<any>;\n /**\n * A Jss Object used to override or extend the component styles applied.\n */\n classes?: HvBaseDropdownClasses;\n}\n\nexport const HvBaseDropdown = ({\n id,\n className,\n classes,\n children,\n role,\n placeholder,\n component,\n adornment,\n expanded,\n dropdownHeaderProps,\n defaultExpanded = false,\n disabled = false,\n readOnly = false,\n disablePortal = false,\n variableWidth = false,\n placement = \"right\",\n popperProps = {},\n dropdownHeaderRef: dropdownHeaderRefProp,\n onToggle,\n onClickOutside,\n onContainerCreation,\n ...others\n}: HvBaseDropdownProps) => {\n const { rootId } = useTheme();\n\n const [isOpen, setIsOpen] = useControlled(expanded, Boolean(defaultExpanded));\n\n const [referenceElement, setReferenceElement] = useState<HTMLElement | null>(\n null\n );\n const [popperElement, setPopperElement] = useState<HTMLElement | null>(null);\n const [popperMaxSize, setPopperMaxSize] = useState<{\n width?: number;\n height?: number;\n }>({});\n\n const handleDropdownHeaderRefProp = useForkRef(\n dropdownHeaderRefProp,\n dropdownHeaderProps?.ref\n );\n const handleDropdownHeaderRef = useForkRef(\n setReferenceElement,\n handleDropdownHeaderRefProp\n );\n\n const ariaRole = role || (component == null ? \"combobox\" : undefined);\n\n const elementId = useUniqueId(id, \"hvbasedropdown\");\n\n const bottom: PopperPlacementType =\n placement && `bottom-${placement === \"right\" ? \"start\" : \"end\"}`;\n\n const extensionWidth = referenceElement\n ? referenceElement?.offsetWidth\n : \"inherit\";\n\n const { modifiers: popperPropsModifiers = [], ...otherPopperProps } =\n popperProps;\n\n const onFirstUpdate = useCallback(() => {\n if (onContainerCreation) onContainerCreation(popperElement);\n }, [onContainerCreation, popperElement]);\n\n const widthCalculator = useCallback(\n ({ state }: ModifierArguments<Options>) => {\n state.styles.popper.width = `${state.rects.reference.width}px`;\n },\n []\n );\n\n const widthCalculatorEffect = useCallback(\n ({ state }: ModifierArguments<Options>) => {\n state.elements.popper.style.width = `${\n (state.elements.reference as any).offsetWidth\n }px`;\n },\n []\n );\n\n const applyMaxSizeCalculator = useCallback(\n ({ state }: ModifierArguments<Options>) => {\n // The `maxSize` modifier provides this data\n const { width, height } = state.modifiersData.maxSize;\n if (width !== popperMaxSize?.width || height !== popperMaxSize?.height) {\n setPopperMaxSize({ width, height });\n }\n\n state.styles.popper = {\n ...state.styles.popper,\n maxWidth: `${width}px`,\n maxHeight: `${height}px`,\n };\n },\n [popperMaxSize]\n );\n\n const maxSizeCalculator = useCallback(\n ({ state, name, options }: ModifierArguments<Options>) => {\n const overflow = detectOverflow(state, options);\n\n const x = state.modifiersData.preventOverflow?.x || 0;\n const y = state.modifiersData.preventOverflow?.y || 0;\n\n const popperWidth = state.rects.popper.width;\n const popperHeight = state.rects.popper.height;\n\n const basePlacement = state.placement.split(\"-\")[0];\n\n const widthProp = basePlacement === \"left\" ? \"left\" : \"right\";\n const heightProp = basePlacement === \"top\" ? \"top\" : \"bottom\";\n\n state.modifiersData[name] = {\n width: popperWidth - overflow[widthProp] - x,\n height: popperHeight - overflow[heightProp] - y,\n };\n },\n []\n );\n\n const modifiers: PopperProps[\"modifiers\"] = useMemo(\n () => [\n {\n name: \"variableWidth\",\n enabled: !variableWidth,\n phase: \"beforeWrite\",\n requires: [\"computeStyles\"],\n fn: widthCalculator,\n effect: widthCalculatorEffect,\n },\n {\n name: \"maxSize\",\n enabled: true,\n phase: \"main\",\n requiresIfExists: [\"offset\", \"preventOverflow\", \"flip\"],\n fn: maxSizeCalculator,\n },\n {\n name: \"applyMaxSize\",\n enabled: true,\n phase: \"beforeWrite\",\n requires: [\"maxSize\"],\n fn: applyMaxSizeCalculator,\n },\n ...popperPropsModifiers,\n ],\n [\n maxSizeCalculator,\n applyMaxSizeCalculator,\n popperPropsModifiers,\n variableWidth,\n widthCalculator,\n widthCalculatorEffect,\n ]\n );\n\n const { styles: popperStyles, attributes } = usePopper(\n referenceElement,\n popperElement,\n {\n placement: bottom,\n modifiers,\n onFirstUpdate,\n ...otherPopperProps,\n }\n );\n\n const popperPlacement =\n attributes.popper?.[\"data-popper-placement\"] ?? \"bottom\";\n\n const handleToggle = useCallback(\n (event) => {\n if (event && !isKey(event, \"Tab\")) {\n event.preventDefault();\n }\n\n const notControlKey =\n !!event?.code &&\n !isOneOfKeys(event, [\"Tab\", \"Enter\", \"Esc\", \"ArrowDown\", \"Space\"]);\n\n const ignoredCombinations =\n (isKey(event, \"Esc\") && !isOpen) ||\n (isKey(event, \"ArrowDown\") && isOpen) ||\n (isKey(event, \"Tab\") && !isOpen);\n\n if (disabled || notControlKey || ignoredCombinations) return;\n\n const newOpen = !isOpen;\n\n /* If about to close focus on the header component. */\n const focusHeader = () => {\n if (!newOpen) {\n // Focus-ring won't be visible even if using the keyboard:\n // https://github.com/WICG/focus-visible/issues/88\n referenceElement?.focus({ preventScroll: true });\n }\n\n return newOpen;\n };\n setIsOpen(focusHeader());\n\n onToggle?.(event, newOpen);\n },\n [isOpen, disabled, setIsOpen, onToggle, referenceElement]\n );\n\n const headerComponent = (() => {\n if (component) {\n return React.cloneElement(component as React.ReactElement, {\n ref: handleDropdownHeaderRef,\n });\n }\n\n const ExpanderComponent = isOpen ? DropUpXS : DropDownXS;\n\n return (\n <StyledHeaderRoot\n id={setId(id, \"header\")}\n className={clsx(\n baseDropdownClasses.header,\n classes?.header,\n disabled &&\n clsx(baseDropdownClasses.headerDisabled, classes?.headerDisabled),\n readOnly &&\n clsx(baseDropdownClasses.headerReadOnly, classes?.headerReadOnly),\n isOpen && clsx(baseDropdownClasses.headerOpen, classes?.headerOpen),\n isOpen &&\n popperPlacement.includes(\"top\") &&\n clsx(baseDropdownClasses.headerOpenUp, classes?.headerOpenUp),\n isOpen &&\n popperPlacement.includes(\"bottom\") &&\n clsx(baseDropdownClasses.headerOpenDown, classes?.headerOpenDown)\n )}\n $disabled={disabled}\n $readOnly={readOnly}\n $opened={isOpen}\n $openedUp={isOpen && popperPlacement.includes(\"top\")}\n $openedDown={isOpen && popperPlacement.includes(\"bottom\")}\n role={ariaRole === \"combobox\" ? \"textbox\" : undefined}\n style={disabled || readOnly ? { pointerEvents: \"none\" } : undefined}\n aria-controls={\n isOpen ? setId(elementId, \"children-container\") : undefined\n }\n aria-label={others[\"aria-label\"] ?? undefined}\n aria-labelledby={others[\"aria-labelledby\"] ?? undefined}\n // Removes the element from the navigation sequence for keyboard focus if disabled\n tabIndex={disabled ? -1 : 0}\n ref={handleDropdownHeaderRef}\n {...dropdownHeaderProps}\n >\n <StyledSelection\n className={clsx(baseDropdownClasses.selection, classes?.selection)}\n >\n {placeholder && typeof placeholder === \"string\" ? (\n <StyledPlaceholder\n className={clsx(\n baseDropdownClasses.placeholder,\n classes?.placeholder,\n disabled &&\n clsx(\n baseDropdownClasses.selectionDisabled,\n classes?.selectionDisabled\n )\n )}\n $disabled={disabled}\n variant=\"body\"\n >\n {placeholder}\n </StyledPlaceholder>\n ) : (\n placeholder\n )}\n </StyledSelection>\n <StyledAdornment>\n {adornment || (\n <ExpanderComponent\n iconSize=\"XS\"\n color={disabled ? theme.colors.secondary_60 : undefined}\n className={clsx(baseDropdownClasses.arrow, classes?.arrow)}\n />\n )}\n </StyledAdornment>\n </StyledHeaderRoot>\n );\n })();\n\n const containerComponent = (() => {\n /**\n * Handle keyboard inside children container.\n */\n const handleContainerKeyDown: KeyboardEventHandler = (event) => {\n if (isKey(event, \"Esc\")) {\n handleToggle(event);\n }\n if (isKey(event, \"Tab\") && !event.shiftKey) {\n const focusList = getFirstAndLastFocus(popperElement);\n if (document.activeElement === focusList?.last) {\n event.preventDefault();\n focusList?.first?.focus();\n }\n }\n };\n\n const handleOutside: ClickAwayListenerProps[\"onClickAway\"] = (event) => {\n const isButtonClick = referenceElement?.contains(event.target as any);\n if (!isButtonClick) {\n onClickOutside?.(event);\n setIsOpen(false);\n onToggle?.(event, false);\n }\n };\n\n const container = (\n <StyledContainer\n role=\"tooltip\"\n ref={setPopperElement}\n className={clsx(baseDropdownClasses.container, classes?.container)}\n style={popperStyles.popper}\n {...attributes.popper}\n >\n <ClickAwayListener onClickAway={handleOutside}>\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div onKeyDown={handleContainerKeyDown}>\n {popperPlacement.includes(\"bottom\") && (\n <StyledExtension\n style={{ width: extensionWidth }}\n className={clsx(\n baseDropdownClasses.inputExtensionOpen,\n classes?.inputExtensionOpen,\n popperPlacement.includes(\"end\") &&\n clsx(\n baseDropdownClasses.inputExtensionLeftPosition,\n classes?.inputExtensionLeftPosition\n )\n )}\n $leftPosition={popperPlacement.includes(\"end\")}\n $openShadow={false}\n $floatLeft={false}\n $floatRight={false}\n />\n )}\n <BaseDropdownContext.Provider value={popperMaxSize}>\n <StyledPanel\n id={setId(elementId, \"children-container\")}\n className={clsx(baseDropdownClasses.panel, classes?.panel)}\n $popperPlacement={\n popperPlacement.includes(\"top\") ? \"top\" : \"bottom\"\n }\n >\n {children}\n </StyledPanel>\n </BaseDropdownContext.Provider>\n {popperPlacement.includes(\"top\") && (\n <StyledExtension\n style={{ width: extensionWidth }}\n className={clsx(\n baseDropdownClasses.inputExtensionOpen,\n classes?.inputExtensionOpen,\n baseDropdownClasses.inputExtensionOpenShadow,\n classes?.inputExtensionOpenShadow,\n popperPlacement.includes(\"end\") &&\n clsx(\n baseDropdownClasses.inputExtensionFloatRight,\n classes?.inputExtensionFloatRight\n ),\n popperPlacement.includes(\"start\") &&\n clsx(\n baseDropdownClasses.inputExtensionFloatLeft,\n classes?.inputExtensionFloatLeft\n )\n )}\n $leftPosition={false}\n $openShadow\n $floatLeft={popperPlacement.includes(\"start\")}\n $floatRight={popperPlacement.includes(\"end\")}\n />\n )}\n </div>\n </ClickAwayListener>\n </StyledContainer>\n );\n\n if (disablePortal) return container;\n\n return createPortal(\n container,\n document.getElementById(rootId || \"\") || document.body\n );\n })();\n\n return (\n <StyledRoot className={clsx(baseDropdownClasses.root, classes?.root)}>\n <StyledAnchor\n id={id}\n role={ariaRole}\n aria-expanded={!!isOpen}\n aria-owns={isOpen ? setId(elementId, \"children-container\") : undefined}\n className={clsx(\n className,\n baseDropdownClasses.anchor,\n classes?.anchor,\n disabled &&\n clsx(baseDropdownClasses.rootDisabled, classes?.rootDisabled)\n )}\n $disabled={disabled}\n {...(!readOnly && {\n onKeyDown: handleToggle,\n onClick: handleToggle,\n })}\n // Removes the element from the navigation sequence for keyboard focus\n tabIndex={-1}\n {...others}\n >\n {headerComponent}\n </StyledAnchor>\n {isOpen && containerComponent}\n </StyledRoot>\n );\n};\n"],"names":["HvBaseDropdown","id","className","classes","children","role","placeholder","component","adornment","expanded","dropdownHeaderProps","defaultExpanded","disabled","readOnly","disablePortal","variableWidth","placement","popperProps","dropdownHeaderRef","dropdownHeaderRefProp","onToggle","onClickOutside","onContainerCreation","others","rootId","useTheme","isOpen","setIsOpen","useControlled","Boolean","referenceElement","setReferenceElement","useState","popperElement","setPopperElement","popperMaxSize","setPopperMaxSize","handleDropdownHeaderRefProp","useForkRef","ref","handleDropdownHeaderRef","ariaRole","undefined","elementId","useUniqueId","bottom","extensionWidth","offsetWidth","modifiers","popperPropsModifiers","otherPopperProps","onFirstUpdate","useCallback","widthCalculator","state","styles","popper","width","rects","reference","widthCalculatorEffect","elements","style","applyMaxSizeCalculator","height","modifiersData","maxSize","maxWidth","maxHeight","maxSizeCalculator","name","options","overflow","detectOverflow","x","preventOverflow","y","popperWidth","popperHeight","basePlacement","split","widthProp","heightProp","useMemo","enabled","phase","requires","fn","effect","requiresIfExists","popperStyles","attributes","usePopper","popperPlacement","handleToggle","event","isKey","preventDefault","notControlKey","code","isOneOfKeys","ignoredCombinations","newOpen","focusHeader","focus","preventScroll","headerComponent","React","cloneElement","ExpanderComponent","DropUpXS","DropDownXS","StyledHeaderRoot","setId","clsx","baseDropdownClasses","header","headerDisabled","headerReadOnly","headerOpen","includes","headerOpenUp","headerOpenDown","$disabled","$readOnly","$opened","$openedUp","$openedDown","pointerEvents","tabIndex","_jsx","StyledSelection","selection","StyledPlaceholder","selectionDisabled","variant","StyledAdornment","iconSize","color","theme","colors","secondary_60","arrow","containerComponent","handleContainerKeyDown","shiftKey","focusList","getFirstAndLastFocus","document","activeElement","last","first","handleOutside","isButtonClick","contains","target","container","StyledContainer","ClickAwayListener","onClickAway","onKeyDown","StyledExtension","inputExtensionOpen","inputExtensionLeftPosition","$leftPosition","$openShadow","$floatLeft","$floatRight","BaseDropdownContext","Provider","value","StyledPanel","panel","$popperPlacement","inputExtensionOpenShadow","inputExtensionFloatRight","inputExtensionFloatLeft","createPortal","getElementById","body","StyledRoot","root","StyledAnchor","anchor","rootDisabled","onClick"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { outlineStyles } from "@hitachivantara/uikit-react-core";
|
|
2
1
|
import { theme } from "@hitachivantara/uikit-styles";
|
|
3
2
|
import { createClasses } from "../../../utils/classes.js";
|
|
3
|
+
import { outlineStyles } from "../../../utils/focusUtils.js";
|
|
4
4
|
const {
|
|
5
5
|
staticClasses,
|
|
6
6
|
useClasses
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Page.styles.js","sources":["../../../../../src/components/BreadCrumb/Page/Page.styles.tsx"],"sourcesContent":["import { createClasses } from \"@core/utils\";\nimport {
|
|
1
|
+
{"version":3,"file":"Page.styles.js","sources":["../../../../../src/components/BreadCrumb/Page/Page.styles.tsx"],"sourcesContent":["import { createClasses, outlineStyles } from \"@core/utils\";\nimport { theme } from \"@hitachivantara/uikit-styles\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvPage\", {\n link: {\n padding: `8px ${theme.space.xs}`,\n borderRadius: theme.radii.base,\n maxWidth: 170 + 16,\n textTransform: \"capitalize\",\n \"&:hover\": {\n cursor: \"pointer\",\n backgroundColor: theme.colors.atmo3,\n },\n \"&:focus\": {\n backgroundColor: theme.colors.atmo3,\n },\n \"&:focus-visible\": {\n ...outlineStyles,\n },\n },\n label: {},\n a: {},\n});\n"],"names":["staticClasses","useClasses","createClasses","link","padding","theme","space","xs","borderRadius","radii","base","maxWidth","textTransform","cursor","backgroundColor","colors","atmo3","outlineStyles","label","a"],"mappings":";;;AAGa,MAAA;AAAA,EAAEA;AAAAA,EAAeC;AAAW,IAAIC,cAAc,UAAU;AAAA,EACnEC,MAAM;AAAA,IACJC,SAAU,OAAMC,MAAMC,MAAMC;AAAAA,IAC5BC,cAAcH,MAAMI,MAAMC;AAAAA,IAC1BC,UAAU,MAAM;AAAA,IAChBC,eAAe;AAAA,IACf,WAAW;AAAA,MACTC,QAAQ;AAAA,MACRC,iBAAiBT,MAAMU,OAAOC;AAAAA,IAChC;AAAA,IACA,WAAW;AAAA,MACTF,iBAAiBT,MAAMU,OAAOC;AAAAA,IAChC;AAAA,IACA,mBAAmB;AAAA,MACjB,GAAGC;AAAAA,IACL;AAAA,EACF;AAAA,EACAC,OAAO,CAAC;AAAA,EACRC,GAAG,CAAC;AACN,CAAC;"}
|
|
@@ -45,7 +45,7 @@ const HvButton = forwardRef((props, ref) => {
|
|
|
45
45
|
return /* @__PURE__ */ jsxs(Component, {
|
|
46
46
|
ref,
|
|
47
47
|
type: "button",
|
|
48
|
-
className: cx(classes.root, css(getVariantStyles(variant)), size && css(getSizeStyles(size)), radius && css(getRadiusStyles(radius)), overrideIconColors && css(getOverrideColors(
|
|
48
|
+
className: cx(classes.root, css(getVariantStyles(variant)), size && css(getSizeStyles(size)), radius && css(getRadiusStyles(radius)), overrideIconColors && css(getOverrideColors()), {
|
|
49
49
|
[classes.icon]: icon,
|
|
50
50
|
[classes.disabled]: disabled
|
|
51
51
|
}, className),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sources":["../../../../src/components/Button/Button.tsx"],"sourcesContent":["import React, { forwardRef, ReactElement } from \"react\";\nimport { useTheme } from \"@core/hooks\";\nimport { PolymorphicComponentRef, PolymorphicRef } from \"@core/types\";\nimport { ExtractNames } from \"@core/utils\";\nimport {\n staticClasses as buttonClasses,\n getOverrideColors,\n getRadiusStyles,\n getSizeStyles,\n getVariantStyles,\n useClasses,\n} from \"./Button.styles\";\n\nexport { buttonClasses };\n\nexport type HvButtonClasses = ExtractNames<typeof useClasses>;\n\nexport const buttonVariant = [\n \"primary\",\n \"primarySubtle\",\n \"primaryGhost\",\n \"secondarySubtle\",\n \"secondaryGhost\",\n \"semantic\",\n // deprecated props\n \"secondary\",\n \"ghost\",\n] as const;\nexport type HvButtonVariant = (typeof buttonVariant)[number];\n\nexport const buttonSize = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"] as const;\nexport type HvButtonSize = (typeof buttonSize)[number];\n\nexport const buttonRadius = [\n \"none\",\n \"base\",\n \"round\",\n \"circle\",\n \"full\",\n] as const;\nexport type HvButtonRadius = (typeof buttonRadius)[number];\n\nexport type HvButtonProps<C extends React.ElementType = \"button\"> =\n PolymorphicComponentRef<\n C,\n {\n /** Use the variant prop to change the visual style of the Button. */\n variant?: HvButtonVariant;\n /** Whether the Button is an icon-only button. */\n icon?: boolean;\n /** Whether the Button is disabled or not. */\n disabled?: boolean;\n /** Class names to be applied. */\n className?: string;\n /** Element placed before the children. */\n startIcon?: ReactElement;\n /** Element placed after the children. */\n endIcon?: ReactElement;\n /** Button size. */\n size?: HvButtonSize;\n /** Button border radius. */\n radius?: HvButtonRadius;\n /** Defines the default colors of the button are forced into the icon. */\n overrideIconColors?: boolean;\n /** A Jss Object used to override or extend the styles applied. */\n classes?: HvButtonClasses;\n /** Whether the Button is selected or not. */\n selected?: boolean;\n }\n >;\n\n/**\n * Normalize the button variant. It's meant to give us some retro-compatibility with\n * the DS 3.6 API.\n * @returns the normalized variant in DS 5 API\n */\nconst mapVariant = (\n variant: HvButtonVariant,\n theme?: string\n): HvButtonVariant => {\n if (theme === \"ds3\") return variant;\n\n const deprecatedVariantMap: Record<string, HvButtonVariant> = {\n secondary: \"secondarySubtle\",\n ghost: \"primaryGhost\",\n };\n\n const mappedVariant = deprecatedVariantMap[variant];\n\n if (mappedVariant) {\n // eslint-disable-next-line no-console\n console.warn(\n `Button variant '${variant}' is deprecated. Please use '${mappedVariant}'.`\n );\n }\n\n return mappedVariant || variant;\n};\n\n/**\n * Button component is used to trigger an action or event.\n */\nexport const HvButton: <C extends React.ElementType = \"button\">(\n props: HvButtonProps<C>\n) => React.ReactElement | null = forwardRef(\n <C extends React.ElementType = \"button\">(\n props: HvButtonProps<C>,\n ref: PolymorphicRef<C>\n ) => {\n const {\n id,\n classes: classesProp,\n children,\n variant: variantProp = \"primary\",\n disabled = false,\n className,\n startIcon,\n endIcon,\n icon = false,\n size,\n radius,\n overrideIconColors = true,\n component: Component = \"button\",\n ...others\n } = props;\n const { classes, css, cx } = useClasses(classesProp);\n const { activeTheme } = useTheme();\n\n const variant = mapVariant(variantProp, activeTheme?.name);\n\n return (\n <Component\n ref={ref}\n type=\"button\"\n className={cx(\n classes.root,\n css(getVariantStyles(variant)),\n size && css(getSizeStyles(size)),\n radius && css(getRadiusStyles(radius)),\n overrideIconColors && css(getOverrideColors(
|
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../../../src/components/Button/Button.tsx"],"sourcesContent":["import React, { forwardRef, ReactElement } from \"react\";\nimport { useTheme } from \"@core/hooks\";\nimport { PolymorphicComponentRef, PolymorphicRef } from \"@core/types\";\nimport { ExtractNames } from \"@core/utils\";\nimport {\n staticClasses as buttonClasses,\n getOverrideColors,\n getRadiusStyles,\n getSizeStyles,\n getVariantStyles,\n useClasses,\n} from \"./Button.styles\";\n\nexport { buttonClasses };\n\nexport type HvButtonClasses = ExtractNames<typeof useClasses>;\n\nexport const buttonVariant = [\n \"primary\",\n \"primarySubtle\",\n \"primaryGhost\",\n \"secondarySubtle\",\n \"secondaryGhost\",\n \"semantic\",\n // deprecated props\n \"secondary\",\n \"ghost\",\n] as const;\nexport type HvButtonVariant = (typeof buttonVariant)[number];\n\nexport const buttonSize = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"] as const;\nexport type HvButtonSize = (typeof buttonSize)[number];\n\nexport const buttonRadius = [\n \"none\",\n \"base\",\n \"round\",\n \"circle\",\n \"full\",\n] as const;\nexport type HvButtonRadius = (typeof buttonRadius)[number];\n\nexport type HvButtonProps<C extends React.ElementType = \"button\"> =\n PolymorphicComponentRef<\n C,\n {\n /** Use the variant prop to change the visual style of the Button. */\n variant?: HvButtonVariant;\n /** Whether the Button is an icon-only button. */\n icon?: boolean;\n /** Whether the Button is disabled or not. */\n disabled?: boolean;\n /** Class names to be applied. */\n className?: string;\n /** Element placed before the children. */\n startIcon?: ReactElement;\n /** Element placed after the children. */\n endIcon?: ReactElement;\n /** Button size. */\n size?: HvButtonSize;\n /** Button border radius. */\n radius?: HvButtonRadius;\n /** Defines the default colors of the button are forced into the icon. */\n overrideIconColors?: boolean;\n /** A Jss Object used to override or extend the styles applied. */\n classes?: HvButtonClasses;\n /** Whether the Button is selected or not. */\n selected?: boolean;\n }\n >;\n\n/**\n * Normalize the button variant. It's meant to give us some retro-compatibility with\n * the DS 3.6 API.\n * @returns the normalized variant in DS 5 API\n */\nconst mapVariant = (\n variant: HvButtonVariant,\n theme?: string\n): HvButtonVariant => {\n if (theme === \"ds3\") return variant;\n\n const deprecatedVariantMap: Record<string, HvButtonVariant> = {\n secondary: \"secondarySubtle\",\n ghost: \"primaryGhost\",\n };\n\n const mappedVariant = deprecatedVariantMap[variant];\n\n if (mappedVariant) {\n // eslint-disable-next-line no-console\n console.warn(\n `Button variant '${variant}' is deprecated. Please use '${mappedVariant}'.`\n );\n }\n\n return mappedVariant || variant;\n};\n\n/**\n * Button component is used to trigger an action or event.\n */\nexport const HvButton: <C extends React.ElementType = \"button\">(\n props: HvButtonProps<C>\n) => React.ReactElement | null = forwardRef(\n <C extends React.ElementType = \"button\">(\n props: HvButtonProps<C>,\n ref: PolymorphicRef<C>\n ) => {\n const {\n id,\n classes: classesProp,\n children,\n variant: variantProp = \"primary\",\n disabled = false,\n className,\n startIcon,\n endIcon,\n icon = false,\n size,\n radius,\n overrideIconColors = true,\n component: Component = \"button\",\n ...others\n } = props;\n const { classes, css, cx } = useClasses(classesProp);\n const { activeTheme } = useTheme();\n\n const variant = mapVariant(variantProp, activeTheme?.name);\n\n return (\n <Component\n ref={ref}\n type=\"button\"\n className={cx(\n classes.root,\n css(getVariantStyles(variant)),\n size && css(getSizeStyles(size)),\n radius && css(getRadiusStyles(radius)),\n overrideIconColors && css(getOverrideColors()),\n {\n [classes.icon]: icon,\n [classes.disabled]: disabled,\n },\n className\n )}\n {...(disabled && {\n disabled: true,\n tabIndex: -1,\n \"aria-disabled\": true,\n })}\n {...others}\n >\n {startIcon && <span className={classes.startIcon}>{startIcon}</span>}\n {children}\n {endIcon && <span className={classes.endIcon}>{endIcon}</span>}\n </Component>\n );\n }\n);\n"],"names":["mapVariant","variant","theme","deprecatedVariantMap","secondary","ghost","mappedVariant","warn","HvButton","forwardRef","props","ref","id","classes","classesProp","children","variantProp","disabled","className","startIcon","endIcon","icon","size","radius","overrideIconColors","component","Component","others","css","cx","useClasses","activeTheme","useTheme","name","type","root","getVariantStyles","getSizeStyles","getRadiusStyles","getOverrideColors","tabIndex","_jsx"],"mappings":";;;;;AA4EA,MAAMA,aAAaA,CACjBC,SACAC,UACoB;AACpB,MAAIA,UAAU;AAAcD,WAAAA;AAE5B,QAAME,uBAAwD;AAAA,IAC5DC,WAAW;AAAA,IACXC,OAAO;AAAA,EAAA;AAGHC,QAAAA,gBAAgBH,qBAAqBF,OAAO;AAElD,MAAIK,eAAe;AAETC,YAAAA,KACL,mBAAkBN,uCAAuCK,iBAC5D;AAAA,EACF;AAEA,SAAOA,iBAAiBL;AAC1B;AAKO,MAAMO,WAEoBC,WAC/B,CACEC,OACAC,QACG;AACG,QAAA;AAAA,IACJC;AAAAA,IACAC,SAASC;AAAAA,IACTC;AAAAA,IACAd,SAASe,cAAc;AAAA,IACvBC,WAAW;AAAA,IACXC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC,OAAO;AAAA,IACPC;AAAAA,IACAC;AAAAA,IACAC,qBAAqB;AAAA,IACrBC,WAAWC,YAAY;AAAA,IACvB,GAAGC;AAAAA,EACDjB,IAAAA;AACE,QAAA;AAAA,IAAEG;AAAAA,IAASe;AAAAA,IAAKC;AAAAA,EAAAA,IAAOC,WAAWhB,WAAW;AAC7C,QAAA;AAAA,IAAEiB;AAAAA,MAAgBC,SAAS;AAEjC,QAAM/B,UAAUD,WAAWgB,aAAae,2CAAaE,IAAI;AAEzD,8BACGP,WAAS;AAAA,IACRf;AAAAA,IACAuB,MAAK;AAAA,IACLhB,WAAWW,GACThB,QAAQsB,MACRP,IAAIQ,iBAAiBnC,OAAO,CAAC,GAC7BqB,QAAQM,IAAIS,cAAcf,IAAI,CAAC,GAC/BC,UAAUK,IAAIU,gBAAgBf,MAAM,CAAC,GACrCC,sBAAsBI,IAAIW,kBAAkB,CAAC,GAC7C;AAAA,MACE,CAAC1B,QAAQQ,IAAI,GAAGA;AAAAA,MAChB,CAACR,QAAQI,QAAQ,GAAGA;AAAAA,OAEtBC,SACF;AAAA,IAAE,GACGD,YAAY;AAAA,MACfA,UAAU;AAAA,MACVuB,UAAU;AAAA,MACV,iBAAiB;AAAA,IACnB;AAAA,IAAC,GACGb;AAAAA,IAAMZ,UAAA,CAETI,aAAasB,oBAAA,QAAA;AAAA,MAAMvB,WAAWL,QAAQM;AAAAA,MAAUJ,UAAEI;AAAAA,IAAgB,CAAA,GAClEJ,UACAK,+BAAW,QAAA;AAAA,MAAMF,WAAWL,QAAQO;AAAAA,MAAQL,UAAEK;AAAAA,IAAAA,CAAc,CAAC;AAAA,EAAA,CACrD;AAEf,CACF;"}
|
|
@@ -119,9 +119,9 @@ const getSizeStyles = (size) => ({
|
|
|
119
119
|
paddingRight: theme.space[size],
|
|
120
120
|
fontSize: theme.fontSizes[size]
|
|
121
121
|
});
|
|
122
|
-
const getOverrideColors = (
|
|
122
|
+
const getOverrideColors = () => ({
|
|
123
123
|
"& svg .color0": {
|
|
124
|
-
fill:
|
|
124
|
+
fill: "currentcolor"
|
|
125
125
|
}
|
|
126
126
|
});
|
|
127
127
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.styles.js","sources":["../../../../src/components/Button/Button.styles.ts"],"sourcesContent":["import { CSSInterpolation } from \"@emotion/serialize\";\nimport { theme } from \"@hitachivantara/uikit-styles\";\nimport { createClasses, outlineStyles } from \"@core/utils\";\nimport { HvButtonRadius, HvButtonSize, HvButtonVariant } from \".\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvButton\", {\n root: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textTransform: \"none\",\n cursor: \"pointer\",\n minWidth: \"70px\",\n\n whiteSpace: \"nowrap\",\n\n \"&:hover\": {},\n \"&:focus\": {},\n \"&:focus-visible\": { ...outlineStyles },\n \"&:active\": {},\n\n // default button - no size specified\n fontFamily: theme.fontFamily.body,\n fontSize: theme.fontSizes.base,\n fontWeight: theme.fontWeights.semibold,\n lineHeight: \"11px\",\n letterSpacing: 0,\n height: \"32px\",\n borderRadius: theme.button.borderRadius,\n padding: theme.button.padding,\n },\n startIcon: {\n marginLeft: `calc(-1 * ${theme.space.xs})`,\n },\n endIcon: {\n marginRight: `calc(-1 * ${theme.space.xs})`,\n },\n focusVisible: {},\n\n disabled: {\n color: theme.colors.secondary_60,\n borderColor: theme.colors.atmo4,\n backgroundColor: theme.colors.atmo3,\n cursor: \"not-allowed\",\n pointerEvents: \"none\",\n },\n\n icon: {\n margin: 0,\n padding: 0,\n height: \"fit-content\",\n minWidth: \"unset\",\n },\n});\n\nexport const getVariantStyles = (variant: HvButtonVariant) => {\n const variantStyles: Record<HvButtonVariant, CSSInterpolation> = {\n primary: {\n color: theme.colors.atmo1,\n backgroundColor: theme.colors.primary,\n \"&:hover, &:focus-visible\": {\n backgroundColor: theme.colors.primary_80,\n },\n },\n primarySubtle: {\n color: theme.colors.primary,\n backgroundColor: \"transparent\",\n border: `1px solid ${theme.colors.primary}`,\n \"&:hover, &:focus-visible\": {\n backgroundColor: theme.button.hoverColor,\n },\n },\n primaryGhost: {\n color: theme.colors.primary,\n backgroundColor: \"transparent\",\n \"&:hover, &:focus-visible\": {\n backgroundColor: theme.button.hoverColor,\n },\n \"&:disabled\": {\n backgroundColor: \"transparent\",\n },\n },\n secondarySubtle: {\n color: theme.colors.secondary,\n backgroundColor: theme.button.secondaryBackgroundColor,\n border: `1px solid ${theme.button.secondarySubtleBorderColor}`,\n \"&:hover, &:focus-visible\": {\n backgroundColor: theme.button.hoverColor,\n },\n },\n secondaryGhost: {\n color: theme.colors.secondary,\n backgroundColor: \"transparent\",\n \"&:hover, &:focus-visible\": {\n backgroundColor: theme.button.hoverColor,\n },\n \"&:disabled\": {\n backgroundColor: \"transparent\",\n },\n },\n semantic: {\n color: theme.colors.base_dark,\n backgroundColor: \"transparent\",\n \"&:hover, &:focus-visible\": {\n backgroundColor: theme.button.semanticColor,\n },\n \"&:disabled\": {\n backgroundColor: theme.button.semanticColorDisabled,\n },\n },\n secondary: undefined,\n ghost: undefined,\n };\n\n return variantStyles[variant];\n};\n\nexport const getRadiusStyles = (radius: HvButtonRadius): CSSInterpolation => ({\n borderRadius: theme.radii[radius],\n});\n\nexport const getSizeStyles = (size: HvButtonSize): CSSInterpolation => ({\n height: theme.sizes[size],\n paddingLeft: theme.space[size],\n paddingRight: theme.space[size],\n fontSize: theme.fontSizes[size],\n});\n\nexport const getOverrideColors = (
|
|
1
|
+
{"version":3,"file":"Button.styles.js","sources":["../../../../src/components/Button/Button.styles.ts"],"sourcesContent":["import { CSSInterpolation } from \"@emotion/serialize\";\nimport { theme } from \"@hitachivantara/uikit-styles\";\nimport { createClasses, outlineStyles } from \"@core/utils\";\nimport { HvButtonRadius, HvButtonSize, HvButtonVariant } from \".\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvButton\", {\n root: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textTransform: \"none\",\n cursor: \"pointer\",\n minWidth: \"70px\",\n\n whiteSpace: \"nowrap\",\n\n \"&:hover\": {},\n \"&:focus\": {},\n \"&:focus-visible\": { ...outlineStyles },\n \"&:active\": {},\n\n // default button - no size specified\n fontFamily: theme.fontFamily.body,\n fontSize: theme.fontSizes.base,\n fontWeight: theme.fontWeights.semibold,\n lineHeight: \"11px\",\n letterSpacing: 0,\n height: \"32px\",\n borderRadius: theme.button.borderRadius,\n padding: theme.button.padding,\n },\n startIcon: {\n marginLeft: `calc(-1 * ${theme.space.xs})`,\n },\n endIcon: {\n marginRight: `calc(-1 * ${theme.space.xs})`,\n },\n focusVisible: {},\n\n disabled: {\n color: theme.colors.secondary_60,\n borderColor: theme.colors.atmo4,\n backgroundColor: theme.colors.atmo3,\n cursor: \"not-allowed\",\n pointerEvents: \"none\",\n },\n\n icon: {\n margin: 0,\n padding: 0,\n height: \"fit-content\",\n minWidth: \"unset\",\n },\n});\n\nexport const getVariantStyles = (variant: HvButtonVariant) => {\n const variantStyles: Record<HvButtonVariant, CSSInterpolation> = {\n primary: {\n color: theme.colors.atmo1,\n backgroundColor: theme.colors.primary,\n \"&:hover, &:focus-visible\": {\n backgroundColor: theme.colors.primary_80,\n },\n },\n primarySubtle: {\n color: theme.colors.primary,\n backgroundColor: \"transparent\",\n border: `1px solid ${theme.colors.primary}`,\n \"&:hover, &:focus-visible\": {\n backgroundColor: theme.button.hoverColor,\n },\n },\n primaryGhost: {\n color: theme.colors.primary,\n backgroundColor: \"transparent\",\n \"&:hover, &:focus-visible\": {\n backgroundColor: theme.button.hoverColor,\n },\n \"&:disabled\": {\n backgroundColor: \"transparent\",\n },\n },\n secondarySubtle: {\n color: theme.colors.secondary,\n backgroundColor: theme.button.secondaryBackgroundColor,\n border: `1px solid ${theme.button.secondarySubtleBorderColor}`,\n \"&:hover, &:focus-visible\": {\n backgroundColor: theme.button.hoverColor,\n },\n },\n secondaryGhost: {\n color: theme.colors.secondary,\n backgroundColor: \"transparent\",\n \"&:hover, &:focus-visible\": {\n backgroundColor: theme.button.hoverColor,\n },\n \"&:disabled\": {\n backgroundColor: \"transparent\",\n },\n },\n semantic: {\n color: theme.colors.base_dark,\n backgroundColor: \"transparent\",\n \"&:hover, &:focus-visible\": {\n backgroundColor: theme.button.semanticColor,\n },\n \"&:disabled\": {\n backgroundColor: theme.button.semanticColorDisabled,\n },\n },\n secondary: undefined,\n ghost: undefined,\n };\n\n return variantStyles[variant];\n};\n\nexport const getRadiusStyles = (radius: HvButtonRadius): CSSInterpolation => ({\n borderRadius: theme.radii[radius],\n});\n\nexport const getSizeStyles = (size: HvButtonSize): CSSInterpolation => ({\n height: theme.sizes[size],\n paddingLeft: theme.space[size],\n paddingRight: theme.space[size],\n fontSize: theme.fontSizes[size],\n});\n\nexport const getOverrideColors = (): CSSInterpolation => ({\n \"& svg .color0\": {\n fill: \"currentcolor\",\n },\n});\n"],"names":["staticClasses","useClasses","createClasses","root","display","alignItems","justifyContent","textTransform","cursor","minWidth","whiteSpace","outlineStyles","fontFamily","theme","body","fontSize","fontSizes","base","fontWeight","fontWeights","semibold","lineHeight","letterSpacing","height","borderRadius","button","padding","startIcon","marginLeft","space","xs","endIcon","marginRight","focusVisible","disabled","color","colors","secondary_60","borderColor","atmo4","backgroundColor","atmo3","pointerEvents","icon","margin","getVariantStyles","variant","variantStyles","primary","atmo1","primary_80","primarySubtle","border","hoverColor","primaryGhost","secondarySubtle","secondary","secondaryBackgroundColor","secondarySubtleBorderColor","secondaryGhost","semantic","base_dark","semanticColor","semanticColorDisabled","undefined","ghost","getRadiusStyles","radius","radii","getSizeStyles","size","sizes","paddingLeft","paddingRight","getOverrideColors","fill"],"mappings":"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"}
|
|
@@ -14,14 +14,10 @@ import { HvFormElementValueContext } from "../../Forms/FormElement/context/FormE
|
|
|
14
14
|
import { HvFormElementContext } from "../../Forms/FormElement/context/FormElementContext.js";
|
|
15
15
|
import { HvFormElementDescriptorsContext } from "../../Forms/FormElement/context/FormElementDescriptorsContext.js";
|
|
16
16
|
import { setId } from "../../../utils/setId.js";
|
|
17
|
-
import {
|
|
18
|
-
import { keyboardCodes } from "../../../utils/keyboardUtils/keyboardCodes.js";
|
|
17
|
+
import { isKey } from "../../../utils/keyboardUtils.js";
|
|
19
18
|
dayjs.extend(localeData);
|
|
20
19
|
dayjs.extend(localizedFormat);
|
|
21
20
|
dayjs.extend(customParseFormat);
|
|
22
|
-
const {
|
|
23
|
-
Enter
|
|
24
|
-
} = keyboardCodes;
|
|
25
21
|
const HvCalendarHeader = ({
|
|
26
22
|
id,
|
|
27
23
|
value,
|
|
@@ -97,7 +93,7 @@ const HvCalendarHeader = ({
|
|
|
97
93
|
handleNewDate(event, editedValue);
|
|
98
94
|
};
|
|
99
95
|
const keyDownHandler = (event) => {
|
|
100
|
-
if (!
|
|
96
|
+
if (!isKey(event, "Enter") || isNil(editedValue) || editedValue === "")
|
|
101
97
|
return;
|
|
102
98
|
event.preventDefault();
|
|
103
99
|
handleNewDate(event, editedValue);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarHeader.js","sources":["../../../../../src/components/Calendar/CalendarHeader/CalendarHeader.tsx"],"sourcesContent":["import { useState, useEffect, useContext } from \"react\";\nimport dayjs from \"dayjs\";\nimport localeData from \"dayjs/plugin/localeData\";\nimport localizedFormat from \"dayjs/plugin/localizedFormat\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat\";\nimport { clsx } from \"clsx\";\nimport isNil from \"lodash/isNil\";\nimport {\n HvFormElementContext,\n HvFormElementValueContext,\n HvFormElementDescriptorsContext,\n} from \"@core/components\";\nimport { isKeypress, keyboardCodes, setId } from \"@core/utils\";\nimport { Info } from \"@hitachivantara/uikit-react-icons\";\nimport { isRange, isSameDay, formatToLocale, isDate } from \"../utils\";\nimport { DateRangeProp } from \"../Calendar\";\nimport calendarHeaderClasses, {\n HvCalendarHeaderClasses,\n} from \"./calendarHeaderClasses\";\nimport {\n StyledHeaderDayOfWeek,\n StyledInput,\n StyledInputBorderContainer,\n StyledRoot,\n StyledTypography,\n} from \"./CalendarHeader.styles\";\n\ndayjs.extend(localeData);\ndayjs.extend(localizedFormat);\ndayjs.extend(customParseFormat);\n\nconst { Enter } = keyboardCodes;\n\nexport const HvCalendarHeader = ({\n id,\n value,\n locale = \"en-US\",\n classes,\n onChange,\n showEndDate,\n showDayOfWeek = false,\n onFocus,\n invalidDateLabel = \"Invalid Date\",\n ...others\n}: HvCalendarHeaderProps) => {\n const { elementId } = useContext(HvFormElementContext);\n const elementValue = useContext(HvFormElementValueContext);\n const { label } = useContext(HvFormElementDescriptorsContext);\n\n let localValue: string | Date | DateRangeProp | undefined =\n value ?? elementValue ?? \"\";\n if (isRange(localValue)) {\n localValue = showEndDate ? localValue.endDate : localValue.startDate;\n }\n const [dateValue, setDateValue] = useState<\n string | Date | DateRangeProp | undefined\n >(localValue);\n const [editedValue, setEditedValue] = useState<string | null>(null);\n const [displayValue, setDisplayValue] = useState(\"\");\n const [weekdayDisplay, setWeekdayDisplay] = useState(\"\");\n\n const localId = id ?? setId(elementId, \"calendarHeader\");\n\n const inputValue = editedValue ?? displayValue;\n const localeFormat = dayjs().locale(locale).localeData().longDateFormat(\"L\");\n\n const [isValidValue, setIsValidValue] = useState(\n inputValue.length === 0 || (!!inputValue && dayjs(localValue).isValid())\n );\n\n const validateInput = (incomingValid) =>\n incomingValid === undefined || dayjs(incomingValid).isValid();\n useEffect(() => {\n const valid = validateInput(localValue);\n setIsValidValue(valid);\n if (valid) {\n if (!localValue) {\n setDisplayValue(\"\");\n setEditedValue(null);\n setWeekdayDisplay(\"\");\n return;\n }\n const weekday = new Intl.DateTimeFormat(locale, {\n weekday: \"short\",\n }).format(isDate(localValue) ? localValue : 0);\n setDisplayValue(formatToLocale(localValue, locale));\n setEditedValue(null);\n setWeekdayDisplay(weekday);\n }\n }, [localValue, locale]);\n\n const handleNewDate = (event, date) => {\n // attempt to format in locale data, or fallback to default\n const localeParsedDate = dayjs(date, localeFormat);\n\n const isValidInput = localeParsedDate.isValid();\n const dateParsed = isValidInput\n ? localeParsedDate.toDate()\n : dayjs(date).toDate();\n // prevent extra updates\n if (!isSameDay(dateParsed, dateValue)) {\n setDateValue(dateParsed);\n onChange?.(event, dateParsed);\n }\n\n setIsValidValue(isValidInput);\n if (isValidInput) {\n setEditedValue(null);\n }\n };\n\n const onBlurHandler = (event) => {\n if (isNil(editedValue)) return;\n if (editedValue === \"\") {\n setIsValidValue(true);\n setEditedValue(null);\n return;\n }\n handleNewDate(event, editedValue);\n };\n\n const keyDownHandler = (event) => {\n if (!isKeypress(event, Enter) || isNil(editedValue) || editedValue === \"\")\n return;\n event.preventDefault();\n\n handleNewDate(event, editedValue);\n };\n\n const onFocusHandler = (event) => {\n if (!localValue) return;\n const formattedDate =\n isValidValue && isDate(localValue)\n ? dayjs(localValue).locale(locale).format(\"L\")\n : editedValue;\n setEditedValue(formattedDate);\n onFocus?.(event, formattedDate);\n };\n\n const onChangeHandler = (event) => {\n setEditedValue(event.target.value);\n };\n return (\n <>\n <StyledRoot\n id={localId}\n className={clsx(\n calendarHeaderClasses.root,\n classes?.root,\n !isValidValue &&\n inputValue !== \"\" &&\n clsx(calendarHeaderClasses.invalid, classes?.invalid)\n )}\n >\n {showDayOfWeek && (\n <StyledHeaderDayOfWeek\n className={clsx(\n calendarHeaderClasses.headerDayOfWeek,\n classes?.headerDayOfWeek\n )}\n >\n {weekdayDisplay || \"\\u00A0\"}\n </StyledHeaderDayOfWeek>\n )}\n\n <div\n className={clsx(\n calendarHeaderClasses.headerDate,\n classes?.headerDate\n )}\n >\n <StyledInput\n type=\"text\"\n id={setId(localId, \"header-input\")}\n placeholder={localeFormat}\n value={inputValue}\n className={clsx(calendarHeaderClasses.input, classes?.input)}\n onBlur={onBlurHandler}\n onFocus={onFocusHandler}\n onChange={onChangeHandler}\n onKeyDown={keyDownHandler}\n aria-labelledby={label?.[0]?.id}\n {...others}\n />\n </div>\n </StyledRoot>\n {!isValidValue && inputValue !== \"\" && (\n <StyledInputBorderContainer\n role=\"presentation\"\n className={clsx(\n calendarHeaderClasses.inputBorderContainer,\n classes?.inputBorderContainer\n )}\n />\n )}\n <div style={{ height: 32 }}>\n {!isValidValue && inputValue !== \"\" && (\n <StyledTypography\n component=\"span\"\n variant=\"body\"\n className={clsx(\n calendarHeaderClasses.invalidMessageStyling,\n classes?.invalidMessageStyling\n )}\n >\n <Info color=\"brand\" iconSize=\"S\" />\n {invalidDateLabel}\n </StyledTypography>\n )}\n </div>\n </>\n );\n};\n\n// TODO: refactor this out\nHvCalendarHeader.formElementType = \"HvCalendarHeader\";\n\nexport interface HvCalendarHeaderProps {\n /**\n * A Jss Object used to override or extend the component styles.\n */\n classes?: HvCalendarHeaderClasses;\n /**\n * Identifier.\n */\n id?: string;\n /**\n * The text to be shown on the main part of the header.\n */\n value?: string | Date | DateRangeProp;\n /**\n * Locale to be used by the calendar.\n */\n locale?: string;\n /**\n * Callback to define the input date.\n */\n onChange?: (\n event:\n | React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>\n | undefined,\n value: Date | DateRangeProp\n ) => void;\n /**\n * Callback to handle input onFocus.\n */\n onFocus?: (\n event: React.FocusEventHandler<any>,\n formattedDate: string | null\n ) => void;\n /**\n * Indicates if header should display end date in a date range.\n */\n showEndDate?: boolean;\n /**\n * Indicates if header should display the day of week.\n */\n showDayOfWeek?: boolean;\n /**\n * Label shown when date is invalid.\n */\n invalidDateLabel?: string;\n}\n"],"names":["dayjs","extend","localeData","localizedFormat","customParseFormat","Enter","keyboardCodes","HvCalendarHeader","id","value","locale","classes","onChange","showEndDate","showDayOfWeek","onFocus","invalidDateLabel","others","elementId","useContext","HvFormElementContext","elementValue","HvFormElementValueContext","label","HvFormElementDescriptorsContext","localValue","isRange","endDate","startDate","dateValue","setDateValue","useState","editedValue","setEditedValue","displayValue","setDisplayValue","weekdayDisplay","setWeekdayDisplay","localId","setId","inputValue","localeFormat","longDateFormat","isValidValue","setIsValidValue","length","isValid","validateInput","incomingValid","undefined","useEffect","valid","weekday","Intl","DateTimeFormat","format","isDate","formatToLocale","handleNewDate","event","date","localeParsedDate","isValidInput","dateParsed","toDate","isSameDay","onBlurHandler","isNil","keyDownHandler","isKeypress","preventDefault","onFocusHandler","formattedDate","onChangeHandler","target","_Fragment","children","_jsxs","StyledRoot","className","clsx","calendarHeaderClasses","root","invalid","_jsx","StyledHeaderDayOfWeek","headerDayOfWeek","headerDate","StyledInput","type","placeholder","input","onBlur","onKeyDown","StyledInputBorderContainer","role","inputBorderContainer","style","height","StyledTypography","component","variant","invalidMessageStyling","Info","color","iconSize","formElementType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CalendarHeader.js","sources":["../../../../../src/components/Calendar/CalendarHeader/CalendarHeader.tsx"],"sourcesContent":["import { useState, useEffect, useContext } from \"react\";\nimport dayjs from \"dayjs\";\nimport localeData from \"dayjs/plugin/localeData\";\nimport localizedFormat from \"dayjs/plugin/localizedFormat\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat\";\nimport { clsx } from \"clsx\";\nimport isNil from \"lodash/isNil\";\nimport {\n HvFormElementContext,\n HvFormElementValueContext,\n HvFormElementDescriptorsContext,\n} from \"@core/components\";\nimport { isKey, setId } from \"@core/utils\";\nimport { Info } from \"@hitachivantara/uikit-react-icons\";\nimport { isRange, isSameDay, formatToLocale, isDate } from \"../utils\";\nimport { DateRangeProp } from \"../Calendar\";\nimport calendarHeaderClasses, {\n HvCalendarHeaderClasses,\n} from \"./calendarHeaderClasses\";\nimport {\n StyledHeaderDayOfWeek,\n StyledInput,\n StyledInputBorderContainer,\n StyledRoot,\n StyledTypography,\n} from \"./CalendarHeader.styles\";\n\ndayjs.extend(localeData);\ndayjs.extend(localizedFormat);\ndayjs.extend(customParseFormat);\n\nexport const HvCalendarHeader = ({\n id,\n value,\n locale = \"en-US\",\n classes,\n onChange,\n showEndDate,\n showDayOfWeek = false,\n onFocus,\n invalidDateLabel = \"Invalid Date\",\n ...others\n}: HvCalendarHeaderProps) => {\n const { elementId } = useContext(HvFormElementContext);\n const elementValue = useContext(HvFormElementValueContext);\n const { label } = useContext(HvFormElementDescriptorsContext);\n\n let localValue: string | Date | DateRangeProp | undefined =\n value ?? elementValue ?? \"\";\n if (isRange(localValue)) {\n localValue = showEndDate ? localValue.endDate : localValue.startDate;\n }\n const [dateValue, setDateValue] = useState<\n string | Date | DateRangeProp | undefined\n >(localValue);\n const [editedValue, setEditedValue] = useState<string | null>(null);\n const [displayValue, setDisplayValue] = useState(\"\");\n const [weekdayDisplay, setWeekdayDisplay] = useState(\"\");\n\n const localId = id ?? setId(elementId, \"calendarHeader\");\n\n const inputValue = editedValue ?? displayValue;\n const localeFormat = dayjs().locale(locale).localeData().longDateFormat(\"L\");\n\n const [isValidValue, setIsValidValue] = useState(\n inputValue.length === 0 || (!!inputValue && dayjs(localValue).isValid())\n );\n\n const validateInput = (incomingValid) =>\n incomingValid === undefined || dayjs(incomingValid).isValid();\n useEffect(() => {\n const valid = validateInput(localValue);\n setIsValidValue(valid);\n if (valid) {\n if (!localValue) {\n setDisplayValue(\"\");\n setEditedValue(null);\n setWeekdayDisplay(\"\");\n return;\n }\n const weekday = new Intl.DateTimeFormat(locale, {\n weekday: \"short\",\n }).format(isDate(localValue) ? localValue : 0);\n setDisplayValue(formatToLocale(localValue, locale));\n setEditedValue(null);\n setWeekdayDisplay(weekday);\n }\n }, [localValue, locale]);\n\n const handleNewDate = (event, date) => {\n // attempt to format in locale data, or fallback to default\n const localeParsedDate = dayjs(date, localeFormat);\n\n const isValidInput = localeParsedDate.isValid();\n const dateParsed = isValidInput\n ? localeParsedDate.toDate()\n : dayjs(date).toDate();\n // prevent extra updates\n if (!isSameDay(dateParsed, dateValue)) {\n setDateValue(dateParsed);\n onChange?.(event, dateParsed);\n }\n\n setIsValidValue(isValidInput);\n if (isValidInput) {\n setEditedValue(null);\n }\n };\n\n const onBlurHandler = (event) => {\n if (isNil(editedValue)) return;\n if (editedValue === \"\") {\n setIsValidValue(true);\n setEditedValue(null);\n return;\n }\n handleNewDate(event, editedValue);\n };\n\n const keyDownHandler = (event) => {\n if (!isKey(event, \"Enter\") || isNil(editedValue) || editedValue === \"\")\n return;\n event.preventDefault();\n\n handleNewDate(event, editedValue);\n };\n\n const onFocusHandler = (event) => {\n if (!localValue) return;\n const formattedDate =\n isValidValue && isDate(localValue)\n ? dayjs(localValue).locale(locale).format(\"L\")\n : editedValue;\n setEditedValue(formattedDate);\n onFocus?.(event, formattedDate);\n };\n\n const onChangeHandler = (event) => {\n setEditedValue(event.target.value);\n };\n return (\n <>\n <StyledRoot\n id={localId}\n className={clsx(\n calendarHeaderClasses.root,\n classes?.root,\n !isValidValue &&\n inputValue !== \"\" &&\n clsx(calendarHeaderClasses.invalid, classes?.invalid)\n )}\n >\n {showDayOfWeek && (\n <StyledHeaderDayOfWeek\n className={clsx(\n calendarHeaderClasses.headerDayOfWeek,\n classes?.headerDayOfWeek\n )}\n >\n {weekdayDisplay || \"\\u00A0\"}\n </StyledHeaderDayOfWeek>\n )}\n\n <div\n className={clsx(\n calendarHeaderClasses.headerDate,\n classes?.headerDate\n )}\n >\n <StyledInput\n type=\"text\"\n id={setId(localId, \"header-input\")}\n placeholder={localeFormat}\n value={inputValue}\n className={clsx(calendarHeaderClasses.input, classes?.input)}\n onBlur={onBlurHandler}\n onFocus={onFocusHandler}\n onChange={onChangeHandler}\n onKeyDown={keyDownHandler}\n aria-labelledby={label?.[0]?.id}\n {...others}\n />\n </div>\n </StyledRoot>\n {!isValidValue && inputValue !== \"\" && (\n <StyledInputBorderContainer\n role=\"presentation\"\n className={clsx(\n calendarHeaderClasses.inputBorderContainer,\n classes?.inputBorderContainer\n )}\n />\n )}\n <div style={{ height: 32 }}>\n {!isValidValue && inputValue !== \"\" && (\n <StyledTypography\n component=\"span\"\n variant=\"body\"\n className={clsx(\n calendarHeaderClasses.invalidMessageStyling,\n classes?.invalidMessageStyling\n )}\n >\n <Info color=\"brand\" iconSize=\"S\" />\n {invalidDateLabel}\n </StyledTypography>\n )}\n </div>\n </>\n );\n};\n\n// TODO: refactor this out\nHvCalendarHeader.formElementType = \"HvCalendarHeader\";\n\nexport interface HvCalendarHeaderProps {\n /**\n * A Jss Object used to override or extend the component styles.\n */\n classes?: HvCalendarHeaderClasses;\n /**\n * Identifier.\n */\n id?: string;\n /**\n * The text to be shown on the main part of the header.\n */\n value?: string | Date | DateRangeProp;\n /**\n * Locale to be used by the calendar.\n */\n locale?: string;\n /**\n * Callback to define the input date.\n */\n onChange?: (\n event:\n | React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>\n | undefined,\n value: Date | DateRangeProp\n ) => void;\n /**\n * Callback to handle input onFocus.\n */\n onFocus?: (\n event: React.FocusEventHandler<any>,\n formattedDate: string | null\n ) => void;\n /**\n * Indicates if header should display end date in a date range.\n */\n showEndDate?: boolean;\n /**\n * Indicates if header should display the day of week.\n */\n showDayOfWeek?: boolean;\n /**\n * Label shown when date is invalid.\n */\n invalidDateLabel?: string;\n}\n"],"names":["dayjs","extend","localeData","localizedFormat","customParseFormat","HvCalendarHeader","id","value","locale","classes","onChange","showEndDate","showDayOfWeek","onFocus","invalidDateLabel","others","elementId","useContext","HvFormElementContext","elementValue","HvFormElementValueContext","label","HvFormElementDescriptorsContext","localValue","isRange","endDate","startDate","dateValue","setDateValue","useState","editedValue","setEditedValue","displayValue","setDisplayValue","weekdayDisplay","setWeekdayDisplay","localId","setId","inputValue","localeFormat","longDateFormat","isValidValue","setIsValidValue","length","isValid","validateInput","incomingValid","undefined","useEffect","valid","weekday","Intl","DateTimeFormat","format","isDate","formatToLocale","handleNewDate","event","date","localeParsedDate","isValidInput","dateParsed","toDate","isSameDay","onBlurHandler","isNil","keyDownHandler","isKey","preventDefault","onFocusHandler","formattedDate","onChangeHandler","target","_Fragment","children","_jsxs","StyledRoot","className","clsx","calendarHeaderClasses","root","invalid","_jsx","StyledHeaderDayOfWeek","headerDayOfWeek","headerDate","StyledInput","type","placeholder","input","onBlur","onKeyDown","StyledInputBorderContainer","role","inputBorderContainer","style","height","StyledTypography","component","variant","invalidMessageStyling","Info","color","iconSize","formElementType"],"mappings":"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"}
|
|
@@ -3,8 +3,7 @@ import { getMonthNamesList } from "../../utils.js";
|
|
|
3
3
|
import monthSelectorClasses from "./monthSelectorClasses.js";
|
|
4
4
|
import { StyledCalendarMonthlyGrid, StyledFocusSelection, StyledCalendarMonthlyCell } from "./MonthSelector.styles.js";
|
|
5
5
|
import { jsx } from "@emotion/react/jsx-runtime";
|
|
6
|
-
import {
|
|
7
|
-
import { keyboardCodes } from "../../../../utils/keyboardUtils/keyboardCodes.js";
|
|
6
|
+
import { isKey } from "../../../../utils/keyboardUtils.js";
|
|
8
7
|
const HvMonthSelector = ({
|
|
9
8
|
classes,
|
|
10
9
|
id,
|
|
@@ -17,7 +16,7 @@ const HvMonthSelector = ({
|
|
|
17
16
|
}) => {
|
|
18
17
|
const listMonthNamesShort = getMonthNamesList(locale, "short");
|
|
19
18
|
const onKeyDownHandler = (event, index) => {
|
|
20
|
-
if (
|
|
19
|
+
if (isKey(event, "Enter")) {
|
|
21
20
|
onChange == null ? void 0 : onChange(event, "month", index + 1);
|
|
22
21
|
onViewModeChange("calendar");
|
|
23
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonthSelector.js","sources":["../../../../../../src/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {
|
|
1
|
+
{"version":3,"file":"MonthSelector.js","sources":["../../../../../../src/components/Calendar/CalendarNavigation/MonthSelector/MonthSelector.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { isKey } from \"@core/utils\";\nimport { getMonthNamesList } from \"../../utils\";\nimport { ViewMode } from \"../../enums\";\nimport monthSelectorClasses, {\n HvMonthSelectorClasses,\n} from \"./monthSelectorClasses\";\nimport {\n StyledCalendarMonthlyCell,\n StyledCalendarMonthlyGrid,\n StyledFocusSelection,\n} from \"./MonthSelector.styles\";\nimport { DateRangeProp, VisibilitySelectorActions } from \"../../Calendar\";\n\nexport const HvMonthSelector = ({\n classes,\n id,\n locale,\n onChange,\n onViewModeChange,\n rangeMode,\n visibleMonth,\n ...others\n}: HvMonthSelectorProps) => {\n const listMonthNamesShort = getMonthNamesList(locale, \"short\");\n const onKeyDownHandler = (event, index) => {\n if (isKey(event, \"Enter\")) {\n onChange?.(event, \"month\", index + 1);\n onViewModeChange(\"calendar\");\n }\n };\n return (\n <StyledCalendarMonthlyGrid\n className={clsx(\n monthSelectorClasses.calendarMonthlyGrid,\n classes?.calendarMonthlyGrid,\n rangeMode\n ? clsx(monthSelectorClasses.rangeModeWidth, classes?.rangeModeWidth)\n : clsx(monthSelectorClasses.normalWidth, classes?.normalWidth)\n )}\n >\n {listMonthNamesShort.map((monthName, index) => (\n <StyledFocusSelection\n className={clsx(\n monthSelectorClasses.focusSelection,\n classes?.focusSelection\n )}\n key={monthName}\n role=\"button\"\n onClick={(event) => {\n onChange?.(event, \"month\", index + 1);\n onViewModeChange(\"calendar\");\n }}\n onKeyDown={(event) => onKeyDownHandler(event, index)}\n tabIndex={0}\n {...others}\n >\n <StyledCalendarMonthlyCell\n className={clsx(\n monthSelectorClasses.calendarMonthlyCell,\n classes?.calendarMonthlyCell,\n index + 1 === visibleMonth &&\n clsx(\n monthSelectorClasses.calendarMonthlyCellSelected,\n classes?.calendarMonthlyCellSelected\n )\n )}\n >\n {monthName}\n </StyledCalendarMonthlyCell>\n </StyledFocusSelection>\n ))}\n </StyledCalendarMonthlyGrid>\n );\n};\n\nexport interface HvMonthSelectorProps {\n /**\n * A Jss Object used to override or extend the component styles.\n */\n classes?: HvMonthSelectorClasses;\n /**\n * Identifier.\n */\n id?: string;\n /**\n * Locale to be used by the calendar.\n */\n locale?: string;\n /**\n * Callback to define the input date.\n */\n onChange?: (\n event: any,\n action: VisibilitySelectorActions,\n value: Date | DateRangeProp | number\n ) => void;\n /**\n * Callback to define the input date.\n */\n onViewModeChange: (viewMode: ViewMode) => void;\n /**\n * Controls the visible month of the Calendar\n */\n visibleMonth: number;\n /**\n * Controls the visible month of the Calendar\n */\n visibleYear?: number;\n rangeMode?: boolean;\n}\n"],"names":["HvMonthSelector","classes","id","locale","onChange","onViewModeChange","rangeMode","visibleMonth","others","listMonthNamesShort","getMonthNamesList","onKeyDownHandler","event","index","isKey","StyledCalendarMonthlyGrid","className","clsx","monthSelectorClasses","calendarMonthlyGrid","rangeModeWidth","normalWidth","children","map","monthName","StyledFocusSelection","focusSelection","role","onClick","onKeyDown","tabIndex","StyledCalendarMonthlyCell","calendarMonthlyCell","calendarMonthlyCellSelected"],"mappings":";;;;;;AAcO,MAAMA,kBAAkBA,CAAC;AAAA,EAC9BC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACA,GAAGC;AACiB,MAAM;AACpBC,QAAAA,sBAAsBC,kBAAkBP,QAAQ,OAAO;AACvDQ,QAAAA,mBAAmBA,CAACC,OAAOC,UAAU;AACrCC,QAAAA,MAAMF,OAAO,OAAO,GAAG;AACdA,2CAAAA,OAAO,SAASC,QAAQ;AACnCR,uBAAiB,UAAU;AAAA,IAC7B;AAAA,EAAA;AAEF,6BACGU,2BAAyB;AAAA,IACxBC,WAAWC,KACTC,qBAAqBC,qBACrBlB,mCAASkB,qBACTb,YACIW,KAAKC,qBAAqBE,gBAAgBnB,mCAASmB,cAAc,IACjEH,KAAKC,qBAAqBG,aAAapB,mCAASoB,WAAW,CACjE;AAAA,IAAEC,UAEDb,oBAAoBc,IAAI,CAACC,WAAWX,8BAClCY,sBAAoB;AAAA,MACnBT,WAAWC,KACTC,qBAAqBQ,gBACrBzB,mCAASyB,cACX;AAAA,MAEAC,MAAK;AAAA,MACLC,SAAUhB,CAAU,UAAA;AACPA,6CAAAA,OAAO,SAASC,QAAQ;AACnCR,yBAAiB,UAAU;AAAA,MAC7B;AAAA,MACAwB,WAAYjB,CAAAA,UAAUD,iBAAiBC,OAAOC,KAAK;AAAA,MACnDiB,UAAU;AAAA,MAAE,GACRtB;AAAAA,MAAMc,8BAETS,2BAAyB;AAAA,QACxBf,WAAWC,KACTC,qBAAqBc,qBACrB/B,mCAAS+B,qBACTnB,QAAQ,MAAMN,gBACZU,KACEC,qBAAqBe,6BACrBhC,mCAASgC,2BACX,CACJ;AAAA,QAAEX,UAEDE;AAAAA,MAAAA,CACwB;AAAA,IAAC,GAtBvBA,SAuBe,CACvB;AAAA,EAAA,CACwB;AAE/B;"}
|
|
@@ -4,8 +4,7 @@ import navigationClasses from "./navigationClasses.js";
|
|
|
4
4
|
import { jsxs, jsx } from "@emotion/react/jsx-runtime";
|
|
5
5
|
import { setId } from "../../../../utils/setId.js";
|
|
6
6
|
import { HvTypography } from "../../../Typography/Typography.js";
|
|
7
|
-
import {
|
|
8
|
-
import { keyboardCodes } from "../../../../utils/keyboardUtils/keyboardCodes.js";
|
|
7
|
+
import { isKey } from "../../../../utils/keyboardUtils.js";
|
|
9
8
|
const Navigation = ({
|
|
10
9
|
id,
|
|
11
10
|
classes,
|
|
@@ -17,7 +16,7 @@ const Navigation = ({
|
|
|
17
16
|
isNextEnabled = true
|
|
18
17
|
}) => {
|
|
19
18
|
const onkeyDownHandler = (event, funcAction) => {
|
|
20
|
-
if (
|
|
19
|
+
if (isKey(event, "Enter") || isKey(event, "Space")) {
|
|
21
20
|
event.preventDefault();
|
|
22
21
|
funcAction(event);
|
|
23
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Navigation.js","sources":["../../../../../../src/components/Calendar/CalendarNavigation/Navigation/Navigation.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {
|
|
1
|
+
{"version":3,"file":"Navigation.js","sources":["../../../../../../src/components/Calendar/CalendarNavigation/Navigation/Navigation.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { isKey, setId } from \"@core/utils\";\nimport { HvTypography } from \"@core/components\";\nimport { HvBaseProps } from \"@core/types\";\nimport {\n StyledDropLeftIcon,\n StyledDropRightIcon,\n StyledRoot,\n StyledText,\n} from \"./Navigation.styles\";\nimport navigationClasses, { HvNavigationClasses } from \"./navigationClasses\";\n\nexport const Navigation = ({\n id,\n classes,\n onNavigatePrevious,\n onNavigateNext,\n onTextClick,\n navigationText = \"n/a\",\n isPreviousEnabled = true,\n isNextEnabled = true,\n}: NavigationProps) => {\n const onkeyDownHandler = (event, funcAction) => {\n if (isKey(event, \"Enter\") || isKey(event, \"Space\")) {\n event.preventDefault();\n funcAction(event);\n }\n };\n\n const onTextClickIsFunction = typeof onTextClick === \"function\";\n\n return (\n <StyledRoot className={clsx(navigationClasses.root, classes?.root)}>\n <StyledDropLeftIcon\n id={setId(id, \"left\")}\n className={clsx(\n navigationClasses.icon,\n classes?.icon,\n !isPreviousEnabled &&\n clsx(navigationClasses.disabled, classes?.disabled)\n )}\n onClick={\n isPreviousEnabled ? (event) => onNavigatePrevious(event) : undefined\n }\n onKeyDown={(event) =>\n isNextEnabled\n ? onkeyDownHandler(event, onNavigatePrevious)\n : undefined\n }\n tabIndex={0}\n />\n\n <StyledText\n id={id}\n className={clsx(\n onTextClickIsFunction && clsx(navigationClasses.text, classes?.text),\n !onTextClickIsFunction &&\n clsx(navigationClasses.textWithoutHover, classes?.textWithoutHover)\n )}\n role=\"presentation\"\n onClick={onTextClick}\n onKeyDown={\n onTextClick && ((event) => onkeyDownHandler(event, onTextClick))\n }\n tabIndex={onTextClick ? 0 : -1}\n >\n <HvTypography variant=\"body\">{navigationText}</HvTypography>\n </StyledText>\n\n <StyledDropRightIcon\n id={setId(id, \"right\")}\n className={`${clsx(navigationClasses.icon, classes?.icon)} ${\n isNextEnabled\n ? \"\"\n : clsx(navigationClasses.disabled, classes?.disabled)\n }`}\n onClick={isNextEnabled ? (event) => onNavigateNext(event) : undefined}\n onKeyDown={(event) =>\n isNextEnabled ? onkeyDownHandler(event, onNavigateNext) : undefined\n }\n tabIndex={0}\n />\n </StyledRoot>\n );\n};\n\nexport interface NavigationProps extends HvBaseProps {\n /**\n * Identifier.\n */\n id?: string;\n /**\n * A Jss Object used to override or extend the component styles.\n */\n classes?: HvNavigationClasses;\n /**\n * A function to be executed whenever the navigate previous action is triggered.\n */\n onNavigatePrevious: (event: React.MouseEvent<HTMLDivElement>) => void;\n /**\n * A function to be executed whenever the navigate next action is triggered.\n */\n onNavigateNext: (event: React.MouseEvent<HTMLDivElement>) => void;\n /**\n * A function to be executed whenever the text is clicked.\n */\n onTextClick?: () => void;\n /**\n * The text that will be shown between the navigation buttons.\n */\n navigationText?: string;\n /**\n * Flag stating if the previous button should be enabled or disabled.\n */\n isPreviousEnabled?: boolean;\n /**\n * Flag stating if the next button should be enabled or disabled.\n */\n isNextEnabled?: boolean;\n}\n"],"names":["Navigation","id","classes","onNavigatePrevious","onNavigateNext","onTextClick","navigationText","isPreviousEnabled","isNextEnabled","onkeyDownHandler","event","funcAction","isKey","preventDefault","onTextClickIsFunction","StyledRoot","className","clsx","navigationClasses","root","children","_jsx","StyledDropLeftIcon","setId","icon","disabled","onClick","undefined","onKeyDown","tabIndex","StyledText","text","textWithoutHover","role","HvTypography","variant","StyledDropRightIcon"],"mappings":";;;;;;;AAYO,MAAMA,aAAaA,CAAC;AAAA,EACzBC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC,iBAAiB;AAAA,EACjBC,oBAAoB;AAAA,EACpBC,gBAAgB;AACD,MAAM;AACfC,QAAAA,mBAAmBA,CAACC,OAAOC,eAAe;AAC9C,QAAIC,MAAMF,OAAO,OAAO,KAAKE,MAAMF,OAAO,OAAO,GAAG;AAClDA,YAAMG,eAAe;AACrBF,iBAAWD,KAAK;AAAA,IAClB;AAAA,EAAA;AAGII,QAAAA,wBAAwB,OAAOT,gBAAgB;AAErD,8BACGU,YAAU;AAAA,IAACC,WAAWC,KAAKC,kBAAkBC,MAAMjB,mCAASiB,IAAI;AAAA,IAAEC,UAAA,CACjEC,oBAACC,oBAAkB;AAAA,MACjBrB,IAAIsB,MAAMtB,IAAI,MAAM;AAAA,MACpBe,WAAWC,KACTC,kBAAkBM,MAClBtB,mCAASsB,MACT,CAACjB,qBACCU,KAAKC,kBAAkBO,UAAUvB,mCAASuB,QAAQ,CACtD;AAAA,MACAC,SACEnB,oBAAqBG,CAAUP,UAAAA,mBAAmBO,KAAK,IAAIiB;AAAAA,MAE7DC,WAAYlB,CACVF,UAAAA,gBACIC,iBAAiBC,OAAOP,kBAAkB,IAC1CwB;AAAAA,MAENE,UAAU;AAAA,IAAA,CACX,GAEDR,oBAACS,YAAU;AAAA,MACT7B;AAAAA,MACAe,WAAWC,KACTH,yBAAyBG,KAAKC,kBAAkBa,MAAM7B,mCAAS6B,IAAI,GACnE,CAACjB,yBACCG,KAAKC,kBAAkBc,kBAAkB9B,mCAAS8B,gBAAgB,CACtE;AAAA,MACAC,MAAK;AAAA,MACLP,SAASrB;AAAAA,MACTuB,WACEvB,gBAAiBK,CAAUD,UAAAA,iBAAiBC,OAAOL,WAAW;AAAA,MAEhEwB,UAAUxB,cAAc,IAAI;AAAA,MAAGe,8BAE9Bc,cAAY;AAAA,QAACC,SAAQ;AAAA,QAAMf,UAAEd;AAAAA,MAAAA,CAA6B;AAAA,IAAA,CACjD,GAEZe,oBAACe,qBAAmB;AAAA,MAClBnC,IAAIsB,MAAMtB,IAAI,OAAO;AAAA,MACrBe,WAAY,GAAEC,KAAKC,kBAAkBM,MAAMtB,mCAASsB,IAAI,KACtDhB,gBACI,KACAS,KAAKC,kBAAkBO,UAAUvB,mCAASuB,QAAQ;AAAA,MAExDC,SAASlB,gBAAiBE,CAAUN,UAAAA,eAAeM,KAAK,IAAIiB;AAAAA,MAC5DC,WAAYlB,CACVF,UAAAA,gBAAgBC,iBAAiBC,OAAON,cAAc,IAAIuB;AAAAA,MAE5DE,UAAU;AAAA,IAAA,CACX,CAAC;AAAA,EAAA,CACQ;AAEhB;"}
|