@alto-avios/alto-ui 5.1.2 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CalendarDate-uEuHKGse.js +2 -0
- package/dist/CalendarDate-uEuHKGse.js.map +1 -0
- package/dist/{DateField-oLDKE7Lh.js → DateField-rBq9QuR6.js} +4 -4
- package/dist/DateField-rBq9QuR6.js.map +1 -0
- package/dist/DatePicker.module-DlLCFGCM.js +2 -0
- package/dist/DatePicker.module-DlLCFGCM.js.map +1 -0
- package/dist/assets/Accordion.css +1 -1
- package/dist/assets/AviosCurrency.css +1 -1
- package/dist/assets/AviosCurrencyBadge.css +1 -1
- package/dist/assets/AviosCurrencySymbol.css +1 -1
- package/dist/assets/Badge.css +1 -1
- package/dist/assets/Button.css +1 -1
- package/dist/assets/CalloutBanner.css +1 -1
- package/dist/assets/Checkbox.css +1 -1
- package/dist/assets/ClearFieldButton.css +1 -1
- package/dist/assets/Dialog.css +1 -1
- package/dist/assets/ErrorSummary.css +1 -1
- package/dist/assets/Link.css +1 -1
- package/dist/assets/Radio.css +1 -1
- package/dist/assets/SelectCard.css +1 -1
- package/dist/assets/Tag.css +1 -1
- package/dist/components/Accordion/Accordion.js +12 -12
- package/dist/components/Accordion/Accordion.js.map +1 -1
- package/dist/components/AviosBadge/AviosBadge.js.map +1 -1
- package/dist/components/AviosCurrency/AviosCurrency.js +4 -4
- package/dist/components/AviosCurrency/AviosCurrency.js.map +1 -1
- package/dist/components/AviosCurrencyBadge/AviosCurrencyBadge.js +2 -2
- package/dist/components/AviosCurrencyBadge/AviosCurrencyBadge.js.map +1 -1
- package/dist/components/AviosCurrencySymbol/AviosCurrencySymbol.js +6 -6
- package/dist/components/AviosCurrencySymbol/AviosCurrencySymbol.js.map +1 -1
- package/dist/components/Badge/Badge.js +2 -2
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/Box/Box.js +2 -2
- package/dist/components/Button/Button.d.ts +12 -83
- package/dist/components/Button/Button.js +3 -3
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/Calendar/Calendar.js +1 -1
- package/dist/components/CalendarRange/CalendarRange.js +1 -1
- package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/components/CalloutBanner/CalloutBanner.js +9 -9
- package/dist/components/CardSection/CardSection.js +1 -1
- package/dist/components/Carousel/Carousel.js +4 -4
- package/dist/components/Checkbox/Checkbox.d.ts +1 -1
- package/dist/components/Checkbox/Checkbox.js +5 -5
- package/dist/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/ClearFieldButton/ClearFieldButton.js +2 -1
- package/dist/components/ClearFieldButton/ClearFieldButton.js.map +1 -1
- package/dist/components/CreditCardNumberField/CreditCardNumberField.js +1 -1
- package/dist/components/CreditCardSecurityCodeField/CreditCardSecurityCodeField.js +1 -1
- package/dist/components/Currency/Currency.js +1 -1
- package/dist/components/DateField/DateField.d.ts +5 -1
- package/dist/components/DateField/DateField.js +1 -1
- package/dist/components/DateField/index.js +1 -1
- package/dist/components/DatePicker/DatePicker.js +3 -3
- package/dist/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/components/DateRangePicker/DateRangePicker.js +3 -3
- package/dist/components/DateRangePicker/DateRangePicker.js.map +1 -1
- package/dist/components/Dialog/Dialog.js +5 -5
- package/dist/components/ErrorSummary/ErrorSummary.js +2 -2
- package/dist/components/Eyebrow/Eyebrow.js +1 -1
- package/dist/components/Form/Form.js +1 -1
- package/dist/components/Grid/Grid.d.ts +3 -3
- package/dist/components/Grid/Grid.js.map +1 -1
- package/dist/components/Heading/Heading.js +2 -2
- package/dist/components/Icon/Icon.js +1 -1
- package/dist/components/IconBackdrop/IconBackdrop.js +1 -1
- package/dist/components/IconButton/IconButton.js +1 -1
- package/dist/components/IconButton/IconButton.js.map +1 -1
- package/dist/components/Image/Image.js +1 -1
- package/dist/components/Label/Label.js +1 -1
- package/dist/components/Link/Link.d.ts +7 -2
- package/dist/components/Link/Link.js +3 -3
- package/dist/components/Link/Link.js.map +1 -1
- package/dist/components/LoadingSpinner/LoadingSpinner.js +1 -1
- package/dist/components/Menu/Menu.d.ts +8 -36
- package/dist/components/Menu/Menu.js +1 -1
- package/dist/components/Menu/Menu.js.map +1 -1
- package/dist/components/NumberField/NumberField.js +2 -2
- package/dist/components/NumberField/NumberField.js.map +1 -1
- package/dist/components/Paragraph/Paragraph.js +1 -1
- package/dist/components/PasswordField/PasswordField.js +1 -1
- package/dist/components/PhoneNumberField/PhoneNumberField.js +1 -1
- package/dist/components/Radio/Radio.js +1 -1
- package/dist/components/Section/Section.js +1 -1
- package/dist/components/SelectCard/SelectCard.js +5 -5
- package/dist/components/Spacer/Spacer.js +1 -1
- package/dist/components/SubHeading/SubHeading.js +1 -1
- package/dist/components/Tabs/TabList.js +1 -1
- package/dist/components/Tabs/Tabs.js +1 -1
- package/dist/components/Tag/Tag.js +2 -2
- package/dist/components/ToggleButton/ToggleButton.js +1 -1
- package/dist/components/ToggleIconButton/ToggleIconButton.js +1 -1
- package/dist/components/_base/Calendar/Calendar.js +1 -1
- package/dist/components/_base/Input/Input.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/{flex-D0sfBoFP.js → flex-BJOhaXnU.js} +2 -2
- package/dist/{flex-D0sfBoFP.js.map → flex-BJOhaXnU.js.map} +1 -1
- package/dist/index-CCUt_dAN.js +2 -0
- package/dist/{index-DiYWUa65.js.map → index-CCUt_dAN.js.map} +1 -1
- package/dist/index.js +1 -1
- package/dist/{input-DoPyN5PO.js → input-Ct1NB1lu.js} +2 -2
- package/dist/{input-DoPyN5PO.js.map → input-Ct1NB1lu.js.map} +1 -1
- package/dist/{padding-BPweMQaC.js → padding-nClUzhWp.js} +2 -2
- package/dist/{padding-BPweMQaC.js.map → padding-nClUzhWp.js.map} +1 -1
- package/dist/react-number-format.es-kdABQClE.js +2 -0
- package/dist/react-number-format.es-kdABQClE.js.map +1 -0
- package/dist/useCalendarState-BKam8aTi.js +2 -0
- package/dist/useCalendarState-BKam8aTi.js.map +1 -0
- package/dist/useControlledState-CLJIwghQ.js +2 -0
- package/dist/useControlledState-CLJIwghQ.js.map +1 -0
- package/dist/useGlobalListeners-CGYK0FZ8.js +2 -0
- package/dist/useGlobalListeners-CGYK0FZ8.js.map +1 -0
- package/dist/utils/backgroundColor/backgroundColor.js +1 -1
- package/dist/utils/border/border.js +1 -1
- package/dist/utils/date/date.js +1 -1
- package/dist/utils/flex/flex.js +1 -1
- package/dist/utils/focus/focusStyles.js +1 -1
- package/dist/utils/foregroundColour/foregroundColor.js +1 -1
- package/dist/utils/forms/field.js +1 -1
- package/dist/utils/forms/input/input.js +1 -1
- package/dist/utils/padding/padding.js +1 -1
- package/dist/utils/position/position.js +1 -1
- package/dist/utils/stories/DraggableContainer.js +2 -2
- package/dist/utils/stories/DraggableContainer.js.map +1 -1
- package/package.json +10 -5
- package/dist/CalendarDate-B7n_TjYa.js +0 -2
- package/dist/CalendarDate-B7n_TjYa.js.map +0 -1
- package/dist/DateField-oLDKE7Lh.js.map +0 -1
- package/dist/DatePicker.module-CGXPuf59.js +0 -2
- package/dist/DatePicker.module-CGXPuf59.js.map +0 -1
- package/dist/index-DiYWUa65.js +0 -2
- package/dist/react-number-format.es-7RDg5nwN.js +0 -2
- package/dist/react-number-format.es-7RDg5nwN.js.map +0 -1
- package/dist/useCalendarState-C9LlCwg-.js +0 -2
- package/dist/useCalendarState-C9LlCwg-.js.map +0 -1
- package/dist/useControlledState-DCczKDCM.js +0 -2
- package/dist/useControlledState-DCczKDCM.js.map +0 -1
- package/dist/useFormValidationState-CqKt4CQY.js +0 -2
- package/dist/useFormValidationState-CqKt4CQY.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsxs as e,jsx as
|
|
2
|
-
return e(
|
|
3
|
-
/* @__PURE__ */
|
|
1
|
+
import{jsxs as e,jsx as i}from"react/jsx-runtime";import{forwardRef as s,useEffect as r,useMemo as o}from"react";import{Link as l}from"react-aria-components";import{useObjectRef as n}from"@react-aria/utils";import{VisuallyHidden as _}from"../VisuallyHidden/VisuallyHidden.js";import{Icon as m}from"../Icon/Icon.js";import{c as t}from"../../index-CCUt_dAN.js";import{focusStyleVariants as a}from"../../utils/focus/focusStyles.js";import{foregroundColorVariants as d}from"../../utils/foregroundColour/foregroundColor.js";import{getBaseValue as f,generateResponsiveClasses as z}from"../../utils/breakpoint/responsiveSSR.js";import '../../assets/Link.css';const x={link:"_link_i9ovf_1","link__text-wrapper":"_link__text-wrapper_i9ovf_11","size--xs":"_size--xs_i9ovf_42","size--sm":"_size--sm_i9ovf_45","size--md":"_size--md_i9ovf_48","size--lg":"_size--lg_i9ovf_51","sm:size--xs":"_sm:size--xs_i9ovf_1","sm:size--sm":"_sm:size--sm_i9ovf_1","sm:size--md":"_sm:size--md_i9ovf_1","sm:size--lg":"_sm:size--lg_i9ovf_1","md:size--xs":"_md:size--xs_i9ovf_1","md:size--sm":"_md:size--sm_i9ovf_1","md:size--md":"_md:size--md_i9ovf_1","md:size--lg":"_md:size--lg_i9ovf_1","lg:size--xs":"_lg:size--xs_i9ovf_1","lg:size--sm":"_lg:size--sm_i9ovf_1","lg:size--md":"_lg:size--md_i9ovf_1","lg:size--lg":"_lg:size--lg_i9ovf_1","xl:size--xs":"_xl:size--xs_i9ovf_1","xl:size--sm":"_xl:size--sm_i9ovf_1","xl:size--md":"_xl:size--md_i9ovf_1","xl:size--lg":"_xl:size--lg_i9ovf_1","xxl:size--xs":"_xxl:size--xs_i9ovf_1","xxl:size--sm":"_xxl:size--sm_i9ovf_1","xxl:size--md":"_xxl:size--md_i9ovf_1","xxl:size--lg":"_xxl:size--lg_i9ovf_1",underline:"_underline_i9ovf_100"},c=z(x),u=t(x.link,{variants:{size:{xs:x["size--xs"],sm:x["size--sm"],md:x["size--md"],lg:x["size--lg"]},underline:{true:x.underline,false:""},iconEnd:{true:x.iconEnd,false:""},iconStart:{true:x.iconStart,false:""}},defaultVariants:{size:"md",underline:!1}}),p=s(function({size:s="md",underline:t=!0,iconStartProps:z,iconEndProps:p={iconName:"arrow-right"},href:v,target:g="_self",focusStyle:S="default",children:k,ariaLabelExternal:h,externalLinkScreenReaderText:j="opens in a new tab",foregroundColor:E="accentPrimary",...w},N){const y=n(N);r(()=>{h&&"production"!==process.env.NODE_ENV&&console.warn("[Link] `ariaLabelExternal` prop is deprecated. Use the `externalLinkScreenReaderText` prop instead.")},[h]);const L=f(s,"md"),b=c(s,"size"),C="_blank"===g,V=o(()=>{switch(s){case"xs":case"sm":return"0.75x";case"md":default:return"1x";case"lg":return"1.25x"}},[s]);/* @__PURE__ */
|
|
2
|
+
return e(l,{className:[u({size:L,underline:t}),a({focusStyle:S}),d({foregroundColor:E}),...b].filter(Boolean).join(" "),href:v,target:g,rel:C?"noopener noreferrer":void 0,ref:y,...w,children:[z&&/* @__PURE__ */i(m,{className:u({iconStart:!!z}),iconSize:V,...z}),
|
|
3
|
+
/* @__PURE__ */i("span",{className:x["link__text-wrapper"],children:k}),p&&/* @__PURE__ */i(m,{className:u({iconEnd:!!p}),iconSize:V,...p}),C&&/* @__PURE__ */i(_,{children:j||h})]})});export{p as default};
|
|
4
4
|
//# sourceMappingURL=Link.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.js","sources":["../../../src/components/Link/Link.tsx"],"sourcesContent":["import { useMemo, useEffect, forwardRef } from 'react';\nimport {\n LinkProps as AriaLinkProps,\n Link as AriaLink,\n} from 'react-aria-components';\nimport { useObjectRef } from '@react-aria/utils';\nimport VisuallyHidden from '../VisuallyHidden/VisuallyHidden';\nimport { Icon, IconProps, IconSize } from '../Icon/Icon';\nimport { cva } from 'class-variance-authority';\nimport styles from './Link.module.css';\nimport { focusStyleVariants } from '../../utils/focus/focusStyles';\nimport {\n foregroundColorVariants,\n type ForegroundVariants,\n} from '../../utils/foregroundColour/foregroundColor';\n\nconst link = cva(styles.link, {\n variants: {\n size: {\n xs: styles
|
|
1
|
+
{"version":3,"file":"Link.js","sources":["../../../src/components/Link/Link.tsx"],"sourcesContent":["import { useMemo, useEffect, forwardRef } from 'react';\nimport {\n LinkProps as AriaLinkProps,\n Link as AriaLink,\n} from 'react-aria-components';\nimport { useObjectRef } from '@react-aria/utils';\nimport VisuallyHidden from '../VisuallyHidden/VisuallyHidden';\nimport { Icon, IconProps, IconSize } from '../Icon/Icon';\nimport { cva } from 'class-variance-authority';\nimport styles from './Link.module.css';\nimport { focusStyleVariants } from '../../utils/focus/focusStyles';\nimport {\n foregroundColorVariants,\n type ForegroundVariants,\n} from '../../utils/foregroundColour/foregroundColor';\nimport {\n generateResponsiveClasses,\n getBaseValue,\n WithResponsiveProps,\n} from '../../utils/breakpoint/responsiveSSR';\n\nconst getResponsiveClasses = generateResponsiveClasses(styles);\n\nconst link = cva(styles.link, {\n variants: {\n size: {\n xs: styles['size--xs'],\n sm: styles['size--sm'],\n md: styles['size--md'],\n lg: styles['size--lg'],\n },\n underline: {\n true: styles.underline,\n false: '',\n },\n iconEnd: {\n true: styles.iconEnd,\n false: '',\n },\n iconStart: {\n true: styles.iconStart,\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n underline: false,\n },\n});\n\nexport interface LinkBaseProps extends AriaLinkProps {\n /**\n * The children of the component. A function may be provided to alter the children based on component state.\n */\n children?: React.ReactNode | string;\n /**\n * What the size of the Link is\n * @default 'md'\n */\n size?: 'xs' | 'sm' | 'md' | 'lg';\n /**\n * Whether the Link should be underlined\n * @default false\n */\n underline?: boolean;\n /**\n * Whether the link is disabled.\n * @default false\n */\n isDisabled?: boolean;\n /**\n * The foreground color of the label\n */\n foregroundColor?: ForegroundVariants['foregroundColor'];\n /**\n * Whether an icon should display at the end of Link and icon properties\n * @default { iconName: 'arrow-right' }\n */\n iconEndProps?: IconProps | false;\n /**\n * Whether an icon should display at the start of the Link and icon properties\n */\n iconStartProps?: IconProps;\n /**\n * The URL the Link will navigate to\n */\n href?: string;\n /**\n * The target attribute for the Link\n * @default '_self'\n */\n target?: string;\n /**\n * @deprecated Use externalLinkScreenReaderText instead\n * Aria label applied when target=\"_blank\"\n * @default \"open in new tab\"\n */\n ariaLabelExternal?: string;\n /**\n * Specify custom screen reader text for external links\n * @default \"opens in a new tab\"\n */\n externalLinkScreenReaderText?: string;\n /**\n * \tThe focus style of the button\n */\n focusStyle?: 'default' | 'white';\n}\n\ntype ResponsivePropKeys = 'size';\n\nexport type LinkProps = WithResponsiveProps<LinkBaseProps, ResponsivePropKeys>;\n\nconst Link = forwardRef<HTMLAnchorElement, LinkProps>(function Link(\n {\n size = 'md',\n underline = true,\n iconStartProps,\n iconEndProps = { iconName: 'arrow-right' },\n href,\n target = '_self',\n focusStyle = 'default',\n children,\n ariaLabelExternal,\n externalLinkScreenReaderText = 'opens in a new tab',\n foregroundColor = 'accentPrimary',\n ...props\n },\n forwardedRef,\n) {\n const anchorRef = useObjectRef(forwardedRef);\n\n // Deprecation warning\n useEffect(() => {\n if (ariaLabelExternal && process.env.NODE_ENV !== 'production') {\n console.warn(\n '[Link] `ariaLabelExternal` prop is deprecated. Use the `externalLinkScreenReaderText` prop instead.',\n );\n }\n }, [ariaLabelExternal]);\n\n const baseSize = getBaseValue(size, 'md');\n\n const sizeResponsiveClasses = getResponsiveClasses(size, 'size');\n\n const isExternalLink = target === '_blank';\n\n const iconSize = useMemo<IconSize>(() => {\n switch (size) {\n case 'xs':\n return '0.75x';\n case 'sm':\n return '0.75x';\n case 'md':\n return '1x';\n case 'lg':\n return '1.25x';\n default:\n return '1x';\n }\n }, [size]);\n\n return (\n <AriaLink\n className={[\n link({ size: baseSize, underline }),\n focusStyleVariants({ focusStyle }),\n foregroundColorVariants({ foregroundColor }),\n ...sizeResponsiveClasses,\n ]\n .filter(Boolean)\n .join(' ')}\n href={href}\n target={target}\n rel={isExternalLink ? 'noopener noreferrer' : undefined}\n ref={anchorRef}\n {...props}\n >\n {iconStartProps && (\n <Icon\n className={link({ iconStart: !!iconStartProps })}\n iconSize={iconSize}\n {...iconStartProps}\n />\n )}\n <span className={styles['link__text-wrapper']}>{children}</span>\n {iconEndProps && (\n <Icon\n className={link({ iconEnd: !!iconEndProps })}\n iconSize={iconSize}\n {...iconEndProps}\n />\n )}\n {isExternalLink && (\n <VisuallyHidden>\n {externalLinkScreenReaderText || ariaLabelExternal}\n </VisuallyHidden>\n )}\n </AriaLink>\n );\n});\n\nexport default Link;\n"],"names":["getResponsiveClasses","generateResponsiveClasses","styles","link","cva","variants","size","xs","sm","md","lg","underline","true","false","iconEnd","iconStart","defaultVariants","Link","forwardRef","iconStartProps","iconEndProps","iconName","href","target","focusStyle","children","ariaLabelExternal","externalLinkScreenReaderText","foregroundColor","props","forwardedRef","anchorRef","useObjectRef","useEffect","process","env","NODE_ENV","console","warn","baseSize","getBaseValue","sizeResponsiveClasses","isExternalLink","iconSize","useMemo","jsxs","AriaLink","className","focusStyleVariants","foregroundColorVariants","filter","Boolean","join","rel","ref","jsx","Icon","VisuallyHidden"],"mappings":"6kDAqBMA,EAAuBC,EAA0BC,GAEjDC,EAAOC,EAAIF,EAAOC,KAAM,CAC5BE,SAAU,CACRC,KAAM,CACJC,GAAIL,EAAO,YACXM,GAAIN,EAAO,YACXO,GAAIP,EAAO,YACXQ,GAAIR,EAAO,aAEbS,UAAW,CACTC,KAAMV,EAAOS,UACbE,MAAO,IAETC,QAAS,CACPF,KAAMV,EAAOY,QACbD,MAAO,IAETE,UAAW,CACTH,KAAMV,EAAOa,UACbF,MAAO,KAGXG,gBAAiB,CACfV,KAAM,KACNK,WAAW,KAmETM,EAAOC,EAAyC,UACpDZ,KACEA,EAAO,KACPK,UAAAA,GAAY,EAAAQ,eACZA,EAAAC,aACAA,EAAe,CAAEC,SAAU,eAAAC,KAC3BA,EAAAC,OACAA,EAAS,QAAAC,WACTA,EAAa,UAAAC,SACbA,EAAAC,kBACAA,EAAAC,6BACAA,EAA+B,qBAAAC,gBAC/BA,EAAkB,mBACfC,GAELC,GAEA,MAAMC,EAAYC,EAAaF,GAG/BG,EAAU,KACJP,GAA8C,eAAzBQ,QAAQC,IAAIC,UACnCC,QAAQC,KACN,wGAGH,CAACZ,IAEJ,MAAMa,EAAWC,EAAalC,EAAM,MAE9BmC,EAAwBzC,EAAqBM,EAAM,QAEnDoC,EAA4B,WAAXnB,EAEjBoB,EAAWC,EAAkB,KACjC,OAAQtC,GACN,IAAK,KAEL,IAAK,KACH,MAAO,QACT,IAAK,KAIL,QACE,MAAO,KAHT,IAAK,KACH,MAAO,UAIV,CAACA;AAEJ,OACEuC,EAACC,EAAA,CACCC,UAAW,CACT5C,EAAK,CAAEG,KAAMiC,EAAU5B,UAAAA,IACvBqC,EAAmB,CAAExB,eACrByB,EAAwB,CAAErB,uBACvBa,GAEFS,OAAOC,SACPC,KAAK,KACR9B,OACAC,SACA8B,IAAKX,EAAiB,2BAAwB,EAC9CY,IAAKvB,KACDF,EAEHJ,SAAA,CAAAN,kBACCoC,EAACC,EAAA,CACCT,UAAW5C,EAAK,CAAEY,YAAaI,IAC/BwB,cACIxB;iBAGP,OAAA,CAAK4B,UAAW7C,EAAO,sBAAwBuB,aAC/CL,kBACCmC,EAACC,EAAA,CACCT,UAAW5C,EAAK,CAAEW,UAAWM,IAC7BuB,cACIvB,IAGPsB,kBACCa,EAACE,EAAA,CACEhC,SAAAE,GAAgCD,MAK3C"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as i}from"react/jsx-runtime";import{c as e}from"../../index-
|
|
1
|
+
import{jsx as i}from"react/jsx-runtime";import{c as e}from"../../index-CCUt_dAN.js";import{ProgressBar as n}from"react-aria-components";import{foregroundColorVariants as o}from"../../utils/foregroundColour/foregroundColor.js";import*as a from"react";import{forwardRef as _}from"react";import '../../assets/LoadingSpinner.css';const x={loadingSpinner:"_loadingSpinner_1pdea_1",iconWrapper:"_iconWrapper_1pdea_13",spinner:"_spinner_1pdea_21",iconSize0_5x:"_iconSize0_5x_1pdea_37",iconSize0_75x:"_iconSize0_75x_1pdea_42",iconSize1x:"_iconSize1x_1pdea_47",iconSize1_25x:"_iconSize1_25x_1pdea_52",iconSize1_5x:"_iconSize1_5x_1pdea_57",iconSize2x:"_iconSize2x_1pdea_62",iconSize2_5x:"_iconSize2_5x_1pdea_67",iconSize3x:"_iconSize3x_1pdea_72",iconSize4x:"_iconSize4x_1pdea_77",iconSize5x:"_iconSize5x_1pdea_82",iconSize6x:"_iconSize6x_1pdea_87",iconSize7x:"_iconSize7x_1pdea_92",iconSize8x:"_iconSize8x_1pdea_97",iconSize9x:"_iconSize9x_1pdea_102",iconSize10x:"_iconSize10x_1pdea_107"},c=_(({title:i,titleId:e,...n},o)=>/* @__PURE__ */a.createElement("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",ref:o,"aria-labelledby":e,...n},i?/* @__PURE__ */a.createElement("title",{id:e},i):null,/* @__PURE__ */a.createElement("path",{opacity:.4,d:"M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM3 12C3 16.9706 7.02944 21 12 21C16.9706 21 21 16.9706 21 12C21 7.02944 16.9706 3 12 3C7.02944 3 3 7.02944 3 12Z"}),/* @__PURE__ */a.createElement("path",{d:"M24 12C24 10.4241 23.6896 8.86371 23.0865 7.4078C22.4835 5.95189 21.5996 4.62902 20.4853 3.51472C19.3709 2.40042 18.0481 1.5165 16.5922 0.913445C15.1363 0.310389 13.5758 -6.88831e-08 12 0C11.1715 0 10.5 0.671573 10.5 1.5C10.5 2.32843 11.1715 3 12 3C13.1819 3 14.3522 3.23279 15.4441 3.68508C16.5361 4.13738 17.5282 4.80031 18.3639 5.63604C19.1997 6.47177 19.8626 7.46392 20.3149 8.55585C20.7672 9.64778 21 10.8181 21 12C21 12.8284 21.6715 13.5 22.4999 13.5C23.3284 13.5 24 12.8284 24 12Z"}))),r=e(x.loadingSpinner,{variants:{buttonSize:{sm:x.sm,md:x.md,lg:x.lg},size:{"0.5x":x.iconSize0_5x,"0.75x":x.iconSize0_75x,"1x":x.iconSize1x,"1.25x":x.iconSize1_25x,"1.5x":x.iconSize1_5x,"2x":x.iconSize2x,"2.5x":x.iconSize2_5x,"3x":x.iconSize3x,"4x":x.iconSize4x,"5x":x.iconSize5x,"6x":x.iconSize6x,"7x":x.iconSize7x,"8x":x.iconSize8x,"9x":x.iconSize9x,"10x":x.iconSize10x}},defaultVariants:{size:"1x",buttonSize:"md"}}),t=({size:e="2x",buttonSize:a="md",styleVariant:_="secondary","aria-label":t="Loading",className:z,...S})=>/* @__PURE__ */i(n,{isIndeterminate:!0,className:`${r({buttonSize:a,size:e})} ${z} ${o({foregroundColor:_})} `,"aria-valuetext":t,"aria-label":t,"data-testid":"alto-loading-spinner",...S,children:/* @__PURE__ */i("span",{className:`${x.iconWrapper} ${r({size:e})}`,"aria-hidden":"true",children:/* @__PURE__ */i(c,{className:x.spinner})})});export{t as default};
|
|
2
2
|
//# sourceMappingURL=LoadingSpinner.js.map
|
|
@@ -84,45 +84,17 @@ export interface MenuProps {
|
|
|
84
84
|
/**
|
|
85
85
|
* Component to replace default Button with another button-like component/element
|
|
86
86
|
*/
|
|
87
|
-
export declare const Trigger: React.ForwardRefExoticComponent<import('
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
emphasis?: "primary" | "secondary" | "secondaryFilled" | "tertiary" | "quaternary";
|
|
92
|
-
size?: "lg" | "sm" | "md";
|
|
93
|
-
iconEndProps?: import('..').IconProps;
|
|
94
|
-
iconStartProps?: import('..').IconProps;
|
|
95
|
-
isLoading?: boolean;
|
|
96
|
-
textAlign?: "left" | "right" | "center";
|
|
97
|
-
children?: React.ReactNode;
|
|
98
|
-
type?: "button" | "submit" | "reset";
|
|
99
|
-
fullWidth?: boolean;
|
|
100
|
-
target?: "_blank" | "_self" | "_parent" | "_top";
|
|
101
|
-
focusStyle?: "default" | "white";
|
|
102
|
-
slot?: string;
|
|
103
|
-
iconButton?: boolean;
|
|
104
|
-
passthroughProps?: Partial<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>> | undefined;
|
|
87
|
+
export declare const Trigger: React.ForwardRefExoticComponent<Omit<import('../Button/Button').ButtonBaseProps<"button">, "size" | "fullWidth" | "textAlign"> & {
|
|
88
|
+
size?: import('../../utils/breakpoint/responsiveSSR').ResponsiveValue<NonNullable<("lg" | "sm" | "md") | undefined>> | undefined;
|
|
89
|
+
fullWidth?: import('../../utils/breakpoint/responsiveSSR').ResponsiveValue<NonNullable<boolean | undefined>> | undefined;
|
|
90
|
+
textAlign?: import('../../utils/breakpoint/responsiveSSR').ResponsiveValue<NonNullable<("left" | "right" | "center") | undefined>> | undefined;
|
|
105
91
|
} & React.RefAttributes<HTMLButtonElement>>;
|
|
106
92
|
export declare const Menu: {
|
|
107
93
|
({ label, "aria-label": ariaLabel, isDisabled, placement, buttonEmphasis, buttonStyleVariant, buttonOpenVariant, alignToElementId, shouldFlip, openOnHoverAndFocus, allowTabOut, closeOnHover, children, iconStartProps, iconEndProps, onOpenChange, }: MenuProps): import("react/jsx-runtime").JSX.Element;
|
|
108
|
-
Trigger: React.ForwardRefExoticComponent<import('
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
emphasis?: "primary" | "secondary" | "secondaryFilled" | "tertiary" | "quaternary";
|
|
113
|
-
size?: "lg" | "sm" | "md";
|
|
114
|
-
iconEndProps?: import('..').IconProps;
|
|
115
|
-
iconStartProps?: import('..').IconProps;
|
|
116
|
-
isLoading?: boolean;
|
|
117
|
-
textAlign?: "left" | "right" | "center";
|
|
118
|
-
children?: React.ReactNode;
|
|
119
|
-
type?: "button" | "submit" | "reset";
|
|
120
|
-
fullWidth?: boolean;
|
|
121
|
-
target?: "_blank" | "_self" | "_parent" | "_top";
|
|
122
|
-
focusStyle?: "default" | "white";
|
|
123
|
-
slot?: string;
|
|
124
|
-
iconButton?: boolean;
|
|
125
|
-
passthroughProps?: Partial<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>> | undefined;
|
|
94
|
+
Trigger: React.ForwardRefExoticComponent<Omit<import('../Button/Button').ButtonBaseProps<"button">, "size" | "fullWidth" | "textAlign"> & {
|
|
95
|
+
size?: import('../../utils/breakpoint/responsiveSSR').ResponsiveValue<NonNullable<("lg" | "sm" | "md") | undefined>> | undefined;
|
|
96
|
+
fullWidth?: import('../../utils/breakpoint/responsiveSSR').ResponsiveValue<NonNullable<boolean | undefined>> | undefined;
|
|
97
|
+
textAlign?: import('../../utils/breakpoint/responsiveSSR').ResponsiveValue<NonNullable<("left" | "right" | "center") | undefined>> | undefined;
|
|
126
98
|
} & React.RefAttributes<HTMLButtonElement>>;
|
|
127
99
|
};
|
|
128
100
|
export default Menu;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsxs as e,jsx as t}from"react/jsx-runtime";import n,{forwardRef as r,useId as o,useRef as u,useEffect as s,useState as i}from"react";import{Button as c}from"../Button/Button.js";import{Popover as l}from"../Popover/Popover.js";import{IconButton as a}from"../IconButton/IconButton.js";import{useObjectRef as d}from"@react-aria/utils";import{useButton as m}from"@react-aria/button";import '../../assets/Menu.css';const v="_menuContainer_qw7ps_1",p="_menuContent_qw7ps_6",f={activeMenuId:null,setActiveMenu:e=>{f.activeMenuId=e},getActiveMenu:()=>f.activeMenuId},E=(e,t,n,r)=>{const o=()=>{const e=r.current;if(e){const t=(e=>{const t=Array.from(document.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])')),n=t.indexOf(e);return-1!==n&&n<t.length-1?t[n+1]:t[0]})(e);n(),setTimeout(()=>{t&&t.focus()},10)}else n()},u=()=>e.current?Array.from(e.current.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])')):[];return{handleMenuKeyDown:e=>{if("Escape"===e.key)return e.preventDefault(),n(),void(r.current&&r.current.focus());if("Tab"===e.key&&t)return e.preventDefault(),void o();((e,t)=>{if(0===t.length)return;const n=document.activeElement,r=t.indexOf(n);"ArrowDown"===e.key?(e.preventDefault(),t[r<t.length-1?r+1:0].focus()):"ArrowUp"===e.key?(e.preventDefault(),t[r>0?r-1:t.length-1].focus()):"Home"===e.key?(e.preventDefault(),t[0].focus()):"End"===e.key&&(e.preventDefault(),t[t.length-1].focus())})(e,u())},getFocusableElements:u}},b=r(function({children:e,...t},r){const o=n.Children.only(e),u=d(r),s={...t,...o.props},{buttonProps:i}=m(s,u),l=o.type!==c&&o.type!==a?i:s;return n.cloneElement(o,{...l,ref:u})}),g=({label:r,"aria-label":a,isDisabled:d=!1,placement:m="bottom start",buttonEmphasis:g="tertiary",buttonStyleVariant:h="neutral",buttonOpenVariant:y=h,alignToElementId:T,shouldFlip:M=!0,openOnHoverAndFocus:A=!1,allowTabOut:O=!0,closeOnHover:L=!0,children:D,iconStartProps:w,iconEndProps:x,onOpenChange:I})=>{const k=`menu-${o()}`,F=u(null),P=u(null),K=u(null),{isOpen:V,setIsOpen:B,preventFocusOpen:C,setPreventFocusOpen:_,openedViaKeyboard:N,setOpenedViaKeyboard:S,closeMenu:j,openMenu:q,toggleMenu:H}=((e,t)=>{const n=u(!1),[r,o]=i(!1),[c,l]=i(!1),[a,d]=i(!1),m=()=>{f.setActiveMenu(null),o(!1),l(!0),setTimeout(()=>{l(!1)},300)},v=(t=!1)=>{f.getActiveMenu()&&f.getActiveMenu()!==e&&document.dispatchEvent(new CustomEvent("menu:closeAll",{detail:{exceptMenuId:e}})),f.setActiveMenu(e),o(!0),d(t)};return s(()=>{t&&n.current&&t(r)},[r]),s(()=>{n.current=!0},[]),{isOpen:r,setIsOpen:o,preventFocusOpen:c,setPreventFocusOpen:l,openedViaKeyboard:a,setOpenedViaKeyboard:d,closeMenu:m,openMenu:v,toggleMenu:()=>{if(r)m();else{const e="BUTTON"===document.activeElement?.tagName;v(e)}}}})(k,I),{handleMenuKeyDown:U,getFocusableElements:R}=E(K,O,j,F);((e,t,n,r,o,u,i,c,l,a)=>{s(()=>{if(!e||t)return;let n=null,u=!1;const s=()=>{n&&(clearTimeout(n),n=null)},d=()=>{const e=o.current,t=i.current;if(!e)return;const r=e.matches(":hover"),s=t?.matches(":hover")||!1;r||s||!u||(u=!1,n=setTimeout(m,300))},m=()=>{f.getActiveMenu()===r&&a()},v=()=>{setTimeout(d,50)},p=()=>{s(),u||(u=!0,c||(n=setTimeout(()=>{l(!1)},300)))},E=()=>{v()},b=()=>{s(),u=!0},g=()=>{v()},h=o.current,y=i.current;return h&&(h.addEventListener("mouseenter",p),h.addEventListener("mouseleave",E)),c&&y&&(y.addEventListener("mouseenter",b),y.addEventListener("mouseleave",g)),()=>{h&&(h.removeEventListener("mouseenter",p),h.removeEventListener("mouseleave",E)),y&&(y.removeEventListener("mouseenter",b),y.removeEventListener("mouseleave",g)),s()}},[e,t,r,c,l,a,o,i]),s(()=>{if(!e||t)return;const s=o.current;if(!s)return;let i=null,c=!1;const d=()=>{n||(i&&clearTimeout(i),c=!0,i=setTimeout(()=>{const e=document.activeElement===s&&document.activeElement!==document.body;l(e),setTimeout(()=>{c=!1},500)},300))},m=e=>{if(c)return;i&&clearTimeout(i);const t=u.current,n=e.relatedTarget;t&&!t.contains(n)&&(i=setTimeout(()=>{f.getActiveMenu()===r&&a()},200))};return s.addEventListener("focus",d),s.addEventListener("blur",m),()=>{s.removeEventListener("focus",d),s.removeEventListener("blur",m),i&&clearTimeout(i)}},[e,t,n,r,l,a,u,o])})(A,d,C,k,F,P,K,V,q,j),((e,t,n,r,o,u)=>{s(()=>{if(!t||!n||r)return;let o=null;const s=()=>{o&&(clearTimeout(o),o=null)},i=()=>{s(),o=setTimeout(()=>{u()},200)},c=()=>{s()},l=e.current;return l&&(l.addEventListener("mouseenter",c),l.addEventListener("mouseleave",i)),()=>{l&&(l.removeEventListener("mouseenter",c),l.removeEventListener("mouseleave",i)),s()}},[t,n,r,o,u,e])})(K,V,L,A,k,j),((e,t,n,r,o)=>{s(()=>{if(!n)return;const r=n=>{const r=n.target,u=t.current,s=e.current,i=u?.contains(r)&&!s?.contains(r);s&&s.contains(r)?r.closest('[data-menu-close="true"]')&&o():i||o()};return document.addEventListener("click",r,!0),()=>{document.removeEventListener("click",r,!0)}},[n,r,o,e,t])})(K,P,V,k,j);const $=V?y:h;s(()=>{const e=e=>{const{exceptMenuId:t}=e.detail||{};t&&t===k||V&&B(!1)};return document.addEventListener("menu:closeAll",e),()=>{document.removeEventListener("menu:closeAll",e)}},[k,V,B]),s(()=>{const e=f.getActiveMenu()===k;e!==V&&B(e)},[k,V,B]),s(()=>{if(V&&N&&K.current){const e=R();e.length>0&&setTimeout(()=>{e[0].focus()},50)}},[V,N,R]),s(()=>{V||S(!1)},[V,S]);const z={isOpen:V,open:()=>q(),close:j,toggle:()=>H(),setOpen:e=>{e?q():j()}},G={ref:F,"aria-haspopup":!0,"aria-expanded":V,onPress:()=>{_(!1);const e=document.activeElement===F.current;S(e),H()},onKeyDown:e=>{"Escape"===e.key&&V?(e.preventDefault(),j(),_(!0),setTimeout(()=>{_(!1)},300)):"ArrowDown"!==e.key||V||(e.preventDefault(),q(!0))}},J=n.Children.toArray(D);let Q=D,W=/* @__PURE__ */t(c,{emphasis:g,styleVariant:$,isDisabled:d,iconStartProps:w,iconEndProps:x,...G,children:r});const X=J.findIndex(e=>e?.type===b),Y=J[X];return n.isValidElement(Y)&&(W=n.cloneElement(Y,G),Q=J.filter((e,t)=>t!==X)),/* @__PURE__ */e("div",{className:v,ref:P,children:[W,V&&/* @__PURE__ */t(l,{state:z,triggerRef:(()=>{if(T){const e=document.getElementById(T);if(e)return{current:e}}return F})(),hasArrow:!1,placement:m,shouldFlip:M,isNonModal:!0,allowTabOut:O,autoFocus:N,children:/* @__PURE__ */t("div",{className:p,ref:K,onKeyDown:U,role:"menu","aria-label":a||r,tabIndex:-1,children:Q})})]})};g.Trigger=b;export{g as Menu,b as Trigger,g as default};
|
|
1
|
+
import{jsxs as e,jsx as t}from"react/jsx-runtime";import r,{useRef as n,useCallback as o,useMemo as i,useState as s,useEffect as a,useContext as u,forwardRef as l,useId as c}from"react";import{Button as p}from"../Button/Button.js";import{Popover as d}from"../Popover/Popover.js";import{IconButton as g}from"../IconButton/IconButton.js";import{$ as v,a as f,b as m,c as y,d as T,e as E,f as h,g as P,h as b,i as M,j as k,k as O,l as K,m as S,n as w,o as I,p as L,q as A,r as D,s as x,t as C}from"../../useGlobalListeners-CGYK0FZ8.js";import{flushSync as F}from"react-dom";import '../../assets/Menu.css';const _="_menuContainer_qw7ps_1",V="_menuContent_qw7ps_6";let N="default",U="",H=/* @__PURE__ */new WeakMap;function B(e){if(v()){if("default"===N){const t=f(e);U=t.documentElement.style.webkitUserSelect,t.documentElement.style.webkitUserSelect="none"}N="disabled"}else if(e instanceof HTMLElement||e instanceof SVGElement){let t="userSelect"in e.style?"userSelect":"webkitUserSelect";H.set(e,e.style[t]),e.style[t]="none"}}function X(e){if(v()){if("disabled"!==N)return;N="restoring",setTimeout(()=>{m(()=>{if("restoring"===N){const t=f(e);"none"===t.documentElement.style.webkitUserSelect&&(t.documentElement.style.webkitUserSelect=U||""),U="",N="default"}})},300)}else if((e instanceof HTMLElement||e instanceof SVGElement)&&e&&H.has(e)){let t=H.get(e),r="userSelect"in e.style?"userSelect":"webkitUserSelect";"none"===e.style[r]&&(e.style[r]=t),""===e.getAttribute("style")&&e.removeAttribute("style"),H.delete(e)}}function Y(e){let t=e?.defaultView;return t?.__webpack_nonce__||globalThis.__webpack_nonce__||void 0}let j=/* @__PURE__ */new WeakMap;const q=r.createContext({register:()=>{}});q.displayName="PressResponderContext";class G{#e;constructor(e,t,r,n){this.#e=!0;let o=n?.target??r.currentTarget;const i=o?.getBoundingClientRect();let s,a,u=0,l=null;null!=r.clientX&&null!=r.clientY&&(a=r.clientX,l=r.clientY),i&&(null!=a&&null!=l?(s=a-i.left,u=l-i.top):(s=i.width/2,u=i.height/2)),this.type=e,this.pointerType=t,this.target=r.currentTarget,this.shiftKey=r.shiftKey,this.metaKey=r.metaKey,this.ctrlKey=r.ctrlKey,this.altKey=r.altKey,this.x=s,this.y=u,this.key=r.key}continuePropagation(){this.#e=!1}get shouldStopPropagation(){return this.#e}}const R=/* @__PURE__ */Symbol("linkClicked"),W="react-aria-pressable-style",$="data-react-aria-pressable";function z(e){let{onPress:t,onPressChange:r,onPressStart:l,onPressEnd:c,onPressUp:p,onClick:d,isDisabled:g,isPressed:v,preventFocusOnPress:m,shouldCancelOnPointerExit:x,allowTextSelectionOnPress:C,ref:_,...V}=function(e){let t=u(q);if(t){let{register:r,ref:n,...o}=t;e=w(o,e),r()}return I(t,e.ref),e}(e),[N,U]=s(!1),H=n({isPressed:!1,ignoreEmulatedMouseEvents:!1,didFirePressStart:!1,isTriggeringEvent:!1,activePointerId:null,target:null,isOverTarget:!1,pointerType:null,disposables:[]}),{addGlobalListener:z,removeAllGlobalListeners:oe}=T(),ie=o((e,t)=>{let n=H.current;if(g||n.didFirePressStart)return!1;let o=!0;if(n.isTriggeringEvent=!0,l){let r=new G("pressstart",t,e);l(r),o=r.shouldStopPropagation}return r&&r(!0),n.isTriggeringEvent=!1,n.didFirePressStart=!0,U(!0),o},[g,l,r]),se=o((e,n,o=!0)=>{let i=H.current;if(!i.didFirePressStart)return!1;i.didFirePressStart=!1,i.isTriggeringEvent=!0;let s=!0;if(c){let t=new G("pressend",n,e);c(t),s=t.shouldStopPropagation}if(r&&r(!1),U(!1),t&&o&&!g){let r=new G("press",n,e);t(r),s&&=r.shouldStopPropagation}return i.isTriggeringEvent=!1,s},[g,c,r,t]),ae=E(se),ue=o((e,t)=>{let r=H.current;if(g)return!1;if(p){r.isTriggeringEvent=!0;let n=new G("pressup",t,e);return p(n),r.isTriggeringEvent=!1,n.shouldStopPropagation}return!0},[g,p]),le=E(ue),ce=o(e=>{let t=H.current;if(t.isPressed&&t.target){t.didFirePressStart&&null!=t.pointerType&&se(te(t.target,e),t.pointerType,!1),t.isPressed=!1,t.isOverTarget=!1,t.activePointerId=null,t.pointerType=null,oe(),C||X(t.target);for(let e of t.disposables)e();t.disposables=[]}},[C,oe,se]),pe=E(ce),de=o(e=>{x&&ce(e)},[x,ce]),ge=o(e=>{g||d?.(e)},[g,d]),ve=o((e,t)=>{if(!g&&d){let r=new MouseEvent("click",e);h(r,t),d(P(r))}},[g,d]),fe=i(()=>{let e=H.current,t={onKeyDown(t){if(Q(t.nativeEvent,t.currentTarget)&&b(t.currentTarget,M(t))){ne(M(t),t.key)&&t.preventDefault();let n=!0;e.isPressed||t.repeat||(e.target=t.currentTarget,e.isPressed=!0,e.pointerType="keyboard",n=ie(t,"keyboard"));let o=t.currentTarget,i=t=>{Q(t,o)&&!t.repeat&&b(o,M(t))&&e.target&&le(te(e.target,t),"keyboard")};z(f(t.currentTarget),"keyup",A(i,r),!0),n&&t.stopPropagation(),t.metaKey&&D()&&e.metaKeyEvents?.set(t.key,t.nativeEvent)}else"Meta"===t.key&&(e.metaKeyEvents=/* @__PURE__ */new Map)},onClick(t){if((!t||b(t.currentTarget,M(t)))&&t&&0===t.button&&!e.isTriggeringEvent&&!L.isOpening){let r=!0;if(g&&t.preventDefault(),e.ignoreEmulatedMouseEvents||e.isPressed||"virtual"!==e.pointerType&&!S(t.nativeEvent)){if(e.isPressed&&"keyboard"!==e.pointerType){let n=e.pointerType||t.nativeEvent.pointerType||"virtual",o=le(te(t.currentTarget,t),n),i=ae(te(t.currentTarget,t),n,!0);r=o&&i,e.isOverTarget=!1,ge(t),pe(t)}}else{let e=ie(t,"virtual"),n=le(t,"virtual"),o=ae(t,"virtual");ge(t),r=e&&n&&o}e.ignoreEmulatedMouseEvents=!1,r&&t.stopPropagation()}}},r=t=>{if(e.isPressed&&e.target&&Q(t,e.target)){ne(M(t),t.key)&&t.preventDefault();let r=M(t),n=b(e.target,r);ae(te(e.target,t),"keyboard",n),n&&ve(t,e.target),oe(),"Enter"!==t.key&&J(e.target)&&b(e.target,r)&&!t[R]&&(t[R]=!0,L(e.target,t,!1)),e.isPressed=!1,e.metaKeyEvents?.delete(t.key)}else if("Meta"===t.key&&e.metaKeyEvents?.size){let t=e.metaKeyEvents;e.metaKeyEvents=void 0;for(let r of t.values())e.target?.dispatchEvent(new KeyboardEvent("keyup",r))}};if("undefined"!=typeof PointerEvent){t.onPointerDown=t=>{if(0!==t.button||!b(t.currentTarget,M(t)))return;if(k(t.nativeEvent))return void(e.pointerType="virtual");e.pointerType=t.pointerType;let o=!0;if(!e.isPressed){e.isPressed=!0,e.isOverTarget=!0,e.activePointerId=t.pointerId,e.target=t.currentTarget,C||B(e.target),o=ie(t,e.pointerType);let i=M(t);"releasePointerCapture"in i&&("hasPointerCapture"in i?i.hasPointerCapture(t.pointerId)&&i.releasePointerCapture(t.pointerId):i.releasePointerCapture(t.pointerId)),z(f(t.currentTarget),"pointerup",r,!1),z(f(t.currentTarget),"pointercancel",n,!1)}o&&t.stopPropagation()},t.onMouseDown=t=>{if(b(t.currentTarget,M(t))&&0===t.button){if(m){let r=O(t.target);r&&e.disposables.push(r)}t.stopPropagation()}},t.onPointerUp=t=>{b(t.currentTarget,M(t))&&"virtual"!==e.pointerType&&(0!==t.button||e.isPressed||le(t,e.pointerType||t.pointerType))},t.onPointerEnter=t=>{t.pointerId===e.activePointerId&&e.target&&!e.isOverTarget&&null!=e.pointerType&&(e.isOverTarget=!0,ie(te(e.target,t),e.pointerType))},t.onPointerLeave=t=>{t.pointerId===e.activePointerId&&e.target&&e.isOverTarget&&null!=e.pointerType&&(e.isOverTarget=!1,ae(te(e.target,t),e.pointerType,!1),de(t))};let r=t=>{if(t.pointerId===e.activePointerId&&e.isPressed&&0===t.button&&e.target){if(b(e.target,M(t))&&null!=e.pointerType){let r=!1,n=setTimeout(()=>{e.isPressed&&e.target instanceof HTMLElement&&(r?pe(t):(K(e.target),e.target.click()))},80);z(t.currentTarget,"click",()=>r=!0,!0),e.disposables.push(()=>clearTimeout(n))}else pe(t);e.isOverTarget=!1}},n=e=>{pe(e)};t.onDragStart=e=>{b(e.currentTarget,M(e))&&pe(e)}}else if("test"===process.env.NODE_ENV){t.onMouseDown=t=>{if(0!==t.button||!b(t.currentTarget,M(t)))return;if(e.ignoreEmulatedMouseEvents)return void t.stopPropagation();if(e.isPressed=!0,e.isOverTarget=!0,e.target=t.currentTarget,e.pointerType=S(t.nativeEvent)?"virtual":"mouse",F(()=>ie(t,e.pointerType))&&t.stopPropagation(),m){let r=O(t.target);r&&e.disposables.push(r)}z(f(t.currentTarget),"mouseup",r,!1)},t.onMouseEnter=t=>{if(!b(t.currentTarget,M(t)))return;let r=!0;e.isPressed&&!e.ignoreEmulatedMouseEvents&&null!=e.pointerType&&(e.isOverTarget=!0,r=ie(t,e.pointerType)),r&&t.stopPropagation()},t.onMouseLeave=t=>{if(!b(t.currentTarget,M(t)))return;let r=!0;e.isPressed&&!e.ignoreEmulatedMouseEvents&&null!=e.pointerType&&(e.isOverTarget=!1,r=ae(t,e.pointerType,!1),de(t)),r&&t.stopPropagation()},t.onMouseUp=t=>{b(t.currentTarget,M(t))&&(e.ignoreEmulatedMouseEvents||0!==t.button||e.isPressed||le(t,e.pointerType||"mouse"))};let r=t=>{0===t.button&&(e.ignoreEmulatedMouseEvents?e.ignoreEmulatedMouseEvents=!1:(e.target&&b(e.target,M(t))&&null!=e.pointerType||pe(t),e.isOverTarget=!1))};t.onTouchStart=t=>{if(!b(t.currentTarget,M(t)))return;let r=function(e){const{targetTouches:t}=e;return t.length>0?t[0]:null}(t.nativeEvent);r&&(e.activePointerId=r.identifier,e.ignoreEmulatedMouseEvents=!0,e.isOverTarget=!0,e.isPressed=!0,e.target=t.currentTarget,e.pointerType="touch",C||B(e.target),ie(ee(e.target,t),e.pointerType)&&t.stopPropagation(),z(y(t.currentTarget),"scroll",n,!0))},t.onTouchMove=t=>{if(!b(t.currentTarget,M(t)))return;if(!e.isPressed)return void t.stopPropagation();let r=Z(t.nativeEvent,e.activePointerId),n=!0;r&&re(r,t.currentTarget)?e.isOverTarget||null==e.pointerType||(e.isOverTarget=!0,n=ie(ee(e.target,t),e.pointerType)):e.isOverTarget&&null!=e.pointerType&&(e.isOverTarget=!1,n=ae(ee(e.target,t),e.pointerType,!1),de(ee(e.target,t))),n&&t.stopPropagation()},t.onTouchEnd=t=>{if(!b(t.currentTarget,M(t)))return;if(!e.isPressed)return void t.stopPropagation();let r=Z(t.nativeEvent,e.activePointerId),n=!0;r&&re(r,t.currentTarget)&&null!=e.pointerType?(le(ee(e.target,t),e.pointerType),n=ae(ee(e.target,t),e.pointerType),ve(t.nativeEvent,e.target)):e.isOverTarget&&null!=e.pointerType&&(n=ae(ee(e.target,t),e.pointerType,!1)),n&&t.stopPropagation(),e.isPressed=!1,e.activePointerId=null,e.isOverTarget=!1,e.ignoreEmulatedMouseEvents=!0,e.target&&!C&&X(e.target),oe()},t.onTouchCancel=t=>{b(t.currentTarget,M(t))&&(t.stopPropagation(),e.isPressed&&pe(ee(e.target,t)))};let n=t=>{e.isPressed&&b(M(t),e.target)&&pe({currentTarget:e.target,shiftKey:!1,ctrlKey:!1,metaKey:!1,altKey:!1})};t.onDragStart=e=>{b(e.currentTarget,M(e))&&pe(e)}}return t},[z,g,m,oe,C,de,ie,ge,ve]);return a(()=>{if(!_||"test"===process.env.NODE_ENV)return;const e=f(_.current);if(!e||!e.head||e.getElementById(W))return;const t=e.createElement("style");t.id=W;let r=function(e){let t=e??("undefined"!=typeof document?document:void 0);if(!t)return Y(t);if(j.has(t))return j.get(t);let r=t.querySelector('meta[property="csp-nonce"]'),n=r&&r instanceof y(r).HTMLMetaElement&&(r.nonce||r.content)||Y(t)||void 0;return void 0!==n&&j.set(t,n),n}(e);r&&(t.nonce=r),t.textContent=`\n@layer {\n [${$}] {\n touch-action: pan-x pan-y pinch-zoom;\n }\n}\n `.trim(),e.head.prepend(t)},[_]),a(()=>{let e=H.current;return()=>{C||X(e.target??void 0);for(let t of e.disposables)t();e.disposables=[]}},[C]),{isPressed:v||N,pressProps:w(V,fe,{[$]:!0})}}function J(e){return"A"===e.tagName&&e.hasAttribute("href")}function Q(e,t){const{key:r,code:n}=e,o=t,i=o.getAttribute("role");return!("Enter"!==r&&" "!==r&&"Spacebar"!==r&&"Space"!==n||o instanceof y(o).HTMLInputElement&&!ie(o,r)||o instanceof y(o).HTMLTextAreaElement||o.isContentEditable||("link"===i||!i&&J(o))&&"Enter"!==r)}function Z(e,t){const r=e.changedTouches;for(let n=0;n<r.length;n++){const e=r[n];if(e.identifier===t)return e}return null}function ee(e,t){let r=0,n=0;return t.targetTouches&&1===t.targetTouches.length&&(r=t.targetTouches[0].clientX,n=t.targetTouches[0].clientY),{currentTarget:e,shiftKey:t.shiftKey,ctrlKey:t.ctrlKey,metaKey:t.metaKey,altKey:t.altKey,clientX:r,clientY:n}}function te(e,t){let r=t.clientX,n=t.clientY;return{currentTarget:e,shiftKey:t.shiftKey,ctrlKey:t.ctrlKey,metaKey:t.metaKey,altKey:t.altKey,clientX:r,clientY:n,key:t.key}}function re(e,t){let r=t.getBoundingClientRect(),n=function(e){let t=0,r=0;return void 0!==e.width?t=e.width/2:void 0!==e.radiusX&&(t=e.radiusX),void 0!==e.height?r=e.height/2:void 0!==e.radiusY&&(r=e.radiusY),{top:e.clientY-r,right:e.clientX+t,bottom:e.clientY+r,left:e.clientX-t}}(e);return i=n,!((o=r).left>i.right||i.left>o.right||o.top>i.bottom||i.top>o.bottom);var o,i}function ne(e,t){return e instanceof HTMLInputElement?!ie(e,t):function(e){return!(e instanceof HTMLInputElement||(e instanceof HTMLButtonElement?"submit"===e.type||"reset"===e.type:J(e)))}(e)}const oe=/* @__PURE__ */new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function ie(e,t){return"checkbox"===e.type||"radio"===e.type?" "===t:oe.has(e.type)}const se={activeMenuId:null,setActiveMenu:e=>{se.activeMenuId=e},getActiveMenu:()=>se.activeMenuId},ae=(e,t,r,n)=>{const o=()=>{const e=n.current;if(e){const t=(e=>{const t=Array.from(document.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])')),r=t.indexOf(e);return-1!==r&&r<t.length-1?t[r+1]:t[0]})(e);r(),setTimeout(()=>{t&&t.focus()},10)}else r()},i=()=>e.current?Array.from(e.current.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])')):[];return{handleMenuKeyDown:e=>{if("Escape"===e.key)return e.preventDefault(),r(),void(n.current&&n.current.focus());if("Tab"===e.key&&t)return e.preventDefault(),void o();((e,t)=>{if(0===t.length)return;const r=document.activeElement,n=t.indexOf(r);"ArrowDown"===e.key?(e.preventDefault(),t[n<t.length-1?n+1:0].focus()):"ArrowUp"===e.key?(e.preventDefault(),t[n>0?n-1:t.length-1].focus()):"Home"===e.key?(e.preventDefault(),t[0].focus()):"End"===e.key&&(e.preventDefault(),t[t.length-1].focus())})(e,i())},getFocusableElements:i}},ue=l(function({children:e,...t},s){const a=r.Children.only(e),u=function(e){const t=n(null),r=n(void 0),s=o(t=>{if("function"==typeof e){const r=e,n=r(t);return()=>{"function"==typeof n?n():r(null)}}if(e)return e.current=t,()=>{e.current=null}},[e]);return i(()=>({get current(){return t.current},set current(e){t.current=e,r.current&&(r.current(),r.current=void 0),null!=e&&(r.current=s(e))}}),[s])}(s),l={...t,...a.props},{buttonProps:c}=function(e,t){let r,{elementType:n="button",isDisabled:o,onPress:i,onPressStart:s,onPressEnd:a,onPressUp:u,onPressChange:l,preventFocusOnPress:c,allowFocusWhenDisabled:p,onClick:d,href:g,target:v,rel:f,type:m="button"}=e;r="button"===n?{type:m,disabled:o,form:e.form,formAction:e.formAction,formEncType:e.formEncType,formMethod:e.formMethod,formNoValidate:e.formNoValidate,formTarget:e.formTarget,name:e.name,value:e.value}:{role:"button",href:"a"!==n||o?void 0:g,target:"a"===n?v:void 0,type:"input"===n?m:void 0,disabled:"input"===n?o:void 0,"aria-disabled":o&&"input"!==n?o:void 0,rel:"a"===n?f:void 0};let{pressProps:y,isPressed:T}=z({onPressStart:s,onPressEnd:a,onPressChange:l,onPress:i,onPressUp:u,onClick:d,isDisabled:o,preventFocusOnPress:c,ref:t}),{focusableProps:E}=x(e,t);p&&(E.tabIndex=o?-1:E.tabIndex);let h=w(E,y,C(e,{labelable:!0}));return{isPressed:T,buttonProps:w(r,h,{"aria-haspopup":e["aria-haspopup"],"aria-expanded":e["aria-expanded"],"aria-controls":e["aria-controls"],"aria-pressed":e["aria-pressed"],"aria-current":e["aria-current"],"aria-disabled":e["aria-disabled"]})}}(l,u),d=a.type!==p&&a.type!==g?c:l;return r.cloneElement(a,{...d,ref:u})}),le=({label:o,"aria-label":i,isDisabled:u=!1,placement:l="bottom start",buttonEmphasis:g="tertiary",buttonStyleVariant:v="neutral",buttonOpenVariant:f=v,alignToElementId:m,shouldFlip:y=!0,openOnHoverAndFocus:T=!1,allowTabOut:E=!0,closeOnHover:h=!0,children:P,iconStartProps:b,iconEndProps:M,onOpenChange:k})=>{const O=`menu-${c()}`,K=n(null),S=n(null),w=n(null),{isOpen:I,setIsOpen:L,preventFocusOpen:A,setPreventFocusOpen:D,openedViaKeyboard:x,setOpenedViaKeyboard:C,closeMenu:F,openMenu:N,toggleMenu:U}=((e,t)=>{const r=n(!1),[o,i]=s(!1),[u,l]=s(!1),[c,p]=s(!1),d=()=>{se.setActiveMenu(null),i(!1),l(!0),setTimeout(()=>{l(!1)},300)},g=(t=!1)=>{se.getActiveMenu()&&se.getActiveMenu()!==e&&document.dispatchEvent(new CustomEvent("menu:closeAll",{detail:{exceptMenuId:e}})),se.setActiveMenu(e),i(!0),p(t)};return a(()=>{t&&r.current&&t(o)},[o]),a(()=>{r.current=!0},[]),{isOpen:o,setIsOpen:i,preventFocusOpen:u,setPreventFocusOpen:l,openedViaKeyboard:c,setOpenedViaKeyboard:p,closeMenu:d,openMenu:g,toggleMenu:()=>{if(o)d();else{const e="BUTTON"===document.activeElement?.tagName;g(e)}}}})(O,k),{handleMenuKeyDown:H,getFocusableElements:B}=ae(w,E,F,K);((e,t,r,n,o,i,s,u,l,c)=>{a(()=>{if(!e||t)return;let r=null,i=!1;const a=()=>{r&&(clearTimeout(r),r=null)},p=()=>{const e=o.current,t=s.current;if(!e)return;const n=e.matches(":hover"),a=t?.matches(":hover")||!1;n||a||!i||(i=!1,r=setTimeout(d,300))},d=()=>{se.getActiveMenu()===n&&c()},g=()=>{setTimeout(p,50)},v=()=>{a(),i||(i=!0,u||(r=setTimeout(()=>{l(!1)},300)))},f=()=>{g()},m=()=>{a(),i=!0},y=()=>{g()},T=o.current,E=s.current;return T&&(T.addEventListener("mouseenter",v),T.addEventListener("mouseleave",f)),u&&E&&(E.addEventListener("mouseenter",m),E.addEventListener("mouseleave",y)),()=>{T&&(T.removeEventListener("mouseenter",v),T.removeEventListener("mouseleave",f)),E&&(E.removeEventListener("mouseenter",m),E.removeEventListener("mouseleave",y)),a()}},[e,t,n,u,l,c,o,s]),a(()=>{if(!e||t)return;const s=o.current;if(!s)return;let a=null,u=!1;const p=()=>{r||(a&&clearTimeout(a),u=!0,a=setTimeout(()=>{const e=document.activeElement===s&&document.activeElement!==document.body;l(e),setTimeout(()=>{u=!1},500)},300))},d=e=>{if(u)return;a&&clearTimeout(a);const t=i.current,r=e.relatedTarget;t&&!t.contains(r)&&(a=setTimeout(()=>{se.getActiveMenu()===n&&c()},200))};return s.addEventListener("focus",p),s.addEventListener("blur",d),()=>{s.removeEventListener("focus",p),s.removeEventListener("blur",d),a&&clearTimeout(a)}},[e,t,r,n,l,c,i,o])})(T,u,A,O,K,S,w,I,N,F),((e,t,r,n,o,i)=>{a(()=>{if(!t||!r||n)return;let o=null;const s=()=>{o&&(clearTimeout(o),o=null)},a=()=>{s(),o=setTimeout(()=>{i()},200)},u=()=>{s()},l=e.current;return l&&(l.addEventListener("mouseenter",u),l.addEventListener("mouseleave",a)),()=>{l&&(l.removeEventListener("mouseenter",u),l.removeEventListener("mouseleave",a)),s()}},[t,r,n,o,i,e])})(w,I,h,T,O,F),((e,t,r,n,o)=>{a(()=>{if(!r)return;const n=r=>{const n=r.target,i=t.current,s=e.current,a=i?.contains(n)&&!s?.contains(n);s&&s.contains(n)?n.closest('[data-menu-close="true"]')&&o():a||o()};return document.addEventListener("click",n,!0),()=>{document.removeEventListener("click",n,!0)}},[r,n,o,e,t])})(w,S,I,O,F);const X=I?f:v;a(()=>{const e=e=>{const{exceptMenuId:t}=e.detail||{};t&&t===O||I&&L(!1)};return document.addEventListener("menu:closeAll",e),()=>{document.removeEventListener("menu:closeAll",e)}},[O,I,L]),a(()=>{const e=se.getActiveMenu()===O;e!==I&&L(e)},[O,I,L]),a(()=>{if(I&&x&&w.current){const e=B();e.length>0&&setTimeout(()=>{e[0].focus()},50)}},[I,x,B]),a(()=>{I||C(!1)},[I,C]);const Y={isOpen:I,open:()=>N(),close:F,toggle:()=>U(),setOpen:e=>{e?N():F()}},j={ref:K,"aria-haspopup":!0,"aria-expanded":I,onPress:()=>{D(!1);const e=document.activeElement===K.current;C(e),U()},onKeyDown:e=>{"Escape"===e.key&&I?(e.preventDefault(),F(),D(!0),setTimeout(()=>{D(!1)},300)):"ArrowDown"!==e.key||I||(e.preventDefault(),N(!0))}},q=r.Children.toArray(P);let G=P,R=/* @__PURE__ */t(p,{emphasis:g,styleVariant:X,isDisabled:u,iconStartProps:b,iconEndProps:M,...j,children:o});const W=q.findIndex(e=>e?.type===ue),$=q[W];return r.isValidElement($)&&(R=r.cloneElement($,j),G=q.filter((e,t)=>t!==W)),/* @__PURE__ */e("div",{className:_,ref:S,children:[R,I&&/* @__PURE__ */t(d,{state:Y,triggerRef:(()=>{if(m){const e=document.getElementById(m);if(e)return{current:e}}return K})(),hasArrow:!1,placement:l,shouldFlip:y,isNonModal:!0,allowTabOut:E,autoFocus:x,children:/* @__PURE__ */t("div",{className:V,ref:w,onKeyDown:H,role:"menu","aria-label":i||o,tabIndex:-1,children:G})})]})};le.Trigger=ue;export{le as Menu,ue as Trigger,le as default};
|
|
2
2
|
//# sourceMappingURL=Menu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.js","sources":["../../../src/components/Menu/Menu.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useId, forwardRef } from 'react';\nimport { Button, ButtonProps } from '../Button/Button';\nimport { Popover } from '../Popover/Popover';\nimport styles from './Menu.module.css';\nimport IconButton from '../IconButton';\nimport { useButton, useObjectRef } from 'react-aria';\n\n// Create a static registry to track the currently open menu\nconst menuRegistry = {\n activeMenuId: null as string | null,\n setActiveMenu: (id: string | null) => {\n menuRegistry.activeMenuId = id;\n },\n getActiveMenu: () => menuRegistry.activeMenuId,\n};\n\n// Define placement types for the Menu component\ntype PlacementType =\n | 'top'\n | 'top start'\n | 'top end'\n | 'right'\n | 'right top'\n | 'right bottom'\n | 'bottom'\n | 'bottom start'\n | 'bottom end'\n | 'left'\n | 'left top'\n | 'left bottom';\n\n// Props for the Menu component\nexport interface MenuProps {\n /**\n * The label text for the menu button\n */\n label?: string;\n\n /**\n * Accessible label for the menu (for screen readers)\n * Defaults to the button label if not provided\n * @default props.label\n */\n 'aria-label'?: string;\n\n /**\n * Whether the menu is disabled\n * @default false\n */\n isDisabled?: boolean;\n\n /**\n * The placement of the menu relative to the button\n * @default 'bottom start'\n */\n placement?: PlacementType;\n\n /**\n * The button emphasis\n * @default 'tertiary'\n */\n buttonEmphasis?: ButtonProps['emphasis'];\n\n /**\n * The button style variant\n * @default 'neutral'\n */\n buttonStyleVariant?: ButtonProps['styleVariant'];\n\n /**\n * The button style variant when menu is open\n * @default buttonStyleVariant value\n */\n buttonOpenVariant?: ButtonProps['styleVariant'];\n\n /**\n * ID of an element to position the menu against instead of the button\n * When provided, the menu will be positioned relative to this element\n */\n alignToElementId?: string;\n\n /**\n * Whether the menu should flip to fit in the viewport\n * @default false\n */\n shouldFlip?: boolean;\n\n /**\n * Whether the menu should open on hover and focus\n * @default false\n */\n openOnHoverAndFocus?: boolean;\n\n /**\n * Whether to allow tabbing out of the menu\n * @default true\n */\n allowTabOut?: boolean;\n\n /**\n * Whether the menu should close when mouse leaves the menu area\n * @default true\n */\n closeOnHover?: boolean;\n\n /**\n * The content to display inside the menu (as JSX children)\n * Can be custom HTML content. Interactive elements work normally.\n * Add data-menu-close=\"true\" to elements that should close the menu when clicked.\n */\n children: React.ReactNode;\n\n /**\n * Icon props for the start of the button\n */\n iconStartProps?: ButtonProps['iconStartProps'];\n\n /**\n * Icon props for the end of the button\n */\n iconEndProps?: ButtonProps['iconEndProps'];\n\n /**\n * Callback function that is called when the open state of the menu changes\n */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\n// Custom hook for menu state management\nconst useMenuState = (\n menuId: string,\n onOpenChange: MenuProps['onOpenChange'],\n) => {\n const isMounted = useRef(false);\n const [isOpen, setIsOpen] = useState(false);\n const [preventFocusOpen, setPreventFocusOpen] = useState(false);\n const [openedViaKeyboard, setOpenedViaKeyboard] = useState(false);\n\n const closeMenu = () => {\n menuRegistry.setActiveMenu(null);\n setIsOpen(false);\n setPreventFocusOpen(true);\n\n setTimeout(() => {\n setPreventFocusOpen(false);\n }, 300);\n };\n\n const openMenu = (viaKeyboard = false) => {\n // Close any other open menu first\n if (\n menuRegistry.getActiveMenu() &&\n menuRegistry.getActiveMenu() !== menuId\n ) {\n document.dispatchEvent(\n new CustomEvent('menu:closeAll', {\n detail: { exceptMenuId: menuId },\n }),\n );\n }\n\n menuRegistry.setActiveMenu(menuId);\n setIsOpen(true);\n setOpenedViaKeyboard(viaKeyboard);\n };\n\n const toggleMenu = () => {\n if (isOpen) {\n closeMenu();\n } else {\n const isKeyboardFocused = document.activeElement?.tagName === 'BUTTON';\n openMenu(isKeyboardFocused);\n }\n };\n\n useEffect(() => {\n if (onOpenChange && isMounted.current) onOpenChange(isOpen);\n // Leave `onOpenChange` out of dependency array to avoid multiple calls if callback is not memoised\n }, [isOpen]);\n\n // Avoid running onOpenChange effect on first render\n useEffect(() => {\n isMounted.current = true;\n }, []);\n\n return {\n isOpen,\n setIsOpen,\n preventFocusOpen,\n setPreventFocusOpen,\n openedViaKeyboard,\n setOpenedViaKeyboard,\n closeMenu,\n openMenu,\n toggleMenu,\n };\n};\n\n// Custom hook for keyboard navigation within the menu\nconst useMenuNavigation = (\n menuRef: React.RefObject<HTMLDivElement | null>,\n allowTabOut: boolean,\n closeMenu: () => void,\n buttonRef: React.RefObject<HTMLButtonElement | null>,\n) => {\n const findNextFocusableElement = (\n startElement: HTMLElement,\n ): HTMLElement | null => {\n const focusableElements = Array.from(\n document.querySelectorAll(\n 'a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n ),\n ) as HTMLElement[];\n\n const startIndex = focusableElements.indexOf(startElement);\n return startIndex !== -1 && startIndex < focusableElements.length - 1\n ? focusableElements[startIndex + 1]\n : focusableElements[0];\n };\n\n const handleTabNavigation = () => {\n const triggerElement = buttonRef.current;\n if (triggerElement) {\n const nextElement = findNextFocusableElement(triggerElement);\n closeMenu();\n setTimeout(() => {\n if (nextElement) {\n nextElement.focus();\n }\n }, 10);\n } else {\n closeMenu();\n }\n };\n\n const getFocusableElements = (): HTMLElement[] => {\n if (!menuRef.current) return [];\n\n return Array.from(\n menuRef.current.querySelectorAll(\n 'a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n ),\n ) as HTMLElement[];\n };\n\n const handleArrowNavigation = (\n e: React.KeyboardEvent,\n focusableElements: HTMLElement[],\n ) => {\n if (focusableElements.length === 0) return;\n\n const focusedElement = document.activeElement as HTMLElement;\n const currentIndex = focusableElements.indexOf(focusedElement);\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n const nextIndex =\n currentIndex < focusableElements.length - 1 ? currentIndex + 1 : 0;\n focusableElements[nextIndex].focus();\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n const prevIndex =\n currentIndex > 0 ? currentIndex - 1 : focusableElements.length - 1;\n focusableElements[prevIndex].focus();\n } else if (e.key === 'Home') {\n e.preventDefault();\n focusableElements[0].focus();\n } else if (e.key === 'End') {\n e.preventDefault();\n focusableElements[focusableElements.length - 1].focus();\n }\n };\n\n const handleMenuKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n closeMenu();\n if (buttonRef.current) {\n buttonRef.current.focus();\n }\n return;\n }\n\n if (e.key === 'Tab' && allowTabOut) {\n e.preventDefault();\n handleTabNavigation();\n return;\n }\n\n // Handle arrow key navigation for focusable elements\n const focusableElements = getFocusableElements();\n handleArrowNavigation(e, focusableElements);\n };\n\n return { handleMenuKeyDown, getFocusableElements };\n};\n\n// Custom hook for hover and focus behavior with improved reliability\nconst useHoverAndFocus = (\n openOnHoverAndFocus: boolean,\n isDisabled: boolean,\n preventFocusOpen: boolean,\n menuId: string,\n buttonRef: React.RefObject<HTMLButtonElement | null>,\n containerRef: React.RefObject<HTMLDivElement | null>,\n menuRef: React.RefObject<HTMLDivElement | null>,\n isOpen: boolean,\n openMenu: (viaKeyboard?: boolean) => void,\n closeMenu: () => void,\n) => {\n useEffect(() => {\n if (!openOnHoverAndFocus || isDisabled) return;\n\n let hoverTimeout: NodeJS.Timeout | null = null;\n let isHovering = false;\n\n const clearHoverTimeout = () => {\n if (hoverTimeout) {\n clearTimeout(hoverTimeout);\n hoverTimeout = null;\n }\n };\n\n // Helper to handle hover check logic\n const handleHoverCheck = () => {\n const button = buttonRef.current;\n const menu = menuRef.current;\n\n if (!button) return;\n\n // Check if mouse is over button or menu\n const isOverButton = button.matches(':hover');\n const isOverMenu = menu?.matches(':hover') || false;\n\n if (!isOverButton && !isOverMenu && isHovering) {\n isHovering = false;\n hoverTimeout = setTimeout(handleCloseMenuIfActive, 300);\n }\n };\n\n // Helper to close menu if active\n const handleCloseMenuIfActive = () => {\n if (menuRegistry.getActiveMenu() === menuId) {\n closeMenu();\n }\n };\n\n const checkIfStillHovering = () => {\n // Use a small delay to check if we're still hovering\n setTimeout(handleHoverCheck, 50);\n };\n\n const handleMouseEnter = () => {\n clearHoverTimeout();\n if (!isHovering) {\n isHovering = true;\n if (!isOpen) {\n hoverTimeout = setTimeout(() => {\n openMenu(false);\n }, 300);\n }\n }\n };\n\n const handleMouseLeave = () => {\n checkIfStillHovering();\n };\n\n const handleMenuMouseEnter = () => {\n clearHoverTimeout();\n isHovering = true;\n };\n\n const handleMenuMouseLeave = () => {\n checkIfStillHovering();\n };\n\n const buttonElement = buttonRef.current;\n const menuElement = menuRef.current;\n\n if (buttonElement) {\n buttonElement.addEventListener('mouseenter', handleMouseEnter);\n buttonElement.addEventListener('mouseleave', handleMouseLeave);\n }\n\n // Set up menu listeners when menu is open\n if (isOpen && menuElement) {\n menuElement.addEventListener('mouseenter', handleMenuMouseEnter);\n menuElement.addEventListener('mouseleave', handleMenuMouseLeave);\n }\n\n return () => {\n if (buttonElement) {\n buttonElement.removeEventListener('mouseenter', handleMouseEnter);\n buttonElement.removeEventListener('mouseleave', handleMouseLeave);\n }\n if (menuElement) {\n menuElement.removeEventListener('mouseenter', handleMenuMouseEnter);\n menuElement.removeEventListener('mouseleave', handleMenuMouseLeave);\n }\n clearHoverTimeout();\n };\n }, [\n openOnHoverAndFocus,\n isDisabled,\n menuId,\n isOpen,\n openMenu,\n closeMenu,\n buttonRef,\n menuRef,\n ]);\n\n useEffect(() => {\n if (!openOnHoverAndFocus || isDisabled) return;\n\n const buttonElement = buttonRef.current;\n if (!buttonElement) return;\n\n let focusTimeout: NodeJS.Timeout | null = null;\n let isMenuOpening = false;\n\n const handleFocus = () => {\n if (preventFocusOpen) return;\n\n if (focusTimeout) {\n clearTimeout(focusTimeout);\n }\n\n isMenuOpening = true;\n\n focusTimeout = setTimeout(() => {\n const activeElement = document.activeElement;\n const wasFocusedByKeyboard =\n activeElement === buttonElement &&\n document.activeElement !== document.body;\n\n openMenu(wasFocusedByKeyboard);\n setTimeout(() => {\n isMenuOpening = false;\n }, 500);\n }, 300);\n };\n\n const handleBlur = (e: FocusEvent) => {\n if (isMenuOpening) return;\n\n if (focusTimeout) {\n clearTimeout(focusTimeout);\n }\n\n const containerElement = containerRef.current;\n const relatedTarget = e.relatedTarget as Node;\n\n if (containerElement && !containerElement.contains(relatedTarget)) {\n focusTimeout = setTimeout(() => {\n if (menuRegistry.getActiveMenu() === menuId) {\n closeMenu();\n }\n }, 200);\n }\n };\n\n buttonElement.addEventListener('focus', handleFocus);\n buttonElement.addEventListener('blur', handleBlur);\n\n return () => {\n buttonElement.removeEventListener('focus', handleFocus);\n buttonElement.removeEventListener('blur', handleBlur);\n if (focusTimeout) {\n clearTimeout(focusTimeout);\n }\n };\n }, [\n openOnHoverAndFocus,\n isDisabled,\n preventFocusOpen,\n menuId,\n openMenu,\n closeMenu,\n containerRef,\n buttonRef,\n ]);\n};\n\n// Simplified menu hover behavior for closeOnHover\nconst useMenuHover = (\n menuRef: React.RefObject<HTMLDivElement | null>,\n isOpen: boolean,\n closeOnHover: boolean,\n openOnHoverAndFocus: boolean,\n menuId: string,\n closeMenu: () => void,\n) => {\n useEffect(() => {\n // Skip if openOnHoverAndFocus is handling the hover behavior\n if (!isOpen || !closeOnHover || openOnHoverAndFocus) return;\n\n let hoverTimeout: NodeJS.Timeout | null = null;\n\n const clearHoverTimeout = () => {\n if (hoverTimeout) {\n clearTimeout(hoverTimeout);\n hoverTimeout = null;\n }\n };\n\n const handleMenuMouseLeave = () => {\n clearHoverTimeout();\n hoverTimeout = setTimeout(() => {\n closeMenu();\n }, 200);\n };\n\n const handleMenuMouseEnter = () => {\n clearHoverTimeout();\n };\n\n const menuElement = menuRef.current;\n if (menuElement) {\n menuElement.addEventListener('mouseenter', handleMenuMouseEnter);\n menuElement.addEventListener('mouseleave', handleMenuMouseLeave);\n }\n\n return () => {\n if (menuElement) {\n menuElement.removeEventListener('mouseenter', handleMenuMouseEnter);\n menuElement.removeEventListener('mouseleave', handleMenuMouseLeave);\n }\n clearHoverTimeout();\n };\n }, [isOpen, closeOnHover, openOnHoverAndFocus, menuId, closeMenu, menuRef]);\n};\n\n// Custom hook to handle menu closing behavior\nconst useMenuCloseHandling = (\n menuRef: React.RefObject<HTMLDivElement | null>,\n containerRef: React.RefObject<HTMLDivElement | null>,\n isOpen: boolean,\n menuId: string,\n closeMenu: () => void,\n) => {\n useEffect(() => {\n if (!isOpen) return;\n\n const handleDocumentClick = (e: Event) => {\n const target = e.target as HTMLElement;\n const container = containerRef.current;\n const menu = menuRef.current;\n\n // Check if click is on the trigger button (inside container but outside menu)\n const isOnTriggerButton =\n container?.contains(target) && !menu?.contains(target);\n\n // If click is inside the menu content, only close if element has data-menu-close=\"true\"\n if (menu && menu.contains(target)) {\n const shouldClose = target.closest('[data-menu-close=\"true\"]');\n if (shouldClose) {\n closeMenu();\n }\n return;\n }\n\n // If click is on the trigger button, let the button handle it (don't close here)\n if (isOnTriggerButton) {\n return;\n }\n\n // If we get here, it's a click outside both the menu and the trigger button\n closeMenu();\n };\n\n // Use capture phase to handle clicks before they bubble\n document.addEventListener('click', handleDocumentClick, true);\n\n return () => {\n document.removeEventListener('click', handleDocumentClick, true);\n };\n }, [isOpen, menuId, closeMenu, menuRef, containerRef]);\n};\n\n/**\n * Component to replace default Button with another button-like component/element\n */\nexport const Trigger = forwardRef<HTMLButtonElement, ButtonProps>(\n function Trigger({ children, ...triggerProps }, forwardedRef) {\n const element = React.Children.only(children) as React.ReactElement;\n const ref = useObjectRef(forwardedRef);\n\n const elementProps = { ...triggerProps, ...element.props };\n const { buttonProps } = useButton(elementProps, ref); // Get accessible button props for non-Alto components\n\n // Use React ARIA `buttonProps` if the trigger element is a non-Alto components\n const props =\n element.type !== Button && element.type !== IconButton\n ? buttonProps\n : elementProps;\n\n return React.cloneElement(element, {\n ...props,\n ref,\n });\n },\n);\n\nexport const Menu = ({\n label,\n 'aria-label': ariaLabel,\n isDisabled = false,\n placement = 'bottom start',\n buttonEmphasis = 'tertiary',\n buttonStyleVariant = 'neutral',\n buttonOpenVariant = buttonStyleVariant,\n alignToElementId,\n shouldFlip = true,\n openOnHoverAndFocus = false,\n allowTabOut = true,\n closeOnHover = true,\n children,\n iconStartProps,\n iconEndProps,\n onOpenChange,\n}: MenuProps) => {\n // Generate a unique ID for this menu instance\n const uniqueId = useId();\n const menuId = `menu-${uniqueId}`;\n\n // References\n const buttonRef = useRef<HTMLButtonElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n\n // State management\n const {\n isOpen,\n setIsOpen,\n preventFocusOpen,\n setPreventFocusOpen,\n openedViaKeyboard,\n setOpenedViaKeyboard,\n closeMenu,\n openMenu,\n toggleMenu,\n } = useMenuState(menuId, onOpenChange);\n\n // Navigation handling\n const { handleMenuKeyDown, getFocusableElements } = useMenuNavigation(\n menuRef,\n allowTabOut,\n closeMenu,\n buttonRef,\n );\n\n // Hover and focus handling\n useHoverAndFocus(\n openOnHoverAndFocus,\n isDisabled,\n preventFocusOpen,\n menuId,\n buttonRef,\n containerRef,\n menuRef,\n isOpen,\n openMenu,\n closeMenu,\n );\n\n // Menu hover handling (controlled by closeOnHover prop)\n useMenuHover(\n menuRef,\n isOpen,\n closeOnHover,\n openOnHoverAndFocus,\n menuId,\n closeMenu,\n );\n\n // Menu close handling\n useMenuCloseHandling(menuRef, containerRef, isOpen, menuId, closeMenu);\n\n // Determine which style variant to use based on state\n const currentStyleVariant = isOpen ? buttonOpenVariant : buttonStyleVariant;\n\n // Function to create a ref to the alignment target\n const getAlignmentTarget = () => {\n if (alignToElementId) {\n const targetElement = document.getElementById(alignToElementId);\n if (targetElement) {\n return { current: targetElement };\n }\n }\n return buttonRef;\n };\n\n // Handle keyboard events on the trigger button\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n e.preventDefault();\n closeMenu();\n setPreventFocusOpen(true);\n\n setTimeout(() => {\n setPreventFocusOpen(false);\n }, 300);\n } else if (e.key === 'ArrowDown' && !isOpen) {\n e.preventDefault();\n openMenu(true);\n }\n };\n\n // Listen for global menu close events\n useEffect(() => {\n const handleCloseAll = (e: CustomEvent) => {\n const { exceptMenuId } = e.detail || {};\n\n if (exceptMenuId && exceptMenuId === menuId) {\n return;\n }\n\n if (isOpen) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('menu:closeAll', handleCloseAll as EventListener);\n\n return () => {\n document.removeEventListener(\n 'menu:closeAll',\n handleCloseAll as EventListener,\n );\n };\n }, [menuId, isOpen, setIsOpen]);\n\n // Update state when global registry changes\n useEffect(() => {\n const isActive = menuRegistry.getActiveMenu() === menuId;\n if (isActive !== isOpen) {\n setIsOpen(isActive);\n }\n }, [menuId, isOpen, setIsOpen]);\n\n // Focus first menu item when opened via keyboard\n useEffect(() => {\n if (isOpen && openedViaKeyboard && menuRef.current) {\n const focusableElements = getFocusableElements();\n\n if (focusableElements.length > 0) {\n setTimeout(() => {\n focusableElements[0].focus();\n }, 50);\n }\n }\n }, [isOpen, openedViaKeyboard, getFocusableElements]);\n\n // Reset openedViaKeyboard when menu closes\n useEffect(() => {\n if (!isOpen) {\n setOpenedViaKeyboard(false);\n }\n }, [isOpen, setOpenedViaKeyboard]);\n\n // Popover state object\n const menuTriggerState = {\n isOpen,\n open: () => openMenu(),\n close: closeMenu,\n toggle: () => toggleMenu(),\n setOpen: (open: boolean) => {\n if (open) {\n openMenu();\n } else {\n closeMenu();\n }\n },\n };\n\n const handleButtonPress = () => {\n setPreventFocusOpen(false);\n\n // Set keyboard flag based on current focus\n const isKeyboardFocused = document.activeElement === buttonRef.current;\n setOpenedViaKeyboard(isKeyboardFocused);\n\n toggleMenu();\n };\n\n /** Custom trigger logic */\n const defaultTriggerProps = {\n ref: buttonRef,\n 'aria-haspopup': true,\n 'aria-expanded': isOpen,\n onPress: handleButtonPress,\n onKeyDown: handleKeyDown,\n };\n\n const menuChildren = React.Children.toArray(children);\n let menuItems = children;\n let trigger = (\n <Button\n emphasis={buttonEmphasis}\n styleVariant={currentStyleVariant}\n isDisabled={isDisabled}\n iconStartProps={iconStartProps}\n iconEndProps={iconEndProps}\n {...defaultTriggerProps}\n >\n {label}\n </Button>\n );\n\n // Get custom trigger from menu children\n const triggerIndex = menuChildren.findIndex(\n (child) => (child as React.ReactElement)?.type === Trigger,\n );\n const customTrigger = menuChildren[triggerIndex];\n\n if (React.isValidElement(customTrigger)) {\n trigger = React.cloneElement(customTrigger, defaultTriggerProps);\n // Remove custom trigger from children\n menuItems = menuChildren.filter((_, index) => index !== triggerIndex);\n }\n\n return (\n <div className={styles.menuContainer} ref={containerRef}>\n {trigger}\n {isOpen && (\n <Popover\n state={menuTriggerState}\n triggerRef={getAlignmentTarget()}\n hasArrow={false}\n placement={placement}\n shouldFlip={shouldFlip}\n isNonModal={true}\n allowTabOut={allowTabOut}\n autoFocus={openedViaKeyboard}\n >\n <div\n className={styles.menuContent}\n ref={menuRef}\n onKeyDown={handleMenuKeyDown}\n role=\"menu\"\n aria-label={ariaLabel || label}\n tabIndex={-1}\n >\n {menuItems}\n </div>\n </Popover>\n )}\n </div>\n );\n};\n\nMenu.Trigger = Trigger;\n\nexport default Menu;\n"],"names":["menuRegistry","activeMenuId","setActiveMenu","id","getActiveMenu","useMenuNavigation","menuRef","allowTabOut","closeMenu","buttonRef","handleTabNavigation","triggerElement","current","nextElement","startElement","focusableElements","Array","from","document","querySelectorAll","startIndex","indexOf","length","findNextFocusableElement","setTimeout","focus","getFocusableElements","handleMenuKeyDown","e","key","preventDefault","focusedElement","activeElement","currentIndex","handleArrowNavigation","Trigger","forwardRef","children","triggerProps","forwardedRef","element","React","Children","only","ref","useObjectRef","elementProps","props","buttonProps","useButton","type","Button","IconButton","cloneElement","Menu","label","ariaLabel","isDisabled","placement","buttonEmphasis","buttonStyleVariant","buttonOpenVariant","alignToElementId","shouldFlip","openOnHoverAndFocus","closeOnHover","iconStartProps","iconEndProps","onOpenChange","menuId","useId","useRef","containerRef","isOpen","setIsOpen","preventFocusOpen","setPreventFocusOpen","openedViaKeyboard","setOpenedViaKeyboard","openMenu","toggleMenu","isMounted","useState","viaKeyboard","dispatchEvent","CustomEvent","detail","exceptMenuId","useEffect","isKeyboardFocused","tagName","useMenuState","hoverTimeout","isHovering","clearHoverTimeout","clearTimeout","handleHoverCheck","button","menu","isOverButton","matches","isOverMenu","handleCloseMenuIfActive","checkIfStillHovering","handleMouseEnter","handleMouseLeave","handleMenuMouseEnter","handleMenuMouseLeave","buttonElement","menuElement","addEventListener","removeEventListener","focusTimeout","isMenuOpening","handleFocus","wasFocusedByKeyboard","body","handleBlur","containerElement","relatedTarget","contains","useHoverAndFocus","useMenuHover","handleDocumentClick","target","container","isOnTriggerButton","closest","useMenuCloseHandling","currentStyleVariant","handleCloseAll","isActive","menuTriggerState","open","close","toggle","setOpen","defaultTriggerProps","onPress","onKeyDown","menuChildren","toArray","menuItems","trigger","jsx","emphasis","styleVariant","triggerIndex","findIndex","child","customTrigger","isValidElement","filter","_","index","className","styles","Popover","state","triggerRef","targetElement","getElementById","getAlignmentTarget","hasArrow","isNonModal","autoFocus","role","tabIndex"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Menu.js","sources":["../../../node_modules/react-aria/dist/private/interactions/textSelection.mjs","../../../node_modules/react-aria/dist/private/utils/getNonce.mjs","../../../node_modules/react-aria/dist/private/interactions/context.mjs","../../../node_modules/react-aria/dist/private/interactions/usePress.mjs","../../../src/components/Menu/Menu.tsx","../../../node_modules/react-aria/dist/private/utils/useObjectRef.mjs","../../../node_modules/react-aria/dist/private/button/useButton.mjs"],"sourcesContent":["import {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac} from \"../utils/domHelpers.mjs\";\nimport {isIOS as $2add3ce32c6007eb$export$fedb369cb70207f1} from \"../utils/platform.mjs\";\nimport {runAfterTransition as $081cb5757e08788e$export$24490316f764c430} from \"../utils/runAfterTransition.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n// Note that state only matters here for iOS. Non-iOS gets user-select: none applied to the target element\n// rather than at the document level so we just need to apply/remove user-select: none for each pressed element individually\nlet $cbf007e418543821$var$state = 'default';\nlet $cbf007e418543821$var$savedUserSelect = '';\nlet $cbf007e418543821$var$modifiedElementMap = new WeakMap();\nfunction $cbf007e418543821$export$16a4697467175487(target) {\n if ((0, $2add3ce32c6007eb$export$fedb369cb70207f1)()) {\n if ($cbf007e418543821$var$state === 'default') {\n const documentObject = (0, $d447af545b77c9f1$export$b204af158042fbac)(target);\n $cbf007e418543821$var$savedUserSelect = documentObject.documentElement.style.webkitUserSelect;\n documentObject.documentElement.style.webkitUserSelect = 'none';\n }\n $cbf007e418543821$var$state = 'disabled';\n } else if (target instanceof HTMLElement || target instanceof SVGElement) {\n // If not iOS, store the target's original user-select and change to user-select: none\n // Ignore state since it doesn't apply for non iOS\n let property = 'userSelect' in target.style ? 'userSelect' : 'webkitUserSelect';\n $cbf007e418543821$var$modifiedElementMap.set(target, target.style[property]);\n target.style[property] = 'none';\n }\n}\nfunction $cbf007e418543821$export$b0d6fa1ab32e3295(target) {\n if ((0, $2add3ce32c6007eb$export$fedb369cb70207f1)()) {\n // If the state is already default, there's nothing to do.\n // If it is restoring, then there's no need to queue a second restore.\n if ($cbf007e418543821$var$state !== 'disabled') return;\n $cbf007e418543821$var$state = 'restoring';\n // There appears to be a delay on iOS where selection still might occur\n // after pointer up, so wait a bit before removing user-select.\n setTimeout(()=>{\n // Wait for any CSS transitions to complete so we don't recompute style\n // for the whole page in the middle of the animation and cause jank.\n (0, $081cb5757e08788e$export$24490316f764c430)(()=>{\n // Avoid race conditions\n if ($cbf007e418543821$var$state === 'restoring') {\n const documentObject = (0, $d447af545b77c9f1$export$b204af158042fbac)(target);\n if (documentObject.documentElement.style.webkitUserSelect === 'none') documentObject.documentElement.style.webkitUserSelect = $cbf007e418543821$var$savedUserSelect || '';\n $cbf007e418543821$var$savedUserSelect = '';\n $cbf007e418543821$var$state = 'default';\n }\n });\n }, 300);\n } else if (target instanceof HTMLElement || target instanceof SVGElement) // If not iOS, restore the target's original user-select if any\n // Ignore state since it doesn't apply for non iOS\n {\n if (target && $cbf007e418543821$var$modifiedElementMap.has(target)) {\n let targetOldUserSelect = $cbf007e418543821$var$modifiedElementMap.get(target);\n let property = 'userSelect' in target.style ? 'userSelect' : 'webkitUserSelect';\n if (target.style[property] === 'none') target.style[property] = targetOldUserSelect;\n if (target.getAttribute('style') === '') target.removeAttribute('style');\n $cbf007e418543821$var$modifiedElementMap.delete(target);\n }\n }\n}\n\n\nexport {$cbf007e418543821$export$16a4697467175487 as disableTextSelection, $cbf007e418543821$export$b0d6fa1ab32e3295 as restoreTextSelection};\n//# sourceMappingURL=textSelection.mjs.map\n","import {getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a} from \"./domHelpers.mjs\";\n\n/*\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $2b2d34ff061957fb$var$getWebpackNonce(doc) {\n let ownerWindow = doc?.defaultView;\n return ownerWindow?.__webpack_nonce__ || globalThis['__webpack_nonce__'] || undefined;\n}\nlet $2b2d34ff061957fb$var$nonceCache = new WeakMap();\nfunction $2b2d34ff061957fb$export$88b319273f3705b4() {\n $2b2d34ff061957fb$var$nonceCache = new WeakMap();\n}\nfunction $2b2d34ff061957fb$export$2b85b721e524d74b(doc) {\n let d = doc ?? (typeof document !== 'undefined' ? document : undefined);\n if (!d) return $2b2d34ff061957fb$var$getWebpackNonce(d);\n if ($2b2d34ff061957fb$var$nonceCache.has(d)) return $2b2d34ff061957fb$var$nonceCache.get(d);\n let meta = d.querySelector('meta[property=\"csp-nonce\"]');\n let nonce = meta && meta instanceof (0, $d447af545b77c9f1$export$f21a1ffae260145a)(meta).HTMLMetaElement && (meta.nonce || meta.content) || $2b2d34ff061957fb$var$getWebpackNonce(d) || undefined;\n if (nonce !== undefined) $2b2d34ff061957fb$var$nonceCache.set(d, nonce);\n return nonce;\n}\n\n\nexport {$2b2d34ff061957fb$export$88b319273f3705b4 as resetNonceCache, $2b2d34ff061957fb$export$2b85b721e524d74b as getNonce};\n//# sourceMappingURL=getNonce.mjs.map\n","import $kV9Vy$react from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $24f9a20f226ad820$export$5165eccb35aaadb5 = (0, $kV9Vy$react).createContext({\n register: ()=>{}\n});\n$24f9a20f226ad820$export$5165eccb35aaadb5.displayName = 'PressResponderContext';\n\n\nexport {$24f9a20f226ad820$export$5165eccb35aaadb5 as PressResponderContext};\n//# sourceMappingURL=context.mjs.map\n","import {chain as $a4e76a5424781910$export$e08e3b67e392101e} from \"../utils/chain.mjs\";\nimport {createSyntheticEvent as $a92dc41f639950be$export$525bc4921d56d4a, preventFocus as $a92dc41f639950be$export$cabe61c495ee3649, setEventTarget as $a92dc41f639950be$export$c2b7abe5d61ec696} from \"./utils.mjs\";\nimport {disableTextSelection as $cbf007e418543821$export$16a4697467175487, restoreTextSelection as $cbf007e418543821$export$b0d6fa1ab32e3295} from \"./textSelection.mjs\";\nimport {focusWithoutScrolling as $1969ac565cfec8d0$export$de79e2c695e052f3} from \"../utils/focusWithoutScrolling.mjs\";\nimport {getEventTarget as $23f2114a1b82827e$export$e58f029f0fbfdb29, nodeContains as $23f2114a1b82827e$export$4282f70798064fe0} from \"../utils/shadowdom/DOMFunctions.mjs\";\nimport {getNonce as $2b2d34ff061957fb$export$2b85b721e524d74b} from \"../utils/getNonce.mjs\";\nimport {getOwnerDocument as $d447af545b77c9f1$export$b204af158042fbac, getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a} from \"../utils/domHelpers.mjs\";\nimport {isMac as $2add3ce32c6007eb$export$9ac100e40613ea10} from \"../utils/platform.mjs\";\nimport {isVirtualClick as $b5c62b033c25b96d$export$60278871457622de, isVirtualPointerEvent as $b5c62b033c25b96d$export$29bf1b5f2c56cf63} from \"../utils/isVirtualEvent.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {openLink as $caaf0dd3060ed57c$export$95185d699e05d4d7} from \"../utils/openLink.mjs\";\nimport {PressResponderContext as $24f9a20f226ad820$export$5165eccb35aaadb5} from \"./context.mjs\";\nimport {useEffectEvent as $fe16bffc7a557bf0$export$7f54fc3180508a52} from \"../utils/useEffectEvent.mjs\";\nimport {useGlobalListeners as $48a7d519b337145d$export$4eaf04e54aa8eed6} from \"../utils/useGlobalListeners.mjs\";\nimport {useSyncRef as $b7115c395c64f7b5$export$4debdb1a3f0fa79e} from \"../utils/useSyncRef.mjs\";\nimport {flushSync as $fL2C6$flushSync} from \"react-dom\";\nimport {useContext as $fL2C6$useContext, useState as $fL2C6$useState, useRef as $fL2C6$useRef, useCallback as $fL2C6$useCallback, useMemo as $fL2C6$useMemo, useEffect as $fL2C6$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction $d27d541f9569d26d$var$usePressResponderContext(props) {\n // Consume context from <PressResponder> and merge with props.\n let context = (0, $fL2C6$useContext)((0, $24f9a20f226ad820$export$5165eccb35aaadb5));\n if (context) {\n // Prevent mergeProps from merging ref.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let { register: register, ref: ref, ...contextProps } = context;\n props = (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(contextProps, props);\n register();\n }\n (0, $b7115c395c64f7b5$export$4debdb1a3f0fa79e)(context, props.ref);\n return props;\n}\nclass $d27d541f9569d26d$var$PressEvent {\n #shouldStopPropagation;\n constructor(type, pointerType, originalEvent, state){\n this.#shouldStopPropagation = true;\n let currentTarget = state?.target ?? originalEvent.currentTarget;\n const rect = currentTarget?.getBoundingClientRect();\n let x, y = 0;\n let clientX, clientY = null;\n if (originalEvent.clientX != null && originalEvent.clientY != null) {\n clientX = originalEvent.clientX;\n clientY = originalEvent.clientY;\n }\n if (rect) {\n if (clientX != null && clientY != null) {\n x = clientX - rect.left;\n y = clientY - rect.top;\n } else {\n x = rect.width / 2;\n y = rect.height / 2;\n }\n }\n this.type = type;\n this.pointerType = pointerType;\n this.target = originalEvent.currentTarget;\n this.shiftKey = originalEvent.shiftKey;\n this.metaKey = originalEvent.metaKey;\n this.ctrlKey = originalEvent.ctrlKey;\n this.altKey = originalEvent.altKey;\n this.x = x;\n this.y = y;\n this.key = originalEvent.key;\n }\n continuePropagation() {\n this.#shouldStopPropagation = false;\n }\n get shouldStopPropagation() {\n return this.#shouldStopPropagation;\n }\n}\nconst $d27d541f9569d26d$var$LINK_CLICKED = Symbol('linkClicked');\nconst $d27d541f9569d26d$var$STYLE_ID = 'react-aria-pressable-style';\nconst $d27d541f9569d26d$var$PRESSABLE_ATTRIBUTE = 'data-react-aria-pressable';\nfunction $d27d541f9569d26d$export$45712eceda6fad21(props) {\n let { onPress: onPress, onPressChange: onPressChange, onPressStart: onPressStart, onPressEnd: onPressEnd, onPressUp: onPressUp, onClick: onClick, isDisabled: isDisabled, isPressed: isPressedProp, preventFocusOnPress: preventFocusOnPress, shouldCancelOnPointerExit: shouldCancelOnPointerExit, allowTextSelectionOnPress: allowTextSelectionOnPress, ref: domRef, ...domProps } = $d27d541f9569d26d$var$usePressResponderContext(props);\n let [isPressed, setPressed] = (0, $fL2C6$useState)(false);\n let ref = (0, $fL2C6$useRef)({\n isPressed: false,\n ignoreEmulatedMouseEvents: false,\n didFirePressStart: false,\n isTriggeringEvent: false,\n activePointerId: null,\n target: null,\n isOverTarget: false,\n pointerType: null,\n disposables: []\n });\n let { addGlobalListener: addGlobalListener, removeAllGlobalListeners: removeAllGlobalListeners } = (0, $48a7d519b337145d$export$4eaf04e54aa8eed6)();\n let triggerPressStart = (0, $fL2C6$useCallback)((originalEvent, pointerType)=>{\n let state = ref.current;\n if (isDisabled || state.didFirePressStart) return false;\n let shouldStopPropagation = true;\n state.isTriggeringEvent = true;\n if (onPressStart) {\n let event = new $d27d541f9569d26d$var$PressEvent('pressstart', pointerType, originalEvent);\n onPressStart(event);\n shouldStopPropagation = event.shouldStopPropagation;\n }\n if (onPressChange) onPressChange(true);\n state.isTriggeringEvent = false;\n state.didFirePressStart = true;\n setPressed(true);\n return shouldStopPropagation;\n }, [\n isDisabled,\n onPressStart,\n onPressChange\n ]);\n let triggerPressEnd = (0, $fL2C6$useCallback)((originalEvent, pointerType, wasPressed = true)=>{\n let state = ref.current;\n if (!state.didFirePressStart) return false;\n state.didFirePressStart = false;\n state.isTriggeringEvent = true;\n let shouldStopPropagation = true;\n if (onPressEnd) {\n let event = new $d27d541f9569d26d$var$PressEvent('pressend', pointerType, originalEvent);\n onPressEnd(event);\n shouldStopPropagation = event.shouldStopPropagation;\n }\n if (onPressChange) onPressChange(false);\n setPressed(false);\n if (onPress && wasPressed && !isDisabled) {\n let event = new $d27d541f9569d26d$var$PressEvent('press', pointerType, originalEvent);\n onPress(event);\n shouldStopPropagation &&= event.shouldStopPropagation;\n }\n state.isTriggeringEvent = false;\n return shouldStopPropagation;\n }, [\n isDisabled,\n onPressEnd,\n onPressChange,\n onPress\n ]);\n let triggerPressEndEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(triggerPressEnd);\n let triggerPressUp = (0, $fL2C6$useCallback)((originalEvent, pointerType)=>{\n let state = ref.current;\n if (isDisabled) return false;\n if (onPressUp) {\n state.isTriggeringEvent = true;\n let event = new $d27d541f9569d26d$var$PressEvent('pressup', pointerType, originalEvent);\n onPressUp(event);\n state.isTriggeringEvent = false;\n return event.shouldStopPropagation;\n }\n return true;\n }, [\n isDisabled,\n onPressUp\n ]);\n let triggerPressUpEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(triggerPressUp);\n let cancel = (0, $fL2C6$useCallback)((e)=>{\n let state = ref.current;\n if (state.isPressed && state.target) {\n if (state.didFirePressStart && state.pointerType != null) triggerPressEnd($d27d541f9569d26d$var$createEvent(state.target, e), state.pointerType, false);\n state.isPressed = false;\n state.isOverTarget = false;\n state.activePointerId = null;\n state.pointerType = null;\n removeAllGlobalListeners();\n if (!allowTextSelectionOnPress) (0, $cbf007e418543821$export$b0d6fa1ab32e3295)(state.target);\n for (let dispose of state.disposables)dispose();\n state.disposables = [];\n }\n }, [\n allowTextSelectionOnPress,\n removeAllGlobalListeners,\n triggerPressEnd\n ]);\n let cancelEvent = (0, $fe16bffc7a557bf0$export$7f54fc3180508a52)(cancel);\n let cancelOnPointerExit = (0, $fL2C6$useCallback)((e)=>{\n if (shouldCancelOnPointerExit) cancel(e);\n }, [\n shouldCancelOnPointerExit,\n cancel\n ]);\n let triggerClick = (0, $fL2C6$useCallback)((e)=>{\n if (isDisabled) return;\n onClick?.(e);\n }, [\n isDisabled,\n onClick\n ]);\n let triggerSyntheticClick = (0, $fL2C6$useCallback)((e, target)=>{\n if (isDisabled) return;\n // Some third-party libraries pass in onClick instead of onPress.\n // Create a fake mouse event and trigger onClick as well.\n // This matches the browser's native activation behavior for certain elements (e.g. button).\n // https://html.spec.whatwg.org/#activation\n // https://html.spec.whatwg.org/#fire-a-synthetic-pointer-event\n if (onClick) {\n let event = new MouseEvent('click', e);\n (0, $a92dc41f639950be$export$c2b7abe5d61ec696)(event, target);\n onClick((0, $a92dc41f639950be$export$525bc4921d56d4a)(event));\n }\n }, [\n isDisabled,\n onClick\n ]);\n let pressProps = (0, $fL2C6$useMemo)(()=>{\n let state = ref.current;\n let pressProps = {\n onKeyDown (e) {\n if ($d27d541f9569d26d$var$isValidKeyboardEvent(e.nativeEvent, e.currentTarget) && (0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) {\n if ($d27d541f9569d26d$var$shouldPreventDefaultKeyboard((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e), e.key)) e.preventDefault();\n // If the event is repeating, it may have started on a different element\n // after which focus moved to the current element. Ignore these events and\n // only handle the first key down event.\n let shouldStopPropagation = true;\n if (!state.isPressed && !e.repeat) {\n state.target = e.currentTarget;\n state.isPressed = true;\n state.pointerType = 'keyboard';\n shouldStopPropagation = triggerPressStart(e, 'keyboard');\n }\n // Focus may move before the key up event, so register the event on the document\n // instead of the same element where the key down event occurred. Make it capturing so that it will trigger\n // before stopPropagation from useKeyboard on a child element may happen and thus we can still call triggerPress for the parent element.\n let originalTarget = e.currentTarget;\n let pressUp = (e)=>{\n if ($d27d541f9569d26d$var$isValidKeyboardEvent(e, originalTarget) && !e.repeat && (0, $23f2114a1b82827e$export$4282f70798064fe0)(originalTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)) && state.target) // eslint-disable-next-line react-hooks/rules-of-hooks\n triggerPressUpEvent($d27d541f9569d26d$var$createEvent(state.target, e), 'keyboard');\n };\n addGlobalListener((0, $d447af545b77c9f1$export$b204af158042fbac)(e.currentTarget), 'keyup', (0, $a4e76a5424781910$export$e08e3b67e392101e)(pressUp, onKeyUp), true);\n if (shouldStopPropagation) e.stopPropagation();\n // Keep track of the keydown events that occur while the Meta (e.g. Command) key is held.\n // macOS has a bug where keyup events are not fired while the Meta key is down.\n // When the Meta key itself is released we will get an event for that, and we'll act as if\n // all of these other keys were released as well.\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1393524\n // https://bugs.webkit.org/show_bug.cgi?id=55291\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1299553\n if (e.metaKey && (0, $2add3ce32c6007eb$export$9ac100e40613ea10)()) state.metaKeyEvents?.set(e.key, e.nativeEvent);\n } else if (e.key === 'Meta') state.metaKeyEvents = new Map();\n },\n onClick (e) {\n if (e && !(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n if (e && e.button === 0 && !state.isTriggeringEvent && !(0, $caaf0dd3060ed57c$export$95185d699e05d4d7).isOpening) {\n let shouldStopPropagation = true;\n if (isDisabled) e.preventDefault();\n // If triggered from a screen reader or by using element.click(),\n // trigger as if it were a keyboard click.\n if (!state.ignoreEmulatedMouseEvents && !state.isPressed && (state.pointerType === 'virtual' || (0, $b5c62b033c25b96d$export$60278871457622de)(e.nativeEvent))) {\n let stopPressStart = triggerPressStart(e, 'virtual');\n // eslint-disable-next-line react-hooks/rules-of-hooks\n let stopPressUp = triggerPressUpEvent(e, 'virtual');\n // eslint-disable-next-line react-hooks/rules-of-hooks\n let stopPressEnd = triggerPressEndEvent(e, 'virtual');\n triggerClick(e);\n shouldStopPropagation = stopPressStart && stopPressUp && stopPressEnd;\n } else if (state.isPressed && state.pointerType !== 'keyboard') {\n let pointerType = state.pointerType || e.nativeEvent.pointerType || 'virtual';\n // eslint-disable-next-line react-hooks/rules-of-hooks\n let stopPressUp = triggerPressUpEvent($d27d541f9569d26d$var$createEvent(e.currentTarget, e), pointerType);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n let stopPressEnd = triggerPressEndEvent($d27d541f9569d26d$var$createEvent(e.currentTarget, e), pointerType, true);\n shouldStopPropagation = stopPressUp && stopPressEnd;\n state.isOverTarget = false;\n triggerClick(e);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n cancelEvent(e);\n }\n state.ignoreEmulatedMouseEvents = false;\n if (shouldStopPropagation) e.stopPropagation();\n }\n }\n };\n let onKeyUp = (e)=>{\n if (state.isPressed && state.target && $d27d541f9569d26d$var$isValidKeyboardEvent(e, state.target)) {\n if ($d27d541f9569d26d$var$shouldPreventDefaultKeyboard((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e), e.key)) e.preventDefault();\n let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n let wasPressed = (0, $23f2114a1b82827e$export$4282f70798064fe0)(state.target, target);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n triggerPressEndEvent($d27d541f9569d26d$var$createEvent(state.target, e), 'keyboard', wasPressed);\n if (wasPressed) triggerSyntheticClick(e, state.target);\n removeAllGlobalListeners();\n // If a link was triggered with a key other than Enter, open the URL ourselves.\n // This means the link has a role override, and the default browser behavior\n // only applies when using the Enter key.\n if (e.key !== 'Enter' && $d27d541f9569d26d$var$isHTMLAnchorLink(state.target) && (0, $23f2114a1b82827e$export$4282f70798064fe0)(state.target, target) && !e[$d27d541f9569d26d$var$LINK_CLICKED]) {\n // Store a hidden property on the event so we only trigger link click once,\n // even if there are multiple usePress instances attached to the element.\n e[$d27d541f9569d26d$var$LINK_CLICKED] = true;\n (0, $caaf0dd3060ed57c$export$95185d699e05d4d7)(state.target, e, false);\n }\n state.isPressed = false;\n state.metaKeyEvents?.delete(e.key);\n } else if (e.key === 'Meta' && state.metaKeyEvents?.size) {\n // If we recorded keydown events that occurred while the Meta key was pressed,\n // and those haven't received keyup events already, fire keyup events ourselves.\n // See comment above for more info about the macOS bug causing this.\n let events = state.metaKeyEvents;\n state.metaKeyEvents = undefined;\n for (let event of events.values())state.target?.dispatchEvent(new KeyboardEvent('keyup', event));\n }\n };\n if (typeof PointerEvent !== 'undefined') {\n pressProps.onPointerDown = (e)=>{\n // Only handle left clicks, and ignore events that bubbled through portals.\n if (e.button !== 0 || !(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n // iOS safari fires pointer events from VoiceOver with incorrect coordinates/target.\n // Ignore and let the onClick handler take care of it instead.\n // https://bugs.webkit.org/show_bug.cgi?id=222627\n // https://bugs.webkit.org/show_bug.cgi?id=223202\n if ((0, $b5c62b033c25b96d$export$29bf1b5f2c56cf63)(e.nativeEvent)) {\n state.pointerType = 'virtual';\n return;\n }\n state.pointerType = e.pointerType;\n let shouldStopPropagation = true;\n if (!state.isPressed) {\n state.isPressed = true;\n state.isOverTarget = true;\n state.activePointerId = e.pointerId;\n state.target = e.currentTarget;\n if (!allowTextSelectionOnPress) (0, $cbf007e418543821$export$16a4697467175487)(state.target);\n shouldStopPropagation = triggerPressStart(e, state.pointerType);\n // Release pointer capture so that touch interactions can leave the original target.\n // This enables onPointerLeave and onPointerEnter to fire.\n let target = (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e);\n if ('releasePointerCapture' in target) {\n if ('hasPointerCapture' in target) {\n if (target.hasPointerCapture(e.pointerId)) target.releasePointerCapture(e.pointerId);\n } else target.releasePointerCapture(e.pointerId);\n }\n addGlobalListener((0, $d447af545b77c9f1$export$b204af158042fbac)(e.currentTarget), 'pointerup', onPointerUp, false);\n addGlobalListener((0, $d447af545b77c9f1$export$b204af158042fbac)(e.currentTarget), 'pointercancel', onPointerCancel, false);\n }\n if (shouldStopPropagation) e.stopPropagation();\n };\n pressProps.onMouseDown = (e)=>{\n if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n if (e.button === 0) {\n if (preventFocusOnPress) {\n let dispose = (0, $a92dc41f639950be$export$cabe61c495ee3649)(e.target);\n if (dispose) state.disposables.push(dispose);\n }\n e.stopPropagation();\n }\n };\n pressProps.onPointerUp = (e)=>{\n // iOS fires pointerup with zero width and height, so check the pointerType recorded during pointerdown.\n if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)) || state.pointerType === 'virtual') return;\n // Only handle left clicks. If isPressed is true, delay until onClick.\n if (e.button === 0 && !state.isPressed) // eslint-disable-next-line react-hooks/rules-of-hooks\n triggerPressUpEvent(e, state.pointerType || e.pointerType);\n };\n pressProps.onPointerEnter = (e)=>{\n if (e.pointerId === state.activePointerId && state.target && !state.isOverTarget && state.pointerType != null) {\n state.isOverTarget = true;\n triggerPressStart($d27d541f9569d26d$var$createEvent(state.target, e), state.pointerType);\n }\n };\n pressProps.onPointerLeave = (e)=>{\n if (e.pointerId === state.activePointerId && state.target && state.isOverTarget && state.pointerType != null) {\n state.isOverTarget = false;\n // eslint-disable-next-line react-hooks/rules-of-hooks\n triggerPressEndEvent($d27d541f9569d26d$var$createEvent(state.target, e), state.pointerType, false);\n cancelOnPointerExit(e);\n }\n };\n let onPointerUp = (e)=>{\n if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0 && state.target) {\n if ((0, $23f2114a1b82827e$export$4282f70798064fe0)(state.target, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)) && state.pointerType != null) {\n // Wait for onClick to fire onPress. This avoids browser issues when the DOM\n // is mutated between onPointerUp and onClick, and is more compatible with third party libraries.\n // https://github.com/adobe/react-spectrum/issues/1513\n // https://issues.chromium.org/issues/40732224\n // However, iOS and Android do not focus or fire onClick after a long press.\n // We work around this by triggering a click ourselves after a timeout.\n // This timeout is canceled during the click event in case the real one fires first.\n // The timeout must be at least 32ms, because Safari on iOS delays the click event on\n // non-form elements without certain ARIA roles (for hover emulation).\n // https://github.com/WebKit/WebKit/blob/dccfae42bb29bd4bdef052e469f604a9387241c0/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm#L875-L892\n let clicked = false;\n let timeout = setTimeout(()=>{\n if (state.isPressed && state.target instanceof HTMLElement) {\n if (clicked) // eslint-disable-next-line react-hooks/rules-of-hooks\n cancelEvent(e);\n else {\n (0, $1969ac565cfec8d0$export$de79e2c695e052f3)(state.target);\n state.target.click();\n }\n }\n }, 80);\n // Use a capturing listener to track if a click occurred.\n // If stopPropagation is called it may never reach our handler.\n addGlobalListener(e.currentTarget, 'click', ()=>clicked = true, true);\n state.disposables.push(()=>clearTimeout(timeout));\n } else // eslint-disable-next-line react-hooks/rules-of-hooks\n cancelEvent(e);\n // Ignore subsequent onPointerLeave event before onClick on touch devices.\n state.isOverTarget = false;\n }\n };\n let onPointerCancel = (e)=>{\n // eslint-disable-next-line react-hooks/rules-of-hooks\n cancelEvent(e);\n };\n pressProps.onDragStart = (e)=>{\n if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n // Safari does not call onPointerCancel when a drag starts, whereas Chrome and Firefox do.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n cancelEvent(e);\n };\n } else if (process.env.NODE_ENV === 'test') {\n // NOTE: this fallback branch is entirely used by unit tests.\n // All browsers now support pointer events, but JSDOM still does not.\n pressProps.onMouseDown = (e)=>{\n // Only handle left clicks\n if (e.button !== 0 || !(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n if (state.ignoreEmulatedMouseEvents) {\n e.stopPropagation();\n return;\n }\n state.isPressed = true;\n state.isOverTarget = true;\n state.target = e.currentTarget;\n state.pointerType = (0, $b5c62b033c25b96d$export$60278871457622de)(e.nativeEvent) ? 'virtual' : 'mouse';\n // Flush sync so that focus moved during react re-renders occurs before we yield back to the browser.\n let shouldStopPropagation = (0, $fL2C6$flushSync)(()=>triggerPressStart(e, state.pointerType));\n if (shouldStopPropagation) e.stopPropagation();\n if (preventFocusOnPress) {\n let dispose = (0, $a92dc41f639950be$export$cabe61c495ee3649)(e.target);\n if (dispose) state.disposables.push(dispose);\n }\n addGlobalListener((0, $d447af545b77c9f1$export$b204af158042fbac)(e.currentTarget), 'mouseup', onMouseUp, false);\n };\n pressProps.onMouseEnter = (e)=>{\n if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n let shouldStopPropagation = true;\n if (state.isPressed && !state.ignoreEmulatedMouseEvents && state.pointerType != null) {\n state.isOverTarget = true;\n shouldStopPropagation = triggerPressStart(e, state.pointerType);\n }\n if (shouldStopPropagation) e.stopPropagation();\n };\n pressProps.onMouseLeave = (e)=>{\n if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n let shouldStopPropagation = true;\n if (state.isPressed && !state.ignoreEmulatedMouseEvents && state.pointerType != null) {\n state.isOverTarget = false;\n // eslint-disable-next-line react-hooks/rules-of-hooks\n shouldStopPropagation = triggerPressEndEvent(e, state.pointerType, false);\n cancelOnPointerExit(e);\n }\n if (shouldStopPropagation) e.stopPropagation();\n };\n pressProps.onMouseUp = (e)=>{\n if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n if (!state.ignoreEmulatedMouseEvents && e.button === 0 && !state.isPressed) // eslint-disable-next-line react-hooks/rules-of-hooks\n triggerPressUpEvent(e, state.pointerType || 'mouse');\n };\n let onMouseUp = (e)=>{\n // Only handle left clicks\n if (e.button !== 0) return;\n if (state.ignoreEmulatedMouseEvents) {\n state.ignoreEmulatedMouseEvents = false;\n return;\n }\n if (state.target && (0, $23f2114a1b82827e$export$4282f70798064fe0)(state.target, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e)) && state.pointerType != null) ;\n else // eslint-disable-next-line react-hooks/rules-of-hooks\n cancelEvent(e);\n state.isOverTarget = false;\n };\n pressProps.onTouchStart = (e)=>{\n if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n let touch = $d27d541f9569d26d$var$getTouchFromEvent(e.nativeEvent);\n if (!touch) return;\n state.activePointerId = touch.identifier;\n state.ignoreEmulatedMouseEvents = true;\n state.isOverTarget = true;\n state.isPressed = true;\n state.target = e.currentTarget;\n state.pointerType = 'touch';\n if (!allowTextSelectionOnPress) (0, $cbf007e418543821$export$16a4697467175487)(state.target);\n let shouldStopPropagation = triggerPressStart($d27d541f9569d26d$var$createTouchEvent(state.target, e), state.pointerType);\n if (shouldStopPropagation) e.stopPropagation();\n addGlobalListener((0, $d447af545b77c9f1$export$f21a1ffae260145a)(e.currentTarget), 'scroll', onScroll, true);\n };\n pressProps.onTouchMove = (e)=>{\n if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n if (!state.isPressed) {\n e.stopPropagation();\n return;\n }\n let touch = $d27d541f9569d26d$var$getTouchById(e.nativeEvent, state.activePointerId);\n let shouldStopPropagation = true;\n if (touch && $d27d541f9569d26d$var$isOverTarget(touch, e.currentTarget)) {\n if (!state.isOverTarget && state.pointerType != null) {\n state.isOverTarget = true;\n shouldStopPropagation = triggerPressStart($d27d541f9569d26d$var$createTouchEvent(state.target, e), state.pointerType);\n }\n } else if (state.isOverTarget && state.pointerType != null) {\n state.isOverTarget = false;\n // eslint-disable-next-line react-hooks/rules-of-hooks\n shouldStopPropagation = triggerPressEndEvent($d27d541f9569d26d$var$createTouchEvent(state.target, e), state.pointerType, false);\n cancelOnPointerExit($d27d541f9569d26d$var$createTouchEvent(state.target, e));\n }\n if (shouldStopPropagation) e.stopPropagation();\n };\n pressProps.onTouchEnd = (e)=>{\n if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n if (!state.isPressed) {\n e.stopPropagation();\n return;\n }\n let touch = $d27d541f9569d26d$var$getTouchById(e.nativeEvent, state.activePointerId);\n let shouldStopPropagation = true;\n if (touch && $d27d541f9569d26d$var$isOverTarget(touch, e.currentTarget) && state.pointerType != null) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n triggerPressUpEvent($d27d541f9569d26d$var$createTouchEvent(state.target, e), state.pointerType);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n shouldStopPropagation = triggerPressEndEvent($d27d541f9569d26d$var$createTouchEvent(state.target, e), state.pointerType);\n triggerSyntheticClick(e.nativeEvent, state.target);\n } else if (state.isOverTarget && state.pointerType != null) // eslint-disable-next-line react-hooks/rules-of-hooks\n shouldStopPropagation = triggerPressEndEvent($d27d541f9569d26d$var$createTouchEvent(state.target, e), state.pointerType, false);\n if (shouldStopPropagation) e.stopPropagation();\n state.isPressed = false;\n state.activePointerId = null;\n state.isOverTarget = false;\n state.ignoreEmulatedMouseEvents = true;\n if (state.target && !allowTextSelectionOnPress) (0, $cbf007e418543821$export$b0d6fa1ab32e3295)(state.target);\n removeAllGlobalListeners();\n };\n pressProps.onTouchCancel = (e)=>{\n if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n e.stopPropagation();\n if (state.isPressed) // eslint-disable-next-line react-hooks/rules-of-hooks\n cancelEvent($d27d541f9569d26d$var$createTouchEvent(state.target, e));\n };\n let onScroll = (e)=>{\n if (state.isPressed && (0, $23f2114a1b82827e$export$4282f70798064fe0)((0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e), state.target)) // eslint-disable-next-line react-hooks/rules-of-hooks\n cancelEvent({\n currentTarget: state.target,\n shiftKey: false,\n ctrlKey: false,\n metaKey: false,\n altKey: false\n });\n };\n pressProps.onDragStart = (e)=>{\n if (!(0, $23f2114a1b82827e$export$4282f70798064fe0)(e.currentTarget, (0, $23f2114a1b82827e$export$e58f029f0fbfdb29)(e))) return;\n // eslint-disable-next-line react-hooks/rules-of-hooks\n cancelEvent(e);\n };\n }\n return pressProps;\n }, [\n addGlobalListener,\n isDisabled,\n preventFocusOnPress,\n removeAllGlobalListeners,\n allowTextSelectionOnPress,\n cancelOnPointerExit,\n triggerPressStart,\n triggerClick,\n triggerSyntheticClick\n ]);\n // Avoid onClick delay for double tap to zoom by default.\n (0, $fL2C6$useEffect)(()=>{\n if (!domRef || process.env.NODE_ENV === 'test') return;\n const ownerDocument = (0, $d447af545b77c9f1$export$b204af158042fbac)(domRef.current);\n if (!ownerDocument || !ownerDocument.head || ownerDocument.getElementById($d27d541f9569d26d$var$STYLE_ID)) return;\n const style = ownerDocument.createElement('style');\n style.id = $d27d541f9569d26d$var$STYLE_ID;\n let nonce = (0, $2b2d34ff061957fb$export$2b85b721e524d74b)(ownerDocument);\n if (nonce) style.nonce = nonce;\n // touchAction: 'manipulation' is supposed to be equivalent, but in\n // Safari it causes onPointerCancel not to fire on scroll.\n // https://bugs.webkit.org/show_bug.cgi?id=240917\n style.textContent = `\n@layer {\n [${$d27d541f9569d26d$var$PRESSABLE_ATTRIBUTE}] {\n touch-action: pan-x pan-y pinch-zoom;\n }\n}\n `.trim();\n ownerDocument.head.prepend(style);\n }, [\n domRef\n ]);\n // Remove user-select: none in case component unmounts immediately after pressStart\n (0, $fL2C6$useEffect)(()=>{\n let state = ref.current;\n return ()=>{\n if (!allowTextSelectionOnPress) (0, $cbf007e418543821$export$b0d6fa1ab32e3295)(state.target ?? undefined);\n for (let dispose of state.disposables)dispose();\n state.disposables = [];\n };\n }, [\n allowTextSelectionOnPress\n ]);\n return {\n isPressed: isPressedProp || isPressed,\n pressProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(domProps, pressProps, {\n [$d27d541f9569d26d$var$PRESSABLE_ATTRIBUTE]: true\n })\n };\n}\nfunction $d27d541f9569d26d$var$isHTMLAnchorLink(target) {\n return target.tagName === 'A' && target.hasAttribute('href');\n}\nfunction $d27d541f9569d26d$var$isValidKeyboardEvent(event, currentTarget) {\n const { key: key, code: code } = event;\n const element = currentTarget;\n const role = element.getAttribute('role');\n // Accessibility for keyboards. Space and Enter only.\n // \"Spacebar\" is for IE 11\n return (key === 'Enter' || key === ' ' || key === 'Spacebar' || code === 'Space') && !(element instanceof (0, $d447af545b77c9f1$export$f21a1ffae260145a)(element).HTMLInputElement && !$d27d541f9569d26d$var$isValidInputKey(element, key) || element instanceof (0, $d447af545b77c9f1$export$f21a1ffae260145a)(element).HTMLTextAreaElement || element.isContentEditable) && // Links should only trigger with Enter key\n !((role === 'link' || !role && $d27d541f9569d26d$var$isHTMLAnchorLink(element)) && key !== 'Enter');\n}\nfunction $d27d541f9569d26d$var$getTouchFromEvent(event) {\n const { targetTouches: targetTouches } = event;\n if (targetTouches.length > 0) return targetTouches[0];\n return null;\n}\nfunction $d27d541f9569d26d$var$getTouchById(event, pointerId) {\n const changedTouches = event.changedTouches;\n for(let i = 0; i < changedTouches.length; i++){\n const touch = changedTouches[i];\n if (touch.identifier === pointerId) return touch;\n }\n return null;\n}\nfunction $d27d541f9569d26d$var$createTouchEvent(target, e) {\n let clientX = 0;\n let clientY = 0;\n if (e.targetTouches && e.targetTouches.length === 1) {\n clientX = e.targetTouches[0].clientX;\n clientY = e.targetTouches[0].clientY;\n }\n return {\n currentTarget: target,\n shiftKey: e.shiftKey,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n altKey: e.altKey,\n clientX: clientX,\n clientY: clientY\n };\n}\nfunction $d27d541f9569d26d$var$createEvent(target, e) {\n let clientX = e.clientX;\n let clientY = e.clientY;\n return {\n currentTarget: target,\n shiftKey: e.shiftKey,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n altKey: e.altKey,\n clientX: clientX,\n clientY: clientY,\n key: e.key\n };\n}\nfunction $d27d541f9569d26d$var$getPointClientRect(point) {\n let offsetX = 0;\n let offsetY = 0;\n if (point.width !== undefined) offsetX = point.width / 2;\n else if (point.radiusX !== undefined) offsetX = point.radiusX;\n if (point.height !== undefined) offsetY = point.height / 2;\n else if (point.radiusY !== undefined) offsetY = point.radiusY;\n return {\n top: point.clientY - offsetY,\n right: point.clientX + offsetX,\n bottom: point.clientY + offsetY,\n left: point.clientX - offsetX\n };\n}\nfunction $d27d541f9569d26d$var$areRectanglesOverlapping(a, b) {\n // check if they cannot overlap on x axis\n if (a.left > b.right || b.left > a.right) return false;\n // check if they cannot overlap on y axis\n if (a.top > b.bottom || b.top > a.bottom) return false;\n return true;\n}\nfunction $d27d541f9569d26d$var$isOverTarget(point, target) {\n let rect = target.getBoundingClientRect();\n let pointRect = $d27d541f9569d26d$var$getPointClientRect(point);\n return $d27d541f9569d26d$var$areRectanglesOverlapping(rect, pointRect);\n}\nfunction $d27d541f9569d26d$var$shouldPreventDefaultUp(target) {\n if (target instanceof HTMLInputElement) return false;\n if (target instanceof HTMLButtonElement) return target.type !== 'submit' && target.type !== 'reset';\n if ($d27d541f9569d26d$var$isHTMLAnchorLink(target)) return false;\n return true;\n}\nfunction $d27d541f9569d26d$var$shouldPreventDefaultKeyboard(target, key) {\n if (target instanceof HTMLInputElement) return !$d27d541f9569d26d$var$isValidInputKey(target, key);\n return $d27d541f9569d26d$var$shouldPreventDefaultUp(target);\n}\nconst $d27d541f9569d26d$var$nonTextInputTypes = new Set([\n 'checkbox',\n 'radio',\n 'range',\n 'color',\n 'file',\n 'image',\n 'button',\n 'submit',\n 'reset'\n]);\nfunction $d27d541f9569d26d$var$isValidInputKey(target, key) {\n // Only space should toggle checkboxes and radios, not enter.\n return target.type === 'checkbox' || target.type === 'radio' ? key === ' ' : $d27d541f9569d26d$var$nonTextInputTypes.has(target.type);\n}\n\n\nexport {$d27d541f9569d26d$export$45712eceda6fad21 as usePress};\n//# sourceMappingURL=usePress.mjs.map\n","import React, { useState, useRef, useEffect, useId, forwardRef } from 'react';\nimport { Button, ButtonProps } from '../Button/Button';\nimport { Popover } from '../Popover/Popover';\nimport styles from './Menu.module.css';\nimport IconButton from '../IconButton';\nimport { useButton, useObjectRef } from 'react-aria';\n\n// Create a static registry to track the currently open menu\nconst menuRegistry = {\n activeMenuId: null as string | null,\n setActiveMenu: (id: string | null) => {\n menuRegistry.activeMenuId = id;\n },\n getActiveMenu: () => menuRegistry.activeMenuId,\n};\n\n// Define placement types for the Menu component\ntype PlacementType =\n | 'top'\n | 'top start'\n | 'top end'\n | 'right'\n | 'right top'\n | 'right bottom'\n | 'bottom'\n | 'bottom start'\n | 'bottom end'\n | 'left'\n | 'left top'\n | 'left bottom';\n\n// Props for the Menu component\nexport interface MenuProps {\n /**\n * The label text for the menu button\n */\n label?: string;\n\n /**\n * Accessible label for the menu (for screen readers)\n * Defaults to the button label if not provided\n * @default props.label\n */\n 'aria-label'?: string;\n\n /**\n * Whether the menu is disabled\n * @default false\n */\n isDisabled?: boolean;\n\n /**\n * The placement of the menu relative to the button\n * @default 'bottom start'\n */\n placement?: PlacementType;\n\n /**\n * The button emphasis\n * @default 'tertiary'\n */\n buttonEmphasis?: ButtonProps['emphasis'];\n\n /**\n * The button style variant\n * @default 'neutral'\n */\n buttonStyleVariant?: ButtonProps['styleVariant'];\n\n /**\n * The button style variant when menu is open\n * @default buttonStyleVariant value\n */\n buttonOpenVariant?: ButtonProps['styleVariant'];\n\n /**\n * ID of an element to position the menu against instead of the button\n * When provided, the menu will be positioned relative to this element\n */\n alignToElementId?: string;\n\n /**\n * Whether the menu should flip to fit in the viewport\n * @default false\n */\n shouldFlip?: boolean;\n\n /**\n * Whether the menu should open on hover and focus\n * @default false\n */\n openOnHoverAndFocus?: boolean;\n\n /**\n * Whether to allow tabbing out of the menu\n * @default true\n */\n allowTabOut?: boolean;\n\n /**\n * Whether the menu should close when mouse leaves the menu area\n * @default true\n */\n closeOnHover?: boolean;\n\n /**\n * The content to display inside the menu (as JSX children)\n * Can be custom HTML content. Interactive elements work normally.\n * Add data-menu-close=\"true\" to elements that should close the menu when clicked.\n */\n children: React.ReactNode;\n\n /**\n * Icon props for the start of the button\n */\n iconStartProps?: ButtonProps['iconStartProps'];\n\n /**\n * Icon props for the end of the button\n */\n iconEndProps?: ButtonProps['iconEndProps'];\n\n /**\n * Callback function that is called when the open state of the menu changes\n */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\n// Custom hook for menu state management\nconst useMenuState = (\n menuId: string,\n onOpenChange: MenuProps['onOpenChange'],\n) => {\n const isMounted = useRef(false);\n const [isOpen, setIsOpen] = useState(false);\n const [preventFocusOpen, setPreventFocusOpen] = useState(false);\n const [openedViaKeyboard, setOpenedViaKeyboard] = useState(false);\n\n const closeMenu = () => {\n menuRegistry.setActiveMenu(null);\n setIsOpen(false);\n setPreventFocusOpen(true);\n\n setTimeout(() => {\n setPreventFocusOpen(false);\n }, 300);\n };\n\n const openMenu = (viaKeyboard = false) => {\n // Close any other open menu first\n if (\n menuRegistry.getActiveMenu() &&\n menuRegistry.getActiveMenu() !== menuId\n ) {\n document.dispatchEvent(\n new CustomEvent('menu:closeAll', {\n detail: { exceptMenuId: menuId },\n }),\n );\n }\n\n menuRegistry.setActiveMenu(menuId);\n setIsOpen(true);\n setOpenedViaKeyboard(viaKeyboard);\n };\n\n const toggleMenu = () => {\n if (isOpen) {\n closeMenu();\n } else {\n const isKeyboardFocused = document.activeElement?.tagName === 'BUTTON';\n openMenu(isKeyboardFocused);\n }\n };\n\n useEffect(() => {\n if (onOpenChange && isMounted.current) onOpenChange(isOpen);\n // Leave `onOpenChange` out of dependency array to avoid multiple calls if callback is not memoised\n }, [isOpen]);\n\n // Avoid running onOpenChange effect on first render\n useEffect(() => {\n isMounted.current = true;\n }, []);\n\n return {\n isOpen,\n setIsOpen,\n preventFocusOpen,\n setPreventFocusOpen,\n openedViaKeyboard,\n setOpenedViaKeyboard,\n closeMenu,\n openMenu,\n toggleMenu,\n };\n};\n\n// Custom hook for keyboard navigation within the menu\nconst useMenuNavigation = (\n menuRef: React.RefObject<HTMLDivElement | null>,\n allowTabOut: boolean,\n closeMenu: () => void,\n buttonRef: React.RefObject<HTMLButtonElement | null>,\n) => {\n const findNextFocusableElement = (\n startElement: HTMLElement,\n ): HTMLElement | null => {\n const focusableElements = Array.from(\n document.querySelectorAll(\n 'a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n ),\n ) as HTMLElement[];\n\n const startIndex = focusableElements.indexOf(startElement);\n return startIndex !== -1 && startIndex < focusableElements.length - 1\n ? focusableElements[startIndex + 1]\n : focusableElements[0];\n };\n\n const handleTabNavigation = () => {\n const triggerElement = buttonRef.current;\n if (triggerElement) {\n const nextElement = findNextFocusableElement(triggerElement);\n closeMenu();\n setTimeout(() => {\n if (nextElement) {\n nextElement.focus();\n }\n }, 10);\n } else {\n closeMenu();\n }\n };\n\n const getFocusableElements = (): HTMLElement[] => {\n if (!menuRef.current) return [];\n\n return Array.from(\n menuRef.current.querySelectorAll(\n 'a[href], button:not([disabled]), input:not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n ),\n ) as HTMLElement[];\n };\n\n const handleArrowNavigation = (\n e: React.KeyboardEvent,\n focusableElements: HTMLElement[],\n ) => {\n if (focusableElements.length === 0) return;\n\n const focusedElement = document.activeElement as HTMLElement;\n const currentIndex = focusableElements.indexOf(focusedElement);\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n const nextIndex =\n currentIndex < focusableElements.length - 1 ? currentIndex + 1 : 0;\n focusableElements[nextIndex].focus();\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n const prevIndex =\n currentIndex > 0 ? currentIndex - 1 : focusableElements.length - 1;\n focusableElements[prevIndex].focus();\n } else if (e.key === 'Home') {\n e.preventDefault();\n focusableElements[0].focus();\n } else if (e.key === 'End') {\n e.preventDefault();\n focusableElements[focusableElements.length - 1].focus();\n }\n };\n\n const handleMenuKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n closeMenu();\n if (buttonRef.current) {\n buttonRef.current.focus();\n }\n return;\n }\n\n if (e.key === 'Tab' && allowTabOut) {\n e.preventDefault();\n handleTabNavigation();\n return;\n }\n\n // Handle arrow key navigation for focusable elements\n const focusableElements = getFocusableElements();\n handleArrowNavigation(e, focusableElements);\n };\n\n return { handleMenuKeyDown, getFocusableElements };\n};\n\n// Custom hook for hover and focus behavior with improved reliability\nconst useHoverAndFocus = (\n openOnHoverAndFocus: boolean,\n isDisabled: boolean,\n preventFocusOpen: boolean,\n menuId: string,\n buttonRef: React.RefObject<HTMLButtonElement | null>,\n containerRef: React.RefObject<HTMLDivElement | null>,\n menuRef: React.RefObject<HTMLDivElement | null>,\n isOpen: boolean,\n openMenu: (viaKeyboard?: boolean) => void,\n closeMenu: () => void,\n) => {\n useEffect(() => {\n if (!openOnHoverAndFocus || isDisabled) return;\n\n let hoverTimeout: NodeJS.Timeout | null = null;\n let isHovering = false;\n\n const clearHoverTimeout = () => {\n if (hoverTimeout) {\n clearTimeout(hoverTimeout);\n hoverTimeout = null;\n }\n };\n\n // Helper to handle hover check logic\n const handleHoverCheck = () => {\n const button = buttonRef.current;\n const menu = menuRef.current;\n\n if (!button) return;\n\n // Check if mouse is over button or menu\n const isOverButton = button.matches(':hover');\n const isOverMenu = menu?.matches(':hover') || false;\n\n if (!isOverButton && !isOverMenu && isHovering) {\n isHovering = false;\n hoverTimeout = setTimeout(handleCloseMenuIfActive, 300);\n }\n };\n\n // Helper to close menu if active\n const handleCloseMenuIfActive = () => {\n if (menuRegistry.getActiveMenu() === menuId) {\n closeMenu();\n }\n };\n\n const checkIfStillHovering = () => {\n // Use a small delay to check if we're still hovering\n setTimeout(handleHoverCheck, 50);\n };\n\n const handleMouseEnter = () => {\n clearHoverTimeout();\n if (!isHovering) {\n isHovering = true;\n if (!isOpen) {\n hoverTimeout = setTimeout(() => {\n openMenu(false);\n }, 300);\n }\n }\n };\n\n const handleMouseLeave = () => {\n checkIfStillHovering();\n };\n\n const handleMenuMouseEnter = () => {\n clearHoverTimeout();\n isHovering = true;\n };\n\n const handleMenuMouseLeave = () => {\n checkIfStillHovering();\n };\n\n const buttonElement = buttonRef.current;\n const menuElement = menuRef.current;\n\n if (buttonElement) {\n buttonElement.addEventListener('mouseenter', handleMouseEnter);\n buttonElement.addEventListener('mouseleave', handleMouseLeave);\n }\n\n // Set up menu listeners when menu is open\n if (isOpen && menuElement) {\n menuElement.addEventListener('mouseenter', handleMenuMouseEnter);\n menuElement.addEventListener('mouseleave', handleMenuMouseLeave);\n }\n\n return () => {\n if (buttonElement) {\n buttonElement.removeEventListener('mouseenter', handleMouseEnter);\n buttonElement.removeEventListener('mouseleave', handleMouseLeave);\n }\n if (menuElement) {\n menuElement.removeEventListener('mouseenter', handleMenuMouseEnter);\n menuElement.removeEventListener('mouseleave', handleMenuMouseLeave);\n }\n clearHoverTimeout();\n };\n }, [\n openOnHoverAndFocus,\n isDisabled,\n menuId,\n isOpen,\n openMenu,\n closeMenu,\n buttonRef,\n menuRef,\n ]);\n\n useEffect(() => {\n if (!openOnHoverAndFocus || isDisabled) return;\n\n const buttonElement = buttonRef.current;\n if (!buttonElement) return;\n\n let focusTimeout: NodeJS.Timeout | null = null;\n let isMenuOpening = false;\n\n const handleFocus = () => {\n if (preventFocusOpen) return;\n\n if (focusTimeout) {\n clearTimeout(focusTimeout);\n }\n\n isMenuOpening = true;\n\n focusTimeout = setTimeout(() => {\n const activeElement = document.activeElement;\n const wasFocusedByKeyboard =\n activeElement === buttonElement &&\n document.activeElement !== document.body;\n\n openMenu(wasFocusedByKeyboard);\n setTimeout(() => {\n isMenuOpening = false;\n }, 500);\n }, 300);\n };\n\n const handleBlur = (e: FocusEvent) => {\n if (isMenuOpening) return;\n\n if (focusTimeout) {\n clearTimeout(focusTimeout);\n }\n\n const containerElement = containerRef.current;\n const relatedTarget = e.relatedTarget as Node;\n\n if (containerElement && !containerElement.contains(relatedTarget)) {\n focusTimeout = setTimeout(() => {\n if (menuRegistry.getActiveMenu() === menuId) {\n closeMenu();\n }\n }, 200);\n }\n };\n\n buttonElement.addEventListener('focus', handleFocus);\n buttonElement.addEventListener('blur', handleBlur);\n\n return () => {\n buttonElement.removeEventListener('focus', handleFocus);\n buttonElement.removeEventListener('blur', handleBlur);\n if (focusTimeout) {\n clearTimeout(focusTimeout);\n }\n };\n }, [\n openOnHoverAndFocus,\n isDisabled,\n preventFocusOpen,\n menuId,\n openMenu,\n closeMenu,\n containerRef,\n buttonRef,\n ]);\n};\n\n// Simplified menu hover behavior for closeOnHover\nconst useMenuHover = (\n menuRef: React.RefObject<HTMLDivElement | null>,\n isOpen: boolean,\n closeOnHover: boolean,\n openOnHoverAndFocus: boolean,\n menuId: string,\n closeMenu: () => void,\n) => {\n useEffect(() => {\n // Skip if openOnHoverAndFocus is handling the hover behavior\n if (!isOpen || !closeOnHover || openOnHoverAndFocus) return;\n\n let hoverTimeout: NodeJS.Timeout | null = null;\n\n const clearHoverTimeout = () => {\n if (hoverTimeout) {\n clearTimeout(hoverTimeout);\n hoverTimeout = null;\n }\n };\n\n const handleMenuMouseLeave = () => {\n clearHoverTimeout();\n hoverTimeout = setTimeout(() => {\n closeMenu();\n }, 200);\n };\n\n const handleMenuMouseEnter = () => {\n clearHoverTimeout();\n };\n\n const menuElement = menuRef.current;\n if (menuElement) {\n menuElement.addEventListener('mouseenter', handleMenuMouseEnter);\n menuElement.addEventListener('mouseleave', handleMenuMouseLeave);\n }\n\n return () => {\n if (menuElement) {\n menuElement.removeEventListener('mouseenter', handleMenuMouseEnter);\n menuElement.removeEventListener('mouseleave', handleMenuMouseLeave);\n }\n clearHoverTimeout();\n };\n }, [isOpen, closeOnHover, openOnHoverAndFocus, menuId, closeMenu, menuRef]);\n};\n\n// Custom hook to handle menu closing behavior\nconst useMenuCloseHandling = (\n menuRef: React.RefObject<HTMLDivElement | null>,\n containerRef: React.RefObject<HTMLDivElement | null>,\n isOpen: boolean,\n menuId: string,\n closeMenu: () => void,\n) => {\n useEffect(() => {\n if (!isOpen) return;\n\n const handleDocumentClick = (e: Event) => {\n const target = e.target as HTMLElement;\n const container = containerRef.current;\n const menu = menuRef.current;\n\n // Check if click is on the trigger button (inside container but outside menu)\n const isOnTriggerButton =\n container?.contains(target) && !menu?.contains(target);\n\n // If click is inside the menu content, only close if element has data-menu-close=\"true\"\n if (menu && menu.contains(target)) {\n const shouldClose = target.closest('[data-menu-close=\"true\"]');\n if (shouldClose) {\n closeMenu();\n }\n return;\n }\n\n // If click is on the trigger button, let the button handle it (don't close here)\n if (isOnTriggerButton) {\n return;\n }\n\n // If we get here, it's a click outside both the menu and the trigger button\n closeMenu();\n };\n\n // Use capture phase to handle clicks before they bubble\n document.addEventListener('click', handleDocumentClick, true);\n\n return () => {\n document.removeEventListener('click', handleDocumentClick, true);\n };\n }, [isOpen, menuId, closeMenu, menuRef, containerRef]);\n};\n\n/**\n * Component to replace default Button with another button-like component/element\n */\nexport const Trigger = forwardRef<HTMLButtonElement, ButtonProps>(\n function Trigger({ children, ...triggerProps }, forwardedRef) {\n const element = React.Children.only(children) as React.ReactElement;\n const ref = useObjectRef(forwardedRef);\n\n const elementProps = { ...triggerProps, ...element.props };\n const { buttonProps } = useButton(elementProps, ref); // Get accessible button props for non-Alto components\n\n // Use React ARIA `buttonProps` if the trigger element is a non-Alto components\n const props =\n element.type !== Button && element.type !== IconButton\n ? buttonProps\n : elementProps;\n\n return React.cloneElement(element, {\n ...props,\n ref,\n });\n },\n);\n\nexport const Menu = ({\n label,\n 'aria-label': ariaLabel,\n isDisabled = false,\n placement = 'bottom start',\n buttonEmphasis = 'tertiary',\n buttonStyleVariant = 'neutral',\n buttonOpenVariant = buttonStyleVariant,\n alignToElementId,\n shouldFlip = true,\n openOnHoverAndFocus = false,\n allowTabOut = true,\n closeOnHover = true,\n children,\n iconStartProps,\n iconEndProps,\n onOpenChange,\n}: MenuProps) => {\n // Generate a unique ID for this menu instance\n const uniqueId = useId();\n const menuId = `menu-${uniqueId}`;\n\n // References\n const buttonRef = useRef<HTMLButtonElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n\n // State management\n const {\n isOpen,\n setIsOpen,\n preventFocusOpen,\n setPreventFocusOpen,\n openedViaKeyboard,\n setOpenedViaKeyboard,\n closeMenu,\n openMenu,\n toggleMenu,\n } = useMenuState(menuId, onOpenChange);\n\n // Navigation handling\n const { handleMenuKeyDown, getFocusableElements } = useMenuNavigation(\n menuRef,\n allowTabOut,\n closeMenu,\n buttonRef,\n );\n\n // Hover and focus handling\n useHoverAndFocus(\n openOnHoverAndFocus,\n isDisabled,\n preventFocusOpen,\n menuId,\n buttonRef,\n containerRef,\n menuRef,\n isOpen,\n openMenu,\n closeMenu,\n );\n\n // Menu hover handling (controlled by closeOnHover prop)\n useMenuHover(\n menuRef,\n isOpen,\n closeOnHover,\n openOnHoverAndFocus,\n menuId,\n closeMenu,\n );\n\n // Menu close handling\n useMenuCloseHandling(menuRef, containerRef, isOpen, menuId, closeMenu);\n\n // Determine which style variant to use based on state\n const currentStyleVariant = isOpen ? buttonOpenVariant : buttonStyleVariant;\n\n // Function to create a ref to the alignment target\n const getAlignmentTarget = () => {\n if (alignToElementId) {\n const targetElement = document.getElementById(alignToElementId);\n if (targetElement) {\n return { current: targetElement };\n }\n }\n return buttonRef;\n };\n\n // Handle keyboard events on the trigger button\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n e.preventDefault();\n closeMenu();\n setPreventFocusOpen(true);\n\n setTimeout(() => {\n setPreventFocusOpen(false);\n }, 300);\n } else if (e.key === 'ArrowDown' && !isOpen) {\n e.preventDefault();\n openMenu(true);\n }\n };\n\n // Listen for global menu close events\n useEffect(() => {\n const handleCloseAll = (e: CustomEvent) => {\n const { exceptMenuId } = e.detail || {};\n\n if (exceptMenuId && exceptMenuId === menuId) {\n return;\n }\n\n if (isOpen) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('menu:closeAll', handleCloseAll as EventListener);\n\n return () => {\n document.removeEventListener(\n 'menu:closeAll',\n handleCloseAll as EventListener,\n );\n };\n }, [menuId, isOpen, setIsOpen]);\n\n // Update state when global registry changes\n useEffect(() => {\n const isActive = menuRegistry.getActiveMenu() === menuId;\n if (isActive !== isOpen) {\n setIsOpen(isActive);\n }\n }, [menuId, isOpen, setIsOpen]);\n\n // Focus first menu item when opened via keyboard\n useEffect(() => {\n if (isOpen && openedViaKeyboard && menuRef.current) {\n const focusableElements = getFocusableElements();\n\n if (focusableElements.length > 0) {\n setTimeout(() => {\n focusableElements[0].focus();\n }, 50);\n }\n }\n }, [isOpen, openedViaKeyboard, getFocusableElements]);\n\n // Reset openedViaKeyboard when menu closes\n useEffect(() => {\n if (!isOpen) {\n setOpenedViaKeyboard(false);\n }\n }, [isOpen, setOpenedViaKeyboard]);\n\n // Popover state object\n const menuTriggerState = {\n isOpen,\n open: () => openMenu(),\n close: closeMenu,\n toggle: () => toggleMenu(),\n setOpen: (open: boolean) => {\n if (open) {\n openMenu();\n } else {\n closeMenu();\n }\n },\n };\n\n const handleButtonPress = () => {\n setPreventFocusOpen(false);\n\n // Set keyboard flag based on current focus\n const isKeyboardFocused = document.activeElement === buttonRef.current;\n setOpenedViaKeyboard(isKeyboardFocused);\n\n toggleMenu();\n };\n\n /** Custom trigger logic */\n const defaultTriggerProps = {\n ref: buttonRef,\n 'aria-haspopup': true,\n 'aria-expanded': isOpen,\n onPress: handleButtonPress,\n onKeyDown: handleKeyDown,\n };\n\n const menuChildren = React.Children.toArray(children);\n let menuItems = children;\n let trigger = (\n <Button\n emphasis={buttonEmphasis}\n styleVariant={currentStyleVariant}\n isDisabled={isDisabled}\n iconStartProps={iconStartProps}\n iconEndProps={iconEndProps}\n {...defaultTriggerProps}\n >\n {label}\n </Button>\n );\n\n // Get custom trigger from menu children\n const triggerIndex = menuChildren.findIndex(\n (child) => (child as React.ReactElement)?.type === Trigger,\n );\n const customTrigger = menuChildren[triggerIndex];\n\n if (React.isValidElement(customTrigger)) {\n trigger = React.cloneElement(customTrigger, defaultTriggerProps);\n // Remove custom trigger from children\n menuItems = menuChildren.filter((_, index) => index !== triggerIndex);\n }\n\n return (\n <div className={styles.menuContainer} ref={containerRef}>\n {trigger}\n {isOpen && (\n <Popover\n state={menuTriggerState}\n triggerRef={getAlignmentTarget()}\n hasArrow={false}\n placement={placement}\n shouldFlip={shouldFlip}\n isNonModal={true}\n allowTabOut={allowTabOut}\n autoFocus={openedViaKeyboard}\n >\n <div\n className={styles.menuContent}\n ref={menuRef}\n onKeyDown={handleMenuKeyDown}\n role=\"menu\"\n aria-label={ariaLabel || label}\n tabIndex={-1}\n >\n {menuItems}\n </div>\n </Popover>\n )}\n </div>\n );\n};\n\nMenu.Trigger = Trigger;\n\nexport default Menu;\n","import {useRef as $i6EpZ$useRef, useCallback as $i6EpZ$useCallback, useMemo as $i6EpZ$useMemo} from \"react\";\n\n/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $03e8ab2d84d7657a$export$4338b53315abf666(ref) {\n const objRef = (0, $i6EpZ$useRef)(null);\n const cleanupRef = (0, $i6EpZ$useRef)(undefined);\n const refEffect = (0, $i6EpZ$useCallback)((instance)=>{\n if (typeof ref === 'function') {\n const refCallback = ref;\n const refCleanup = refCallback(instance);\n return ()=>{\n if (typeof refCleanup === 'function') refCleanup();\n else refCallback(null);\n };\n } else if (ref) {\n ref.current = instance;\n return ()=>{\n ref.current = null;\n };\n }\n }, [\n ref\n ]);\n return (0, $i6EpZ$useMemo)(()=>({\n get current () {\n return objRef.current;\n },\n set current (value){\n objRef.current = value;\n if (cleanupRef.current) {\n cleanupRef.current();\n cleanupRef.current = undefined;\n }\n if (value != null) cleanupRef.current = refEffect(value);\n }\n }), [\n refEffect\n ]);\n}\n\n\nexport {$03e8ab2d84d7657a$export$4338b53315abf666 as useObjectRef};\n//# sourceMappingURL=useObjectRef.mjs.map\n","import {filterDOMProps as $8e9d2fae0ecb9001$export$457c3d6518dd4c6f} from \"../utils/filterDOMProps.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {useFocusable as $d1116acdf220c2da$export$4c014de7c8940b4c} from \"../interactions/useFocusable.mjs\";\nimport {usePress as $d27d541f9569d26d$export$45712eceda6fad21} from \"../interactions/usePress.mjs\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\nfunction $ac4318a9c075bb9f$export$ea18c227d4417cc3(props, ref) {\n let { elementType: elementType = 'button', isDisabled: isDisabled, onPress: onPress, onPressStart: onPressStart, onPressEnd: onPressEnd, onPressUp: onPressUp, onPressChange: onPressChange, preventFocusOnPress: preventFocusOnPress, allowFocusWhenDisabled: // @ts-ignore - undocumented\n allowFocusWhenDisabled, onClick: onClick, href: href, target: target, rel: rel, type: type = 'button' } = props;\n let additionalProps;\n if (elementType === 'button') additionalProps = {\n type: type,\n disabled: isDisabled,\n form: props.form,\n formAction: props.formAction,\n formEncType: props.formEncType,\n formMethod: props.formMethod,\n formNoValidate: props.formNoValidate,\n formTarget: props.formTarget,\n name: props.name,\n value: props.value\n };\n else additionalProps = {\n role: 'button',\n href: elementType === 'a' && !isDisabled ? href : undefined,\n target: elementType === 'a' ? target : undefined,\n type: elementType === 'input' ? type : undefined,\n disabled: elementType === 'input' ? isDisabled : undefined,\n 'aria-disabled': !isDisabled || elementType === 'input' ? undefined : isDisabled,\n rel: elementType === 'a' ? rel : undefined\n };\n let { pressProps: pressProps, isPressed: isPressed } = (0, $d27d541f9569d26d$export$45712eceda6fad21)({\n onPressStart: onPressStart,\n onPressEnd: onPressEnd,\n onPressChange: onPressChange,\n onPress: onPress,\n onPressUp: onPressUp,\n onClick: onClick,\n isDisabled: isDisabled,\n preventFocusOnPress: preventFocusOnPress,\n ref: ref\n });\n let { focusableProps: focusableProps } = (0, $d1116acdf220c2da$export$4c014de7c8940b4c)(props, ref);\n if (allowFocusWhenDisabled) focusableProps.tabIndex = isDisabled ? -1 : focusableProps.tabIndex;\n let buttonProps = (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(focusableProps, pressProps, (0, $8e9d2fae0ecb9001$export$457c3d6518dd4c6f)(props, {\n labelable: true\n }));\n return {\n isPressed: isPressed,\n buttonProps: (0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(additionalProps, buttonProps, {\n 'aria-haspopup': props['aria-haspopup'],\n 'aria-expanded': props['aria-expanded'],\n 'aria-controls': props['aria-controls'],\n 'aria-pressed': props['aria-pressed'],\n 'aria-current': props['aria-current'],\n 'aria-disabled': props['aria-disabled']\n })\n };\n}\n\n\nexport {$ac4318a9c075bb9f$export$ea18c227d4417cc3 as useButton};\n//# sourceMappingURL=useButton.mjs.map\n"],"names":["$cbf007e418543821$var$state","$cbf007e418543821$var$savedUserSelect","$cbf007e418543821$var$modifiedElementMap","WeakMap","$cbf007e418543821$export$16a4697467175487","target","$2add3ce32c6007eb$export$fedb369cb70207f1","documentObject","$d447af545b77c9f1$export$b204af158042fbac","documentElement","style","webkitUserSelect","HTMLElement","SVGElement","property","set","$cbf007e418543821$export$b0d6fa1ab32e3295","setTimeout","$081cb5757e08788e$export$24490316f764c430","has","targetOldUserSelect","get","getAttribute","removeAttribute","delete","$2b2d34ff061957fb$var$getWebpackNonce","doc","ownerWindow","defaultView","__webpack_nonce__","globalThis","$2b2d34ff061957fb$var$nonceCache","$24f9a20f226ad820$export$5165eccb35aaadb5","$kV9Vy$react","createContext","register","displayName","$d27d541f9569d26d$var$PressEvent","shouldStopPropagation","constructor","type","pointerType","originalEvent","state","this","currentTarget","rect","getBoundingClientRect","x","clientX","y","clientY","left","top","width","height","shiftKey","metaKey","ctrlKey","altKey","key","continuePropagation","$d27d541f9569d26d$var$LINK_CLICKED","$d27d541f9569d26d$var$STYLE_ID","$d27d541f9569d26d$var$PRESSABLE_ATTRIBUTE","$d27d541f9569d26d$export$45712eceda6fad21","props","onPress","onPressChange","onPressStart","onPressEnd","onPressUp","onClick","isDisabled","isPressed","isPressedProp","preventFocusOnPress","shouldCancelOnPointerExit","allowTextSelectionOnPress","ref","domRef","domProps","context","$fL2C6$useContext","contextProps","$bbaa08b3cd72f041$export$9d1611c77c2fe928","$b7115c395c64f7b5$export$4debdb1a3f0fa79e","$d27d541f9569d26d$var$usePressResponderContext","setPressed","$fL2C6$useState","$fL2C6$useRef","ignoreEmulatedMouseEvents","didFirePressStart","isTriggeringEvent","activePointerId","isOverTarget","disposables","addGlobalListener","removeAllGlobalListeners","$48a7d519b337145d$export$4eaf04e54aa8eed6","triggerPressStart","$fL2C6$useCallback","current","event","triggerPressEnd","wasPressed","triggerPressEndEvent","$fe16bffc7a557bf0$export$7f54fc3180508a52","triggerPressUp","triggerPressUpEvent","cancel","e","$d27d541f9569d26d$var$createEvent","dispose","cancelEvent","cancelOnPointerExit","triggerClick","triggerSyntheticClick","MouseEvent","$a92dc41f639950be$export$c2b7abe5d61ec696","$a92dc41f639950be$export$525bc4921d56d4a","pressProps","$fL2C6$useMemo","onKeyDown","$d27d541f9569d26d$var$isValidKeyboardEvent","nativeEvent","$23f2114a1b82827e$export$4282f70798064fe0","$23f2114a1b82827e$export$e58f029f0fbfdb29","$d27d541f9569d26d$var$shouldPreventDefaultKeyboard","preventDefault","repeat","originalTarget","pressUp","$a4e76a5424781910$export$e08e3b67e392101e","onKeyUp","stopPropagation","$2add3ce32c6007eb$export$9ac100e40613ea10","metaKeyEvents","Map","button","$caaf0dd3060ed57c$export$95185d699e05d4d7","isOpening","$b5c62b033c25b96d$export$60278871457622de","stopPressUp","stopPressEnd","stopPressStart","$d27d541f9569d26d$var$isHTMLAnchorLink","size","events","values","dispatchEvent","KeyboardEvent","PointerEvent","onPointerDown","$b5c62b033c25b96d$export$29bf1b5f2c56cf63","pointerId","hasPointerCapture","releasePointerCapture","onPointerUp","onPointerCancel","onMouseDown","$a92dc41f639950be$export$cabe61c495ee3649","push","onPointerEnter","onPointerLeave","clicked","timeout","$1969ac565cfec8d0$export$de79e2c695e052f3","click","clearTimeout","onDragStart","process","env","NODE_ENV","$fL2C6$flushSync","onMouseUp","onMouseEnter","onMouseLeave","onTouchStart","touch","targetTouches","length","$d27d541f9569d26d$var$getTouchFromEvent","identifier","$d27d541f9569d26d$var$createTouchEvent","$d447af545b77c9f1$export$f21a1ffae260145a","onScroll","onTouchMove","$d27d541f9569d26d$var$getTouchById","$d27d541f9569d26d$var$isOverTarget","onTouchEnd","onTouchCancel","$fL2C6$useEffect","ownerDocument","head","getElementById","createElement","id","nonce","d","document","meta","querySelector","HTMLMetaElement","content","$2b2d34ff061957fb$export$2b85b721e524d74b","textContent","trim","prepend","tagName","hasAttribute","code","element","role","HTMLInputElement","$d27d541f9569d26d$var$isValidInputKey","HTMLTextAreaElement","isContentEditable","changedTouches","i","point","pointRect","offsetX","offsetY","radiusX","radiusY","right","bottom","$d27d541f9569d26d$var$getPointClientRect","b","a","HTMLButtonElement","$d27d541f9569d26d$var$shouldPreventDefaultUp","$d27d541f9569d26d$var$nonTextInputTypes","Set","menuRegistry","activeMenuId","setActiveMenu","getActiveMenu","useMenuNavigation","menuRef","allowTabOut","closeMenu","buttonRef","handleTabNavigation","triggerElement","nextElement","startElement","focusableElements","Array","from","querySelectorAll","startIndex","indexOf","findNextFocusableElement","focus","getFocusableElements","handleMenuKeyDown","focusedElement","activeElement","currentIndex","handleArrowNavigation","Trigger","forwardRef","children","triggerProps","forwardedRef","React","Children","only","objRef","$i6EpZ$useRef","cleanupRef","refEffect","$i6EpZ$useCallback","instance","refCallback","refCleanup","$i6EpZ$useMemo","value","useObjectRef","elementProps","buttonProps","additionalProps","elementType","allowFocusWhenDisabled","href","rel","disabled","form","formAction","formEncType","formMethod","formNoValidate","formTarget","name","focusableProps","$d1116acdf220c2da$export$4c014de7c8940b4c","tabIndex","$8e9d2fae0ecb9001$export$457c3d6518dd4c6f","labelable","useButton","Button","IconButton","cloneElement","Menu","label","ariaLabel","placement","buttonEmphasis","buttonStyleVariant","buttonOpenVariant","alignToElementId","shouldFlip","openOnHoverAndFocus","closeOnHover","iconStartProps","iconEndProps","onOpenChange","menuId","useId","useRef","containerRef","isOpen","setIsOpen","preventFocusOpen","setPreventFocusOpen","openedViaKeyboard","setOpenedViaKeyboard","openMenu","toggleMenu","isMounted","useState","viaKeyboard","CustomEvent","detail","exceptMenuId","useEffect","isKeyboardFocused","useMenuState","hoverTimeout","isHovering","clearHoverTimeout","handleHoverCheck","menu","isOverButton","matches","isOverMenu","handleCloseMenuIfActive","checkIfStillHovering","handleMouseEnter","handleMouseLeave","handleMenuMouseEnter","handleMenuMouseLeave","buttonElement","menuElement","addEventListener","removeEventListener","focusTimeout","isMenuOpening","handleFocus","wasFocusedByKeyboard","body","handleBlur","containerElement","relatedTarget","contains","useHoverAndFocus","useMenuHover","handleDocumentClick","container","isOnTriggerButton","closest","useMenuCloseHandling","currentStyleVariant","handleCloseAll","isActive","menuTriggerState","open","close","toggle","setOpen","defaultTriggerProps","menuChildren","toArray","menuItems","trigger","jsx","emphasis","styleVariant","triggerIndex","findIndex","child","customTrigger","isValidElement","filter","_","index","className","styles","Popover","triggerRef","targetElement","getAlignmentTarget","hasArrow","isNonModal","autoFocus"],"mappings":"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","x_google_ignoreList":[0,1,2,3,5,6]}
|