@alfalab/core-components-popover 8.0.5 → 8.1.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/Component.d.ts CHANGED
@@ -103,6 +103,11 @@ export type PopoverProps = {
103
103
  * @default 24
104
104
  */
105
105
  arrowToEdgeMinDistance?: number;
106
+ /**
107
+ * Свойство по которому устанавливается ширина от родительского элемента
108
+ * @default width
109
+ */
110
+ widthProp?: 'width' | 'minWidth';
106
111
  };
107
112
  export declare const Popover: React.ForwardRefExoticComponent<PopoverProps & React.RefAttributes<HTMLDivElement>>;
108
113
  export {};
package/Component.js CHANGED
@@ -53,11 +53,11 @@ function createGetArrowPadding(minDistanceToEdge) {
53
53
  };
54
54
  }
55
55
  var Popover = React.forwardRef(function (_a, ref) {
56
- var children = _a.children, getPortalContainer = _a.getPortalContainer, _b = _a.transition, transition = _b === void 0 ? DEFAULT_TRANSITION : _b, anchorElement = _a.anchorElement, useAnchorWidth = _a.useAnchorWidth, _c = _a.offset, offset = _c === void 0 ? DEFAULT_OFFSET : _c, _d = _a.withArrow, withArrow = _d === void 0 ? false : _d, _e = _a.withTransition, withTransition = _e === void 0 ? true : _e, _f = _a.position, position = _f === void 0 ? 'left' : _f, preventFlip = _a.preventFlip, popperClassName = _a.popperClassName, arrowClassName = _a.arrowClassName, className = _a.className, open = _a.open, dataTestId = _a.dataTestId, update = _a.update, _g = _a.transitionDuration, transitionDuration = _g === void 0 ? "".concat(transition.timeout, "ms") : _g, _h = _a.zIndex, zIndex = _h === void 0 ? coreComponentsStackContext.stackingOrder.POPOVER : _h, fallbackPlacements = _a.fallbackPlacements, _j = _a.preventOverflow, preventOverflow = _j === void 0 ? true : _j, _k = _a.availableHeight, availableHeight = _k === void 0 ? false : _k, scrollableContentClassName = _a.scrollableContentClassName, _l = _a.arrowToEdgeMinDistance, arrowToEdgeMinDistance = _l === void 0 ? 24 : _l;
57
- var _m = React.useState(anchorElement), referenceElement = _m[0], setReferenceElement = _m[1];
58
- var _o = React.useState(null), popperElement = _o[0], setPopperElement = _o[1];
59
- var _p = React.useState(null), arrowElement = _p[0], setArrowElement = _p[1];
60
- var _q = React.useState(function () { return ({}); }), maxSizeOptions = _q[0], setMaxSizeOptions = _q[1];
56
+ var children = _a.children, getPortalContainer = _a.getPortalContainer, _b = _a.transition, transition = _b === void 0 ? DEFAULT_TRANSITION : _b, anchorElement = _a.anchorElement, useAnchorWidth = _a.useAnchorWidth, _c = _a.offset, offset = _c === void 0 ? DEFAULT_OFFSET : _c, _d = _a.withArrow, withArrow = _d === void 0 ? false : _d, _e = _a.withTransition, withTransition = _e === void 0 ? true : _e, _f = _a.position, position = _f === void 0 ? 'left' : _f, preventFlip = _a.preventFlip, popperClassName = _a.popperClassName, arrowClassName = _a.arrowClassName, className = _a.className, open = _a.open, dataTestId = _a.dataTestId, update = _a.update, _g = _a.transitionDuration, transitionDuration = _g === void 0 ? "".concat(transition.timeout, "ms") : _g, _h = _a.zIndex, zIndex = _h === void 0 ? coreComponentsStackContext.stackingOrder.POPOVER : _h, fallbackPlacements = _a.fallbackPlacements, _j = _a.preventOverflow, preventOverflow = _j === void 0 ? true : _j, _k = _a.availableHeight, availableHeight = _k === void 0 ? false : _k, scrollableContentClassName = _a.scrollableContentClassName, _l = _a.arrowToEdgeMinDistance, arrowToEdgeMinDistance = _l === void 0 ? 24 : _l, _m = _a.widthProp, widthProp = _m === void 0 ? 'width' : _m;
57
+ var _o = React.useState(anchorElement), referenceElement = _o[0], setReferenceElement = _o[1];
58
+ var _p = React.useState(null), popperElement = _p[0], setPopperElement = _p[1];
59
+ var _q = React.useState(null), arrowElement = _q[0], setArrowElement = _q[1];
60
+ var _r = React.useState(function () { return ({}); }), maxSizeOptions = _r[0], setMaxSizeOptions = _r[1];
61
61
  var updatePopperRef = React.useRef();
62
62
  var popperRef = React.useRef(null);
63
63
  var innerRef = React.useRef(null);
@@ -96,10 +96,10 @@ var Popover = React.forwardRef(function (_a, ref) {
96
96
  arrowToEdgeMinDistance,
97
97
  maxSizeOptions,
98
98
  ]);
99
- var _r = reactPopper.usePopper(referenceElement, popperElement, {
99
+ var _s = reactPopper.usePopper(referenceElement, popperElement, {
100
100
  placement: position,
101
101
  modifiers: popperModifiers,
102
- }), popperStyles = _r.styles, attributes = _r.attributes, updatePopper = _r.update, state = _r.state;
102
+ }), popperStyles = _s.styles, attributes = _s.attributes, updatePopper = _s.update, state = _s.state;
103
103
  if (updatePopper) {
104
104
  updatePopperRef.current = updatePopper;
105
105
  }
@@ -141,15 +141,15 @@ var Popover = React.forwardRef(function (_a, ref) {
141
141
  return function () { return ({}); };
142
142
  }, [anchorElement, useAnchorWidth]);
143
143
  var renderContent = function (computedZIndex) {
144
- var _a;
145
- var _b, _c;
146
- return (React__default.default.createElement("div", tslib.__assign({ ref: mergeRefs__default.default([ref, popperRef, setPopperElement]), style: tslib.__assign(tslib.__assign({ zIndex: computedZIndex, width: useAnchorWidth ? referenceElement === null || referenceElement === void 0 ? void 0 : referenceElement.offsetWidth : undefined }, popperStyles.popper), (((_b = popperStyles.popper) === null || _b === void 0 ? void 0 : _b.transform) ? null : { visibility: 'hidden' })), "data-test-id": dataTestId, className: cn__default.default(index_module.component, className) }, attributes.popper),
144
+ var _a, _b;
145
+ var _c, _d;
146
+ return (React__default.default.createElement("div", tslib.__assign({ ref: mergeRefs__default.default([ref, popperRef, setPopperElement]), style: tslib.__assign(tslib.__assign((_a = { zIndex: computedZIndex }, _a[widthProp] = useAnchorWidth ? referenceElement === null || referenceElement === void 0 ? void 0 : referenceElement.offsetWidth : undefined, _a), popperStyles.popper), (((_c = popperStyles.popper) === null || _c === void 0 ? void 0 : _c.transform) ? null : { visibility: 'hidden' })), "data-test-id": dataTestId, className: cn__default.default(index_module.component, className) }, attributes.popper),
147
147
  React__default.default.createElement("div", { className: cn__default.default(index_module.inner, popperClassName), ref: innerRef },
148
- React__default.default.createElement("div", { className: cn__default.default(scrollableContentClassName, (_a = {},
149
- _a[index_module.scrollableContent] = coreComponentsShared.isFn(availableHeight) || availableHeight,
150
- _a)), style: {
148
+ React__default.default.createElement("div", { className: cn__default.default(scrollableContentClassName, (_b = {},
149
+ _b[index_module.scrollableContent] = coreComponentsShared.isFn(availableHeight) || availableHeight,
150
+ _b)), style: {
151
151
  maxHeight: coreComponentsShared.isFn(availableHeight) || availableHeight
152
- ? (_c = state === null || state === void 0 ? void 0 : state.modifiersData.maxSize) === null || _c === void 0 ? void 0 : _c.height
152
+ ? (_d = state === null || state === void 0 ? void 0 : state.modifiersData.maxSize) === null || _d === void 0 ? void 0 : _d.height
153
153
  : undefined,
154
154
  } }, children),
155
155
  withArrow && (React__default.default.createElement("div", { ref: setArrowElement, style: popperStyles.arrow, className: cn__default.default(index_module.arrow, arrowClassName) })))));
package/Component.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["src/Component.tsx"],"sourcesContent":["import React, {\n type CSSProperties,\n forwardRef,\n type MutableRefObject,\n type ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { usePopper } from 'react-popper';\nimport { CSSTransition } from 'react-transition-group';\nimport { type CSSTransitionProps } from 'react-transition-group/CSSTransition';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport {\n type BasePlacement,\n type Modifier,\n type Obj,\n type VariationPlacement,\n} from '@popperjs/core';\nimport cn from 'classnames';\nimport maxSize from 'popper-max-size-modifier';\n\nimport { Portal } from '@alfalab/core-components-portal';\nimport { isFn } from '@alfalab/core-components-shared';\nimport { Stack } from '@alfalab/core-components-stack';\nimport { stackingOrder } from '@alfalab/core-components-stack-context';\nimport { useLayoutEffect_SAFE_FOR_SSR } from '@alfalab/hooks';\n\nimport styles from './index.module.css';\n\ntype RefElement = HTMLElement | null;\n\ntype ModifierOptions<T> = T extends Modifier<unknown, infer V> ? V : never;\n\nexport type Position = BasePlacement | VariationPlacement;\n\ntype PopperModifier = {\n name: string;\n options: Obj;\n};\n\nexport type PopoverProps = {\n /**\n * Управление состоянием поповера (открыт/закрыт)\n */\n open: boolean;\n\n /**\n * Элемент, относительного которого появляется поповер\n */\n anchorElement: RefElement;\n\n /**\n * Использовать ширину родительского элемента\n */\n useAnchorWidth?: boolean;\n\n /**\n * Позиционирование поповера\n */\n position?: Position;\n\n /**\n * Запрещает поповеру менять свою позицию.\n * Например, если места снизу недостаточно, то он все равно будет показан снизу\n */\n preventFlip?: boolean;\n\n /**\n * Запрещает поповеру менять свою позицию, если он не влезает в видимую область.\n */\n preventOverflow?: boolean;\n\n /**\n * Позволяет поповеру подствраивать свою высоту под границы экрана/элемента, если из-за величины контента он выходит за рамки области экрана/элемента\n */\n availableHeight?: boolean | (() => Element | null | undefined);\n\n /**\n * Если `true`, будет отрисована стрелочка\n */\n withArrow?: boolean;\n\n /**\n * Смещение поповера.\n * Если позиционирование top, bottom, то [x, y].\n * Если позиционирование left, right то [y, x].\n */\n offset?: [number, number];\n\n /**\n * Дополнительный класс для поповера\n */\n popperClassName?: string;\n\n /**\n * Дополнительный класс для стрелочки\n */\n arrowClassName?: string;\n\n /**\n * Функция, возвращающая контейнер, в который будет рендериться поповер\n */\n getPortalContainer?: () => HTMLElement;\n\n /**\n * CSSTransitionProps, прокидываются в компонент CSSTransitionProps.\n */\n transition?: CSSTransitionProps;\n\n /**\n * Выставляет кастомное свойство transition-duration\n */\n transitionDuration?: CSSProperties['transitionDuration'];\n\n /**\n * Рендерит компонент, обернутый в Transition\n */\n withTransition?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Хранит функцию, с помощью которой можно обновить положение компонента\n */\n update?: MutableRefObject<(() => void) | undefined>;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * z-index компонента\n */\n zIndex?: number;\n\n /**\n * Если поповер не помещается в переданной позиции (position), он попробует открыться в другой позиции,\n * по очереди для каждой позиции из этого списка.\n * Если не передавать, то поповер открывается в противоположном направлении от переданного position.\n */\n fallbackPlacements?: Position[];\n\n /**\n * Контент\n */\n children?: ReactNode;\n\n /**\n * Класс для скролл контейнера\n */\n scrollableContentClassName?: string;\n\n /**\n * Минимальное расстояние стрелки до края поповера\n *\n * @default 24\n */\n arrowToEdgeMinDistance?: number;\n};\n\nconst DEFAULT_TRANSITION: PopoverProps['transition'] = {\n timeout: 150,\n};\n\nconst CSS_TRANSITION_CLASS_NAMES = {\n enter: styles.enter,\n enterActive: styles.enterActive,\n exit: styles.exit,\n exitActive: styles.exitActive,\n};\n\nconst DEFAULT_OFFSET = [0, 0];\n\nfunction createGetArrowPadding(minDistanceToEdge: number) {\n return function getArrowPadding({\n placement,\n }: {\n popper: { height: number; width: number };\n reference: { height: number; width: number };\n placement: Position;\n }) {\n if (placement === 'right-end' || placement === 'left-end') {\n return { top: minDistanceToEdge, right: 0, bottom: 0, left: 0 };\n }\n\n if (placement === 'top-start' || placement === 'bottom-start') {\n return { top: 0, right: minDistanceToEdge, bottom: 0, left: 0 };\n }\n\n if (placement === 'right-start' || placement === 'left-start') {\n return { top: 0, right: 0, bottom: minDistanceToEdge, left: 0 };\n }\n\n if (placement === 'top-end' || placement === 'bottom-end') {\n return { top: 0, right: 0, bottom: 0, left: minDistanceToEdge };\n }\n\n return 0;\n };\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(\n (\n {\n children,\n getPortalContainer,\n transition = DEFAULT_TRANSITION,\n anchorElement,\n useAnchorWidth,\n offset = DEFAULT_OFFSET,\n withArrow = false,\n withTransition = true,\n position = 'left',\n preventFlip,\n popperClassName,\n arrowClassName,\n className,\n open,\n dataTestId,\n update,\n transitionDuration = `${transition.timeout}ms`,\n zIndex = stackingOrder.POPOVER,\n fallbackPlacements,\n preventOverflow = true,\n availableHeight = false,\n scrollableContentClassName,\n arrowToEdgeMinDistance = 24,\n },\n ref,\n ) => {\n const [referenceElement, setReferenceElement] = useState<RefElement>(anchorElement);\n const [popperElement, setPopperElement] = useState<RefElement>(null);\n const [arrowElement, setArrowElement] = useState<RefElement>(null);\n const [maxSizeOptions, setMaxSizeOptions] = useState<\n Partial<ModifierOptions<typeof maxSize>>\n >(() => ({}));\n\n const updatePopperRef = useRef<() => void>();\n\n const popperRef = useRef<HTMLDivElement>(null);\n const innerRef = useRef<HTMLDivElement>(null);\n\n const popperModifiers = useMemo(() => {\n const modifiers: PopperModifier[] = [{ name: 'offset', options: { offset } }];\n\n if (withArrow) {\n modifiers.push({\n name: 'arrow',\n options: {\n element: arrowElement,\n padding: createGetArrowPadding(arrowToEdgeMinDistance),\n },\n });\n }\n\n if (preventFlip) {\n modifiers.push({ name: 'flip', options: { fallbackPlacements: [] } });\n }\n\n if (fallbackPlacements) {\n modifiers.push({ name: 'flip', options: { fallbackPlacements } });\n }\n\n if (preventOverflow) {\n modifiers.push({ name: 'preventOverflow', options: { mainAxis: false } });\n }\n\n if (isFn(availableHeight) || availableHeight) {\n modifiers.push({ ...maxSize, options: maxSizeOptions });\n }\n\n return modifiers;\n }, [\n offset,\n withArrow,\n preventFlip,\n fallbackPlacements,\n preventOverflow,\n availableHeight,\n arrowElement,\n arrowToEdgeMinDistance,\n maxSizeOptions,\n ]);\n\n const {\n styles: popperStyles,\n attributes,\n update: updatePopper,\n state,\n } = usePopper(referenceElement, popperElement, {\n placement: position,\n modifiers: popperModifiers,\n });\n\n if (updatePopper) {\n updatePopperRef.current = updatePopper;\n }\n\n useLayoutEffect_SAFE_FOR_SSR(() => {\n const nextBoundry = isFn(availableHeight)\n ? (availableHeight() ?? undefined)\n : undefined;\n\n if (!(maxSizeOptions.boundary === nextBoundry)) {\n setMaxSizeOptions({ boundary: nextBoundry });\n }\n });\n\n useLayoutEffect_SAFE_FOR_SSR(() => {\n setReferenceElement(anchorElement);\n }, [anchorElement]);\n\n useEffect(() => {\n if (updatePopper) {\n updatePopper();\n }\n }, [updatePopper, arrowElement, children]);\n\n useEffect(() => {\n if (update && updatePopper) {\n // eslint-disable-next-line no-param-reassign\n update.current = updatePopper;\n }\n });\n\n useEffect(() => {\n if (useAnchorWidth) {\n const updatePopoverWidth = () => updatePopperRef.current?.();\n const ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\n const observer = new ResizeObserver(updatePopoverWidth);\n\n if (anchorElement) {\n observer.observe(anchorElement);\n }\n\n return () => {\n observer.disconnect();\n };\n }\n\n return () => ({});\n }, [anchorElement, useAnchorWidth]);\n\n const renderContent = (computedZIndex: number) => (\n <div\n ref={mergeRefs([ref, popperRef, setPopperElement])}\n style={{\n zIndex: computedZIndex,\n width: useAnchorWidth ? referenceElement?.offsetWidth : undefined,\n ...popperStyles.popper,\n ...(popperStyles.popper?.transform ? null : { visibility: 'hidden' }),\n }}\n data-test-id={dataTestId}\n className={cn(styles.component, className)}\n {...attributes.popper}\n >\n <div className={cn(styles.inner, popperClassName)} ref={innerRef}>\n <div\n className={cn(scrollableContentClassName, {\n [styles.scrollableContent]: isFn(availableHeight) || availableHeight,\n })}\n style={{\n maxHeight:\n isFn(availableHeight) || availableHeight\n ? state?.modifiersData.maxSize?.height\n : undefined,\n }}\n >\n {children}\n </div>\n\n {withArrow && (\n <div\n ref={setArrowElement}\n style={popperStyles.arrow}\n className={cn(styles.arrow, arrowClassName)}\n />\n )}\n </div>\n </div>\n );\n\n return (\n <Stack value={zIndex}>\n {(computedZIndex) => (\n <Portal getPortalContainer={getPortalContainer}>\n {withTransition ? (\n <CSSTransition\n unmountOnExit={true}\n classNames={CSS_TRANSITION_CLASS_NAMES}\n nodeRef={popperRef}\n {...transition}\n in={open}\n onEntering={(node: HTMLElement, isAppearing: boolean) => {\n // Меняем transition-duration только в случае, если передано значение отличное от дефолтного.\n if (\n innerRef.current &&\n transitionDuration !== `${DEFAULT_TRANSITION.timeout}ms`\n ) {\n innerRef.current.style.setProperty(\n 'transition-duration',\n transitionDuration,\n );\n }\n transition?.onEntering?.(node, isAppearing);\n }}\n >\n {renderContent(computedZIndex)}\n </CSSTransition>\n ) : (\n open && renderContent(computedZIndex)\n )}\n </Portal>\n )}\n </Stack>\n );\n },\n);\n\nPopover.displayName = 'Popover';\n"],"names":["styles","forwardRef","stackingOrder","useState","useRef","useMemo","isFn","__assign","maxSize","usePopper","useLayoutEffect_SAFE_FOR_SSR","useEffect","ResizeObserverPolyfill","React","mergeRefs","cn","Stack","Portal","CSSTransition"],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["src/Component.tsx"],"sourcesContent":["import React, {\n type CSSProperties,\n forwardRef,\n type MutableRefObject,\n type ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { usePopper } from 'react-popper';\nimport { CSSTransition } from 'react-transition-group';\nimport { type CSSTransitionProps } from 'react-transition-group/CSSTransition';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport {\n type BasePlacement,\n type Modifier,\n type Obj,\n type VariationPlacement,\n} from '@popperjs/core';\nimport cn from 'classnames';\nimport maxSize from 'popper-max-size-modifier';\n\nimport { Portal } from '@alfalab/core-components-portal';\nimport { isFn } from '@alfalab/core-components-shared';\nimport { Stack } from '@alfalab/core-components-stack';\nimport { stackingOrder } from '@alfalab/core-components-stack-context';\nimport { useLayoutEffect_SAFE_FOR_SSR } from '@alfalab/hooks';\n\nimport styles from './index.module.css';\n\ntype RefElement = HTMLElement | null;\n\ntype ModifierOptions<T> = T extends Modifier<unknown, infer V> ? V : never;\n\nexport type Position = BasePlacement | VariationPlacement;\n\ntype PopperModifier = {\n name: string;\n options: Obj;\n};\n\nexport type PopoverProps = {\n /**\n * Управление состоянием поповера (открыт/закрыт)\n */\n open: boolean;\n\n /**\n * Элемент, относительного которого появляется поповер\n */\n anchorElement: RefElement;\n\n /**\n * Использовать ширину родительского элемента\n */\n useAnchorWidth?: boolean;\n\n /**\n * Позиционирование поповера\n */\n position?: Position;\n\n /**\n * Запрещает поповеру менять свою позицию.\n * Например, если места снизу недостаточно, то он все равно будет показан снизу\n */\n preventFlip?: boolean;\n\n /**\n * Запрещает поповеру менять свою позицию, если он не влезает в видимую область.\n */\n preventOverflow?: boolean;\n\n /**\n * Позволяет поповеру подствраивать свою высоту под границы экрана/элемента, если из-за величины контента он выходит за рамки области экрана/элемента\n */\n availableHeight?: boolean | (() => Element | null | undefined);\n\n /**\n * Если `true`, будет отрисована стрелочка\n */\n withArrow?: boolean;\n\n /**\n * Смещение поповера.\n * Если позиционирование top, bottom, то [x, y].\n * Если позиционирование left, right то [y, x].\n */\n offset?: [number, number];\n\n /**\n * Дополнительный класс для поповера\n */\n popperClassName?: string;\n\n /**\n * Дополнительный класс для стрелочки\n */\n arrowClassName?: string;\n\n /**\n * Функция, возвращающая контейнер, в который будет рендериться поповер\n */\n getPortalContainer?: () => HTMLElement;\n\n /**\n * CSSTransitionProps, прокидываются в компонент CSSTransitionProps.\n */\n transition?: CSSTransitionProps;\n\n /**\n * Выставляет кастомное свойство transition-duration\n */\n transitionDuration?: CSSProperties['transitionDuration'];\n\n /**\n * Рендерит компонент, обернутый в Transition\n */\n withTransition?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Хранит функцию, с помощью которой можно обновить положение компонента\n */\n update?: MutableRefObject<(() => void) | undefined>;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * z-index компонента\n */\n zIndex?: number;\n\n /**\n * Если поповер не помещается в переданной позиции (position), он попробует открыться в другой позиции,\n * по очереди для каждой позиции из этого списка.\n * Если не передавать, то поповер открывается в противоположном направлении от переданного position.\n */\n fallbackPlacements?: Position[];\n\n /**\n * Контент\n */\n children?: ReactNode;\n\n /**\n * Класс для скролл контейнера\n */\n scrollableContentClassName?: string;\n\n /**\n * Минимальное расстояние стрелки до края поповера\n *\n * @default 24\n */\n arrowToEdgeMinDistance?: number;\n\n /**\n * Свойство по которому устанавливается ширина от родительского элемента\n * @default width\n */\n widthProp?: 'width' | 'minWidth';\n};\n\nconst DEFAULT_TRANSITION: PopoverProps['transition'] = {\n timeout: 150,\n};\n\nconst CSS_TRANSITION_CLASS_NAMES = {\n enter: styles.enter,\n enterActive: styles.enterActive,\n exit: styles.exit,\n exitActive: styles.exitActive,\n};\n\nconst DEFAULT_OFFSET = [0, 0];\n\nfunction createGetArrowPadding(minDistanceToEdge: number) {\n return function getArrowPadding({\n placement,\n }: {\n popper: { height: number; width: number };\n reference: { height: number; width: number };\n placement: Position;\n }) {\n if (placement === 'right-end' || placement === 'left-end') {\n return { top: minDistanceToEdge, right: 0, bottom: 0, left: 0 };\n }\n\n if (placement === 'top-start' || placement === 'bottom-start') {\n return { top: 0, right: minDistanceToEdge, bottom: 0, left: 0 };\n }\n\n if (placement === 'right-start' || placement === 'left-start') {\n return { top: 0, right: 0, bottom: minDistanceToEdge, left: 0 };\n }\n\n if (placement === 'top-end' || placement === 'bottom-end') {\n return { top: 0, right: 0, bottom: 0, left: minDistanceToEdge };\n }\n\n return 0;\n };\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(\n (\n {\n children,\n getPortalContainer,\n transition = DEFAULT_TRANSITION,\n anchorElement,\n useAnchorWidth,\n offset = DEFAULT_OFFSET,\n withArrow = false,\n withTransition = true,\n position = 'left',\n preventFlip,\n popperClassName,\n arrowClassName,\n className,\n open,\n dataTestId,\n update,\n transitionDuration = `${transition.timeout}ms`,\n zIndex = stackingOrder.POPOVER,\n fallbackPlacements,\n preventOverflow = true,\n availableHeight = false,\n scrollableContentClassName,\n arrowToEdgeMinDistance = 24,\n widthProp = 'width',\n },\n ref,\n ) => {\n const [referenceElement, setReferenceElement] = useState<RefElement>(anchorElement);\n const [popperElement, setPopperElement] = useState<RefElement>(null);\n const [arrowElement, setArrowElement] = useState<RefElement>(null);\n const [maxSizeOptions, setMaxSizeOptions] = useState<\n Partial<ModifierOptions<typeof maxSize>>\n >(() => ({}));\n\n const updatePopperRef = useRef<() => void>();\n\n const popperRef = useRef<HTMLDivElement>(null);\n const innerRef = useRef<HTMLDivElement>(null);\n\n const popperModifiers = useMemo(() => {\n const modifiers: PopperModifier[] = [{ name: 'offset', options: { offset } }];\n\n if (withArrow) {\n modifiers.push({\n name: 'arrow',\n options: {\n element: arrowElement,\n padding: createGetArrowPadding(arrowToEdgeMinDistance),\n },\n });\n }\n\n if (preventFlip) {\n modifiers.push({ name: 'flip', options: { fallbackPlacements: [] } });\n }\n\n if (fallbackPlacements) {\n modifiers.push({ name: 'flip', options: { fallbackPlacements } });\n }\n\n if (preventOverflow) {\n modifiers.push({ name: 'preventOverflow', options: { mainAxis: false } });\n }\n\n if (isFn(availableHeight) || availableHeight) {\n modifiers.push({ ...maxSize, options: maxSizeOptions });\n }\n\n return modifiers;\n }, [\n offset,\n withArrow,\n preventFlip,\n fallbackPlacements,\n preventOverflow,\n availableHeight,\n arrowElement,\n arrowToEdgeMinDistance,\n maxSizeOptions,\n ]);\n\n const {\n styles: popperStyles,\n attributes,\n update: updatePopper,\n state,\n } = usePopper(referenceElement, popperElement, {\n placement: position,\n modifiers: popperModifiers,\n });\n\n if (updatePopper) {\n updatePopperRef.current = updatePopper;\n }\n\n useLayoutEffect_SAFE_FOR_SSR(() => {\n const nextBoundry = isFn(availableHeight)\n ? (availableHeight() ?? undefined)\n : undefined;\n\n if (!(maxSizeOptions.boundary === nextBoundry)) {\n setMaxSizeOptions({ boundary: nextBoundry });\n }\n });\n\n useLayoutEffect_SAFE_FOR_SSR(() => {\n setReferenceElement(anchorElement);\n }, [anchorElement]);\n\n useEffect(() => {\n if (updatePopper) {\n updatePopper();\n }\n }, [updatePopper, arrowElement, children]);\n\n useEffect(() => {\n if (update && updatePopper) {\n // eslint-disable-next-line no-param-reassign\n update.current = updatePopper;\n }\n });\n\n useEffect(() => {\n if (useAnchorWidth) {\n const updatePopoverWidth = () => updatePopperRef.current?.();\n const ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\n const observer = new ResizeObserver(updatePopoverWidth);\n\n if (anchorElement) {\n observer.observe(anchorElement);\n }\n\n return () => {\n observer.disconnect();\n };\n }\n\n return () => ({});\n }, [anchorElement, useAnchorWidth]);\n\n const renderContent = (computedZIndex: number) => (\n <div\n ref={mergeRefs([ref, popperRef, setPopperElement])}\n style={{\n zIndex: computedZIndex,\n [widthProp]: useAnchorWidth ? referenceElement?.offsetWidth : undefined,\n ...popperStyles.popper,\n ...(popperStyles.popper?.transform ? null : { visibility: 'hidden' }),\n }}\n data-test-id={dataTestId}\n className={cn(styles.component, className)}\n {...attributes.popper}\n >\n <div className={cn(styles.inner, popperClassName)} ref={innerRef}>\n <div\n className={cn(scrollableContentClassName, {\n [styles.scrollableContent]: isFn(availableHeight) || availableHeight,\n })}\n style={{\n maxHeight:\n isFn(availableHeight) || availableHeight\n ? state?.modifiersData.maxSize?.height\n : undefined,\n }}\n >\n {children}\n </div>\n\n {withArrow && (\n <div\n ref={setArrowElement}\n style={popperStyles.arrow}\n className={cn(styles.arrow, arrowClassName)}\n />\n )}\n </div>\n </div>\n );\n\n return (\n <Stack value={zIndex}>\n {(computedZIndex) => (\n <Portal getPortalContainer={getPortalContainer}>\n {withTransition ? (\n <CSSTransition\n unmountOnExit={true}\n classNames={CSS_TRANSITION_CLASS_NAMES}\n nodeRef={popperRef}\n {...transition}\n in={open}\n onEntering={(node: HTMLElement, isAppearing: boolean) => {\n // Меняем transition-duration только в случае, если передано значение отличное от дефолтного.\n if (\n innerRef.current &&\n transitionDuration !== `${DEFAULT_TRANSITION.timeout}ms`\n ) {\n innerRef.current.style.setProperty(\n 'transition-duration',\n transitionDuration,\n );\n }\n transition?.onEntering?.(node, isAppearing);\n }}\n >\n {renderContent(computedZIndex)}\n </CSSTransition>\n ) : (\n open && renderContent(computedZIndex)\n )}\n </Portal>\n )}\n </Stack>\n );\n },\n);\n\nPopover.displayName = 'Popover';\n"],"names":["styles","forwardRef","stackingOrder","useState","useRef","useMemo","isFn","__assign","maxSize","usePopper","useLayoutEffect_SAFE_FOR_SSR","useEffect","ResizeObserverPolyfill","React","mergeRefs","cn","Stack","Portal","CSSTransition"],"mappings":"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"}
@@ -103,6 +103,11 @@ export type PopoverProps = {
103
103
  * @default 24
104
104
  */
105
105
  arrowToEdgeMinDistance?: number;
106
+ /**
107
+ * Свойство по которому устанавливается ширина от родительского элемента
108
+ * @default width
109
+ */
110
+ widthProp?: 'width' | 'minWidth';
106
111
  };
107
112
  export declare const Popover: React.ForwardRefExoticComponent<PopoverProps & React.RefAttributes<HTMLDivElement>>;
108
113
  export {};
package/cssm/Component.js CHANGED
@@ -54,11 +54,11 @@ function createGetArrowPadding(minDistanceToEdge) {
54
54
  };
55
55
  }
56
56
  var Popover = React.forwardRef(function (_a, ref) {
57
- var children = _a.children, getPortalContainer = _a.getPortalContainer, _b = _a.transition, transition = _b === void 0 ? DEFAULT_TRANSITION : _b, anchorElement = _a.anchorElement, useAnchorWidth = _a.useAnchorWidth, _c = _a.offset, offset = _c === void 0 ? DEFAULT_OFFSET : _c, _d = _a.withArrow, withArrow = _d === void 0 ? false : _d, _e = _a.withTransition, withTransition = _e === void 0 ? true : _e, _f = _a.position, position = _f === void 0 ? 'left' : _f, preventFlip = _a.preventFlip, popperClassName = _a.popperClassName, arrowClassName = _a.arrowClassName, className = _a.className, open = _a.open, dataTestId = _a.dataTestId, update = _a.update, _g = _a.transitionDuration, transitionDuration = _g === void 0 ? "".concat(transition.timeout, "ms") : _g, _h = _a.zIndex, zIndex = _h === void 0 ? cssm.stackingOrder.POPOVER : _h, fallbackPlacements = _a.fallbackPlacements, _j = _a.preventOverflow, preventOverflow = _j === void 0 ? true : _j, _k = _a.availableHeight, availableHeight = _k === void 0 ? false : _k, scrollableContentClassName = _a.scrollableContentClassName, _l = _a.arrowToEdgeMinDistance, arrowToEdgeMinDistance = _l === void 0 ? 24 : _l;
58
- var _m = React.useState(anchorElement), referenceElement = _m[0], setReferenceElement = _m[1];
59
- var _o = React.useState(null), popperElement = _o[0], setPopperElement = _o[1];
60
- var _p = React.useState(null), arrowElement = _p[0], setArrowElement = _p[1];
61
- var _q = React.useState(function () { return ({}); }), maxSizeOptions = _q[0], setMaxSizeOptions = _q[1];
57
+ var children = _a.children, getPortalContainer = _a.getPortalContainer, _b = _a.transition, transition = _b === void 0 ? DEFAULT_TRANSITION : _b, anchorElement = _a.anchorElement, useAnchorWidth = _a.useAnchorWidth, _c = _a.offset, offset = _c === void 0 ? DEFAULT_OFFSET : _c, _d = _a.withArrow, withArrow = _d === void 0 ? false : _d, _e = _a.withTransition, withTransition = _e === void 0 ? true : _e, _f = _a.position, position = _f === void 0 ? 'left' : _f, preventFlip = _a.preventFlip, popperClassName = _a.popperClassName, arrowClassName = _a.arrowClassName, className = _a.className, open = _a.open, dataTestId = _a.dataTestId, update = _a.update, _g = _a.transitionDuration, transitionDuration = _g === void 0 ? "".concat(transition.timeout, "ms") : _g, _h = _a.zIndex, zIndex = _h === void 0 ? cssm.stackingOrder.POPOVER : _h, fallbackPlacements = _a.fallbackPlacements, _j = _a.preventOverflow, preventOverflow = _j === void 0 ? true : _j, _k = _a.availableHeight, availableHeight = _k === void 0 ? false : _k, scrollableContentClassName = _a.scrollableContentClassName, _l = _a.arrowToEdgeMinDistance, arrowToEdgeMinDistance = _l === void 0 ? 24 : _l, _m = _a.widthProp, widthProp = _m === void 0 ? 'width' : _m;
58
+ var _o = React.useState(anchorElement), referenceElement = _o[0], setReferenceElement = _o[1];
59
+ var _p = React.useState(null), popperElement = _p[0], setPopperElement = _p[1];
60
+ var _q = React.useState(null), arrowElement = _q[0], setArrowElement = _q[1];
61
+ var _r = React.useState(function () { return ({}); }), maxSizeOptions = _r[0], setMaxSizeOptions = _r[1];
62
62
  var updatePopperRef = React.useRef();
63
63
  var popperRef = React.useRef(null);
64
64
  var innerRef = React.useRef(null);
@@ -97,10 +97,10 @@ var Popover = React.forwardRef(function (_a, ref) {
97
97
  arrowToEdgeMinDistance,
98
98
  maxSizeOptions,
99
99
  ]);
100
- var _r = reactPopper.usePopper(referenceElement, popperElement, {
100
+ var _s = reactPopper.usePopper(referenceElement, popperElement, {
101
101
  placement: position,
102
102
  modifiers: popperModifiers,
103
- }), popperStyles = _r.styles, attributes = _r.attributes, updatePopper = _r.update, state = _r.state;
103
+ }), popperStyles = _s.styles, attributes = _s.attributes, updatePopper = _s.update, state = _s.state;
104
104
  if (updatePopper) {
105
105
  updatePopperRef.current = updatePopper;
106
106
  }
@@ -142,15 +142,15 @@ var Popover = React.forwardRef(function (_a, ref) {
142
142
  return function () { return ({}); };
143
143
  }, [anchorElement, useAnchorWidth]);
144
144
  var renderContent = function (computedZIndex) {
145
- var _a;
146
- var _b, _c;
147
- return (React__default.default.createElement("div", tslib.__assign({ ref: mergeRefs__default.default([ref, popperRef, setPopperElement]), style: tslib.__assign(tslib.__assign({ zIndex: computedZIndex, width: useAnchorWidth ? referenceElement === null || referenceElement === void 0 ? void 0 : referenceElement.offsetWidth : undefined }, popperStyles.popper), (((_b = popperStyles.popper) === null || _b === void 0 ? void 0 : _b.transform) ? null : { visibility: 'hidden' })), "data-test-id": dataTestId, className: cn__default.default(styles__default.default.component, className) }, attributes.popper),
145
+ var _a, _b;
146
+ var _c, _d;
147
+ return (React__default.default.createElement("div", tslib.__assign({ ref: mergeRefs__default.default([ref, popperRef, setPopperElement]), style: tslib.__assign(tslib.__assign((_a = { zIndex: computedZIndex }, _a[widthProp] = useAnchorWidth ? referenceElement === null || referenceElement === void 0 ? void 0 : referenceElement.offsetWidth : undefined, _a), popperStyles.popper), (((_c = popperStyles.popper) === null || _c === void 0 ? void 0 : _c.transform) ? null : { visibility: 'hidden' })), "data-test-id": dataTestId, className: cn__default.default(styles__default.default.component, className) }, attributes.popper),
148
148
  React__default.default.createElement("div", { className: cn__default.default(styles__default.default.inner, popperClassName), ref: innerRef },
149
- React__default.default.createElement("div", { className: cn__default.default(scrollableContentClassName, (_a = {},
150
- _a[styles__default.default.scrollableContent] = cssm$1.isFn(availableHeight) || availableHeight,
151
- _a)), style: {
149
+ React__default.default.createElement("div", { className: cn__default.default(scrollableContentClassName, (_b = {},
150
+ _b[styles__default.default.scrollableContent] = cssm$1.isFn(availableHeight) || availableHeight,
151
+ _b)), style: {
152
152
  maxHeight: cssm$1.isFn(availableHeight) || availableHeight
153
- ? (_c = state === null || state === void 0 ? void 0 : state.modifiersData.maxSize) === null || _c === void 0 ? void 0 : _c.height
153
+ ? (_d = state === null || state === void 0 ? void 0 : state.modifiersData.maxSize) === null || _d === void 0 ? void 0 : _d.height
154
154
  : undefined,
155
155
  } }, children),
156
156
  withArrow && (React__default.default.createElement("div", { ref: setArrowElement, style: popperStyles.arrow, className: cn__default.default(styles__default.default.arrow, arrowClassName) })))));
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["import React, {\n type CSSProperties,\n forwardRef,\n type MutableRefObject,\n type ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { usePopper } from 'react-popper';\nimport { CSSTransition } from 'react-transition-group';\nimport { type CSSTransitionProps } from 'react-transition-group/CSSTransition';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport {\n type BasePlacement,\n type Modifier,\n type Obj,\n type VariationPlacement,\n} from '@popperjs/core';\nimport cn from 'classnames';\nimport maxSize from 'popper-max-size-modifier';\n\nimport { Portal } from '@alfalab/core-components-portal';\nimport { isFn } from '@alfalab/core-components-shared';\nimport { Stack } from '@alfalab/core-components-stack';\nimport { stackingOrder } from '@alfalab/core-components-stack-context';\nimport { useLayoutEffect_SAFE_FOR_SSR } from '@alfalab/hooks';\n\nimport styles from './index.module.css';\n\ntype RefElement = HTMLElement | null;\n\ntype ModifierOptions<T> = T extends Modifier<unknown, infer V> ? V : never;\n\nexport type Position = BasePlacement | VariationPlacement;\n\ntype PopperModifier = {\n name: string;\n options: Obj;\n};\n\nexport type PopoverProps = {\n /**\n * Управление состоянием поповера (открыт/закрыт)\n */\n open: boolean;\n\n /**\n * Элемент, относительного которого появляется поповер\n */\n anchorElement: RefElement;\n\n /**\n * Использовать ширину родительского элемента\n */\n useAnchorWidth?: boolean;\n\n /**\n * Позиционирование поповера\n */\n position?: Position;\n\n /**\n * Запрещает поповеру менять свою позицию.\n * Например, если места снизу недостаточно, то он все равно будет показан снизу\n */\n preventFlip?: boolean;\n\n /**\n * Запрещает поповеру менять свою позицию, если он не влезает в видимую область.\n */\n preventOverflow?: boolean;\n\n /**\n * Позволяет поповеру подствраивать свою высоту под границы экрана/элемента, если из-за величины контента он выходит за рамки области экрана/элемента\n */\n availableHeight?: boolean | (() => Element | null | undefined);\n\n /**\n * Если `true`, будет отрисована стрелочка\n */\n withArrow?: boolean;\n\n /**\n * Смещение поповера.\n * Если позиционирование top, bottom, то [x, y].\n * Если позиционирование left, right то [y, x].\n */\n offset?: [number, number];\n\n /**\n * Дополнительный класс для поповера\n */\n popperClassName?: string;\n\n /**\n * Дополнительный класс для стрелочки\n */\n arrowClassName?: string;\n\n /**\n * Функция, возвращающая контейнер, в который будет рендериться поповер\n */\n getPortalContainer?: () => HTMLElement;\n\n /**\n * CSSTransitionProps, прокидываются в компонент CSSTransitionProps.\n */\n transition?: CSSTransitionProps;\n\n /**\n * Выставляет кастомное свойство transition-duration\n */\n transitionDuration?: CSSProperties['transitionDuration'];\n\n /**\n * Рендерит компонент, обернутый в Transition\n */\n withTransition?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Хранит функцию, с помощью которой можно обновить положение компонента\n */\n update?: MutableRefObject<(() => void) | undefined>;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * z-index компонента\n */\n zIndex?: number;\n\n /**\n * Если поповер не помещается в переданной позиции (position), он попробует открыться в другой позиции,\n * по очереди для каждой позиции из этого списка.\n * Если не передавать, то поповер открывается в противоположном направлении от переданного position.\n */\n fallbackPlacements?: Position[];\n\n /**\n * Контент\n */\n children?: ReactNode;\n\n /**\n * Класс для скролл контейнера\n */\n scrollableContentClassName?: string;\n\n /**\n * Минимальное расстояние стрелки до края поповера\n *\n * @default 24\n */\n arrowToEdgeMinDistance?: number;\n};\n\nconst DEFAULT_TRANSITION: PopoverProps['transition'] = {\n timeout: 150,\n};\n\nconst CSS_TRANSITION_CLASS_NAMES = {\n enter: styles.enter,\n enterActive: styles.enterActive,\n exit: styles.exit,\n exitActive: styles.exitActive,\n};\n\nconst DEFAULT_OFFSET = [0, 0];\n\nfunction createGetArrowPadding(minDistanceToEdge: number) {\n return function getArrowPadding({\n placement,\n }: {\n popper: { height: number; width: number };\n reference: { height: number; width: number };\n placement: Position;\n }) {\n if (placement === 'right-end' || placement === 'left-end') {\n return { top: minDistanceToEdge, right: 0, bottom: 0, left: 0 };\n }\n\n if (placement === 'top-start' || placement === 'bottom-start') {\n return { top: 0, right: minDistanceToEdge, bottom: 0, left: 0 };\n }\n\n if (placement === 'right-start' || placement === 'left-start') {\n return { top: 0, right: 0, bottom: minDistanceToEdge, left: 0 };\n }\n\n if (placement === 'top-end' || placement === 'bottom-end') {\n return { top: 0, right: 0, bottom: 0, left: minDistanceToEdge };\n }\n\n return 0;\n };\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(\n (\n {\n children,\n getPortalContainer,\n transition = DEFAULT_TRANSITION,\n anchorElement,\n useAnchorWidth,\n offset = DEFAULT_OFFSET,\n withArrow = false,\n withTransition = true,\n position = 'left',\n preventFlip,\n popperClassName,\n arrowClassName,\n className,\n open,\n dataTestId,\n update,\n transitionDuration = `${transition.timeout}ms`,\n zIndex = stackingOrder.POPOVER,\n fallbackPlacements,\n preventOverflow = true,\n availableHeight = false,\n scrollableContentClassName,\n arrowToEdgeMinDistance = 24,\n },\n ref,\n ) => {\n const [referenceElement, setReferenceElement] = useState<RefElement>(anchorElement);\n const [popperElement, setPopperElement] = useState<RefElement>(null);\n const [arrowElement, setArrowElement] = useState<RefElement>(null);\n const [maxSizeOptions, setMaxSizeOptions] = useState<\n Partial<ModifierOptions<typeof maxSize>>\n >(() => ({}));\n\n const updatePopperRef = useRef<() => void>();\n\n const popperRef = useRef<HTMLDivElement>(null);\n const innerRef = useRef<HTMLDivElement>(null);\n\n const popperModifiers = useMemo(() => {\n const modifiers: PopperModifier[] = [{ name: 'offset', options: { offset } }];\n\n if (withArrow) {\n modifiers.push({\n name: 'arrow',\n options: {\n element: arrowElement,\n padding: createGetArrowPadding(arrowToEdgeMinDistance),\n },\n });\n }\n\n if (preventFlip) {\n modifiers.push({ name: 'flip', options: { fallbackPlacements: [] } });\n }\n\n if (fallbackPlacements) {\n modifiers.push({ name: 'flip', options: { fallbackPlacements } });\n }\n\n if (preventOverflow) {\n modifiers.push({ name: 'preventOverflow', options: { mainAxis: false } });\n }\n\n if (isFn(availableHeight) || availableHeight) {\n modifiers.push({ ...maxSize, options: maxSizeOptions });\n }\n\n return modifiers;\n }, [\n offset,\n withArrow,\n preventFlip,\n fallbackPlacements,\n preventOverflow,\n availableHeight,\n arrowElement,\n arrowToEdgeMinDistance,\n maxSizeOptions,\n ]);\n\n const {\n styles: popperStyles,\n attributes,\n update: updatePopper,\n state,\n } = usePopper(referenceElement, popperElement, {\n placement: position,\n modifiers: popperModifiers,\n });\n\n if (updatePopper) {\n updatePopperRef.current = updatePopper;\n }\n\n useLayoutEffect_SAFE_FOR_SSR(() => {\n const nextBoundry = isFn(availableHeight)\n ? (availableHeight() ?? undefined)\n : undefined;\n\n if (!(maxSizeOptions.boundary === nextBoundry)) {\n setMaxSizeOptions({ boundary: nextBoundry });\n }\n });\n\n useLayoutEffect_SAFE_FOR_SSR(() => {\n setReferenceElement(anchorElement);\n }, [anchorElement]);\n\n useEffect(() => {\n if (updatePopper) {\n updatePopper();\n }\n }, [updatePopper, arrowElement, children]);\n\n useEffect(() => {\n if (update && updatePopper) {\n // eslint-disable-next-line no-param-reassign\n update.current = updatePopper;\n }\n });\n\n useEffect(() => {\n if (useAnchorWidth) {\n const updatePopoverWidth = () => updatePopperRef.current?.();\n const ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\n const observer = new ResizeObserver(updatePopoverWidth);\n\n if (anchorElement) {\n observer.observe(anchorElement);\n }\n\n return () => {\n observer.disconnect();\n };\n }\n\n return () => ({});\n }, [anchorElement, useAnchorWidth]);\n\n const renderContent = (computedZIndex: number) => (\n <div\n ref={mergeRefs([ref, popperRef, setPopperElement])}\n style={{\n zIndex: computedZIndex,\n width: useAnchorWidth ? referenceElement?.offsetWidth : undefined,\n ...popperStyles.popper,\n ...(popperStyles.popper?.transform ? null : { visibility: 'hidden' }),\n }}\n data-test-id={dataTestId}\n className={cn(styles.component, className)}\n {...attributes.popper}\n >\n <div className={cn(styles.inner, popperClassName)} ref={innerRef}>\n <div\n className={cn(scrollableContentClassName, {\n [styles.scrollableContent]: isFn(availableHeight) || availableHeight,\n })}\n style={{\n maxHeight:\n isFn(availableHeight) || availableHeight\n ? state?.modifiersData.maxSize?.height\n : undefined,\n }}\n >\n {children}\n </div>\n\n {withArrow && (\n <div\n ref={setArrowElement}\n style={popperStyles.arrow}\n className={cn(styles.arrow, arrowClassName)}\n />\n )}\n </div>\n </div>\n );\n\n return (\n <Stack value={zIndex}>\n {(computedZIndex) => (\n <Portal getPortalContainer={getPortalContainer}>\n {withTransition ? (\n <CSSTransition\n unmountOnExit={true}\n classNames={CSS_TRANSITION_CLASS_NAMES}\n nodeRef={popperRef}\n {...transition}\n in={open}\n onEntering={(node: HTMLElement, isAppearing: boolean) => {\n // Меняем transition-duration только в случае, если передано значение отличное от дефолтного.\n if (\n innerRef.current &&\n transitionDuration !== `${DEFAULT_TRANSITION.timeout}ms`\n ) {\n innerRef.current.style.setProperty(\n 'transition-duration',\n transitionDuration,\n );\n }\n transition?.onEntering?.(node, isAppearing);\n }}\n >\n {renderContent(computedZIndex)}\n </CSSTransition>\n ) : (\n open && renderContent(computedZIndex)\n )}\n </Portal>\n )}\n </Stack>\n );\n },\n);\n\nPopover.displayName = 'Popover';\n"],"names":["styles","forwardRef","stackingOrder","useState","useRef","useMemo","isFn","__assign","maxSize","usePopper","useLayoutEffect_SAFE_FOR_SSR","useEffect","ResizeObserverPolyfill","React","mergeRefs","cn","Stack","Portal","CSSTransition"],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["import React, {\n type CSSProperties,\n forwardRef,\n type MutableRefObject,\n type ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { usePopper } from 'react-popper';\nimport { CSSTransition } from 'react-transition-group';\nimport { type CSSTransitionProps } from 'react-transition-group/CSSTransition';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport {\n type BasePlacement,\n type Modifier,\n type Obj,\n type VariationPlacement,\n} from '@popperjs/core';\nimport cn from 'classnames';\nimport maxSize from 'popper-max-size-modifier';\n\nimport { Portal } from '@alfalab/core-components-portal';\nimport { isFn } from '@alfalab/core-components-shared';\nimport { Stack } from '@alfalab/core-components-stack';\nimport { stackingOrder } from '@alfalab/core-components-stack-context';\nimport { useLayoutEffect_SAFE_FOR_SSR } from '@alfalab/hooks';\n\nimport styles from './index.module.css';\n\ntype RefElement = HTMLElement | null;\n\ntype ModifierOptions<T> = T extends Modifier<unknown, infer V> ? V : never;\n\nexport type Position = BasePlacement | VariationPlacement;\n\ntype PopperModifier = {\n name: string;\n options: Obj;\n};\n\nexport type PopoverProps = {\n /**\n * Управление состоянием поповера (открыт/закрыт)\n */\n open: boolean;\n\n /**\n * Элемент, относительного которого появляется поповер\n */\n anchorElement: RefElement;\n\n /**\n * Использовать ширину родительского элемента\n */\n useAnchorWidth?: boolean;\n\n /**\n * Позиционирование поповера\n */\n position?: Position;\n\n /**\n * Запрещает поповеру менять свою позицию.\n * Например, если места снизу недостаточно, то он все равно будет показан снизу\n */\n preventFlip?: boolean;\n\n /**\n * Запрещает поповеру менять свою позицию, если он не влезает в видимую область.\n */\n preventOverflow?: boolean;\n\n /**\n * Позволяет поповеру подствраивать свою высоту под границы экрана/элемента, если из-за величины контента он выходит за рамки области экрана/элемента\n */\n availableHeight?: boolean | (() => Element | null | undefined);\n\n /**\n * Если `true`, будет отрисована стрелочка\n */\n withArrow?: boolean;\n\n /**\n * Смещение поповера.\n * Если позиционирование top, bottom, то [x, y].\n * Если позиционирование left, right то [y, x].\n */\n offset?: [number, number];\n\n /**\n * Дополнительный класс для поповера\n */\n popperClassName?: string;\n\n /**\n * Дополнительный класс для стрелочки\n */\n arrowClassName?: string;\n\n /**\n * Функция, возвращающая контейнер, в который будет рендериться поповер\n */\n getPortalContainer?: () => HTMLElement;\n\n /**\n * CSSTransitionProps, прокидываются в компонент CSSTransitionProps.\n */\n transition?: CSSTransitionProps;\n\n /**\n * Выставляет кастомное свойство transition-duration\n */\n transitionDuration?: CSSProperties['transitionDuration'];\n\n /**\n * Рендерит компонент, обернутый в Transition\n */\n withTransition?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Хранит функцию, с помощью которой можно обновить положение компонента\n */\n update?: MutableRefObject<(() => void) | undefined>;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * z-index компонента\n */\n zIndex?: number;\n\n /**\n * Если поповер не помещается в переданной позиции (position), он попробует открыться в другой позиции,\n * по очереди для каждой позиции из этого списка.\n * Если не передавать, то поповер открывается в противоположном направлении от переданного position.\n */\n fallbackPlacements?: Position[];\n\n /**\n * Контент\n */\n children?: ReactNode;\n\n /**\n * Класс для скролл контейнера\n */\n scrollableContentClassName?: string;\n\n /**\n * Минимальное расстояние стрелки до края поповера\n *\n * @default 24\n */\n arrowToEdgeMinDistance?: number;\n\n /**\n * Свойство по которому устанавливается ширина от родительского элемента\n * @default width\n */\n widthProp?: 'width' | 'minWidth';\n};\n\nconst DEFAULT_TRANSITION: PopoverProps['transition'] = {\n timeout: 150,\n};\n\nconst CSS_TRANSITION_CLASS_NAMES = {\n enter: styles.enter,\n enterActive: styles.enterActive,\n exit: styles.exit,\n exitActive: styles.exitActive,\n};\n\nconst DEFAULT_OFFSET = [0, 0];\n\nfunction createGetArrowPadding(minDistanceToEdge: number) {\n return function getArrowPadding({\n placement,\n }: {\n popper: { height: number; width: number };\n reference: { height: number; width: number };\n placement: Position;\n }) {\n if (placement === 'right-end' || placement === 'left-end') {\n return { top: minDistanceToEdge, right: 0, bottom: 0, left: 0 };\n }\n\n if (placement === 'top-start' || placement === 'bottom-start') {\n return { top: 0, right: minDistanceToEdge, bottom: 0, left: 0 };\n }\n\n if (placement === 'right-start' || placement === 'left-start') {\n return { top: 0, right: 0, bottom: minDistanceToEdge, left: 0 };\n }\n\n if (placement === 'top-end' || placement === 'bottom-end') {\n return { top: 0, right: 0, bottom: 0, left: minDistanceToEdge };\n }\n\n return 0;\n };\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(\n (\n {\n children,\n getPortalContainer,\n transition = DEFAULT_TRANSITION,\n anchorElement,\n useAnchorWidth,\n offset = DEFAULT_OFFSET,\n withArrow = false,\n withTransition = true,\n position = 'left',\n preventFlip,\n popperClassName,\n arrowClassName,\n className,\n open,\n dataTestId,\n update,\n transitionDuration = `${transition.timeout}ms`,\n zIndex = stackingOrder.POPOVER,\n fallbackPlacements,\n preventOverflow = true,\n availableHeight = false,\n scrollableContentClassName,\n arrowToEdgeMinDistance = 24,\n widthProp = 'width',\n },\n ref,\n ) => {\n const [referenceElement, setReferenceElement] = useState<RefElement>(anchorElement);\n const [popperElement, setPopperElement] = useState<RefElement>(null);\n const [arrowElement, setArrowElement] = useState<RefElement>(null);\n const [maxSizeOptions, setMaxSizeOptions] = useState<\n Partial<ModifierOptions<typeof maxSize>>\n >(() => ({}));\n\n const updatePopperRef = useRef<() => void>();\n\n const popperRef = useRef<HTMLDivElement>(null);\n const innerRef = useRef<HTMLDivElement>(null);\n\n const popperModifiers = useMemo(() => {\n const modifiers: PopperModifier[] = [{ name: 'offset', options: { offset } }];\n\n if (withArrow) {\n modifiers.push({\n name: 'arrow',\n options: {\n element: arrowElement,\n padding: createGetArrowPadding(arrowToEdgeMinDistance),\n },\n });\n }\n\n if (preventFlip) {\n modifiers.push({ name: 'flip', options: { fallbackPlacements: [] } });\n }\n\n if (fallbackPlacements) {\n modifiers.push({ name: 'flip', options: { fallbackPlacements } });\n }\n\n if (preventOverflow) {\n modifiers.push({ name: 'preventOverflow', options: { mainAxis: false } });\n }\n\n if (isFn(availableHeight) || availableHeight) {\n modifiers.push({ ...maxSize, options: maxSizeOptions });\n }\n\n return modifiers;\n }, [\n offset,\n withArrow,\n preventFlip,\n fallbackPlacements,\n preventOverflow,\n availableHeight,\n arrowElement,\n arrowToEdgeMinDistance,\n maxSizeOptions,\n ]);\n\n const {\n styles: popperStyles,\n attributes,\n update: updatePopper,\n state,\n } = usePopper(referenceElement, popperElement, {\n placement: position,\n modifiers: popperModifiers,\n });\n\n if (updatePopper) {\n updatePopperRef.current = updatePopper;\n }\n\n useLayoutEffect_SAFE_FOR_SSR(() => {\n const nextBoundry = isFn(availableHeight)\n ? (availableHeight() ?? undefined)\n : undefined;\n\n if (!(maxSizeOptions.boundary === nextBoundry)) {\n setMaxSizeOptions({ boundary: nextBoundry });\n }\n });\n\n useLayoutEffect_SAFE_FOR_SSR(() => {\n setReferenceElement(anchorElement);\n }, [anchorElement]);\n\n useEffect(() => {\n if (updatePopper) {\n updatePopper();\n }\n }, [updatePopper, arrowElement, children]);\n\n useEffect(() => {\n if (update && updatePopper) {\n // eslint-disable-next-line no-param-reassign\n update.current = updatePopper;\n }\n });\n\n useEffect(() => {\n if (useAnchorWidth) {\n const updatePopoverWidth = () => updatePopperRef.current?.();\n const ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\n const observer = new ResizeObserver(updatePopoverWidth);\n\n if (anchorElement) {\n observer.observe(anchorElement);\n }\n\n return () => {\n observer.disconnect();\n };\n }\n\n return () => ({});\n }, [anchorElement, useAnchorWidth]);\n\n const renderContent = (computedZIndex: number) => (\n <div\n ref={mergeRefs([ref, popperRef, setPopperElement])}\n style={{\n zIndex: computedZIndex,\n [widthProp]: useAnchorWidth ? referenceElement?.offsetWidth : undefined,\n ...popperStyles.popper,\n ...(popperStyles.popper?.transform ? null : { visibility: 'hidden' }),\n }}\n data-test-id={dataTestId}\n className={cn(styles.component, className)}\n {...attributes.popper}\n >\n <div className={cn(styles.inner, popperClassName)} ref={innerRef}>\n <div\n className={cn(scrollableContentClassName, {\n [styles.scrollableContent]: isFn(availableHeight) || availableHeight,\n })}\n style={{\n maxHeight:\n isFn(availableHeight) || availableHeight\n ? state?.modifiersData.maxSize?.height\n : undefined,\n }}\n >\n {children}\n </div>\n\n {withArrow && (\n <div\n ref={setArrowElement}\n style={popperStyles.arrow}\n className={cn(styles.arrow, arrowClassName)}\n />\n )}\n </div>\n </div>\n );\n\n return (\n <Stack value={zIndex}>\n {(computedZIndex) => (\n <Portal getPortalContainer={getPortalContainer}>\n {withTransition ? (\n <CSSTransition\n unmountOnExit={true}\n classNames={CSS_TRANSITION_CLASS_NAMES}\n nodeRef={popperRef}\n {...transition}\n in={open}\n onEntering={(node: HTMLElement, isAppearing: boolean) => {\n // Меняем transition-duration только в случае, если передано значение отличное от дефолтного.\n if (\n innerRef.current &&\n transitionDuration !== `${DEFAULT_TRANSITION.timeout}ms`\n ) {\n innerRef.current.style.setProperty(\n 'transition-duration',\n transitionDuration,\n );\n }\n transition?.onEntering?.(node, isAppearing);\n }}\n >\n {renderContent(computedZIndex)}\n </CSSTransition>\n ) : (\n open && renderContent(computedZIndex)\n )}\n </Portal>\n )}\n </Stack>\n );\n },\n);\n\nPopover.displayName = 'Popover';\n"],"names":["styles","forwardRef","stackingOrder","useState","useRef","useMemo","isFn","__assign","maxSize","usePopper","useLayoutEffect_SAFE_FOR_SSR","useEffect","ResizeObserverPolyfill","React","mergeRefs","cn","Stack","Portal","CSSTransition"],"mappings":"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"}
@@ -103,6 +103,11 @@ export type PopoverProps = {
103
103
  * @default 24
104
104
  */
105
105
  arrowToEdgeMinDistance?: number;
106
+ /**
107
+ * Свойство по которому устанавливается ширина от родительского элемента
108
+ * @default width
109
+ */
110
+ widthProp?: 'width' | 'minWidth';
106
111
  };
107
112
  export declare const Popover: React.ForwardRefExoticComponent<PopoverProps & React.RefAttributes<HTMLDivElement>>;
108
113
  export {};
package/esm/Component.js CHANGED
@@ -42,11 +42,11 @@ function createGetArrowPadding(minDistanceToEdge) {
42
42
  };
43
43
  }
44
44
  var Popover = forwardRef(function (_a, ref) {
45
- var children = _a.children, getPortalContainer = _a.getPortalContainer, _b = _a.transition, transition = _b === void 0 ? DEFAULT_TRANSITION : _b, anchorElement = _a.anchorElement, useAnchorWidth = _a.useAnchorWidth, _c = _a.offset, offset = _c === void 0 ? DEFAULT_OFFSET : _c, _d = _a.withArrow, withArrow = _d === void 0 ? false : _d, _e = _a.withTransition, withTransition = _e === void 0 ? true : _e, _f = _a.position, position = _f === void 0 ? 'left' : _f, preventFlip = _a.preventFlip, popperClassName = _a.popperClassName, arrowClassName = _a.arrowClassName, className = _a.className, open = _a.open, dataTestId = _a.dataTestId, update = _a.update, _g = _a.transitionDuration, transitionDuration = _g === void 0 ? "".concat(transition.timeout, "ms") : _g, _h = _a.zIndex, zIndex = _h === void 0 ? stackingOrder.POPOVER : _h, fallbackPlacements = _a.fallbackPlacements, _j = _a.preventOverflow, preventOverflow = _j === void 0 ? true : _j, _k = _a.availableHeight, availableHeight = _k === void 0 ? false : _k, scrollableContentClassName = _a.scrollableContentClassName, _l = _a.arrowToEdgeMinDistance, arrowToEdgeMinDistance = _l === void 0 ? 24 : _l;
46
- var _m = useState(anchorElement), referenceElement = _m[0], setReferenceElement = _m[1];
47
- var _o = useState(null), popperElement = _o[0], setPopperElement = _o[1];
48
- var _p = useState(null), arrowElement = _p[0], setArrowElement = _p[1];
49
- var _q = useState(function () { return ({}); }), maxSizeOptions = _q[0], setMaxSizeOptions = _q[1];
45
+ var children = _a.children, getPortalContainer = _a.getPortalContainer, _b = _a.transition, transition = _b === void 0 ? DEFAULT_TRANSITION : _b, anchorElement = _a.anchorElement, useAnchorWidth = _a.useAnchorWidth, _c = _a.offset, offset = _c === void 0 ? DEFAULT_OFFSET : _c, _d = _a.withArrow, withArrow = _d === void 0 ? false : _d, _e = _a.withTransition, withTransition = _e === void 0 ? true : _e, _f = _a.position, position = _f === void 0 ? 'left' : _f, preventFlip = _a.preventFlip, popperClassName = _a.popperClassName, arrowClassName = _a.arrowClassName, className = _a.className, open = _a.open, dataTestId = _a.dataTestId, update = _a.update, _g = _a.transitionDuration, transitionDuration = _g === void 0 ? "".concat(transition.timeout, "ms") : _g, _h = _a.zIndex, zIndex = _h === void 0 ? stackingOrder.POPOVER : _h, fallbackPlacements = _a.fallbackPlacements, _j = _a.preventOverflow, preventOverflow = _j === void 0 ? true : _j, _k = _a.availableHeight, availableHeight = _k === void 0 ? false : _k, scrollableContentClassName = _a.scrollableContentClassName, _l = _a.arrowToEdgeMinDistance, arrowToEdgeMinDistance = _l === void 0 ? 24 : _l, _m = _a.widthProp, widthProp = _m === void 0 ? 'width' : _m;
46
+ var _o = useState(anchorElement), referenceElement = _o[0], setReferenceElement = _o[1];
47
+ var _p = useState(null), popperElement = _p[0], setPopperElement = _p[1];
48
+ var _q = useState(null), arrowElement = _q[0], setArrowElement = _q[1];
49
+ var _r = useState(function () { return ({}); }), maxSizeOptions = _r[0], setMaxSizeOptions = _r[1];
50
50
  var updatePopperRef = useRef();
51
51
  var popperRef = useRef(null);
52
52
  var innerRef = useRef(null);
@@ -85,10 +85,10 @@ var Popover = forwardRef(function (_a, ref) {
85
85
  arrowToEdgeMinDistance,
86
86
  maxSizeOptions,
87
87
  ]);
88
- var _r = usePopper(referenceElement, popperElement, {
88
+ var _s = usePopper(referenceElement, popperElement, {
89
89
  placement: position,
90
90
  modifiers: popperModifiers,
91
- }), popperStyles = _r.styles, attributes = _r.attributes, updatePopper = _r.update, state = _r.state;
91
+ }), popperStyles = _s.styles, attributes = _s.attributes, updatePopper = _s.update, state = _s.state;
92
92
  if (updatePopper) {
93
93
  updatePopperRef.current = updatePopper;
94
94
  }
@@ -130,15 +130,15 @@ var Popover = forwardRef(function (_a, ref) {
130
130
  return function () { return ({}); };
131
131
  }, [anchorElement, useAnchorWidth]);
132
132
  var renderContent = function (computedZIndex) {
133
- var _a;
134
- var _b, _c;
135
- return (React.createElement("div", __assign({ ref: mergeRefs([ref, popperRef, setPopperElement]), style: __assign(__assign({ zIndex: computedZIndex, width: useAnchorWidth ? referenceElement === null || referenceElement === void 0 ? void 0 : referenceElement.offsetWidth : undefined }, popperStyles.popper), (((_b = popperStyles.popper) === null || _b === void 0 ? void 0 : _b.transform) ? null : { visibility: 'hidden' })), "data-test-id": dataTestId, className: cn(styles.component, className) }, attributes.popper),
133
+ var _a, _b;
134
+ var _c, _d;
135
+ return (React.createElement("div", __assign({ ref: mergeRefs([ref, popperRef, setPopperElement]), style: __assign(__assign((_a = { zIndex: computedZIndex }, _a[widthProp] = useAnchorWidth ? referenceElement === null || referenceElement === void 0 ? void 0 : referenceElement.offsetWidth : undefined, _a), popperStyles.popper), (((_c = popperStyles.popper) === null || _c === void 0 ? void 0 : _c.transform) ? null : { visibility: 'hidden' })), "data-test-id": dataTestId, className: cn(styles.component, className) }, attributes.popper),
136
136
  React.createElement("div", { className: cn(styles.inner, popperClassName), ref: innerRef },
137
- React.createElement("div", { className: cn(scrollableContentClassName, (_a = {},
138
- _a[styles.scrollableContent] = isFn(availableHeight) || availableHeight,
139
- _a)), style: {
137
+ React.createElement("div", { className: cn(scrollableContentClassName, (_b = {},
138
+ _b[styles.scrollableContent] = isFn(availableHeight) || availableHeight,
139
+ _b)), style: {
140
140
  maxHeight: isFn(availableHeight) || availableHeight
141
- ? (_c = state === null || state === void 0 ? void 0 : state.modifiersData.maxSize) === null || _c === void 0 ? void 0 : _c.height
141
+ ? (_d = state === null || state === void 0 ? void 0 : state.modifiersData.maxSize) === null || _d === void 0 ? void 0 : _d.height
142
142
  : undefined,
143
143
  } }, children),
144
144
  withArrow && (React.createElement("div", { ref: setArrowElement, style: popperStyles.arrow, className: cn(styles.arrow, arrowClassName) })))));
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["import React, {\n type CSSProperties,\n forwardRef,\n type MutableRefObject,\n type ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { usePopper } from 'react-popper';\nimport { CSSTransition } from 'react-transition-group';\nimport { type CSSTransitionProps } from 'react-transition-group/CSSTransition';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport {\n type BasePlacement,\n type Modifier,\n type Obj,\n type VariationPlacement,\n} from '@popperjs/core';\nimport cn from 'classnames';\nimport maxSize from 'popper-max-size-modifier';\n\nimport { Portal } from '@alfalab/core-components-portal';\nimport { isFn } from '@alfalab/core-components-shared';\nimport { Stack } from '@alfalab/core-components-stack';\nimport { stackingOrder } from '@alfalab/core-components-stack-context';\nimport { useLayoutEffect_SAFE_FOR_SSR } from '@alfalab/hooks';\n\nimport styles from './index.module.css';\n\ntype RefElement = HTMLElement | null;\n\ntype ModifierOptions<T> = T extends Modifier<unknown, infer V> ? V : never;\n\nexport type Position = BasePlacement | VariationPlacement;\n\ntype PopperModifier = {\n name: string;\n options: Obj;\n};\n\nexport type PopoverProps = {\n /**\n * Управление состоянием поповера (открыт/закрыт)\n */\n open: boolean;\n\n /**\n * Элемент, относительного которого появляется поповер\n */\n anchorElement: RefElement;\n\n /**\n * Использовать ширину родительского элемента\n */\n useAnchorWidth?: boolean;\n\n /**\n * Позиционирование поповера\n */\n position?: Position;\n\n /**\n * Запрещает поповеру менять свою позицию.\n * Например, если места снизу недостаточно, то он все равно будет показан снизу\n */\n preventFlip?: boolean;\n\n /**\n * Запрещает поповеру менять свою позицию, если он не влезает в видимую область.\n */\n preventOverflow?: boolean;\n\n /**\n * Позволяет поповеру подствраивать свою высоту под границы экрана/элемента, если из-за величины контента он выходит за рамки области экрана/элемента\n */\n availableHeight?: boolean | (() => Element | null | undefined);\n\n /**\n * Если `true`, будет отрисована стрелочка\n */\n withArrow?: boolean;\n\n /**\n * Смещение поповера.\n * Если позиционирование top, bottom, то [x, y].\n * Если позиционирование left, right то [y, x].\n */\n offset?: [number, number];\n\n /**\n * Дополнительный класс для поповера\n */\n popperClassName?: string;\n\n /**\n * Дополнительный класс для стрелочки\n */\n arrowClassName?: string;\n\n /**\n * Функция, возвращающая контейнер, в который будет рендериться поповер\n */\n getPortalContainer?: () => HTMLElement;\n\n /**\n * CSSTransitionProps, прокидываются в компонент CSSTransitionProps.\n */\n transition?: CSSTransitionProps;\n\n /**\n * Выставляет кастомное свойство transition-duration\n */\n transitionDuration?: CSSProperties['transitionDuration'];\n\n /**\n * Рендерит компонент, обернутый в Transition\n */\n withTransition?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Хранит функцию, с помощью которой можно обновить положение компонента\n */\n update?: MutableRefObject<(() => void) | undefined>;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * z-index компонента\n */\n zIndex?: number;\n\n /**\n * Если поповер не помещается в переданной позиции (position), он попробует открыться в другой позиции,\n * по очереди для каждой позиции из этого списка.\n * Если не передавать, то поповер открывается в противоположном направлении от переданного position.\n */\n fallbackPlacements?: Position[];\n\n /**\n * Контент\n */\n children?: ReactNode;\n\n /**\n * Класс для скролл контейнера\n */\n scrollableContentClassName?: string;\n\n /**\n * Минимальное расстояние стрелки до края поповера\n *\n * @default 24\n */\n arrowToEdgeMinDistance?: number;\n};\n\nconst DEFAULT_TRANSITION: PopoverProps['transition'] = {\n timeout: 150,\n};\n\nconst CSS_TRANSITION_CLASS_NAMES = {\n enter: styles.enter,\n enterActive: styles.enterActive,\n exit: styles.exit,\n exitActive: styles.exitActive,\n};\n\nconst DEFAULT_OFFSET = [0, 0];\n\nfunction createGetArrowPadding(minDistanceToEdge: number) {\n return function getArrowPadding({\n placement,\n }: {\n popper: { height: number; width: number };\n reference: { height: number; width: number };\n placement: Position;\n }) {\n if (placement === 'right-end' || placement === 'left-end') {\n return { top: minDistanceToEdge, right: 0, bottom: 0, left: 0 };\n }\n\n if (placement === 'top-start' || placement === 'bottom-start') {\n return { top: 0, right: minDistanceToEdge, bottom: 0, left: 0 };\n }\n\n if (placement === 'right-start' || placement === 'left-start') {\n return { top: 0, right: 0, bottom: minDistanceToEdge, left: 0 };\n }\n\n if (placement === 'top-end' || placement === 'bottom-end') {\n return { top: 0, right: 0, bottom: 0, left: minDistanceToEdge };\n }\n\n return 0;\n };\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(\n (\n {\n children,\n getPortalContainer,\n transition = DEFAULT_TRANSITION,\n anchorElement,\n useAnchorWidth,\n offset = DEFAULT_OFFSET,\n withArrow = false,\n withTransition = true,\n position = 'left',\n preventFlip,\n popperClassName,\n arrowClassName,\n className,\n open,\n dataTestId,\n update,\n transitionDuration = `${transition.timeout}ms`,\n zIndex = stackingOrder.POPOVER,\n fallbackPlacements,\n preventOverflow = true,\n availableHeight = false,\n scrollableContentClassName,\n arrowToEdgeMinDistance = 24,\n },\n ref,\n ) => {\n const [referenceElement, setReferenceElement] = useState<RefElement>(anchorElement);\n const [popperElement, setPopperElement] = useState<RefElement>(null);\n const [arrowElement, setArrowElement] = useState<RefElement>(null);\n const [maxSizeOptions, setMaxSizeOptions] = useState<\n Partial<ModifierOptions<typeof maxSize>>\n >(() => ({}));\n\n const updatePopperRef = useRef<() => void>();\n\n const popperRef = useRef<HTMLDivElement>(null);\n const innerRef = useRef<HTMLDivElement>(null);\n\n const popperModifiers = useMemo(() => {\n const modifiers: PopperModifier[] = [{ name: 'offset', options: { offset } }];\n\n if (withArrow) {\n modifiers.push({\n name: 'arrow',\n options: {\n element: arrowElement,\n padding: createGetArrowPadding(arrowToEdgeMinDistance),\n },\n });\n }\n\n if (preventFlip) {\n modifiers.push({ name: 'flip', options: { fallbackPlacements: [] } });\n }\n\n if (fallbackPlacements) {\n modifiers.push({ name: 'flip', options: { fallbackPlacements } });\n }\n\n if (preventOverflow) {\n modifiers.push({ name: 'preventOverflow', options: { mainAxis: false } });\n }\n\n if (isFn(availableHeight) || availableHeight) {\n modifiers.push({ ...maxSize, options: maxSizeOptions });\n }\n\n return modifiers;\n }, [\n offset,\n withArrow,\n preventFlip,\n fallbackPlacements,\n preventOverflow,\n availableHeight,\n arrowElement,\n arrowToEdgeMinDistance,\n maxSizeOptions,\n ]);\n\n const {\n styles: popperStyles,\n attributes,\n update: updatePopper,\n state,\n } = usePopper(referenceElement, popperElement, {\n placement: position,\n modifiers: popperModifiers,\n });\n\n if (updatePopper) {\n updatePopperRef.current = updatePopper;\n }\n\n useLayoutEffect_SAFE_FOR_SSR(() => {\n const nextBoundry = isFn(availableHeight)\n ? (availableHeight() ?? undefined)\n : undefined;\n\n if (!(maxSizeOptions.boundary === nextBoundry)) {\n setMaxSizeOptions({ boundary: nextBoundry });\n }\n });\n\n useLayoutEffect_SAFE_FOR_SSR(() => {\n setReferenceElement(anchorElement);\n }, [anchorElement]);\n\n useEffect(() => {\n if (updatePopper) {\n updatePopper();\n }\n }, [updatePopper, arrowElement, children]);\n\n useEffect(() => {\n if (update && updatePopper) {\n // eslint-disable-next-line no-param-reassign\n update.current = updatePopper;\n }\n });\n\n useEffect(() => {\n if (useAnchorWidth) {\n const updatePopoverWidth = () => updatePopperRef.current?.();\n const ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\n const observer = new ResizeObserver(updatePopoverWidth);\n\n if (anchorElement) {\n observer.observe(anchorElement);\n }\n\n return () => {\n observer.disconnect();\n };\n }\n\n return () => ({});\n }, [anchorElement, useAnchorWidth]);\n\n const renderContent = (computedZIndex: number) => (\n <div\n ref={mergeRefs([ref, popperRef, setPopperElement])}\n style={{\n zIndex: computedZIndex,\n width: useAnchorWidth ? referenceElement?.offsetWidth : undefined,\n ...popperStyles.popper,\n ...(popperStyles.popper?.transform ? null : { visibility: 'hidden' }),\n }}\n data-test-id={dataTestId}\n className={cn(styles.component, className)}\n {...attributes.popper}\n >\n <div className={cn(styles.inner, popperClassName)} ref={innerRef}>\n <div\n className={cn(scrollableContentClassName, {\n [styles.scrollableContent]: isFn(availableHeight) || availableHeight,\n })}\n style={{\n maxHeight:\n isFn(availableHeight) || availableHeight\n ? state?.modifiersData.maxSize?.height\n : undefined,\n }}\n >\n {children}\n </div>\n\n {withArrow && (\n <div\n ref={setArrowElement}\n style={popperStyles.arrow}\n className={cn(styles.arrow, arrowClassName)}\n />\n )}\n </div>\n </div>\n );\n\n return (\n <Stack value={zIndex}>\n {(computedZIndex) => (\n <Portal getPortalContainer={getPortalContainer}>\n {withTransition ? (\n <CSSTransition\n unmountOnExit={true}\n classNames={CSS_TRANSITION_CLASS_NAMES}\n nodeRef={popperRef}\n {...transition}\n in={open}\n onEntering={(node: HTMLElement, isAppearing: boolean) => {\n // Меняем transition-duration только в случае, если передано значение отличное от дефолтного.\n if (\n innerRef.current &&\n transitionDuration !== `${DEFAULT_TRANSITION.timeout}ms`\n ) {\n innerRef.current.style.setProperty(\n 'transition-duration',\n transitionDuration,\n );\n }\n transition?.onEntering?.(node, isAppearing);\n }}\n >\n {renderContent(computedZIndex)}\n </CSSTransition>\n ) : (\n open && renderContent(computedZIndex)\n )}\n </Portal>\n )}\n </Stack>\n );\n },\n);\n\nPopover.displayName = 'Popover';\n"],"names":["ResizeObserverPolyfill"],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["import React, {\n type CSSProperties,\n forwardRef,\n type MutableRefObject,\n type ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { usePopper } from 'react-popper';\nimport { CSSTransition } from 'react-transition-group';\nimport { type CSSTransitionProps } from 'react-transition-group/CSSTransition';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport {\n type BasePlacement,\n type Modifier,\n type Obj,\n type VariationPlacement,\n} from '@popperjs/core';\nimport cn from 'classnames';\nimport maxSize from 'popper-max-size-modifier';\n\nimport { Portal } from '@alfalab/core-components-portal';\nimport { isFn } from '@alfalab/core-components-shared';\nimport { Stack } from '@alfalab/core-components-stack';\nimport { stackingOrder } from '@alfalab/core-components-stack-context';\nimport { useLayoutEffect_SAFE_FOR_SSR } from '@alfalab/hooks';\n\nimport styles from './index.module.css';\n\ntype RefElement = HTMLElement | null;\n\ntype ModifierOptions<T> = T extends Modifier<unknown, infer V> ? V : never;\n\nexport type Position = BasePlacement | VariationPlacement;\n\ntype PopperModifier = {\n name: string;\n options: Obj;\n};\n\nexport type PopoverProps = {\n /**\n * Управление состоянием поповера (открыт/закрыт)\n */\n open: boolean;\n\n /**\n * Элемент, относительного которого появляется поповер\n */\n anchorElement: RefElement;\n\n /**\n * Использовать ширину родительского элемента\n */\n useAnchorWidth?: boolean;\n\n /**\n * Позиционирование поповера\n */\n position?: Position;\n\n /**\n * Запрещает поповеру менять свою позицию.\n * Например, если места снизу недостаточно, то он все равно будет показан снизу\n */\n preventFlip?: boolean;\n\n /**\n * Запрещает поповеру менять свою позицию, если он не влезает в видимую область.\n */\n preventOverflow?: boolean;\n\n /**\n * Позволяет поповеру подствраивать свою высоту под границы экрана/элемента, если из-за величины контента он выходит за рамки области экрана/элемента\n */\n availableHeight?: boolean | (() => Element | null | undefined);\n\n /**\n * Если `true`, будет отрисована стрелочка\n */\n withArrow?: boolean;\n\n /**\n * Смещение поповера.\n * Если позиционирование top, bottom, то [x, y].\n * Если позиционирование left, right то [y, x].\n */\n offset?: [number, number];\n\n /**\n * Дополнительный класс для поповера\n */\n popperClassName?: string;\n\n /**\n * Дополнительный класс для стрелочки\n */\n arrowClassName?: string;\n\n /**\n * Функция, возвращающая контейнер, в который будет рендериться поповер\n */\n getPortalContainer?: () => HTMLElement;\n\n /**\n * CSSTransitionProps, прокидываются в компонент CSSTransitionProps.\n */\n transition?: CSSTransitionProps;\n\n /**\n * Выставляет кастомное свойство transition-duration\n */\n transitionDuration?: CSSProperties['transitionDuration'];\n\n /**\n * Рендерит компонент, обернутый в Transition\n */\n withTransition?: boolean;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * Хранит функцию, с помощью которой можно обновить положение компонента\n */\n update?: MutableRefObject<(() => void) | undefined>;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * z-index компонента\n */\n zIndex?: number;\n\n /**\n * Если поповер не помещается в переданной позиции (position), он попробует открыться в другой позиции,\n * по очереди для каждой позиции из этого списка.\n * Если не передавать, то поповер открывается в противоположном направлении от переданного position.\n */\n fallbackPlacements?: Position[];\n\n /**\n * Контент\n */\n children?: ReactNode;\n\n /**\n * Класс для скролл контейнера\n */\n scrollableContentClassName?: string;\n\n /**\n * Минимальное расстояние стрелки до края поповера\n *\n * @default 24\n */\n arrowToEdgeMinDistance?: number;\n\n /**\n * Свойство по которому устанавливается ширина от родительского элемента\n * @default width\n */\n widthProp?: 'width' | 'minWidth';\n};\n\nconst DEFAULT_TRANSITION: PopoverProps['transition'] = {\n timeout: 150,\n};\n\nconst CSS_TRANSITION_CLASS_NAMES = {\n enter: styles.enter,\n enterActive: styles.enterActive,\n exit: styles.exit,\n exitActive: styles.exitActive,\n};\n\nconst DEFAULT_OFFSET = [0, 0];\n\nfunction createGetArrowPadding(minDistanceToEdge: number) {\n return function getArrowPadding({\n placement,\n }: {\n popper: { height: number; width: number };\n reference: { height: number; width: number };\n placement: Position;\n }) {\n if (placement === 'right-end' || placement === 'left-end') {\n return { top: minDistanceToEdge, right: 0, bottom: 0, left: 0 };\n }\n\n if (placement === 'top-start' || placement === 'bottom-start') {\n return { top: 0, right: minDistanceToEdge, bottom: 0, left: 0 };\n }\n\n if (placement === 'right-start' || placement === 'left-start') {\n return { top: 0, right: 0, bottom: minDistanceToEdge, left: 0 };\n }\n\n if (placement === 'top-end' || placement === 'bottom-end') {\n return { top: 0, right: 0, bottom: 0, left: minDistanceToEdge };\n }\n\n return 0;\n };\n}\n\nexport const Popover = forwardRef<HTMLDivElement, PopoverProps>(\n (\n {\n children,\n getPortalContainer,\n transition = DEFAULT_TRANSITION,\n anchorElement,\n useAnchorWidth,\n offset = DEFAULT_OFFSET,\n withArrow = false,\n withTransition = true,\n position = 'left',\n preventFlip,\n popperClassName,\n arrowClassName,\n className,\n open,\n dataTestId,\n update,\n transitionDuration = `${transition.timeout}ms`,\n zIndex = stackingOrder.POPOVER,\n fallbackPlacements,\n preventOverflow = true,\n availableHeight = false,\n scrollableContentClassName,\n arrowToEdgeMinDistance = 24,\n widthProp = 'width',\n },\n ref,\n ) => {\n const [referenceElement, setReferenceElement] = useState<RefElement>(anchorElement);\n const [popperElement, setPopperElement] = useState<RefElement>(null);\n const [arrowElement, setArrowElement] = useState<RefElement>(null);\n const [maxSizeOptions, setMaxSizeOptions] = useState<\n Partial<ModifierOptions<typeof maxSize>>\n >(() => ({}));\n\n const updatePopperRef = useRef<() => void>();\n\n const popperRef = useRef<HTMLDivElement>(null);\n const innerRef = useRef<HTMLDivElement>(null);\n\n const popperModifiers = useMemo(() => {\n const modifiers: PopperModifier[] = [{ name: 'offset', options: { offset } }];\n\n if (withArrow) {\n modifiers.push({\n name: 'arrow',\n options: {\n element: arrowElement,\n padding: createGetArrowPadding(arrowToEdgeMinDistance),\n },\n });\n }\n\n if (preventFlip) {\n modifiers.push({ name: 'flip', options: { fallbackPlacements: [] } });\n }\n\n if (fallbackPlacements) {\n modifiers.push({ name: 'flip', options: { fallbackPlacements } });\n }\n\n if (preventOverflow) {\n modifiers.push({ name: 'preventOverflow', options: { mainAxis: false } });\n }\n\n if (isFn(availableHeight) || availableHeight) {\n modifiers.push({ ...maxSize, options: maxSizeOptions });\n }\n\n return modifiers;\n }, [\n offset,\n withArrow,\n preventFlip,\n fallbackPlacements,\n preventOverflow,\n availableHeight,\n arrowElement,\n arrowToEdgeMinDistance,\n maxSizeOptions,\n ]);\n\n const {\n styles: popperStyles,\n attributes,\n update: updatePopper,\n state,\n } = usePopper(referenceElement, popperElement, {\n placement: position,\n modifiers: popperModifiers,\n });\n\n if (updatePopper) {\n updatePopperRef.current = updatePopper;\n }\n\n useLayoutEffect_SAFE_FOR_SSR(() => {\n const nextBoundry = isFn(availableHeight)\n ? (availableHeight() ?? undefined)\n : undefined;\n\n if (!(maxSizeOptions.boundary === nextBoundry)) {\n setMaxSizeOptions({ boundary: nextBoundry });\n }\n });\n\n useLayoutEffect_SAFE_FOR_SSR(() => {\n setReferenceElement(anchorElement);\n }, [anchorElement]);\n\n useEffect(() => {\n if (updatePopper) {\n updatePopper();\n }\n }, [updatePopper, arrowElement, children]);\n\n useEffect(() => {\n if (update && updatePopper) {\n // eslint-disable-next-line no-param-reassign\n update.current = updatePopper;\n }\n });\n\n useEffect(() => {\n if (useAnchorWidth) {\n const updatePopoverWidth = () => updatePopperRef.current?.();\n const ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\n const observer = new ResizeObserver(updatePopoverWidth);\n\n if (anchorElement) {\n observer.observe(anchorElement);\n }\n\n return () => {\n observer.disconnect();\n };\n }\n\n return () => ({});\n }, [anchorElement, useAnchorWidth]);\n\n const renderContent = (computedZIndex: number) => (\n <div\n ref={mergeRefs([ref, popperRef, setPopperElement])}\n style={{\n zIndex: computedZIndex,\n [widthProp]: useAnchorWidth ? referenceElement?.offsetWidth : undefined,\n ...popperStyles.popper,\n ...(popperStyles.popper?.transform ? null : { visibility: 'hidden' }),\n }}\n data-test-id={dataTestId}\n className={cn(styles.component, className)}\n {...attributes.popper}\n >\n <div className={cn(styles.inner, popperClassName)} ref={innerRef}>\n <div\n className={cn(scrollableContentClassName, {\n [styles.scrollableContent]: isFn(availableHeight) || availableHeight,\n })}\n style={{\n maxHeight:\n isFn(availableHeight) || availableHeight\n ? state?.modifiersData.maxSize?.height\n : undefined,\n }}\n >\n {children}\n </div>\n\n {withArrow && (\n <div\n ref={setArrowElement}\n style={popperStyles.arrow}\n className={cn(styles.arrow, arrowClassName)}\n />\n )}\n </div>\n </div>\n );\n\n return (\n <Stack value={zIndex}>\n {(computedZIndex) => (\n <Portal getPortalContainer={getPortalContainer}>\n {withTransition ? (\n <CSSTransition\n unmountOnExit={true}\n classNames={CSS_TRANSITION_CLASS_NAMES}\n nodeRef={popperRef}\n {...transition}\n in={open}\n onEntering={(node: HTMLElement, isAppearing: boolean) => {\n // Меняем transition-duration только в случае, если передано значение отличное от дефолтного.\n if (\n innerRef.current &&\n transitionDuration !== `${DEFAULT_TRANSITION.timeout}ms`\n ) {\n innerRef.current.style.setProperty(\n 'transition-duration',\n transitionDuration,\n );\n }\n transition?.onEntering?.(node, isAppearing);\n }}\n >\n {renderContent(computedZIndex)}\n </CSSTransition>\n ) : (\n open && renderContent(computedZIndex)\n )}\n </Portal>\n )}\n </Stack>\n );\n },\n);\n\nPopover.displayName = 'Popover';\n"],"names":["ResizeObserverPolyfill"],"mappings":"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"}