@vkontakte/vkui 7.4.3 → 7.4.4

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.
Files changed (20) hide show
  1. package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts.map +1 -1
  2. package/dist/components/OnboardingTooltip/OnboardingTooltip.js +5 -13
  3. package/dist/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  4. package/dist/components/OnboardingTooltip/OnboardingTooltipContainer.d.ts.map +1 -1
  5. package/dist/components/OnboardingTooltip/OnboardingTooltipContainer.js +3 -12
  6. package/dist/components/OnboardingTooltip/OnboardingTooltipContainer.js.map +1 -1
  7. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js +5 -13
  8. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
  9. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltipContainer.js +4 -13
  10. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltipContainer.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/components/OnboardingTooltip/OnboardingTooltip.tsx +7 -13
  13. package/src/components/OnboardingTooltip/OnboardingTooltipContainer.tsx +1 -10
  14. package/dist/components/OnboardingTooltip/OnboardingTooltipContext.d.ts +0 -7
  15. package/dist/components/OnboardingTooltip/OnboardingTooltipContext.d.ts.map +0 -1
  16. package/dist/components/OnboardingTooltip/OnboardingTooltipContext.js +0 -9
  17. package/dist/components/OnboardingTooltip/OnboardingTooltipContext.js.map +0 -1
  18. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltipContext.js +0 -9
  19. package/dist/cssm/components/OnboardingTooltip/OnboardingTooltipContext.js.map +0 -1
  20. package/src/components/OnboardingTooltip/OnboardingTooltipContext.tsx +0 -13
