@elliemae/ds-dropdownmenu-v2 3.70.0-next.6 → 3.70.0-next.61

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.tsx", "../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import type {} from '@xstyled/system';\n\nexport { checkAndConvertOptions } from './exported-related/conversion-utils/index.js';\nexport { DSDropdownMenuV2, DSDropdownMenuV2WithSchema } from './DSDropdownMenu.js';\nexport { DropdownMenuDataTestId } from './DropdownMenuDataTestId.js';\nexport { DSDropdownMenuName, DSDropdownMenuPlacements, DSDropdownMenuSlots } from './exported-related/index.js';\nexport {\n defaultProps as DSDropdownMenuV2DefaultProps,\n DSDropdownMenuV2PropTypes,\n actionOptionSchema,\n checkboxOptionSchema,\n optionTypesSchemas,\n sectionOptionSchema,\n separatorOptionSchema,\n singleOptionSchema,\n singleWithSubmenuOptionSchema,\n submenuOptionSchema,\n} from './react-desc-prop-types.js';\nexport type { DSDropdownMenuT } from './react-desc-prop-types.js';\n", "import * as React from 'react';\nexport { React };\n"],
4
+ "sourcesContent": ["import type {} from '@xstyled/system';\n\nexport { checkAndConvertOptions } from './exported-related/conversion-utils/index.js';\nexport { DSDropdownMenuV2, DSDropdownMenuV2WithSchema } from './DSDropdownMenu.js';\nexport { DropdownMenuDataTestId } from './DropdownMenuDataTestId.js';\nexport { DSDropdownMenuName, DSDropdownMenuPlacements, DSDropdownMenuSlots } from './exported-related/index.js';\nexport {\n defaultProps as DSDropdownMenuV2DefaultProps,\n DSDropdownMenuV2PropTypes,\n actionOptionSchema,\n checkboxOptionSchema,\n optionTypesSchemas,\n sectionOptionSchema,\n separatorOptionSchema,\n singleOptionSchema,\n singleWithSubmenuOptionSchema,\n submenuOptionSchema,\n} from './react-desc-prop-types.js';\nexport type { DSDropdownMenuT } from './react-desc-prop-types.js';\nexport type { DSDropdownV2BridgeT } from './exported-related/conversion-utils/types.js';\n", "import * as React from 'react';\nexport { React };\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADEvB,8BAAuC;AACvC,4BAA6D;AAC7D,oCAAuC;AACvC,8BAAkF;AAClF,mCAWO;",
6
6
  "names": []
7
7
  }
@@ -3,8 +3,5 @@
3
3
  "sideEffects": [
4
4
  "*.css",
5
5
  "*.scss"
6
- ],
7
- "publishConfig": {
8
- "access": "public"
9
- }
6
+ ]
10
7
  }
@@ -60,6 +60,19 @@ const DropdownMenuContent = () => {
60
60
  ...globalAttributes
61
61
  } = (0, import_ds_props_helpers.useGetGlobalAttributes)(props);
62
62
  const { minWidth, minHeight, ...restXstyledProps } = (0, import_ds_props_helpers.useGetXstyledProps)(props);
