@hitachivantara/uikit-react-core 5.19.3 → 5.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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/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/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/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/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/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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropDownMenu.cjs","sources":["../../../../src/components/DropDownMenu/DropDownMenu.tsx"],"sourcesContent":["import { ChangeEvent, useMemo } from \"react\";\nimport { theme } from \"@hitachivantara/uikit-styles\";\nimport { MoreOptionsVertical } from \"@hitachivantara/uikit-react-icons\";\nimport { useControlled, useUniqueId } from \"@core/hooks\";\nimport { HvBaseProps } from \"@core/types\";\nimport {
|
|
1
|
+
{"version":3,"file":"DropDownMenu.cjs","sources":["../../../../src/components/DropDownMenu/DropDownMenu.tsx"],"sourcesContent":["import { ChangeEvent, useMemo } from \"react\";\nimport { theme } from \"@hitachivantara/uikit-styles\";\nimport { MoreOptionsVertical } from \"@hitachivantara/uikit-react-icons\";\nimport { useControlled, useUniqueId } from \"@core/hooks\";\nimport { HvBaseProps } from \"@core/types\";\nimport { isKey, setId, getPrevNextFocus, ExtractNames } from \"@core/utils\";\nimport {\n HvBaseDropdown,\n HvBaseDropdownProps,\n HvButton,\n HvButtonVariant,\n HvList,\n HvListProps,\n HvListValue,\n HvPanel,\n} from \"@core/components\";\nimport { staticClasses, useClasses } from \"./DropDownMenu.styles\";\n\nexport { staticClasses as dropDownMenuClasses };\n\nexport type HvDropDownMenuClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvDropDownMenuProps\n extends HvBaseProps<HTMLDivElement, \"onClick\"> {\n /** Icon. */\n icon?: React.ReactElement;\n /**\n * A list containing the elements to be rendered.\n *\n * - label: The label of the element to be rendered.\n * - selected: The selection state of the element.\n * - disabled: The disabled state of the element.\n * - icon: The icon node to be rendered on the left.\n * - showNavIcon: If true renders the navigation icon on the right.\n */\n dataList: HvListValue[];\n /** Placement of the dropdown. */\n placement?: \"left\" | \"right\";\n /** Disable the portal behavior. The children stay within it's parent DOM hierarchy. */\n disablePortal?: boolean;\n /** Function executed on toggle of the dropdown. Should receive the open status. */\n onToggle?: (event: Event, open: boolean) => void;\n /** Function executed in each onClick. Should received the clicked element. */\n onClick?: (\n event: React.ChangeEvent<HTMLLIElement>,\n value: HvListValue\n ) => void;\n /** Keep the Dropdown Menu opened after clicking one option */\n keepOpened?: boolean;\n /** Defines if the component is disabled. */\n disabled?: boolean;\n /** If true it should be displayed open. */\n expanded?: boolean;\n /** When uncontrolled, defines the initial expanded state. */\n defaultExpanded?: boolean;\n /** The variant to be used in the header. */\n category?: HvButtonVariant;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvDropDownMenuClasses;\n}\n\n/**\n * A drop-down menu is a graphical control element, similar to a list box, that allows the user to choose a value from a list.\n */\nexport const HvDropDownMenu = ({\n id: idProp,\n classes: classesProp,\n className,\n icon,\n placement = \"right\",\n dataList,\n disablePortal = false,\n onToggle,\n onClick,\n keepOpened = true,\n disabled = false,\n expanded,\n defaultExpanded = false,\n category = \"secondaryGhost\",\n ...others\n}: HvDropDownMenuProps) => {\n const { classes, cx } = useClasses(classesProp);\n const [open, setOpen] = useControlled(expanded, Boolean(defaultExpanded));\n const id = useUniqueId(idProp, \"dropdown-menu\");\n const focusNodes = getPrevNextFocus(setId(id, \"icon-button\"));\n\n const listId = setId(id, \"list\");\n\n const handleClose = (event: ChangeEvent) => {\n // this will only run if uncontrolled\n setOpen(false);\n onToggle?.(event as any, false);\n };\n\n // If the ESCAPE key is pressed inside the list, the close handler must be called.\n const handleKeyDown: HvListProps[\"onKeyDown\"] = (event) => {\n if (isKey(event, \"Tab\")) {\n const node = event.shiftKey ? focusNodes.prevFocus : focusNodes.nextFocus;\n if (node) setTimeout(() => node.focus(), 0);\n handleClose(event as any);\n }\n event.preventDefault();\n };\n\n const setFocusToContent: HvBaseDropdownProps[\"onContainerCreation\"] = (\n containerRef\n ) => {\n containerRef?.getElementsByTagName(\"li\")[0]?.focus();\n };\n\n const condensed = useMemo(() => dataList.every((el) => !el.icon), [dataList]);\n const popperStyle: HvBaseDropdownProps[\"popperProps\"] = {\n style: {\n zIndex: theme.zIndices.tooltip,\n width: \"auto\",\n position: \"relative\",\n },\n };\n\n return (\n <HvBaseDropdown\n id={id}\n className={cx(className, classes.container)}\n classes={{\n root: classes.root,\n container: classes.baseContainer,\n }}\n expanded={open && !disabled}\n component={\n <HvButton\n icon\n variant={category}\n id={setId(id, \"icon-button\")}\n className={cx(classes.icon, { [classes.iconSelected]: open })}\n aria-expanded={open}\n disabled={disabled}\n aria-label=\"Dropdown menu\"\n >\n {icon || (\n <MoreOptionsVertical\n color={disabled ? \"secondary_60\" : undefined}\n />\n )}\n </HvButton>\n }\n aria-haspopup=\"menu\"\n placement={placement}\n variableWidth\n disablePortal={disablePortal}\n onToggle={(e, s) => {\n // this will only run if uncontrolled\n setOpen(s);\n onToggle?.(e, s);\n }}\n disabled={disabled}\n onContainerCreation={setFocusToContent}\n popperProps={popperStyle}\n {...others}\n >\n <HvPanel className={classes.menuListRoot}>\n <HvList\n id={listId}\n values={dataList}\n selectable={false}\n condensed={condensed}\n onClick={(event, item) => {\n if (!keepOpened) handleClose(event);\n onClick?.(event, item);\n }}\n onKeyDown={handleKeyDown}\n classes={{\n root: classes.menuList,\n }}\n />\n </HvPanel>\n </HvBaseDropdown>\n );\n};\n"],"names":["HvDropDownMenu","id","idProp","classes","classesProp","className","icon","placement","dataList","disablePortal","onToggle","onClick","keepOpened","disabled","expanded","defaultExpanded","category","others","cx","useClasses","open","setOpen","useControlled","Boolean","useUniqueId","focusNodes","getPrevNextFocus","setId","listId","handleClose","event","handleKeyDown","isKey","node","shiftKey","prevFocus","nextFocus","setTimeout","focus","preventDefault","setFocusToContent","containerRef","getElementsByTagName","condensed","useMemo","every","el","popperStyle","style","zIndex","theme","zIndices","tooltip","width","position","HvBaseDropdown","container","root","baseContainer","component","HvButton","variant","iconSelected","children","_jsx","MoreOptionsVertical","color","undefined","variableWidth","e","s","onContainerCreation","popperProps","HvPanel","menuListRoot","HvList","values","selectable","item","onKeyDown","menuList"],"mappings":"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"}
|
|
@@ -10,8 +10,7 @@ const dropZoneClasses = require("./dropZoneClasses.cjs");
|
|
|
10
10
|
const jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
11
11
|
const useUniqueId = require("../../../hooks/useUniqueId.cjs");
|
|
12
12
|
const setId = require("../../../utils/setId.cjs");
|
|
13
|
-
const
|
|
14
|
-
const keyboardCodes = require("../../../utils/keyboardUtils/keyboardCodes.cjs");
|
|
13
|
+
const keyboardUtils = require("../../../utils/keyboardUtils.cjs");
|
|
15
14
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
16
15
|
const uniqueId__default = /* @__PURE__ */ _interopDefault(uniqueId);
|
|
17
16
|
const accept__default = /* @__PURE__ */ _interopDefault(accept);
|
|
@@ -111,7 +110,7 @@ const HvDropZone = ({
|
|
|
111
110
|
},
|
|
112
111
|
onKeyDown: (e) => {
|
|
113
112
|
var _a;
|
|
114
|
-
if (
|
|
113
|
+
if (keyboardUtils.isKey(e, "Enter") || keyboardUtils.isKey(e, "Space")) {
|
|
115
114
|
(_a = inputRef.current) == null ? void 0 : _a.click();
|
|
116
115
|
}
|
|
117
116
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropZone.cjs","sources":["../../../../../src/components/FileUploader/DropZone/DropZone.tsx"],"sourcesContent":["import React, { useRef, useState } from \"react\";\nimport uniqueId from \"lodash/uniqueId\";\nimport accept from \"attr-accept\";\nimport { clsx } from \"clsx\";\nimport { isKeypress, keyboardCodes, setId } from \"@core/utils\";\nimport { useUniqueId } from \"@core/hooks\";\nimport { convertUnits } from \"../utils\";\nimport {\n StyledDragText,\n StyledDropArea,\n StyledDropAreaIcon,\n StyledDropAreaLabel,\n StyledDropAreaLabels,\n StyledDropZoneContainer,\n StyledDropZoneLabelsGroup,\n StyledInfoMessage,\n StyledInput,\n StyledLabel,\n StyledSelectedFilesText,\n} from \"./DropZone.styles\";\nimport dropZoneClasses, { HvDropZoneClasses } from \"./dropZoneClasses\";\nimport { HvFileData, HvFilesAddedEvent } from \"../File\";\n\nexport interface HvDropZoneLabels {\n /**\n * Extensions of the accepted file types\n */\n acceptedFiles?: string;\n /**\n * Dropzone area label.\n */\n dropzone?: string;\n /**\n * Size file warning label.\n */\n sizeWarning?: string;\n /**\n * Size file warning label.\n */\n drag?: string;\n /**\n * Size file warning label.\n */\n selectFiles?: string;\n /**\n * Theming sheet used to style components\n * */\n dropFiles?: string;\n /**\n * Message to display when file size is greater than allowed\n * */\n fileSizeError?: string;\n /**\n * Message to display when file type is greater than allowed\n * */\n fileTypeError?: string;\n}\n\nexport interface HvDropZoneProps {\n /**\n * Id to be applied to the root node.\n */\n id?: string;\n /**\n * Labels to present in FileUploader.\n */\n labels?: HvDropZoneLabels;\n /**\n * Whether the Dropzone should accept multiple files at once.\n */\n multiple?: boolean;\n /**\n * If the input is disabled or not\n */\n disabled?: boolean;\n /**\n * Files extensions accepted for upload.\n */\n acceptedFiles: string[];\n /**\n * Max upload size\n * */\n maxFileSize: number;\n /**\n * Function responsible for processing files added to the drop zone.\n */\n onFilesAdded?: HvFilesAddedEvent;\n /**\n * Whether the DropZone should hide labels or not.\n */\n hideLabels?: boolean;\n /**\n * Attributes applied to the input element.\n */\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n /**\n * A Jss Object used to override or extend the styles applied to the component.\n */\n classes?: HvDropZoneClasses;\n}\n\nexport const HvDropZone = ({\n id: idProp,\n classes,\n labels,\n acceptedFiles,\n maxFileSize,\n inputProps,\n hideLabels,\n multiple = true,\n disabled = false,\n onFilesAdded,\n}: HvDropZoneProps) => {\n const id = useUniqueId(idProp, \"dropzone\");\n const [dragState, setDrag] = useState<boolean>(false);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const leaveDropArea = () => {\n setDrag(false);\n };\n\n const enterDropArea = () => {\n setDrag(true);\n };\n\n const onChangeHandler = (filesList: FileList) => {\n const filesToProcess = Object.keys(filesList).map((e) => filesList[e]);\n\n const newFiles: HvFileData[] = [];\n\n filesToProcess.forEach((file: File) => {\n const newFile: HvFileData = file;\n\n const isSizeAllowed = file.size <= maxFileSize;\n const isFileAccepted =\n !acceptedFiles.length ||\n acceptedFiles.indexOf(file.type.split(\"/\")[1]) > -1 ||\n acceptedFiles.some((acceptExtension) =>\n accept({ name: file.name, type: file.type }, acceptExtension)\n );\n\n if (!isFileAccepted) {\n newFile.errorMessage = labels?.fileTypeError;\n newFile.status = \"fail\";\n } else if (!isSizeAllowed) {\n newFile.errorMessage = labels?.fileSizeError;\n newFile.status = \"fail\";\n }\n\n newFile.id = uniqueId(\"uploaded-file-data-\");\n newFiles.push(newFile);\n });\n\n onFilesAdded?.(newFiles);\n };\n\n return (\n <>\n {!hideLabels && (\n <StyledDropZoneLabelsGroup\n id={id}\n className={clsx(\n classes?.dropZoneLabelsGroup,\n dropZoneClasses.dropZoneLabelsGroup\n )}\n aria-label=\"File Dropzone\"\n >\n <StyledLabel\n id={setId(id, \"input-file-label\")}\n htmlFor={setId(id, \"input-file\")}\n label={labels?.dropzone}\n className={clsx(\n classes?.dropZoneLabel,\n dropZoneClasses.dropZoneLabel\n )}\n $disabled={disabled}\n />\n <StyledInfoMessage $disabled={disabled} id={setId(id, \"description\")}>\n {Number.isInteger(maxFileSize) &&\n `${labels?.sizeWarning} ${convertUnits(maxFileSize)}`}\n {labels?.acceptedFiles && labels.acceptedFiles}\n {!labels?.acceptedFiles &&\n acceptedFiles.length > 0 &&\n `\\u00A0(${acceptedFiles.join(\", \")})`}\n </StyledInfoMessage>\n </StyledDropZoneLabelsGroup>\n )}\n <StyledDropZoneContainer\n id={setId(id, \"button\")}\n className={clsx(\n classes?.dropZoneContainer,\n dropZoneClasses.dropZoneContainer,\n dragState && clsx(classes?.dragAction, dropZoneClasses.dragAction),\n disabled &&\n clsx(\n classes?.dropZoneContainerDisabled,\n dropZoneClasses.dropZoneContainerDisabled\n )\n )}\n $drag={dragState}\n $disabled={disabled}\n role=\"button\"\n tabIndex={0}\n onDragEnter={(event) => {\n if (!disabled) {\n enterDropArea();\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n onDragLeave={leaveDropArea}\n onDropCapture={leaveDropArea}\n onDragOver={(event) => {\n if (!disabled) {\n enterDropArea();\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n onDrop={(event) => {\n if (!disabled) {\n const { files } = event.dataTransfer;\n if (multiple === true || files.length === 1) {\n event.stopPropagation();\n event.preventDefault();\n onChangeHandler(files);\n }\n }\n }}\n onKeyDown={(e) => {\n if (isKeypress(e, keyboardCodes.Enter) || isKeypress(e, 32)) {\n inputRef.current?.click();\n }\n }}\n >\n <StyledInput\n id={setId(id, \"input-file\")}\n tabIndex={-1}\n className={clsx(classes?.inputArea, dropZoneClasses.inputArea)}\n type=\"file\"\n multiple={multiple}\n disabled={disabled}\n title={!disabled ? `${labels?.drag}\\xa0${labels?.selectFiles}` : \"\"}\n onClick={() => {\n if (inputRef.current) {\n inputRef.current.value = \"\";\n }\n }}\n onChange={() => {\n if (!disabled && inputRef.current?.files) {\n onChangeHandler(inputRef.current.files);\n }\n }}\n ref={inputRef}\n accept={acceptedFiles.join(\",\")}\n {...inputProps}\n />\n <StyledDropArea\n className={clsx(classes?.dropArea, dropZoneClasses.dropArea)}\n >\n {dragState ? (\n <StyledDropAreaLabel\n className={clsx(\n classes?.dropZoneAreaLabels,\n dropZoneClasses.dropZoneAreaLabels\n )}\n >\n <StyledDragText\n className={clsx(classes?.dragText, dropZoneClasses.dragText)}\n >\n {labels?.dropFiles}\n </StyledDragText>\n </StyledDropAreaLabel>\n ) : (\n <>\n <StyledDropAreaIcon\n iconSize=\"M\"\n className={clsx(\n classes?.dropZoneAreaIcon,\n dropZoneClasses.dropZoneAreaIcon\n )}\n color={disabled ? \"secondary_60\" : \"secondary\"}\n />\n <StyledDropAreaLabels\n className={clsx(\n classes?.dropZoneAreaLabels,\n dropZoneClasses.dropZoneAreaLabels\n )}\n >\n <StyledDragText\n className={clsx(classes?.dragText, dropZoneClasses.dragText)}\n >\n {labels?.drag}\n <StyledSelectedFilesText\n className={clsx(\n classes?.selectFilesText,\n dropZoneClasses.selectFilesText\n )}\n >{`\\xa0${labels?.selectFiles}`}</StyledSelectedFilesText>\n </StyledDragText>\n </StyledDropAreaLabels>\n </>\n )}\n </StyledDropArea>\n </StyledDropZoneContainer>\n </>\n );\n};\n"],"names":["HvDropZone","id","idProp","classes","labels","acceptedFiles","maxFileSize","inputProps","hideLabels","multiple","disabled","onFilesAdded","useUniqueId","dragState","setDrag","useState","inputRef","useRef","leaveDropArea","enterDropArea","onChangeHandler","filesList","filesToProcess","Object","keys","map","e","newFiles","forEach","file","newFile","isSizeAllowed","size","isFileAccepted","length","indexOf","type","split","some","acceptExtension","accept","name","errorMessage","fileTypeError","status","fileSizeError","uniqueId","push","_Fragment","children","StyledDropZoneLabelsGroup","className","clsx","dropZoneLabelsGroup","dropZoneClasses","_jsx","StyledLabel","setId","htmlFor","label","dropzone","dropZoneLabel","$disabled","_jsxs","StyledInfoMessage","Number","isInteger","sizeWarning","convertUnits","join","StyledDropZoneContainer","dropZoneContainer","dragAction","dropZoneContainerDisabled","$drag","role","tabIndex","onDragEnter","event","stopPropagation","preventDefault","onDragLeave","onDropCapture","onDragOver","onDrop","files","dataTransfer","onKeyDown","isKeypress","keyboardCodes","Enter","current","click","StyledInput","inputArea","title","drag","selectFiles","onClick","value","onChange","ref","StyledDropArea","dropArea","StyledDropAreaLabel","dropZoneAreaLabels","StyledDragText","dragText","dropFiles","StyledDropAreaIcon","iconSize","dropZoneAreaIcon","color","StyledDropAreaLabels","StyledSelectedFilesText","selectFilesText"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DropZone.cjs","sources":["../../../../../src/components/FileUploader/DropZone/DropZone.tsx"],"sourcesContent":["import React, { useRef, useState } from \"react\";\nimport uniqueId from \"lodash/uniqueId\";\nimport accept from \"attr-accept\";\nimport { clsx } from \"clsx\";\nimport { isKey, setId } from \"@core/utils\";\nimport { useUniqueId } from \"@core/hooks\";\nimport { convertUnits } from \"../utils\";\nimport {\n StyledDragText,\n StyledDropArea,\n StyledDropAreaIcon,\n StyledDropAreaLabel,\n StyledDropAreaLabels,\n StyledDropZoneContainer,\n StyledDropZoneLabelsGroup,\n StyledInfoMessage,\n StyledInput,\n StyledLabel,\n StyledSelectedFilesText,\n} from \"./DropZone.styles\";\nimport dropZoneClasses, { HvDropZoneClasses } from \"./dropZoneClasses\";\nimport { HvFileData, HvFilesAddedEvent } from \"../File\";\n\nexport interface HvDropZoneLabels {\n /**\n * Extensions of the accepted file types\n */\n acceptedFiles?: string;\n /**\n * Dropzone area label.\n */\n dropzone?: string;\n /**\n * Size file warning label.\n */\n sizeWarning?: string;\n /**\n * Size file warning label.\n */\n drag?: string;\n /**\n * Size file warning label.\n */\n selectFiles?: string;\n /**\n * Theming sheet used to style components\n * */\n dropFiles?: string;\n /**\n * Message to display when file size is greater than allowed\n * */\n fileSizeError?: string;\n /**\n * Message to display when file type is greater than allowed\n * */\n fileTypeError?: string;\n}\n\nexport interface HvDropZoneProps {\n /**\n * Id to be applied to the root node.\n */\n id?: string;\n /**\n * Labels to present in FileUploader.\n */\n labels?: HvDropZoneLabels;\n /**\n * Whether the Dropzone should accept multiple files at once.\n */\n multiple?: boolean;\n /**\n * If the input is disabled or not\n */\n disabled?: boolean;\n /**\n * Files extensions accepted for upload.\n */\n acceptedFiles: string[];\n /**\n * Max upload size\n * */\n maxFileSize: number;\n /**\n * Function responsible for processing files added to the drop zone.\n */\n onFilesAdded?: HvFilesAddedEvent;\n /**\n * Whether the DropZone should hide labels or not.\n */\n hideLabels?: boolean;\n /**\n * Attributes applied to the input element.\n */\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n /**\n * A Jss Object used to override or extend the styles applied to the component.\n */\n classes?: HvDropZoneClasses;\n}\n\nexport const HvDropZone = ({\n id: idProp,\n classes,\n labels,\n acceptedFiles,\n maxFileSize,\n inputProps,\n hideLabels,\n multiple = true,\n disabled = false,\n onFilesAdded,\n}: HvDropZoneProps) => {\n const id = useUniqueId(idProp, \"dropzone\");\n const [dragState, setDrag] = useState<boolean>(false);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const leaveDropArea = () => {\n setDrag(false);\n };\n\n const enterDropArea = () => {\n setDrag(true);\n };\n\n const onChangeHandler = (filesList: FileList) => {\n const filesToProcess = Object.keys(filesList).map((e) => filesList[e]);\n\n const newFiles: HvFileData[] = [];\n\n filesToProcess.forEach((file: File) => {\n const newFile: HvFileData = file;\n\n const isSizeAllowed = file.size <= maxFileSize;\n const isFileAccepted =\n !acceptedFiles.length ||\n acceptedFiles.indexOf(file.type.split(\"/\")[1]) > -1 ||\n acceptedFiles.some((acceptExtension) =>\n accept({ name: file.name, type: file.type }, acceptExtension)\n );\n\n if (!isFileAccepted) {\n newFile.errorMessage = labels?.fileTypeError;\n newFile.status = \"fail\";\n } else if (!isSizeAllowed) {\n newFile.errorMessage = labels?.fileSizeError;\n newFile.status = \"fail\";\n }\n\n newFile.id = uniqueId(\"uploaded-file-data-\");\n newFiles.push(newFile);\n });\n\n onFilesAdded?.(newFiles);\n };\n\n return (\n <>\n {!hideLabels && (\n <StyledDropZoneLabelsGroup\n id={id}\n className={clsx(\n classes?.dropZoneLabelsGroup,\n dropZoneClasses.dropZoneLabelsGroup\n )}\n aria-label=\"File Dropzone\"\n >\n <StyledLabel\n id={setId(id, \"input-file-label\")}\n htmlFor={setId(id, \"input-file\")}\n label={labels?.dropzone}\n className={clsx(\n classes?.dropZoneLabel,\n dropZoneClasses.dropZoneLabel\n )}\n $disabled={disabled}\n />\n <StyledInfoMessage $disabled={disabled} id={setId(id, \"description\")}>\n {Number.isInteger(maxFileSize) &&\n `${labels?.sizeWarning} ${convertUnits(maxFileSize)}`}\n {labels?.acceptedFiles && labels.acceptedFiles}\n {!labels?.acceptedFiles &&\n acceptedFiles.length > 0 &&\n `\\u00A0(${acceptedFiles.join(\", \")})`}\n </StyledInfoMessage>\n </StyledDropZoneLabelsGroup>\n )}\n <StyledDropZoneContainer\n id={setId(id, \"button\")}\n className={clsx(\n classes?.dropZoneContainer,\n dropZoneClasses.dropZoneContainer,\n dragState && clsx(classes?.dragAction, dropZoneClasses.dragAction),\n disabled &&\n clsx(\n classes?.dropZoneContainerDisabled,\n dropZoneClasses.dropZoneContainerDisabled\n )\n )}\n $drag={dragState}\n $disabled={disabled}\n role=\"button\"\n tabIndex={0}\n onDragEnter={(event) => {\n if (!disabled) {\n enterDropArea();\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n onDragLeave={leaveDropArea}\n onDropCapture={leaveDropArea}\n onDragOver={(event) => {\n if (!disabled) {\n enterDropArea();\n event.stopPropagation();\n event.preventDefault();\n }\n }}\n onDrop={(event) => {\n if (!disabled) {\n const { files } = event.dataTransfer;\n if (multiple === true || files.length === 1) {\n event.stopPropagation();\n event.preventDefault();\n onChangeHandler(files);\n }\n }\n }}\n onKeyDown={(e) => {\n if (isKey(e, \"Enter\") || isKey(e, \"Space\")) {\n inputRef.current?.click();\n }\n }}\n >\n <StyledInput\n id={setId(id, \"input-file\")}\n tabIndex={-1}\n className={clsx(classes?.inputArea, dropZoneClasses.inputArea)}\n type=\"file\"\n multiple={multiple}\n disabled={disabled}\n title={!disabled ? `${labels?.drag}\\xa0${labels?.selectFiles}` : \"\"}\n onClick={() => {\n if (inputRef.current) {\n inputRef.current.value = \"\";\n }\n }}\n onChange={() => {\n if (!disabled && inputRef.current?.files) {\n onChangeHandler(inputRef.current.files);\n }\n }}\n ref={inputRef}\n accept={acceptedFiles.join(\",\")}\n {...inputProps}\n />\n <StyledDropArea\n className={clsx(classes?.dropArea, dropZoneClasses.dropArea)}\n >\n {dragState ? (\n <StyledDropAreaLabel\n className={clsx(\n classes?.dropZoneAreaLabels,\n dropZoneClasses.dropZoneAreaLabels\n )}\n >\n <StyledDragText\n className={clsx(classes?.dragText, dropZoneClasses.dragText)}\n >\n {labels?.dropFiles}\n </StyledDragText>\n </StyledDropAreaLabel>\n ) : (\n <>\n <StyledDropAreaIcon\n iconSize=\"M\"\n className={clsx(\n classes?.dropZoneAreaIcon,\n dropZoneClasses.dropZoneAreaIcon\n )}\n color={disabled ? \"secondary_60\" : \"secondary\"}\n />\n <StyledDropAreaLabels\n className={clsx(\n classes?.dropZoneAreaLabels,\n dropZoneClasses.dropZoneAreaLabels\n )}\n >\n <StyledDragText\n className={clsx(classes?.dragText, dropZoneClasses.dragText)}\n >\n {labels?.drag}\n <StyledSelectedFilesText\n className={clsx(\n classes?.selectFilesText,\n dropZoneClasses.selectFilesText\n )}\n >{`\\xa0${labels?.selectFiles}`}</StyledSelectedFilesText>\n </StyledDragText>\n </StyledDropAreaLabels>\n </>\n )}\n </StyledDropArea>\n </StyledDropZoneContainer>\n </>\n );\n};\n"],"names":["HvDropZone","id","idProp","classes","labels","acceptedFiles","maxFileSize","inputProps","hideLabels","multiple","disabled","onFilesAdded","useUniqueId","dragState","setDrag","useState","inputRef","useRef","leaveDropArea","enterDropArea","onChangeHandler","filesList","filesToProcess","Object","keys","map","e","newFiles","forEach","file","newFile","isSizeAllowed","size","isFileAccepted","length","indexOf","type","split","some","acceptExtension","accept","name","errorMessage","fileTypeError","status","fileSizeError","uniqueId","push","_Fragment","children","StyledDropZoneLabelsGroup","className","clsx","dropZoneLabelsGroup","dropZoneClasses","_jsx","StyledLabel","setId","htmlFor","label","dropzone","dropZoneLabel","$disabled","_jsxs","StyledInfoMessage","Number","isInteger","sizeWarning","convertUnits","join","StyledDropZoneContainer","dropZoneContainer","dragAction","dropZoneContainerDisabled","$drag","role","tabIndex","onDragEnter","event","stopPropagation","preventDefault","onDragLeave","onDropCapture","onDragOver","onDrop","files","dataTransfer","onKeyDown","isKey","current","click","StyledInput","inputArea","title","drag","selectFiles","onClick","value","onChange","ref","StyledDropArea","dropArea","StyledDropAreaLabel","dropZoneAreaLabels","StyledDragText","dragText","dropFiles","StyledDropAreaIcon","iconSize","dropZoneAreaIcon","color","StyledDropAreaLabels","StyledSelectedFilesText","selectFilesText"],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ const utils = require("./utils.cjs");
|
|
|
10
10
|
const focusClasses = require("./focusClasses.cjs");
|
|
11
11
|
const jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
12
12
|
const browser = require("../../utils/browser.cjs");
|
|
13
|
-
const
|
|
13
|
+
const keyboardUtils = require("../../utils/keyboardUtils.cjs");
|
|
14
14
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
15
15
|
const isNil__default = /* @__PURE__ */ _interopDefault(isNil);
|
|
16
16
|
const React__default = /* @__PURE__ */ _interopDefault(React);
|
|
@@ -23,7 +23,7 @@ const focusStyles = process.env.NODE_ENV === "production" ? {
|
|
|
23
23
|
} : {
|
|
24
24
|
name: "1ahoc7i-focusStyles",
|
|
25
25
|
styles: ".HvFocus-focused{outline-color:#52a8ec;outline-style:solid;outline-width:0px;outline-offset:-1px;box-shadow:0 0 0 1px #52a8ec,0 0 0 4px rgba(29, 155, 209, 0.3);@media (-webkit-min-device-pixel-ratio: 0){outline-color:#52a8ec;outline-style:solid;outline-width:0px;outline-offset:-1px;box-shadow:0 0 0 1px #52a8ec,0 0 0 4px rgba(29, 155, 209, 0.3);}}.HvFocus-focusDisabled{outline:none;box-shadow:none;}.HvFocus-focusDisabled *:focus{outline:none;box-shadow:none;}.HvFocus-focusDisabled *{outline:none!important;box-shadow:none!important;};label:focusStyles;",
|
|
26
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2h2LXVpa2l0LXJlYWN0L2h2LXVpa2l0LXJlYWN0L3BhY2thZ2VzL2NvcmUvc3JjL2NvbXBvbmVudHMvRm9jdXMvRm9jdXMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVd1QiIsImZpbGUiOiIvaG9tZS9ydW5uZXIvd29yay9odi11aWtpdC1yZWFjdC9odi11aWtpdC1yZWFjdC9wYWNrYWdlcy9jb3JlL3NyYy9jb21wb25lbnRzL0ZvY3VzL0ZvY3VzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsc3ggfSBmcm9tIFwiY2xzeFwiO1xuaW1wb3J0IGlzTmlsIGZyb20gXCJsb2Rhc2gvaXNOaWxcIjtcbmltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBIdkJhc2VQcm9wcyB9IGZyb20gXCJAY29yZS90eXBlc1wiO1xuaW1wb3J0IHsga2V5Ym9hcmRDb2RlcywgaXNCcm93c2VyIH0gZnJvbSBcIkBjb3JlL3V0aWxzXCI7XG5pbXBvcnQgQ29uZGl0aW9uYWxXcmFwcGVyIGZyb20gXCJAY29yZS91dGlscy9Db25kaXRpb25hbFdyYXBwZXJcIjtcbmltcG9ydCB7IGNzcywgR2xvYmFsIH0gZnJvbSBcIkBlbW90aW9uL3JlYWN0XCI7XG5pbXBvcnQgeyBTdHlsZWRGb2N1c1dyYXBwZXIsIFN0eWxlZEZhbHNlRm9jdXMgfSBmcm9tIFwiLi9Gb2N1cy5zdHlsZXNcIjtcbmltcG9ydCB7IGdldEZvY3VzYWJsZUNoaWxkcmVuLCBpc0tleSwgaXNPbmVPZktleXMsIHNldEZvY3VzVG8gfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IGZvY3VzQ2xhc3NlcywgeyBIdkZvY3VzQ2xhc3NlcyB9IGZyb20gXCIuL2ZvY3VzQ2xhc3Nlc1wiO1xuXG5jb25zdCBmb2N1c1N0eWxlcyA9IGNzc2BcbiAgLkh2Rm9jdXMtZm9jdXNlZCB7XG4gICAgb3V0bGluZS1jb2xvcjogIzUyYThlYztcbiAgICBvdXRsaW5lLXN0eWxlOiBzb2xpZDtcbiAgICBvdXRsaW5lLXdpZHRoOiAwcHg7XG4gICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICM1MmE4ZWMsIDAgMCAwIDRweCByZ2JhKDI5LCAxNTUsIDIwOSwgMC4zKTtcblxuICAgIEBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAwKSB7XG4gICAgICBvdXRsaW5lLWNvbG9yOiAjNTJhOGVjO1xuICAgICAgb3V0bGluZS1zdHlsZTogc29saWQ7XG4gICAgICBvdXRsaW5lLXdpZHRoOiAwcHg7XG4gICAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjNTJhOGVjLCAwIDAgMCA0cHggcmdiYSgyOSwgMTU1LCAyMDksIDAuMyk7XG4gICAgfVxuICB9XG5cbiAgLkh2Rm9jdXMtZm9jdXNEaXNhYmxlZCB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG4gIC5IdkZvY3VzLWZvY3VzRGlzYWJsZWQgKjpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG4gIC5IdkZvY3VzLWZvY3VzRGlzYWJsZWQgKiB7XG4gICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuYDtcblxuZXhwb3J0IHR5cGUgSHZGb2N1c1N0cmF0ZWdpZXMgPSBcImxpc3Rib3hcIiB8IFwibWVudVwiIHwgXCJjYXJkXCIgfCBcImdyaWRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBIdkZvY3VzUHJvcHMgZXh0ZW5kcyBIdkJhc2VQcm9wczxIVE1MRWxlbWVudCwgXCJjaGlsZHJlblwiPiB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIC8qKiBFeHRyYSBjb25maWd1cmF0aW9uIGZvciB0aGUgY2hpbGQgZWxlbWVudC4gKi9cbiAgY29uZmlndXJhdGlvbj86IHtcbiAgICB0YWJJbmRleD86IG51bWJlcjtcbiAgfTtcbiAgLyoqIEluZGljYXRlcyB0aGF0IHRoZSBkaXNhYmxlZCBjbGFzcyBzaG91bGQgYmUgYXBwbGllZC4gKi9cbiAgZGlzYWJsZWRDbGFzcz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBmb2N1cyBpcyBzZWxlY3RlZC4gKi9cbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgZm9jdXMgaXMgZGlzYWJsZWQuICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHJvb3QgZWxlbWVudCB0byBob2xkIGFsbCBGb2N1cycgY29udGV4dC4gKi9cbiAgcm9vdFJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gIC8qKiBTaG93IGZvY3VzIHdoZW4gY2xpY2sgZWxlbWVudC4gdiAqL1xuICBmb2N1c09uQ2xpY2s/OiBib29sZWFuO1xuICAvKiogU2hvdyBmb2N1cyB3aGVuIGNsaWNrIGVsZW1lbnQuIHYgKi9cbiAgZm9jdXNEaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBGb2N1cyBhbmQgbmF2aWdhdGlvbiBzdHJhdGVneSB0byBiZSB1c2VkLiB2ICovXG4gIHN0cmF0ZWd5PzogSHZGb2N1c1N0cmF0ZWdpZXM7XG4gIC8qKiBVc2VzIGFuIGFic29sdXRlIHBvc2l0aW9uZWQgZGl2IGFzIGEgZm9jdXMuIHYgKi9cbiAgdXNlRmFsc2VGb2N1cz86IGJvb2xlYW47XG4gIC8qKiBOYXJyb3dzIHRoZSByZXN1bHRzIG9mIHRoZSBmb2N1cyB0byBvbmx5IHRoZXNlcyBjbGFzcyB2ICovXG4gIGZpbHRlckNsYXNzPzogc3RyaW5nO1xuICAvKiogSG93IG11Y2ggdGhlIG5hdmlnYXRpb24gd2lsbCBza2lwIHdoZW4gdXNpbmcgdGhlIGFycm93cy4gdiAqL1xuICBuYXZpZ2F0aW9uSnVtcD86IG51bWJlcjtcbiAgLyoqIEEgSnNzIE9iamVjdCB1c2VkIHRvIG92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC4gKi9cbiAgY2xhc3Nlcz86IEh2Rm9jdXNDbGFzc2VzO1xufVxuXG5leHBvcnQgY29uc3QgSHZGb2N1cyA9ICh7XG4gIGNsYXNzZXMsXG4gIGNoaWxkcmVuLFxuICBjb25maWd1cmF0aW9uID0ge30sXG4gIGRpc2FibGVkQ2xhc3MgPSBmYWxzZSxcbiAgc2VsZWN0ZWQgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgcm9vdFJlZiA9IHVuZGVmaW5lZCxcbiAgZm9jdXNPbkNsaWNrID0gZmFsc2UsXG4gIGZvY3VzRGlzYWJsZWQgPSB0cnVlLFxuICBzdHJhdGVneSA9IFwibGlzdGJveFwiLFxuICB1c2VGYWxzZUZvY3VzID0gZmFsc2UsXG4gIGZpbHRlckNsYXNzLFxuICBuYXZpZ2F0aW9uSnVtcCA9IDQsXG59OiBIdkZvY3VzUHJvcHMpID0+IHtcbiAgY29uc3QgW3Nob3dGb2N1cywgc2V0U2hvd0ZvY3VzXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW2NoaWxkRm9jdXMsIHNldENoaWxkRm9jdXNdID0gdXNlU3RhdGU8YW55PigpO1xuICBjb25zdCBbaGFzUnVuQ29uZmlnLCBzZXRIYXNSdW5Db25maWddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGdldEZvY3VzZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgZm9jdXNlcyA9IHJvb3RSZWY/LmN1cnJlbnRcbiAgICAgID8gQXJyYXkuZnJvbShcbiAgICAgICAgICByb290UmVmLmN1cnJlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgICAgIGZpbHRlckNsYXNzIHx8IGZvY3VzQ2xhc3Nlcy5yb290IHx8IGNsYXNzZXM/LnJvb3QgfHwgXCJyb290XCJcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogW107XG4gICAgcmV0dXJuIGZvY3VzZXM7XG4gIH07XG5cbiAgY29uc3Qgc2V0VGFiSW5kZXggPSAoZWwsIHRhYkluZGV4ID0gMCkgPT4ge1xuICAgIGNvbnN0IGVsQ2hpbGRGb2N1cyA9IGdldEZvY3VzYWJsZUNoaWxkcmVuKGVsKVswXTtcbiAgICBpZiAoZWxDaGlsZEZvY3VzKSB7XG4gICAgICBlbC50YWJJbmRleCA9IC0xO1xuICAgICAgZWxDaGlsZEZvY3VzLnRhYkluZGV4ID0gdGFiSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnRhYkluZGV4ID0gdGFiSW5kZXg7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNldFNlbGVjdGVkVGFiSW5kZXggPSAoKSA9PiB7XG4gICAgY29uc3QgZm9jdXNlcyA9IGdldEZvY3VzZXMoKTtcbiAgICBjb25zdCBmaXJzdFNlbGVjdGVkID0gZm9jdXNlcy5maW5kKChmb2N1cykgPT5cbiAgICAgIGZvY3VzLmNsYXNzTGlzdC5jb250YWlucyhcbiAgICAgICAgZm9jdXNDbGFzc2VzLnNlbGVjdGVkIHx8IGNsYXNzZXM/LnNlbGVjdGVkIHx8IFwic2VsZWN0ZWRcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICBpZiAoIWZpcnN0U2VsZWN0ZWQpIHJldHVybjtcbiAgICBmb2N1c2VzLmZvckVhY2goKGZvY3VzKSA9PiBzZXRUYWJJbmRleChmb2N1cywgLTEpKTtcbiAgICBzZXRUYWJJbmRleChmaXJzdFNlbGVjdGVkLCAwKTtcbiAgfTtcblxuICBjb25zdCBjbGVhclRhYlNpYmxpbmdzID0gKGVsKSA9PiB7XG4gICAgZ2V0Rm9jdXNlcygpLmZvckVhY2goKGZvY3VzKSA9PiBzZXRUYWJJbmRleChmb2N1cywgLTEpKTtcbiAgICBzZXRUYWJJbmRleChlbCwgMCk7XG4gIH07XG5cbiAgY29uc3Qgb25Gb2N1c1N0cmF0ZWd5ID0gKGV2dCkgPT4ge1xuICAgIGlmIChzdHJhdGVneSA9PT0gXCJsaXN0Ym94XCIpIHtcbiAgICAgIGNsZWFyVGFiU2libGluZ3MoZXZ0LmN1cnJlbnRUYXJnZXQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvbkJsdXJTdHJhdGVneSA9ICgpID0+IHtcbiAgICBpZiAoXG4gICAgICBzdHJhdGVneSA9PT0gXCJsaXN0Ym94XCIgJiZcbiAgICAgIHJvb3RSZWYgJiZcbiAgICAgIHJvb3RSZWYuY3VycmVudCAmJlxuICAgICAgIXJvb3RSZWYuY3VycmVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KVxuICAgICkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldFNlbGVjdGVkVGFiSW5kZXgoKTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY29uZmlnID0gKGVsKSA9PiB7XG4gICAgY29uc3QgeyB0YWJJbmRleCB9ID0gY29uZmlndXJhdGlvbjtcbiAgICBpZiAoIWVsIHx8IGhhc1J1bkNvbmZpZykgcmV0dXJuO1xuICAgIGlmIChzdHJhdGVneSA9PT0gXCJjYXJkXCIpIHtcbiAgICAgIHNldENoaWxkRm9jdXMoY2hpbGRyZW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdHJhdGVneSA9PT0gXCJncmlkXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb2N1c2FibGVDaGlsZHJlbiA9IGdldEZvY3VzYWJsZUNoaWxkcmVuKGVsKTtcbiAgICBpZiAoZm9jdXNhYmxlQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBmb2N1c2FibGVDaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gc2V0VGFiSW5kZXgoY2hpbGQsIC0xKSk7XG4gICAgICBzZXRDaGlsZEZvY3VzKGZvY3VzYWJsZUNoaWxkcmVuWzBdKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTmlsKHRhYkluZGV4KSkgc2V0VGFiSW5kZXgoZWwsIHRhYkluZGV4KTtcbiAgICBzZXRIYXNSdW5Db25maWcodHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgYWRkRm9jdXNDbGFzcyA9IChldnQpID0+IHtcbiAgICBpZiAoIXVzZUZhbHNlRm9jdXMpIHtcbiAgICAgIGV2dC5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5hZGQoZm9jdXNDbGFzc2VzLmZvY3VzZWQpO1xuICAgICAgaWYgKGNsYXNzZXM/LmZvY3VzZWQpIHtcbiAgICAgICAgZXZ0LmN1cnJlbnRUYXJnZXQuY2xhc3NMaXN0LmFkZChjbGFzc2VzLmZvY3VzZWQpO1xuICAgICAgfVxuICAgICAgLy8gYWRkIGdsb2JhbCBjbGFzcyBIdklzRm9jdXNlZCBhcyBhIG1hcmtlclxuICAgICAgLy8gbm90IHRvIGJlIHN0eWxlZCBkaXJlY3RseSwgb25seSBhcyBoZWxwZXIgaW4gc3BlY2lmaWMgY3NzIHF1ZXJpZXNcbiAgICAgIGV2dC5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5hZGQoXCJIdklzRm9jdXNlZFwiKTtcbiAgICAgIGNsYXNzZXM/LmZvY3VzXG4gICAgICAgID8uc3BsaXQoXCIgXCIpXG4gICAgICAgIC5mb3JFYWNoKChjKSA9PiBldnQuY3VycmVudFRhcmdldC5jbGFzc0xpc3QuYWRkKGMpKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlRm9jdXNDbGFzcyA9ICgpID0+IHtcbiAgICBpZiAoIXVzZUZhbHNlRm9jdXMpIHtcbiAgICAgIGdldEZvY3VzZXMoKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChmb2N1c0NsYXNzZXMuZm9jdXNlZCkge1xuICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShmb2N1c0NsYXNzZXMuZm9jdXNlZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsYXNzZXM/LmZvY3VzZWQpIHtcbiAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3Nlcy5mb2N1c2VkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgdGhlIGdsb2JhbCBjbGFzcyBIdklzRm9jdXNlZFxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJIdklzRm9jdXNlZFwiKTtcbiAgICAgICAgY2xhc3Nlcz8uZm9jdXM/LnNwbGl0KFwiIFwiKS5mb3JFYWNoKChjKSA9PiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoYykpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uRm9jdXMgPSAoZXZ0KSA9PiB7XG4gICAgYWRkRm9jdXNDbGFzcyhldnQpO1xuICAgIHNldFNob3dGb2N1cyh0cnVlKTtcbiAgICAvLyBnaXZlIGZvY3VzIHRvIGNoaWxkIGVsZW1lbnQgaWYgYW55IGZvY3VzYWJsZVxuXG4gICAgaWYgKGNoaWxkRm9jdXMgJiYgY2hpbGRGb2N1cy5mb2N1cykgY2hpbGRGb2N1cy5mb2N1cygpO1xuICAgIG9uRm9jdXNTdHJhdGVneShldnQpO1xuICB9O1xuXG4gIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICBzZXRTaG93Rm9jdXMoZmFsc2UpO1xuICAgIHJlbW92ZUZvY3VzQ2xhc3MoKTtcbiAgICBvbkJsdXJTdHJhdGVneSgpO1xuICB9O1xuXG4gIGNvbnN0IG9uTW91c2VEb3duID0gKGV2dCkgPT4ge1xuICAgIGNvbnN0IGhhc0NhcmQgPSAhIWV2dC5jdXJyZW50VGFyZ2V0Py5xdWVyeVNlbGVjdG9yKFwiLkh2SXNDYXJkR3JpZEVsZW1lbnRcIik7XG4gICAgaWYgKHN0cmF0ZWd5ID09PSBcImdyaWRcIiAmJiBoYXNDYXJkKSByZXR1cm47XG5cbiAgICBzZXRGb2N1c1RvKGV2dC5jdXJyZW50VGFyZ2V0KTtcbiAgICBzZXRUYWJJbmRleChldnQuY3VycmVudFRhcmdldCwgMCk7XG4gICAgLy8gcmVtb3ZlIGZvY3VzIG91dGxpbmUgdW5sZXNzIGV4cGxpY2l0bHkgZW5hYmxlZFxuICAgIGlmICghZm9jdXNPbkNsaWNrKSB7XG4gICAgICAvLyBUT0RPIHRoaXMgcGllY2Ugb2YgY29kZSB3b3JrcyBvbmx5IGJlY2F1c2Ugb25Nb3VzZURvd24gaXMgaGFwcGVuaW5nIGFmdGVyIHRoZSBmb2N1cyBldmVudFxuICAgICAgLy8gVGhlcmUgaXMgbm90aGluZyBpbiBoZXJlIHRoYXQgZ3VhcmFudGVlcyB0aGUgb3JkZXIgb2YgdGhlc2UgZXZlbnRzLCBzbyBpdCBtYXkgcHJlc2VudCBhIHByb2JsZW0gaW4gdGhlIGZ1dHVyZVxuICAgICAgcmVtb3ZlRm9jdXNDbGFzcygpO1xuICAgICAgc2V0U2hvd0ZvY3VzKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZm9jdXNBbmRVcGRhdGVJbmRleCA9IChuZXh0Rm9jdXMsIHByZXZpb3VzRm9jdXMsIGZvY3VzZXNMaXN0KSA9PiB7XG4gICAgaWYgKGZvY3VzZXNMaXN0Py5pbmNsdWRlcyhwcmV2aW91c0ZvY3VzKSkge1xuICAgICAgc2V0VGFiSW5kZXgocHJldmlvdXNGb2N1cywgLTEpO1xuICAgIH1cbiAgICBzZXRUYWJJbmRleChuZXh0Rm9jdXMsIDApO1xuICAgIHNldEZvY3VzVG8obmV4dEZvY3VzKTtcbiAgfTtcblxuICBjb25zdCBnZXRFbmFibGVkS2V5cyA9IChjdXJyZW50Rm9jdXNJbmRleCwganVtcCwgbGlzdFNpemUpID0+ICh7XG4gICAgcmlnaHQ6XG4gICAgICAoY3VycmVudEZvY3VzSW5kZXggKyAxKSAlIGp1bXAgPT09IDAgfHxcbiAgICAgIGN1cnJlbnRGb2N1c0luZGV4ICsgMSA+IGxpc3RTaXplIC0gMSxcbiAgICBsZWZ0OiBjdXJyZW50Rm9jdXNJbmRleCAlIGp1bXAgPT09IDAsXG4gICAgdXA6IGN1cnJlbnRGb2N1c0luZGV4IC0ganVtcCA8IDAsXG4gICAgZG93bjpcbiAgICAgIGN1cnJlbnRGb2N1c0luZGV4ICsganVtcCA+IGxpc3RTaXplIHx8XG4gICAgICBjdXJyZW50Rm9jdXNJbmRleCArIGp1bXAgPiBsaXN0U2l6ZSAtIDEsXG4gIH0pO1xuXG4gIGNvbnN0IG9uR3JpZEtleURvd25IYW5kbGVyID0gKFxuICAgIGV2dCxcbiAgICBmb2N1c2VzLFxuICAgIGZvY3VzZXNMaXN0LFxuICAgIGN1cnJlbnRGb2N1c0luZGV4LFxuICAgIGp1bXBcbiAgKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgQXJyb3dVcCxcbiAgICAgIEFycm93RG93bixcbiAgICAgIEhvbWUsXG4gICAgICBFbmQsXG4gICAgICBBcnJvd0xlZnQsXG4gICAgICBBcnJvd1JpZ2h0LFxuICAgICAgRW50ZXIsXG4gICAgICBTcGFjZUJhcixcbiAgICB9ID0ga2V5Ym9hcmRDb2RlcztcblxuICAgIGNvbnN0IGNoaWxkRm9jdXNJc0lucHV0ID0gY2hpbGRGb2N1cyAmJiBjaGlsZEZvY3VzLm5vZGVOYW1lID09PSBcIklOUFVUXCI7XG5cbiAgICBpZiAoXG4gICAgICAhaXNPbmVPZktleXMoZXZ0LCBbXG4gICAgICAgIEFycm93VXAsXG4gICAgICAgIEFycm93RG93bixcbiAgICAgICAgQXJyb3dMZWZ0LFxuICAgICAgICBBcnJvd1JpZ2h0LFxuICAgICAgICBIb21lLFxuICAgICAgICBFbmQsXG4gICAgICAgIFNwYWNlQmFyLFxuICAgICAgICBFbnRlcixcbiAgICAgIF0pIHx8XG4gICAgICAoY2hpbGRGb2N1c0lzSW5wdXQgJiYgaXNLZXkoZXZ0LCBFbnRlcikpXG4gICAgKSB7XG4gICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gd2UnbGwgZG8gc29tZXRoaW5nIHdpdGggdGhlIGtleSBzbyBwcmV2ZW50IGRlZmF1bHQgYW5kIHN0b3AgcHJvcGFnYXRpb25cbiAgICAvLyBleGNlcHQgZm9yIEVudGVyIGFuZCBTcGFjZUJhclxuICAgIGlmICghaXNPbmVPZktleXMoZXZ0LCBbRW50ZXIsIFNwYWNlQmFyXSkpIHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGNvbnN0IGJsb2NrZWRLZXlzID0gZ2V0RW5hYmxlZEtleXMoXG4gICAgICBjdXJyZW50Rm9jdXNJbmRleCxcbiAgICAgIGp1bXAsXG4gICAgICBmb2N1c2VzTGlzdC5sZW5ndGhcbiAgICApO1xuXG4gICAgc3dpdGNoIChldnQua2V5Q29kZSkge1xuICAgICAgY2FzZSBTcGFjZUJhcjpcbiAgICAgIGNhc2UgRW50ZXI6XG4gICAgICAgIGlmIChpc0Jyb3dzZXIoXCJmaXJlZm94XCIpKSB7XG4gICAgICAgICAgZXZ0LnRhcmdldC5jbGljaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2dC5jdXJyZW50VGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEFycm93VXA6XG4gICAgICAgIGlmICghYmxvY2tlZEtleXMudXApIHtcbiAgICAgICAgICBmb2N1c0FuZFVwZGF0ZUluZGV4KFxuICAgICAgICAgICAgZm9jdXNlcy5qdW1wIHx8IGZvY3VzZXMubGFzdCxcbiAgICAgICAgICAgIGV2dC5jdXJyZW50LFxuICAgICAgICAgICAgZm9jdXNlc0xpc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBcnJvd0Rvd246XG4gICAgICAgIGlmICghYmxvY2tlZEtleXMuZG93bikge1xuICAgICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoXG4gICAgICAgICAgICBmb2N1c2VzLmZhbGwgfHwgZm9jdXNlcy5maXJzdCxcbiAgICAgICAgICAgIGV2dC5jdXJyZW50LFxuICAgICAgICAgICAgZm9jdXNlc0xpc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBcnJvd0xlZnQ6XG4gICAgICAgIGlmICghYmxvY2tlZEtleXMubGVmdCkge1xuICAgICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoXG4gICAgICAgICAgICBmb2N1c2VzLnByZXZpb3VzIHx8IGZvY3VzZXMubGFzdCxcbiAgICAgICAgICAgIGV2dC5jdXJyZW50LFxuICAgICAgICAgICAgZm9jdXNlc0xpc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBBcnJvd1JpZ2h0OlxuICAgICAgICBpZiAoIWJsb2NrZWRLZXlzLnJpZ2h0KSB7XG4gICAgICAgICAgZm9jdXNBbmRVcGRhdGVJbmRleChcbiAgICAgICAgICAgIGZvY3VzZXMubmV4dCB8fCBmb2N1c2VzLmZpcnN0LFxuICAgICAgICAgICAgZXZ0LmN1cnJlbnQsXG4gICAgICAgICAgICBmb2N1c2VzTGlzdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEhvbWU6XG4gICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoZm9jdXNlcy5maXJzdCwgZXZ0LmN1cnJlbnQsIGZvY3VzZXNMaXN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVuZDpcbiAgICAgICAgZm9jdXNBbmRVcGRhdGVJbmRleChmb2N1c2VzLmxhc3QsIGV2dC5jdXJyZW50LCBmb2N1c2VzTGlzdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25WZXJ0aWNhbEFycmFuZ2VtZW50SGFuZGxlciA9IChldnQsIGZvY3VzZXMsIGZvY3VzZXNMaXN0KSA9PiB7XG4gICAgY29uc3QgeyBBcnJvd1VwLCBBcnJvd0Rvd24sIEhvbWUsIEVuZCwgRW50ZXIsIFNwYWNlQmFyIH0gPSBrZXlib2FyZENvZGVzO1xuICAgIGNvbnN0IGNoaWxkRm9jdXNJc0lucHV0ID0gY2hpbGRGb2N1cyAmJiBjaGlsZEZvY3VzLm5vZGVOYW1lID09PSBcIklOUFVUXCI7XG5cbiAgICBpZiAoXG4gICAgICAhaXNPbmVPZktleXMoZXZ0LCBbQXJyb3dVcCwgQXJyb3dEb3duLCBIb21lLCBFbmQsIFNwYWNlQmFyLCBFbnRlcl0pIHx8XG4gICAgICAoY2hpbGRGb2N1c0lzSW5wdXQgJiYgaXNLZXkoZXZ0LCBFbnRlcikpXG4gICAgKSB7XG4gICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gd2UnbGwgZG8gc29tZXRoaW5nIHdpdGggdGhlIGtleSBzbyBwcmV2ZW50IGRlZmF1bHQgYW5kIHN0b3AgcHJvcGFnYXRpb25cbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBzd2l0Y2ggKGV2dC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIFNwYWNlQmFyOlxuICAgICAgY2FzZSBFbnRlcjpcbiAgICAgICAgZXZ0LnRhcmdldC5jbGljaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQXJyb3dVcDpcbiAgICAgICAgZm9jdXNBbmRVcGRhdGVJbmRleChcbiAgICAgICAgICBmb2N1c2VzLnByZXZpb3VzIHx8IGZvY3VzZXMubGFzdCxcbiAgICAgICAgICBldnQuY3VycmVudCxcbiAgICAgICAgICBmb2N1c2VzTGlzdFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQXJyb3dEb3duOlxuICAgICAgICBmb2N1c0FuZFVwZGF0ZUluZGV4KFxuICAgICAgICAgIGZvY3VzZXMubmV4dCB8fCBmb2N1c2VzLmZpcnN0LFxuICAgICAgICAgIGV2dC5jdXJyZW50LFxuICAgICAgICAgIGZvY3VzZXNMaXN0XG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBIb21lOlxuICAgICAgICBmb2N1c0FuZFVwZGF0ZUluZGV4KGZvY3VzZXMuZmlyc3QsIGV2dC5jdXJyZW50LCBmb2N1c2VzTGlzdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFbmQ6XG4gICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoZm9jdXNlcy5sYXN0LCBldnQuY3VycmVudCwgZm9jdXNlc0xpc3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uU2luZ2xlSGFuZGxlciA9IChldnQpID0+IHtcbiAgICBjb25zdCB7IEVudGVyLCBTcGFjZUJhciB9ID0ga2V5Ym9hcmRDb2RlcztcbiAgICBjb25zdCBjaGlsZEZvY3VzSXNJbnB1dCA9IGNoaWxkRm9jdXMgJiYgY2hpbGRGb2N1cy5ub2RlTmFtZSA9PT0gXCJJTlBVVFwiO1xuXG4gICAgaWYgKFxuICAgICAgIWlzT25lT2ZLZXlzKGV2dCwgW1NwYWNlQmFyLCBFbnRlcl0pIHx8XG4gICAgICAoY2hpbGRGb2N1c0lzSW5wdXQgJiYgaXNLZXkoZXZ0LCBFbnRlcikpXG4gICAgKSB7XG4gICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gd2UnbGwgZG8gc29tZXRoaW5nIHdpdGggdGhlIGtleSBzbyBwcmV2ZW50IGRlZmF1bHQgYW5kIHN0b3AgcHJvcGFnYXRpb25cbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBldnQuY3VycmVudFRhcmdldC5jbGljaygpO1xuICB9O1xuXG4gIGNvbnN0IG9uS2V5RG93biA9IChldnQpID0+IHtcbiAgICBpZiAocm9vdFJlZj8uY3VycmVudCA9PSBudWxsKSB7XG4gICAgICAvLyBvcGVyYXRpbmcgb3V0c2lkZSBvZiBhIGNvbXBvc2l0ZSB3aWRnZXRcbiAgICAgIC8vIG5vdGhpbmcgdG8gbWFuYWdlLCBqdXN0IHN0eWxlIGFuZCB0cmlnZ2VyIGNsaWNrc1xuICAgICAgb25TaW5nbGVIYW5kbGVyKGV2dCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVE9ETyBrZWVwIHRoZSBzbWFydCBkZWZhdWx0LCBidXQgYWxsb3cgdG8gZXhwbGljaXRseSBvdmVycmlkZSBpZiBkaXNhYmxlZCBlbGVtZW50cyBzaG91bGQgYmUgZm9jdXNhYmxlXG4gICAgY29uc3QgaXNEaXNhYmxlZEZvY3VzYWJsZSA9IHN0cmF0ZWd5ID09PSBcIm1lbnVcIjtcbiAgICBjb25zdCBmb2N1c2VzTGlzdCA9IGdldEZvY3VzZXMoKS5maWx0ZXIoXG4gICAgICAoZWwpID0+XG4gICAgICAgIGlzRGlzYWJsZWRGb2N1c2FibGUgfHxcbiAgICAgICAgIWVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc2VzPy5kaXNhYmxlZCBhcyBzdHJpbmcpXG4gICAgKTtcblxuICAgIGNvbnN0IGN1cnJlbnRGb2N1cyA9IGZvY3VzZXNMaXN0LmluZGV4T2YoZXZ0LmN1cnJlbnRUYXJnZXQpO1xuXG4gICAgY29uc3QgZm9jdXNlcyA9IHtcbiAgICAgIGZpcnN0OiBmb2N1c2VzTGlzdFswXSxcbiAgICAgIGxhc3Q6IGZvY3VzZXNMaXN0W2ZvY3VzZXNMaXN0Lmxlbmd0aCAtIDFdLFxuICAgICAgcHJldmlvdXM6IGZvY3VzZXNMaXN0W2N1cnJlbnRGb2N1cyAtIDFdLFxuICAgICAgbmV4dDogZm9jdXNlc0xpc3RbY3VycmVudEZvY3VzICsgMV0sXG4gICAgICBmYWxsOiBmb2N1c2VzTGlzdFtjdXJyZW50Rm9jdXMgKyBuYXZpZ2F0aW9uSnVtcF0sXG4gICAgICBqdW1wOiBmb2N1c2VzTGlzdFtjdXJyZW50Rm9jdXMgLSBuYXZpZ2F0aW9uSnVtcF0sXG4gICAgfTtcblxuICAgIGlmIChzdHJhdGVneSA9PT0gXCJncmlkXCIpIHtcbiAgICAgIG9uR3JpZEtleURvd25IYW5kbGVyKFxuICAgICAgICBldnQsXG4gICAgICAgIGZvY3VzZXMsXG4gICAgICAgIGZvY3VzZXNMaXN0LFxuICAgICAgICBjdXJyZW50Rm9jdXMsXG4gICAgICAgIG5hdmlnYXRpb25KdW1wXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRPRE8gYWRkIHByb3BlcnR5IGZvciBzcGVjaWZ5aW5nIHRoZSBjb21wb3NpdGUgd2lkZ2V0IG9yaWVudGF0aW9uXG4gICAgLy8gVE9ETyBpbXBsZW1lbnQgaGFuZGxlciBmb3IgaG9yaXpvbnRhbCBvcmllbnRhdGlvblxuICAgIG9uVmVydGljYWxBcnJhbmdlbWVudEhhbmRsZXIoZXZ0LCBmb2N1c2VzLCBmb2N1c2VzTGlzdCk7XG4gIH07XG5cbiAgY29uc3Qgb25LZXlVcCA9IChldnQpID0+IHtcbiAgICBpZiAoaXNCcm93c2VyKFwiZmlyZWZveFwiKSkgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG5cbiAgaWYgKGRpc2FibGVkKSByZXR1cm4gY2hpbGRyZW47XG5cbiAgY29uc3QgZm9jdXNXcmFwcGVyID0gKGNoaWxkcmVuVG9XcmFwKSA9PiAoXG4gICAgPFN0eWxlZEZvY3VzV3JhcHBlclxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICBjbGFzc2VzPy5leHRlcm5hbFJlZmVyZW5jZSxcbiAgICAgICAgZm9jdXNDbGFzc2VzLmV4dGVybmFsUmVmZXJlbmNlXG4gICAgICApfVxuICAgID5cbiAgICAgIHtjaGlsZHJlblRvV3JhcH1cbiAgICAgIHtzaG93Rm9jdXMgJiYgKFxuICAgICAgICA8U3R5bGVkRmFsc2VGb2N1c1xuICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChjbGFzc2VzPy5mYWxzZUZvY3VzLCBmb2N1c0NsYXNzZXMuZmFsc2VGb2N1cyl9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvU3R5bGVkRm9jdXNXcmFwcGVyPlxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPENvbmRpdGlvbmFsV3JhcHBlciBjb25kaXRpb249e3VzZUZhbHNlRm9jdXN9IHdyYXBwZXI9e2ZvY3VzV3JhcHBlcn0+XG4gICAgICA8R2xvYmFsIHN0eWxlcz17Zm9jdXNTdHlsZXN9IC8+XG4gICAgICB7UmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xzeChcbiAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5jbGFzc05hbWUsXG4gICAgICAgICAgZm9jdXNDbGFzc2VzLnJvb3QsXG4gICAgICAgICAgY2xhc3Nlcz8ucm9vdCxcbiAgICAgICAgICBmaWx0ZXJDbGFzcyxcbiAgICAgICAgICBzZWxlY3RlZCAmJiBjbHN4KGZvY3VzQ2xhc3Nlcy5zZWxlY3RlZCwgY2xhc3Nlcz8uc2VsZWN0ZWQpLFxuICAgICAgICAgIGRpc2FibGVkQ2xhc3MgJiYgY2xzeChmb2N1c0NsYXNzZXMuZGlzYWJsZWQsIGNsYXNzZXM/LmRpc2FibGVkKSxcbiAgICAgICAgICBmb2N1c0Rpc2FibGVkICYmXG4gICAgICAgICAgICBjbHN4KGZvY3VzQ2xhc3Nlcy5mb2N1c0Rpc2FibGVkLCBjbGFzc2VzPy5mb2N1c0Rpc2FibGVkKVxuICAgICAgICApLFxuICAgICAgICByZWY6IGNvbmZpZyxcbiAgICAgICAgb25Gb2N1cyxcbiAgICAgICAgb25CbHVyLFxuICAgICAgICBvbk1vdXNlRG93bixcbiAgICAgICAgb25LZXlEb3duLFxuICAgICAgICBvbktleVVwLFxuICAgICAgICBzZWxlY3RlZCxcbiAgICAgIH0pfVxuICAgIDwvQ29uZGl0aW9uYWxXcmFwcGVyPlxuICApO1xufTtcbiJdfQ== */",
|
|
26
|
+
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2h2LXVpa2l0LXJlYWN0L2h2LXVpa2l0LXJlYWN0L3BhY2thZ2VzL2NvcmUvc3JjL2NvbXBvbmVudHMvRm9jdXMvRm9jdXMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVd1QiIsImZpbGUiOiIvaG9tZS9ydW5uZXIvd29yay9odi11aWtpdC1yZWFjdC9odi11aWtpdC1yZWFjdC9wYWNrYWdlcy9jb3JlL3NyYy9jb21wb25lbnRzL0ZvY3VzL0ZvY3VzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsc3ggfSBmcm9tIFwiY2xzeFwiO1xuaW1wb3J0IGlzTmlsIGZyb20gXCJsb2Rhc2gvaXNOaWxcIjtcbmltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBIdkJhc2VQcm9wcyB9IGZyb20gXCJAY29yZS90eXBlc1wiO1xuaW1wb3J0IHsgaXNCcm93c2VyLCBpc0tleSwgaXNPbmVPZktleXMgfSBmcm9tIFwiQGNvcmUvdXRpbHNcIjtcbmltcG9ydCBDb25kaXRpb25hbFdyYXBwZXIgZnJvbSBcIkBjb3JlL3V0aWxzL0NvbmRpdGlvbmFsV3JhcHBlclwiO1xuaW1wb3J0IHsgY3NzLCBHbG9iYWwgfSBmcm9tIFwiQGVtb3Rpb24vcmVhY3RcIjtcbmltcG9ydCB7IFN0eWxlZEZvY3VzV3JhcHBlciwgU3R5bGVkRmFsc2VGb2N1cyB9IGZyb20gXCIuL0ZvY3VzLnN0eWxlc1wiO1xuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlQ2hpbGRyZW4sIHNldEZvY3VzVG8gfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IGZvY3VzQ2xhc3NlcywgeyBIdkZvY3VzQ2xhc3NlcyB9IGZyb20gXCIuL2ZvY3VzQ2xhc3Nlc1wiO1xuXG5jb25zdCBmb2N1c1N0eWxlcyA9IGNzc2BcbiAgLkh2Rm9jdXMtZm9jdXNlZCB7XG4gICAgb3V0bGluZS1jb2xvcjogIzUyYThlYztcbiAgICBvdXRsaW5lLXN0eWxlOiBzb2xpZDtcbiAgICBvdXRsaW5lLXdpZHRoOiAwcHg7XG4gICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICM1MmE4ZWMsIDAgMCAwIDRweCByZ2JhKDI5LCAxNTUsIDIwOSwgMC4zKTtcblxuICAgIEBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAwKSB7XG4gICAgICBvdXRsaW5lLWNvbG9yOiAjNTJhOGVjO1xuICAgICAgb3V0bGluZS1zdHlsZTogc29saWQ7XG4gICAgICBvdXRsaW5lLXdpZHRoOiAwcHg7XG4gICAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjNTJhOGVjLCAwIDAgMCA0cHggcmdiYSgyOSwgMTU1LCAyMDksIDAuMyk7XG4gICAgfVxuICB9XG5cbiAgLkh2Rm9jdXMtZm9jdXNEaXNhYmxlZCB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG4gIC5IdkZvY3VzLWZvY3VzRGlzYWJsZWQgKjpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICB9XG4gIC5IdkZvY3VzLWZvY3VzRGlzYWJsZWQgKiB7XG4gICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxuYDtcblxuZXhwb3J0IHR5cGUgSHZGb2N1c1N0cmF0ZWdpZXMgPSBcImxpc3Rib3hcIiB8IFwibWVudVwiIHwgXCJjYXJkXCIgfCBcImdyaWRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBIdkZvY3VzUHJvcHMgZXh0ZW5kcyBIdkJhc2VQcm9wczxIVE1MRWxlbWVudCwgXCJjaGlsZHJlblwiPiB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIC8qKiBFeHRyYSBjb25maWd1cmF0aW9uIGZvciB0aGUgY2hpbGQgZWxlbWVudC4gKi9cbiAgY29uZmlndXJhdGlvbj86IHtcbiAgICB0YWJJbmRleD86IG51bWJlcjtcbiAgfTtcbiAgLyoqIEluZGljYXRlcyB0aGF0IHRoZSBkaXNhYmxlZCBjbGFzcyBzaG91bGQgYmUgYXBwbGllZC4gKi9cbiAgZGlzYWJsZWRDbGFzcz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBmb2N1cyBpcyBzZWxlY3RlZC4gKi9cbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgZm9jdXMgaXMgZGlzYWJsZWQuICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHJvb3QgZWxlbWVudCB0byBob2xkIGFsbCBGb2N1cycgY29udGV4dC4gKi9cbiAgcm9vdFJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gIC8qKiBTaG93IGZvY3VzIHdoZW4gY2xpY2sgZWxlbWVudC4gdiAqL1xuICBmb2N1c09uQ2xpY2s/OiBib29sZWFuO1xuICAvKiogU2hvdyBmb2N1cyB3aGVuIGNsaWNrIGVsZW1lbnQuIHYgKi9cbiAgZm9jdXNEaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBGb2N1cyBhbmQgbmF2aWdhdGlvbiBzdHJhdGVneSB0byBiZSB1c2VkLiB2ICovXG4gIHN0cmF0ZWd5PzogSHZGb2N1c1N0cmF0ZWdpZXM7XG4gIC8qKiBVc2VzIGFuIGFic29sdXRlIHBvc2l0aW9uZWQgZGl2IGFzIGEgZm9jdXMuIHYgKi9cbiAgdXNlRmFsc2VGb2N1cz86IGJvb2xlYW47XG4gIC8qKiBOYXJyb3dzIHRoZSByZXN1bHRzIG9mIHRoZSBmb2N1cyB0byBvbmx5IHRoZXNlcyBjbGFzcyB2ICovXG4gIGZpbHRlckNsYXNzPzogc3RyaW5nO1xuICAvKiogSG93IG11Y2ggdGhlIG5hdmlnYXRpb24gd2lsbCBza2lwIHdoZW4gdXNpbmcgdGhlIGFycm93cy4gdiAqL1xuICBuYXZpZ2F0aW9uSnVtcD86IG51bWJlcjtcbiAgLyoqIEEgSnNzIE9iamVjdCB1c2VkIHRvIG92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC4gKi9cbiAgY2xhc3Nlcz86IEh2Rm9jdXNDbGFzc2VzO1xufVxuXG5leHBvcnQgY29uc3QgSHZGb2N1cyA9ICh7XG4gIGNsYXNzZXMsXG4gIGNoaWxkcmVuLFxuICBjb25maWd1cmF0aW9uID0ge30sXG4gIGRpc2FibGVkQ2xhc3MgPSBmYWxzZSxcbiAgc2VsZWN0ZWQgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgcm9vdFJlZiA9IHVuZGVmaW5lZCxcbiAgZm9jdXNPbkNsaWNrID0gZmFsc2UsXG4gIGZvY3VzRGlzYWJsZWQgPSB0cnVlLFxuICBzdHJhdGVneSA9IFwibGlzdGJveFwiLFxuICB1c2VGYWxzZUZvY3VzID0gZmFsc2UsXG4gIGZpbHRlckNsYXNzLFxuICBuYXZpZ2F0aW9uSnVtcCA9IDQsXG59OiBIdkZvY3VzUHJvcHMpID0+IHtcbiAgY29uc3QgW3Nob3dGb2N1cywgc2V0U2hvd0ZvY3VzXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW2NoaWxkRm9jdXMsIHNldENoaWxkRm9jdXNdID0gdXNlU3RhdGU8YW55PigpO1xuICBjb25zdCBbaGFzUnVuQ29uZmlnLCBzZXRIYXNSdW5Db25maWddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGdldEZvY3VzZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgZm9jdXNlcyA9IHJvb3RSZWY/LmN1cnJlbnRcbiAgICAgID8gQXJyYXkuZnJvbShcbiAgICAgICAgICByb290UmVmLmN1cnJlbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcbiAgICAgICAgICAgIGZpbHRlckNsYXNzIHx8IGZvY3VzQ2xhc3Nlcy5yb290IHx8IGNsYXNzZXM/LnJvb3QgfHwgXCJyb290XCJcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogW107XG4gICAgcmV0dXJuIGZvY3VzZXM7XG4gIH07XG5cbiAgY29uc3Qgc2V0VGFiSW5kZXggPSAoZWwsIHRhYkluZGV4ID0gMCkgPT4ge1xuICAgIGNvbnN0IGVsQ2hpbGRGb2N1cyA9IGdldEZvY3VzYWJsZUNoaWxkcmVuKGVsKVswXTtcbiAgICBpZiAoZWxDaGlsZEZvY3VzKSB7XG4gICAgICBlbC50YWJJbmRleCA9IC0xO1xuICAgICAgZWxDaGlsZEZvY3VzLnRhYkluZGV4ID0gdGFiSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnRhYkluZGV4ID0gdGFiSW5kZXg7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNldFNlbGVjdGVkVGFiSW5kZXggPSAoKSA9PiB7XG4gICAgY29uc3QgZm9jdXNlcyA9IGdldEZvY3VzZXMoKTtcbiAgICBjb25zdCBmaXJzdFNlbGVjdGVkID0gZm9jdXNlcy5maW5kKChmb2N1cykgPT5cbiAgICAgIGZvY3VzLmNsYXNzTGlzdC5jb250YWlucyhcbiAgICAgICAgZm9jdXNDbGFzc2VzLnNlbGVjdGVkIHx8IGNsYXNzZXM/LnNlbGVjdGVkIHx8IFwic2VsZWN0ZWRcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICBpZiAoIWZpcnN0U2VsZWN0ZWQpIHJldHVybjtcbiAgICBmb2N1c2VzLmZvckVhY2goKGZvY3VzKSA9PiBzZXRUYWJJbmRleChmb2N1cywgLTEpKTtcbiAgICBzZXRUYWJJbmRleChmaXJzdFNlbGVjdGVkLCAwKTtcbiAgfTtcblxuICBjb25zdCBjbGVhclRhYlNpYmxpbmdzID0gKGVsKSA9PiB7XG4gICAgZ2V0Rm9jdXNlcygpLmZvckVhY2goKGZvY3VzKSA9PiBzZXRUYWJJbmRleChmb2N1cywgLTEpKTtcbiAgICBzZXRUYWJJbmRleChlbCwgMCk7XG4gIH07XG5cbiAgY29uc3Qgb25Gb2N1c1N0cmF0ZWd5ID0gKGV2dCkgPT4ge1xuICAgIGlmIChzdHJhdGVneSA9PT0gXCJsaXN0Ym94XCIpIHtcbiAgICAgIGNsZWFyVGFiU2libGluZ3MoZXZ0LmN1cnJlbnRUYXJnZXQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvbkJsdXJTdHJhdGVneSA9ICgpID0+IHtcbiAgICBpZiAoXG4gICAgICBzdHJhdGVneSA9PT0gXCJsaXN0Ym94XCIgJiZcbiAgICAgIHJvb3RSZWYgJiZcbiAgICAgIHJvb3RSZWYuY3VycmVudCAmJlxuICAgICAgIXJvb3RSZWYuY3VycmVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KVxuICAgICkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldFNlbGVjdGVkVGFiSW5kZXgoKTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY29uZmlnID0gKGVsKSA9PiB7XG4gICAgY29uc3QgeyB0YWJJbmRleCB9ID0gY29uZmlndXJhdGlvbjtcbiAgICBpZiAoIWVsIHx8IGhhc1J1bkNvbmZpZykgcmV0dXJuO1xuICAgIGlmIChzdHJhdGVneSA9PT0gXCJjYXJkXCIpIHtcbiAgICAgIHNldENoaWxkRm9jdXMoY2hpbGRyZW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzdHJhdGVneSA9PT0gXCJncmlkXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb2N1c2FibGVDaGlsZHJlbiA9IGdldEZvY3VzYWJsZUNoaWxkcmVuKGVsKTtcbiAgICBpZiAoZm9jdXNhYmxlQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBmb2N1c2FibGVDaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gc2V0VGFiSW5kZXgoY2hpbGQsIC0xKSk7XG4gICAgICBzZXRDaGlsZEZvY3VzKGZvY3VzYWJsZUNoaWxkcmVuWzBdKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTmlsKHRhYkluZGV4KSkgc2V0VGFiSW5kZXgoZWwsIHRhYkluZGV4KTtcbiAgICBzZXRIYXNSdW5Db25maWcodHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgYWRkRm9jdXNDbGFzcyA9IChldnQpID0+IHtcbiAgICBpZiAoIXVzZUZhbHNlRm9jdXMpIHtcbiAgICAgIGV2dC5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5hZGQoZm9jdXNDbGFzc2VzLmZvY3VzZWQpO1xuICAgICAgaWYgKGNsYXNzZXM/LmZvY3VzZWQpIHtcbiAgICAgICAgZXZ0LmN1cnJlbnRUYXJnZXQuY2xhc3NMaXN0LmFkZChjbGFzc2VzLmZvY3VzZWQpO1xuICAgICAgfVxuICAgICAgLy8gYWRkIGdsb2JhbCBjbGFzcyBIdklzRm9jdXNlZCBhcyBhIG1hcmtlclxuICAgICAgLy8gbm90IHRvIGJlIHN0eWxlZCBkaXJlY3RseSwgb25seSBhcyBoZWxwZXIgaW4gc3BlY2lmaWMgY3NzIHF1ZXJpZXNcbiAgICAgIGV2dC5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5hZGQoXCJIdklzRm9jdXNlZFwiKTtcbiAgICAgIGNsYXNzZXM/LmZvY3VzXG4gICAgICAgID8uc3BsaXQoXCIgXCIpXG4gICAgICAgIC5mb3JFYWNoKChjKSA9PiBldnQuY3VycmVudFRhcmdldC5jbGFzc0xpc3QuYWRkKGMpKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlRm9jdXNDbGFzcyA9ICgpID0+IHtcbiAgICBpZiAoIXVzZUZhbHNlRm9jdXMpIHtcbiAgICAgIGdldEZvY3VzZXMoKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChmb2N1c0NsYXNzZXMuZm9jdXNlZCkge1xuICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShmb2N1c0NsYXNzZXMuZm9jdXNlZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsYXNzZXM/LmZvY3VzZWQpIHtcbiAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3Nlcy5mb2N1c2VkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgdGhlIGdsb2JhbCBjbGFzcyBIdklzRm9jdXNlZFxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJIdklzRm9jdXNlZFwiKTtcbiAgICAgICAgY2xhc3Nlcz8uZm9jdXM/LnNwbGl0KFwiIFwiKS5mb3JFYWNoKChjKSA9PiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoYykpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uRm9jdXMgPSAoZXZ0KSA9PiB7XG4gICAgYWRkRm9jdXNDbGFzcyhldnQpO1xuICAgIHNldFNob3dGb2N1cyh0cnVlKTtcbiAgICAvLyBnaXZlIGZvY3VzIHRvIGNoaWxkIGVsZW1lbnQgaWYgYW55IGZvY3VzYWJsZVxuXG4gICAgaWYgKGNoaWxkRm9jdXMgJiYgY2hpbGRGb2N1cy5mb2N1cykgY2hpbGRGb2N1cy5mb2N1cygpO1xuICAgIG9uRm9jdXNTdHJhdGVneShldnQpO1xuICB9O1xuXG4gIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICBzZXRTaG93Rm9jdXMoZmFsc2UpO1xuICAgIHJlbW92ZUZvY3VzQ2xhc3MoKTtcbiAgICBvbkJsdXJTdHJhdGVneSgpO1xuICB9O1xuXG4gIGNvbnN0IG9uTW91c2VEb3duID0gKGV2dCkgPT4ge1xuICAgIGNvbnN0IGhhc0NhcmQgPSAhIWV2dC5jdXJyZW50VGFyZ2V0Py5xdWVyeVNlbGVjdG9yKFwiLkh2SXNDYXJkR3JpZEVsZW1lbnRcIik7XG4gICAgaWYgKHN0cmF0ZWd5ID09PSBcImdyaWRcIiAmJiBoYXNDYXJkKSByZXR1cm47XG5cbiAgICBzZXRGb2N1c1RvKGV2dC5jdXJyZW50VGFyZ2V0KTtcbiAgICBzZXRUYWJJbmRleChldnQuY3VycmVudFRhcmdldCwgMCk7XG4gICAgLy8gcmVtb3ZlIGZvY3VzIG91dGxpbmUgdW5sZXNzIGV4cGxpY2l0bHkgZW5hYmxlZFxuICAgIGlmICghZm9jdXNPbkNsaWNrKSB7XG4gICAgICAvLyBUT0RPIHRoaXMgcGllY2Ugb2YgY29kZSB3b3JrcyBvbmx5IGJlY2F1c2Ugb25Nb3VzZURvd24gaXMgaGFwcGVuaW5nIGFmdGVyIHRoZSBmb2N1cyBldmVudFxuICAgICAgLy8gVGhlcmUgaXMgbm90aGluZyBpbiBoZXJlIHRoYXQgZ3VhcmFudGVlcyB0aGUgb3JkZXIgb2YgdGhlc2UgZXZlbnRzLCBzbyBpdCBtYXkgcHJlc2VudCBhIHByb2JsZW0gaW4gdGhlIGZ1dHVyZVxuICAgICAgcmVtb3ZlRm9jdXNDbGFzcygpO1xuICAgICAgc2V0U2hvd0ZvY3VzKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZm9jdXNBbmRVcGRhdGVJbmRleCA9IChuZXh0Rm9jdXMsIHByZXZpb3VzRm9jdXMsIGZvY3VzZXNMaXN0KSA9PiB7XG4gICAgaWYgKGZvY3VzZXNMaXN0Py5pbmNsdWRlcyhwcmV2aW91c0ZvY3VzKSkge1xuICAgICAgc2V0VGFiSW5kZXgocHJldmlvdXNGb2N1cywgLTEpO1xuICAgIH1cbiAgICBzZXRUYWJJbmRleChuZXh0Rm9jdXMsIDApO1xuICAgIHNldEZvY3VzVG8obmV4dEZvY3VzKTtcbiAgfTtcblxuICBjb25zdCBnZXRFbmFibGVkS2V5cyA9IChjdXJyZW50Rm9jdXNJbmRleCwganVtcCwgbGlzdFNpemUpID0+ICh7XG4gICAgcmlnaHQ6XG4gICAgICAoY3VycmVudEZvY3VzSW5kZXggKyAxKSAlIGp1bXAgPT09IDAgfHxcbiAgICAgIGN1cnJlbnRGb2N1c0luZGV4ICsgMSA+IGxpc3RTaXplIC0gMSxcbiAgICBsZWZ0OiBjdXJyZW50Rm9jdXNJbmRleCAlIGp1bXAgPT09IDAsXG4gICAgdXA6IGN1cnJlbnRGb2N1c0luZGV4IC0ganVtcCA8IDAsXG4gICAgZG93bjpcbiAgICAgIGN1cnJlbnRGb2N1c0luZGV4ICsganVtcCA+IGxpc3RTaXplIHx8XG4gICAgICBjdXJyZW50Rm9jdXNJbmRleCArIGp1bXAgPiBsaXN0U2l6ZSAtIDEsXG4gIH0pO1xuXG4gIGNvbnN0IG9uR3JpZEtleURvd25IYW5kbGVyID0gKFxuICAgIGV2dCxcbiAgICBmb2N1c2VzLFxuICAgIGZvY3VzZXNMaXN0LFxuICAgIGN1cnJlbnRGb2N1c0luZGV4LFxuICAgIGp1bXBcbiAgKSA9PiB7XG4gICAgY29uc3QgY2hpbGRGb2N1c0lzSW5wdXQgPSBjaGlsZEZvY3VzICYmIGNoaWxkRm9jdXMubm9kZU5hbWUgPT09IFwiSU5QVVRcIjtcblxuICAgIGlmIChcbiAgICAgICFpc09uZU9mS2V5cyhldnQsIFtcbiAgICAgICAgXCJBcnJvd1VwXCIsXG4gICAgICAgIFwiQXJyb3dEb3duXCIsXG4gICAgICAgIFwiQXJyb3dMZWZ0XCIsXG4gICAgICAgIFwiQXJyb3dSaWdodFwiLFxuICAgICAgICBcIkhvbWVcIixcbiAgICAgICAgXCJFbmRcIixcbiAgICAgICAgXCJTcGFjZVwiLFxuICAgICAgICBcIkVudGVyXCIsXG4gICAgICBdKSB8fFxuICAgICAgKGNoaWxkRm9jdXNJc0lucHV0ICYmIGlzS2V5KGV2dCwgXCJFbnRlclwiKSlcbiAgICApIHtcbiAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB3ZSdsbCBkbyBzb21ldGhpbmcgd2l0aCB0aGUga2V5IHNvIHByZXZlbnQgZGVmYXVsdCBhbmQgc3RvcCBwcm9wYWdhdGlvblxuICAgIC8vIGV4Y2VwdCBmb3IgRW50ZXIgYW5kIFNwYWNlQmFyXG4gICAgaWYgKCFpc09uZU9mS2V5cyhldnQsIFtcIkVudGVyXCIsIFwiU3BhY2VcIl0pKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBjb25zdCBibG9ja2VkS2V5cyA9IGdldEVuYWJsZWRLZXlzKFxuICAgICAgY3VycmVudEZvY3VzSW5kZXgsXG4gICAgICBqdW1wLFxuICAgICAgZm9jdXNlc0xpc3QubGVuZ3RoXG4gICAgKTtcblxuICAgIHN3aXRjaCAoZXZ0LmNvZGUpIHtcbiAgICAgIGNhc2UgXCJTcGFjZVwiOlxuICAgICAgY2FzZSBcIkVudGVyXCI6XG4gICAgICAgIGlmIChpc0Jyb3dzZXIoXCJmaXJlZm94XCIpKSB7XG4gICAgICAgICAgZXZ0LnRhcmdldC5jbGljaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2dC5jdXJyZW50VGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiQXJyb3dVcFwiOlxuICAgICAgICBpZiAoIWJsb2NrZWRLZXlzLnVwKSB7XG4gICAgICAgICAgZm9jdXNBbmRVcGRhdGVJbmRleChcbiAgICAgICAgICAgIGZvY3VzZXMuanVtcCB8fCBmb2N1c2VzLmxhc3QsXG4gICAgICAgICAgICBldnQuY3VycmVudCxcbiAgICAgICAgICAgIGZvY3VzZXNMaXN0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIjpcbiAgICAgICAgaWYgKCFibG9ja2VkS2V5cy5kb3duKSB7XG4gICAgICAgICAgZm9jdXNBbmRVcGRhdGVJbmRleChcbiAgICAgICAgICAgIGZvY3VzZXMuZmFsbCB8fCBmb2N1c2VzLmZpcnN0LFxuICAgICAgICAgICAgZXZ0LmN1cnJlbnQsXG4gICAgICAgICAgICBmb2N1c2VzTGlzdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiQXJyb3dMZWZ0XCI6XG4gICAgICAgIGlmICghYmxvY2tlZEtleXMubGVmdCkge1xuICAgICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoXG4gICAgICAgICAgICBmb2N1c2VzLnByZXZpb3VzIHx8IGZvY3VzZXMubGFzdCxcbiAgICAgICAgICAgIGV2dC5jdXJyZW50LFxuICAgICAgICAgICAgZm9jdXNlc0xpc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkFycm93UmlnaHRcIjpcbiAgICAgICAgaWYgKCFibG9ja2VkS2V5cy5yaWdodCkge1xuICAgICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoXG4gICAgICAgICAgICBmb2N1c2VzLm5leHQgfHwgZm9jdXNlcy5maXJzdCxcbiAgICAgICAgICAgIGV2dC5jdXJyZW50LFxuICAgICAgICAgICAgZm9jdXNlc0xpc3RcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkhvbWVcIjpcbiAgICAgICAgZm9jdXNBbmRVcGRhdGVJbmRleChmb2N1c2VzLmZpcnN0LCBldnQuY3VycmVudCwgZm9jdXNlc0xpc3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJFbmRcIjpcbiAgICAgICAgZm9jdXNBbmRVcGRhdGVJbmRleChmb2N1c2VzLmxhc3QsIGV2dC5jdXJyZW50LCBmb2N1c2VzTGlzdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25WZXJ0aWNhbEFycmFuZ2VtZW50SGFuZGxlciA9IChldnQsIGZvY3VzZXMsIGZvY3VzZXNMaXN0KSA9PiB7XG4gICAgY29uc3QgY2hpbGRGb2N1c0lzSW5wdXQgPSBjaGlsZEZvY3VzICYmIGNoaWxkRm9jdXMubm9kZU5hbWUgPT09IFwiSU5QVVRcIjtcblxuICAgIGlmIChcbiAgICAgICFpc09uZU9mS2V5cyhldnQsIFtcbiAgICAgICAgXCJBcnJvd1VwXCIsXG4gICAgICAgIFwiQXJyb3dEb3duXCIsXG4gICAgICAgIFwiSG9tZVwiLFxuICAgICAgICBcIkVuZFwiLFxuICAgICAgICBcIlNwYWNlXCIsXG4gICAgICAgIFwiRW50ZXJcIixcbiAgICAgIF0pIHx8XG4gICAgICAoY2hpbGRGb2N1c0lzSW5wdXQgJiYgaXNLZXkoZXZ0LCBcIkVudGVyXCIpKVxuICAgICkge1xuICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHdlJ2xsIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBrZXkgc28gcHJldmVudCBkZWZhdWx0IGFuZCBzdG9wIHByb3BhZ2F0aW9uXG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgc3dpdGNoIChldnQuY29kZSkge1xuICAgICAgY2FzZSBcIlNwYWNlXCI6XG4gICAgICBjYXNlIFwiRW50ZXJcIjpcbiAgICAgICAgZXZ0LnRhcmdldC5jbGljaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJBcnJvd1VwXCI6XG4gICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoXG4gICAgICAgICAgZm9jdXNlcy5wcmV2aW91cyB8fCBmb2N1c2VzLmxhc3QsXG4gICAgICAgICAgZXZ0LmN1cnJlbnQsXG4gICAgICAgICAgZm9jdXNlc0xpc3RcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiQXJyb3dEb3duXCI6XG4gICAgICAgIGZvY3VzQW5kVXBkYXRlSW5kZXgoXG4gICAgICAgICAgZm9jdXNlcy5uZXh0IHx8IGZvY3VzZXMuZmlyc3QsXG4gICAgICAgICAgZXZ0LmN1cnJlbnQsXG4gICAgICAgICAgZm9jdXNlc0xpc3RcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiSG9tZVwiOlxuICAgICAgICBmb2N1c0FuZFVwZGF0ZUluZGV4KGZvY3VzZXMuZmlyc3QsIGV2dC5jdXJyZW50LCBmb2N1c2VzTGlzdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIkVuZFwiOlxuICAgICAgICBmb2N1c0FuZFVwZGF0ZUluZGV4KGZvY3VzZXMubGFzdCwgZXZ0LmN1cnJlbnQsIGZvY3VzZXNMaXN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfTtcblxuICBjb25zdCBvblNpbmdsZUhhbmRsZXIgPSAoZXZ0KSA9PiB7XG4gICAgY29uc3QgY2hpbGRGb2N1c0lzSW5wdXQgPSBjaGlsZEZvY3VzICYmIGNoaWxkRm9jdXMubm9kZU5hbWUgPT09IFwiSU5QVVRcIjtcblxuICAgIGlmIChcbiAgICAgICFpc09uZU9mS2V5cyhldnQsIFtcIlNwYWNlXCIsIFwiRW50ZXJcIl0pIHx8XG4gICAgICAoY2hpbGRGb2N1c0lzSW5wdXQgJiYgaXNLZXkoZXZ0LCBcIkVudGVyXCIpKVxuICAgICkge1xuICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHdlJ2xsIGRvIHNvbWV0aGluZyB3aXRoIHRoZSBrZXkgc28gcHJldmVudCBkZWZhdWx0IGFuZCBzdG9wIHByb3BhZ2F0aW9uXG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgZXZ0LmN1cnJlbnRUYXJnZXQuY2xpY2soKTtcbiAgfTtcblxuICBjb25zdCBvbktleURvd24gPSAoZXZ0KSA9PiB7XG4gICAgaWYgKHJvb3RSZWY/LmN1cnJlbnQgPT0gbnVsbCkge1xuICAgICAgLy8gb3BlcmF0aW5nIG91dHNpZGUgb2YgYSBjb21wb3NpdGUgd2lkZ2V0XG4gICAgICAvLyBub3RoaW5nIHRvIG1hbmFnZSwganVzdCBzdHlsZSBhbmQgdHJpZ2dlciBjbGlja3NcbiAgICAgIG9uU2luZ2xlSGFuZGxlcihldnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRPRE8ga2VlcCB0aGUgc21hcnQgZGVmYXVsdCwgYnV0IGFsbG93IHRvIGV4cGxpY2l0bHkgb3ZlcnJpZGUgaWYgZGlzYWJsZWQgZWxlbWVudHMgc2hvdWxkIGJlIGZvY3VzYWJsZVxuICAgIGNvbnN0IGlzRGlzYWJsZWRGb2N1c2FibGUgPSBzdHJhdGVneSA9PT0gXCJtZW51XCI7XG4gICAgY29uc3QgZm9jdXNlc0xpc3QgPSBnZXRGb2N1c2VzKCkuZmlsdGVyKFxuICAgICAgKGVsKSA9PlxuICAgICAgICBpc0Rpc2FibGVkRm9jdXNhYmxlIHx8XG4gICAgICAgICFlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3Nlcz8uZGlzYWJsZWQgYXMgc3RyaW5nKVxuICAgICk7XG5cbiAgICBjb25zdCBjdXJyZW50Rm9jdXMgPSBmb2N1c2VzTGlzdC5pbmRleE9mKGV2dC5jdXJyZW50VGFyZ2V0KTtcblxuICAgIGNvbnN0IGZvY3VzZXMgPSB7XG4gICAgICBmaXJzdDogZm9jdXNlc0xpc3RbMF0sXG4gICAgICBsYXN0OiBmb2N1c2VzTGlzdFtmb2N1c2VzTGlzdC5sZW5ndGggLSAxXSxcbiAgICAgIHByZXZpb3VzOiBmb2N1c2VzTGlzdFtjdXJyZW50Rm9jdXMgLSAxXSxcbiAgICAgIG5leHQ6IGZvY3VzZXNMaXN0W2N1cnJlbnRGb2N1cyArIDFdLFxuICAgICAgZmFsbDogZm9jdXNlc0xpc3RbY3VycmVudEZvY3VzICsgbmF2aWdhdGlvbkp1bXBdLFxuICAgICAganVtcDogZm9jdXNlc0xpc3RbY3VycmVudEZvY3VzIC0gbmF2aWdhdGlvbkp1bXBdLFxuICAgIH07XG5cbiAgICBpZiAoc3RyYXRlZ3kgPT09IFwiZ3JpZFwiKSB7XG4gICAgICBvbkdyaWRLZXlEb3duSGFuZGxlcihcbiAgICAgICAgZXZ0LFxuICAgICAgICBmb2N1c2VzLFxuICAgICAgICBmb2N1c2VzTGlzdCxcbiAgICAgICAgY3VycmVudEZvY3VzLFxuICAgICAgICBuYXZpZ2F0aW9uSnVtcFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUT0RPIGFkZCBwcm9wZXJ0eSBmb3Igc3BlY2lmeWluZyB0aGUgY29tcG9zaXRlIHdpZGdldCBvcmllbnRhdGlvblxuICAgIC8vIFRPRE8gaW1wbGVtZW50IGhhbmRsZXIgZm9yIGhvcml6b250YWwgb3JpZW50YXRpb25cbiAgICBvblZlcnRpY2FsQXJyYW5nZW1lbnRIYW5kbGVyKGV2dCwgZm9jdXNlcywgZm9jdXNlc0xpc3QpO1xuICB9O1xuXG4gIGNvbnN0IG9uS2V5VXAgPSAoZXZ0KSA9PiB7XG4gICAgaWYgKGlzQnJvd3NlcihcImZpcmVmb3hcIikpIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9O1xuXG4gIGlmIChkaXNhYmxlZCkgcmV0dXJuIGNoaWxkcmVuO1xuXG4gIGNvbnN0IGZvY3VzV3JhcHBlciA9IChjaGlsZHJlblRvV3JhcCkgPT4gKFxuICAgIDxTdHlsZWRGb2N1c1dyYXBwZXJcbiAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgY2xhc3Nlcz8uZXh0ZXJuYWxSZWZlcmVuY2UsXG4gICAgICAgIGZvY3VzQ2xhc3Nlcy5leHRlcm5hbFJlZmVyZW5jZVxuICAgICAgKX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW5Ub1dyYXB9XG4gICAgICB7c2hvd0ZvY3VzICYmIChcbiAgICAgICAgPFN0eWxlZEZhbHNlRm9jdXNcbiAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goY2xhc3Nlcz8uZmFsc2VGb2N1cywgZm9jdXNDbGFzc2VzLmZhbHNlRm9jdXMpfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L1N0eWxlZEZvY3VzV3JhcHBlcj5cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxDb25kaXRpb25hbFdyYXBwZXIgY29uZGl0aW9uPXt1c2VGYWxzZUZvY3VzfSB3cmFwcGVyPXtmb2N1c1dyYXBwZXJ9PlxuICAgICAgPEdsb2JhbCBzdHlsZXM9e2ZvY3VzU3R5bGVzfSAvPlxuICAgICAge1JlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICBjbGFzc05hbWU6IGNsc3goXG4gICAgICAgICAgY2hpbGRyZW4ucHJvcHMuY2xhc3NOYW1lLFxuICAgICAgICAgIGZvY3VzQ2xhc3Nlcy5yb290LFxuICAgICAgICAgIGNsYXNzZXM/LnJvb3QsXG4gICAgICAgICAgZmlsdGVyQ2xhc3MsXG4gICAgICAgICAgc2VsZWN0ZWQgJiYgY2xzeChmb2N1c0NsYXNzZXMuc2VsZWN0ZWQsIGNsYXNzZXM/LnNlbGVjdGVkKSxcbiAgICAgICAgICBkaXNhYmxlZENsYXNzICYmIGNsc3goZm9jdXNDbGFzc2VzLmRpc2FibGVkLCBjbGFzc2VzPy5kaXNhYmxlZCksXG4gICAgICAgICAgZm9jdXNEaXNhYmxlZCAmJlxuICAgICAgICAgICAgY2xzeChmb2N1c0NsYXNzZXMuZm9jdXNEaXNhYmxlZCwgY2xhc3Nlcz8uZm9jdXNEaXNhYmxlZClcbiAgICAgICAgKSxcbiAgICAgICAgcmVmOiBjb25maWcsXG4gICAgICAgIG9uRm9jdXMsXG4gICAgICAgIG9uQmx1cixcbiAgICAgICAgb25Nb3VzZURvd24sXG4gICAgICAgIG9uS2V5RG93bixcbiAgICAgICAgb25LZXlVcCxcbiAgICAgICAgc2VsZWN0ZWQsXG4gICAgICB9KX1cbiAgICA8L0NvbmRpdGlvbmFsV3JhcHBlcj5cbiAgKTtcbn07XG4iXX0= */",
|
|
27
27
|
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
28
28
|
};
|
|
29
29
|
const HvFocus = ({
|
|
@@ -167,103 +167,81 @@ const HvFocus = ({
|
|
|
167
167
|
down: currentFocusIndex + jump > listSize || currentFocusIndex + jump > listSize - 1
|
|
168
168
|
});
|
|
169
169
|
const onGridKeyDownHandler = (evt, focuses, focusesList, currentFocusIndex, jump) => {
|
|
170
|
-
const {
|
|
171
|
-
ArrowUp,
|
|
172
|
-
ArrowDown,
|
|
173
|
-
Home,
|
|
174
|
-
End,
|
|
175
|
-
ArrowLeft,
|
|
176
|
-
ArrowRight,
|
|
177
|
-
Enter,
|
|
178
|
-
SpaceBar
|
|
179
|
-
} = keyboardCodes.keyboardCodes;
|
|
180
170
|
const childFocusIsInput = childFocus && childFocus.nodeName === "INPUT";
|
|
181
|
-
if (!
|
|
171
|
+
if (!keyboardUtils.isOneOfKeys(evt, ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End", "Space", "Enter"]) || childFocusIsInput && keyboardUtils.isKey(evt, "Enter")) {
|
|
182
172
|
return;
|
|
183
173
|
}
|
|
184
|
-
if (!
|
|
174
|
+
if (!keyboardUtils.isOneOfKeys(evt, ["Enter", "Space"])) {
|
|
185
175
|
evt.preventDefault();
|
|
186
176
|
evt.stopPropagation();
|
|
187
177
|
}
|
|
188
178
|
const blockedKeys = getEnabledKeys(currentFocusIndex, jump, focusesList.length);
|
|
189
|
-
switch (evt.
|
|
190
|
-
case
|
|
191
|
-
case Enter:
|
|
179
|
+
switch (evt.code) {
|
|
180
|
+
case "Space":
|
|
181
|
+
case "Enter":
|
|
192
182
|
if (browser.default("firefox")) {
|
|
193
183
|
evt.target.click();
|
|
194
184
|
} else {
|
|
195
185
|
evt.currentTarget.click();
|
|
196
186
|
}
|
|
197
187
|
break;
|
|
198
|
-
case ArrowUp:
|
|
188
|
+
case "ArrowUp":
|
|
199
189
|
if (!blockedKeys.up) {
|
|
200
190
|
focusAndUpdateIndex(focuses.jump || focuses.last, evt.current, focusesList);
|
|
201
191
|
}
|
|
202
192
|
break;
|
|
203
|
-
case ArrowDown:
|
|
193
|
+
case "ArrowDown":
|
|
204
194
|
if (!blockedKeys.down) {
|
|
205
195
|
focusAndUpdateIndex(focuses.fall || focuses.first, evt.current, focusesList);
|
|
206
196
|
}
|
|
207
197
|
break;
|
|
208
|
-
case ArrowLeft:
|
|
198
|
+
case "ArrowLeft":
|
|
209
199
|
if (!blockedKeys.left) {
|
|
210
200
|
focusAndUpdateIndex(focuses.previous || focuses.last, evt.current, focusesList);
|
|
211
201
|
}
|
|
212
202
|
break;
|
|
213
|
-
case ArrowRight:
|
|
203
|
+
case "ArrowRight":
|
|
214
204
|
if (!blockedKeys.right) {
|
|
215
205
|
focusAndUpdateIndex(focuses.next || focuses.first, evt.current, focusesList);
|
|
216
206
|
}
|
|
217
207
|
break;
|
|
218
|
-
case Home:
|
|
208
|
+
case "Home":
|
|
219
209
|
focusAndUpdateIndex(focuses.first, evt.current, focusesList);
|
|
220
210
|
break;
|
|
221
|
-
case End:
|
|
211
|
+
case "End":
|
|
222
212
|
focusAndUpdateIndex(focuses.last, evt.current, focusesList);
|
|
223
213
|
break;
|
|
224
214
|
}
|
|
225
215
|
};
|
|
226
216
|
const onVerticalArrangementHandler = (evt, focuses, focusesList) => {
|
|
227
|
-
const {
|
|
228
|
-
ArrowUp,
|
|
229
|
-
ArrowDown,
|
|
230
|
-
Home,
|
|
231
|
-
End,
|
|
232
|
-
Enter,
|
|
233
|
-
SpaceBar
|
|
234
|
-
} = keyboardCodes.keyboardCodes;
|
|
235
217
|
const childFocusIsInput = childFocus && childFocus.nodeName === "INPUT";
|
|
236
|
-
if (!
|
|
218
|
+
if (!keyboardUtils.isOneOfKeys(evt, ["ArrowUp", "ArrowDown", "Home", "End", "Space", "Enter"]) || childFocusIsInput && keyboardUtils.isKey(evt, "Enter")) {
|
|
237
219
|
return;
|
|
238
220
|
}
|
|
239
221
|
evt.preventDefault();
|
|
240
222
|
evt.stopPropagation();
|
|
241
|
-
switch (evt.
|
|
242
|
-
case
|
|
243
|
-
case Enter:
|
|
223
|
+
switch (evt.code) {
|
|
224
|
+
case "Space":
|
|
225
|
+
case "Enter":
|
|
244
226
|
evt.target.click();
|
|
245
227
|
break;
|
|
246
|
-
case ArrowUp:
|
|
228
|
+
case "ArrowUp":
|
|
247
229
|
focusAndUpdateIndex(focuses.previous || focuses.last, evt.current, focusesList);
|
|
248
230
|
break;
|
|
249
|
-
case ArrowDown:
|
|
231
|
+
case "ArrowDown":
|
|
250
232
|
focusAndUpdateIndex(focuses.next || focuses.first, evt.current, focusesList);
|
|
251
233
|
break;
|
|
252
|
-
case Home:
|
|
234
|
+
case "Home":
|
|
253
235
|
focusAndUpdateIndex(focuses.first, evt.current, focusesList);
|
|
254
236
|
break;
|
|
255
|
-
case End:
|
|
237
|
+
case "End":
|
|
256
238
|
focusAndUpdateIndex(focuses.last, evt.current, focusesList);
|
|
257
239
|
break;
|
|
258
240
|
}
|
|
259
241
|
};
|
|
260
242
|
const onSingleHandler = (evt) => {
|
|
261
|
-
const {
|
|
262
|
-
Enter,
|
|
263
|
-
SpaceBar
|
|
264
|
-
} = keyboardCodes.keyboardCodes;
|
|
265
243
|
const childFocusIsInput = childFocus && childFocus.nodeName === "INPUT";
|
|
266
|
-
if (!
|
|
244
|
+
if (!keyboardUtils.isOneOfKeys(evt, ["Space", "Enter"]) || childFocusIsInput && keyboardUtils.isKey(evt, "Enter")) {
|
|
267
245
|
return;
|
|
268
246
|
}
|
|
269
247
|
evt.preventDefault();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Focus.cjs","sources":["../../../../src/components/Focus/Focus.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport isNil from \"lodash/isNil\";\nimport React, { RefObject, useState } from \"react\";\nimport { HvBaseProps } from \"@core/types\";\nimport { keyboardCodes, isBrowser } from \"@core/utils\";\nimport ConditionalWrapper from \"@core/utils/ConditionalWrapper\";\nimport { css, Global } from \"@emotion/react\";\nimport { StyledFocusWrapper, StyledFalseFocus } from \"./Focus.styles\";\nimport { getFocusableChildren, isKey, isOneOfKeys, setFocusTo } from \"./utils\";\nimport focusClasses, { HvFocusClasses } from \"./focusClasses\";\n\nconst focusStyles = css`\n .HvFocus-focused {\n outline-color: #52a8ec;\n outline-style: solid;\n outline-width: 0px;\n outline-offset: -1px;\n box-shadow: 0 0 0 1px #52a8ec, 0 0 0 4px rgba(29, 155, 209, 0.3);\n\n @media (-webkit-min-device-pixel-ratio: 0) {\n outline-color: #52a8ec;\n outline-style: solid;\n outline-width: 0px;\n outline-offset: -1px;\n box-shadow: 0 0 0 1px #52a8ec, 0 0 0 4px rgba(29, 155, 209, 0.3);\n }\n }\n\n .HvFocus-focusDisabled {\n outline: none;\n box-shadow: none;\n }\n .HvFocus-focusDisabled *:focus {\n outline: none;\n box-shadow: none;\n }\n .HvFocus-focusDisabled * {\n outline: none !important;\n box-shadow: none !important;\n }\n`;\n\nexport type HvFocusStrategies = \"listbox\" | \"menu\" | \"card\" | \"grid\";\n\nexport interface HvFocusProps extends HvBaseProps<HTMLElement, \"children\"> {\n children: React.ReactElement;\n /** Extra configuration for the child element. */\n configuration?: {\n tabIndex?: number;\n };\n /** Indicates that the disabled class should be applied. */\n disabledClass?: boolean;\n /** Whether the focus is selected. */\n selected?: boolean;\n /** Whether the focus is disabled. */\n disabled?: boolean;\n /** The reference to the root element to hold all Focus' context. */\n rootRef?: RefObject<HTMLElement>;\n /** Show focus when click element. v */\n focusOnClick?: boolean;\n /** Show focus when click element. v */\n focusDisabled?: boolean;\n /** Focus and navigation strategy to be used. v */\n strategy?: HvFocusStrategies;\n /** Uses an absolute positioned div as a focus. v */\n useFalseFocus?: boolean;\n /** Narrows the results of the focus to only theses class v */\n filterClass?: string;\n /** How much the navigation will skip when using the arrows. v */\n navigationJump?: number;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvFocusClasses;\n}\n\nexport const HvFocus = ({\n classes,\n children,\n configuration = {},\n disabledClass = false,\n selected = false,\n disabled = false,\n rootRef = undefined,\n focusOnClick = false,\n focusDisabled = true,\n strategy = \"listbox\",\n useFalseFocus = false,\n filterClass,\n navigationJump = 4,\n}: HvFocusProps) => {\n const [showFocus, setShowFocus] = useState<boolean>(false);\n const [childFocus, setChildFocus] = useState<any>();\n const [hasRunConfig, setHasRunConfig] = useState(false);\n\n const getFocuses = () => {\n const focuses = rootRef?.current\n ? Array.from(\n rootRef.current.getElementsByClassName(\n filterClass || focusClasses.root || classes?.root || \"root\"\n )\n )\n : [];\n return focuses;\n };\n\n const setTabIndex = (el, tabIndex = 0) => {\n const elChildFocus = getFocusableChildren(el)[0];\n if (elChildFocus) {\n el.tabIndex = -1;\n elChildFocus.tabIndex = tabIndex;\n } else {\n el.tabIndex = tabIndex;\n }\n };\n\n const setSelectedTabIndex = () => {\n const focuses = getFocuses();\n const firstSelected = focuses.find((focus) =>\n focus.classList.contains(\n focusClasses.selected || classes?.selected || \"selected\"\n )\n );\n\n if (!firstSelected) return;\n focuses.forEach((focus) => setTabIndex(focus, -1));\n setTabIndex(firstSelected, 0);\n };\n\n const clearTabSiblings = (el) => {\n getFocuses().forEach((focus) => setTabIndex(focus, -1));\n setTabIndex(el, 0);\n };\n\n const onFocusStrategy = (evt) => {\n if (strategy === \"listbox\") {\n clearTabSiblings(evt.currentTarget);\n }\n };\n\n const onBlurStrategy = () => {\n if (\n strategy === \"listbox\" &&\n rootRef &&\n rootRef.current &&\n !rootRef.current.contains(document.activeElement)\n ) {\n setTimeout(() => {\n setSelectedTabIndex();\n }, 10);\n }\n };\n\n const config = (el) => {\n const { tabIndex } = configuration;\n if (!el || hasRunConfig) return;\n if (strategy === \"card\") {\n setChildFocus(children);\n return;\n }\n\n if (strategy === \"grid\") {\n return;\n }\n\n const focusableChildren = getFocusableChildren(el);\n if (focusableChildren.length) {\n focusableChildren.forEach((child) => setTabIndex(child, -1));\n setChildFocus(focusableChildren[0]);\n }\n\n if (!isNil(tabIndex)) setTabIndex(el, tabIndex);\n setHasRunConfig(true);\n };\n\n const addFocusClass = (evt) => {\n if (!useFalseFocus) {\n evt.currentTarget.classList.add(focusClasses.focused);\n if (classes?.focused) {\n evt.currentTarget.classList.add(classes.focused);\n }\n // add global class HvIsFocused as a marker\n // not to be styled directly, only as helper in specific css queries\n evt.currentTarget.classList.add(\"HvIsFocused\");\n classes?.focus\n ?.split(\" \")\n .forEach((c) => evt.currentTarget.classList.add(c));\n }\n };\n\n const removeFocusClass = () => {\n if (!useFalseFocus) {\n getFocuses().forEach((element) => {\n if (focusClasses.focused) {\n element.classList.remove(focusClasses.focused);\n }\n if (classes?.focused) {\n element.classList.remove(classes.focused);\n }\n // remove the global class HvIsFocused\n element.classList.remove(\"HvIsFocused\");\n classes?.focus?.split(\" \").forEach((c) => element.classList.remove(c));\n });\n }\n };\n\n const onFocus = (evt) => {\n addFocusClass(evt);\n setShowFocus(true);\n // give focus to child element if any focusable\n\n if (childFocus && childFocus.focus) childFocus.focus();\n onFocusStrategy(evt);\n };\n\n const onBlur = () => {\n setShowFocus(false);\n removeFocusClass();\n onBlurStrategy();\n };\n\n const onMouseDown = (evt) => {\n const hasCard = !!evt.currentTarget?.querySelector(\".HvIsCardGridElement\");\n if (strategy === \"grid\" && hasCard) return;\n\n setFocusTo(evt.currentTarget);\n setTabIndex(evt.currentTarget, 0);\n // remove focus outline unless explicitly enabled\n if (!focusOnClick) {\n // TODO this piece of code works only because onMouseDown is happening after the focus event\n // There is nothing in here that guarantees the order of these events, so it may present a problem in the future\n removeFocusClass();\n setShowFocus(false);\n }\n };\n\n const focusAndUpdateIndex = (nextFocus, previousFocus, focusesList) => {\n if (focusesList?.includes(previousFocus)) {\n setTabIndex(previousFocus, -1);\n }\n setTabIndex(nextFocus, 0);\n setFocusTo(nextFocus);\n };\n\n const getEnabledKeys = (currentFocusIndex, jump, listSize) => ({\n right:\n (currentFocusIndex + 1) % jump === 0 ||\n currentFocusIndex + 1 > listSize - 1,\n left: currentFocusIndex % jump === 0,\n up: currentFocusIndex - jump < 0,\n down:\n currentFocusIndex + jump > listSize ||\n currentFocusIndex + jump > listSize - 1,\n });\n\n const onGridKeyDownHandler = (\n evt,\n focuses,\n focusesList,\n currentFocusIndex,\n jump\n ) => {\n const {\n ArrowUp,\n ArrowDown,\n Home,\n End,\n ArrowLeft,\n ArrowRight,\n Enter,\n SpaceBar,\n } = keyboardCodes;\n\n const childFocusIsInput = childFocus && childFocus.nodeName === \"INPUT\";\n\n if (\n !isOneOfKeys(evt, [\n ArrowUp,\n ArrowDown,\n ArrowLeft,\n ArrowRight,\n Home,\n End,\n SpaceBar,\n Enter,\n ]) ||\n (childFocusIsInput && isKey(evt, Enter))\n ) {\n // nothing to do\n return;\n }\n\n // we'll do something with the key so prevent default and stop propagation\n // except for Enter and SpaceBar\n if (!isOneOfKeys(evt, [Enter, SpaceBar])) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n const blockedKeys = getEnabledKeys(\n currentFocusIndex,\n jump,\n focusesList.length\n );\n\n switch (evt.keyCode) {\n case SpaceBar:\n case Enter:\n if (isBrowser(\"firefox\")) {\n evt.target.click();\n } else {\n evt.currentTarget.click();\n }\n break;\n case ArrowUp:\n if (!blockedKeys.up) {\n focusAndUpdateIndex(\n focuses.jump || focuses.last,\n evt.current,\n focusesList\n );\n }\n break;\n case ArrowDown:\n if (!blockedKeys.down) {\n focusAndUpdateIndex(\n focuses.fall || focuses.first,\n evt.current,\n focusesList\n );\n }\n break;\n case ArrowLeft:\n if (!blockedKeys.left) {\n focusAndUpdateIndex(\n focuses.previous || focuses.last,\n evt.current,\n focusesList\n );\n }\n break;\n case ArrowRight:\n if (!blockedKeys.right) {\n focusAndUpdateIndex(\n focuses.next || focuses.first,\n evt.current,\n focusesList\n );\n }\n break;\n case Home:\n focusAndUpdateIndex(focuses.first, evt.current, focusesList);\n break;\n case End:\n focusAndUpdateIndex(focuses.last, evt.current, focusesList);\n break;\n default:\n }\n };\n\n const onVerticalArrangementHandler = (evt, focuses, focusesList) => {\n const { ArrowUp, ArrowDown, Home, End, Enter, SpaceBar } = keyboardCodes;\n const childFocusIsInput = childFocus && childFocus.nodeName === \"INPUT\";\n\n if (\n !isOneOfKeys(evt, [ArrowUp, ArrowDown, Home, End, SpaceBar, Enter]) ||\n (childFocusIsInput && isKey(evt, Enter))\n ) {\n // nothing to do\n return;\n }\n\n // we'll do something with the key so prevent default and stop propagation\n evt.preventDefault();\n evt.stopPropagation();\n\n switch (evt.keyCode) {\n case SpaceBar:\n case Enter:\n evt.target.click();\n break;\n case ArrowUp:\n focusAndUpdateIndex(\n focuses.previous || focuses.last,\n evt.current,\n focusesList\n );\n break;\n case ArrowDown:\n focusAndUpdateIndex(\n focuses.next || focuses.first,\n evt.current,\n focusesList\n );\n break;\n case Home:\n focusAndUpdateIndex(focuses.first, evt.current, focusesList);\n break;\n case End:\n focusAndUpdateIndex(focuses.last, evt.current, focusesList);\n break;\n default:\n }\n };\n\n const onSingleHandler = (evt) => {\n const { Enter, SpaceBar } = keyboardCodes;\n const childFocusIsInput = childFocus && childFocus.nodeName === \"INPUT\";\n\n if (\n !isOneOfKeys(evt, [SpaceBar, Enter]) ||\n (childFocusIsInput && isKey(evt, Enter))\n ) {\n // nothing to do\n return;\n }\n\n // we'll do something with the key so prevent default and stop propagation\n evt.preventDefault();\n evt.stopPropagation();\n\n evt.currentTarget.click();\n };\n\n const onKeyDown = (evt) => {\n if (rootRef?.current == null) {\n // operating outside of a composite widget\n // nothing to manage, just style and trigger clicks\n onSingleHandler(evt);\n return;\n }\n\n // TODO keep the smart default, but allow to explicitly override if disabled elements should be focusable\n const isDisabledFocusable = strategy === \"menu\";\n const focusesList = getFocuses().filter(\n (el) =>\n isDisabledFocusable ||\n !el.classList.contains(classes?.disabled as string)\n );\n\n const currentFocus = focusesList.indexOf(evt.currentTarget);\n\n const focuses = {\n first: focusesList[0],\n last: focusesList[focusesList.length - 1],\n previous: focusesList[currentFocus - 1],\n next: focusesList[currentFocus + 1],\n fall: focusesList[currentFocus + navigationJump],\n jump: focusesList[currentFocus - navigationJump],\n };\n\n if (strategy === \"grid\") {\n onGridKeyDownHandler(\n evt,\n focuses,\n focusesList,\n currentFocus,\n navigationJump\n );\n return;\n }\n\n // TODO add property for specifying the composite widget orientation\n // TODO implement handler for horizontal orientation\n onVerticalArrangementHandler(evt, focuses, focusesList);\n };\n\n const onKeyUp = (evt) => {\n if (isBrowser(\"firefox\")) evt.preventDefault();\n };\n\n if (disabled) return children;\n\n const focusWrapper = (childrenToWrap) => (\n <StyledFocusWrapper\n className={clsx(\n classes?.externalReference,\n focusClasses.externalReference\n )}\n >\n {childrenToWrap}\n {showFocus && (\n <StyledFalseFocus\n className={clsx(classes?.falseFocus, focusClasses.falseFocus)}\n />\n )}\n </StyledFocusWrapper>\n );\n\n return (\n <ConditionalWrapper condition={useFalseFocus} wrapper={focusWrapper}>\n <Global styles={focusStyles} />\n {React.cloneElement(children, {\n className: clsx(\n children.props.className,\n focusClasses.root,\n classes?.root,\n filterClass,\n selected && clsx(focusClasses.selected, classes?.selected),\n disabledClass && clsx(focusClasses.disabled, classes?.disabled),\n focusDisabled &&\n clsx(focusClasses.focusDisabled, classes?.focusDisabled)\n ),\n ref: config,\n onFocus,\n onBlur,\n onMouseDown,\n onKeyDown,\n onKeyUp,\n selected,\n })}\n </ConditionalWrapper>\n );\n};\n"],"names":["focusStyles","process","env","NODE_ENV","name","styles","map","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","HvFocus","classes","children","configuration","disabledClass","selected","disabled","rootRef","undefined","focusOnClick","focusDisabled","strategy","useFalseFocus","filterClass","navigationJump","showFocus","setShowFocus","useState","childFocus","setChildFocus","hasRunConfig","setHasRunConfig","getFocuses","focuses","current","Array","from","getElementsByClassName","focusClasses","root","setTabIndex","el","tabIndex","elChildFocus","getFocusableChildren","setSelectedTabIndex","firstSelected","find","focus","classList","contains","forEach","clearTabSiblings","onFocusStrategy","evt","currentTarget","onBlurStrategy","document","activeElement","setTimeout","config","focusableChildren","length","child","isNil","addFocusClass","add","focused","split","c","removeFocusClass","element","remove","onFocus","onBlur","onMouseDown","hasCard","querySelector","setFocusTo","focusAndUpdateIndex","nextFocus","previousFocus","focusesList","includes","getEnabledKeys","currentFocusIndex","jump","listSize","right","left","up","down","onGridKeyDownHandler","ArrowUp","ArrowDown","Home","End","ArrowLeft","ArrowRight","Enter","SpaceBar","keyboardCodes","childFocusIsInput","nodeName","isOneOfKeys","isKey","preventDefault","stopPropagation","blockedKeys","keyCode","isBrowser","target","click","last","fall","first","previous","next","onVerticalArrangementHandler","onSingleHandler","onKeyDown","isDisabledFocusable","filter","currentFocus","indexOf","onKeyUp","focusWrapper","childrenToWrap","_jsxs","StyledFocusWrapper","className","clsx","externalReference","StyledFalseFocus","falseFocus","ConditionalWrapper","condition","wrapper","_jsx","Global","React","cloneElement","props","ref"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Focus.cjs","sources":["../../../../src/components/Focus/Focus.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport isNil from \"lodash/isNil\";\nimport React, { RefObject, useState } from \"react\";\nimport { HvBaseProps } from \"@core/types\";\nimport { isBrowser, isKey, isOneOfKeys } from \"@core/utils\";\nimport ConditionalWrapper from \"@core/utils/ConditionalWrapper\";\nimport { css, Global } from \"@emotion/react\";\nimport { StyledFocusWrapper, StyledFalseFocus } from \"./Focus.styles\";\nimport { getFocusableChildren, setFocusTo } from \"./utils\";\nimport focusClasses, { HvFocusClasses } from \"./focusClasses\";\n\nconst focusStyles = css`\n .HvFocus-focused {\n outline-color: #52a8ec;\n outline-style: solid;\n outline-width: 0px;\n outline-offset: -1px;\n box-shadow: 0 0 0 1px #52a8ec, 0 0 0 4px rgba(29, 155, 209, 0.3);\n\n @media (-webkit-min-device-pixel-ratio: 0) {\n outline-color: #52a8ec;\n outline-style: solid;\n outline-width: 0px;\n outline-offset: -1px;\n box-shadow: 0 0 0 1px #52a8ec, 0 0 0 4px rgba(29, 155, 209, 0.3);\n }\n }\n\n .HvFocus-focusDisabled {\n outline: none;\n box-shadow: none;\n }\n .HvFocus-focusDisabled *:focus {\n outline: none;\n box-shadow: none;\n }\n .HvFocus-focusDisabled * {\n outline: none !important;\n box-shadow: none !important;\n }\n`;\n\nexport type HvFocusStrategies = \"listbox\" | \"menu\" | \"card\" | \"grid\";\n\nexport interface HvFocusProps extends HvBaseProps<HTMLElement, \"children\"> {\n children: React.ReactElement;\n /** Extra configuration for the child element. */\n configuration?: {\n tabIndex?: number;\n };\n /** Indicates that the disabled class should be applied. */\n disabledClass?: boolean;\n /** Whether the focus is selected. */\n selected?: boolean;\n /** Whether the focus is disabled. */\n disabled?: boolean;\n /** The reference to the root element to hold all Focus' context. */\n rootRef?: RefObject<HTMLElement>;\n /** Show focus when click element. v */\n focusOnClick?: boolean;\n /** Show focus when click element. v */\n focusDisabled?: boolean;\n /** Focus and navigation strategy to be used. v */\n strategy?: HvFocusStrategies;\n /** Uses an absolute positioned div as a focus. v */\n useFalseFocus?: boolean;\n /** Narrows the results of the focus to only theses class v */\n filterClass?: string;\n /** How much the navigation will skip when using the arrows. v */\n navigationJump?: number;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvFocusClasses;\n}\n\nexport const HvFocus = ({\n classes,\n children,\n configuration = {},\n disabledClass = false,\n selected = false,\n disabled = false,\n rootRef = undefined,\n focusOnClick = false,\n focusDisabled = true,\n strategy = \"listbox\",\n useFalseFocus = false,\n filterClass,\n navigationJump = 4,\n}: HvFocusProps) => {\n const [showFocus, setShowFocus] = useState<boolean>(false);\n const [childFocus, setChildFocus] = useState<any>();\n const [hasRunConfig, setHasRunConfig] = useState(false);\n\n const getFocuses = () => {\n const focuses = rootRef?.current\n ? Array.from(\n rootRef.current.getElementsByClassName(\n filterClass || focusClasses.root || classes?.root || \"root\"\n )\n )\n : [];\n return focuses;\n };\n\n const setTabIndex = (el, tabIndex = 0) => {\n const elChildFocus = getFocusableChildren(el)[0];\n if (elChildFocus) {\n el.tabIndex = -1;\n elChildFocus.tabIndex = tabIndex;\n } else {\n el.tabIndex = tabIndex;\n }\n };\n\n const setSelectedTabIndex = () => {\n const focuses = getFocuses();\n const firstSelected = focuses.find((focus) =>\n focus.classList.contains(\n focusClasses.selected || classes?.selected || \"selected\"\n )\n );\n\n if (!firstSelected) return;\n focuses.forEach((focus) => setTabIndex(focus, -1));\n setTabIndex(firstSelected, 0);\n };\n\n const clearTabSiblings = (el) => {\n getFocuses().forEach((focus) => setTabIndex(focus, -1));\n setTabIndex(el, 0);\n };\n\n const onFocusStrategy = (evt) => {\n if (strategy === \"listbox\") {\n clearTabSiblings(evt.currentTarget);\n }\n };\n\n const onBlurStrategy = () => {\n if (\n strategy === \"listbox\" &&\n rootRef &&\n rootRef.current &&\n !rootRef.current.contains(document.activeElement)\n ) {\n setTimeout(() => {\n setSelectedTabIndex();\n }, 10);\n }\n };\n\n const config = (el) => {\n const { tabIndex } = configuration;\n if (!el || hasRunConfig) return;\n if (strategy === \"card\") {\n setChildFocus(children);\n return;\n }\n\n if (strategy === \"grid\") {\n return;\n }\n\n const focusableChildren = getFocusableChildren(el);\n if (focusableChildren.length) {\n focusableChildren.forEach((child) => setTabIndex(child, -1));\n setChildFocus(focusableChildren[0]);\n }\n\n if (!isNil(tabIndex)) setTabIndex(el, tabIndex);\n setHasRunConfig(true);\n };\n\n const addFocusClass = (evt) => {\n if (!useFalseFocus) {\n evt.currentTarget.classList.add(focusClasses.focused);\n if (classes?.focused) {\n evt.currentTarget.classList.add(classes.focused);\n }\n // add global class HvIsFocused as a marker\n // not to be styled directly, only as helper in specific css queries\n evt.currentTarget.classList.add(\"HvIsFocused\");\n classes?.focus\n ?.split(\" \")\n .forEach((c) => evt.currentTarget.classList.add(c));\n }\n };\n\n const removeFocusClass = () => {\n if (!useFalseFocus) {\n getFocuses().forEach((element) => {\n if (focusClasses.focused) {\n element.classList.remove(focusClasses.focused);\n }\n if (classes?.focused) {\n element.classList.remove(classes.focused);\n }\n // remove the global class HvIsFocused\n element.classList.remove(\"HvIsFocused\");\n classes?.focus?.split(\" \").forEach((c) => element.classList.remove(c));\n });\n }\n };\n\n const onFocus = (evt) => {\n addFocusClass(evt);\n setShowFocus(true);\n // give focus to child element if any focusable\n\n if (childFocus && childFocus.focus) childFocus.focus();\n onFocusStrategy(evt);\n };\n\n const onBlur = () => {\n setShowFocus(false);\n removeFocusClass();\n onBlurStrategy();\n };\n\n const onMouseDown = (evt) => {\n const hasCard = !!evt.currentTarget?.querySelector(\".HvIsCardGridElement\");\n if (strategy === \"grid\" && hasCard) return;\n\n setFocusTo(evt.currentTarget);\n setTabIndex(evt.currentTarget, 0);\n // remove focus outline unless explicitly enabled\n if (!focusOnClick) {\n // TODO this piece of code works only because onMouseDown is happening after the focus event\n // There is nothing in here that guarantees the order of these events, so it may present a problem in the future\n removeFocusClass();\n setShowFocus(false);\n }\n };\n\n const focusAndUpdateIndex = (nextFocus, previousFocus, focusesList) => {\n if (focusesList?.includes(previousFocus)) {\n setTabIndex(previousFocus, -1);\n }\n setTabIndex(nextFocus, 0);\n setFocusTo(nextFocus);\n };\n\n const getEnabledKeys = (currentFocusIndex, jump, listSize) => ({\n right:\n (currentFocusIndex + 1) % jump === 0 ||\n currentFocusIndex + 1 > listSize - 1,\n left: currentFocusIndex % jump === 0,\n up: currentFocusIndex - jump < 0,\n down:\n currentFocusIndex + jump > listSize ||\n currentFocusIndex + jump > listSize - 1,\n });\n\n const onGridKeyDownHandler = (\n evt,\n focuses,\n focusesList,\n currentFocusIndex,\n jump\n ) => {\n const childFocusIsInput = childFocus && childFocus.nodeName === \"INPUT\";\n\n if (\n !isOneOfKeys(evt, [\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Home\",\n \"End\",\n \"Space\",\n \"Enter\",\n ]) ||\n (childFocusIsInput && isKey(evt, \"Enter\"))\n ) {\n // nothing to do\n return;\n }\n\n // we'll do something with the key so prevent default and stop propagation\n // except for Enter and SpaceBar\n if (!isOneOfKeys(evt, [\"Enter\", \"Space\"])) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n const blockedKeys = getEnabledKeys(\n currentFocusIndex,\n jump,\n focusesList.length\n );\n\n switch (evt.code) {\n case \"Space\":\n case \"Enter\":\n if (isBrowser(\"firefox\")) {\n evt.target.click();\n } else {\n evt.currentTarget.click();\n }\n break;\n case \"ArrowUp\":\n if (!blockedKeys.up) {\n focusAndUpdateIndex(\n focuses.jump || focuses.last,\n evt.current,\n focusesList\n );\n }\n break;\n case \"ArrowDown\":\n if (!blockedKeys.down) {\n focusAndUpdateIndex(\n focuses.fall || focuses.first,\n evt.current,\n focusesList\n );\n }\n break;\n case \"ArrowLeft\":\n if (!blockedKeys.left) {\n focusAndUpdateIndex(\n focuses.previous || focuses.last,\n evt.current,\n focusesList\n );\n }\n break;\n case \"ArrowRight\":\n if (!blockedKeys.right) {\n focusAndUpdateIndex(\n focuses.next || focuses.first,\n evt.current,\n focusesList\n );\n }\n break;\n case \"Home\":\n focusAndUpdateIndex(focuses.first, evt.current, focusesList);\n break;\n case \"End\":\n focusAndUpdateIndex(focuses.last, evt.current, focusesList);\n break;\n default:\n }\n };\n\n const onVerticalArrangementHandler = (evt, focuses, focusesList) => {\n const childFocusIsInput = childFocus && childFocus.nodeName === \"INPUT\";\n\n if (\n !isOneOfKeys(evt, [\n \"ArrowUp\",\n \"ArrowDown\",\n \"Home\",\n \"End\",\n \"Space\",\n \"Enter\",\n ]) ||\n (childFocusIsInput && isKey(evt, \"Enter\"))\n ) {\n // nothing to do\n return;\n }\n\n // we'll do something with the key so prevent default and stop propagation\n evt.preventDefault();\n evt.stopPropagation();\n\n switch (evt.code) {\n case \"Space\":\n case \"Enter\":\n evt.target.click();\n break;\n case \"ArrowUp\":\n focusAndUpdateIndex(\n focuses.previous || focuses.last,\n evt.current,\n focusesList\n );\n break;\n case \"ArrowDown\":\n focusAndUpdateIndex(\n focuses.next || focuses.first,\n evt.current,\n focusesList\n );\n break;\n case \"Home\":\n focusAndUpdateIndex(focuses.first, evt.current, focusesList);\n break;\n case \"End\":\n focusAndUpdateIndex(focuses.last, evt.current, focusesList);\n break;\n default:\n }\n };\n\n const onSingleHandler = (evt) => {\n const childFocusIsInput = childFocus && childFocus.nodeName === \"INPUT\";\n\n if (\n !isOneOfKeys(evt, [\"Space\", \"Enter\"]) ||\n (childFocusIsInput && isKey(evt, \"Enter\"))\n ) {\n // nothing to do\n return;\n }\n\n // we'll do something with the key so prevent default and stop propagation\n evt.preventDefault();\n evt.stopPropagation();\n\n evt.currentTarget.click();\n };\n\n const onKeyDown = (evt) => {\n if (rootRef?.current == null) {\n // operating outside of a composite widget\n // nothing to manage, just style and trigger clicks\n onSingleHandler(evt);\n return;\n }\n\n // TODO keep the smart default, but allow to explicitly override if disabled elements should be focusable\n const isDisabledFocusable = strategy === \"menu\";\n const focusesList = getFocuses().filter(\n (el) =>\n isDisabledFocusable ||\n !el.classList.contains(classes?.disabled as string)\n );\n\n const currentFocus = focusesList.indexOf(evt.currentTarget);\n\n const focuses = {\n first: focusesList[0],\n last: focusesList[focusesList.length - 1],\n previous: focusesList[currentFocus - 1],\n next: focusesList[currentFocus + 1],\n fall: focusesList[currentFocus + navigationJump],\n jump: focusesList[currentFocus - navigationJump],\n };\n\n if (strategy === \"grid\") {\n onGridKeyDownHandler(\n evt,\n focuses,\n focusesList,\n currentFocus,\n navigationJump\n );\n return;\n }\n\n // TODO add property for specifying the composite widget orientation\n // TODO implement handler for horizontal orientation\n onVerticalArrangementHandler(evt, focuses, focusesList);\n };\n\n const onKeyUp = (evt) => {\n if (isBrowser(\"firefox\")) evt.preventDefault();\n };\n\n if (disabled) return children;\n\n const focusWrapper = (childrenToWrap) => (\n <StyledFocusWrapper\n className={clsx(\n classes?.externalReference,\n focusClasses.externalReference\n )}\n >\n {childrenToWrap}\n {showFocus && (\n <StyledFalseFocus\n className={clsx(classes?.falseFocus, focusClasses.falseFocus)}\n />\n )}\n </StyledFocusWrapper>\n );\n\n return (\n <ConditionalWrapper condition={useFalseFocus} wrapper={focusWrapper}>\n <Global styles={focusStyles} />\n {React.cloneElement(children, {\n className: clsx(\n children.props.className,\n focusClasses.root,\n classes?.root,\n filterClass,\n selected && clsx(focusClasses.selected, classes?.selected),\n disabledClass && clsx(focusClasses.disabled, classes?.disabled),\n focusDisabled &&\n clsx(focusClasses.focusDisabled, classes?.focusDisabled)\n ),\n ref: config,\n onFocus,\n onBlur,\n onMouseDown,\n onKeyDown,\n onKeyUp,\n selected,\n })}\n </ConditionalWrapper>\n );\n};\n"],"names":["focusStyles","process","env","NODE_ENV","name","styles","map","toString","_EMOTION_STRINGIFIED_CSS_ERROR__","HvFocus","classes","children","configuration","disabledClass","selected","disabled","rootRef","undefined","focusOnClick","focusDisabled","strategy","useFalseFocus","filterClass","navigationJump","showFocus","setShowFocus","useState","childFocus","setChildFocus","hasRunConfig","setHasRunConfig","getFocuses","focuses","current","Array","from","getElementsByClassName","focusClasses","root","setTabIndex","el","tabIndex","elChildFocus","getFocusableChildren","setSelectedTabIndex","firstSelected","find","focus","classList","contains","forEach","clearTabSiblings","onFocusStrategy","evt","currentTarget","onBlurStrategy","document","activeElement","setTimeout","config","focusableChildren","length","child","isNil","addFocusClass","add","focused","split","c","removeFocusClass","element","remove","onFocus","onBlur","onMouseDown","hasCard","querySelector","setFocusTo","focusAndUpdateIndex","nextFocus","previousFocus","focusesList","includes","getEnabledKeys","currentFocusIndex","jump","listSize","right","left","up","down","onGridKeyDownHandler","childFocusIsInput","nodeName","isOneOfKeys","isKey","preventDefault","stopPropagation","blockedKeys","code","isBrowser","target","click","last","fall","first","previous","next","onVerticalArrangementHandler","onSingleHandler","onKeyDown","isDisabledFocusable","filter","currentFocus","indexOf","onKeyUp","focusWrapper","childrenToWrap","_jsxs","StyledFocusWrapper","className","clsx","externalReference","StyledFalseFocus","falseFocus","ConditionalWrapper","condition","wrapper","_jsx","Global","React","cloneElement","props","ref"],"mappings":"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"}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const keyCheck = require("../../utils/keyboardUtils/keyCheck.cjs");
|
|
4
|
-
const isKey = (evt, key) => keyCheck.isKeypress(evt, key);
|
|
5
|
-
const isOneOfKeys = (evt, keys) => keys.some((key) => isKey(evt, key));
|
|
6
3
|
const getFocusableChildren = (el) => (el == null ? void 0 : el.querySelectorAll("input, button, select, textarea, a[href]")) || [];
|
|
7
4
|
const setFocusTo = (el) => {
|
|
8
5
|
el.focus();
|
|
9
6
|
};
|
|
10
7
|
exports.getFocusableChildren = getFocusableChildren;
|
|
11
|
-
exports.isKey = isKey;
|
|
12
|
-
exports.isOneOfKeys = isOneOfKeys;
|
|
13
8
|
exports.setFocusTo = setFocusTo;
|
|
14
9
|
//# sourceMappingURL=utils.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs","sources":["../../../../src/components/Focus/utils.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"utils.cjs","sources":["../../../../src/components/Focus/utils.ts"],"sourcesContent":["export const getFocusableChildren = (el) =>\n el?.querySelectorAll(\"input, button, select, textarea, a[href]\") || [];\n\nexport const setFocusTo = (el) => {\n el.focus();\n};\n"],"names":["getFocusableChildren","el","querySelectorAll","setFocusTo","focus"],"mappings":";;AAAO,MAAMA,uBAAwBC,CACnCA,QAAAA,yBAAIC,iBAAiB,gDAA+C,CAAE;AAEjE,MAAMC,aAAcF,CAAO,OAAA;AAChCA,KAAGG,MAAM;AACX;;;"}
|
|
@@ -12,6 +12,8 @@ const HvMenuBar = ({
|
|
|
12
12
|
data = [],
|
|
13
13
|
onClick,
|
|
14
14
|
type = "menubar",
|
|
15
|
+
levels,
|
|
16
|
+
currentLevel,
|
|
15
17
|
className
|
|
16
18
|
}) => {
|
|
17
19
|
const selectionPath = React.useContext(SelectionContext.SelectionContext);
|
|
@@ -29,7 +31,9 @@ const HvMenuBar = ({
|
|
|
29
31
|
children: data.map((item) => /* @__PURE__ */ jsxRuntime.jsx(MenuItem.HvMenuItem, {
|
|
30
32
|
item,
|
|
31
33
|
type,
|
|
32
|
-
onClick
|
|
34
|
+
onClick,
|
|
35
|
+
levels,
|
|
36
|
+
currentLevel
|
|
33
37
|
}, item.id))
|
|
34
38
|
})
|
|
35
39
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuBar.cjs","sources":["../../../../../../src/components/Header/Navigation/MenuBar/MenuBar.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { MouseEvent, useContext } from \"react\";\nimport { HvHeaderNavigationItemProp } from \"@core/components\";\nimport { HvBaseProps } from \"@core/types\";\nimport { HvMenuItem } from \"../MenuItem\";\nimport { SelectionContext } from \"../utils/SelectionContext\";\nimport { MenuBarRoot, MenuBarUl } from \"./MenuBar.styles\";\nimport headerMenuBarClasses from \"./menuBarClasses\";\n\nexport interface HvMenuBarProps extends HvBaseProps<HTMLDivElement, \"onClick\"> {\n data: HvHeaderNavigationItemProp[];\n type: string;\n onClick?: (event: MouseEvent, selection: HvHeaderNavigationItemProp) => void;\n}\n\nexport const HvMenuBar = ({\n id,\n data = [],\n onClick,\n type = \"menubar\",\n className,\n}: HvMenuBarProps) => {\n const selectionPath = useContext(SelectionContext);\n\n const isMenu = type === \"menu\";\n\n const isActive =\n isMenu && data.filter((item) => item.id === selectionPath?.[1]).length > 0;\n\n return (\n <MenuBarRoot\n className={clsx(\n className,\n isMenu && headerMenuBarClasses.hidden,\n isActive && headerMenuBarClasses.active\n )}\n $type={type}\n $hidden={isMenu}\n $active={isActive}\n >\n <MenuBarUl id={id} onFocus={() => {}}>\n {data.map((item: HvHeaderNavigationItemProp) => (\n <HvMenuItem
|
|
1
|
+
{"version":3,"file":"MenuBar.cjs","sources":["../../../../../../src/components/Header/Navigation/MenuBar/MenuBar.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { MouseEvent, useContext } from \"react\";\nimport { HvHeaderNavigationItemProp } from \"@core/components\";\nimport { HvBaseProps } from \"@core/types\";\nimport { HvMenuItem } from \"../MenuItem\";\nimport { SelectionContext } from \"../utils/SelectionContext\";\nimport { MenuBarRoot, MenuBarUl } from \"./MenuBar.styles\";\nimport headerMenuBarClasses from \"./menuBarClasses\";\n\nexport interface HvMenuBarProps extends HvBaseProps<HTMLDivElement, \"onClick\"> {\n data: HvHeaderNavigationItemProp[];\n type: string;\n onClick?: (event: MouseEvent, selection: HvHeaderNavigationItemProp) => void;\n levels: number;\n currentLevel: number;\n}\n\nexport const HvMenuBar = ({\n id,\n data = [],\n onClick,\n type = \"menubar\",\n levels,\n currentLevel,\n className,\n}: HvMenuBarProps) => {\n const selectionPath = useContext(SelectionContext);\n\n const isMenu = type === \"menu\";\n\n const isActive =\n isMenu && data.filter((item) => item.id === selectionPath?.[1]).length > 0;\n\n return (\n <MenuBarRoot\n className={clsx(\n className,\n isMenu && headerMenuBarClasses.hidden,\n isActive && headerMenuBarClasses.active\n )}\n $type={type}\n $hidden={isMenu}\n $active={isActive}\n >\n <MenuBarUl id={id} onFocus={() => {}}>\n {data.map((item: HvHeaderNavigationItemProp) => (\n <HvMenuItem\n key={item.id}\n item={item}\n type={type}\n onClick={onClick}\n levels={levels}\n currentLevel={currentLevel}\n />\n ))}\n </MenuBarUl>\n </MenuBarRoot>\n );\n};\n"],"names":["HvMenuBar","id","data","onClick","type","levels","currentLevel","className","selectionPath","useContext","SelectionContext","isMenu","isActive","filter","item","length","MenuBarRoot","clsx","headerMenuBarClasses","hidden","active","$type","$hidden","$active","children","MenuBarUl","onFocus","map","HvMenuItem"],"mappings":";;;;;;;;;AAiBO,MAAMA,YAAYA,CAAC;AAAA,EACxBC;AAAAA,EACAC,OAAO,CAAE;AAAA,EACTC;AAAAA,EACAC,OAAO;AAAA,EACPC;AAAAA,EACAC;AAAAA,EACAC;AACc,MAAM;AACdC,QAAAA,gBAAgBC,iBAAWC,iBAAAA,gBAAgB;AAEjD,QAAMC,SAASP,SAAS;AAElBQ,QAAAA,WACJD,UAAUT,KAAKW,OAAQC,CAAAA,SAASA,KAAKb,QAAOO,+CAAgB,GAAE,EAAEO,SAAS;AAE3E,wCACGC,eAAAA,aAAW;AAAA,IACVT,WAAWU,KAAAA,KACTV,WACAI,UAAUO,uBAAqBC,QAC/BP,YAAYM,uBAAqBE,MACnC;AAAA,IACAC,OAAOjB;AAAAA,IACPkB,SAASX;AAAAA,IACTY,SAASX;AAAAA,IAASY,yCAEjBC,0BAAS;AAAA,MAACxB;AAAAA,MAAQyB,SAASA,MAAM;AAAA,MAAC;AAAA,MAAEF,UAClCtB,KAAKyB,IAAI,CAACb,wCACRc,SAAAA,YAAU;AAAA,QAETd;AAAAA,QACAV;AAAAA,QACAD;AAAAA,QACAE;AAAAA,QACAC;AAAAA,MAAAA,GALKQ,KAAKb,EAMX,CACF;AAAA,IAAA,CACQ;AAAA,EAAA,CACA;AAEjB;;"}
|