@@ -1 +1 @@
1
- {"version":3,"file":"OnboardingTooltip.d.ts","sourceRoot":"","sources":["../../../src/components/OnboardingTooltip/OnboardingTooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAGL,KAAK,sBAAsB,EAI5B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,EAAkC,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAOnG,KAAK,6BAA6B,GAAG,IAAI,CACvC,sBAAsB,EACpB,aAAa,GACb,cAAc,GACd,UAAU,GACV,WAAW,GACX,kBAAkB,GAClB,mBAAmB,GACnB,OAAO,GACP,UAAU,GACV,mBAAmB,GACnB,uBAAuB,GACvB,kBAAkB,CACrB,CAAC;AAEF,KAAK,uBAAuB,GAAG,IAAI,CACjC,gBAAgB,EAChB,YAAY,GAAG,gBAAgB,GAAG,kBAAkB,CACrD,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B;;OAEG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC3C;;OAEG;IACH,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;CAC5D,CAAC;AAEF,MAAM,WAAW,sBACf,SAAQ,6BAA6B,EACnC,uBAAuB,EACvB,yBAAyB,EACzB,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC;IACzC;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,wZAyB/B,sBAAsB,KAAG,KAAK,CAAC,SAyIjC,CAAC"}
1
+ {"version":3,"file":"OnboardingTooltip.d.ts","sourceRoot":"","sources":["../../../src/components/OnboardingTooltip/OnboardingTooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,OAAO,EAGL,KAAK,sBAAsB,EAI5B,MAAM,oBAAoB,CAAC;AAI5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,OAAO,EAAkC,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAMnG,KAAK,6BAA6B,GAAG,IAAI,CACvC,sBAAsB,EACpB,aAAa,GACb,cAAc,GACd,UAAU,GACV,WAAW,GACX,kBAAkB,GAClB,mBAAmB,GACnB,OAAO,GACP,UAAU,GACV,mBAAmB,GACnB,uBAAuB,GACvB,kBAAkB,CACrB,CAAC;AAEF,KAAK,uBAAuB,GAAG,IAAI,CACjC,gBAAgB,EAChB,YAAY,GAAG,gBAAgB,GAAG,kBAAkB,CACrD,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B;;OAEG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC3C;;OAEG;IACH,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;CAC5D,CAAC;AAEF,MAAM,WAAW,sBACf,SAAQ,6BAA6B,EACnC,uBAAuB,EACvB,yBAAyB,EACzB,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC;IACzC;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,wZAyB/B,sBAAsB,KAAG,KAAK,CAAC,SAmIjC,CAAC"}
@@ -10,13 +10,13 @@ import { useExternRef } from "../../hooks/useExternRef.js";
10
10
  import { usePatchChildren } from "../../hooks/usePatchChildren.js";
11
11
  import { createPortal } from "../../lib/createPortal.js";
12
12
  import { autoUpdateFloatingElement, convertFloatingDataToReactCSSProperties, useFloating, useFloatingMiddlewaresBootstrap, usePlacementChangeCallback } from "../../lib/floating/index.js";
13
+ import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
13
14
  import { warnOnce } from "../../lib/warnOnce.js";
14
15
  import { DEFAULT_ARROW_HEIGHT, DEFAULT_ARROW_PADDING } from "../FloatingArrow/DefaultIcon.js";
15
16
  import { FocusTrap } from "../FocusTrap/FocusTrap.js";
16
17
  import { useNavTransition } from "../NavTransitionContext/NavTransitionContext.js";
17
18
  import { TOOLTIP_MAX_WIDTH, TooltipBase } from "../TooltipBase/TooltipBase.js";
18
19
  import { onboardingTooltipContainerAttr } from "./OnboardingTooltipContainer.js";
19
- import { useOnboardingTooltipContext } from "./OnboardingTooltipContext.js";
20
20
  const warn = warnOnce('OnboardingTooltip');
21
21
  /**
22
22
  * @see https://vkcom.github.io/VKUI/#/Tooltip
@@ -49,7 +49,6 @@ const warn = warnOnce('OnboardingTooltip');
49
49
  const generatedId = React.useId();
50
50
  const tooltipId = idProp || generatedId;
51
51
  const { entering } = useNavTransition();
52
- const { containerRef: tooltipContainerRef } = useOnboardingTooltipContext();
53
52
  const [arrowRef, setArrowRef] = React.useState(null);
54
53
  const [tooltipContainer, setTooltipContainer] = React.useState(null);
55
54
  const [positionStrategy, setPositionStrategy] = React.useState('absolute');
@@ -118,22 +117,15 @@ const warn = warnOnce('OnboardingTooltip');
118
117
  ]
119
118
  }), tooltipContainer);
120
119
  }
121
- React.useEffect(function initialize() {
120
+ useIsomorphicLayoutEffect(function initialize() {
122
121
  const referenceEl = childRef.current;
123
- if (!referenceEl) {
124
- return;
125
- }
126
- const tooltipContainer = tooltipContainerRef.current || // eslint-disable-next-line no-restricted-properties
127
- referenceEl.closest(`[${onboardingTooltipContainerAttr}]`);
128
- if (tooltipContainer) {
129
- setTooltipContainer(tooltipContainer);
122
+ if (referenceEl) {
123
+ setTooltipContainer(referenceEl.closest(`[${onboardingTooltipContainerAttr}]`));
130
124
  setPositionStrategy(referenceEl.style.position === 'fixed' ? 'fixed' : 'absolute');
131
125
  refs.setReference(referenceEl);
132
126
  }
133
127
  }, [
134
- childRef,
135
- refs,
136
- tooltipContainerRef
128
+ childRef
137
129
  ]);
138
130
  if (process.env.NODE_ENV === 'development') {
139
131
  const multiChildren = React.Children.count(children) > 1;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/OnboardingTooltip/OnboardingTooltip.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { hasReactNode } from '@vkontakte/vkjs';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport { usePatchChildren } from '../../hooks/usePatchChildren';\nimport { createPortal } from '../../lib/createPortal';\nimport {\n autoUpdateFloatingElement,\n convertFloatingDataToReactCSSProperties,\n type FloatingComponentProps,\n useFloating,\n useFloatingMiddlewaresBootstrap,\n usePlacementChangeCallback,\n} from '../../lib/floating';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { DEFAULT_ARROW_HEIGHT, DEFAULT_ARROW_PADDING } from '../FloatingArrow/DefaultIcon';\nimport type { FloatingArrowProps } from '../FloatingArrow/FloatingArrow';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { useNavTransition } from '../NavTransitionContext/NavTransitionContext';\nimport { TOOLTIP_MAX_WIDTH, TooltipBase, type TooltipBaseProps } from '../TooltipBase/TooltipBase';\nimport { onboardingTooltipContainerAttr } from './OnboardingTooltipContainer';\nimport { useOnboardingTooltipContext } from './OnboardingTooltipContext';\nimport styles from './OnboardingTooltip.module.css';\n\nconst warn = warnOnce('OnboardingTooltip');\n\ntype AllowedFloatingComponentProps = Pick<\n FloatingComponentProps,\n | 'arrowHeight'\n | 'arrowPadding'\n | 'arrowRef'\n | 'placement'\n | 'offsetByMainAxis'\n | 'offsetByCrossAxis'\n | 'shown'\n | 'children'\n | 'onPlacementChange'\n | 'disableFlipMiddleware'\n | 'disableFocusTrap'\n>;\n\ntype AllowedTooltipBaseProps = Omit<\n TooltipBaseProps,\n 'arrowProps' | 'closeIconLabel' | 'onCloseIconClick'\n>;\n\ntype AllowedFloatingArrowProps = {\n /**\n * Сдвиг стрелки относительно текущих координат.\n */\n arrowOffset?: FloatingArrowProps['offset'];\n /**\n * Включает абсолютное смещение по `arrowOffset`.\n */\n isStaticArrowOffset?: FloatingArrowProps['isStaticOffset'];\n};\n\nexport interface OnboardingTooltipProps\n extends AllowedFloatingComponentProps,\n AllowedTooltipBaseProps,\n AllowedFloatingArrowProps,\n Pick<UseFocusTrapProps, 'restoreFocus'> {\n /**\n * Скрывает стрелку, указывающую на якорный элемент.\n */\n disableArrow?: boolean;\n /**\n * Обработчик, который вызывается при нажатии по любому месту в пределах экрана.\n */\n onClose?: (this: void) => void;\n /**\n * [a11y] Метка для подложки-кнопки, для описания того, что произойдёт при нажатии.\n */\n overlayLabel?: string;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tooltip\n */\nexport const OnboardingTooltip = ({\n 'id': idProp,\n children,\n 'shown': shownProp = true,\n arrowPadding = DEFAULT_ARROW_PADDING,\n arrowHeight = DEFAULT_ARROW_HEIGHT,\n offsetByMainAxis = 0,\n offsetByCrossAxis = 0,\n arrowOffset = 0,\n isStaticArrowOffset = false,\n onClose,\n 'placement': placementProp = 'bottom-start',\n maxWidth = TOOLTIP_MAX_WIDTH,\n 'style': styleProp,\n getRootRef,\n disableArrow = false,\n onPlacementChange,\n disableFlipMiddleware = false,\n overlayLabel = 'Закрыть',\n title,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n restoreFocus,\n disableFocusTrap,\n ...restProps\n}: OnboardingTooltipProps): React.ReactNode => {\n const generatedId = React.useId();\n const tooltipId = idProp || generatedId;\n const { entering } = useNavTransition();\n const { containerRef: tooltipContainerRef } = useOnboardingTooltipContext();\n\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n const [tooltipContainer, setTooltipContainer] = React.useState<HTMLElement | null>(null);\n const [positionStrategy, setPositionStrategy] = React.useState<'fixed' | 'absolute'>('absolute');\n const shown = shownProp && tooltipContainer && !entering;\n\n const { middlewares, strictPlacement } = useFloatingMiddlewaresBootstrap({\n placement: placementProp,\n offsetByMainAxis,\n offsetByCrossAxis,\n arrowRef,\n arrow: !disableArrow,\n arrowHeight,\n arrowPadding,\n disableFlipMiddleware,\n });\n const {\n x: floatingDataX,\n y: floatingDataY,\n refs,\n placement: resolvedPlacement,\n middlewareData: { arrow: arrowCoords },\n } = useFloating({\n strategy: positionStrategy,\n placement: strictPlacement,\n middleware: middlewares,\n whileElementsMounted: autoUpdateFloatingElement,\n });\n const tooltipRef = useExternRef<HTMLDivElement>(getRootRef, refs.setFloating);\n const [childRef, child] = usePatchChildren(children, {\n 'aria-describedby': shown ? tooltipId : undefined,\n });\n\n usePlacementChangeCallback(placementProp, resolvedPlacement, onPlacementChange);\n\n const titleId = React.useId();\n if (process.env.NODE_ENV === 'development' && !title && !ariaLabel && !ariaLabelledBy) {\n warn(\n 'Если \"title\" не используется, то необходимо задать либо \"aria-label\", либо \"aria-labelledby\" (см. правило axe aria-dialog-name)',\n );\n }\n\n let tooltip: React.ReactPortal | null = null;\n if (shown) {\n const floatingStyle = convertFloatingDataToReactCSSProperties({\n strategy: positionStrategy,\n x: floatingDataX,\n y: floatingDataY,\n });\n\n tooltip = createPortal(\n <FocusTrap\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n aria-labelledby={title ? titleId : ariaLabel ? undefined : ariaLabelledBy}\n onClose={onClose}\n disabled={disableFocusTrap}\n restoreFocus={restoreFocus}\n >\n <button aria-label={overlayLabel} className={styles.overlay} onClickCapture={onClose} />\n <TooltipBase\n {...restProps}\n id={tooltipId}\n title={title}\n titleId={title ? titleId : undefined}\n getRootRef={tooltipRef}\n style={mergeStyle(floatingStyle, styleProp)}\n maxWidth={maxWidth}\n arrowProps={\n disableArrow\n ? undefined\n : {\n offset: arrowOffset,\n isStaticOffset: isStaticArrowOffset,\n coords: arrowCoords,\n placement: resolvedPlacement,\n getRootRef: setArrowRef,\n }\n }\n />\n </FocusTrap>,\n tooltipContainer,\n );\n }\n\n React.useEffect(\n function initialize() {\n const referenceEl = childRef.current;\n if (!referenceEl) {\n return;\n }\n const tooltipContainer =\n tooltipContainerRef.current ||\n // eslint-disable-next-line no-restricted-properties\n referenceEl.closest<HTMLDivElement>(`[${onboardingTooltipContainerAttr}]`);\n if (tooltipContainer) {\n setTooltipContainer(tooltipContainer);\n setPositionStrategy(referenceEl.style.position === 'fixed' ? 'fixed' : 'absolute');\n refs.setReference(referenceEl);\n }\n },\n [childRef, refs, tooltipContainerRef],\n );\n\n if (process.env.NODE_ENV === 'development') {\n const multiChildren = React.Children.count(children) > 1;\n // Empty children is a noop\n const primitiveChild = hasReactNode(children) && typeof children !== 'object';\n (multiChildren || primitiveChild) &&\n warn(\n [\n 'children должен быть одним React элементом, получено',\n multiChildren && 'несколько',\n primitiveChild && JSON.stringify(children),\n ]\n .filter(Boolean)\n .join(' '),\n 'error',\n );\n\n if (refs.reference.current && !tooltipContainer) {\n throw new Error('Use TooltipContainer for Tooltip outside Panel (see docs)');\n }\n }\n\n return (\n <React.Fragment>\n {child}\n {tooltip}\n </React.Fragment>\n );\n};\n"],"names":["React","hasReactNode","mergeStyle","useExternRef","usePatchChildren","createPortal","autoUpdateFloatingElement","convertFloatingDataToReactCSSProperties","useFloating","useFloatingMiddlewaresBootstrap","usePlacementChangeCallback","warnOnce","DEFAULT_ARROW_HEIGHT","DEFAULT_ARROW_PADDING","FocusTrap","useNavTransition","TOOLTIP_MAX_WIDTH","TooltipBase","onboardingTooltipContainerAttr","useOnboardingTooltipContext","warn","OnboardingTooltip","idProp","children","shownProp","arrowPadding","arrowHeight","offsetByMainAxis","offsetByCrossAxis","arrowOffset","isStaticArrowOffset","onClose","placementProp","maxWidth","styleProp","getRootRef","disableArrow","onPlacementChange","disableFlipMiddleware","overlayLabel","title","ariaLabel","ariaLabelledBy","restoreFocus","disableFocusTrap","restProps","generatedId","useId","tooltipId","entering","containerRef","tooltipContainerRef","arrowRef","setArrowRef","useState","tooltipContainer","setTooltipContainer","positionStrategy","setPositionStrategy","shown","middlewares","strictPlacement","placement","arrow","x","floatingDataX","y","floatingDataY","refs","resolvedPlacement","middlewareData","arrowCoords","strategy","middleware","whileElementsMounted","tooltipRef","setFloating","childRef","child","undefined","titleId","process","env","NODE_ENV","tooltip","floatingStyle","role","aria-modal","aria-label","aria-labelledby","disabled","button","className","onClickCapture","id","style","arrowProps","offset","isStaticOffset","coords","useEffect","initialize","referenceEl","current","closest","position","setReference","multiChildren","Children","count","primitiveChild","JSON","stringify","filter","Boolean","join","reference","Error","Fragment"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/OnboardingTooltip/OnboardingTooltip.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { hasReactNode } from '@vkontakte/vkjs';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport { usePatchChildren } from '../../hooks/usePatchChildren';\nimport { createPortal } from '../../lib/createPortal';\nimport {\n autoUpdateFloatingElement,\n convertFloatingDataToReactCSSProperties,\n type FloatingComponentProps,\n useFloating,\n useFloatingMiddlewaresBootstrap,\n usePlacementChangeCallback,\n} from '../../lib/floating';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { DEFAULT_ARROW_HEIGHT, DEFAULT_ARROW_PADDING } from '../FloatingArrow/DefaultIcon';\nimport type { FloatingArrowProps } from '../FloatingArrow/FloatingArrow';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { useNavTransition } from '../NavTransitionContext/NavTransitionContext';\nimport { TOOLTIP_MAX_WIDTH, TooltipBase, type TooltipBaseProps } from '../TooltipBase/TooltipBase';\nimport { onboardingTooltipContainerAttr } from './OnboardingTooltipContainer';\nimport styles from './OnboardingTooltip.module.css';\n\nconst warn = warnOnce('OnboardingTooltip');\n\ntype AllowedFloatingComponentProps = Pick<\n FloatingComponentProps,\n | 'arrowHeight'\n | 'arrowPadding'\n | 'arrowRef'\n | 'placement'\n | 'offsetByMainAxis'\n | 'offsetByCrossAxis'\n | 'shown'\n | 'children'\n | 'onPlacementChange'\n | 'disableFlipMiddleware'\n | 'disableFocusTrap'\n>;\n\ntype AllowedTooltipBaseProps = Omit<\n TooltipBaseProps,\n 'arrowProps' | 'closeIconLabel' | 'onCloseIconClick'\n>;\n\ntype AllowedFloatingArrowProps = {\n /**\n * Сдвиг стрелки относительно текущих координат.\n */\n arrowOffset?: FloatingArrowProps['offset'];\n /**\n * Включает абсолютное смещение по `arrowOffset`.\n */\n isStaticArrowOffset?: FloatingArrowProps['isStaticOffset'];\n};\n\nexport interface OnboardingTooltipProps\n extends AllowedFloatingComponentProps,\n AllowedTooltipBaseProps,\n AllowedFloatingArrowProps,\n Pick<UseFocusTrapProps, 'restoreFocus'> {\n /**\n * Скрывает стрелку, указывающую на якорный элемент.\n */\n disableArrow?: boolean;\n /**\n * Обработчик, который вызывается при нажатии по любому месту в пределах экрана.\n */\n onClose?: (this: void) => void;\n /**\n * [a11y] Метка для подложки-кнопки, для описания того, что произойдёт при нажатии.\n */\n overlayLabel?: string;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tooltip\n */\nexport const OnboardingTooltip = ({\n 'id': idProp,\n children,\n 'shown': shownProp = true,\n arrowPadding = DEFAULT_ARROW_PADDING,\n arrowHeight = DEFAULT_ARROW_HEIGHT,\n offsetByMainAxis = 0,\n offsetByCrossAxis = 0,\n arrowOffset = 0,\n isStaticArrowOffset = false,\n onClose,\n 'placement': placementProp = 'bottom-start',\n maxWidth = TOOLTIP_MAX_WIDTH,\n 'style': styleProp,\n getRootRef,\n disableArrow = false,\n onPlacementChange,\n disableFlipMiddleware = false,\n overlayLabel = 'Закрыть',\n title,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n restoreFocus,\n disableFocusTrap,\n ...restProps\n}: OnboardingTooltipProps): React.ReactNode => {\n const generatedId = React.useId();\n const tooltipId = idProp || generatedId;\n const { entering } = useNavTransition();\n\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n const [tooltipContainer, setTooltipContainer] = React.useState<HTMLElement | null>(null);\n const [positionStrategy, setPositionStrategy] = React.useState<'fixed' | 'absolute'>('absolute');\n const shown = shownProp && tooltipContainer && !entering;\n\n const { middlewares, strictPlacement } = useFloatingMiddlewaresBootstrap({\n placement: placementProp,\n offsetByMainAxis,\n offsetByCrossAxis,\n arrowRef,\n arrow: !disableArrow,\n arrowHeight,\n arrowPadding,\n disableFlipMiddleware,\n });\n const {\n x: floatingDataX,\n y: floatingDataY,\n refs,\n placement: resolvedPlacement,\n middlewareData: { arrow: arrowCoords },\n } = useFloating({\n strategy: positionStrategy,\n placement: strictPlacement,\n middleware: middlewares,\n whileElementsMounted: autoUpdateFloatingElement,\n });\n const tooltipRef = useExternRef<HTMLDivElement>(getRootRef, refs.setFloating);\n const [childRef, child] = usePatchChildren(children, {\n 'aria-describedby': shown ? tooltipId : undefined,\n });\n\n usePlacementChangeCallback(placementProp, resolvedPlacement, onPlacementChange);\n\n const titleId = React.useId();\n if (process.env.NODE_ENV === 'development' && !title && !ariaLabel && !ariaLabelledBy) {\n warn(\n 'Если \"title\" не используется, то необходимо задать либо \"aria-label\", либо \"aria-labelledby\" (см. правило axe aria-dialog-name)',\n );\n }\n\n let tooltip: React.ReactPortal | null = null;\n if (shown) {\n const floatingStyle = convertFloatingDataToReactCSSProperties({\n strategy: positionStrategy,\n x: floatingDataX,\n y: floatingDataY,\n });\n\n tooltip = createPortal(\n <FocusTrap\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n aria-labelledby={title ? titleId : ariaLabel ? undefined : ariaLabelledBy}\n onClose={onClose}\n disabled={disableFocusTrap}\n restoreFocus={restoreFocus}\n >\n <button aria-label={overlayLabel} className={styles.overlay} onClickCapture={onClose} />\n <TooltipBase\n {...restProps}\n id={tooltipId}\n title={title}\n titleId={title ? titleId : undefined}\n getRootRef={tooltipRef}\n style={mergeStyle(floatingStyle, styleProp)}\n maxWidth={maxWidth}\n arrowProps={\n disableArrow\n ? undefined\n : {\n offset: arrowOffset,\n isStaticOffset: isStaticArrowOffset,\n coords: arrowCoords,\n placement: resolvedPlacement,\n getRootRef: setArrowRef,\n }\n }\n />\n </FocusTrap>,\n tooltipContainer,\n );\n }\n\n useIsomorphicLayoutEffect(\n function initialize() {\n const referenceEl = childRef.current;\n if (referenceEl) {\n setTooltipContainer(\n referenceEl.closest<HTMLDivElement>(`[${onboardingTooltipContainerAttr}]`), // eslint-disable-line no-restricted-properties\n );\n setPositionStrategy(referenceEl.style.position === 'fixed' ? 'fixed' : 'absolute');\n refs.setReference(referenceEl);\n }\n },\n [childRef],\n );\n\n if (process.env.NODE_ENV === 'development') {\n const multiChildren = React.Children.count(children) > 1;\n // Empty children is a noop\n const primitiveChild = hasReactNode(children) && typeof children !== 'object';\n (multiChildren || primitiveChild) &&\n warn(\n [\n 'children должен быть одним React элементом, получено',\n multiChildren && 'несколько',\n primitiveChild && JSON.stringify(children),\n ]\n .filter(Boolean)\n .join(' '),\n 'error',\n );\n\n if (refs.reference.current && !tooltipContainer) {\n throw new Error('Use TooltipContainer for Tooltip outside Panel (see docs)');\n }\n }\n\n return (\n <React.Fragment>\n {child}\n {tooltip}\n </React.Fragment>\n );\n};\n"],"names":["React","hasReactNode","mergeStyle","useExternRef","usePatchChildren","createPortal","autoUpdateFloatingElement","convertFloatingDataToReactCSSProperties","useFloating","useFloatingMiddlewaresBootstrap","usePlacementChangeCallback","useIsomorphicLayoutEffect","warnOnce","DEFAULT_ARROW_HEIGHT","DEFAULT_ARROW_PADDING","FocusTrap","useNavTransition","TOOLTIP_MAX_WIDTH","TooltipBase","onboardingTooltipContainerAttr","warn","OnboardingTooltip","idProp","children","shownProp","arrowPadding","arrowHeight","offsetByMainAxis","offsetByCrossAxis","arrowOffset","isStaticArrowOffset","onClose","placementProp","maxWidth","styleProp","getRootRef","disableArrow","onPlacementChange","disableFlipMiddleware","overlayLabel","title","ariaLabel","ariaLabelledBy","restoreFocus","disableFocusTrap","restProps","generatedId","useId","tooltipId","entering","arrowRef","setArrowRef","useState","tooltipContainer","setTooltipContainer","positionStrategy","setPositionStrategy","shown","middlewares","strictPlacement","placement","arrow","x","floatingDataX","y","floatingDataY","refs","resolvedPlacement","middlewareData","arrowCoords","strategy","middleware","whileElementsMounted","tooltipRef","setFloating","childRef","child","undefined","titleId","process","env","NODE_ENV","tooltip","floatingStyle","role","aria-modal","aria-label","aria-labelledby","disabled","button","className","onClickCapture","id","style","arrowProps","offset","isStaticOffset","coords","initialize","referenceEl","current","closest","position","setReference","multiChildren","Children","count","primitiveChild","JSON","stringify","filter","Boolean","join","reference","Error","Fragment"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"OnboardingTooltipContainer.d.ts","sourceRoot":"","sources":["../../../src/components/OnboardingTooltip/OnboardingTooltipContainer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGlE,eAAO,MAAM,8BAA8B,sCAAsC,CAAC;AAElF,KAAK,+BAA+B,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GACzE,YAAY,GACZ,gBAAgB,GAAG;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEJ,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,yBAAyB,CACtE,KAAK,CAAC,eAAe,CAAC,+BAA+B,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAe7F,CAAC"}
1
+ {"version":3,"file":"OnboardingTooltipContainer.d.ts","sourceRoot":"","sources":["../../../src/components/OnboardingTooltip/OnboardingTooltipContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,eAAO,MAAM,8BAA8B,sCAAsC,CAAC;AAElF,KAAK,+BAA+B,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GACzE,YAAY,GACZ,gBAAgB,GAAG;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEJ,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,yBAAyB,CACtE,KAAK,CAAC,eAAe,CAAC,+BAA+B,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAU7F,CAAC"}
@@ -1,30 +1,21 @@
1
- 'use client';
2
1
  import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
3
2
  import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
4
3
  import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
5
4
  import { jsx as _jsx } from "react/jsx-runtime";
6
5
  import * as React from "react";
7
- import { useExternRef } from "../../hooks/useExternRef.js";
8
6
  import { defineComponentDisplayNames } from "../../lib/react/defineComponentDisplayNames.js";
9
- import { OnboardingTooltipContext } from "./OnboardingTooltipContext.js";
10
7
  export const onboardingTooltipContainerAttr = 'data-onboarding-tooltip-container';
11
8
  export const OnboardingTooltipContainer = /*#__PURE__*/ React.forwardRef((_param, ref)=>{
12
9
  var { fixed = false, Component = 'div' } = _param, props = _object_without_properties(_param, [
13
10
  "fixed",
14
11
  "Component"
15
12
  ]);
16
- const containerRef = useExternRef(ref);
17
13
  const dataProps = {
18
14
  [onboardingTooltipContainerAttr]: fixed ? 'fixed' : 'true'
19
15
  };
20
- return /*#__PURE__*/ _jsx(OnboardingTooltipContext.Provider, {
21
- value: {
22
- containerRef
23
- },
24
- children: /*#__PURE__*/ _jsx(Component, _object_spread_props(_object_spread({}, dataProps, props), {
25
- ref: containerRef
26
- }))
27
- });
16
+ return /*#__PURE__*/ _jsx(Component, _object_spread_props(_object_spread({}, dataProps, props), {
17
+ ref: ref
18
+ }));
28
19
  });
29
20
  if (process.env.NODE_ENV !== 'production') {
30
21
  defineComponentDisplayNames(OnboardingTooltipContainer, 'OnboardingTooltipContainer');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/OnboardingTooltip/OnboardingTooltipContainer.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport type { HasComponent, HasDataAttribute } from '../../types';\nimport { OnboardingTooltipContext } from './OnboardingTooltipContext';\n\nexport const onboardingTooltipContainerAttr = 'data-onboarding-tooltip-container';\n\ntype OnboardingTooltipContainerProps = React.HTMLAttributes<HTMLDivElement> &\n HasComponent &\n HasDataAttribute & {\n /**\n * Фиксированное отображение тултипа.\n */\n fixed?: boolean;\n };\n\nexport const OnboardingTooltipContainer: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<OnboardingTooltipContainerProps> & React.RefAttributes<HTMLDivElement>\n // eslint-disable-next-line react/display-name -- используется defineComponentDisplayNames\n> = React.forwardRef<HTMLDivElement, OnboardingTooltipContainerProps>(\n ({ fixed = false, Component = 'div', ...props }, ref) => {\n const containerRef = useExternRef(ref);\n const dataProps = {\n [onboardingTooltipContainerAttr]: fixed ? 'fixed' : 'true',\n };\n\n return (\n <OnboardingTooltipContext.Provider value={{ containerRef }}>\n <Component {...dataProps} {...props} ref={containerRef} />\n </OnboardingTooltipContext.Provider>\n );\n },\n);\n\nif (process.env.NODE_ENV !== 'production') {\n defineComponentDisplayNames(OnboardingTooltipContainer, 'OnboardingTooltipContainer');\n}\n"],"names":["React","useExternRef","defineComponentDisplayNames","OnboardingTooltipContext","onboardingTooltipContainerAttr","OnboardingTooltipContainer","forwardRef","ref","fixed","Component","props","containerRef","dataProps","Provider","value","process","env","NODE_ENV"],"mappings":"AAAA;;;;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,2BAA2B,QAAQ,iDAA8C;AAE1F,SAASC,wBAAwB,QAAQ,gCAA6B;AAEtE,OAAO,MAAMC,iCAAiC,oCAAoC;AAWlF,OAAO,MAAMC,2CAGTL,MAAMM,UAAU,CAClB,SAAiDC;QAAhD,EAAEC,QAAQ,KAAK,EAAEC,YAAY,KAAK,EAAY,WAAPC;QAArCF;QAAeC;;IAChB,MAAME,eAAeV,aAAaM;IAClC,MAAMK,YAAY;QAChB,CAACR,+BAA+B,EAAEI,QAAQ,UAAU;IACtD;IAEA,qBACE,KAACL,yBAAyBU,QAAQ;QAACC,OAAO;YAAEH;QAAa;kBACvD,cAAA,KAACF,mDAAcG,WAAeF;YAAOH,KAAKI;;;AAGhD,GACA;AAEF,IAAII,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;IACzCf,4BAA4BG,4BAA4B;AAC1D"}
1
+ {"version":3,"sources":["../../../src/components/OnboardingTooltip/OnboardingTooltipContainer.tsx"],"sourcesContent":["import * as React from 'react';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport type { HasComponent, HasDataAttribute } from '../../types';\n\nexport const onboardingTooltipContainerAttr = 'data-onboarding-tooltip-container';\n\ntype OnboardingTooltipContainerProps = React.HTMLAttributes<HTMLDivElement> &\n HasComponent &\n HasDataAttribute & {\n /**\n * Фиксированное отображение тултипа.\n */\n fixed?: boolean;\n };\n\nexport const OnboardingTooltipContainer: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<OnboardingTooltipContainerProps> & React.RefAttributes<HTMLDivElement>\n // eslint-disable-next-line react/display-name -- используется defineComponentDisplayNames\n> = React.forwardRef<HTMLDivElement, OnboardingTooltipContainerProps>(\n ({ fixed = false, Component = 'div', ...props }, ref) => {\n const dataProps = {\n [onboardingTooltipContainerAttr]: fixed ? 'fixed' : 'true',\n };\n\n return <Component {...dataProps} {...props} ref={ref} />;\n },\n);\n\nif (process.env.NODE_ENV !== 'production') {\n defineComponentDisplayNames(OnboardingTooltipContainer, 'OnboardingTooltipContainer');\n}\n"],"names":["React","defineComponentDisplayNames","onboardingTooltipContainerAttr","OnboardingTooltipContainer","forwardRef","ref","fixed","Component","props","dataProps","process","env","NODE_ENV"],"mappings":";;;;AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,2BAA2B,QAAQ,iDAA8C;AAG1F,OAAO,MAAMC,iCAAiC,oCAAoC;AAWlF,OAAO,MAAMC,2CAGTH,MAAMI,UAAU,CAClB,SAAiDC;QAAhD,EAAEC,QAAQ,KAAK,EAAEC,YAAY,KAAK,EAAY,WAAPC;QAArCF;QAAeC;;IAChB,MAAME,YAAY;QAChB,CAACP,+BAA+B,EAAEI,QAAQ,UAAU;IACtD;IAEA,qBAAO,KAACC,mDAAcE,WAAeD;QAAOH,KAAKA;;AACnD,GACA;AAEF,IAAIK,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;IACzCX,4BAA4BE,4BAA4B;AAC1D"}
@@ -7,13 +7,13 @@ import { useExternRef } from "../../hooks/useExternRef.js";
7
7
  import { usePatchChildren } from "../../hooks/usePatchChildren.js";
8
8
  import { createPortal } from "../../lib/createPortal.js";
9
9
  import { autoUpdateFloatingElement, convertFloatingDataToReactCSSProperties, useFloating, useFloatingMiddlewaresBootstrap, usePlacementChangeCallback } from "../../lib/floating/index.js";
10
+ import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
10
11
  import { warnOnce } from "../../lib/warnOnce.js";
11
12
  import { DEFAULT_ARROW_HEIGHT, DEFAULT_ARROW_PADDING } from "../FloatingArrow/DefaultIcon.js";
12
13
  import { FocusTrap } from "../FocusTrap/FocusTrap.js";
13
14
  import { useNavTransition } from "../NavTransitionContext/NavTransitionContext.js";
14
15
  import { TOOLTIP_MAX_WIDTH, TooltipBase } from "../TooltipBase/TooltipBase.js";
15
16
  import { onboardingTooltipContainerAttr } from "./OnboardingTooltipContainer.js";
16
- import { useOnboardingTooltipContext } from "./OnboardingTooltipContext.js";
17
17
  import styles from "./OnboardingTooltip.module.css";
18
18
  const warn = warnOnce('OnboardingTooltip');
19
19
  /**
@@ -22,7 +22,6 @@ const warn = warnOnce('OnboardingTooltip');
22
22
  const generatedId = React.useId();
23
23
  const tooltipId = idProp || generatedId;
24
24
  const { entering } = useNavTransition();
25
- const { containerRef: tooltipContainerRef } = useOnboardingTooltipContext();
26
25
  const [arrowRef, setArrowRef] = React.useState(null);
27
26
  const [tooltipContainer, setTooltipContainer] = React.useState(null);
28
27
  const [positionStrategy, setPositionStrategy] = React.useState('absolute');
@@ -92,22 +91,15 @@ const warn = warnOnce('OnboardingTooltip');
92
91
  ]
93
92
  }), tooltipContainer);
94
93
  }
95
- React.useEffect(function initialize() {
94
+ useIsomorphicLayoutEffect(function initialize() {
96
95
  const referenceEl = childRef.current;
97
- if (!referenceEl) {
98
- return;
99
- }
100
- const tooltipContainer = tooltipContainerRef.current || // eslint-disable-next-line no-restricted-properties
101
- referenceEl.closest(`[${onboardingTooltipContainerAttr}]`);
102
- if (tooltipContainer) {
103
- setTooltipContainer(tooltipContainer);
96
+ if (referenceEl) {
97
+ setTooltipContainer(referenceEl.closest(`[${onboardingTooltipContainerAttr}]`));
104
98
  setPositionStrategy(referenceEl.style.position === 'fixed' ? 'fixed' : 'absolute');
105
99
  refs.setReference(referenceEl);
106
100
  }
107
101
  }, [
108
- childRef,
109
- refs,
110
- tooltipContainerRef
102
+ childRef
111
103
  ]);
112
104
  if (process.env.NODE_ENV === 'development') {
113
105
  const multiChildren = React.Children.count(children) > 1;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/OnboardingTooltip/OnboardingTooltip.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { hasReactNode } from '@vkontakte/vkjs';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport { usePatchChildren } from '../../hooks/usePatchChildren';\nimport { createPortal } from '../../lib/createPortal';\nimport {\n autoUpdateFloatingElement,\n convertFloatingDataToReactCSSProperties,\n type FloatingComponentProps,\n useFloating,\n useFloatingMiddlewaresBootstrap,\n usePlacementChangeCallback,\n} from '../../lib/floating';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { DEFAULT_ARROW_HEIGHT, DEFAULT_ARROW_PADDING } from '../FloatingArrow/DefaultIcon';\nimport type { FloatingArrowProps } from '../FloatingArrow/FloatingArrow';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { useNavTransition } from '../NavTransitionContext/NavTransitionContext';\nimport { TOOLTIP_MAX_WIDTH, TooltipBase, type TooltipBaseProps } from '../TooltipBase/TooltipBase';\nimport { onboardingTooltipContainerAttr } from './OnboardingTooltipContainer';\nimport { useOnboardingTooltipContext } from './OnboardingTooltipContext';\nimport styles from './OnboardingTooltip.module.css';\n\nconst warn = warnOnce('OnboardingTooltip');\n\ntype AllowedFloatingComponentProps = Pick<\n FloatingComponentProps,\n | 'arrowHeight'\n | 'arrowPadding'\n | 'arrowRef'\n | 'placement'\n | 'offsetByMainAxis'\n | 'offsetByCrossAxis'\n | 'shown'\n | 'children'\n | 'onPlacementChange'\n | 'disableFlipMiddleware'\n | 'disableFocusTrap'\n>;\n\ntype AllowedTooltipBaseProps = Omit<\n TooltipBaseProps,\n 'arrowProps' | 'closeIconLabel' | 'onCloseIconClick'\n>;\n\ntype AllowedFloatingArrowProps = {\n /**\n * Сдвиг стрелки относительно текущих координат.\n */\n arrowOffset?: FloatingArrowProps['offset'];\n /**\n * Включает абсолютное смещение по `arrowOffset`.\n */\n isStaticArrowOffset?: FloatingArrowProps['isStaticOffset'];\n};\n\nexport interface OnboardingTooltipProps\n extends AllowedFloatingComponentProps,\n AllowedTooltipBaseProps,\n AllowedFloatingArrowProps,\n Pick<UseFocusTrapProps, 'restoreFocus'> {\n /**\n * Скрывает стрелку, указывающую на якорный элемент.\n */\n disableArrow?: boolean;\n /**\n * Обработчик, который вызывается при нажатии по любому месту в пределах экрана.\n */\n onClose?: (this: void) => void;\n /**\n * [a11y] Метка для подложки-кнопки, для описания того, что произойдёт при нажатии.\n */\n overlayLabel?: string;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tooltip\n */\nexport const OnboardingTooltip = ({\n 'id': idProp,\n children,\n 'shown': shownProp = true,\n arrowPadding = DEFAULT_ARROW_PADDING,\n arrowHeight = DEFAULT_ARROW_HEIGHT,\n offsetByMainAxis = 0,\n offsetByCrossAxis = 0,\n arrowOffset = 0,\n isStaticArrowOffset = false,\n onClose,\n 'placement': placementProp = 'bottom-start',\n maxWidth = TOOLTIP_MAX_WIDTH,\n 'style': styleProp,\n getRootRef,\n disableArrow = false,\n onPlacementChange,\n disableFlipMiddleware = false,\n overlayLabel = 'Закрыть',\n title,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n restoreFocus,\n disableFocusTrap,\n ...restProps\n}: OnboardingTooltipProps): React.ReactNode => {\n const generatedId = React.useId();\n const tooltipId = idProp || generatedId;\n const { entering } = useNavTransition();\n const { containerRef: tooltipContainerRef } = useOnboardingTooltipContext();\n\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n const [tooltipContainer, setTooltipContainer] = React.useState<HTMLElement | null>(null);\n const [positionStrategy, setPositionStrategy] = React.useState<'fixed' | 'absolute'>('absolute');\n const shown = shownProp && tooltipContainer && !entering;\n\n const { middlewares, strictPlacement } = useFloatingMiddlewaresBootstrap({\n placement: placementProp,\n offsetByMainAxis,\n offsetByCrossAxis,\n arrowRef,\n arrow: !disableArrow,\n arrowHeight,\n arrowPadding,\n disableFlipMiddleware,\n });\n const {\n x: floatingDataX,\n y: floatingDataY,\n refs,\n placement: resolvedPlacement,\n middlewareData: { arrow: arrowCoords },\n } = useFloating({\n strategy: positionStrategy,\n placement: strictPlacement,\n middleware: middlewares,\n whileElementsMounted: autoUpdateFloatingElement,\n });\n const tooltipRef = useExternRef<HTMLDivElement>(getRootRef, refs.setFloating);\n const [childRef, child] = usePatchChildren(children, {\n 'aria-describedby': shown ? tooltipId : undefined,\n });\n\n usePlacementChangeCallback(placementProp, resolvedPlacement, onPlacementChange);\n\n const titleId = React.useId();\n if (process.env.NODE_ENV === 'development' && !title && !ariaLabel && !ariaLabelledBy) {\n warn(\n 'Если \"title\" не используется, то необходимо задать либо \"aria-label\", либо \"aria-labelledby\" (см. правило axe aria-dialog-name)',\n );\n }\n\n let tooltip: React.ReactPortal | null = null;\n if (shown) {\n const floatingStyle = convertFloatingDataToReactCSSProperties({\n strategy: positionStrategy,\n x: floatingDataX,\n y: floatingDataY,\n });\n\n tooltip = createPortal(\n <FocusTrap\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n aria-labelledby={title ? titleId : ariaLabel ? undefined : ariaLabelledBy}\n onClose={onClose}\n disabled={disableFocusTrap}\n restoreFocus={restoreFocus}\n >\n <button aria-label={overlayLabel} className={styles.overlay} onClickCapture={onClose} />\n <TooltipBase\n {...restProps}\n id={tooltipId}\n title={title}\n titleId={title ? titleId : undefined}\n getRootRef={tooltipRef}\n style={mergeStyle(floatingStyle, styleProp)}\n maxWidth={maxWidth}\n arrowProps={\n disableArrow\n ? undefined\n : {\n offset: arrowOffset,\n isStaticOffset: isStaticArrowOffset,\n coords: arrowCoords,\n placement: resolvedPlacement,\n getRootRef: setArrowRef,\n }\n }\n />\n </FocusTrap>,\n tooltipContainer,\n );\n }\n\n React.useEffect(\n function initialize() {\n const referenceEl = childRef.current;\n if (!referenceEl) {\n return;\n }\n const tooltipContainer =\n tooltipContainerRef.current ||\n // eslint-disable-next-line no-restricted-properties\n referenceEl.closest<HTMLDivElement>(`[${onboardingTooltipContainerAttr}]`);\n if (tooltipContainer) {\n setTooltipContainer(tooltipContainer);\n setPositionStrategy(referenceEl.style.position === 'fixed' ? 'fixed' : 'absolute');\n refs.setReference(referenceEl);\n }\n },\n [childRef, refs, tooltipContainerRef],\n );\n\n if (process.env.NODE_ENV === 'development') {\n const multiChildren = React.Children.count(children) > 1;\n // Empty children is a noop\n const primitiveChild = hasReactNode(children) && typeof children !== 'object';\n (multiChildren || primitiveChild) &&\n warn(\n [\n 'children должен быть одним React элементом, получено',\n multiChildren && 'несколько',\n primitiveChild && JSON.stringify(children),\n ]\n .filter(Boolean)\n .join(' '),\n 'error',\n );\n\n if (refs.reference.current && !tooltipContainer) {\n throw new Error('Use TooltipContainer for Tooltip outside Panel (see docs)');\n }\n }\n\n return (\n <React.Fragment>\n {child}\n {tooltip}\n </React.Fragment>\n );\n};\n"],"names":["React","hasReactNode","mergeStyle","useExternRef","usePatchChildren","createPortal","autoUpdateFloatingElement","convertFloatingDataToReactCSSProperties","useFloating","useFloatingMiddlewaresBootstrap","usePlacementChangeCallback","warnOnce","DEFAULT_ARROW_HEIGHT","DEFAULT_ARROW_PADDING","FocusTrap","useNavTransition","TOOLTIP_MAX_WIDTH","TooltipBase","onboardingTooltipContainerAttr","useOnboardingTooltipContext","styles","warn","OnboardingTooltip","idProp","children","shownProp","arrowPadding","arrowHeight","offsetByMainAxis","offsetByCrossAxis","arrowOffset","isStaticArrowOffset","onClose","placementProp","maxWidth","styleProp","getRootRef","disableArrow","onPlacementChange","disableFlipMiddleware","overlayLabel","title","ariaLabel","ariaLabelledBy","restoreFocus","disableFocusTrap","restProps","generatedId","useId","tooltipId","entering","containerRef","tooltipContainerRef","arrowRef","setArrowRef","useState","tooltipContainer","setTooltipContainer","positionStrategy","setPositionStrategy","shown","middlewares","strictPlacement","placement","arrow","x","floatingDataX","y","floatingDataY","refs","resolvedPlacement","middlewareData","arrowCoords","strategy","middleware","whileElementsMounted","tooltipRef","setFloating","childRef","child","undefined","titleId","process","env","NODE_ENV","tooltip","floatingStyle","role","aria-modal","aria-label","aria-labelledby","disabled","button","className","overlay","onClickCapture","id","style","arrowProps","offset","isStaticOffset","coords","useEffect","initialize","referenceEl","current","closest","position","setReference","multiChildren","Children","count","primitiveChild","JSON","stringify","filter","Boolean","join","reference","Error","Fragment"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/OnboardingTooltip/OnboardingTooltip.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { hasReactNode } from '@vkontakte/vkjs';\nimport { mergeStyle } from '../../helpers/mergeStyle';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { type UseFocusTrapProps } from '../../hooks/useFocusTrap';\nimport { usePatchChildren } from '../../hooks/usePatchChildren';\nimport { createPortal } from '../../lib/createPortal';\nimport {\n autoUpdateFloatingElement,\n convertFloatingDataToReactCSSProperties,\n type FloatingComponentProps,\n useFloating,\n useFloatingMiddlewaresBootstrap,\n usePlacementChangeCallback,\n} from '../../lib/floating';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { DEFAULT_ARROW_HEIGHT, DEFAULT_ARROW_PADDING } from '../FloatingArrow/DefaultIcon';\nimport type { FloatingArrowProps } from '../FloatingArrow/FloatingArrow';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { useNavTransition } from '../NavTransitionContext/NavTransitionContext';\nimport { TOOLTIP_MAX_WIDTH, TooltipBase, type TooltipBaseProps } from '../TooltipBase/TooltipBase';\nimport { onboardingTooltipContainerAttr } from './OnboardingTooltipContainer';\nimport styles from './OnboardingTooltip.module.css';\n\nconst warn = warnOnce('OnboardingTooltip');\n\ntype AllowedFloatingComponentProps = Pick<\n FloatingComponentProps,\n | 'arrowHeight'\n | 'arrowPadding'\n | 'arrowRef'\n | 'placement'\n | 'offsetByMainAxis'\n | 'offsetByCrossAxis'\n | 'shown'\n | 'children'\n | 'onPlacementChange'\n | 'disableFlipMiddleware'\n | 'disableFocusTrap'\n>;\n\ntype AllowedTooltipBaseProps = Omit<\n TooltipBaseProps,\n 'arrowProps' | 'closeIconLabel' | 'onCloseIconClick'\n>;\n\ntype AllowedFloatingArrowProps = {\n /**\n * Сдвиг стрелки относительно текущих координат.\n */\n arrowOffset?: FloatingArrowProps['offset'];\n /**\n * Включает абсолютное смещение по `arrowOffset`.\n */\n isStaticArrowOffset?: FloatingArrowProps['isStaticOffset'];\n};\n\nexport interface OnboardingTooltipProps\n extends AllowedFloatingComponentProps,\n AllowedTooltipBaseProps,\n AllowedFloatingArrowProps,\n Pick<UseFocusTrapProps, 'restoreFocus'> {\n /**\n * Скрывает стрелку, указывающую на якорный элемент.\n */\n disableArrow?: boolean;\n /**\n * Обработчик, который вызывается при нажатии по любому месту в пределах экрана.\n */\n onClose?: (this: void) => void;\n /**\n * [a11y] Метка для подложки-кнопки, для описания того, что произойдёт при нажатии.\n */\n overlayLabel?: string;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tooltip\n */\nexport const OnboardingTooltip = ({\n 'id': idProp,\n children,\n 'shown': shownProp = true,\n arrowPadding = DEFAULT_ARROW_PADDING,\n arrowHeight = DEFAULT_ARROW_HEIGHT,\n offsetByMainAxis = 0,\n offsetByCrossAxis = 0,\n arrowOffset = 0,\n isStaticArrowOffset = false,\n onClose,\n 'placement': placementProp = 'bottom-start',\n maxWidth = TOOLTIP_MAX_WIDTH,\n 'style': styleProp,\n getRootRef,\n disableArrow = false,\n onPlacementChange,\n disableFlipMiddleware = false,\n overlayLabel = 'Закрыть',\n title,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n restoreFocus,\n disableFocusTrap,\n ...restProps\n}: OnboardingTooltipProps): React.ReactNode => {\n const generatedId = React.useId();\n const tooltipId = idProp || generatedId;\n const { entering } = useNavTransition();\n\n const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);\n const [tooltipContainer, setTooltipContainer] = React.useState<HTMLElement | null>(null);\n const [positionStrategy, setPositionStrategy] = React.useState<'fixed' | 'absolute'>('absolute');\n const shown = shownProp && tooltipContainer && !entering;\n\n const { middlewares, strictPlacement } = useFloatingMiddlewaresBootstrap({\n placement: placementProp,\n offsetByMainAxis,\n offsetByCrossAxis,\n arrowRef,\n arrow: !disableArrow,\n arrowHeight,\n arrowPadding,\n disableFlipMiddleware,\n });\n const {\n x: floatingDataX,\n y: floatingDataY,\n refs,\n placement: resolvedPlacement,\n middlewareData: { arrow: arrowCoords },\n } = useFloating({\n strategy: positionStrategy,\n placement: strictPlacement,\n middleware: middlewares,\n whileElementsMounted: autoUpdateFloatingElement,\n });\n const tooltipRef = useExternRef<HTMLDivElement>(getRootRef, refs.setFloating);\n const [childRef, child] = usePatchChildren(children, {\n 'aria-describedby': shown ? tooltipId : undefined,\n });\n\n usePlacementChangeCallback(placementProp, resolvedPlacement, onPlacementChange);\n\n const titleId = React.useId();\n if (process.env.NODE_ENV === 'development' && !title && !ariaLabel && !ariaLabelledBy) {\n warn(\n 'Если \"title\" не используется, то необходимо задать либо \"aria-label\", либо \"aria-labelledby\" (см. правило axe aria-dialog-name)',\n );\n }\n\n let tooltip: React.ReactPortal | null = null;\n if (shown) {\n const floatingStyle = convertFloatingDataToReactCSSProperties({\n strategy: positionStrategy,\n x: floatingDataX,\n y: floatingDataY,\n });\n\n tooltip = createPortal(\n <FocusTrap\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={ariaLabel}\n aria-labelledby={title ? titleId : ariaLabel ? undefined : ariaLabelledBy}\n onClose={onClose}\n disabled={disableFocusTrap}\n restoreFocus={restoreFocus}\n >\n <button aria-label={overlayLabel} className={styles.overlay} onClickCapture={onClose} />\n <TooltipBase\n {...restProps}\n id={tooltipId}\n title={title}\n titleId={title ? titleId : undefined}\n getRootRef={tooltipRef}\n style={mergeStyle(floatingStyle, styleProp)}\n maxWidth={maxWidth}\n arrowProps={\n disableArrow\n ? undefined\n : {\n offset: arrowOffset,\n isStaticOffset: isStaticArrowOffset,\n coords: arrowCoords,\n placement: resolvedPlacement,\n getRootRef: setArrowRef,\n }\n }\n />\n </FocusTrap>,\n tooltipContainer,\n );\n }\n\n useIsomorphicLayoutEffect(\n function initialize() {\n const referenceEl = childRef.current;\n if (referenceEl) {\n setTooltipContainer(\n referenceEl.closest<HTMLDivElement>(`[${onboardingTooltipContainerAttr}]`), // eslint-disable-line no-restricted-properties\n );\n setPositionStrategy(referenceEl.style.position === 'fixed' ? 'fixed' : 'absolute');\n refs.setReference(referenceEl);\n }\n },\n [childRef],\n );\n\n if (process.env.NODE_ENV === 'development') {\n const multiChildren = React.Children.count(children) > 1;\n // Empty children is a noop\n const primitiveChild = hasReactNode(children) && typeof children !== 'object';\n (multiChildren || primitiveChild) &&\n warn(\n [\n 'children должен быть одним React элементом, получено',\n multiChildren && 'несколько',\n primitiveChild && JSON.stringify(children),\n ]\n .filter(Boolean)\n .join(' '),\n 'error',\n );\n\n if (refs.reference.current && !tooltipContainer) {\n throw new Error('Use TooltipContainer for Tooltip outside Panel (see docs)');\n }\n }\n\n return (\n <React.Fragment>\n {child}\n {tooltip}\n </React.Fragment>\n );\n};\n"],"names":["React","hasReactNode","mergeStyle","useExternRef","usePatchChildren","createPortal","autoUpdateFloatingElement","convertFloatingDataToReactCSSProperties","useFloating","useFloatingMiddlewaresBootstrap","usePlacementChangeCallback","useIsomorphicLayoutEffect","warnOnce","DEFAULT_ARROW_HEIGHT","DEFAULT_ARROW_PADDING","FocusTrap","useNavTransition","TOOLTIP_MAX_WIDTH","TooltipBase","onboardingTooltipContainerAttr","styles","warn","OnboardingTooltip","idProp","children","shownProp","arrowPadding","arrowHeight","offsetByMainAxis","offsetByCrossAxis","arrowOffset","isStaticArrowOffset","onClose","placementProp","maxWidth","styleProp","getRootRef","disableArrow","onPlacementChange","disableFlipMiddleware","overlayLabel","title","ariaLabel","ariaLabelledBy","restoreFocus","disableFocusTrap","restProps","generatedId","useId","tooltipId","entering","arrowRef","setArrowRef","useState","tooltipContainer","setTooltipContainer","positionStrategy","setPositionStrategy","shown","middlewares","strictPlacement","placement","arrow","x","floatingDataX","y","floatingDataY","refs","resolvedPlacement","middlewareData","arrowCoords","strategy","middleware","whileElementsMounted","tooltipRef","setFloating","childRef","child","undefined","titleId","process","env","NODE_ENV","tooltip","floatingStyle","role","aria-modal","aria-label","aria-labelledby","disabled","button","className","overlay","onClickCapture","id","style","arrowProps","offset","isStaticOffset","coords","initialize","referenceEl","current","closest","position","setReference","multiChildren","Children","count","primitiveChild","JSON","stringify","filter","Boolean","join","reference","Error","Fragment"],"mappings":"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"}
@@ -1,24 +1,15 @@
1
- 'use client';
2
1
  import { jsx as _jsx } from "react/jsx-runtime";
3
2
  import * as React from "react";
4
- import { useExternRef } from "../../hooks/useExternRef.js";
5
3
  import { defineComponentDisplayNames } from "../../lib/react/defineComponentDisplayNames.js";
6
- import { OnboardingTooltipContext } from "./OnboardingTooltipContext.js";
7
4
  export const onboardingTooltipContainerAttr = 'data-onboarding-tooltip-container';
8
5
  export const OnboardingTooltipContainer = /*#__PURE__*/ React.forwardRef(({ fixed = false, Component = 'div', ...props }, ref)=>{
9
- const containerRef = useExternRef(ref);
10
6
  const dataProps = {
11
7
  [onboardingTooltipContainerAttr]: fixed ? 'fixed' : 'true'
12
8
  };
13
- return /*#__PURE__*/ _jsx(OnboardingTooltipContext.Provider, {
14
- value: {
15
- containerRef
16
- },
17
- children: /*#__PURE__*/ _jsx(Component, {
18
- ...dataProps,
19
- ...props,
20
- ref: containerRef
21
- })
9
+ return /*#__PURE__*/ _jsx(Component, {
10
+ ...dataProps,
11
+ ...props,
12
+ ref: ref
22
13
  });
23
14
  });
24
15
  if (process.env.NODE_ENV !== 'production') {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/OnboardingTooltip/OnboardingTooltipContainer.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport type { HasComponent, HasDataAttribute } from '../../types';\nimport { OnboardingTooltipContext } from './OnboardingTooltipContext';\n\nexport const onboardingTooltipContainerAttr = 'data-onboarding-tooltip-container';\n\ntype OnboardingTooltipContainerProps = React.HTMLAttributes<HTMLDivElement> &\n HasComponent &\n HasDataAttribute & {\n /**\n * Фиксированное отображение тултипа.\n */\n fixed?: boolean;\n };\n\nexport const OnboardingTooltipContainer: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<OnboardingTooltipContainerProps> & React.RefAttributes<HTMLDivElement>\n // eslint-disable-next-line react/display-name -- используется defineComponentDisplayNames\n> = React.forwardRef<HTMLDivElement, OnboardingTooltipContainerProps>(\n ({ fixed = false, Component = 'div', ...props }, ref) => {\n const containerRef = useExternRef(ref);\n const dataProps = {\n [onboardingTooltipContainerAttr]: fixed ? 'fixed' : 'true',\n };\n\n return (\n <OnboardingTooltipContext.Provider value={{ containerRef }}>\n <Component {...dataProps} {...props} ref={containerRef} />\n </OnboardingTooltipContext.Provider>\n );\n },\n);\n\nif (process.env.NODE_ENV !== 'production') {\n defineComponentDisplayNames(OnboardingTooltipContainer, 'OnboardingTooltipContainer');\n}\n"],"names":["React","useExternRef","defineComponentDisplayNames","OnboardingTooltipContext","onboardingTooltipContainerAttr","OnboardingTooltipContainer","forwardRef","fixed","Component","props","ref","containerRef","dataProps","Provider","value","process","env","NODE_ENV"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,2BAA2B,QAAQ,iDAA8C;AAE1F,SAASC,wBAAwB,QAAQ,gCAA6B;AAEtE,OAAO,MAAMC,iCAAiC,oCAAoC;AAWlF,OAAO,MAAMC,2CAGTL,MAAMM,UAAU,CAClB,CAAC,EAAEC,QAAQ,KAAK,EAAEC,YAAY,KAAK,EAAE,GAAGC,OAAO,EAAEC;IAC/C,MAAMC,eAAeV,aAAaS;IAClC,MAAME,YAAY;QAChB,CAACR,+BAA+B,EAAEG,QAAQ,UAAU;IACtD;IAEA,qBACE,KAACJ,yBAAyBU,QAAQ;QAACC,OAAO;YAAEH;QAAa;kBACvD,cAAA,KAACH;YAAW,GAAGI,SAAS;YAAG,GAAGH,KAAK;YAAEC,KAAKC;;;AAGhD,GACA;AAEF,IAAII,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;IACzCf,4BAA4BG,4BAA4B;AAC1D"}
1
+ {"version":3,"sources":["../../../../src/components/OnboardingTooltip/OnboardingTooltipContainer.tsx"],"sourcesContent":["import * as React from 'react';\nimport { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';\nimport type { HasComponent, HasDataAttribute } from '../../types';\n\nexport const onboardingTooltipContainerAttr = 'data-onboarding-tooltip-container';\n\ntype OnboardingTooltipContainerProps = React.HTMLAttributes<HTMLDivElement> &\n HasComponent &\n HasDataAttribute & {\n /**\n * Фиксированное отображение тултипа.\n */\n fixed?: boolean;\n };\n\nexport const OnboardingTooltipContainer: React.ForwardRefExoticComponent<\n React.PropsWithoutRef<OnboardingTooltipContainerProps> & React.RefAttributes<HTMLDivElement>\n // eslint-disable-next-line react/display-name -- используется defineComponentDisplayNames\n> = React.forwardRef<HTMLDivElement, OnboardingTooltipContainerProps>(\n ({ fixed = false, Component = 'div', ...props }, ref) => {\n const dataProps = {\n [onboardingTooltipContainerAttr]: fixed ? 'fixed' : 'true',\n };\n\n return <Component {...dataProps} {...props} ref={ref} />;\n },\n);\n\nif (process.env.NODE_ENV !== 'production') {\n defineComponentDisplayNames(OnboardingTooltipContainer, 'OnboardingTooltipContainer');\n}\n"],"names":["React","defineComponentDisplayNames","onboardingTooltipContainerAttr","OnboardingTooltipContainer","forwardRef","fixed","Component","props","ref","dataProps","process","env","NODE_ENV"],"mappings":";AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,2BAA2B,QAAQ,iDAA8C;AAG1F,OAAO,MAAMC,iCAAiC,oCAAoC;AAWlF,OAAO,MAAMC,2CAGTH,MAAMI,UAAU,CAClB,CAAC,EAAEC,QAAQ,KAAK,EAAEC,YAAY,KAAK,EAAE,GAAGC,OAAO,EAAEC;IAC/C,MAAMC,YAAY;QAChB,CAACP,+BAA+B,EAAEG,QAAQ,UAAU;IACtD;IAEA,qBAAO,KAACC;QAAW,GAAGG,SAAS;QAAG,GAAGF,KAAK;QAAEC,KAAKA;;AACnD,GACA;AAEF,IAAIE,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;IACzCX,4BAA4BE,4BAA4B;AAC1D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "type": "module",
3
- "version": "7.4.3",
3
+ "version": "7.4.4",
4
4
  "name": "@vkontakte/vkui",
5
5
  "description": "VKUI library",
6
6
  "module": "./dist/index.js",
@@ -15,6 +15,7 @@ import {
15
15
  useFloatingMiddlewaresBootstrap,
16
16
  usePlacementChangeCallback,
17
17
  } from '../../lib/floating';
18
+ import { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';
18
19
  import { warnOnce } from '../../lib/warnOnce';
19
20
  import { DEFAULT_ARROW_HEIGHT, DEFAULT_ARROW_PADDING } from '../FloatingArrow/DefaultIcon';
20
21
  import type { FloatingArrowProps } from '../FloatingArrow/FloatingArrow';
@@ -22,7 +23,6 @@ import { FocusTrap } from '../FocusTrap/FocusTrap';
22
23
  import { useNavTransition } from '../NavTransitionContext/NavTransitionContext';
23
24
  import { TOOLTIP_MAX_WIDTH, TooltipBase, type TooltipBaseProps } from '../TooltipBase/TooltipBase';
24
25
  import { onboardingTooltipContainerAttr } from './OnboardingTooltipContainer';
25
- import { useOnboardingTooltipContext } from './OnboardingTooltipContext';
26
26
  import styles from './OnboardingTooltip.module.css';
27
27
 
28
28
  const warn = warnOnce('OnboardingTooltip');
@@ -109,7 +109,6 @@ export const OnboardingTooltip = ({
109
109
  const generatedId = React.useId();
110
110
  const tooltipId = idProp || generatedId;
111
111
  const { entering } = useNavTransition();
112
- const { containerRef: tooltipContainerRef } = useOnboardingTooltipContext();
113
112
 
114
113
  const [arrowRef, setArrowRef] = React.useState<HTMLDivElement | null>(null);
115
114
  const [tooltipContainer, setTooltipContainer] = React.useState<HTMLElement | null>(null);
@@ -196,23 +195,18 @@ export const OnboardingTooltip = ({
196
195
  );
197
196
  }
198
197
 
199
- React.useEffect(
198
+ useIsomorphicLayoutEffect(
200
199
  function initialize() {
201
200
  const referenceEl = childRef.current;
202
- if (!referenceEl) {
203
- return;
204
- }
205
- const tooltipContainer =
206
- tooltipContainerRef.current ||
207
- // eslint-disable-next-line no-restricted-properties
208
- referenceEl.closest<HTMLDivElement>(`[${onboardingTooltipContainerAttr}]`);
209
- if (tooltipContainer) {
210
- setTooltipContainer(tooltipContainer);
201
+ if (referenceEl) {
202
+ setTooltipContainer(
203
+ referenceEl.closest<HTMLDivElement>(`[${onboardingTooltipContainerAttr}]`), // eslint-disable-line no-restricted-properties
204
+ );
211
205
  setPositionStrategy(referenceEl.style.position === 'fixed' ? 'fixed' : 'absolute');
212
206
  refs.setReference(referenceEl);
213
207
  }
214
208
  },
215
- [childRef, refs, tooltipContainerRef],
209
+ [childRef],
216
210
  );
217
211
 
218
212
  if (process.env.NODE_ENV === 'development') {
@@ -1,10 +1,6 @@
1
- 'use client';
2
-
3
1
  import * as React from 'react';
4
- import { useExternRef } from '../../hooks/useExternRef';
5
2
  import { defineComponentDisplayNames } from '../../lib/react/defineComponentDisplayNames';
6
3
  import type { HasComponent, HasDataAttribute } from '../../types';
7
- import { OnboardingTooltipContext } from './OnboardingTooltipContext';
8
4
 
9
5
  export const onboardingTooltipContainerAttr = 'data-onboarding-tooltip-container';
10
6
 
@@ -22,16 +18,11 @@ export const OnboardingTooltipContainer: React.ForwardRefExoticComponent<
22
18
  // eslint-disable-next-line react/display-name -- используется defineComponentDisplayNames
23
19
  > = React.forwardRef<HTMLDivElement, OnboardingTooltipContainerProps>(
24
20
  ({ fixed = false, Component = 'div', ...props }, ref) => {
25
- const containerRef = useExternRef(ref);
26
21
  const dataProps = {
27
22
  [onboardingTooltipContainerAttr]: fixed ? 'fixed' : 'true',
28
23
  };
29
24
 
30
- return (
31
- <OnboardingTooltipContext.Provider value={{ containerRef }}>
32
- <Component {...dataProps} {...props} ref={containerRef} />
33
- </OnboardingTooltipContext.Provider>
34
- );
25
+ return <Component {...dataProps} {...props} ref={ref} />;
35
26
  },
36
27
  );
37
28
 
@@ -1,7 +0,0 @@
1
- import * as React from 'react';
2
- export interface OnboardingTooltipContextValue {
3
- containerRef: React.RefObject<HTMLElement | null>;
4
- }
5
- export declare const OnboardingTooltipContext: React.Context<OnboardingTooltipContextValue>;
6
- export declare const useOnboardingTooltipContext: () => OnboardingTooltipContextValue;
7
- //# sourceMappingURL=OnboardingTooltipContext.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OnboardingTooltipContext.d.ts","sourceRoot":"","sources":["../../../src/components/OnboardingTooltip/OnboardingTooltipContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACnD;AAED,eAAO,MAAM,wBAAwB,8CAEnC,CAAC;AAEH,eAAO,MAAM,2BAA2B,qCAAmD,CAAC"}
@@ -1,9 +0,0 @@
1
- /* eslint-disable jsdoc/require-jsdoc */ import * as React from "react";
2
- export const OnboardingTooltipContext = /*#__PURE__*/ React.createContext({
3
- containerRef: {
4
- current: null
5
- }
6
- });
7
- export const useOnboardingTooltipContext = ()=>React.useContext(OnboardingTooltipContext);
8
-
9
- //# sourceMappingURL=OnboardingTooltipContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/components/OnboardingTooltip/OnboardingTooltipContext.tsx"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\n\nexport interface OnboardingTooltipContextValue {\n containerRef: React.RefObject<HTMLElement | null>;\n}\n\nexport const OnboardingTooltipContext = React.createContext<OnboardingTooltipContextValue>({\n containerRef: { current: null },\n});\n\nexport const useOnboardingTooltipContext = () => React.useContext(OnboardingTooltipContext);\n"],"names":["React","OnboardingTooltipContext","createContext","containerRef","current","useOnboardingTooltipContext","useContext"],"mappings":"AAAA,sCAAsC,GAEtC,YAAYA,WAAW,QAAQ;AAM/B,OAAO,MAAMC,yCAA2BD,MAAME,aAAa,CAAgC;IACzFC,cAAc;QAAEC,SAAS;IAAK;AAChC,GAAG;AAEH,OAAO,MAAMC,8BAA8B,IAAML,MAAMM,UAAU,CAACL,0BAA0B"}
@@ -1,9 +0,0 @@
1
- /* eslint-disable jsdoc/require-jsdoc */ import * as React from "react";
2
- export const OnboardingTooltipContext = /*#__PURE__*/ React.createContext({
3
- containerRef: {
4
- current: null
5
- }
6
- });
7
- export const useOnboardingTooltipContext = ()=>React.useContext(OnboardingTooltipContext);
8
-
9
- //# sourceMappingURL=OnboardingTooltipContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/OnboardingTooltip/OnboardingTooltipContext.tsx"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\nimport * as React from 'react';\n\nexport interface OnboardingTooltipContextValue {\n containerRef: React.RefObject<HTMLElement | null>;\n}\n\nexport const OnboardingTooltipContext = React.createContext<OnboardingTooltipContextValue>({\n containerRef: { current: null },\n});\n\nexport const useOnboardingTooltipContext = () => React.useContext(OnboardingTooltipContext);\n"],"names":["React","OnboardingTooltipContext","createContext","containerRef","current","useOnboardingTooltipContext","useContext"],"mappings":"AAAA,sCAAsC,GAEtC,YAAYA,WAAW,QAAQ;AAM/B,OAAO,MAAMC,yCAA2BD,MAAME,aAAa,CAAgC;IACzFC,cAAc;QAAEC,SAAS;IAAK;AAChC,GAAG;AAEH,OAAO,MAAMC,8BAA8B,IAAML,MAAMM,UAAU,CAACL,0BAA0B"}
@@ -1,13 +0,0 @@
1
- /* eslint-disable jsdoc/require-jsdoc */
2
-
3
- import * as React from 'react';
4
-
5
- export interface OnboardingTooltipContextValue {
6
- containerRef: React.RefObject<HTMLElement | null>;
7
- }
8
-
9
- export const OnboardingTooltipContext = React.createContext<OnboardingTooltipContextValue>({
10
- containerRef: { current: null },
11
- });
12
-
13
- export const useOnboardingTooltipContext = () => React.useContext(OnboardingTooltipContext);