63
+ const handleClickOutside = (0, import_react.useCallback)(
64
+ (event) => {
65
+ const target = event.target;
66
+ if (!target) return;
67
+ const dropdownListboxes = [
68
+ ...document.body.querySelectorAll(`[data-testid="${import_DropdownMenuDataTestId.DropdownMenuDataTestId.MENU_WRAPPER}"]`)
69
+ ];
70
+ if (dropdownListboxes.every((listbox) => !listbox.contains(target))) {
71
+ onClickOutside(event);
72
+ }
73
+ },
74
+ [onClickOutside]
75
+ );
63
76
  const {
64
77
  refs,
65
78
  floatingStyles,
@@ -67,35 +80,13 @@ const DropdownMenuContent = () => {
67
80
  isOpen: isFloatingOpen
68
81
  } = (0, import_ds_floating_context.useFloatingContext)({
69
82
  externallyControlledIsOpen: isOpened,
83
+ externalReferenceElement: triggerReferenceElement,
70
84
  withoutAnimation: true,
71
85
  customOffset,
72
86
  placement: startPlacementPreference,
73
- placementOrderPreference
87
+ placementOrderPreference,
88
+ onClickOutside: handleClickOutside
74
89
  });
75
- (0, import_react.useEffect)(() => {
76
- if (triggerReferenceElement) refs.setReference(triggerReferenceElement);
77
- }, [triggerReferenceElement, refs]);
78
- const floatingEl = refs.floating;
79
- (0, import_react.useEffect)(() => {
80
- if (!isOpened || !floatingEl) return () => {
81
- };
82
- const listener = (event) => {
83
- const target = event.target;
84
- if (!target || floatingEl.contains(target)) return;
85
- const dropdownListboxes = [
86
- ...document.body.querySelectorAll(`[data-testid="${import_DropdownMenuDataTestId.DropdownMenuDataTestId.MENU_WRAPPER}"]`)
87
- ];
88
- if (dropdownListboxes.every((listbox) => !listbox.contains(target))) {
89
- onClickOutside(event);
90
- }
91
- };
92
- document.addEventListener("mousedown", listener, true);
93
- document.addEventListener("touchstart", listener, true);
94
- return () => {
95
- document.removeEventListener("mousedown", listener, true);
96
- document.removeEventListener("touchstart", listener, true);
97
- };
98
- }, [isOpened, floatingEl, onClickOutside]);
99
90
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
100
91
  import_styled.StyledTriggerWrapper,
101
92
  {
@@ -115,6 +106,7 @@ const DropdownMenuContent = () => {
115
106
  isOpen: isFloatingOpen,
116
107
  floatingStyles: { ...floatingStyles, ...zIndex !== void 0 && { zIndex } },
117
108
  context,
109
+ role: "region",
118
110
  "aria-label": dataPopoverLabel || "dropdown-menu popover",
119
111
  children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DropdownMenuLoading.DropdownMenuLoading, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_DropdownMenuListBox.DropdownMenuListBox, {})
120
112
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/parts/DropdownMenuContent.tsx", "../../../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["/* eslint-disable no-unused-vars */\nimport React, { useContext, useEffect } from 'react';\nimport { useFloatingContext, FloatingWrapper } from '@elliemae/ds-floating-context';\nimport { useGetGlobalAttributes, useGetXstyledProps } from '@elliemae/ds-props-helpers';\nimport { DropdownMenuDataTestId } from '../DropdownMenuDataTestId.js';\nimport { StyledTriggerWrapper } from '../styled.js';\nimport { DropdownMenuListBox } from './DropdownMenuListBox.js';\nimport { DSDropdownMenuContext } from '../DropdownMenuContext.js';\nimport { DropdownMenuLoading } from './DropdownMenuLoading.js';\n\nexport const DropdownMenuContent: React.ComponentType<Record<string, never>> = () => {\n const { props, triggerReferenceElement, setTriggerReferenceElement } = useContext(DSDropdownMenuContext);\n\n const {\n children,\n isOpened,\n onClickOutside,\n startPlacementPreference,\n placementOrderPreference,\n customOffset,\n wrapperStyles,\n isLoading,\n zIndex,\n as,\n } = props;\n const {\n 'data-popover-label': dataPopoverLabel,\n ...globalAttributes\n }: ReturnType<typeof useGetGlobalAttributes> & { 'data-popover-label'?: string } = useGetGlobalAttributes(props);\n // we need to exclude this props from the xstyled props because there is a conflict\n // using submenus items with the name of the prop of ddmenu and xstyled\n const { minWidth, minHeight, ...restXstyledProps } = useGetXstyledProps(props);\n\n const {\n refs,\n floatingStyles,\n context,\n isOpen: isFloatingOpen,\n } = useFloatingContext({\n externallyControlledIsOpen: isOpened,\n withoutAnimation: true,\n customOffset,\n placement: startPlacementPreference,\n placementOrderPreference,\n });\n\n useEffect(() => {\n if (triggerReferenceElement) refs.setReference(triggerReferenceElement);\n }, [triggerReferenceElement, refs]);\n\n // Click-outside: close only when the click is not inside any child dropdown listbox\n const floatingEl = refs.floating;\n useEffect(() => {\n if (!isOpened || !floatingEl) return () => {};\n const listener = (event: MouseEvent | TouchEvent) => {\n const target = event.target as Node | null;\n if (!target || floatingEl.contains(target)) return;\n const dropdownListboxes = [\n ...document.body.querySelectorAll(`[data-testid=\"${DropdownMenuDataTestId.MENU_WRAPPER}\"]`),\n ];\n if (dropdownListboxes.every((listbox) => !listbox.contains(target))) {\n onClickOutside(event);\n }\n };\n document.addEventListener('mousedown', listener, true);\n document.addEventListener('touchstart', listener, true);\n return () => {\n document.removeEventListener('mousedown', listener, true);\n document.removeEventListener('touchstart', listener, true);\n };\n }, [isOpened, floatingEl, onClickOutside]);\n\n return (\n <StyledTriggerWrapper\n data-testid={`${DropdownMenuDataTestId.TRIGGER_WRAPPER}`}\n innerRef={setTriggerReferenceElement}\n aria-haspopup=\"listbox\"\n {...wrapperStyles}\n {...globalAttributes}\n {...restXstyledProps}\n as={as}\n >\n {children}\n {triggerReferenceElement && (\n <FloatingWrapper\n innerRef={refs.setFloating}\n isOpen={isFloatingOpen}\n floatingStyles={{ ...floatingStyles, ...(zIndex !== undefined && { zIndex }) }}\n context={context}\n aria-label={(dataPopoverLabel as string) || 'dropdown-menu popover'}\n >\n {isLoading ? <DropdownMenuLoading /> : <DropdownMenuListBox />}\n </FloatingWrapper>\n )}\n </StyledTriggerWrapper>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADyEnB;AAxEJ,mBAA6C;AAC7C,iCAAoD;AACpD,8BAA2D;AAC3D,oCAAuC;AACvC,oBAAqC;AACrC,iCAAoC;AACpC,iCAAsC;AACtC,iCAAoC;AAE7B,MAAM,sBAAkE,MAAM;AACnF,QAAM,EAAE,OAAO,yBAAyB,2BAA2B,QAAI,yBAAW,gDAAqB;AAEvG,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,QAAM;AAAA,IACJ,sBAAsB;AAAA,IACtB,GAAG;AAAA,EACL,QAAmF,gDAAuB,KAAK;AAG/G,QAAM,EAAE,UAAU,WAAW,GAAG,iBAAiB,QAAI,4CAAmB,KAAK;AAE7E,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV,QAAI,+CAAmB;AAAA,IACrB,4BAA4B;AAAA,IAC5B,kBAAkB;AAAA,IAClB;AAAA,IACA,WAAW;AAAA,IACX;AAAA,EACF,CAAC;AAED,8BAAU,MAAM;AACd,QAAI,wBAAyB,MAAK,aAAa,uBAAuB;AAAA,EACxE,GAAG,CAAC,yBAAyB,IAAI,CAAC;AAGlC,QAAM,aAAa,KAAK;AACxB,8BAAU,MAAM;AACd,QAAI,CAAC,YAAY,CAAC,WAAY,QAAO,MAAM;AAAA,IAAC;AAC5C,UAAM,WAAW,CAAC,UAAmC;AACnD,YAAM,SAAS,MAAM;AACrB,UAAI,CAAC,UAAU,WAAW,SAAS,MAAM,EAAG;AAC5C,YAAM,oBAAoB;AAAA,QACxB,GAAG,SAAS,KAAK,iBAAiB,iBAAiB,qDAAuB,YAAY,IAAI;AAAA,MAC5F;AACA,UAAI,kBAAkB,MAAM,CAAC,YAAY,CAAC,QAAQ,SAAS,MAAM,CAAC,GAAG;AACnE,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AACA,aAAS,iBAAiB,aAAa,UAAU,IAAI;AACrD,aAAS,iBAAiB,cAAc,UAAU,IAAI;AACtD,WAAO,MAAM;AACX,eAAS,oBAAoB,aAAa,UAAU,IAAI;AACxD,eAAS,oBAAoB,cAAc,UAAU,IAAI;AAAA,IAC3D;AAAA,EACF,GAAG,CAAC,UAAU,YAAY,cAAc,CAAC;AAEzC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,GAAG,qDAAuB,eAAe;AAAA,MACtD,UAAU;AAAA,MACV,iBAAc;AAAA,MACb,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACJ;AAAA,MAEC;AAAA;AAAA,QACA,2BACC;AAAA,UAAC;AAAA;AAAA,YACC,UAAU,KAAK;AAAA,YACf,QAAQ;AAAA,YACR,gBAAgB,EAAE,GAAG,gBAAgB,GAAI,WAAW,UAAa,EAAE,OAAO,EAAG;AAAA,YAC7E;AAAA,YACA,cAAa,oBAA+B;AAAA,YAE3C,sBAAY,4CAAC,kDAAoB,IAAK,4CAAC,kDAAoB;AAAA;AAAA,QAC9D;AAAA;AAAA;AAAA,EAEJ;AAEJ;",
4
+ "sourcesContent": ["/* eslint-disable no-unused-vars */\nimport React, { useCallback, useContext } from 'react';\nimport { useFloatingContext, FloatingWrapper } from '@elliemae/ds-floating-context';\nimport { useGetGlobalAttributes, useGetXstyledProps } from '@elliemae/ds-props-helpers';\nimport { DropdownMenuDataTestId } from '../DropdownMenuDataTestId.js';\nimport { StyledTriggerWrapper } from '../styled.js';\nimport { DropdownMenuListBox } from './DropdownMenuListBox.js';\nimport { DSDropdownMenuContext } from '../DropdownMenuContext.js';\nimport { DropdownMenuLoading } from './DropdownMenuLoading.js';\n\nexport const DropdownMenuContent: React.ComponentType<Record<string, never>> = () => {\n const { props, triggerReferenceElement, setTriggerReferenceElement } = useContext(DSDropdownMenuContext);\n\n const {\n children,\n isOpened,\n onClickOutside,\n startPlacementPreference,\n placementOrderPreference,\n customOffset,\n wrapperStyles,\n isLoading,\n zIndex,\n as,\n } = props;\n const {\n 'data-popover-label': dataPopoverLabel,\n ...globalAttributes\n }: ReturnType<typeof useGetGlobalAttributes> & { 'data-popover-label'?: string } = useGetGlobalAttributes(props);\n // we need to exclude this props from the xstyled props because there is a conflict\n // using submenus items with the name of the prop of ddmenu and xstyled\n const { minWidth, minHeight, ...restXstyledProps } = useGetXstyledProps(props);\n\n // Click-outside: close only when the click is not inside any child dropdown listbox.\n // The hook's onClickOutside already excludes the floating + reference elements; we add\n // a check for sibling submenu listboxes that may be portaled elsewhere in the document.\n const handleClickOutside = useCallback(\n (event: MouseEvent | TouchEvent) => {\n const target = event.target as Node | null;\n if (!target) return;\n const dropdownListboxes = [\n ...document.body.querySelectorAll(`[data-testid=\"${DropdownMenuDataTestId.MENU_WRAPPER}\"]`),\n ];\n if (dropdownListboxes.every((listbox) => !listbox.contains(target))) {\n onClickOutside(event);\n }\n },\n [onClickOutside],\n );\n\n const {\n refs,\n floatingStyles,\n context,\n isOpen: isFloatingOpen,\n } = useFloatingContext({\n externallyControlledIsOpen: isOpened,\n externalReferenceElement: triggerReferenceElement,\n withoutAnimation: true,\n customOffset,\n placement: startPlacementPreference,\n placementOrderPreference,\n onClickOutside: handleClickOutside,\n });\n\n return (\n <StyledTriggerWrapper\n data-testid={`${DropdownMenuDataTestId.TRIGGER_WRAPPER}`}\n innerRef={setTriggerReferenceElement}\n aria-haspopup=\"listbox\"\n {...wrapperStyles}\n {...globalAttributes}\n {...restXstyledProps}\n as={as}\n >\n {children}\n {triggerReferenceElement && (\n <FloatingWrapper\n innerRef={refs.setFloating}\n isOpen={isFloatingOpen}\n floatingStyles={{ ...floatingStyles, ...(zIndex !== undefined && { zIndex }) }}\n context={context}\n role=\"region\"\n aria-label={(dataPopoverLabel as string) || 'dropdown-menu popover'}\n >\n {isLoading ? <DropdownMenuLoading /> : <DropdownMenuListBox />}\n </FloatingWrapper>\n )}\n </StyledTriggerWrapper>\n );\n};\n", "import * as React from 'react';\nexport { React };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADkEnB;AAjEJ,mBAA+C;AAC/C,iCAAoD;AACpD,8BAA2D;AAC3D,oCAAuC;AACvC,oBAAqC;AACrC,iCAAoC;AACpC,iCAAsC;AACtC,iCAAoC;AAE7B,MAAM,sBAAkE,MAAM;AACnF,QAAM,EAAE,OAAO,yBAAyB,2BAA2B,QAAI,yBAAW,gDAAqB;AAEvG,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,QAAM;AAAA,IACJ,sBAAsB;AAAA,IACtB,GAAG;AAAA,EACL,QAAmF,gDAAuB,KAAK;AAG/G,QAAM,EAAE,UAAU,WAAW,GAAG,iBAAiB,QAAI,4CAAmB,KAAK;AAK7E,QAAM,yBAAqB;AAAA,IACzB,CAAC,UAAmC;AAClC,YAAM,SAAS,MAAM;AACrB,UAAI,CAAC,OAAQ;AACb,YAAM,oBAAoB;AAAA,QACxB,GAAG,SAAS,KAAK,iBAAiB,iBAAiB,qDAAuB,YAAY,IAAI;AAAA,MAC5F;AACA,UAAI,kBAAkB,MAAM,CAAC,YAAY,CAAC,QAAQ,SAAS,MAAM,CAAC,GAAG;AACnE,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,CAAC,cAAc;AAAA,EACjB;AAEA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV,QAAI,+CAAmB;AAAA,IACrB,4BAA4B;AAAA,IAC5B,0BAA0B;AAAA,IAC1B,kBAAkB;AAAA,IAClB;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,gBAAgB;AAAA,EAClB,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,GAAG,qDAAuB,eAAe;AAAA,MACtD,UAAU;AAAA,MACV,iBAAc;AAAA,MACb,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACJ;AAAA,MAEC;AAAA;AAAA,QACA,2BACC;AAAA,UAAC;AAAA;AAAA,YACC,UAAU,KAAK;AAAA,YACf,QAAQ;AAAA,YACR,gBAAgB,EAAE,GAAG,gBAAgB,GAAI,WAAW,UAAa,EAAE,OAAO,EAAG;AAAA,YAC7E;AAAA,YACA,MAAK;AAAA,YACL,cAAa,oBAA+B;AAAA,YAE3C,sBAAY,4CAAC,kDAAoB,IAAK,4CAAC,kDAAoB;AAAA;AAAA,QAC9D;AAAA;AAAA;AAAA,EAEJ;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../src/index.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import type {} from '@xstyled/system';\n\nexport { checkAndConvertOptions } from './exported-related/conversion-utils/index.js';\nexport { DSDropdownMenuV2, DSDropdownMenuV2WithSchema } from './DSDropdownMenu.js';\nexport { DropdownMenuDataTestId } from './DropdownMenuDataTestId.js';\nexport { DSDropdownMenuName, DSDropdownMenuPlacements, DSDropdownMenuSlots } from './exported-related/index.js';\nexport {\n defaultProps as DSDropdownMenuV2DefaultProps,\n DSDropdownMenuV2PropTypes,\n actionOptionSchema,\n checkboxOptionSchema,\n optionTypesSchemas,\n sectionOptionSchema,\n separatorOptionSchema,\n singleOptionSchema,\n singleWithSubmenuOptionSchema,\n submenuOptionSchema,\n} from './react-desc-prop-types.js';\nexport type { DSDropdownMenuT } from './react-desc-prop-types.js';\n"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import type {} from '@xstyled/system';\n\nexport { checkAndConvertOptions } from './exported-related/conversion-utils/index.js';\nexport { DSDropdownMenuV2, DSDropdownMenuV2WithSchema } from './DSDropdownMenu.js';\nexport { DropdownMenuDataTestId } from './DropdownMenuDataTestId.js';\nexport { DSDropdownMenuName, DSDropdownMenuPlacements, DSDropdownMenuSlots } from './exported-related/index.js';\nexport {\n defaultProps as DSDropdownMenuV2DefaultProps,\n DSDropdownMenuV2PropTypes,\n actionOptionSchema,\n checkboxOptionSchema,\n optionTypesSchemas,\n sectionOptionSchema,\n separatorOptionSchema,\n singleOptionSchema,\n singleWithSubmenuOptionSchema,\n submenuOptionSchema,\n} from './react-desc-prop-types.js';\nexport type { DSDropdownMenuT } from './react-desc-prop-types.js';\nexport type { DSDropdownV2BridgeT } from './exported-related/conversion-utils/types.js';\n"],
5
5
  "mappings": "AAAA,YAAY,WAAW;ACEvB,SAAS,8BAA8B;AACvC,SAAS,kBAAkB,kCAAkC;AAC7D,SAAS,8BAA8B;AACvC,SAAS,oBAAoB,0BAA0B,2BAA2B;AAClF;AAAA,EACkB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;",
6
6
  "names": []
7
7
  }
@@ -3,8 +3,5 @@
3
3
  "sideEffects": [
4
4
  "*.css",
5
5
  "*.scss"
6
- ],
7
- "publishConfig": {
8
- "access": "public"
9
- }
6
+ ]
10
7
  }
@@ -1,6 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { useContext, useEffect } from "react";
3
+ import { useCallback, useContext } from "react";
4
4
  import { useFloatingContext, FloatingWrapper } from "@elliemae/ds-floating-context";
5
5
  import { useGetGlobalAttributes, useGetXstyledProps } from "@elliemae/ds-props-helpers";
6
6
  import { DropdownMenuDataTestId } from "../DropdownMenuDataTestId.js";
@@ -27,6 +27,19 @@ const DropdownMenuContent = () => {
27
27
  ...globalAttributes
28
28
  } = useGetGlobalAttributes(props);
29
29
  const { minWidth, minHeight, ...restXstyledProps } = useGetXstyledProps(props);
30
+ const handleClickOutside = useCallback(
31
+ (event) => {
32
+ const target = event.target;
33
+ if (!target) return;
34
+ const dropdownListboxes = [
35
+ ...document.body.querySelectorAll(`[data-testid="${DropdownMenuDataTestId.MENU_WRAPPER}"]`)
36
+ ];
37
+ if (dropdownListboxes.every((listbox) => !listbox.contains(target))) {
38
+ onClickOutside(event);
39
+ }
40
+ },
41
+ [onClickOutside]
42
+ );
30
43
  const {
31
44
  refs,
32
45
  floatingStyles,
@@ -34,35 +47,13 @@ const DropdownMenuContent = () => {
34
47
  isOpen: isFloatingOpen
35
48
  } = useFloatingContext({
36
49
  externallyControlledIsOpen: isOpened,
50
+ externalReferenceElement: triggerReferenceElement,
37
51
  withoutAnimation: true,
38
52
  customOffset,
39
53
  placement: startPlacementPreference,
40
- placementOrderPreference
54
+ placementOrderPreference,
55
+ onClickOutside: handleClickOutside
41
56
  });
42
- useEffect(() => {
43
- if (triggerReferenceElement) refs.setReference(triggerReferenceElement);
44
- }, [triggerReferenceElement, refs]);
45
- const floatingEl = refs.floating;
46
- useEffect(() => {
47
- if (!isOpened || !floatingEl) return () => {
48
- };
49
- const listener = (event) => {
50
- const target = event.target;
51
- if (!target || floatingEl.contains(target)) return;
52
- const dropdownListboxes = [
53
- ...document.body.querySelectorAll(`[data-testid="${DropdownMenuDataTestId.MENU_WRAPPER}"]`)
54
- ];
55
- if (dropdownListboxes.every((listbox) => !listbox.contains(target))) {
56
- onClickOutside(event);
57
- }
58
- };
59
- document.addEventListener("mousedown", listener, true);
60
- document.addEventListener("touchstart", listener, true);
61
- return () => {
62
- document.removeEventListener("mousedown", listener, true);
63
- document.removeEventListener("touchstart", listener, true);
64
- };
65
- }, [isOpened, floatingEl, onClickOutside]);
66
57
  return /* @__PURE__ */ jsxs(
67
58
  StyledTriggerWrapper,
68
59
  {
@@ -82,6 +73,7 @@ const DropdownMenuContent = () => {
82
73
  isOpen: isFloatingOpen,
83
74
  floatingStyles: { ...floatingStyles, ...zIndex !== void 0 && { zIndex } },
84
75
  context,
76
+ role: "region",
85
77
  "aria-label": dataPopoverLabel || "dropdown-menu popover",
86
78
  children: isLoading ? /* @__PURE__ */ jsx(DropdownMenuLoading, {}) : /* @__PURE__ */ jsx(DropdownMenuListBox, {})
87
79
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../scripts/build/transpile/react-shim.js", "../../../src/parts/DropdownMenuContent.tsx"],
4
- "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable no-unused-vars */\nimport React, { useContext, useEffect } from 'react';\nimport { useFloatingContext, FloatingWrapper } from '@elliemae/ds-floating-context';\nimport { useGetGlobalAttributes, useGetXstyledProps } from '@elliemae/ds-props-helpers';\nimport { DropdownMenuDataTestId } from '../DropdownMenuDataTestId.js';\nimport { StyledTriggerWrapper } from '../styled.js';\nimport { DropdownMenuListBox } from './DropdownMenuListBox.js';\nimport { DSDropdownMenuContext } from '../DropdownMenuContext.js';\nimport { DropdownMenuLoading } from './DropdownMenuLoading.js';\n\nexport const DropdownMenuContent: React.ComponentType<Record<string, never>> = () => {\n const { props, triggerReferenceElement, setTriggerReferenceElement } = useContext(DSDropdownMenuContext);\n\n const {\n children,\n isOpened,\n onClickOutside,\n startPlacementPreference,\n placementOrderPreference,\n customOffset,\n wrapperStyles,\n isLoading,\n zIndex,\n as,\n } = props;\n const {\n 'data-popover-label': dataPopoverLabel,\n ...globalAttributes\n }: ReturnType<typeof useGetGlobalAttributes> & { 'data-popover-label'?: string } = useGetGlobalAttributes(props);\n // we need to exclude this props from the xstyled props because there is a conflict\n // using submenus items with the name of the prop of ddmenu and xstyled\n const { minWidth, minHeight, ...restXstyledProps } = useGetXstyledProps(props);\n\n const {\n refs,\n floatingStyles,\n context,\n isOpen: isFloatingOpen,\n } = useFloatingContext({\n externallyControlledIsOpen: isOpened,\n withoutAnimation: true,\n customOffset,\n placement: startPlacementPreference,\n placementOrderPreference,\n });\n\n useEffect(() => {\n if (triggerReferenceElement) refs.setReference(triggerReferenceElement);\n }, [triggerReferenceElement, refs]);\n\n // Click-outside: close only when the click is not inside any child dropdown listbox\n const floatingEl = refs.floating;\n useEffect(() => {\n if (!isOpened || !floatingEl) return () => {};\n const listener = (event: MouseEvent | TouchEvent) => {\n const target = event.target as Node | null;\n if (!target || floatingEl.contains(target)) return;\n const dropdownListboxes = [\n ...document.body.querySelectorAll(`[data-testid=\"${DropdownMenuDataTestId.MENU_WRAPPER}\"]`),\n ];\n if (dropdownListboxes.every((listbox) => !listbox.contains(target))) {\n onClickOutside(event);\n }\n };\n document.addEventListener('mousedown', listener, true);\n document.addEventListener('touchstart', listener, true);\n return () => {\n document.removeEventListener('mousedown', listener, true);\n document.removeEventListener('touchstart', listener, true);\n };\n }, [isOpened, floatingEl, onClickOutside]);\n\n return (\n <StyledTriggerWrapper\n data-testid={`${DropdownMenuDataTestId.TRIGGER_WRAPPER}`}\n innerRef={setTriggerReferenceElement}\n aria-haspopup=\"listbox\"\n {...wrapperStyles}\n {...globalAttributes}\n {...restXstyledProps}\n as={as}\n >\n {children}\n {triggerReferenceElement && (\n <FloatingWrapper\n innerRef={refs.setFloating}\n isOpen={isFloatingOpen}\n floatingStyles={{ ...floatingStyles, ...(zIndex !== undefined && { zIndex }) }}\n context={context}\n aria-label={(dataPopoverLabel as string) || 'dropdown-menu popover'}\n >\n {isLoading ? <DropdownMenuLoading /> : <DropdownMenuListBox />}\n </FloatingWrapper>\n )}\n </StyledTriggerWrapper>\n );\n};\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACyEnB,SAkBmB,KAlBnB;AAxEJ,SAAgB,YAAY,iBAAiB;AAC7C,SAAS,oBAAoB,uBAAuB;AACpD,SAAS,wBAAwB,0BAA0B;AAC3D,SAAS,8BAA8B;AACvC,SAAS,4BAA4B;AACrC,SAAS,2BAA2B;AACpC,SAAS,6BAA6B;AACtC,SAAS,2BAA2B;AAE7B,MAAM,sBAAkE,MAAM;AACnF,QAAM,EAAE,OAAO,yBAAyB,2BAA2B,IAAI,WAAW,qBAAqB;AAEvG,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,QAAM;AAAA,IACJ,sBAAsB;AAAA,IACtB,GAAG;AAAA,EACL,IAAmF,uBAAuB,KAAK;AAG/G,QAAM,EAAE,UAAU,WAAW,GAAG,iBAAiB,IAAI,mBAAmB,KAAK;AAE7E,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV,IAAI,mBAAmB;AAAA,IACrB,4BAA4B;AAAA,IAC5B,kBAAkB;AAAA,IAClB;AAAA,IACA,WAAW;AAAA,IACX;AAAA,EACF,CAAC;AAED,YAAU,MAAM;AACd,QAAI,wBAAyB,MAAK,aAAa,uBAAuB;AAAA,EACxE,GAAG,CAAC,yBAAyB,IAAI,CAAC;AAGlC,QAAM,aAAa,KAAK;AACxB,YAAU,MAAM;AACd,QAAI,CAAC,YAAY,CAAC,WAAY,QAAO,MAAM;AAAA,IAAC;AAC5C,UAAM,WAAW,CAAC,UAAmC;AACnD,YAAM,SAAS,MAAM;AACrB,UAAI,CAAC,UAAU,WAAW,SAAS,MAAM,EAAG;AAC5C,YAAM,oBAAoB;AAAA,QACxB,GAAG,SAAS,KAAK,iBAAiB,iBAAiB,uBAAuB,YAAY,IAAI;AAAA,MAC5F;AACA,UAAI,kBAAkB,MAAM,CAAC,YAAY,CAAC,QAAQ,SAAS,MAAM,CAAC,GAAG;AACnE,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AACA,aAAS,iBAAiB,aAAa,UAAU,IAAI;AACrD,aAAS,iBAAiB,cAAc,UAAU,IAAI;AACtD,WAAO,MAAM;AACX,eAAS,oBAAoB,aAAa,UAAU,IAAI;AACxD,eAAS,oBAAoB,cAAc,UAAU,IAAI;AAAA,IAC3D;AAAA,EACF,GAAG,CAAC,UAAU,YAAY,cAAc,CAAC;AAEzC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,GAAG,uBAAuB,eAAe;AAAA,MACtD,UAAU;AAAA,MACV,iBAAc;AAAA,MACb,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACJ;AAAA,MAEC;AAAA;AAAA,QACA,2BACC;AAAA,UAAC;AAAA;AAAA,YACC,UAAU,KAAK;AAAA,YACf,QAAQ;AAAA,YACR,gBAAgB,EAAE,GAAG,gBAAgB,GAAI,WAAW,UAAa,EAAE,OAAO,EAAG;AAAA,YAC7E;AAAA,YACA,cAAa,oBAA+B;AAAA,YAE3C,sBAAY,oBAAC,uBAAoB,IAAK,oBAAC,uBAAoB;AAAA;AAAA,QAC9D;AAAA;AAAA;AAAA,EAEJ;AAEJ;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* eslint-disable no-unused-vars */\nimport React, { useCallback, useContext } from 'react';\nimport { useFloatingContext, FloatingWrapper } from '@elliemae/ds-floating-context';\nimport { useGetGlobalAttributes, useGetXstyledProps } from '@elliemae/ds-props-helpers';\nimport { DropdownMenuDataTestId } from '../DropdownMenuDataTestId.js';\nimport { StyledTriggerWrapper } from '../styled.js';\nimport { DropdownMenuListBox } from './DropdownMenuListBox.js';\nimport { DSDropdownMenuContext } from '../DropdownMenuContext.js';\nimport { DropdownMenuLoading } from './DropdownMenuLoading.js';\n\nexport const DropdownMenuContent: React.ComponentType<Record<string, never>> = () => {\n const { props, triggerReferenceElement, setTriggerReferenceElement } = useContext(DSDropdownMenuContext);\n\n const {\n children,\n isOpened,\n onClickOutside,\n startPlacementPreference,\n placementOrderPreference,\n customOffset,\n wrapperStyles,\n isLoading,\n zIndex,\n as,\n } = props;\n const {\n 'data-popover-label': dataPopoverLabel,\n ...globalAttributes\n }: ReturnType<typeof useGetGlobalAttributes> & { 'data-popover-label'?: string } = useGetGlobalAttributes(props);\n // we need to exclude this props from the xstyled props because there is a conflict\n // using submenus items with the name of the prop of ddmenu and xstyled\n const { minWidth, minHeight, ...restXstyledProps } = useGetXstyledProps(props);\n\n // Click-outside: close only when the click is not inside any child dropdown listbox.\n // The hook's onClickOutside already excludes the floating + reference elements; we add\n // a check for sibling submenu listboxes that may be portaled elsewhere in the document.\n const handleClickOutside = useCallback(\n (event: MouseEvent | TouchEvent) => {\n const target = event.target as Node | null;\n if (!target) return;\n const dropdownListboxes = [\n ...document.body.querySelectorAll(`[data-testid=\"${DropdownMenuDataTestId.MENU_WRAPPER}\"]`),\n ];\n if (dropdownListboxes.every((listbox) => !listbox.contains(target))) {\n onClickOutside(event);\n }\n },\n [onClickOutside],\n );\n\n const {\n refs,\n floatingStyles,\n context,\n isOpen: isFloatingOpen,\n } = useFloatingContext({\n externallyControlledIsOpen: isOpened,\n externalReferenceElement: triggerReferenceElement,\n withoutAnimation: true,\n customOffset,\n placement: startPlacementPreference,\n placementOrderPreference,\n onClickOutside: handleClickOutside,\n });\n\n return (\n <StyledTriggerWrapper\n data-testid={`${DropdownMenuDataTestId.TRIGGER_WRAPPER}`}\n innerRef={setTriggerReferenceElement}\n aria-haspopup=\"listbox\"\n {...wrapperStyles}\n {...globalAttributes}\n {...restXstyledProps}\n as={as}\n >\n {children}\n {triggerReferenceElement && (\n <FloatingWrapper\n innerRef={refs.setFloating}\n isOpen={isFloatingOpen}\n floatingStyles={{ ...floatingStyles, ...(zIndex !== undefined && { zIndex }) }}\n context={context}\n role=\"region\"\n aria-label={(dataPopoverLabel as string) || 'dropdown-menu popover'}\n >\n {isLoading ? <DropdownMenuLoading /> : <DropdownMenuListBox />}\n </FloatingWrapper>\n )}\n </StyledTriggerWrapper>\n );\n};\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACkEnB,SAmBmB,KAnBnB;AAjEJ,SAAgB,aAAa,kBAAkB;AAC/C,SAAS,oBAAoB,uBAAuB;AACpD,SAAS,wBAAwB,0BAA0B;AAC3D,SAAS,8BAA8B;AACvC,SAAS,4BAA4B;AACrC,SAAS,2BAA2B;AACpC,SAAS,6BAA6B;AACtC,SAAS,2BAA2B;AAE7B,MAAM,sBAAkE,MAAM;AACnF,QAAM,EAAE,OAAO,yBAAyB,2BAA2B,IAAI,WAAW,qBAAqB;AAEvG,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,QAAM;AAAA,IACJ,sBAAsB;AAAA,IACtB,GAAG;AAAA,EACL,IAAmF,uBAAuB,KAAK;AAG/G,QAAM,EAAE,UAAU,WAAW,GAAG,iBAAiB,IAAI,mBAAmB,KAAK;AAK7E,QAAM,qBAAqB;AAAA,IACzB,CAAC,UAAmC;AAClC,YAAM,SAAS,MAAM;AACrB,UAAI,CAAC,OAAQ;AACb,YAAM,oBAAoB;AAAA,QACxB,GAAG,SAAS,KAAK,iBAAiB,iBAAiB,uBAAuB,YAAY,IAAI;AAAA,MAC5F;AACA,UAAI,kBAAkB,MAAM,CAAC,YAAY,CAAC,QAAQ,SAAS,MAAM,CAAC,GAAG;AACnE,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,CAAC,cAAc;AAAA,EACjB;AAEA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,EACV,IAAI,mBAAmB;AAAA,IACrB,4BAA4B;AAAA,IAC5B,0BAA0B;AAAA,IAC1B,kBAAkB;AAAA,IAClB;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA,gBAAgB;AAAA,EAClB,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,GAAG,uBAAuB,eAAe;AAAA,MACtD,UAAU;AAAA,MACV,iBAAc;AAAA,MACb,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACJ;AAAA,MAEC;AAAA;AAAA,QACA,2BACC;AAAA,UAAC;AAAA;AAAA,YACC,UAAU,KAAK;AAAA,YACf,QAAQ;AAAA,YACR,gBAAgB,EAAE,GAAG,gBAAgB,GAAI,WAAW,UAAa,EAAE,OAAO,EAAG;AAAA,YAC7E;AAAA,YACA,MAAK;AAAA,YACL,cAAa,oBAA+B;AAAA,YAE3C,sBAAY,oBAAC,uBAAoB,IAAK,oBAAC,uBAAoB;AAAA;AAAA,QAC9D;AAAA;AAAA;AAAA,EAEJ;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -4,3 +4,4 @@ export { DropdownMenuDataTestId } from './DropdownMenuDataTestId.js';
4
4
  export { DSDropdownMenuName, DSDropdownMenuPlacements, DSDropdownMenuSlots } from './exported-related/index.js';
5
5
  export { defaultProps as DSDropdownMenuV2DefaultProps, DSDropdownMenuV2PropTypes, actionOptionSchema, checkboxOptionSchema, optionTypesSchemas, sectionOptionSchema, separatorOptionSchema, singleOptionSchema, singleWithSubmenuOptionSchema, submenuOptionSchema, } from './react-desc-prop-types.js';
6
6
  export type { DSDropdownMenuT } from './react-desc-prop-types.js';
7
+ export type { DSDropdownV2BridgeT } from './exported-related/conversion-utils/types.js';
@@ -1 +1,2 @@
1
- export declare const DropdownMenuSkeleton: () => import("react/jsx-runtime").JSX.Element;
1
+ import React from 'react';
2
+ export declare const DropdownMenuSkeleton: () => React.JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elliemae/ds-dropdownmenu-v2",
3
- "version": "3.70.0-next.6",
3
+ "version": "3.70.0-next.61",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Dropdown Menu V2",
6
6
  "files": [
@@ -38,25 +38,25 @@
38
38
  "dependencies": {
39
39
  "@xstyled/system": "~3.8.1",
40
40
  "react-virtual": "~2.10.4",
41
- "@elliemae/ds-circular-progress-indicator": "3.70.0-next.6",
42
- "@elliemae/ds-floating-context": "3.70.0-next.6",
43
- "@elliemae/ds-form-input-text": "3.70.0-next.6",
44
- "@elliemae/ds-grid": "3.70.0-next.6",
45
- "@elliemae/ds-menu-button": "3.70.0-next.6",
46
- "@elliemae/ds-menu-items": "3.70.0-next.6",
47
- "@elliemae/ds-system": "3.70.0-next.6",
48
- "@elliemae/ds-props-helpers": "3.70.0-next.6"
41
+ "@elliemae/ds-floating-context": "3.70.0-next.61",
42
+ "@elliemae/ds-circular-progress-indicator": "3.70.0-next.61",
43
+ "@elliemae/ds-system": "3.70.0-next.61",
44
+ "@elliemae/ds-props-helpers": "3.70.0-next.61",
45
+ "@elliemae/ds-menu-items": "3.70.0-next.61",
46
+ "@elliemae/ds-menu-button": "3.70.0-next.61",
47
+ "@elliemae/ds-form-input-text": "3.70.0-next.61",
48
+ "@elliemae/ds-grid": "3.70.0-next.61"
49
49
  },
50
50
  "devDependencies": {
51
51
  "jest": "^30.0.0",
52
- "styled-components": "~5.3.9",
53
- "@elliemae/ds-test-utils": "3.70.0-next.6",
54
- "@elliemae/ds-monorepo-devops": "3.70.0-next.6"
52
+ "styled-components": "~5.3.11",
53
+ "@elliemae/ds-monorepo-devops": "3.70.0-next.61",
54
+ "@elliemae/ds-test-utils": "3.70.0-next.61"
55
55
  },
56
56
  "peerDependencies": {
57
57
  "react": "^18.3.1",
58
58
  "react-dom": "^18.3.1",
59
- "styled-components": "~5.3.9"
59
+ "styled-components": "~5.3.11"
60
60
  },
61
61
  "publishConfig": {
62
62
  "access": "public",
@@ -71,4 +71,4 @@
71
71
  "build": "cross-env NODE_ENV=production node ../../../scripts/build/build.mjs",
72
72
  "checkDeps": "npx -yes ../../util/ds-codemods check-missing-packages --projectFolderPath=\"./\" --ignorePackagesGlobPattern=\"\" --ignoreFilesGlobPattern=\"**/test-ables/*,**/tests/*\""
73
73
  }
74
- }
74
+ }
@@ -1 +0,0 @@
1
- export {};