@wordpress/components
Version:
UI components for WordPress.
8 lines (7 loc) • 6.57 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../src/dropdown/index.tsx"],
"sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n/**\n * WordPress dependencies\n */\nimport { useRef, useState } from '@wordpress/element';\nimport { useMergeRefs } from '@wordpress/compose';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport { contextConnect, useContextSystem } from '../context';\nimport { useControlledValue } from '../utils/hooks';\nimport Popover from '../popover';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst UnconnectedDropdown = (props, forwardedRef) => {\n const {\n renderContent,\n renderToggle,\n className,\n contentClassName,\n expandOnMobile,\n headerTitle,\n focusOnMount,\n popoverProps,\n onClose,\n onToggle,\n style,\n open,\n defaultOpen,\n // Deprecated props\n position,\n // From context system\n variant\n } = useContextSystem(props, 'Dropdown');\n if (position !== undefined) {\n deprecated('`position` prop in wp.components.Dropdown', {\n since: '6.2',\n alternative: '`popoverProps.placement` prop',\n hint: 'Note that the `position` prop will override any values passed through the `popoverProps.placement` prop.'\n });\n }\n\n // Use internal state instead of a ref to make sure that the component\n // re-renders when the popover's anchor updates.\n const [fallbackPopoverAnchor, setFallbackPopoverAnchor] = useState(null);\n const containerRef = useRef(null);\n const [isOpen, setIsOpen] = useControlledValue({\n defaultValue: defaultOpen,\n value: open,\n onChange: onToggle\n });\n\n /**\n * Closes the popover when focus leaves it unless the toggle was pressed or\n * focus has moved to a separate dialog. The former is to let the toggle\n * handle closing the popover and the latter is to preserve presence in\n * case a dialog has opened, allowing focus to return when it's dismissed.\n */\n function closeIfFocusOutside() {\n if (!containerRef.current) {\n return;\n }\n const {\n ownerDocument\n } = containerRef.current;\n const dialog = ownerDocument?.activeElement?.closest('[role=\"dialog\"]');\n if (!containerRef.current.contains(ownerDocument.activeElement) && (!dialog || dialog.contains(containerRef.current))) {\n close();\n }\n }\n function close() {\n onClose?.();\n setIsOpen(false);\n }\n const args = {\n isOpen: !!isOpen,\n onToggle: () => setIsOpen(!isOpen),\n onClose: close\n };\n const popoverPropsHaveAnchor = !!popoverProps?.anchor ||\n // Note: `anchorRef`, `getAnchorRect` and `anchorRect` are deprecated and\n // be removed from `Popover` from WordPress 6.3\n !!popoverProps?.anchorRef || !!popoverProps?.getAnchorRect || !!popoverProps?.anchorRect;\n return /*#__PURE__*/_jsxs(\"div\", {\n className: className,\n ref: useMergeRefs([containerRef, forwardedRef, setFallbackPopoverAnchor])\n // Some UAs focus the closest focusable parent when the toggle is\n // clicked. Making this div focusable ensures such UAs will focus\n // it and `closeIfFocusOutside` can tell if the toggle was clicked.\n ,\n tabIndex: -1,\n style: style,\n children: [renderToggle(args), isOpen && /*#__PURE__*/_jsx(Popover, {\n position: position,\n onClose: close,\n onFocusOutside: closeIfFocusOutside,\n expandOnMobile: expandOnMobile,\n headerTitle: headerTitle,\n focusOnMount: focusOnMount\n // This value is used to ensure that the dropdowns\n // align with the editor header by default.\n ,\n offset: 13,\n anchor: !popoverPropsHaveAnchor ? fallbackPopoverAnchor : undefined,\n variant: variant,\n ...popoverProps,\n className: clsx('components-dropdown__content', popoverProps?.className, contentClassName),\n children: renderContent(args)\n })]\n });\n};\n\n/**\n * Renders a button that opens a floating content modal when clicked.\n *\n * ```jsx\n * import { Button, Dropdown } from '@wordpress/components';\n *\n * const MyDropdown = () => (\n * <Dropdown\n * className=\"my-container-class-name\"\n * contentClassName=\"my-dropdown-content-classname\"\n * popoverProps={ { placement: 'bottom-start' } }\n * renderToggle={ ( { isOpen, onToggle } ) => (\n * <Button\n * variant=\"primary\"\n * onClick={ onToggle }\n * aria-expanded={ isOpen }\n * >\n * Toggle Dropdown!\n * </Button>\n * ) }\n * renderContent={ () => <div>This is the content of the dropdown.</div> }\n * />\n * );\n * ```\n */\nexport const Dropdown = contextConnect(UnconnectedDropdown, 'Dropdown');\nexport default Dropdown;"],
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kBAAiB;AAIjB,qBAAiC;AACjC,qBAA6B;AAC7B,wBAAuB;AAKvB,qBAAiD;AACjD,mBAAmC;AACnC,qBAAoB;AACpB,yBAA2C;AAC3C,IAAM,sBAAsB,CAAC,OAAO,iBAAiB;AACnD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA;AAAA,IAEA;AAAA,EACF,QAAI,iCAAiB,OAAO,UAAU;AACtC,MAAI,aAAa,QAAW;AAC1B,0BAAAA,SAAW,6CAA6C;AAAA,MACtD,OAAO;AAAA,MACP,aAAa;AAAA,MACb,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAIA,QAAM,CAAC,uBAAuB,wBAAwB,QAAI,yBAAS,IAAI;AACvE,QAAM,mBAAe,uBAAO,IAAI;AAChC,QAAM,CAAC,QAAQ,SAAS,QAAI,iCAAmB;AAAA,IAC7C,cAAc;AAAA,IACd,OAAO;AAAA,IACP,UAAU;AAAA,EACZ,CAAC;AAQD,WAAS,sBAAsB;AAC7B,QAAI,CAAC,aAAa,SAAS;AACzB;AAAA,IACF;AACA,UAAM;AAAA,MACJ;AAAA,IACF,IAAI,aAAa;AACjB,UAAM,SAAS,eAAe,eAAe,QAAQ,iBAAiB;AACtE,QAAI,CAAC,aAAa,QAAQ,SAAS,cAAc,aAAa,MAAM,CAAC,UAAU,OAAO,SAAS,aAAa,OAAO,IAAI;AACrH,YAAM;AAAA,IACR;AAAA,EACF;AACA,WAAS,QAAQ;AACf,cAAU;AACV,cAAU,KAAK;AAAA,EACjB;AACA,QAAM,OAAO;AAAA,IACX,QAAQ,CAAC,CAAC;AAAA,IACV,UAAU,MAAM,UAAU,CAAC,MAAM;AAAA,IACjC,SAAS;AAAA,EACX;AACA,QAAM,yBAAyB,CAAC,CAAC,cAAc;AAAA;AAAA,EAG/C,CAAC,CAAC,cAAc,aAAa,CAAC,CAAC,cAAc,iBAAiB,CAAC,CAAC,cAAc;AAC9E,SAAoB,uCAAAC,MAAM,OAAO;AAAA,IAC/B;AAAA,IACA,SAAK,6BAAa,CAAC,cAAc,cAAc,wBAAwB,CAAC;AAAA,IAKxE,UAAU;AAAA,IACV;AAAA,IACA,UAAU,CAAC,aAAa,IAAI,GAAG,UAAuB,uCAAAC,KAAK,eAAAC,SAAS;AAAA,MAClE;AAAA,MACA,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MAIA,QAAQ;AAAA,MACR,QAAQ,CAAC,yBAAyB,wBAAwB;AAAA,MAC1D;AAAA,MACA,GAAG;AAAA,MACH,eAAW,YAAAC,SAAK,gCAAgC,cAAc,WAAW,gBAAgB;AAAA,MACzF,UAAU,cAAc,IAAI;AAAA,IAC9B,CAAC,CAAC;AAAA,EACJ,CAAC;AACH;AA2BO,IAAM,eAAW,+BAAe,qBAAqB,UAAU;AACtE,IAAO,mBAAQ;",
"names": ["deprecated", "_jsxs", "_jsx", "Popover", "clsx"]
}