@elliemae/ds-global-header 3.0.0-next.9 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/DSGlobalHeader.js +61 -0
- package/dist/cjs/DSGlobalHeader.js.map +7 -0
- package/dist/cjs/DSGlobalHeaderContext.js +30 -0
- package/dist/cjs/DSGlobalHeaderContext.js.map +7 -0
- package/dist/cjs/config/useGlobalHeader.js +15 -23
- package/dist/cjs/config/useGlobalHeader.js.map +2 -2
- package/dist/cjs/config/useValidateProps.js +9 -29
- package/dist/cjs/config/useValidateProps.js.map +2 -2
- package/dist/cjs/config/validateHelpers.js +9 -16
- package/dist/cjs/config/validateHelpers.js.map +2 -2
- package/dist/cjs/exported-related/DSGlobalHeaderDatatestid.js +58 -0
- package/dist/cjs/exported-related/DSGlobalHeaderDatatestid.js.map +7 -0
- package/dist/cjs/exported-related/index.js +23 -0
- package/dist/cjs/exported-related/index.js.map +7 -0
- package/dist/cjs/exported-related/theming.js +60 -0
- package/dist/cjs/exported-related/theming.js.map +7 -0
- package/dist/cjs/index.js +14 -19
- package/dist/cjs/index.js.map +3 -3
- package/dist/cjs/parts/Breadcrumb/GlobalHeaderBreadcrumb.js +96 -0
- package/dist/cjs/parts/Breadcrumb/GlobalHeaderBreadcrumb.js.map +7 -0
- package/dist/cjs/{components → parts}/Breadcrumb/PureBreadcrumb.js +39 -26
- package/dist/cjs/parts/Breadcrumb/PureBreadcrumb.js.map +7 -0
- package/dist/cjs/parts/Breadcrumb/styles.js +101 -0
- package/dist/cjs/parts/Breadcrumb/styles.js.map +7 -0
- package/dist/cjs/parts/Breadcrumb/useGlobalHeaderBreadcrumb.js +65 -0
- package/dist/cjs/parts/Breadcrumb/useGlobalHeaderBreadcrumb.js.map +7 -0
- package/dist/cjs/parts/GlobalHeaderContainer.js +56 -0
- package/dist/cjs/parts/GlobalHeaderContainer.js.map +7 -0
- package/dist/cjs/parts/Logo/GlobalHeaderLogo.js +43 -0
- package/dist/cjs/parts/Logo/GlobalHeaderLogo.js.map +7 -0
- package/dist/cjs/parts/Logo/styles.js +31 -0
- package/dist/cjs/parts/Logo/styles.js.map +7 -0
- package/dist/cjs/parts/Toolbar/GlobalHeaderToolbar.js +160 -0
- package/dist/cjs/parts/Toolbar/GlobalHeaderToolbar.js.map +7 -0
- package/dist/cjs/{outOfTheBox → parts/Toolbar/outOfTheBox}/AppPicker/AppPicker.js +36 -37
- package/dist/cjs/parts/Toolbar/outOfTheBox/AppPicker/AppPicker.js.map +7 -0
- package/dist/cjs/{outOfTheBox → parts/Toolbar/outOfTheBox}/PopupMenu/PopupMenu.js +54 -38
- package/dist/cjs/parts/Toolbar/outOfTheBox/PopupMenu/PopupMenu.js.map +7 -0
- package/dist/cjs/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/PopupMenuContent.js +123 -0
- package/dist/cjs/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/PopupMenuContent.js.map +7 -0
- package/dist/cjs/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/styles.js +66 -0
- package/dist/cjs/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/styles.js.map +7 -0
- package/dist/cjs/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/usePopupMenuContent.js +74 -0
- package/dist/cjs/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/usePopupMenuContent.js.map +7 -0
- package/dist/cjs/{outOfTheBox → parts/Toolbar/outOfTheBox}/SearchToggle/SearchToggle.js +54 -41
- package/dist/cjs/parts/Toolbar/outOfTheBox/SearchToggle/SearchToggle.js.map +7 -0
- package/dist/cjs/{outOfTheBox → parts/Toolbar/outOfTheBox}/SearchToggle/styles.js +16 -20
- package/dist/cjs/parts/Toolbar/outOfTheBox/SearchToggle/styles.js.map +7 -0
- package/dist/cjs/parts/Toolbar/outOfTheBox/index.js +24 -0
- package/dist/cjs/parts/Toolbar/outOfTheBox/index.js.map +7 -0
- package/dist/cjs/parts/Toolbar/styles.js +40 -0
- package/dist/cjs/parts/Toolbar/styles.js.map +7 -0
- package/dist/cjs/parts/Toolbar/useGlobalHeaderToolbar.js +65 -0
- package/dist/cjs/parts/Toolbar/useGlobalHeaderToolbar.js.map +7 -0
- package/dist/cjs/parts/styles.js +68 -0
- package/dist/cjs/parts/styles.js.map +7 -0
- package/dist/cjs/react-desc-prop-types.js +76 -0
- package/dist/cjs/react-desc-prop-types.js.map +7 -0
- package/dist/cjs/sharedTypes.js +20 -0
- package/dist/cjs/sharedTypes.js.map +7 -0
- package/dist/esm/DSGlobalHeader.js +39 -0
- package/dist/esm/DSGlobalHeader.js.map +7 -0
- package/dist/esm/DSGlobalHeaderContext.js +8 -0
- package/dist/esm/DSGlobalHeaderContext.js.map +7 -0
- package/dist/esm/config/useGlobalHeader.js +6 -7
- package/dist/esm/config/useGlobalHeader.js.map +2 -2
- package/dist/esm/config/useValidateProps.js +0 -13
- package/dist/esm/config/useValidateProps.js.map +2 -2
- package/dist/esm/config/validateHelpers.js.map +2 -2
- package/dist/esm/exported-related/DSGlobalHeaderDatatestid.js +36 -0
- package/dist/esm/exported-related/DSGlobalHeaderDatatestid.js.map +7 -0
- package/dist/esm/exported-related/index.js +4 -0
- package/dist/esm/exported-related/index.js.map +7 -0
- package/dist/esm/exported-related/theming.js +38 -0
- package/dist/esm/exported-related/theming.js.map +7 -0
- package/dist/esm/index.js +3 -2
- package/dist/esm/index.js.map +3 -3
- package/dist/esm/parts/Breadcrumb/GlobalHeaderBreadcrumb.js +76 -0
- package/dist/esm/parts/Breadcrumb/GlobalHeaderBreadcrumb.js.map +7 -0
- package/dist/esm/{components → parts}/Breadcrumb/PureBreadcrumb.js +31 -11
- package/dist/esm/parts/Breadcrumb/PureBreadcrumb.js.map +7 -0
- package/dist/esm/parts/Breadcrumb/styles.js +79 -0
- package/dist/esm/parts/Breadcrumb/styles.js.map +7 -0
- package/dist/esm/parts/Breadcrumb/useGlobalHeaderBreadcrumb.js +43 -0
- package/dist/esm/parts/Breadcrumb/useGlobalHeaderBreadcrumb.js.map +7 -0
- package/dist/esm/{config/useGetPropsWithDefaults.js → parts/GlobalHeaderContainer.js} +17 -8
- package/dist/esm/parts/GlobalHeaderContainer.js.map +7 -0
- package/dist/esm/parts/Logo/GlobalHeaderLogo.js +21 -0
- package/dist/esm/parts/Logo/GlobalHeaderLogo.js.map +7 -0
- package/dist/esm/parts/Logo/styles.js +9 -0
- package/dist/esm/parts/Logo/styles.js.map +7 -0
- package/dist/esm/parts/Toolbar/GlobalHeaderToolbar.js +140 -0
- package/dist/esm/parts/Toolbar/GlobalHeaderToolbar.js.map +7 -0
- package/dist/esm/{outOfTheBox → parts/Toolbar/outOfTheBox}/AppPicker/AppPicker.js +29 -23
- package/dist/esm/parts/Toolbar/outOfTheBox/AppPicker/AppPicker.js.map +7 -0
- package/dist/esm/{outOfTheBox → parts/Toolbar/outOfTheBox}/PopupMenu/PopupMenu.js +46 -23
- package/dist/esm/parts/Toolbar/outOfTheBox/PopupMenu/PopupMenu.js.map +7 -0
- package/dist/esm/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/PopupMenuContent.js +103 -0
- package/dist/esm/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/PopupMenuContent.js.map +7 -0
- package/dist/esm/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/styles.js +44 -0
- package/dist/esm/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/styles.js.map +7 -0
- package/dist/esm/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/usePopupMenuContent.js +52 -0
- package/dist/esm/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/usePopupMenuContent.js.map +7 -0
- package/dist/esm/{outOfTheBox → parts/Toolbar/outOfTheBox}/SearchToggle/SearchToggle.js +45 -25
- package/dist/esm/parts/Toolbar/outOfTheBox/SearchToggle/SearchToggle.js.map +7 -0
- package/dist/esm/{outOfTheBox → parts/Toolbar/outOfTheBox}/SearchToggle/styles.js +7 -4
- package/dist/esm/parts/Toolbar/outOfTheBox/SearchToggle/styles.js.map +7 -0
- package/dist/esm/{outOfTheBox → parts/Toolbar/outOfTheBox}/index.js +0 -0
- package/dist/esm/{outOfTheBox → parts/Toolbar/outOfTheBox}/index.js.map +1 -1
- package/dist/esm/parts/Toolbar/styles.js +18 -0
- package/dist/esm/parts/Toolbar/styles.js.map +7 -0
- package/dist/esm/parts/Toolbar/useGlobalHeaderToolbar.js +43 -0
- package/dist/esm/parts/Toolbar/useGlobalHeaderToolbar.js.map +7 -0
- package/dist/esm/parts/styles.js +46 -0
- package/dist/esm/parts/styles.js.map +7 -0
- package/dist/esm/react-desc-prop-types.js +56 -0
- package/dist/esm/react-desc-prop-types.js.map +7 -0
- package/dist/esm/sharedTypes.js +2 -0
- package/dist/esm/{GlobalHeaderTypes.js.map → sharedTypes.js.map} +0 -0
- package/package.json +17 -17
- package/dist/cjs/GlobalHeader.js +0 -57
- package/dist/cjs/GlobalHeader.js.map +0 -7
- package/dist/cjs/GlobalHeaderContainer.js +0 -41
- package/dist/cjs/GlobalHeaderContainer.js.map +0 -7
- package/dist/cjs/GlobalHeaderContext.js +0 -46
- package/dist/cjs/GlobalHeaderContext.js.map +0 -7
- package/dist/cjs/GlobalHeaderTypes.js +0 -27
- package/dist/cjs/GlobalHeaderTypes.js.map +0 -7
- package/dist/cjs/components/Breadcrumb/GlobalHeaderBreadcrumb.js +0 -110
- package/dist/cjs/components/Breadcrumb/GlobalHeaderBreadcrumb.js.map +0 -7
- package/dist/cjs/components/Breadcrumb/PureBreadcrumb.js.map +0 -7
- package/dist/cjs/components/Breadcrumb/styles.js +0 -83
- package/dist/cjs/components/Breadcrumb/styles.js.map +0 -7
- package/dist/cjs/components/Title/GlobalHeaderTitle.js +0 -48
- package/dist/cjs/components/Title/GlobalHeaderTitle.js.map +0 -7
- package/dist/cjs/components/Toolbar/GlobalHeaderToolbar.js +0 -49
- package/dist/cjs/components/Toolbar/GlobalHeaderToolbar.js.map +0 -7
- package/dist/cjs/components/Toolbar/ToolbarItems.js +0 -121
- package/dist/cjs/components/Toolbar/ToolbarItems.js.map +0 -7
- package/dist/cjs/components/Toolbar/styles.js +0 -61
- package/dist/cjs/components/Toolbar/styles.js.map +0 -7
- package/dist/cjs/config/useGetPropsWithDefaults.js +0 -54
- package/dist/cjs/config/useGetPropsWithDefaults.js.map +0 -7
- package/dist/cjs/defaultProps.js +0 -41
- package/dist/cjs/defaultProps.js.map +0 -7
- package/dist/cjs/outOfTheBox/AppPicker/AppPicker.js.map +0 -7
- package/dist/cjs/outOfTheBox/PopupMenu/PopupMenu.js.map +0 -7
- package/dist/cjs/outOfTheBox/PopupMenu/PopupMenuContent.js +0 -97
- package/dist/cjs/outOfTheBox/PopupMenu/PopupMenuContent.js.map +0 -7
- package/dist/cjs/outOfTheBox/PopupMenu/styles.js +0 -67
- package/dist/cjs/outOfTheBox/PopupMenu/styles.js.map +0 -7
- package/dist/cjs/outOfTheBox/SearchToggle/SearchToggle.js.map +0 -7
- package/dist/cjs/outOfTheBox/SearchToggle/styles.js.map +0 -7
- package/dist/cjs/outOfTheBox/index.js +0 -30
- package/dist/cjs/outOfTheBox/index.js.map +0 -7
- package/dist/cjs/propTypes.js +0 -56
- package/dist/cjs/propTypes.js.map +0 -7
- package/dist/cjs/styles.js +0 -43
- package/dist/cjs/styles.js.map +0 -7
- package/dist/esm/GlobalHeader.js +0 -28
- package/dist/esm/GlobalHeader.js.map +0 -7
- package/dist/esm/GlobalHeaderContainer.js +0 -12
- package/dist/esm/GlobalHeaderContainer.js.map +0 -7
- package/dist/esm/GlobalHeaderContext.js +0 -17
- package/dist/esm/GlobalHeaderContext.js.map +0 -7
- package/dist/esm/GlobalHeaderTypes.js +0 -2
- package/dist/esm/components/Breadcrumb/GlobalHeaderBreadcrumb.js +0 -83
- package/dist/esm/components/Breadcrumb/GlobalHeaderBreadcrumb.js.map +0 -7
- package/dist/esm/components/Breadcrumb/PureBreadcrumb.js.map +0 -7
- package/dist/esm/components/Breadcrumb/styles.js +0 -54
- package/dist/esm/components/Breadcrumb/styles.js.map +0 -7
- package/dist/esm/components/Title/GlobalHeaderTitle.js +0 -19
- package/dist/esm/components/Title/GlobalHeaderTitle.js.map +0 -7
- package/dist/esm/components/Toolbar/GlobalHeaderToolbar.js +0 -20
- package/dist/esm/components/Toolbar/GlobalHeaderToolbar.js.map +0 -7
- package/dist/esm/components/Toolbar/ToolbarItems.js +0 -94
- package/dist/esm/components/Toolbar/ToolbarItems.js.map +0 -7
- package/dist/esm/components/Toolbar/styles.js +0 -32
- package/dist/esm/components/Toolbar/styles.js.map +0 -7
- package/dist/esm/config/useGetPropsWithDefaults.js.map +0 -7
- package/dist/esm/defaultProps.js +0 -12
- package/dist/esm/defaultProps.js.map +0 -7
- package/dist/esm/outOfTheBox/AppPicker/AppPicker.js.map +0 -7
- package/dist/esm/outOfTheBox/PopupMenu/PopupMenu.js.map +0 -7
- package/dist/esm/outOfTheBox/PopupMenu/PopupMenuContent.js +0 -70
- package/dist/esm/outOfTheBox/PopupMenu/PopupMenuContent.js.map +0 -7
- package/dist/esm/outOfTheBox/PopupMenu/styles.js +0 -38
- package/dist/esm/outOfTheBox/PopupMenu/styles.js.map +0 -7
- package/dist/esm/outOfTheBox/SearchToggle/SearchToggle.js.map +0 -7
- package/dist/esm/outOfTheBox/SearchToggle/styles.js.map +0 -7
- package/dist/esm/propTypes.js +0 -27
- package/dist/esm/propTypes.js.map +0 -7
- package/dist/esm/styles.js +0 -14
- package/dist/esm/styles.js.map +0 -7
|
@@ -27,24 +27,26 @@ var __objRest = (source, exclude) => {
|
|
|
27
27
|
return target;
|
|
28
28
|
};
|
|
29
29
|
import * as React from "react";
|
|
30
|
-
import React2, { useState, useRef, useCallback
|
|
30
|
+
import React2, { useState, useRef, useCallback } from "react";
|
|
31
31
|
import { DSAppPicker } from "@elliemae/ds-app-picker";
|
|
32
|
-
import { mergeRefs } from "@elliemae/ds-utilities";
|
|
32
|
+
import { mergeRefs, getGlobalAttributes, useCallbackAfterRender } from "@elliemae/ds-utilities";
|
|
33
33
|
import { MenuPicker } from "@elliemae/ds-icons";
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
34
|
+
import { StyledButton } from "../../../styles";
|
|
35
|
+
import { DSGlobalHeaderDatatestid } from "../../../../exported-related";
|
|
36
36
|
const AppPicker = (_a) => {
|
|
37
37
|
var _b = _a, {
|
|
38
38
|
label,
|
|
39
39
|
id,
|
|
40
|
+
setRef,
|
|
40
41
|
componentProps
|
|
41
42
|
} = _b, otherProps = __objRest(_b, [
|
|
42
43
|
"label",
|
|
43
44
|
"id",
|
|
45
|
+
"setRef",
|
|
44
46
|
"componentProps"
|
|
45
47
|
]);
|
|
46
48
|
const [isOpen, setIsOpen] = useState(false);
|
|
47
|
-
const
|
|
49
|
+
const internalTriggerRef = useRef(null);
|
|
48
50
|
const {
|
|
49
51
|
apps,
|
|
50
52
|
icon,
|
|
@@ -60,15 +62,17 @@ const AppPicker = (_a) => {
|
|
|
60
62
|
triggerRef,
|
|
61
63
|
triggerOnClick
|
|
62
64
|
} = componentProps;
|
|
65
|
+
const schedule = useCallbackAfterRender();
|
|
66
|
+
const focusTrigger = useCallback(() => internalTriggerRef.current?.focus(), []);
|
|
63
67
|
const handleTriggerKeyDown = useCallback((e) => {
|
|
64
|
-
if (e.code === "Enter" || e.code === "Space") {
|
|
68
|
+
if (e.code === "Enter" || e.code === "Space" || e.code === "ArrowDown") {
|
|
65
69
|
setIsOpen(true);
|
|
66
70
|
}
|
|
67
71
|
}, []);
|
|
68
72
|
const handleAppPickerOnKeyDown = useCallback((e) => {
|
|
69
|
-
if (e.
|
|
73
|
+
if (e.key === "Escape") {
|
|
70
74
|
setIsOpen(false);
|
|
71
|
-
|
|
75
|
+
schedule(focusTrigger);
|
|
72
76
|
}
|
|
73
77
|
}, []);
|
|
74
78
|
const handleOnClickOutside = useCallback(() => {
|
|
@@ -77,20 +81,6 @@ const AppPicker = (_a) => {
|
|
|
77
81
|
const handleOnClick = useCallback(() => {
|
|
78
82
|
setIsOpen(true);
|
|
79
83
|
}, []);
|
|
80
|
-
const renderTrigger = useMemo(() => ({ ref }) => /* @__PURE__ */ React2.createElement("div", {
|
|
81
|
-
ref
|
|
82
|
-
}, /* @__PURE__ */ React2.createElement(Button, __spreadValues({
|
|
83
|
-
onClick: triggerOnClick ?? handleOnClick,
|
|
84
|
-
onKeyDown: handleTriggerKeyDown,
|
|
85
|
-
ref: mergeRefs(buttonRef, triggerRef),
|
|
86
|
-
title: label,
|
|
87
|
-
"data-testid": "gh-toolbar-item",
|
|
88
|
-
id
|
|
89
|
-
}, getDataProps(otherProps)), /* @__PURE__ */ React2.createElement(MenuPicker, {
|
|
90
|
-
fill: "#FFF",
|
|
91
|
-
width: 20.73,
|
|
92
|
-
height: 20.73
|
|
93
|
-
}))), [triggerOnClick, handleOnClick, handleTriggerKeyDown, triggerRef, label, id, otherProps]);
|
|
94
84
|
return /* @__PURE__ */ React2.createElement(DSAppPicker, {
|
|
95
85
|
apps,
|
|
96
86
|
customApps,
|
|
@@ -100,7 +90,23 @@ const AppPicker = (_a) => {
|
|
|
100
90
|
onKeyDown: userOnKeyDown ?? handleAppPickerOnKeyDown,
|
|
101
91
|
actionRef,
|
|
102
92
|
onClickOutside: userOnClickOutside ?? handleOnClickOutside,
|
|
103
|
-
renderTrigger: userRenderTrigger
|
|
93
|
+
renderTrigger: userRenderTrigger || (({ ref }) => /* @__PURE__ */ React2.createElement(StyledButton, __spreadValues({
|
|
94
|
+
onClick: triggerOnClick ?? handleOnClick,
|
|
95
|
+
onKeyDown: handleTriggerKeyDown,
|
|
96
|
+
ref: (buttonRef) => {
|
|
97
|
+
setRef(buttonRef);
|
|
98
|
+
mergeRefs(internalTriggerRef, triggerRef, ref)(buttonRef);
|
|
99
|
+
},
|
|
100
|
+
"aria-label": label,
|
|
101
|
+
"data-testid": DSGlobalHeaderDatatestid.MENUBAR.ITEM_BUTTON,
|
|
102
|
+
role: "menuitem",
|
|
103
|
+
"aria-haspopup": true,
|
|
104
|
+
"aria-expanded": userIsOpen ?? isOpen,
|
|
105
|
+
id
|
|
106
|
+
}, getGlobalAttributes(otherProps)), /* @__PURE__ */ React2.createElement(MenuPicker, {
|
|
107
|
+
width: 20.73,
|
|
108
|
+
height: 20.73
|
|
109
|
+
}))),
|
|
104
110
|
isOpen: userIsOpen ?? isOpen,
|
|
105
111
|
onClose,
|
|
106
112
|
triggerRef
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../src/parts/Toolbar/outOfTheBox/AppPicker/AppPicker.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useState, useRef, useCallback } from 'react';\nimport { DSAppPicker } from '@elliemae/ds-app-picker';\nimport { mergeRefs, getGlobalAttributes, useCallbackAfterRender } from '@elliemae/ds-utilities';\nimport { MenuPicker } from '@elliemae/ds-icons';\nimport { StyledButton } from '../../../styles';\nimport { DSGlobalHeaderDatatestid } from '../../../../exported-related';\nimport type { DSGlobalHeaderInternalsT } from '../../../../sharedTypes';\n\nexport const AppPicker = ({\n label,\n id,\n setRef,\n componentProps,\n ...otherProps\n}: DSGlobalHeaderInternalsT.AppPickerProps): JSX.Element => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const internalTriggerRef = useRef<HTMLButtonElement>(null);\n\n const {\n apps,\n icon,\n customApps,\n sectionTitle,\n customSectionTitle,\n actionRef,\n isOpen: userIsOpen,\n onKeyDown: userOnKeyDown,\n onClickOutside: userOnClickOutside,\n renderTrigger: userRenderTrigger,\n onClose,\n triggerRef,\n triggerOnClick,\n } = componentProps;\n\n const schedule = useCallbackAfterRender();\n\n const focusTrigger = useCallback(() => internalTriggerRef.current?.focus(), []);\n\n const handleTriggerKeyDown: React.KeyboardEventHandler = useCallback((e) => {\n if (e.code === 'Enter' || e.code === 'Space' || e.code === 'ArrowDown') {\n setIsOpen(true);\n }\n }, []);\n\n const handleAppPickerOnKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n setIsOpen(false);\n schedule(focusTrigger);\n }\n }, []);\n\n const handleOnClickOutside = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n const handleOnClick: React.MouseEventHandler = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n return (\n <DSAppPicker\n apps={apps}\n customApps={customApps}\n sectionTitle={sectionTitle}\n customSectionTitle={customSectionTitle}\n icon={icon}\n onKeyDown={userOnKeyDown ?? handleAppPickerOnKeyDown}\n actionRef={actionRef}\n onClickOutside={userOnClickOutside ?? handleOnClickOutside}\n renderTrigger={\n userRenderTrigger ||\n (({ ref }: { ref: React.MutableRefObject<HTMLButtonElement> }) => (\n <StyledButton\n onClick={triggerOnClick ?? handleOnClick}\n onKeyDown={handleTriggerKeyDown}\n ref={(buttonRef: HTMLButtonElement) => {\n setRef(buttonRef);\n mergeRefs(internalTriggerRef, triggerRef, ref)(buttonRef);\n }}\n aria-label={label}\n data-testid={DSGlobalHeaderDatatestid.MENUBAR.ITEM_BUTTON}\n role=\"menuitem\"\n aria-haspopup\n aria-expanded={userIsOpen ?? isOpen}\n id={id}\n {...getGlobalAttributes(otherProps)}\n >\n <MenuPicker width={20.73} height={20.73} />\n </StyledButton>\n ))\n }\n isOpen={userIsOpen ?? isOpen}\n onClose={onClose}\n triggerRef={triggerRef}\n />\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AAGO,MAAM,YAAY,CAAC,OAMkC;AANlC,eACxB;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MAJwB,IAKrB,uBALqB,IAKrB;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,CAAC,QAAQ,aAAa,SAAkB,KAAK;AACnD,QAAM,qBAAqB,OAA0B,IAAI;AAEzD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,MACE;AAEJ,QAAM,WAAW,uBAAuB;AAExC,QAAM,eAAe,YAAY,MAAM,mBAAmB,SAAS,MAAM,GAAG,CAAC,CAAC;AAE9E,QAAM,uBAAmD,YAAY,CAAC,MAAM;AAC1E,QAAI,EAAE,SAAS,WAAW,EAAE,SAAS,WAAW,EAAE,SAAS,aAAa;AACtE,gBAAU,IAAI;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,2BAA2B,YAAY,CAAC,MAA2B;AACvE,QAAI,EAAE,QAAQ,UAAU;AACtB,gBAAU,KAAK;AACf,eAAS,YAAY;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,uBAAuB,YAAY,MAAM;AAC7C,cAAU,KAAK;AAAA,EACjB,GAAG,CAAC,CAAC;AAEL,QAAM,gBAAyC,YAAY,MAAM;AAC/D,cAAU,IAAI;AAAA,EAChB,GAAG,CAAC,CAAC;AAEL,SACE,qCAAC;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,iBAAiB;AAAA,IAC5B;AAAA,IACA,gBAAgB,sBAAsB;AAAA,IACtC,eACE,qBACC,EAAC,EAAE,UACF,qCAAC;AAAA,MACC,SAAS,kBAAkB;AAAA,MAC3B,WAAW;AAAA,MACX,KAAK,CAAC,cAAiC;AACrC,eAAO,SAAS;AAChB,kBAAU,oBAAoB,YAAY,GAAG,EAAE,SAAS;AAAA,MAC1D;AAAA,MACA,cAAY;AAAA,MACZ,eAAa,yBAAyB,QAAQ;AAAA,MAC9C,MAAK;AAAA,MACL,iBAAa;AAAA,MACb,iBAAe,cAAc;AAAA,MAC7B;AAAA,OACI,oBAAoB,UAAU,IAElC,qCAAC;AAAA,MAAW,OAAO;AAAA,MAAO,QAAQ;AAAA,KAAO,CAC3C;AAAA,IAGJ,QAAQ,cAAc;AAAA,IACtB;AAAA,IACA;AAAA,GACF;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -27,13 +27,28 @@ var __objRest = (source, exclude) => {
|
|
|
27
27
|
return target;
|
|
28
28
|
};
|
|
29
29
|
import * as React from "react";
|
|
30
|
-
import React2, { useState, useCallback
|
|
30
|
+
import React2, { useState, useCallback } from "react";
|
|
31
|
+
import { useGetGlobalAttributes } from "@elliemae/ds-utilities";
|
|
31
32
|
import { DSPopperJS } from "@elliemae/ds-popperjs";
|
|
32
|
-
import { PopupMenuContent } from "./PopupMenuContent";
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
33
|
+
import { PopupMenuContent } from "./menuContent/PopupMenuContent";
|
|
34
|
+
import { StyledButton } from "../../../styles";
|
|
35
|
+
import { DSGlobalHeaderDatatestid } from "../../../../exported-related";
|
|
35
36
|
const PopupMenu = (_a) => {
|
|
36
|
-
var _b = _a, {
|
|
37
|
+
var _b = _a, {
|
|
38
|
+
Icon,
|
|
39
|
+
title,
|
|
40
|
+
onClick,
|
|
41
|
+
id,
|
|
42
|
+
setRef,
|
|
43
|
+
componentProps
|
|
44
|
+
} = _b, otherProps = __objRest(_b, [
|
|
45
|
+
"Icon",
|
|
46
|
+
"title",
|
|
47
|
+
"onClick",
|
|
48
|
+
"id",
|
|
49
|
+
"setRef",
|
|
50
|
+
"componentProps"
|
|
51
|
+
]);
|
|
37
52
|
const [isOpen, setIsOpen] = useState(false);
|
|
38
53
|
const [buttonRef, setButtonRef] = useState(null);
|
|
39
54
|
const {
|
|
@@ -44,8 +59,8 @@ const PopupMenu = (_a) => {
|
|
|
44
59
|
options,
|
|
45
60
|
closeOnClick
|
|
46
61
|
} = componentProps;
|
|
47
|
-
const
|
|
48
|
-
if (e.code === "
|
|
62
|
+
const handleOnKeyDown = useCallback((e) => {
|
|
63
|
+
if (e.code === "ArrowDown") {
|
|
49
64
|
setIsOpen(true);
|
|
50
65
|
}
|
|
51
66
|
if (onKeyPress)
|
|
@@ -60,34 +75,42 @@ const PopupMenu = (_a) => {
|
|
|
60
75
|
const handleTriggerOnClick = useCallback((e) => {
|
|
61
76
|
if (userIsOpen === void 0)
|
|
62
77
|
setIsOpen(true);
|
|
63
|
-
onClick
|
|
78
|
+
if (onClick)
|
|
79
|
+
onClick(e);
|
|
64
80
|
}, [onClick, userIsOpen]);
|
|
65
81
|
const handleItemClick = useCallback(() => {
|
|
66
82
|
if (closeOnClick && userIsOpen === void 0)
|
|
67
83
|
handleOnClose();
|
|
68
84
|
}, [closeOnClick, handleOnClose, userIsOpen]);
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}), [options, handleItemClick, handleOnClose, popupOnKeyPress]);
|
|
75
|
-
return /* @__PURE__ */ React2.createElement("div", null, /* @__PURE__ */ React2.createElement(Button, __spreadValues({
|
|
85
|
+
const handleRefs = useCallback((ref) => {
|
|
86
|
+
setRef(ref);
|
|
87
|
+
setButtonRef(ref);
|
|
88
|
+
}, []);
|
|
89
|
+
return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(StyledButton, __spreadValues({
|
|
76
90
|
onClick: handleTriggerOnClick,
|
|
77
|
-
|
|
78
|
-
title,
|
|
79
|
-
ref:
|
|
80
|
-
"data-testid":
|
|
91
|
+
onKeyDown: handleOnKeyDown,
|
|
92
|
+
"aria-label": title,
|
|
93
|
+
ref: handleRefs,
|
|
94
|
+
"data-testid": DSGlobalHeaderDatatestid.MENUBAR.ITEM_BUTTON,
|
|
95
|
+
role: "menuitem",
|
|
96
|
+
"aria-haspopup": true,
|
|
97
|
+
"aria-expanded": userIsOpen ?? isOpen,
|
|
81
98
|
id
|
|
82
|
-
},
|
|
83
|
-
fill: "#FFF",
|
|
99
|
+
}, useGetGlobalAttributes(otherProps)), Icon && /* @__PURE__ */ React2.createElement(Icon, {
|
|
84
100
|
size: "m"
|
|
85
101
|
})), /* @__PURE__ */ React2.createElement(DSPopperJS, {
|
|
86
102
|
referenceElement: buttonRef,
|
|
87
103
|
showPopover: userIsOpen ?? isOpen,
|
|
88
104
|
closeContextMenu: handleOnClose,
|
|
89
|
-
onClickOutside
|
|
90
|
-
|
|
105
|
+
onClickOutside,
|
|
106
|
+
withoutPortal: true
|
|
107
|
+
}, /* @__PURE__ */ React2.createElement(PopupMenuContent, {
|
|
108
|
+
options,
|
|
109
|
+
onItemClick: handleItemClick,
|
|
110
|
+
onClose: handleOnClose,
|
|
111
|
+
setIsOpen,
|
|
112
|
+
popupOnKeyPress
|
|
113
|
+
})));
|
|
91
114
|
};
|
|
92
115
|
export {
|
|
93
116
|
PopupMenu
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../src/parts/Toolbar/outOfTheBox/PopupMenu/PopupMenu.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useState, useCallback } from 'react';\nimport { useGetGlobalAttributes } from '@elliemae/ds-utilities';\nimport { DSPopperJS } from '@elliemae/ds-popperjs';\nimport { PopupMenuContent } from './menuContent/PopupMenuContent';\nimport { StyledButton } from '../../../styles';\nimport { DSGlobalHeaderDatatestid } from '../../../../exported-related';\nimport type { DSGlobalHeaderInternalsT } from '../../../../sharedTypes';\n\nexport const PopupMenu = ({\n Icon,\n title,\n onClick,\n id,\n setRef,\n componentProps,\n ...otherProps\n}: DSGlobalHeaderInternalsT.PopupProps): JSX.Element => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [buttonRef, setButtonRef] = useState<HTMLButtonElement | null>(null);\n\n const {\n onClickOutside = () => null,\n onKeyPress,\n popupOnKeyPress,\n isOpen: userIsOpen,\n options,\n closeOnClick,\n } = componentProps;\n\n const handleOnKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.code === 'ArrowDown') {\n setIsOpen(true);\n }\n if (onKeyPress) onKeyPress(e);\n },\n [onKeyPress],\n );\n\n const handleOnClose = useCallback(() => {\n if (userIsOpen === undefined) {\n setIsOpen(false);\n }\n buttonRef?.focus();\n }, [buttonRef, userIsOpen]);\n\n const handleTriggerOnClick = useCallback(\n (e: React.MouseEvent) => {\n if (userIsOpen === undefined) setIsOpen(true);\n if (onClick) onClick(e);\n },\n [onClick, userIsOpen],\n );\n\n const handleItemClick = useCallback(() => {\n if (closeOnClick && userIsOpen === undefined) handleOnClose();\n }, [closeOnClick, handleOnClose, userIsOpen]);\n\n const handleRefs = useCallback((ref) => {\n setRef(ref);\n setButtonRef(ref);\n }, []);\n\n return (\n <>\n <StyledButton\n onClick={handleTriggerOnClick}\n onKeyDown={handleOnKeyDown}\n aria-label={title}\n ref={handleRefs}\n data-testid={DSGlobalHeaderDatatestid.MENUBAR.ITEM_BUTTON}\n role=\"menuitem\"\n aria-haspopup\n aria-expanded={userIsOpen ?? isOpen}\n id={id}\n {...useGetGlobalAttributes(otherProps)}\n >\n {Icon && <Icon size=\"m\" />}\n </StyledButton>\n <DSPopperJS\n referenceElement={buttonRef}\n showPopover={userIsOpen ?? isOpen}\n closeContextMenu={handleOnClose}\n onClickOutside={onClickOutside}\n withoutPortal\n >\n <PopupMenuContent\n options={options}\n onItemClick={handleItemClick}\n onClose={handleOnClose}\n setIsOpen={setIsOpen}\n popupOnKeyPress={popupOnKeyPress}\n />\n </DSPopperJS>\n </>\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AAGO,MAAM,YAAY,CAAC,OAQ8B;AAR9B,eACxB;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MANwB,IAOrB,uBAPqB,IAOrB;AAAA,IANH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,CAAC,QAAQ,aAAa,SAAkB,KAAK;AACnD,QAAM,CAAC,WAAW,gBAAgB,SAAmC,IAAI;AAEzE,QAAM;AAAA,IACJ,iBAAiB,MAAM;AAAA,IACvB;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,MACE;AAEJ,QAAM,kBAAkB,YACtB,CAAC,MAA2B;AAC1B,QAAI,EAAE,SAAS,aAAa;AAC1B,gBAAU,IAAI;AAAA,IAChB;AACA,QAAI;AAAY,iBAAW,CAAC;AAAA,EAC9B,GACA,CAAC,UAAU,CACb;AAEA,QAAM,gBAAgB,YAAY,MAAM;AACtC,QAAI,eAAe,QAAW;AAC5B,gBAAU,KAAK;AAAA,IACjB;AACA,eAAW,MAAM;AAAA,EACnB,GAAG,CAAC,WAAW,UAAU,CAAC;AAE1B,QAAM,uBAAuB,YAC3B,CAAC,MAAwB;AACvB,QAAI,eAAe;AAAW,gBAAU,IAAI;AAC5C,QAAI;AAAS,cAAQ,CAAC;AAAA,EACxB,GACA,CAAC,SAAS,UAAU,CACtB;AAEA,QAAM,kBAAkB,YAAY,MAAM;AACxC,QAAI,gBAAgB,eAAe;AAAW,oBAAc;AAAA,EAC9D,GAAG,CAAC,cAAc,eAAe,UAAU,CAAC;AAE5C,QAAM,aAAa,YAAY,CAAC,QAAQ;AACtC,WAAO,GAAG;AACV,iBAAa,GAAG;AAAA,EAClB,GAAG,CAAC,CAAC;AAEL,SACE,4DACE,qCAAC;AAAA,IACC,SAAS;AAAA,IACT,WAAW;AAAA,IACX,cAAY;AAAA,IACZ,KAAK;AAAA,IACL,eAAa,yBAAyB,QAAQ;AAAA,IAC9C,MAAK;AAAA,IACL,iBAAa;AAAA,IACb,iBAAe,cAAc;AAAA,IAC7B;AAAA,KACI,uBAAuB,UAAU,IAEpC,QAAQ,qCAAC;AAAA,IAAK,MAAK;AAAA,GAAI,CAC1B,GACA,qCAAC;AAAA,IACC,kBAAkB;AAAA,IAClB,aAAa,cAAc;AAAA,IAC3B,kBAAkB;AAAA,IAClB;AAAA,IACA,eAAa;AAAA,KAEb,qCAAC;AAAA,IACC;AAAA,IACA,aAAa;AAAA,IACb,SAAS;AAAA,IACT;AAAA,IACA;AAAA,GACF,CACF,CACF;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
var __objRest = (source, exclude) => {
|
|
18
|
+
var target = {};
|
|
19
|
+
for (var prop in source)
|
|
20
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
21
|
+
target[prop] = source[prop];
|
|
22
|
+
if (source != null && __getOwnPropSymbols)
|
|
23
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
24
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
25
|
+
target[prop] = source[prop];
|
|
26
|
+
}
|
|
27
|
+
return target;
|
|
28
|
+
};
|
|
29
|
+
import * as React from "react";
|
|
30
|
+
import React2, { useContext } from "react";
|
|
31
|
+
import { getGlobalAttributes } from "@elliemae/ds-utilities";
|
|
32
|
+
import { StyledSeparator, StyledItemButton, StyledLabel, StyledList, StyledItemContainer } from "./styles";
|
|
33
|
+
import { DSGlobalHeaderContext } from "../../../../../DSGlobalHeaderContext";
|
|
34
|
+
import { DSGlobalHeaderDatatestid } from "../../../../../exported-related";
|
|
35
|
+
import { usePopupMenuContent } from "./usePopupMenuContent";
|
|
36
|
+
const PopupMenuContent = React2.memo(({
|
|
37
|
+
options,
|
|
38
|
+
onItemClick,
|
|
39
|
+
onClose,
|
|
40
|
+
popupOnKeyPress,
|
|
41
|
+
setIsOpen
|
|
42
|
+
}) => {
|
|
43
|
+
const { instanceUID } = useContext(DSGlobalHeaderContext);
|
|
44
|
+
const { menuRef, setRef, keyboardNavigation } = usePopupMenuContent({ setIsOpen });
|
|
45
|
+
return /* @__PURE__ */ React2.createElement(StyledList, {
|
|
46
|
+
ref: menuRef,
|
|
47
|
+
role: "menu",
|
|
48
|
+
"data-testid": DSGlobalHeaderDatatestid.MENUBAR.POPUP_MENU.LIST
|
|
49
|
+
}, options.map((option) => {
|
|
50
|
+
const _a = option, { type, Icon, label = "", onClick, Content, id } = _a, rest = __objRest(_a, ["type", "Icon", "label", "onClick", "Content", "id"]);
|
|
51
|
+
const globalAttrs = getGlobalAttributes(rest);
|
|
52
|
+
const handleClick = (e) => {
|
|
53
|
+
onItemClick();
|
|
54
|
+
if (onClick)
|
|
55
|
+
onClick(e);
|
|
56
|
+
};
|
|
57
|
+
const handleKeyDown = (e) => {
|
|
58
|
+
keyboardNavigation(e);
|
|
59
|
+
if (e.code === "Escape")
|
|
60
|
+
onClose();
|
|
61
|
+
if (popupOnKeyPress)
|
|
62
|
+
popupOnKeyPress(e);
|
|
63
|
+
};
|
|
64
|
+
switch (type) {
|
|
65
|
+
case "separator":
|
|
66
|
+
return /* @__PURE__ */ React2.createElement(StyledSeparator, __spreadValues({
|
|
67
|
+
key: `${instanceUID}-separator-${label}`,
|
|
68
|
+
role: "none",
|
|
69
|
+
"data-testid": DSGlobalHeaderDatatestid.MENUBAR.POPUP_MENU.SEPARATOR
|
|
70
|
+
}, globalAttrs));
|
|
71
|
+
case "custom":
|
|
72
|
+
return /* @__PURE__ */ React2.createElement(StyledItemContainer, {
|
|
73
|
+
key: `${instanceUID}-popup-${label}`,
|
|
74
|
+
role: "menuitem",
|
|
75
|
+
"data-testid": DSGlobalHeaderDatatestid.MENUBAR.POPUP_MENU.ITEM
|
|
76
|
+
}, /* @__PURE__ */ React2.createElement(StyledItemButton, __spreadValues({
|
|
77
|
+
ref: setRef,
|
|
78
|
+
onClick: handleClick,
|
|
79
|
+
onKeyDown: handleKeyDown,
|
|
80
|
+
id,
|
|
81
|
+
"data-testid": DSGlobalHeaderDatatestid.MENUBAR.POPUP_MENU.ITEM_BUTTON
|
|
82
|
+
}, globalAttrs), Content && /* @__PURE__ */ React2.createElement(Content, null)));
|
|
83
|
+
default:
|
|
84
|
+
return /* @__PURE__ */ React2.createElement(StyledItemContainer, {
|
|
85
|
+
key: `${instanceUID}-popup-${label}`,
|
|
86
|
+
role: "menuitem",
|
|
87
|
+
"data-testid": DSGlobalHeaderDatatestid.MENUBAR.POPUP_MENU.ITEM
|
|
88
|
+
}, /* @__PURE__ */ React2.createElement(StyledItemButton, __spreadValues({
|
|
89
|
+
ref: setRef,
|
|
90
|
+
onClick: handleClick,
|
|
91
|
+
onKeyDown: handleKeyDown,
|
|
92
|
+
id,
|
|
93
|
+
"data-testid": DSGlobalHeaderDatatestid.MENUBAR.POPUP_MENU.ITEM_BUTTON
|
|
94
|
+
}, globalAttrs), Icon && /* @__PURE__ */ React2.createElement(Icon, null), label && /* @__PURE__ */ React2.createElement(StyledLabel, {
|
|
95
|
+
"data-testid": DSGlobalHeaderDatatestid.MENUBAR.POPUP_MENU.ITEM_BUTTON_LABEL
|
|
96
|
+
}, label)));
|
|
97
|
+
}
|
|
98
|
+
}));
|
|
99
|
+
});
|
|
100
|
+
export {
|
|
101
|
+
PopupMenuContent
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=PopupMenuContent.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../../src/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/PopupMenuContent.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useContext } from 'react';\nimport { getGlobalAttributes } from '@elliemae/ds-utilities';\nimport { StyledSeparator, StyledItemButton, StyledLabel, StyledList, StyledItemContainer } from './styles';\nimport { DSGlobalHeaderContext } from '../../../../../DSGlobalHeaderContext';\nimport { DSGlobalHeaderDatatestid } from '../../../../../exported-related';\nimport { usePopupMenuContent } from './usePopupMenuContent';\nimport type { DSGlobalHeaderInternalsT } from '../../../../../sharedTypes';\n\nexport const PopupMenuContent = React.memo(\n ({\n options,\n onItemClick,\n onClose,\n popupOnKeyPress,\n setIsOpen,\n }: DSGlobalHeaderInternalsT.PopupMenuContentProps): JSX.Element => {\n const { instanceUID } = useContext(DSGlobalHeaderContext);\n\n const { menuRef, setRef, keyboardNavigation } = usePopupMenuContent({ setIsOpen });\n\n return (\n <StyledList ref={menuRef} role=\"menu\" data-testid={DSGlobalHeaderDatatestid.MENUBAR.POPUP_MENU.LIST}>\n {options.map((option) => {\n const { type, Icon, label = '', onClick, Content, id, ...rest } = option;\n\n const globalAttrs = getGlobalAttributes(rest);\n\n const handleClick = (e: React.MouseEvent) => {\n onItemClick();\n if (onClick) onClick(e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n keyboardNavigation(e);\n if (e.code === 'Escape') onClose();\n if (popupOnKeyPress) popupOnKeyPress(e);\n };\n\n switch (type) {\n case 'separator':\n return (\n <StyledSeparator\n key={`${instanceUID}-separator-${label}`}\n role=\"none\"\n data-testid={DSGlobalHeaderDatatestid.MENUBAR.POPUP_MENU.SEPARATOR}\n {...globalAttrs}\n />\n );\n case 'custom':\n return (\n <StyledItemContainer\n key={`${instanceUID}-popup-${label}`}\n role=\"menuitem\"\n data-testid={DSGlobalHeaderDatatestid.MENUBAR.POPUP_MENU.ITEM}\n >\n <StyledItemButton\n ref={setRef}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n id={id}\n data-testid={DSGlobalHeaderDatatestid.MENUBAR.POPUP_MENU.ITEM_BUTTON}\n {...globalAttrs}\n >\n {Content && <Content />}\n </StyledItemButton>\n </StyledItemContainer>\n );\n default:\n return (\n <StyledItemContainer\n key={`${instanceUID}-popup-${label}`}\n role=\"menuitem\"\n data-testid={DSGlobalHeaderDatatestid.MENUBAR.POPUP_MENU.ITEM}\n >\n <StyledItemButton\n ref={setRef}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n id={id}\n data-testid={DSGlobalHeaderDatatestid.MENUBAR.POPUP_MENU.ITEM_BUTTON}\n {...globalAttrs}\n >\n {Icon && <Icon />}\n {label && (\n <StyledLabel data-testid={DSGlobalHeaderDatatestid.MENUBAR.POPUP_MENU.ITEM_BUTTON_LABEL}>\n {label}\n </StyledLabel>\n )}\n </StyledItemButton>\n </StyledItemContainer>\n );\n }\n })}\n </StyledList>\n );\n },\n);\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AAGO,MAAM,mBAAmB,OAAM,KACpC,CAAC;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,MACiE;AACjE,QAAM,EAAE,gBAAgB,WAAW,qBAAqB;AAExD,QAAM,EAAE,SAAS,QAAQ,uBAAuB,oBAAoB,EAAE,UAAU,CAAC;AAEjF,SACE,qCAAC;AAAA,IAAW,KAAK;AAAA,IAAS,MAAK;AAAA,IAAO,eAAa,yBAAyB,QAAQ,WAAW;AAAA,KAC5F,QAAQ,IAAI,CAAC,WAAW;AACvB,UAAkE,aAA1D,QAAM,MAAM,QAAQ,IAAI,SAAS,SAAS,OAAgB,IAAT,iBAAS,IAAT,CAAjD,QAAM,QAAM,SAAY,WAAS,WAAS;AAElD,UAAM,cAAc,oBAAoB,IAAI;AAE5C,UAAM,cAAc,CAAC,MAAwB;AAC3C,kBAAY;AACZ,UAAI;AAAS,gBAAQ,CAAC;AAAA,IACxB;AAEA,UAAM,gBAAgB,CAAC,MAA2B;AAChD,yBAAmB,CAAC;AACpB,UAAI,EAAE,SAAS;AAAU,gBAAQ;AACjC,UAAI;AAAiB,wBAAgB,CAAC;AAAA,IACxC;AAEA,YAAQ;AAAA,WACD;AACH,eACE,qCAAC;AAAA,UACC,KAAK,GAAG,yBAAyB;AAAA,UACjC,MAAK;AAAA,UACL,eAAa,yBAAyB,QAAQ,WAAW;AAAA,WACrD,YACN;AAAA,WAEC;AACH,eACE,qCAAC;AAAA,UACC,KAAK,GAAG,qBAAqB;AAAA,UAC7B,MAAK;AAAA,UACL,eAAa,yBAAyB,QAAQ,WAAW;AAAA,WAEzD,qCAAC;AAAA,UACC,KAAK;AAAA,UACL,SAAS;AAAA,UACT,WAAW;AAAA,UACX;AAAA,UACA,eAAa,yBAAyB,QAAQ,WAAW;AAAA,WACrD,cAEH,WAAW,qCAAC,aAAQ,CACvB,CACF;AAAA;AAGF,eACE,qCAAC;AAAA,UACC,KAAK,GAAG,qBAAqB;AAAA,UAC7B,MAAK;AAAA,UACL,eAAa,yBAAyB,QAAQ,WAAW;AAAA,WAEzD,qCAAC;AAAA,UACC,KAAK;AAAA,UACL,SAAS;AAAA,UACT,WAAW;AAAA,UACX;AAAA,UACA,eAAa,yBAAyB,QAAQ,WAAW;AAAA,WACrD,cAEH,QAAQ,qCAAC,UAAK,GACd,SACC,qCAAC;AAAA,UAAY,eAAa,yBAAyB,QAAQ,WAAW;AAAA,WACnE,KACH,CAEJ,CACF;AAAA;AAAA,EAGR,CAAC,CACH;AAEJ,CACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { styled } from "@elliemae/ds-system";
|
|
3
|
+
import { COMPONENT_NAME, slots } from "../../../../../exported-related/theming";
|
|
4
|
+
const StyledList = styled("ul", { name: COMPONENT_NAME, slot: slots.MENUBAR.POPUP_MENU.LIST })`
|
|
5
|
+
padding: 5px 0px;
|
|
6
|
+
margin: 0;
|
|
7
|
+
background: white;
|
|
8
|
+
`;
|
|
9
|
+
const StyledItemContainer = styled("li", { name: COMPONENT_NAME, slot: slots.MENUBAR.POPUP_MENU.ITEM })`
|
|
10
|
+
list-style: none;
|
|
11
|
+
`;
|
|
12
|
+
const StyledItemButton = styled("button", { name: COMPONENT_NAME, slot: slots.MENUBAR.POPUP_MENU.ITEM_BUTTON })`
|
|
13
|
+
display: flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
justify-content: center;
|
|
16
|
+
width: 100%;
|
|
17
|
+
padding: 0 20px;
|
|
18
|
+
cursor: pointer;
|
|
19
|
+
border: 1px solid transparent;
|
|
20
|
+
background-color: transparent;
|
|
21
|
+
outline: none;
|
|
22
|
+
:hover,
|
|
23
|
+
:focus {
|
|
24
|
+
border: ${({ theme }) => `1px solid ${theme.colors.brand[600]}`};
|
|
25
|
+
}
|
|
26
|
+
`;
|
|
27
|
+
const StyledLabel = styled("span", { name: COMPONENT_NAME, slot: slots.MENUBAR.POPUP_MENU.ITEM_BUTTON_LABEL })`
|
|
28
|
+
width: 100%;
|
|
29
|
+
font-size: 14px;
|
|
30
|
+
margin: 10px;
|
|
31
|
+
`;
|
|
32
|
+
const StyledSeparator = styled("div", { name: COMPONENT_NAME, slot: slots.MENUBAR.POPUP_MENU.SEPARATOR })`
|
|
33
|
+
width: 100%;
|
|
34
|
+
border: none;
|
|
35
|
+
border-bottom: 1px solid #ccc;
|
|
36
|
+
`;
|
|
37
|
+
export {
|
|
38
|
+
StyledItemButton,
|
|
39
|
+
StyledItemContainer,
|
|
40
|
+
StyledLabel,
|
|
41
|
+
StyledList,
|
|
42
|
+
StyledSeparator
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../../src/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/styles.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { styled } from '@elliemae/ds-system';\nimport { COMPONENT_NAME, slots } from '../../../../../exported-related/theming';\n\nexport const StyledList = styled('ul', { name: COMPONENT_NAME, slot: slots.MENUBAR.POPUP_MENU.LIST })`\n padding: 5px 0px;\n margin: 0;\n background: white;\n`;\n\nexport const StyledItemContainer = styled('li', { name: COMPONENT_NAME, slot: slots.MENUBAR.POPUP_MENU.ITEM })`\n list-style: none;\n`;\n\nexport const StyledItemButton = styled('button', { name: COMPONENT_NAME, slot: slots.MENUBAR.POPUP_MENU.ITEM_BUTTON })`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n padding: 0 20px;\n cursor: pointer;\n border: 1px solid transparent;\n background-color: transparent;\n outline: none;\n :hover,\n :focus {\n border: ${({ theme }) => `1px solid ${theme.colors.brand[600]}`};\n }\n`;\n\nexport const StyledLabel = styled('span', { name: COMPONENT_NAME, slot: slots.MENUBAR.POPUP_MENU.ITEM_BUTTON_LABEL })`\n width: 100%;\n font-size: 14px;\n margin: 10px;\n`;\n\nexport const StyledSeparator = styled('div', { name: COMPONENT_NAME, slot: slots.MENUBAR.POPUP_MENU.SEPARATOR })`\n width: 100%;\n border: none;\n border-bottom: 1px solid #ccc;\n`;\n"],
|
|
5
|
+
"mappings": "AAAA;ACAA;AACA;AAEO,MAAM,aAAa,OAAO,MAAM,EAAE,MAAM,gBAAgB,MAAM,MAAM,QAAQ,WAAW,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAM7F,MAAM,sBAAsB,OAAO,MAAM,EAAE,MAAM,gBAAgB,MAAM,MAAM,QAAQ,WAAW,KAAK,CAAC;AAAA;AAAA;AAItG,MAAM,mBAAmB,OAAO,UAAU,EAAE,MAAM,gBAAgB,MAAM,MAAM,QAAQ,WAAW,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAYvG,CAAC,EAAE,YAAY,aAAa,MAAM,OAAO,MAAM;AAAA;AAAA;AAItD,MAAM,cAAc,OAAO,QAAQ,EAAE,MAAM,gBAAgB,MAAM,MAAM,QAAQ,WAAW,kBAAkB,CAAC;AAAA;AAAA;AAAA;AAAA;AAM7G,MAAM,kBAAkB,OAAO,OAAO,EAAE,MAAM,gBAAgB,MAAM,MAAM,QAAQ,WAAW,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { useRef, useCallback, useEffect } from "react";
|
|
3
|
+
const usePopupMenuContent = ({ setIsOpen }) => {
|
|
4
|
+
const menuRef = useRef(null);
|
|
5
|
+
const allMenuItemsRef = useRef([]);
|
|
6
|
+
const setRef = useCallback((ref) => {
|
|
7
|
+
if (ref && !allMenuItemsRef.current.includes(ref)) {
|
|
8
|
+
allMenuItemsRef.current.push(ref);
|
|
9
|
+
}
|
|
10
|
+
allMenuItemsRef.current.forEach((item, index) => {
|
|
11
|
+
if (index === 0) {
|
|
12
|
+
item?.setAttribute?.("tabindex", "0");
|
|
13
|
+
} else {
|
|
14
|
+
item?.setAttribute?.("tabindex", "-1");
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}, []);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
allMenuItemsRef.current?.[0]?.focus();
|
|
20
|
+
}, []);
|
|
21
|
+
const keyboardNavigation = useCallback((e) => {
|
|
22
|
+
if (e.code === "Tab") {
|
|
23
|
+
setIsOpen(false);
|
|
24
|
+
} else {
|
|
25
|
+
const currentIndex = allMenuItemsRef.current.indexOf(e.target);
|
|
26
|
+
const allRefsLength = allMenuItemsRef.current.length;
|
|
27
|
+
if (e.key === "ArrowDown") {
|
|
28
|
+
if (currentIndex < allRefsLength - 1) {
|
|
29
|
+
allMenuItemsRef.current[currentIndex + 1]?.focus?.();
|
|
30
|
+
} else {
|
|
31
|
+
allMenuItemsRef.current[0]?.focus?.();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (e.key === "ArrowUp") {
|
|
35
|
+
if (currentIndex === 0) {
|
|
36
|
+
allMenuItemsRef.current[allRefsLength - 1]?.focus?.();
|
|
37
|
+
} else {
|
|
38
|
+
allMenuItemsRef.current[currentIndex - 1]?.focus?.();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}, [setIsOpen]);
|
|
43
|
+
return {
|
|
44
|
+
menuRef,
|
|
45
|
+
setRef,
|
|
46
|
+
keyboardNavigation
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export {
|
|
50
|
+
usePopupMenuContent
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=usePopupMenuContent.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../../src/parts/Toolbar/outOfTheBox/PopupMenu/menuContent/usePopupMenuContent.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useRef, useCallback, useEffect } from 'react';\n\ninterface UsePopupMenuContentT {\n setIsOpen: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nexport const usePopupMenuContent = ({ setIsOpen }: UsePopupMenuContentT) => {\n const menuRef = useRef<HTMLDivElement>(null);\n const allMenuItemsRef = useRef<HTMLButtonElement[]>([]);\n\n const setRef = useCallback((ref: HTMLButtonElement) => {\n if (ref && !allMenuItemsRef.current.includes(ref)) {\n allMenuItemsRef.current.push(ref);\n }\n\n allMenuItemsRef.current.forEach((item, index) => {\n if (index === 0) {\n item?.setAttribute?.('tabindex', '0');\n } else {\n item?.setAttribute?.('tabindex', '-1');\n }\n });\n }, []);\n\n useEffect(() => {\n (allMenuItemsRef.current?.[0] as HTMLButtonElement)?.focus();\n }, []);\n\n const keyboardNavigation = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.code === 'Tab') {\n setIsOpen(false);\n } else {\n const currentIndex = allMenuItemsRef.current.indexOf(e.target as HTMLButtonElement);\n const allRefsLength = allMenuItemsRef.current.length;\n if (e.key === 'ArrowDown') {\n if (currentIndex < allRefsLength - 1) {\n allMenuItemsRef.current[currentIndex + 1]?.focus?.();\n } else {\n allMenuItemsRef.current[0]?.focus?.();\n }\n }\n if (e.key === 'ArrowUp') {\n if (currentIndex === 0) {\n allMenuItemsRef.current[allRefsLength - 1]?.focus?.();\n } else {\n allMenuItemsRef.current[currentIndex - 1]?.focus?.();\n }\n }\n }\n },\n [setIsOpen],\n );\n\n return {\n menuRef,\n setRef,\n keyboardNavigation,\n };\n};\n"],
|
|
5
|
+
"mappings": "AAAA;ACAA;AAMO,MAAM,sBAAsB,CAAC,EAAE,gBAAsC;AAC1E,QAAM,UAAU,OAAuB,IAAI;AAC3C,QAAM,kBAAkB,OAA4B,CAAC,CAAC;AAEtD,QAAM,SAAS,YAAY,CAAC,QAA2B;AACrD,QAAI,OAAO,CAAC,gBAAgB,QAAQ,SAAS,GAAG,GAAG;AACjD,sBAAgB,QAAQ,KAAK,GAAG;AAAA,IAClC;AAEA,oBAAgB,QAAQ,QAAQ,CAAC,MAAM,UAAU;AAC/C,UAAI,UAAU,GAAG;AACf,cAAM,eAAe,YAAY,GAAG;AAAA,MACtC,OAAO;AACL,cAAM,eAAe,YAAY,IAAI;AAAA,MACvC;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,IAAC,gBAAgB,UAAU,IAA0B,MAAM;AAAA,EAC7D,GAAG,CAAC,CAAC;AAEL,QAAM,qBAAqB,YACzB,CAAC,MAA2B;AAC1B,QAAI,EAAE,SAAS,OAAO;AACpB,gBAAU,KAAK;AAAA,IACjB,OAAO;AACL,YAAM,eAAe,gBAAgB,QAAQ,QAAQ,EAAE,MAA2B;AAClF,YAAM,gBAAgB,gBAAgB,QAAQ;AAC9C,UAAI,EAAE,QAAQ,aAAa;AACzB,YAAI,eAAe,gBAAgB,GAAG;AACpC,0BAAgB,QAAQ,eAAe,IAAI,QAAQ;AAAA,QACrD,OAAO;AACL,0BAAgB,QAAQ,IAAI,QAAQ;AAAA,QACtC;AAAA,MACF;AACA,UAAI,EAAE,QAAQ,WAAW;AACvB,YAAI,iBAAiB,GAAG;AACtB,0BAAgB,QAAQ,gBAAgB,IAAI,QAAQ;AAAA,QACtD,OAAO;AACL,0BAAgB,QAAQ,eAAe,IAAI,QAAQ;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AAAA,EACF,GACA,CAAC,SAAS,CACZ;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -29,16 +29,24 @@ var __objRest = (source, exclude) => {
|
|
|
29
29
|
import * as React from "react";
|
|
30
30
|
import React2, { useState, useCallback, useRef } from "react";
|
|
31
31
|
import { Search } from "@elliemae/ds-icons";
|
|
32
|
-
import { getDataProps } from "@elliemae/ds-props-helpers";
|
|
33
|
-
import { DSIconColors } from "@elliemae/ds-icon";
|
|
34
32
|
import { DSNavSearchBox } from "@elliemae/ds-form";
|
|
33
|
+
import { getGlobalAttributes, mergeRefs, useCallbackAfterRender } from "@elliemae/ds-utilities";
|
|
35
34
|
import { StyledNavSearchBoxContainer } from "./styles";
|
|
36
|
-
import {
|
|
35
|
+
import { StyledButton } from "../../../styles";
|
|
36
|
+
import { DSGlobalHeaderDatatestid } from "../../../../exported-related";
|
|
37
37
|
const SearchToggle = (_a) => {
|
|
38
|
-
var _b = _a, {
|
|
38
|
+
var _b = _a, {
|
|
39
|
+
id,
|
|
40
|
+
setRef,
|
|
41
|
+
componentProps
|
|
42
|
+
} = _b, otherProps = __objRest(_b, [
|
|
43
|
+
"id",
|
|
44
|
+
"setRef",
|
|
45
|
+
"componentProps"
|
|
46
|
+
]);
|
|
39
47
|
const [isOpen, setIsOpen] = useState(false);
|
|
40
|
-
const
|
|
41
|
-
const
|
|
48
|
+
const internalInputRef = useRef(null);
|
|
49
|
+
const internalTriggerRef = useRef(null);
|
|
42
50
|
const containerRef = useRef(null);
|
|
43
51
|
const {
|
|
44
52
|
onNext,
|
|
@@ -52,8 +60,12 @@ const SearchToggle = (_a) => {
|
|
|
52
60
|
onClear,
|
|
53
61
|
isOpen: userIsOpen,
|
|
54
62
|
onKeyDown,
|
|
55
|
-
onClick
|
|
63
|
+
onClick,
|
|
64
|
+
triggerRef,
|
|
65
|
+
searchContainerRef
|
|
56
66
|
} = componentProps;
|
|
67
|
+
const schedule = useCallbackAfterRender();
|
|
68
|
+
const focusTrigger = useCallback(() => internalTriggerRef.current?.focus(), []);
|
|
57
69
|
const handleOnClick = useCallback((e) => {
|
|
58
70
|
if (userIsOpen === void 0)
|
|
59
71
|
setIsOpen(true);
|
|
@@ -62,25 +74,33 @@ const SearchToggle = (_a) => {
|
|
|
62
74
|
}, [onClick, userIsOpen]);
|
|
63
75
|
const handleOnKeyDown = useCallback((e) => {
|
|
64
76
|
if (userIsOpen === void 0) {
|
|
65
|
-
if (e.
|
|
77
|
+
if (e.key === "Escape") {
|
|
66
78
|
setIsOpen(false);
|
|
67
|
-
|
|
79
|
+
schedule(focusTrigger);
|
|
68
80
|
}
|
|
69
81
|
}
|
|
70
82
|
if (onKeyDown)
|
|
71
83
|
onKeyDown(e);
|
|
72
|
-
}, [onKeyDown, userIsOpen]);
|
|
84
|
+
}, [focusTrigger, onKeyDown, schedule, userIsOpen]);
|
|
73
85
|
const handleOnBlur = useCallback(() => {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
86
|
+
const contains = containerRef.current?.contains(document.activeElement);
|
|
87
|
+
if (value === "" && !contains)
|
|
88
|
+
setIsOpen(false);
|
|
89
|
+
schedule(focusTrigger);
|
|
90
|
+
}, [focusTrigger, schedule, value]);
|
|
91
|
+
const handleNavInputRefs = useCallback((searchNavRef) => {
|
|
92
|
+
setRef(searchNavRef);
|
|
93
|
+
internalInputRef.current = searchNavRef;
|
|
94
|
+
}, [setRef]);
|
|
95
|
+
const handleTriggerRefs = useCallback((buttonRef) => {
|
|
96
|
+
mergeRefs(triggerRef, internalTriggerRef)(buttonRef);
|
|
97
|
+
setRef(buttonRef);
|
|
98
|
+
}, [setRef, triggerRef]);
|
|
80
99
|
return userIsOpen || isOpen ? /* @__PURE__ */ React2.createElement(StyledNavSearchBoxContainer, {
|
|
81
100
|
onKeyDown: handleOnKeyDown,
|
|
82
|
-
ref: containerRef,
|
|
83
|
-
onBlur: handleOnBlur
|
|
101
|
+
ref: mergeRefs(searchContainerRef, containerRef),
|
|
102
|
+
onBlur: handleOnBlur,
|
|
103
|
+
"data-testid": DSGlobalHeaderDatatestid.MENUBAR.SEARCH_TOGGLE.CONTAINER
|
|
84
104
|
}, /* @__PURE__ */ React2.createElement(DSNavSearchBox, {
|
|
85
105
|
onNext,
|
|
86
106
|
onPrevious,
|
|
@@ -91,15 +111,15 @@ const SearchToggle = (_a) => {
|
|
|
91
111
|
onChange,
|
|
92
112
|
value,
|
|
93
113
|
onBlur,
|
|
94
|
-
innerRef:
|
|
114
|
+
innerRef: handleNavInputRefs,
|
|
95
115
|
autoFocus: true
|
|
96
|
-
})) : /* @__PURE__ */ React2.createElement(
|
|
116
|
+
})) : /* @__PURE__ */ React2.createElement(StyledButton, __spreadValues({
|
|
97
117
|
onClick: handleOnClick,
|
|
98
|
-
ref:
|
|
99
|
-
id
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}));
|
|
118
|
+
ref: handleTriggerRefs,
|
|
119
|
+
id,
|
|
120
|
+
role: "menuitem",
|
|
121
|
+
"data-testid": DSGlobalHeaderDatatestid.MENUBAR.SEARCH_TOGGLE.ITEM_BUTTON
|
|
122
|
+
}, getGlobalAttributes(otherProps)), /* @__PURE__ */ React2.createElement(Search, null));
|
|
103
123
|
};
|
|
104
124
|
export {
|
|
105
125
|
SearchToggle
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../src/parts/Toolbar/outOfTheBox/SearchToggle/SearchToggle.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React, { useState, useCallback, useRef } from 'react';\nimport { Search } from '@elliemae/ds-icons';\nimport { DSNavSearchBox } from '@elliemae/ds-form';\nimport { getGlobalAttributes, mergeRefs, useCallbackAfterRender } from '@elliemae/ds-utilities';\nimport { StyledNavSearchBoxContainer } from './styles';\nimport { StyledButton } from '../../../styles';\nimport { DSGlobalHeaderDatatestid } from '../../../../exported-related';\nimport type { DSGlobalHeaderInternalsT } from '../../../../sharedTypes';\n\nexport const SearchToggle = ({\n id,\n setRef,\n componentProps,\n ...otherProps\n}: DSGlobalHeaderInternalsT.SearchToggleProps): JSX.Element => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const internalInputRef = useRef<HTMLInputElement | null>(null);\n const internalTriggerRef = useRef<HTMLButtonElement | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n const {\n onNext,\n onPrevious,\n currentResultIndex,\n totalResults,\n placeholder,\n value,\n onChange,\n onBlur,\n onClear,\n isOpen: userIsOpen,\n onKeyDown,\n onClick,\n triggerRef,\n searchContainerRef,\n } = componentProps;\n\n const schedule = useCallbackAfterRender();\n\n const focusTrigger = useCallback(() => internalTriggerRef.current?.focus(), []);\n\n const handleOnClick = useCallback(\n (e: React.MouseEvent) => {\n if (userIsOpen === undefined) setIsOpen(true);\n if (onClick) onClick(e);\n },\n [onClick, userIsOpen],\n );\n\n const handleOnKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (userIsOpen === undefined) {\n if (e.key === 'Escape') {\n setIsOpen(false);\n schedule(focusTrigger);\n }\n }\n if (onKeyDown) onKeyDown(e);\n },\n [focusTrigger, onKeyDown, schedule, userIsOpen],\n );\n\n const handleOnBlur = useCallback(() => {\n const contains = containerRef.current?.contains(document.activeElement);\n if (value === '' && !contains) setIsOpen(false);\n schedule(focusTrigger);\n }, [focusTrigger, schedule, value]);\n\n const handleNavInputRefs = useCallback(\n (searchNavRef: HTMLInputElement) => {\n setRef(searchNavRef);\n internalInputRef.current = searchNavRef;\n },\n [setRef],\n );\n\n const handleTriggerRefs = useCallback(\n (buttonRef: HTMLButtonElement) => {\n mergeRefs(triggerRef, internalTriggerRef)(buttonRef);\n setRef(buttonRef);\n },\n [setRef, triggerRef],\n );\n\n return userIsOpen || isOpen ? (\n <StyledNavSearchBoxContainer\n onKeyDown={handleOnKeyDown}\n ref={mergeRefs(searchContainerRef, containerRef)}\n onBlur={handleOnBlur}\n data-testid={DSGlobalHeaderDatatestid.MENUBAR.SEARCH_TOGGLE.CONTAINER}\n >\n <DSNavSearchBox\n onNext={onNext}\n onPrevious={onPrevious}\n currentResultIndex={currentResultIndex}\n totalResults={totalResults}\n onClear={onClear}\n placeholder={placeholder}\n onChange={onChange}\n value={value}\n onBlur={onBlur}\n innerRef={handleNavInputRefs}\n autoFocus\n />\n </StyledNavSearchBoxContainer>\n ) : (\n <StyledButton\n onClick={handleOnClick}\n ref={handleTriggerRefs}\n id={id}\n role=\"menuitem\"\n data-testid={DSGlobalHeaderDatatestid.MENUBAR.SEARCH_TOGGLE.ITEM_BUTTON}\n {...getGlobalAttributes(otherProps)}\n >\n <Search />\n </StyledButton>\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AAGO,MAAM,eAAe,CAAC,OAKkC;AALlC,eAC3B;AAAA;AAAA,IACA;AAAA,IACA;AAAA,MAH2B,IAIxB,uBAJwB,IAIxB;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM,CAAC,QAAQ,aAAa,SAAkB,KAAK;AACnD,QAAM,mBAAmB,OAAgC,IAAI;AAC7D,QAAM,qBAAqB,OAAiC,IAAI;AAChE,QAAM,eAAe,OAA8B,IAAI;AAEvD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE;AAEJ,QAAM,WAAW,uBAAuB;AAExC,QAAM,eAAe,YAAY,MAAM,mBAAmB,SAAS,MAAM,GAAG,CAAC,CAAC;AAE9E,QAAM,gBAAgB,YACpB,CAAC,MAAwB;AACvB,QAAI,eAAe;AAAW,gBAAU,IAAI;AAC5C,QAAI;AAAS,cAAQ,CAAC;AAAA,EACxB,GACA,CAAC,SAAS,UAAU,CACtB;AAEA,QAAM,kBAAkB,YACtB,CAAC,MAA2B;AAC1B,QAAI,eAAe,QAAW;AAC5B,UAAI,EAAE,QAAQ,UAAU;AACtB,kBAAU,KAAK;AACf,iBAAS,YAAY;AAAA,MACvB;AAAA,IACF;AACA,QAAI;AAAW,gBAAU,CAAC;AAAA,EAC5B,GACA,CAAC,cAAc,WAAW,UAAU,UAAU,CAChD;AAEA,QAAM,eAAe,YAAY,MAAM;AACrC,UAAM,WAAW,aAAa,SAAS,SAAS,SAAS,aAAa;AACtE,QAAI,UAAU,MAAM,CAAC;AAAU,gBAAU,KAAK;AAC9C,aAAS,YAAY;AAAA,EACvB,GAAG,CAAC,cAAc,UAAU,KAAK,CAAC;AAElC,QAAM,qBAAqB,YACzB,CAAC,iBAAmC;AAClC,WAAO,YAAY;AACnB,qBAAiB,UAAU;AAAA,EAC7B,GACA,CAAC,MAAM,CACT;AAEA,QAAM,oBAAoB,YACxB,CAAC,cAAiC;AAChC,cAAU,YAAY,kBAAkB,EAAE,SAAS;AACnD,WAAO,SAAS;AAAA,EAClB,GACA,CAAC,QAAQ,UAAU,CACrB;AAEA,SAAO,cAAc,SACnB,qCAAC;AAAA,IACC,WAAW;AAAA,IACX,KAAK,UAAU,oBAAoB,YAAY;AAAA,IAC/C,QAAQ;AAAA,IACR,eAAa,yBAAyB,QAAQ,cAAc;AAAA,KAE5D,qCAAC;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,WAAS;AAAA,GACX,CACF,IAEA,qCAAC;AAAA,IACC,SAAS;AAAA,IACT,KAAK;AAAA,IACL;AAAA,IACA,MAAK;AAAA,IACL,eAAa,yBAAyB,QAAQ,cAAc;AAAA,KACxD,oBAAoB,UAAU,IAElC,qCAAC,YAAO,CACV;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import styled from "
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { styled } from "@elliemae/ds-system";
|
|
3
|
+
import { COMPONENT_NAME, slots } from "../../../../exported-related/theming";
|
|
4
|
+
const StyledNavSearchBoxContainer = styled("div", {
|
|
5
|
+
name: COMPONENT_NAME,
|
|
6
|
+
slot: slots.MENUBAR.SEARCH_TOGGLE.CONTAINER
|
|
7
|
+
})`
|
|
8
|
+
background: ${({ theme }) => theme.colors.neutral["000"]};
|
|
5
9
|
position: relative;
|
|
6
|
-
|
|
7
10
|
min-width: 260px;
|
|
8
11
|
|
|
9
12
|
& .em-ds-button {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../scripts/build/transpile/react-shim.js", "../../../../../../src/parts/Toolbar/outOfTheBox/SearchToggle/styles.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { styled } from '@elliemae/ds-system';\nimport { COMPONENT_NAME, slots } from '../../../../exported-related/theming';\n\nexport const StyledNavSearchBoxContainer = styled('div', {\n name: COMPONENT_NAME,\n slot: slots.MENUBAR.SEARCH_TOGGLE.CONTAINER,\n})`\n background: ${({ theme }) => theme.colors.neutral['000']};\n position: relative;\n min-width: 260px;\n\n & .em-ds-button {\n margin-right: 2px;\n height: 24px;\n width: 24px;\n }\n\n & .em-ds-input {\n border: none;\n outline: none;\n box-shadow: none;\n }\n\n & .em-ds-input:focus {\n border: none;\n box-shadow: none;\n }\n\n & .em-ds-input.em-ds-input--clearable:hover {\n border: none;\n outline: none;\n box-shadow: none;\n }\n\n & .em-ds-input-addon-wrapper {\n box-shadow: none;\n }\n\n & .em-ds-input-addon-wrapper:hover {\n outline: none;\n }\n\n & .em-ds-input-addon-wrapper__addon:hover {\n outline: none;\n }\n\n & .em-ds-input:not(.floating-label-input-controller):hover:active {\n border: none;\n outline: none;\n box-shadow: none;\n }\n`;\n"],
|
|
5
|
+
"mappings": "AAAA;ACAA;AACA;AAEO,MAAM,8BAA8B,OAAO,OAAO;AAAA,EACvD,MAAM;AAAA,EACN,MAAM,MAAM,QAAQ,cAAc;AACpC,CAAC;AAAA,gBACe,CAAC,EAAE,YAAY,MAAM,OAAO,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
File without changes
|