@vkontakte/vkui 5.0.1 → 5.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/Alert/Alert.d.ts +3 -3
- package/dist/cjs/components/Alert/Alert.js +13 -9
- package/dist/cjs/components/Alert/Alert.js.map +1 -1
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cjs/components/CustomScrollView/CustomScrollView.js +3 -1
- package/dist/cjs/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +4 -0
- package/dist/cjs/components/CustomSelect/CustomSelect.js +11 -6
- package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cjs/components/CustomSelectOption/CustomSelectOption.d.ts +1 -0
- package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js +2 -1
- package/dist/cjs/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/cjs/components/FocusVisible/FocusVisible.js +2 -2
- package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js +3 -4
- package/dist/cjs/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/cjs/components/Popover/Popover.js +10 -1
- package/dist/cjs/components/Popover/Popover.js.map +1 -1
- package/dist/cjs/components/SegmentedControl/SegmentedControl.js +3 -2
- package/dist/cjs/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/cjs/components/SplitCol/SplitCol.js +43 -26
- package/dist/cjs/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/cjs/components/Tappable/Tappable.d.ts +2 -2
- package/dist/cjs/components/Tappable/Tappable.js.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.d.ts +4 -0
- package/dist/cjs/components/Tooltip/Tooltip.js +3 -2
- package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cjs/hooks/useEventListener.js +6 -4
- package/dist/cjs/hooks/useEventListener.js.map +1 -1
- package/dist/cjs/hooks/useMediaQueries.js +1 -0
- package/dist/cjs/hooks/useMediaQueries.js.map +1 -1
- package/dist/cjs/lib/adaptivity/types.d.ts +1 -1
- package/dist/cjs/lib/adaptivity/types.js.map +1 -1
- package/dist/cjs/lib/browser.js +0 -1
- package/dist/cjs/lib/browser.js.map +1 -1
- package/dist/cjs/lib/utils.d.ts +0 -1
- package/dist/cjs/lib/utils.js +0 -5
- package/dist/cjs/lib/utils.js.map +1 -1
- package/dist/cjs/shared/breakpoints.d.ts +1 -0
- package/dist/cjs/shared/breakpoints.js +1 -0
- package/dist/cjs/shared/breakpoints.js.map +1 -1
- package/dist/cjs/types.d.ts +6 -0
- package/dist/cjs/types.js.map +1 -1
- package/dist/components/Alert/Alert.d.ts +3 -3
- package/dist/components/Alert/Alert.js +13 -9
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/components/CustomScrollView/CustomScrollView.js +3 -1
- package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +4 -0
- package/dist/components/CustomSelect/CustomSelect.js +11 -6
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/CustomSelectOption/CustomSelectOption.d.ts +1 -0
- package/dist/components/CustomSelectOption/CustomSelectOption.js +2 -1
- package/dist/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/components/FocusVisible/FocusVisible.js +2 -2
- package/dist/components/PanelHeaderButton/PanelHeaderButton.js +3 -4
- package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/components/Popover/Popover.js +10 -1
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.js +4 -3
- package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/components/SplitCol/SplitCol.js +43 -26
- package/dist/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/components/Tappable/Tappable.d.ts +2 -2
- package/dist/components/Tappable/Tappable.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +4 -0
- package/dist/components/Tooltip/Tooltip.js +3 -2
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components.css +4 -4
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/Alert/Alert.d.ts +3 -3
- package/dist/cssm/components/Alert/Alert.js +13 -9
- package/dist/cssm/components/Alert/Alert.js.map +1 -1
- package/dist/cssm/components/Alert/Alert.module.css +1 -1
- package/dist/cssm/components/Banner/Banner.module.css +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cssm/components/ChipsSelect/ChipsSelect.module.css +1 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js +3 -1
- package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +4 -0
- package/dist/cssm/components/CustomSelect/CustomSelect.js +11 -6
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.module.css +1 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.d.ts +1 -0
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js +2 -1
- package/dist/cssm/components/CustomSelectOption/CustomSelectOption.js.map +1 -1
- package/dist/cssm/components/FocusVisible/FocusVisible.js +2 -2
- package/dist/cssm/components/FocusVisible/FocusVisible.module.css +1 -1
- package/dist/cssm/components/FormField/FormField.module.css +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.module.css +1 -1
- package/dist/cssm/components/Input/Input.module.css +1 -1
- package/dist/cssm/components/PanelHeader/PanelHeader.module.css +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js +3 -4
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +1 -1
- package/dist/cssm/components/Popover/Popover.js +10 -1
- package/dist/cssm/components/Popover/Popover.js.map +1 -1
- package/dist/cssm/components/SegmentedControl/SegmentedControl.js +4 -3
- package/dist/cssm/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.module.css +1 -1
- package/dist/cssm/components/SplitCol/SplitCol.js +43 -26
- package/dist/cssm/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/cssm/components/SubnavigationButton/SubnavigationButton.module.css +1 -1
- package/dist/cssm/components/Tappable/Tappable.d.ts +2 -2
- package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
- package/dist/cssm/components/Tappable/Tappable.module.css +1 -1
- package/dist/cssm/components/Textarea/Textarea.module.css +1 -1
- package/dist/cssm/components/Tooltip/Tooltip.d.ts +4 -0
- package/dist/cssm/components/Tooltip/Tooltip.js +3 -2
- package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cssm/components/WriteBar/WriteBar.module.css +1 -1
- package/dist/cssm/hooks/useEventListener.js +6 -4
- package/dist/cssm/hooks/useEventListener.js.map +1 -1
- package/dist/cssm/hooks/useMediaQueries.js +1 -0
- package/dist/cssm/hooks/useMediaQueries.js.map +1 -1
- package/dist/cssm/lib/adaptivity/types.d.ts +1 -1
- package/dist/cssm/lib/adaptivity/types.js.map +1 -1
- package/dist/cssm/lib/browser.js +0 -1
- package/dist/cssm/lib/browser.js.map +1 -1
- package/dist/cssm/lib/utils.d.ts +0 -1
- package/dist/cssm/lib/utils.js +0 -3
- package/dist/cssm/lib/utils.js.map +1 -1
- package/dist/cssm/shared/breakpoints.d.ts +1 -0
- package/dist/cssm/shared/breakpoints.js +1 -0
- package/dist/cssm/shared/breakpoints.js.map +1 -1
- package/dist/cssm/styles/components.css +4 -4
- package/dist/cssm/types.d.ts +6 -0
- package/dist/cssm/types.js.map +1 -1
- package/dist/hooks/useEventListener.js +6 -4
- package/dist/hooks/useEventListener.js.map +1 -1
- package/dist/hooks/useMediaQueries.js +1 -0
- package/dist/hooks/useMediaQueries.js.map +1 -1
- package/dist/lib/adaptivity/types.d.ts +1 -1
- package/dist/lib/adaptivity/types.js.map +1 -1
- package/dist/lib/browser.js +0 -1
- package/dist/lib/browser.js.map +1 -1
- package/dist/lib/utils.d.ts +0 -1
- package/dist/lib/utils.js +0 -3
- package/dist/lib/utils.js.map +1 -1
- package/dist/shared/breakpoints.d.ts +1 -0
- package/dist/shared/breakpoints.js +1 -0
- package/dist/shared/breakpoints.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.js.map +1 -1
- package/dist/vkui.css +4 -4
- package/dist/vkui.css.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SplitCol.js","names":["
|
|
1
|
+
{"version":3,"file":"SplitCol.js","names":["useTransitionAnimate","animateProp","useAdaptivity","viewWidth","React","useState","Boolean","animate","setAnimate","mediaQueries","useMediaQueries","useEffect","undefined","ViewWidth","TABLET","listener","smallTabletPlus","matches","addEventListener","removeEventListener","SplitColContext","createContext","colRef","useSplitCol","useContext","SplitCol","props","children","width","maxWidth","minWidth","spaced","fixed","style","autoSpaced","stretchedOnMobile","className","restProps","baseRef","useRef","sizeX","contextValue","useObjectMemo","classNamesString","getSizeXClassName","getViewWidthClassName"],"sources":["../../../../src/components/SplitCol/SplitCol.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { getSizeXClassName } from \"../../helpers/getSizeXClassName\";\nimport { getViewWidthClassName } from \"../../helpers/getViewWidthClassName\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport { ViewWidth } from \"../../lib/adaptivity\";\nimport { useObjectMemo } from \"../../hooks/useObjectMemo\";\nimport { useMediaQueries } from \"../../hooks/useMediaQueries\";\nimport styles from \"./SplitCol.module.css\";\n\nfunction useTransitionAnimate(animateProp?: boolean) {\n const { viewWidth } = useAdaptivity();\n const [animate, setAnimate] = React.useState(Boolean(animateProp));\n const mediaQueries = useMediaQueries();\n\n React.useEffect(() => {\n if (animateProp !== undefined) {\n setAnimate(animateProp);\n return;\n }\n\n if (viewWidth !== undefined) {\n setAnimate(viewWidth < ViewWidth.TABLET);\n return;\n }\n\n // eslint-disable-next-line no-restricted-properties\n const listener = () => setAnimate(!mediaQueries.smallTabletPlus.matches);\n listener();\n\n mediaQueries.smallTabletPlus.addEventListener(\"change\", listener);\n return () => {\n mediaQueries.smallTabletPlus.removeEventListener(\"change\", listener);\n };\n }, [animateProp, viewWidth, mediaQueries]);\n\n return animate;\n}\n\nexport interface SplitColContextProps {\n colRef: React.RefObject<HTMLDivElement> | null;\n animate: boolean;\n}\n\nexport const SplitColContext = React.createContext<SplitColContextProps>({\n colRef: null,\n animate: true,\n});\n\nexport const useSplitCol = () => React.useContext(SplitColContext);\n\nexport interface SplitColProps extends React.HTMLAttributes<HTMLDivElement> {\n width?: number | string;\n maxWidth?: number | string;\n minWidth?: number | string;\n /**\n * Если false, то переходы между Panel происходят без анимации\n */\n animate?: boolean;\n /**\n * Если true, то добавляются боковые отступы фиксированной величины\n */\n spaced?: boolean;\n /**\n * Если true, то добавляются боковые отступы фиксированной величины при ширине больше чем `smallTablet`\n */\n autoSpaced?: boolean;\n fixed?: boolean;\n /**\n * Если true, то ширина контейнера становится 100% при ширине меньше чем `tablet`\n */\n stretchedOnMobile?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/SplitCol\n */\nexport const SplitCol = (props: SplitColProps) => {\n const {\n children,\n width,\n maxWidth,\n minWidth,\n spaced,\n animate: animateProp,\n fixed,\n style,\n autoSpaced,\n stretchedOnMobile,\n className,\n ...restProps\n } = props;\n const baseRef = React.useRef<HTMLDivElement>(null);\n const { viewWidth, sizeX } = useAdaptivity();\n const animate = useTransitionAnimate(animateProp);\n\n const contextValue = useObjectMemo({\n colRef: baseRef,\n animate,\n });\n\n return (\n <div\n {...restProps}\n style={{\n ...style,\n width: width,\n maxWidth: maxWidth,\n minWidth: minWidth,\n }}\n ref={baseRef}\n className={classNamesString(\n styles[\"SplitCol\"],\n getSizeXClassName(styles[\"SplitCol\"], sizeX),\n getViewWidthClassName(styles[\"SplitCol\"], viewWidth),\n spaced && styles[\"SplitCol--spaced\"],\n spaced === undefined && styles[\"SplitCol--spaced-none\"],\n autoSpaced && styles[\"SplitCol--spaced-auto\"],\n fixed && styles[\"SplitCol--fixed\"],\n stretchedOnMobile && styles[\"SplitCol--stretched-on-mobile\"],\n className\n )}\n >\n <SplitColContext.Provider value={contextValue}>\n {fixed ? (\n <div className={styles[\"SplitCol__fixedInner\"]}>{children}</div>\n ) : (\n children\n )}\n </SplitColContext.Provider>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { TouchProps } from "../Touch/Touch";
|
|
3
|
-
import { HasComponent, HasRootRef } from "../../types";
|
|
3
|
+
import { AnchorHTMLAttributesOnly, HasComponent, HasRootRef } from "../../types";
|
|
4
4
|
import { FocusVisibleMode } from "../FocusVisible/FocusVisible";
|
|
5
5
|
declare type StateMode = "opacity" | "background";
|
|
6
|
-
export declare type TappableElementProps = Omit<React.AllHTMLAttributes<HTMLElement>, "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onMouseDown" | "onMouseMove" | "onMouseUp" | "onMouseLeave"
|
|
6
|
+
export declare type TappableElementProps = Omit<React.AllHTMLAttributes<HTMLElement>, "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onMouseDown" | "onMouseMove" | "onMouseUp" | "onMouseLeave"> & AnchorHTMLAttributesOnly;
|
|
7
7
|
export interface TappableProps extends TappableElementProps, HasRootRef<HTMLElement>, HasComponent, Pick<TouchProps, "onStart" | "onEnd" | "onMove"> {
|
|
8
8
|
/**
|
|
9
9
|
* Длительность показа active-состояния
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tappable.js","names":["sizeXClassNames","none","compact","regular","WAVE_LIVE","ACTIVE_DELAY","ACTIVE_EFFECT_DELAY","activeBus","mitt","TapState","pending","active","exiting","TappableContext","React","createContext","onHoverChange","noop","isPresetStateMode","stateMode","useActivity","hasActive","stopDelay","id","useMemo","Math","round","random","toString","useState","activity","setActivity","_stop","start","delayStart","activeTimeout","useTimeout","stopTimeout","useIsomorphicLayoutEffect","set","clear","emit","onActiveChange","activeId","on","off","stop","delay","Tappable","children","Component","onClick","_onKeyDown","onKeyDown","activeEffectDelay","stopPropagation","getRootRef","hasHover","_hasHover","hoverMode","_hasActive","activeMode","focusVisibleMode","onEnter","onLeave","className","props","href","useContext","insideTouchRoot","TouchRootContext","platform","usePlatform","useFocusVisible","focusVisible","onBlur","onFocus","useAdaptivity","sizeX","hasPointerContext","useAdaptivityHasPointer","hasHoverContext","useAdaptivityHasHover","clicks","setClicks","childHover","setChildHover","useBooleanState","_hovered","value","setHoveredTrue","setTrue","setHoveredFalse","setFalse","hovered","disabled","isCustomElement","contentEditable","isPresetHoverMode","isPresetActiveMode","isPresetFocusVisibleMode","includes","containerRef","useExternRef","childContext","useRef","current","e","shouldTriggerClickOnEnterOrSpace","preventDefault","click","needWaves","Platform","ANDROID","clearClicks","addClick","x","y","dateNow","Date","now","filteredClicks","filter","onStart","originalEvent","touches","length","getOffsetRect","top","left","coordX","coordY","onMove","isSlide","onEnd","duration","activeDuration","classes","classNamesString","IOS","styles","handlers","callMultiple","role","undefined","map","wave"],"sources":["../../../../src/components/Tappable/Tappable.tsx"],"sourcesContent":["import * as React from \"react\";\nimport mitt from \"mitt\";\nimport { noop } from \"../../lib/utils\";\nimport { Touch, TouchEvent, TouchProps } from \"../Touch/Touch\";\nimport TouchRootContext from \"../Touch/TouchContext\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { Platform } from \"../../lib/platform\";\nimport { getOffsetRect } from \"../../lib/offset\";\nimport { coordX, coordY } from \"../../lib/touch\";\nimport { HasComponent, HasRootRef } from \"../../types\";\nimport { shouldTriggerClickOnEnterOrSpace } from \"../../lib/accessibility\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { FocusVisible, FocusVisibleMode } from \"../FocusVisible/FocusVisible\";\nimport { useTimeout } from \"../../hooks/useTimeout\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { useFocusVisible } from \"../../hooks/useFocusVisible\";\nimport { callMultiple } from \"../../lib/callMultiple\";\nimport { useBooleanState } from \"../../hooks/useBooleanState\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport { useAdaptivityHasHover } from \"../../hooks/useAdaptivityHasHover\";\nimport { useAdaptivityHasPointer } from \"../../hooks/useAdaptivityHasPointer\";\nimport styles from \"./Tappable.module.css\";\n\nconst sizeXClassNames = {\n none: styles[\"Tappable--sizeX-none\"],\n compact: styles[\"Tappable--sizeX-compact\"],\n regular: styles[\"Tappable--sizeX-regular\"],\n};\n\ntype StateMode = \"opacity\" | \"background\";\n\nconst WAVE_LIVE = 225;\n\nexport type TappableElementProps = Omit<\n React.AllHTMLAttributes<HTMLElement>,\n | \"onTouchStart\"\n | \"onTouchMove\"\n | \"onTouchEnd\"\n | \"onTouchCancel\"\n | \"onMouseDown\"\n | \"onMouseMove\"\n | \"onMouseUp\"\n | \"onMouseLeave\"\n>;\n\nexport interface TappableProps\n extends TappableElementProps,\n HasRootRef<HTMLElement>,\n HasComponent,\n Pick<TouchProps, \"onStart\" | \"onEnd\" | \"onMove\"> {\n /**\n * Длительность показа active-состояния\n */\n activeEffectDelay?: number;\n stopPropagation?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на hover-состояние\n */\n hasHover?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на active-состояние\n */\n hasActive?: boolean;\n /**\n * Стиль подсветки active-состояния. Если передать произвольную строку, она добавится как css-класс во время active\n */\n activeMode?: StateMode | string;\n /**\n * Стиль подсветки hover-состояния. Если передать произвольную строку, она добавится как css-класс во время hover\n */\n hoverMode?: StateMode | string;\n /**\n * Стиль аутлайна focus visible. Если передать произвольную строку, она добавится как css-класс во время focus-visible\n */\n focusVisibleMode?: FocusVisibleMode | string;\n children?: React.ReactNode;\n onEnter?(outputEvent: MouseEvent): void;\n onLeave?(outputEvent: MouseEvent): void;\n}\n\ninterface Wave {\n x: number;\n y: number;\n id: number;\n}\n\nexport interface RootComponentProps extends TouchProps {\n ref?: React.Ref<HTMLElement>;\n}\n\nexport const ACTIVE_DELAY = 70;\nexport const ACTIVE_EFFECT_DELAY = 600;\n\nconst activeBus = mitt<{ active: string }>();\nconst TapState = { none: 0, pending: 1, active: 2, exiting: 3 } as const;\n\ntype TappableContextInterface = { onHoverChange: (s: boolean) => void };\nconst TappableContext = React.createContext<TappableContextInterface>({\n onHoverChange: noop,\n});\n\nfunction isPresetStateMode(\n stateMode: StateMode | string\n): stateMode is StateMode {\n switch (stateMode) {\n case \"opacity\":\n case \"background\":\n return true;\n default:\n return false;\n }\n}\n\nfunction useActivity(hasActive: boolean, stopDelay: number) {\n const id = React.useMemo(\n () => Math.round(Math.random() * 1e8).toString(16),\n []\n );\n\n const [activity, setActivity] = React.useState<\n typeof TapState[keyof typeof TapState]\n >(TapState.none);\n const _stop = () => setActivity(TapState.none);\n const start = () => hasActive && setActivity(TapState.active);\n const delayStart = () => {\n hasActive && setActivity(TapState.pending);\n };\n\n const activeTimeout = useTimeout(start, ACTIVE_DELAY);\n const stopTimeout = useTimeout(_stop, stopDelay);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.pending) {\n activeTimeout.set();\n return activeTimeout.clear;\n }\n if (activity === TapState.exiting) {\n return stopTimeout.clear;\n }\n if (activity === TapState.active) {\n activeBus.emit(\"active\", id);\n }\n return noop;\n }, [activity]);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.none) {\n return noop;\n }\n const onActiveChange = (activeId: string) => {\n activeId !== id && _stop();\n };\n activeBus.on(\"active\", onActiveChange);\n return () => activeBus.off(\"active\", onActiveChange);\n }, [activity === TapState.none]);\n\n useIsomorphicLayoutEffect(() => {\n !hasActive && _stop();\n }, [hasActive]);\n\n const stop = (delay?: number) => {\n if (delay) {\n setActivity(TapState.exiting);\n return stopTimeout.set(delay);\n }\n _stop();\n };\n\n return [activity, { delayStart, start, stop }] as const;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tappable\n */\nexport const Tappable = ({\n children,\n Component,\n onClick,\n onKeyDown: _onKeyDown,\n activeEffectDelay = ACTIVE_EFFECT_DELAY,\n stopPropagation = false,\n getRootRef,\n hasHover: _hasHover = true,\n hoverMode = \"background\",\n hasActive: _hasActive = true,\n activeMode = \"background\",\n focusVisibleMode = \"inside\",\n onEnter,\n onLeave,\n className,\n ...props\n}: TappableProps) => {\n Component = Component || ((props.href ? \"a\" : \"div\") as React.ElementType);\n\n const { onHoverChange } = React.useContext(TappableContext);\n const insideTouchRoot = React.useContext(TouchRootContext);\n const platform = usePlatform();\n const { focusVisible, onBlur, onFocus } = useFocusVisible();\n const { sizeX = \"none\" } = useAdaptivity();\n const hasPointerContext = useAdaptivityHasPointer();\n const hasHoverContext = useAdaptivityHasHover();\n\n const [clicks, setClicks] = React.useState<Wave[]>([]);\n const [childHover, setChildHover] = React.useState(false);\n const {\n value: _hovered,\n setTrue: setHoveredTrue,\n setFalse: setHoveredFalse,\n } = useBooleanState(false);\n\n const hovered = _hovered && !props.disabled;\n const hasActive = _hasActive && !childHover && !props.disabled;\n const hasHover = hasHoverContext === true && _hasHover && !childHover;\n const isCustomElement =\n Component !== \"a\" &&\n Component !== \"button\" &&\n Component !== \"label\" &&\n !props.contentEditable;\n const isPresetHoverMode = isPresetStateMode(hoverMode);\n const isPresetActiveMode = isPresetStateMode(activeMode);\n const isPresetFocusVisibleMode = [\"inside\", \"outside\"].includes(\n focusVisibleMode\n );\n\n const [activity, { start, stop, delayStart }] = useActivity(\n hasActive,\n activeEffectDelay\n );\n const active = activity === TapState.active || activity === TapState.exiting;\n\n const containerRef = useExternRef(getRootRef);\n\n // hover propagation\n const childContext = React.useRef({ onHoverChange: setChildHover }).current;\n useIsomorphicLayoutEffect(() => {\n if (!hovered) {\n return noop;\n }\n onHoverChange(true);\n return () => onHoverChange(false);\n }, [hovered]);\n\n /*\n * [a11y]\n * Обрабатывает событие onkeydown\n * для кастомных доступных элементов:\n * - role=\"link\" (активация по Enter)\n * - role=\"button\" (активация по Space и Enter)\n */\n function onKeyDown(e: React.KeyboardEvent<HTMLElement>) {\n if (isCustomElement && shouldTriggerClickOnEnterOrSpace(e)) {\n e.preventDefault();\n containerRef.current?.click();\n }\n }\n\n const needWaves =\n platform === Platform.ANDROID &&\n !hasPointerContext &&\n hasActive &&\n activeMode === \"background\";\n\n const clearClicks = useTimeout(() => setClicks([]), WAVE_LIVE);\n\n function addClick(x: number, y: number) {\n const dateNow = Date.now();\n const filteredClicks = clicks.filter(\n (click) => click.id + WAVE_LIVE > dateNow\n );\n\n setClicks([...filteredClicks, { x, y, id: dateNow }]);\n clearClicks.set();\n }\n\n function onStart({ originalEvent }: TouchEvent) {\n if (hasActive) {\n if (originalEvent.touches && originalEvent.touches.length > 1) {\n // r сожалению я так и не понял, что это делает и можно ли упихнуть его в Touch\n return stop();\n }\n\n if (needWaves) {\n const { top, left } = getOffsetRect(containerRef.current);\n const x = coordX(originalEvent) - (left ?? 0);\n const y = coordY(originalEvent) - (top ?? 0);\n addClick(x, y);\n }\n\n delayStart();\n }\n }\n\n function onMove({ isSlide }: TouchEvent) {\n if (isSlide) {\n stop();\n }\n }\n\n function onEnd({ duration }: TouchEvent) {\n if (activity === TapState.none) {\n return;\n }\n if (activity === TapState.pending) {\n // активировать при коротком тапе\n start();\n }\n\n // отключить без задержки при длинном тапе\n const activeDuration = duration - ACTIVE_DELAY;\n stop(activeDuration >= 100 ? 0 : activeEffectDelay - activeDuration);\n }\n\n const classes = classNamesString(\n className,\n styles[\"Tappable\"],\n platform === Platform.IOS && styles[\"Tappable--ios\"],\n sizeXClassNames[sizeX],\n hasHoverContext && styles[\"Tappable--hover-has\"],\n hasActive && styles[\"Tappable--hasActive\"],\n hasHover && hovered && !isPresetHoverMode && hoverMode,\n hasActive && active && !isPresetActiveMode && activeMode,\n focusVisible && !isPresetFocusVisibleMode && focusVisibleMode,\n hasActive && active && styles[\"Tappable--active\"],\n hasHover &&\n hovered &&\n isPresetHoverMode &&\n styles[`Tappable--hover-${hoverMode}`],\n hasActive &&\n active &&\n isPresetActiveMode &&\n styles[`Tappable--active-${activeMode}`],\n focusVisible && styles[\"Tappable--focus-visible\"]\n );\n\n const handlers: RootComponentProps = {\n onStart: callMultiple(onStart, props.onStart),\n onMove: callMultiple(onMove, props.onMove),\n onEnd: callMultiple(onEnd, props.onEnd),\n onClick,\n onKeyDown: callMultiple(onKeyDown, _onKeyDown),\n };\n const role = props.href ? \"link\" : \"button\";\n\n return (\n <Touch\n onEnter={callMultiple(setHoveredTrue, onEnter)}\n onLeave={callMultiple(setHoveredFalse, onLeave)}\n type={Component === \"button\" ? \"button\" : undefined}\n tabIndex={isCustomElement && !props.disabled ? 0 : undefined}\n role={isCustomElement ? role : undefined}\n aria-disabled={isCustomElement ? props.disabled : undefined}\n stopPropagation={stopPropagation && !insideTouchRoot && !props.disabled}\n {...props}\n slideThreshold={20}\n usePointerHover\n className={classes}\n Component={Component}\n getRootRef={containerRef}\n onBlur={callMultiple(onBlur, props.onBlur)}\n onFocus={callMultiple(onFocus, props.onFocus)}\n {...(props.disabled ? {} : handlers)}\n >\n <TappableContext.Provider value={childContext}>\n {children}\n </TappableContext.Provider>\n {needWaves && (\n <span aria-hidden=\"true\" className={styles.Tappable__waves}>\n {clicks.map((wave) => (\n <span\n key={wave.id}\n className={styles.Tappable__wave}\n style={{ top: wave.y, left: wave.x }}\n />\n ))}\n </span>\n )}\n {((hasHover && hoverMode === \"background\") ||\n (hasActive && activeMode === \"background\")) && (\n <span aria-hidden=\"true\" className={styles.Tappable__stateLayer} />\n )}\n {!props.disabled && isPresetFocusVisibleMode && (\n <FocusVisible mode={focusVisibleMode as FocusVisibleMode} />\n )}\n </Touch>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tappable.js","names":["sizeXClassNames","none","compact","regular","WAVE_LIVE","ACTIVE_DELAY","ACTIVE_EFFECT_DELAY","activeBus","mitt","TapState","pending","active","exiting","TappableContext","React","createContext","onHoverChange","noop","isPresetStateMode","stateMode","useActivity","hasActive","stopDelay","id","useMemo","Math","round","random","toString","useState","activity","setActivity","_stop","start","delayStart","activeTimeout","useTimeout","stopTimeout","useIsomorphicLayoutEffect","set","clear","emit","onActiveChange","activeId","on","off","stop","delay","Tappable","children","Component","onClick","_onKeyDown","onKeyDown","activeEffectDelay","stopPropagation","getRootRef","hasHover","_hasHover","hoverMode","_hasActive","activeMode","focusVisibleMode","onEnter","onLeave","className","props","href","useContext","insideTouchRoot","TouchRootContext","platform","usePlatform","useFocusVisible","focusVisible","onBlur","onFocus","useAdaptivity","sizeX","hasPointerContext","useAdaptivityHasPointer","hasHoverContext","useAdaptivityHasHover","clicks","setClicks","childHover","setChildHover","useBooleanState","_hovered","value","setHoveredTrue","setTrue","setHoveredFalse","setFalse","hovered","disabled","isCustomElement","contentEditable","isPresetHoverMode","isPresetActiveMode","isPresetFocusVisibleMode","includes","containerRef","useExternRef","childContext","useRef","current","e","shouldTriggerClickOnEnterOrSpace","preventDefault","click","needWaves","Platform","ANDROID","clearClicks","addClick","x","y","dateNow","Date","now","filteredClicks","filter","onStart","originalEvent","touches","length","getOffsetRect","top","left","coordX","coordY","onMove","isSlide","onEnd","duration","activeDuration","classes","classNamesString","IOS","styles","handlers","callMultiple","role","undefined","map","wave"],"sources":["../../../../src/components/Tappable/Tappable.tsx"],"sourcesContent":["import * as React from \"react\";\nimport mitt from \"mitt\";\nimport { noop } from \"../../lib/utils\";\nimport { Touch, TouchEvent, TouchProps } from \"../Touch/Touch\";\nimport TouchRootContext from \"../Touch/TouchContext\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { Platform } from \"../../lib/platform\";\nimport { getOffsetRect } from \"../../lib/offset\";\nimport { coordX, coordY } from \"../../lib/touch\";\nimport {\n AnchorHTMLAttributesOnly,\n HasComponent,\n HasRootRef,\n} from \"../../types\";\nimport { shouldTriggerClickOnEnterOrSpace } from \"../../lib/accessibility\";\nimport { useIsomorphicLayoutEffect } from \"../../lib/useIsomorphicLayoutEffect\";\nimport { FocusVisible, FocusVisibleMode } from \"../FocusVisible/FocusVisible\";\nimport { useTimeout } from \"../../hooks/useTimeout\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { usePlatform } from \"../../hooks/usePlatform\";\nimport { useFocusVisible } from \"../../hooks/useFocusVisible\";\nimport { callMultiple } from \"../../lib/callMultiple\";\nimport { useBooleanState } from \"../../hooks/useBooleanState\";\nimport { useAdaptivity } from \"../../hooks/useAdaptivity\";\nimport { useAdaptivityHasHover } from \"../../hooks/useAdaptivityHasHover\";\nimport { useAdaptivityHasPointer } from \"../../hooks/useAdaptivityHasPointer\";\nimport styles from \"./Tappable.module.css\";\n\nconst sizeXClassNames = {\n none: styles[\"Tappable--sizeX-none\"],\n compact: styles[\"Tappable--sizeX-compact\"],\n regular: styles[\"Tappable--sizeX-regular\"],\n};\n\ntype StateMode = \"opacity\" | \"background\";\n\nconst WAVE_LIVE = 225;\n\nexport type TappableElementProps = Omit<\n React.AllHTMLAttributes<HTMLElement>,\n | \"onTouchStart\"\n | \"onTouchMove\"\n | \"onTouchEnd\"\n | \"onTouchCancel\"\n | \"onMouseDown\"\n | \"onMouseMove\"\n | \"onMouseUp\"\n | \"onMouseLeave\"\n> &\n AnchorHTMLAttributesOnly; // В AllHTMLAttributes не хватает типов для ссылок\n\nexport interface TappableProps\n extends TappableElementProps,\n HasRootRef<HTMLElement>,\n HasComponent,\n Pick<TouchProps, \"onStart\" | \"onEnd\" | \"onMove\"> {\n /**\n * Длительность показа active-состояния\n */\n activeEffectDelay?: number;\n stopPropagation?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на hover-состояние\n */\n hasHover?: boolean;\n /**\n * Указывает, должен ли компонент реагировать на active-состояние\n */\n hasActive?: boolean;\n /**\n * Стиль подсветки active-состояния. Если передать произвольную строку, она добавится как css-класс во время active\n */\n activeMode?: StateMode | string;\n /**\n * Стиль подсветки hover-состояния. Если передать произвольную строку, она добавится как css-класс во время hover\n */\n hoverMode?: StateMode | string;\n /**\n * Стиль аутлайна focus visible. Если передать произвольную строку, она добавится как css-класс во время focus-visible\n */\n focusVisibleMode?: FocusVisibleMode | string;\n children?: React.ReactNode;\n onEnter?(outputEvent: MouseEvent): void;\n onLeave?(outputEvent: MouseEvent): void;\n}\n\ninterface Wave {\n x: number;\n y: number;\n id: number;\n}\n\nexport interface RootComponentProps extends TouchProps {\n ref?: React.Ref<HTMLElement>;\n}\n\nexport const ACTIVE_DELAY = 70;\nexport const ACTIVE_EFFECT_DELAY = 600;\n\nconst activeBus = mitt<{ active: string }>();\nconst TapState = { none: 0, pending: 1, active: 2, exiting: 3 } as const;\n\ntype TappableContextInterface = { onHoverChange: (s: boolean) => void };\nconst TappableContext = React.createContext<TappableContextInterface>({\n onHoverChange: noop,\n});\n\nfunction isPresetStateMode(\n stateMode: StateMode | string\n): stateMode is StateMode {\n switch (stateMode) {\n case \"opacity\":\n case \"background\":\n return true;\n default:\n return false;\n }\n}\n\nfunction useActivity(hasActive: boolean, stopDelay: number) {\n const id = React.useMemo(\n () => Math.round(Math.random() * 1e8).toString(16),\n []\n );\n\n const [activity, setActivity] = React.useState<\n typeof TapState[keyof typeof TapState]\n >(TapState.none);\n const _stop = () => setActivity(TapState.none);\n const start = () => hasActive && setActivity(TapState.active);\n const delayStart = () => {\n hasActive && setActivity(TapState.pending);\n };\n\n const activeTimeout = useTimeout(start, ACTIVE_DELAY);\n const stopTimeout = useTimeout(_stop, stopDelay);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.pending) {\n activeTimeout.set();\n return activeTimeout.clear;\n }\n if (activity === TapState.exiting) {\n return stopTimeout.clear;\n }\n if (activity === TapState.active) {\n activeBus.emit(\"active\", id);\n }\n return noop;\n }, [activity]);\n\n useIsomorphicLayoutEffect(() => {\n if (activity === TapState.none) {\n return noop;\n }\n const onActiveChange = (activeId: string) => {\n activeId !== id && _stop();\n };\n activeBus.on(\"active\", onActiveChange);\n return () => activeBus.off(\"active\", onActiveChange);\n }, [activity === TapState.none]);\n\n useIsomorphicLayoutEffect(() => {\n !hasActive && _stop();\n }, [hasActive]);\n\n const stop = (delay?: number) => {\n if (delay) {\n setActivity(TapState.exiting);\n return stopTimeout.set(delay);\n }\n _stop();\n };\n\n return [activity, { delayStart, start, stop }] as const;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tappable\n */\nexport const Tappable = ({\n children,\n Component,\n onClick,\n onKeyDown: _onKeyDown,\n activeEffectDelay = ACTIVE_EFFECT_DELAY,\n stopPropagation = false,\n getRootRef,\n hasHover: _hasHover = true,\n hoverMode = \"background\",\n hasActive: _hasActive = true,\n activeMode = \"background\",\n focusVisibleMode = \"inside\",\n onEnter,\n onLeave,\n className,\n ...props\n}: TappableProps) => {\n Component = Component || ((props.href ? \"a\" : \"div\") as React.ElementType);\n\n const { onHoverChange } = React.useContext(TappableContext);\n const insideTouchRoot = React.useContext(TouchRootContext);\n const platform = usePlatform();\n const { focusVisible, onBlur, onFocus } = useFocusVisible();\n const { sizeX = \"none\" } = useAdaptivity();\n const hasPointerContext = useAdaptivityHasPointer();\n const hasHoverContext = useAdaptivityHasHover();\n\n const [clicks, setClicks] = React.useState<Wave[]>([]);\n const [childHover, setChildHover] = React.useState(false);\n const {\n value: _hovered,\n setTrue: setHoveredTrue,\n setFalse: setHoveredFalse,\n } = useBooleanState(false);\n\n const hovered = _hovered && !props.disabled;\n const hasActive = _hasActive && !childHover && !props.disabled;\n const hasHover = hasHoverContext === true && _hasHover && !childHover;\n const isCustomElement =\n Component !== \"a\" &&\n Component !== \"button\" &&\n Component !== \"label\" &&\n !props.contentEditable;\n const isPresetHoverMode = isPresetStateMode(hoverMode);\n const isPresetActiveMode = isPresetStateMode(activeMode);\n const isPresetFocusVisibleMode = [\"inside\", \"outside\"].includes(\n focusVisibleMode\n );\n\n const [activity, { start, stop, delayStart }] = useActivity(\n hasActive,\n activeEffectDelay\n );\n const active = activity === TapState.active || activity === TapState.exiting;\n\n const containerRef = useExternRef(getRootRef);\n\n // hover propagation\n const childContext = React.useRef({ onHoverChange: setChildHover }).current;\n useIsomorphicLayoutEffect(() => {\n if (!hovered) {\n return noop;\n }\n onHoverChange(true);\n return () => onHoverChange(false);\n }, [hovered]);\n\n /*\n * [a11y]\n * Обрабатывает событие onkeydown\n * для кастомных доступных элементов:\n * - role=\"link\" (активация по Enter)\n * - role=\"button\" (активация по Space и Enter)\n */\n function onKeyDown(e: React.KeyboardEvent<HTMLElement>) {\n if (isCustomElement && shouldTriggerClickOnEnterOrSpace(e)) {\n e.preventDefault();\n containerRef.current?.click();\n }\n }\n\n const needWaves =\n platform === Platform.ANDROID &&\n !hasPointerContext &&\n hasActive &&\n activeMode === \"background\";\n\n const clearClicks = useTimeout(() => setClicks([]), WAVE_LIVE);\n\n function addClick(x: number, y: number) {\n const dateNow = Date.now();\n const filteredClicks = clicks.filter(\n (click) => click.id + WAVE_LIVE > dateNow\n );\n\n setClicks([...filteredClicks, { x, y, id: dateNow }]);\n clearClicks.set();\n }\n\n function onStart({ originalEvent }: TouchEvent) {\n if (hasActive) {\n if (originalEvent.touches && originalEvent.touches.length > 1) {\n // r сожалению я так и не понял, что это делает и можно ли упихнуть его в Touch\n return stop();\n }\n\n if (needWaves) {\n const { top, left } = getOffsetRect(containerRef.current);\n const x = coordX(originalEvent) - (left ?? 0);\n const y = coordY(originalEvent) - (top ?? 0);\n addClick(x, y);\n }\n\n delayStart();\n }\n }\n\n function onMove({ isSlide }: TouchEvent) {\n if (isSlide) {\n stop();\n }\n }\n\n function onEnd({ duration }: TouchEvent) {\n if (activity === TapState.none) {\n return;\n }\n if (activity === TapState.pending) {\n // активировать при коротком тапе\n start();\n }\n\n // отключить без задержки при длинном тапе\n const activeDuration = duration - ACTIVE_DELAY;\n stop(activeDuration >= 100 ? 0 : activeEffectDelay - activeDuration);\n }\n\n const classes = classNamesString(\n className,\n styles[\"Tappable\"],\n platform === Platform.IOS && styles[\"Tappable--ios\"],\n sizeXClassNames[sizeX],\n hasHoverContext && styles[\"Tappable--hover-has\"],\n hasActive && styles[\"Tappable--hasActive\"],\n hasHover && hovered && !isPresetHoverMode && hoverMode,\n hasActive && active && !isPresetActiveMode && activeMode,\n focusVisible && !isPresetFocusVisibleMode && focusVisibleMode,\n hasActive && active && styles[\"Tappable--active\"],\n hasHover &&\n hovered &&\n isPresetHoverMode &&\n styles[`Tappable--hover-${hoverMode}`],\n hasActive &&\n active &&\n isPresetActiveMode &&\n styles[`Tappable--active-${activeMode}`],\n focusVisible && styles[\"Tappable--focus-visible\"]\n );\n\n const handlers: RootComponentProps = {\n onStart: callMultiple(onStart, props.onStart),\n onMove: callMultiple(onMove, props.onMove),\n onEnd: callMultiple(onEnd, props.onEnd),\n onClick,\n onKeyDown: callMultiple(onKeyDown, _onKeyDown),\n };\n const role = props.href ? \"link\" : \"button\";\n\n return (\n <Touch\n onEnter={callMultiple(setHoveredTrue, onEnter)}\n onLeave={callMultiple(setHoveredFalse, onLeave)}\n type={Component === \"button\" ? \"button\" : undefined}\n tabIndex={isCustomElement && !props.disabled ? 0 : undefined}\n role={isCustomElement ? role : undefined}\n aria-disabled={isCustomElement ? props.disabled : undefined}\n stopPropagation={stopPropagation && !insideTouchRoot && !props.disabled}\n {...props}\n slideThreshold={20}\n usePointerHover\n className={classes}\n Component={Component}\n getRootRef={containerRef}\n onBlur={callMultiple(onBlur, props.onBlur)}\n onFocus={callMultiple(onFocus, props.onFocus)}\n {...(props.disabled ? {} : handlers)}\n >\n <TappableContext.Provider value={childContext}>\n {children}\n </TappableContext.Provider>\n {needWaves && (\n <span aria-hidden=\"true\" className={styles.Tappable__waves}>\n {clicks.map((wave) => (\n <span\n key={wave.id}\n className={styles.Tappable__wave}\n style={{ top: wave.y, left: wave.x }}\n />\n ))}\n </span>\n )}\n {((hasHover && hoverMode === \"background\") ||\n (hasActive && activeMode === \"background\")) && (\n <span aria-hidden=\"true\" className={styles.Tappable__stateLayer} />\n )}\n {!props.disabled && isPresetFocusVisibleMode && (\n <FocusVisible mode={focusVisibleMode as FocusVisibleMode} />\n )}\n </Touch>\n );\n};\n"],"mappings":"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"}
|
|
@@ -62,6 +62,10 @@ export interface TooltipProps {
|
|
|
62
62
|
* По умолчанию компонент выберет наилучшее расположение сам. Но его можно задать извне с помощью этого свойства
|
|
63
63
|
*/
|
|
64
64
|
placement?: Placement;
|
|
65
|
+
/**
|
|
66
|
+
* Пользовательские css-классы, будут добавлены на root-элемент
|
|
67
|
+
*/
|
|
68
|
+
className?: string;
|
|
65
69
|
}
|
|
66
70
|
/**
|
|
67
71
|
* @see https://vkcom.github.io/VKUI/#/Tooltip
|
|
@@ -40,12 +40,13 @@ var SimpleTooltip = /*#__PURE__*/React.forwardRef(function SimpleTooltip(_ref, r
|
|
|
40
40
|
arrow = _ref.arrow,
|
|
41
41
|
_ref$style = _ref.style,
|
|
42
42
|
popperStyles = _ref$style === void 0 ? {} : _ref$style,
|
|
43
|
-
attributes = _ref.attributes
|
|
43
|
+
attributes = _ref.attributes,
|
|
44
|
+
className = _ref.className;
|
|
44
45
|
var _ref2 = (_attributes$container = attributes === null || attributes === void 0 ? void 0 : attributes.container) !== null && _attributes$container !== void 0 ? _attributes$container : {},
|
|
45
46
|
containerClassName = _ref2.className,
|
|
46
47
|
restContainerAttributes = (0, _objectWithoutProperties2.default)(_ref2, _excluded);
|
|
47
48
|
return /*#__PURE__*/React.createElement("div", {
|
|
48
|
-
className: (0, _classNames.classNamesString)("vkuiTooltip", styles["Tooltip--appearance-".concat(appearance)])
|
|
49
|
+
className: (0, _classNames.classNamesString)("vkuiTooltip", styles["Tooltip--appearance-".concat(appearance)], className)
|
|
49
50
|
}, /*#__PURE__*/React.createElement("div", (0, _extends2.default)({
|
|
50
51
|
className: (0, _classNames.classNamesString)("vkuiTooltip__container", containerClassName),
|
|
51
52
|
ref: ref,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.js","names":["isDOMTypeElement","element","React","isValidElement","type","warn","warnOnce","IS_DEV","process","env","NODE_ENV","SimpleTooltip","forwardRef","ref","appearance","header","text","arrow","style","popperStyles","attributes","container","containerClassName","className","restContainerAttributes","classNamesString","styles","mapAlignX","x","getPlacement","alignX","alignY","filter","p","join","isVerticalPlacement","placement","startsWith","Tooltip","children","isShown","_isShown","offsetX","offsetY","onClose","cornerOffset","cornerAbsoluteOffset","restProps","useNavTransition","entering","useState","tooltipRef","setTooltipRef","target","setTarget","multiChildren","Children","count","primitiveChild","hasReactNode","JSON","stringify","Boolean","tooltipContainer","useMemo","closest","tooltipContainerAttr","strategy","position","Error","modifiers","name","options","offset","push","padding","enabled","phase","fn","state","modifiersData","undefined","y","_placement","usePopper","useDOM","document","useGlobalEventListener","passive","childRef","props","getRootRef","patchedRef","useExternRef","child","cloneElement","ReactDOM","createPortal","el","popper"],"sources":["../../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { Subhead } from \"../Typography/Subhead/Subhead\";\nimport { useNavTransition } from \"../NavTransitionContext/NavTransitionContext\";\nimport { PopperArrow } from \"../PopperArrow/PopperArrow\";\nimport { Modifier, usePopper } from \"react-popper\";\nimport { Placement } from \"@popperjs/core\";\nimport { tooltipContainerAttr } from \"./TooltipContainer\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useDOM } from \"../../lib/dom\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { hasReactNode } from \"../../lib/utils\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { HasRootRef } from \"../../types\";\nimport styles from \"./Tooltip.module.css\";\n\ninterface SimpleTooltipProps extends Partial<TooltipProps> {\n target?: HTMLDivElement;\n style?: {\n arrow: React.CSSProperties;\n container: React.CSSProperties;\n };\n attributes?: {\n arrow: React.HTMLAttributes<HTMLDivElement> | null;\n container: React.HTMLAttributes<HTMLDivElement> | null;\n };\n}\n\n/**\n * Перебиваем `ref`.\n *\n * В оригинальном `React.DOMElement` задаётся `React.LegacyRef<T>`, в котором есть `string`.\n * Когда как `{ ref: \"string\" }` уже давно депрекейтнут.\n */\ninterface DOMElement<\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element\n> extends React.DOMElement<P, T> {\n ref: React.Ref<T>;\n}\n\nconst isDOMTypeElement = <\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element\n>(\n element: React.ReactElement\n): element is DOMElement<P, T> => {\n return React.isValidElement(element) && typeof element.type === \"string\";\n};\n\nconst warn = warnOnce(\"Tooltip\");\nconst IS_DEV = process.env.NODE_ENV === \"development\";\n\nconst SimpleTooltip = React.forwardRef<HTMLDivElement, SimpleTooltipProps>(\n function SimpleTooltip(\n {\n appearance = \"accent\",\n header,\n text,\n arrow,\n style: popperStyles = {},\n attributes,\n },\n ref\n ) {\n const { className: containerClassName, ...restContainerAttributes } =\n attributes?.container ?? {};\n\n return (\n <div\n className={classNamesString(\n styles[\"Tooltip\"],\n styles[`Tooltip--appearance-${appearance}`]\n )}\n >\n <div\n className={classNamesString(\n styles[\"Tooltip__container\"],\n containerClassName\n )}\n ref={ref}\n style={popperStyles.container}\n {...restContainerAttributes}\n >\n {arrow && (\n <PopperArrow\n style={popperStyles.arrow}\n attributes={attributes?.arrow}\n arrowClassName={styles[\"Tooltip__arrow\"]}\n />\n )}\n <div className={styles[\"Tooltip__content\"]}>\n {header && (\n <Subhead weight=\"2\" className={styles[\"Tooltip__title\"]}>\n {header}\n </Subhead>\n )}\n {text && (\n <Subhead className={styles[\"Tooltip__text\"]}>{text}</Subhead>\n )}\n </div>\n </div>\n </div>\n );\n }\n);\n\nexport interface TooltipProps {\n /**\n * **Важно**: если в `children` передан React-компонент, то необходимо убедиться в том, что он поддерживает\n * свойство `getRootRef`, которое должно возвращаться ссылку на корневой DOM-элемент компонента,\n * иначе тултип показан не будет. Если передан React-element, то такой проблемы нет.\n */\n children: React.ReactElement<HasRootRef<any>> | React.ReactElement;\n /**\n * Стиль отображения подсказки\n */\n appearance?: \"accent\" | \"neutral\" | \"white\" | \"black\" | \"inversion\";\n /**\n * Если передан `false`, то рисуется просто `children`.\n */\n isShown?: boolean;\n /**\n * Текст тултипа.\n */\n text?: React.ReactNode;\n /**\n * Заголовок тултипа.\n */\n header?: React.ReactNode;\n /**\n * Положение по горизонтали (прижатие к левому или правому краю `children`).\n * Если не задано, позиция по горизонтали определятся автоматически\n */\n alignX?: \"center\" | \"left\" | \"right\";\n /**\n * Положение по вертикали (расположение над или под `children`).\n * Если не задано, позиция по вертикали определятся автоматически\n */\n alignY?: \"top\" | \"bottom\";\n /**\n * Сдвиг по горизонтали (относительно портала, в котором рисуется тултип).\n */\n offsetX?: number;\n /**\n * Сдвиг по вертикали (относительно портала, в котором рисуется тултип).\n */\n offsetY?: number;\n /**\n * Отображать ли стрелку, указывающую на якорный элемент\n */\n arrow?: boolean;\n /**\n * Сдвиг стрелочки относительно центра дочернего элемента.\n */\n cornerOffset?: number;\n /**\n * Сдвиг стрелочки относительно ширины тултипа\n */\n cornerAbsoluteOffset?: number;\n /**\n * Callback, который вызывается при клике по любому месту в пределах экрана.\n */\n onClose?: () => void;\n /**\n * По умолчанию компонент выберет наилучшее расположение сам. Но его можно задать извне с помощью этого свойства\n */\n placement?: Placement;\n}\n\nfunction mapAlignX(x: TooltipProps[\"alignX\"]) {\n switch (x) {\n case \"left\":\n return \"start\";\n case \"right\":\n return \"end\";\n default:\n return \"\";\n }\n}\nfunction getPlacement(\n alignX: TooltipProps[\"alignX\"],\n alignY: TooltipProps[\"alignY\"]\n): Placement {\n return [alignY || \"bottom\", mapAlignX(alignX || \"left\")]\n .filter((p) => !!p)\n .join(\"-\") as Placement;\n}\nfunction isVerticalPlacement(placement: Placement) {\n return placement.startsWith(\"top\") || placement.startsWith(\"bottom\");\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tooltip\n */\nexport const Tooltip = ({\n children,\n isShown: _isShown = true,\n offsetX = 0,\n offsetY = 15,\n alignX,\n alignY,\n onClose,\n cornerOffset = 0,\n cornerAbsoluteOffset,\n appearance,\n arrow = true,\n placement,\n ...restProps\n}: TooltipProps) => {\n const { entering } = useNavTransition();\n const isShown = _isShown && !entering;\n const [tooltipRef, setTooltipRef] = React.useState<HTMLElement | null>(null);\n const [target, setTarget] = React.useState<HTMLElement>();\n\n if (IS_DEV) {\n const multiChildren = React.Children.count(children) > 1;\n // Empty children is a noop\n const primitiveChild =\n 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\n /* eslint-disable no-restricted-properties */\n /* eslint-disable @typescript-eslint/no-unnecessary-type-assertion*/\n const tooltipContainer = React.useMemo(\n () => target?.closest(`[${tooltipContainerAttr}]`) as HTMLDivElement,\n [target]\n );\n const strategy = React.useMemo(\n () => (target?.style.position === \"fixed\" ? \"fixed\" : \"absolute\"),\n [target]\n );\n /* eslint-enable @typescript-eslint/no-unnecessary-type-assertion*/\n /* eslint-enable no-restricted-properties */\n\n if (IS_DEV && target && !tooltipContainer) {\n throw new Error(\n \"Use TooltipContainer for Tooltip outside Panel (see docs)\"\n );\n }\n\n const modifiers = React.useMemo(() => {\n const modifiers: Array<Modifier<string>> = [\n {\n name: \"offset\",\n options: {\n offset: [offsetX, offsetY],\n },\n },\n {\n name: \"preventOverflow\",\n },\n {\n name: \"flip\",\n },\n ];\n\n if (arrow) {\n modifiers.push({\n name: \"arrow\",\n options: {\n padding: 14,\n },\n });\n modifiers.push({\n name: \"arrowOffset\",\n enabled: true,\n phase: \"main\",\n fn({ state }) {\n if (!state.modifiersData.arrow) {\n return;\n }\n if (isVerticalPlacement(state.placement)) {\n if (cornerAbsoluteOffset !== undefined) {\n state.modifiersData.arrow.x = cornerAbsoluteOffset;\n } else {\n if (state.modifiersData.arrow?.x !== undefined) {\n state.modifiersData.arrow.x += cornerOffset;\n }\n }\n } else {\n if (cornerAbsoluteOffset !== undefined) {\n state.modifiersData.arrow.y = cornerAbsoluteOffset;\n } else {\n if (state.modifiersData.arrow?.y !== undefined) {\n state.modifiersData.arrow.y += cornerOffset;\n }\n }\n }\n },\n });\n }\n\n return modifiers;\n }, [arrow, cornerAbsoluteOffset, cornerOffset, offsetX, offsetY]);\n\n const _placement = placement ?? getPlacement(alignX, alignY);\n const { styles: popperStyles, attributes } = usePopper(target, tooltipRef, {\n strategy,\n placement: _placement,\n modifiers,\n });\n\n const { document } = useDOM();\n useGlobalEventListener(document, \"click\", isShown && onClose, {\n passive: true,\n });\n // NOTE: setting isShown to true used to trigger usePopper().forceUpdate()\n\n const childRef = isDOMTypeElement<\n React.HTMLAttributes<HTMLElement>,\n HTMLElement\n >(children)\n ? children.ref\n : React.isValidElement<HasRootRef<HTMLElement>>(children)\n ? children.props.getRootRef\n : null;\n const patchedRef = useExternRef(setTarget, childRef);\n const child = React.isValidElement(children)\n ? React.cloneElement(children, {\n [isDOMTypeElement(children) ? \"ref\" : \"getRootRef\"]: patchedRef,\n })\n : children;\n\n return (\n <React.Fragment>\n {child}\n {isShown &&\n target != null &&\n ReactDOM.createPortal(\n <SimpleTooltip\n {...restProps}\n appearance={appearance}\n arrow={arrow}\n ref={(el) => setTooltipRef(el)}\n style={{\n arrow: popperStyles.arrow,\n container: popperStyles.popper,\n }}\n attributes={{\n arrow: attributes.arrow ?? null,\n container: attributes.popper ?? null,\n }}\n />,\n tooltipContainer\n )}\n </React.Fragment>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tooltip.js","names":["isDOMTypeElement","element","React","isValidElement","type","warn","warnOnce","IS_DEV","process","env","NODE_ENV","SimpleTooltip","forwardRef","ref","appearance","header","text","arrow","style","popperStyles","attributes","className","container","containerClassName","restContainerAttributes","classNamesString","styles","mapAlignX","x","getPlacement","alignX","alignY","filter","p","join","isVerticalPlacement","placement","startsWith","Tooltip","children","isShown","_isShown","offsetX","offsetY","onClose","cornerOffset","cornerAbsoluteOffset","restProps","useNavTransition","entering","useState","tooltipRef","setTooltipRef","target","setTarget","multiChildren","Children","count","primitiveChild","hasReactNode","JSON","stringify","Boolean","tooltipContainer","useMemo","closest","tooltipContainerAttr","strategy","position","Error","modifiers","name","options","offset","push","padding","enabled","phase","fn","state","modifiersData","undefined","y","_placement","usePopper","useDOM","document","useGlobalEventListener","passive","childRef","props","getRootRef","patchedRef","useExternRef","child","cloneElement","ReactDOM","createPortal","el","popper"],"sources":["../../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { classNamesString } from \"../../lib/classNames\";\nimport { Subhead } from \"../Typography/Subhead/Subhead\";\nimport { useNavTransition } from \"../NavTransitionContext/NavTransitionContext\";\nimport { PopperArrow } from \"../PopperArrow/PopperArrow\";\nimport { Modifier, usePopper } from \"react-popper\";\nimport { Placement } from \"@popperjs/core\";\nimport { tooltipContainerAttr } from \"./TooltipContainer\";\nimport { useExternRef } from \"../../hooks/useExternRef\";\nimport { useDOM } from \"../../lib/dom\";\nimport { warnOnce } from \"../../lib/warnOnce\";\nimport { hasReactNode } from \"../../lib/utils\";\nimport { useGlobalEventListener } from \"../../hooks/useGlobalEventListener\";\nimport { HasRootRef } from \"../../types\";\nimport styles from \"./Tooltip.module.css\";\n\ninterface SimpleTooltipProps extends Partial<TooltipProps> {\n target?: HTMLDivElement;\n style?: {\n arrow: React.CSSProperties;\n container: React.CSSProperties;\n };\n attributes?: {\n arrow: React.HTMLAttributes<HTMLDivElement> | null;\n container: React.HTMLAttributes<HTMLDivElement> | null;\n };\n className?: string;\n}\n\n/**\n * Перебиваем `ref`.\n *\n * В оригинальном `React.DOMElement` задаётся `React.LegacyRef<T>`, в котором есть `string`.\n * Когда как `{ ref: \"string\" }` уже давно депрекейтнут.\n */\ninterface DOMElement<\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element\n> extends React.DOMElement<P, T> {\n ref: React.Ref<T>;\n}\n\nconst isDOMTypeElement = <\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element\n>(\n element: React.ReactElement\n): element is DOMElement<P, T> => {\n return React.isValidElement(element) && typeof element.type === \"string\";\n};\n\nconst warn = warnOnce(\"Tooltip\");\nconst IS_DEV = process.env.NODE_ENV === \"development\";\n\nconst SimpleTooltip = React.forwardRef<HTMLDivElement, SimpleTooltipProps>(\n function SimpleTooltip(\n {\n appearance = \"accent\",\n header,\n text,\n arrow,\n style: popperStyles = {},\n attributes,\n className,\n },\n ref\n ) {\n const { className: containerClassName, ...restContainerAttributes } =\n attributes?.container ?? {};\n\n return (\n <div\n className={classNamesString(\n styles[\"Tooltip\"],\n styles[`Tooltip--appearance-${appearance}`],\n className\n )}\n >\n <div\n className={classNamesString(\n styles[\"Tooltip__container\"],\n containerClassName\n )}\n ref={ref}\n style={popperStyles.container}\n {...restContainerAttributes}\n >\n {arrow && (\n <PopperArrow\n style={popperStyles.arrow}\n attributes={attributes?.arrow}\n arrowClassName={styles[\"Tooltip__arrow\"]}\n />\n )}\n <div className={styles[\"Tooltip__content\"]}>\n {header && (\n <Subhead weight=\"2\" className={styles[\"Tooltip__title\"]}>\n {header}\n </Subhead>\n )}\n {text && (\n <Subhead className={styles[\"Tooltip__text\"]}>{text}</Subhead>\n )}\n </div>\n </div>\n </div>\n );\n }\n);\n\nexport interface TooltipProps {\n /**\n * **Важно**: если в `children` передан React-компонент, то необходимо убедиться в том, что он поддерживает\n * свойство `getRootRef`, которое должно возвращаться ссылку на корневой DOM-элемент компонента,\n * иначе тултип показан не будет. Если передан React-element, то такой проблемы нет.\n */\n children: React.ReactElement<HasRootRef<any>> | React.ReactElement;\n /**\n * Стиль отображения подсказки\n */\n appearance?: \"accent\" | \"neutral\" | \"white\" | \"black\" | \"inversion\";\n /**\n * Если передан `false`, то рисуется просто `children`.\n */\n isShown?: boolean;\n /**\n * Текст тултипа.\n */\n text?: React.ReactNode;\n /**\n * Заголовок тултипа.\n */\n header?: React.ReactNode;\n /**\n * Положение по горизонтали (прижатие к левому или правому краю `children`).\n * Если не задано, позиция по горизонтали определятся автоматически\n */\n alignX?: \"center\" | \"left\" | \"right\";\n /**\n * Положение по вертикали (расположение над или под `children`).\n * Если не задано, позиция по вертикали определятся автоматически\n */\n alignY?: \"top\" | \"bottom\";\n /**\n * Сдвиг по горизонтали (относительно портала, в котором рисуется тултип).\n */\n offsetX?: number;\n /**\n * Сдвиг по вертикали (относительно портала, в котором рисуется тултип).\n */\n offsetY?: number;\n /**\n * Отображать ли стрелку, указывающую на якорный элемент\n */\n arrow?: boolean;\n /**\n * Сдвиг стрелочки относительно центра дочернего элемента.\n */\n cornerOffset?: number;\n /**\n * Сдвиг стрелочки относительно ширины тултипа\n */\n cornerAbsoluteOffset?: number;\n /**\n * Callback, который вызывается при клике по любому месту в пределах экрана.\n */\n onClose?: () => void;\n /**\n * По умолчанию компонент выберет наилучшее расположение сам. Но его можно задать извне с помощью этого свойства\n */\n placement?: Placement;\n /**\n * Пользовательские css-классы, будут добавлены на root-элемент\n */\n className?: string;\n}\n\nfunction mapAlignX(x: TooltipProps[\"alignX\"]) {\n switch (x) {\n case \"left\":\n return \"start\";\n case \"right\":\n return \"end\";\n default:\n return \"\";\n }\n}\nfunction getPlacement(\n alignX: TooltipProps[\"alignX\"],\n alignY: TooltipProps[\"alignY\"]\n): Placement {\n return [alignY || \"bottom\", mapAlignX(alignX || \"left\")]\n .filter((p) => !!p)\n .join(\"-\") as Placement;\n}\nfunction isVerticalPlacement(placement: Placement) {\n return placement.startsWith(\"top\") || placement.startsWith(\"bottom\");\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Tooltip\n */\nexport const Tooltip = ({\n children,\n isShown: _isShown = true,\n offsetX = 0,\n offsetY = 15,\n alignX,\n alignY,\n onClose,\n cornerOffset = 0,\n cornerAbsoluteOffset,\n appearance,\n arrow = true,\n placement,\n ...restProps\n}: TooltipProps) => {\n const { entering } = useNavTransition();\n const isShown = _isShown && !entering;\n const [tooltipRef, setTooltipRef] = React.useState<HTMLElement | null>(null);\n const [target, setTarget] = React.useState<HTMLElement>();\n\n if (IS_DEV) {\n const multiChildren = React.Children.count(children) > 1;\n // Empty children is a noop\n const primitiveChild =\n 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\n /* eslint-disable no-restricted-properties */\n /* eslint-disable @typescript-eslint/no-unnecessary-type-assertion*/\n const tooltipContainer = React.useMemo(\n () => target?.closest(`[${tooltipContainerAttr}]`) as HTMLDivElement,\n [target]\n );\n const strategy = React.useMemo(\n () => (target?.style.position === \"fixed\" ? \"fixed\" : \"absolute\"),\n [target]\n );\n /* eslint-enable @typescript-eslint/no-unnecessary-type-assertion*/\n /* eslint-enable no-restricted-properties */\n\n if (IS_DEV && target && !tooltipContainer) {\n throw new Error(\n \"Use TooltipContainer for Tooltip outside Panel (see docs)\"\n );\n }\n\n const modifiers = React.useMemo(() => {\n const modifiers: Array<Modifier<string>> = [\n {\n name: \"offset\",\n options: {\n offset: [offsetX, offsetY],\n },\n },\n {\n name: \"preventOverflow\",\n },\n {\n name: \"flip\",\n },\n ];\n\n if (arrow) {\n modifiers.push({\n name: \"arrow\",\n options: {\n padding: 14,\n },\n });\n modifiers.push({\n name: \"arrowOffset\",\n enabled: true,\n phase: \"main\",\n fn({ state }) {\n if (!state.modifiersData.arrow) {\n return;\n }\n if (isVerticalPlacement(state.placement)) {\n if (cornerAbsoluteOffset !== undefined) {\n state.modifiersData.arrow.x = cornerAbsoluteOffset;\n } else {\n if (state.modifiersData.arrow?.x !== undefined) {\n state.modifiersData.arrow.x += cornerOffset;\n }\n }\n } else {\n if (cornerAbsoluteOffset !== undefined) {\n state.modifiersData.arrow.y = cornerAbsoluteOffset;\n } else {\n if (state.modifiersData.arrow?.y !== undefined) {\n state.modifiersData.arrow.y += cornerOffset;\n }\n }\n }\n },\n });\n }\n\n return modifiers;\n }, [arrow, cornerAbsoluteOffset, cornerOffset, offsetX, offsetY]);\n\n const _placement = placement ?? getPlacement(alignX, alignY);\n const { styles: popperStyles, attributes } = usePopper(target, tooltipRef, {\n strategy,\n placement: _placement,\n modifiers,\n });\n\n const { document } = useDOM();\n useGlobalEventListener(document, \"click\", isShown && onClose, {\n passive: true,\n });\n // NOTE: setting isShown to true used to trigger usePopper().forceUpdate()\n\n const childRef = isDOMTypeElement<\n React.HTMLAttributes<HTMLElement>,\n HTMLElement\n >(children)\n ? children.ref\n : React.isValidElement<HasRootRef<HTMLElement>>(children)\n ? children.props.getRootRef\n : null;\n const patchedRef = useExternRef(setTarget, childRef);\n const child = React.isValidElement(children)\n ? React.cloneElement(children, {\n [isDOMTypeElement(children) ? \"ref\" : \"getRootRef\"]: patchedRef,\n })\n : children;\n\n return (\n <React.Fragment>\n {child}\n {isShown &&\n target != null &&\n ReactDOM.createPortal(\n <SimpleTooltip\n {...restProps}\n appearance={appearance}\n arrow={arrow}\n ref={(el) => setTooltipRef(el)}\n style={{\n arrow: popperStyles.arrow,\n container: popperStyles.popper,\n }}\n attributes={{\n arrow: attributes.arrow ?? null,\n container: attributes.popper ?? null,\n }}\n />,\n tooltipContainer\n )}\n </React.Fragment>\n );\n};\n"],"mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAA4E;EAAA;AA8B5E,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAgB,CAIpBC,OAA2B,EACK;EAChC,OAAO,aAAAC,KAAK,CAACC,cAAc,CAACF,OAAO,CAAC,IAAI,OAAOA,OAAO,CAACG,IAAI,KAAK,QAAQ;AAC1E,CAAC;AAED,IAAMC,IAAI,GAAG,IAAAC,kBAAQ,EAAC,SAAS,CAAC;AAChC,IAAMC,MAAM,GAAGC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa;AAErD,IAAMC,aAAa,gBAAGT,KAAK,CAACU,UAAU,CACpC,SAASD,aAAa,OAUpBE,GAAG,EACH;EAAA;EAAA,2BATEC,UAAU;IAAVA,UAAU,gCAAG,QAAQ;IACrBC,MAAM,QAANA,MAAM;IACNC,IAAI,QAAJA,IAAI;IACJC,KAAK,QAALA,KAAK;IAAA,kBACLC,KAAK;IAAEC,YAAY,2BAAG,CAAC,CAAC;IACxBC,UAAU,QAAVA,UAAU;IACVC,SAAS,QAATA,SAAS;EAIX,qCACED,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEE,SAAS,yEAAI,CAAC,CAAC;IADVC,kBAAkB,SAA7BF,SAAS;IAAyBG,uBAAuB;EAGjE,oBACE;IACE,SAAS,EAAE,IAAAC,4BAAgB,iBAEzBC,MAAM,+BAAwBZ,UAAU,EAAG,EAC3CO,SAAS;EACT,gBAEF;IACE,SAAS,EAAE,IAAAI,4BAAgB,4BAEzBF,kBAAkB,CAClB;IACF,GAAG,EAAEV,GAAI;IACT,KAAK,EAAEM,YAAY,CAACG;EAAU,GAC1BE,uBAAuB,GAE1BP,KAAK,iBACJ,oBAAC,wBAAW;IACV,KAAK,EAAEE,YAAY,CAACF,KAAM;IAC1B,UAAU,EAAEG,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEH,KAAM;IAC9B,cAAc;EAA2B,EAE5C,eACD;IAAK,SAAS;EAA6B,GACxCF,MAAM,iBACL,oBAAC,gBAAO;IAAC,MAAM,EAAC,GAAG;IAAC,SAAS;EAA2B,GACrDA,MAAM,CAEV,EACAC,IAAI,iBACH,oBAAC,gBAAO;IAAC,SAAS;EAA0B,GAAEA,IAAI,CACnD,CACG,CACF,CACF;AAEV,CAAC,CACF;AAqED,SAASW,SAAS,CAACC,CAAyB,EAAE;EAC5C,QAAQA,CAAC;IACP,KAAK,MAAM;MACT,OAAO,OAAO;IAChB,KAAK,OAAO;MACV,OAAO,KAAK;IACd;MACE,OAAO,EAAE;EAAC;AAEhB;AACA,SAASC,YAAY,CACnBC,MAA8B,EAC9BC,MAA8B,EACnB;EACX,OAAO,CAACA,MAAM,IAAI,QAAQ,EAAEJ,SAAS,CAACG,MAAM,IAAI,MAAM,CAAC,CAAC,CACrDE,MAAM,CAAC,UAACC,CAAC;IAAA,OAAK,CAAC,CAACA,CAAC;EAAA,EAAC,CAClBC,IAAI,CAAC,GAAG,CAAC;AACd;AACA,SAASC,mBAAmB,CAACC,SAAoB,EAAE;EACjD,OAAOA,SAAS,CAACC,UAAU,CAAC,KAAK,CAAC,IAAID,SAAS,CAACC,UAAU,CAAC,QAAQ,CAAC;AACtE;;AAEA;AACA;AACA;AACO,IAAMC,OAAO,GAAG,SAAVA,OAAO,QAcA;EAAA;EAAA,IAblBC,QAAQ,SAARA,QAAQ;IAAA,sBACRC,OAAO;IAAEC,QAAQ,8BAAG,IAAI;IAAA,sBACxBC,OAAO;IAAPA,OAAO,8BAAG,CAAC;IAAA,sBACXC,OAAO;IAAPA,OAAO,8BAAG,EAAE;IACZb,MAAM,SAANA,MAAM;IACNC,MAAM,SAANA,MAAM;IACNa,OAAO,SAAPA,OAAO;IAAA,2BACPC,YAAY;IAAZA,YAAY,mCAAG,CAAC;IAChBC,oBAAoB,SAApBA,oBAAoB;IACpBhC,UAAU,SAAVA,UAAU;IAAA,oBACVG,KAAK;IAALA,KAAK,4BAAG,IAAI;IACZmB,SAAS,SAATA,SAAS;IACNW,SAAS;EAEZ,wBAAqB,IAAAC,sCAAgB,GAAE;IAA/BC,QAAQ,qBAARA,QAAQ;EAChB,IAAMT,OAAO,GAAGC,QAAQ,IAAI,CAACQ,QAAQ;EACrC,sBAAoC/C,KAAK,CAACgD,QAAQ,CAAqB,IAAI,CAAC;IAAA;IAArEC,UAAU;IAAEC,aAAa;EAChC,uBAA4BlD,KAAK,CAACgD,QAAQ,EAAe;IAAA;IAAlDG,MAAM;IAAEC,SAAS;EAExB,IAAI/C,MAAM,EAAE;IACV,IAAMgD,aAAa,GAAGrD,KAAK,CAACsD,QAAQ,CAACC,KAAK,CAAClB,QAAQ,CAAC,GAAG,CAAC;IACxD;IACA,IAAMmB,cAAc,GAClB,IAAAC,mBAAY,EAACpB,QAAQ,CAAC,IAAI,sBAAOA,QAAQ,MAAK,QAAQ;IACxD,CAACgB,aAAa,IAAIG,cAAc,KAC9BrD,IAAI,CACF,CACE,sDAAsD,EACtDkD,aAAa,IAAI,WAAW,EAC5BG,cAAc,IAAIE,IAAI,CAACC,SAAS,CAACtB,QAAQ,CAAC,CAC3C,CACEP,MAAM,CAAC8B,OAAO,CAAC,CACf5B,IAAI,CAAC,GAAG,CAAC,EACZ,OAAO,CACR;EACL;;EAEA;EACA;EACA,IAAM6B,gBAAgB,GAAG7D,KAAK,CAAC8D,OAAO,CACpC;IAAA,OAAMX,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEY,OAAO,YAAKC,sCAAoB,OAAI;EAAA,CAAkB,EACpE,CAACb,MAAM,CAAC,CACT;EACD,IAAMc,QAAQ,GAAGjE,KAAK,CAAC8D,OAAO,CAC5B;IAAA,OAAO,CAAAX,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEnC,KAAK,CAACkD,QAAQ,MAAK,OAAO,GAAG,OAAO,GAAG,UAAU;EAAA,CAAC,EACjE,CAACf,MAAM,CAAC,CACT;EACD;EACA;;EAEA,IAAI9C,MAAM,IAAI8C,MAAM,IAAI,CAACU,gBAAgB,EAAE;IACzC,MAAM,IAAIM,KAAK,CACb,2DAA2D,CAC5D;EACH;EAEA,IAAMC,SAAS,GAAGpE,KAAK,CAAC8D,OAAO,CAAC,YAAM;IACpC,IAAMM,SAAkC,GAAG,CACzC;MACEC,IAAI,EAAE,QAAQ;MACdC,OAAO,EAAE;QACPC,MAAM,EAAE,CAAC/B,OAAO,EAAEC,OAAO;MAC3B;IACF,CAAC,EACD;MACE4B,IAAI,EAAE;IACR,CAAC,EACD;MACEA,IAAI,EAAE;IACR,CAAC,CACF;IAED,IAAItD,KAAK,EAAE;MACTqD,SAAS,CAACI,IAAI,CAAC;QACbH,IAAI,EAAE,OAAO;QACbC,OAAO,EAAE;UACPG,OAAO,EAAE;QACX;MACF,CAAC,CAAC;MACFL,SAAS,CAACI,IAAI,CAAC;QACbH,IAAI,EAAE,aAAa;QACnBK,OAAO,EAAE,IAAI;QACbC,KAAK,EAAE,MAAM;QACbC,EAAE,qBAAY;UAAA,IAATC,KAAK,SAALA,KAAK;UACR,IAAI,CAACA,KAAK,CAACC,aAAa,CAAC/D,KAAK,EAAE;YAC9B;UACF;UACA,IAAIkB,mBAAmB,CAAC4C,KAAK,CAAC3C,SAAS,CAAC,EAAE;YACxC,IAAIU,oBAAoB,KAAKmC,SAAS,EAAE;cACtCF,KAAK,CAACC,aAAa,CAAC/D,KAAK,CAACW,CAAC,GAAGkB,oBAAoB;YACpD,CAAC,MAAM;cAAA;cACL,IAAI,0BAAAiC,KAAK,CAACC,aAAa,CAAC/D,KAAK,0DAAzB,sBAA2BW,CAAC,MAAKqD,SAAS,EAAE;gBAC9CF,KAAK,CAACC,aAAa,CAAC/D,KAAK,CAACW,CAAC,IAAIiB,YAAY;cAC7C;YACF;UACF,CAAC,MAAM;YACL,IAAIC,oBAAoB,KAAKmC,SAAS,EAAE;cACtCF,KAAK,CAACC,aAAa,CAAC/D,KAAK,CAACiE,CAAC,GAAGpC,oBAAoB;YACpD,CAAC,MAAM;cAAA;cACL,IAAI,2BAAAiC,KAAK,CAACC,aAAa,CAAC/D,KAAK,2DAAzB,uBAA2BiE,CAAC,MAAKD,SAAS,EAAE;gBAC9CF,KAAK,CAACC,aAAa,CAAC/D,KAAK,CAACiE,CAAC,IAAIrC,YAAY;cAC7C;YACF;UACF;QACF;MACF,CAAC,CAAC;IACJ;IAEA,OAAOyB,SAAS;EAClB,CAAC,EAAE,CAACrD,KAAK,EAAE6B,oBAAoB,EAAED,YAAY,EAAEH,OAAO,EAAEC,OAAO,CAAC,CAAC;EAEjE,IAAMwC,UAAU,GAAG/C,SAAS,aAATA,SAAS,cAATA,SAAS,GAAIP,YAAY,CAACC,MAAM,EAAEC,MAAM,CAAC;EAC5D,iBAA6C,IAAAqD,sBAAS,EAAC/B,MAAM,EAAEF,UAAU,EAAE;MACzEgB,QAAQ,EAARA,QAAQ;MACR/B,SAAS,EAAE+C,UAAU;MACrBb,SAAS,EAATA;IACF,CAAC,CAAC;IAJcnD,YAAY,cAApBO,MAAM;IAAgBN,UAAU,cAAVA,UAAU;EAMxC,cAAqB,IAAAiE,WAAM,GAAE;IAArBC,QAAQ,WAARA,QAAQ;EAChB,IAAAC,8CAAsB,EAACD,QAAQ,EAAE,OAAO,EAAE9C,OAAO,IAAII,OAAO,EAAE;IAC5D4C,OAAO,EAAE;EACX,CAAC,CAAC;EACF;;EAEA,IAAMC,QAAQ,GAAGzF,gBAAgB,CAG/BuC,QAAQ,CAAC,GACPA,QAAQ,CAAC1B,GAAG,GACZ,aAAAX,KAAK,CAACC,cAAc,CAA0BoC,QAAQ,CAAC,GACvDA,QAAQ,CAACmD,KAAK,CAACC,UAAU,GACzB,IAAI;EACR,IAAMC,UAAU,GAAG,IAAAC,0BAAY,EAACvC,SAAS,EAAEmC,QAAQ,CAAC;EACpD,IAAMK,KAAK,GAAG,aAAA5F,KAAK,CAACC,cAAc,CAACoC,QAAQ,CAAC,gBACxCrC,KAAK,CAAC6F,YAAY,CAACxD,QAAQ,oCACxBvC,gBAAgB,CAACuC,QAAQ,CAAC,GAAG,KAAK,GAAG,YAAY,EAAGqD,UAAU,EAC/D,GACFrD,QAAQ;EAEZ,oBACE,oBAAC,KAAK,CAAC,QAAQ,QACZuD,KAAK,EACLtD,OAAO,IACNa,MAAM,IAAI,IAAI,iBACd2C,iBAAQ,CAACC,YAAY,eACnB,oBAAC,aAAa,6BACRlD,SAAS;IACb,UAAU,EAAEjC,UAAW;IACvB,KAAK,EAAEG,KAAM;IACb,GAAG,EAAE,aAACiF,EAAE;MAAA,OAAK9C,aAAa,CAAC8C,EAAE,CAAC;IAAA,CAAC;IAC/B,KAAK,EAAE;MACLjF,KAAK,EAAEE,YAAY,CAACF,KAAK;MACzBK,SAAS,EAAEH,YAAY,CAACgF;IAC1B,CAAE;IACF,UAAU,EAAE;MACVlF,KAAK,uBAAEG,UAAU,CAACH,KAAK,iEAAI,IAAI;MAC/BK,SAAS,wBAAEF,UAAU,CAAC+E,MAAM,mEAAI;IAClC;EAAE,GACF,EACFpC,gBAAgB,CACjB,CACY;AAErB,CAAC;AAAC;AAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA"}
|
|
@@ -41,9 +41,11 @@ function useEventListener(event, _cb, _options) {
|
|
|
41
41
|
React.useEffect(function () {
|
|
42
42
|
return remove;
|
|
43
43
|
}, [remove]);
|
|
44
|
-
return {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
return React.useMemo(function () {
|
|
45
|
+
return {
|
|
46
|
+
add: add,
|
|
47
|
+
remove: remove
|
|
48
|
+
};
|
|
49
|
+
}, [add, remove]);
|
|
48
50
|
}
|
|
49
51
|
//# sourceMappingURL=useEventListener.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEventListener.js","names":["useEventListener","event","_cb","_options","cbRef","React","useRef","useIsomorphicLayoutEffect","current","cb","useCallback","e","detach","noop","remove","add","el","canUseDOM","options","addEventListener","removeEventListener","useEffect"],"sources":["../../../src/hooks/useEventListener.ts"],"sourcesContent":["import * as React from \"react\";\nimport { noop } from \"../lib/utils\";\nimport { canUseDOM } from \"../lib/dom\";\nimport { useIsomorphicLayoutEffect } from \"../lib/useIsomorphicLayoutEffect\";\n\ninterface EventListenerHandle {\n add: (el: HTMLElement | Document | Window) => void;\n remove: () => void;\n}\n\nexport function useEventListener<K extends keyof GlobalEventHandlersEventMap>(\n event: K,\n _cb:\n | false\n | null\n | undefined\n | ((ev: GlobalEventHandlersEventMap[K]) => void),\n _options?: AddEventListenerOptions\n): EventListenerHandle;\nexport function useEventListener<E extends Event>(\n event: string,\n _cb: false | null | undefined | ((ev: E) => void),\n _options?: AddEventListenerOptions\n): EventListenerHandle;\nexport function useEventListener<\n E extends Event,\n K extends keyof GlobalEventHandlersEventMap\n>(\n event: string | K,\n _cb: false | null | undefined | ((ev: E) => void),\n _options?: AddEventListenerOptions\n): EventListenerHandle {\n const cbRef = React.useRef(_cb);\n useIsomorphicLayoutEffect(() => {\n cbRef.current = _cb;\n }, [_cb]);\n const cb = React.useCallback(\n (e: any) => cbRef.current && cbRef.current(e),\n []\n );\n\n const detach = React.useRef(noop);\n const remove = React.useCallback(() => {\n detach.current();\n detach.current = noop;\n }, []);\n const add = React.useCallback(\n (el: HTMLElement | Document | Window) => {\n if (!canUseDOM) {\n return;\n }\n remove();\n if (!el) {\n return;\n }\n const options = { ..._options };\n el.addEventListener(event, cb, options);\n detach.current = () => el.removeEventListener(event, cb, options);\n },\n [_options, cb, event, remove]\n );\n React.useEffect(() => remove, [remove]);\n\n return { add, remove };\n}\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AAqBO,SAASA,gBAAgB,CAI9BC,KAAiB,EACjBC,GAAiD,EACjDC,QAAkC,EACb;EACrB,IAAMC,KAAK,GAAGC,KAAK,CAACC,MAAM,CAACJ,GAAG,CAAC;EAC/B,IAAAK,oDAAyB,EAAC,YAAM;IAC9BH,KAAK,CAACI,OAAO,GAAGN,GAAG;EACrB,CAAC,EAAE,CAACA,GAAG,CAAC,CAAC;EACT,IAAMO,EAAE,GAAGJ,KAAK,CAACK,WAAW,CAC1B,UAACC,CAAM;IAAA,OAAKP,KAAK,CAACI,OAAO,IAAIJ,KAAK,CAACI,OAAO,CAACG,CAAC,CAAC;EAAA,GAC7C,EAAE,CACH;EAED,IAAMC,MAAM,GAAGP,KAAK,CAACC,MAAM,CAACO,WAAI,CAAC;EACjC,IAAMC,MAAM,GAAGT,KAAK,CAACK,WAAW,CAAC,YAAM;IACrCE,MAAM,CAACJ,OAAO,EAAE;IAChBI,MAAM,CAACJ,OAAO,GAAGK,WAAI;EACvB,CAAC,EAAE,EAAE,CAAC;EACN,IAAME,GAAG,GAAGV,KAAK,CAACK,WAAW,CAC3B,UAACM,EAAmC,EAAK;IACvC,IAAI,CAACC,cAAS,EAAE;MACd;IACF;IACAH,MAAM,EAAE;IACR,IAAI,CAACE,EAAE,EAAE;MACP;IACF;IACA,IAAME,OAAO,mCAAQf,QAAQ,CAAE;IAC/Ba,EAAE,CAACG,gBAAgB,CAAClB,KAAK,EAAEQ,EAAE,EAAES,OAAO,CAAC;IACvCN,MAAM,CAACJ,OAAO,GAAG;MAAA,OAAMQ,EAAE,CAACI,mBAAmB,CAACnB,KAAK,EAAEQ,EAAE,EAAES,OAAO,CAAC;IAAA;EACnE,CAAC,EACD,CAACf,QAAQ,EAAEM,EAAE,EAAER,KAAK,EAAEa,MAAM,CAAC,CAC9B;EACDT,KAAK,CAACgB,SAAS,CAAC;IAAA,OAAMP,MAAM;EAAA,GAAE,CAACA,MAAM,CAAC,CAAC;EAEvC,OAAO;
|
|
1
|
+
{"version":3,"file":"useEventListener.js","names":["useEventListener","event","_cb","_options","cbRef","React","useRef","useIsomorphicLayoutEffect","current","cb","useCallback","e","detach","noop","remove","add","el","canUseDOM","options","addEventListener","removeEventListener","useEffect","useMemo"],"sources":["../../../src/hooks/useEventListener.ts"],"sourcesContent":["import * as React from \"react\";\nimport { noop } from \"../lib/utils\";\nimport { canUseDOM } from \"../lib/dom\";\nimport { useIsomorphicLayoutEffect } from \"../lib/useIsomorphicLayoutEffect\";\n\ninterface EventListenerHandle {\n add: (el: HTMLElement | Document | Window) => void;\n remove: () => void;\n}\n\nexport function useEventListener<K extends keyof GlobalEventHandlersEventMap>(\n event: K,\n _cb:\n | false\n | null\n | undefined\n | ((ev: GlobalEventHandlersEventMap[K]) => void),\n _options?: AddEventListenerOptions\n): EventListenerHandle;\nexport function useEventListener<E extends Event>(\n event: string,\n _cb: false | null | undefined | ((ev: E) => void),\n _options?: AddEventListenerOptions\n): EventListenerHandle;\nexport function useEventListener<\n E extends Event,\n K extends keyof GlobalEventHandlersEventMap\n>(\n event: string | K,\n _cb: false | null | undefined | ((ev: E) => void),\n _options?: AddEventListenerOptions\n): EventListenerHandle {\n const cbRef = React.useRef(_cb);\n useIsomorphicLayoutEffect(() => {\n cbRef.current = _cb;\n }, [_cb]);\n const cb = React.useCallback(\n (e: any) => cbRef.current && cbRef.current(e),\n []\n );\n\n const detach = React.useRef(noop);\n const remove = React.useCallback(() => {\n detach.current();\n detach.current = noop;\n }, []);\n const add = React.useCallback(\n (el: HTMLElement | Document | Window) => {\n if (!canUseDOM) {\n return;\n }\n remove();\n if (!el) {\n return;\n }\n const options = { ..._options };\n el.addEventListener(event, cb, options);\n detach.current = () => el.removeEventListener(event, cb, options);\n },\n [_options, cb, event, remove]\n );\n React.useEffect(() => remove, [remove]);\n\n return React.useMemo(() => ({ add, remove }), [add, remove]);\n}\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AAqBO,SAASA,gBAAgB,CAI9BC,KAAiB,EACjBC,GAAiD,EACjDC,QAAkC,EACb;EACrB,IAAMC,KAAK,GAAGC,KAAK,CAACC,MAAM,CAACJ,GAAG,CAAC;EAC/B,IAAAK,oDAAyB,EAAC,YAAM;IAC9BH,KAAK,CAACI,OAAO,GAAGN,GAAG;EACrB,CAAC,EAAE,CAACA,GAAG,CAAC,CAAC;EACT,IAAMO,EAAE,GAAGJ,KAAK,CAACK,WAAW,CAC1B,UAACC,CAAM;IAAA,OAAKP,KAAK,CAACI,OAAO,IAAIJ,KAAK,CAACI,OAAO,CAACG,CAAC,CAAC;EAAA,GAC7C,EAAE,CACH;EAED,IAAMC,MAAM,GAAGP,KAAK,CAACC,MAAM,CAACO,WAAI,CAAC;EACjC,IAAMC,MAAM,GAAGT,KAAK,CAACK,WAAW,CAAC,YAAM;IACrCE,MAAM,CAACJ,OAAO,EAAE;IAChBI,MAAM,CAACJ,OAAO,GAAGK,WAAI;EACvB,CAAC,EAAE,EAAE,CAAC;EACN,IAAME,GAAG,GAAGV,KAAK,CAACK,WAAW,CAC3B,UAACM,EAAmC,EAAK;IACvC,IAAI,CAACC,cAAS,EAAE;MACd;IACF;IACAH,MAAM,EAAE;IACR,IAAI,CAACE,EAAE,EAAE;MACP;IACF;IACA,IAAME,OAAO,mCAAQf,QAAQ,CAAE;IAC/Ba,EAAE,CAACG,gBAAgB,CAAClB,KAAK,EAAEQ,EAAE,EAAES,OAAO,CAAC;IACvCN,MAAM,CAACJ,OAAO,GAAG;MAAA,OAAMQ,EAAE,CAACI,mBAAmB,CAACnB,KAAK,EAAEQ,EAAE,EAAES,OAAO,CAAC;IAAA;EACnE,CAAC,EACD,CAACf,QAAQ,EAAEM,EAAE,EAAER,KAAK,EAAEa,MAAM,CAAC,CAC9B;EACDT,KAAK,CAACgB,SAAS,CAAC;IAAA,OAAMP,MAAM;EAAA,GAAE,CAACA,MAAM,CAAC,CAAC;EAEvC,OAAOT,KAAK,CAACiB,OAAO,CAAC;IAAA,OAAO;MAAEP,GAAG,EAAHA,GAAG;MAAED,MAAM,EAANA;IAAO,CAAC;EAAA,CAAC,EAAE,CAACC,GAAG,EAAED,MAAM,CAAC,CAAC;AAC9D"}
|
|
@@ -28,6 +28,7 @@ var useMediaQueries = function useMediaQueries() {
|
|
|
28
28
|
storedMediaQueries.window = window;
|
|
29
29
|
storedMediaQueries.mediaQueries = {
|
|
30
30
|
desktopPlus: matchMedia(_adaptivity.MEDIA_QUERIES.DESKTOP_PLUS),
|
|
31
|
+
smallTabletPlus: matchMedia(_adaptivity.MEDIA_QUERIES.SMALL_TABLET_PLUS),
|
|
31
32
|
tablet: matchMedia(_adaptivity.MEDIA_QUERIES.TABLET),
|
|
32
33
|
smallTablet: matchMedia(_adaptivity.MEDIA_QUERIES.SMALL_TABLET),
|
|
33
34
|
mobile: matchMedia(_adaptivity.MEDIA_QUERIES.MOBILE),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMediaQueries.js","names":["storedMediaQueries","window","undefined","mediaQueries","useMediaQueries","useDOM","React","useMemo","initializeStoreOrUpdateStoreIfWindowChanges","matchMedia","bind","mediaQueryNull","desktopPlus","MEDIA_QUERIES","DESKTOP_PLUS","tablet","TABLET","smallTablet","SMALL_TABLET","mobile","MOBILE","mediumHeight","MEDIUM_HEIGHT","mobileLandscapeHeight","MOBILE_LANDSCAPE_HEIGHT"],"sources":["../../../src/hooks/useMediaQueries.ts"],"sourcesContent":["import * as React from \"react\";\nimport { type MediaQueries, MEDIA_QUERIES } from \"../lib/adaptivity\";\nimport { mediaQueryNull } from \"../lib/browser\";\nimport { useDOM } from \"../lib/dom\";\n\ninterface StoredMediaQueries {\n /**\n * Постоянная ссылка на окно. Это необходима, чтобы пересоздать медиа выражение если окно вдруг измениться.\n *\n * > `styleguide`\n * >\n * > В данный момент изменения окна существует в рамках песочницы. По сути мы храним ссылку на окно ради этого кейса\n * > в песочнице.\n */\n window: Window | undefined;\n /**\n * Хранит созданные медиа выражения.\n *\n * Достаточно единожды создать экземпляры `MediaQueryList`, а дальше подписываться на события\n * через метод `addEventListener(type, listener)`.\n *\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList}\n */\n mediaQueries: MediaQueries | null;\n}\n\nconst storedMediaQueries: StoredMediaQueries = {\n window: undefined,\n mediaQueries: null,\n};\n\n/**\n * Возвращает медиа выражения определенные дизайн-системой.\n */\nexport const useMediaQueries = () => {\n const { window } = useDOM();\n\n return React.useMemo(\n function initializeStoreOrUpdateStoreIfWindowChanges() {\n if (\n storedMediaQueries.window === window &&\n storedMediaQueries.mediaQueries !== null\n ) {\n return storedMediaQueries.mediaQueries;\n }\n\n const matchMedia = window\n ? window.matchMedia.bind(window)\n : mediaQueryNull;\n\n storedMediaQueries.window = window;\n storedMediaQueries.mediaQueries = {\n desktopPlus: matchMedia(MEDIA_QUERIES.DESKTOP_PLUS),\n tablet: matchMedia(MEDIA_QUERIES.TABLET),\n smallTablet: matchMedia(MEDIA_QUERIES.SMALL_TABLET),\n mobile: matchMedia(MEDIA_QUERIES.MOBILE),\n mediumHeight: matchMedia(MEDIA_QUERIES.MEDIUM_HEIGHT),\n mobileLandscapeHeight: matchMedia(\n MEDIA_QUERIES.MOBILE_LANDSCAPE_HEIGHT\n ),\n };\n\n return storedMediaQueries.mediaQueries;\n },\n [window]\n );\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AAuBA,IAAMA,kBAAsC,GAAG;EAC7CC,MAAM,EAAEC,SAAS;EACjBC,YAAY,EAAE;AAChB,CAAC;;AAED;AACA;AACA;AACO,IAAMC,eAAe,GAAG,SAAlBA,eAAe,GAAS;EACnC,cAAmB,IAAAC,WAAM,GAAE;IAAnBJ,MAAM,WAANA,MAAM;EAEd,OAAOK,KAAK,CAACC,OAAO,CAClB,SAASC,2CAA2C,GAAG;IACrD,IACER,kBAAkB,CAACC,MAAM,KAAKA,MAAM,IACpCD,kBAAkB,CAACG,YAAY,KAAK,IAAI,EACxC;MACA,OAAOH,kBAAkB,CAACG,YAAY;IACxC;IAEA,IAAMM,UAAU,GAAGR,MAAM,GACrBA,MAAM,CAACQ,UAAU,CAACC,IAAI,CAACT,MAAM,CAAC,GAC9BU,uBAAc;IAElBX,kBAAkB,CAACC,MAAM,GAAGA,MAAM;IAClCD,kBAAkB,CAACG,YAAY,GAAG;MAChCS,WAAW,EAAEH,UAAU,CAACI,yBAAa,CAACC,YAAY,CAAC;MACnDC,
|
|
1
|
+
{"version":3,"file":"useMediaQueries.js","names":["storedMediaQueries","window","undefined","mediaQueries","useMediaQueries","useDOM","React","useMemo","initializeStoreOrUpdateStoreIfWindowChanges","matchMedia","bind","mediaQueryNull","desktopPlus","MEDIA_QUERIES","DESKTOP_PLUS","smallTabletPlus","SMALL_TABLET_PLUS","tablet","TABLET","smallTablet","SMALL_TABLET","mobile","MOBILE","mediumHeight","MEDIUM_HEIGHT","mobileLandscapeHeight","MOBILE_LANDSCAPE_HEIGHT"],"sources":["../../../src/hooks/useMediaQueries.ts"],"sourcesContent":["import * as React from \"react\";\nimport { type MediaQueries, MEDIA_QUERIES } from \"../lib/adaptivity\";\nimport { mediaQueryNull } from \"../lib/browser\";\nimport { useDOM } from \"../lib/dom\";\n\ninterface StoredMediaQueries {\n /**\n * Постоянная ссылка на окно. Это необходима, чтобы пересоздать медиа выражение если окно вдруг измениться.\n *\n * > `styleguide`\n * >\n * > В данный момент изменения окна существует в рамках песочницы. По сути мы храним ссылку на окно ради этого кейса\n * > в песочнице.\n */\n window: Window | undefined;\n /**\n * Хранит созданные медиа выражения.\n *\n * Достаточно единожды создать экземпляры `MediaQueryList`, а дальше подписываться на события\n * через метод `addEventListener(type, listener)`.\n *\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList}\n */\n mediaQueries: MediaQueries | null;\n}\n\nconst storedMediaQueries: StoredMediaQueries = {\n window: undefined,\n mediaQueries: null,\n};\n\n/**\n * Возвращает медиа выражения определенные дизайн-системой.\n */\nexport const useMediaQueries = () => {\n const { window } = useDOM();\n\n return React.useMemo(\n function initializeStoreOrUpdateStoreIfWindowChanges() {\n if (\n storedMediaQueries.window === window &&\n storedMediaQueries.mediaQueries !== null\n ) {\n return storedMediaQueries.mediaQueries;\n }\n\n const matchMedia = window\n ? window.matchMedia.bind(window)\n : mediaQueryNull;\n\n storedMediaQueries.window = window;\n storedMediaQueries.mediaQueries = {\n desktopPlus: matchMedia(MEDIA_QUERIES.DESKTOP_PLUS),\n smallTabletPlus: matchMedia(MEDIA_QUERIES.SMALL_TABLET_PLUS),\n tablet: matchMedia(MEDIA_QUERIES.TABLET),\n smallTablet: matchMedia(MEDIA_QUERIES.SMALL_TABLET),\n mobile: matchMedia(MEDIA_QUERIES.MOBILE),\n mediumHeight: matchMedia(MEDIA_QUERIES.MEDIUM_HEIGHT),\n mobileLandscapeHeight: matchMedia(\n MEDIA_QUERIES.MOBILE_LANDSCAPE_HEIGHT\n ),\n };\n\n return storedMediaQueries.mediaQueries;\n },\n [window]\n );\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AAuBA,IAAMA,kBAAsC,GAAG;EAC7CC,MAAM,EAAEC,SAAS;EACjBC,YAAY,EAAE;AAChB,CAAC;;AAED;AACA;AACA;AACO,IAAMC,eAAe,GAAG,SAAlBA,eAAe,GAAS;EACnC,cAAmB,IAAAC,WAAM,GAAE;IAAnBJ,MAAM,WAANA,MAAM;EAEd,OAAOK,KAAK,CAACC,OAAO,CAClB,SAASC,2CAA2C,GAAG;IACrD,IACER,kBAAkB,CAACC,MAAM,KAAKA,MAAM,IACpCD,kBAAkB,CAACG,YAAY,KAAK,IAAI,EACxC;MACA,OAAOH,kBAAkB,CAACG,YAAY;IACxC;IAEA,IAAMM,UAAU,GAAGR,MAAM,GACrBA,MAAM,CAACQ,UAAU,CAACC,IAAI,CAACT,MAAM,CAAC,GAC9BU,uBAAc;IAElBX,kBAAkB,CAACC,MAAM,GAAGA,MAAM;IAClCD,kBAAkB,CAACG,YAAY,GAAG;MAChCS,WAAW,EAAEH,UAAU,CAACI,yBAAa,CAACC,YAAY,CAAC;MACnDC,eAAe,EAAEN,UAAU,CAACI,yBAAa,CAACG,iBAAiB,CAAC;MAC5DC,MAAM,EAAER,UAAU,CAACI,yBAAa,CAACK,MAAM,CAAC;MACxCC,WAAW,EAAEV,UAAU,CAACI,yBAAa,CAACO,YAAY,CAAC;MACnDC,MAAM,EAAEZ,UAAU,CAACI,yBAAa,CAACS,MAAM,CAAC;MACxCC,YAAY,EAAEd,UAAU,CAACI,yBAAa,CAACW,aAAa,CAAC;MACrDC,qBAAqB,EAAEhB,UAAU,CAC/BI,yBAAa,CAACa,uBAAuB;IAEzC,CAAC;IAED,OAAO1B,kBAAkB,CAACG,YAAY;EACxC,CAAC,EACD,CAACF,MAAM,CAAC,CACT;AACH,CAAC;AAAC"}
|
|
@@ -8,5 +8,5 @@ export declare type CSSBreakpoints = "desktopPlus" | "tabletPlus" | "tablet" | "
|
|
|
8
8
|
* JS брейкпоинты выделены в отдельный тип, т.к. на данный момент нужны не все брейкпоинты, что используются в
|
|
9
9
|
* адаптивности через CSS, а также имеются свои тонкости по типу `mobileLandscapeHeight`.
|
|
10
10
|
*/
|
|
11
|
-
export declare type JSBreakpoints = "desktopPlus" | "tablet" | "smallTablet" | "mobile" | "mediumHeight" | "mobileLandscapeHeight";
|
|
11
|
+
export declare type JSBreakpoints = "desktopPlus" | "tablet" | "smallTabletPlus" | "smallTablet" | "mobile" | "mediumHeight" | "mobileLandscapeHeight";
|
|
12
12
|
export declare type MediaQueries = Record<JSBreakpoints, MediaQueryList>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/lib/adaptivity/types.ts"],"sourcesContent":["/**\n * Соответствуют тому, что генерирует функция `getCustomMedias()`.\n *\n * {@link import('../../shared.js') ../../shared.js}\n */\nexport type CSSBreakpoints =\n | \"desktopPlus\"\n | \"tabletPlus\"\n | \"tablet\"\n | \"tabletMinus\"\n | \"smallTabletPlus\"\n | \"smallTablet\"\n | \"smallTabletMinus\"\n | \"mobilePlus\"\n | \"mobile\"\n | \"smallMobileMinus\";\n\n/**\n * JS брейкпоинты выделены в отдельный тип, т.к. на данный момент нужны не все брейкпоинты, что используются в\n * адаптивности через CSS, а также имеются свои тонкости по типу `mobileLandscapeHeight`.\n */\nexport type JSBreakpoints =\n | \"desktopPlus\"\n | \"tablet\"\n | \"smallTablet\"\n | \"mobile\"\n | \"mediumHeight\"\n | \"mobileLandscapeHeight\";\n\nexport type MediaQueries = Record<JSBreakpoints, MediaQueryList>;\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/lib/adaptivity/types.ts"],"sourcesContent":["/**\n * Соответствуют тому, что генерирует функция `getCustomMedias()`.\n *\n * {@link import('../../shared.js') ../../shared.js}\n */\nexport type CSSBreakpoints =\n | \"desktopPlus\"\n | \"tabletPlus\"\n | \"tablet\"\n | \"tabletMinus\"\n | \"smallTabletPlus\"\n | \"smallTablet\"\n | \"smallTabletMinus\"\n | \"mobilePlus\"\n | \"mobile\"\n | \"smallMobileMinus\";\n\n/**\n * JS брейкпоинты выделены в отдельный тип, т.к. на данный момент нужны не все брейкпоинты, что используются в\n * адаптивности через CSS, а также имеются свои тонкости по типу `mobileLandscapeHeight`.\n */\nexport type JSBreakpoints =\n | \"desktopPlus\"\n | \"tablet\"\n | \"smallTabletPlus\"\n | \"smallTablet\"\n | \"mobile\"\n | \"mediumHeight\"\n | \"mobileLandscapeHeight\";\n\nexport type MediaQueries = Record<JSBreakpoints, MediaQueryList>;\n"],"mappings":""}
|
package/dist/cjs/lib/browser.js
CHANGED
|
@@ -48,7 +48,6 @@ function computeBrowserInfo() {
|
|
|
48
48
|
* ⚠️ Желательно избегать использование этой эмуляции в SSR.
|
|
49
49
|
*/
|
|
50
50
|
function mediaQueryNull(query) {
|
|
51
|
-
console.error("[mediaQueryNull] \u041F\u043E\u0445\u043E\u0436\u0435, \u0432\u044B \u043F\u044B\u0442\u0430\u0435\u0442\u0435\u0441\u044C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C `Window.matchMedia()` API \u0432\u043D\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.\n\n\u041F\u043E\u0441\u0442\u0430\u0440\u0430\u0439\u0442\u0435\u0441\u044C \u044D\u0442\u043E\u0433\u043E \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044C, \u0447\u0442\u043E\u0431\u044B \u043D\u0435 \u0431\u044B\u043B\u043E \u043E\u0448\u0438\u0431\u043E\u043A \u043F\u0440\u0438 \u0433\u0438\u0434\u0440\u0430\u0442\u0430\u0446\u0438\u0438: \u043F\u0440\u0438 SSR \u043D\u0435\u0442 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438 \u043E \u0440\u0430\u0437\u043C\u0435\u0440\u0430\u0445 \u044D\u043A\u0440\u0430\u043D\u0430.\n\n\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 CSS Media Query \u0438\u043B\u0438 \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0443 \u043F\u043E \u0442\u0438\u043F\u0443 https://github.com/artsy/fresnel.");
|
|
52
51
|
return {
|
|
53
52
|
matches: false,
|
|
54
53
|
media: query,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","names":["System","memoized","computeBrowserInfo","userAgent","systemVersion","system","UNKNOWN","detectIOS","isIOS","iosMajor","iosMinor","IOS","major","minor","browserInfo","mediaQueryNull","query","
|
|
1
|
+
{"version":3,"file":"browser.js","names":["System","memoized","computeBrowserInfo","userAgent","systemVersion","system","UNKNOWN","detectIOS","isIOS","iosMajor","iosMinor","IOS","major","minor","browserInfo","mediaQueryNull","query","matches","media","onchange","noop","addListener","removeListener","addEventListener","removeEventListener","dispatchEvent"],"sources":["../../../src/lib/browser.ts"],"sourcesContent":["import { detectIOS } from \"@vkontakte/vkjs\";\nimport type { Version } from \"../types\";\nimport { noop } from \"./utils\";\n\nexport enum System {\n IOS = \"ios\",\n UNKNOWN = \"\",\n}\n\nexport interface BrowserInfo {\n userAgent: string;\n system: System;\n systemVersion: Version | null;\n}\n\nconst memoized: { [index: string]: BrowserInfo } = {};\n\nexport function computeBrowserInfo(userAgent = \"\"): BrowserInfo {\n if (memoized[userAgent]) {\n return memoized[userAgent];\n }\n\n let systemVersion: Version | null = null;\n let system = System.UNKNOWN;\n\n const { isIOS, iosMajor, iosMinor } = detectIOS(userAgent);\n\n if (isIOS) {\n system = System.IOS;\n systemVersion = {\n major: iosMajor,\n minor: iosMinor,\n };\n }\n\n const browserInfo: BrowserInfo = {\n userAgent,\n system,\n systemVersion,\n };\n\n memoized[userAgent] = browserInfo;\n\n return browserInfo;\n}\n\n/**\n * Эмуляция функции `window.matchMedia` для SSR.\n *\n * ⚠️ Желательно избегать использование этой эмуляции в SSR.\n */\nexport function mediaQueryNull(query: string): MediaQueryList {\n return {\n matches: false,\n media: query,\n onchange: noop,\n addListener: noop,\n removeListener: noop,\n addEventListener: noop,\n removeEventListener: noop,\n dispatchEvent() {\n return false;\n },\n };\n}\n"],"mappings":";;;;;;;;AAAA;AAEA;AAA+B,IAEnBA,MAAM;AAAA;AAAA,WAANA,MAAM;EAANA,MAAM;EAANA,MAAM;AAAA,GAANA,MAAM,sBAANA,MAAM;AAWlB,IAAMC,QAA0C,GAAG,CAAC,CAAC;AAE9C,SAASC,kBAAkB,GAA8B;EAAA,IAA7BC,SAAS,uEAAG,EAAE;EAC/C,IAAIF,QAAQ,CAACE,SAAS,CAAC,EAAE;IACvB,OAAOF,QAAQ,CAACE,SAAS,CAAC;EAC5B;EAEA,IAAIC,aAA6B,GAAG,IAAI;EACxC,IAAIC,MAAM,GAAGL,MAAM,CAACM,OAAO;EAE3B,iBAAsC,IAAAC,eAAS,EAACJ,SAAS,CAAC;IAAlDK,KAAK,cAALA,KAAK;IAAEC,QAAQ,cAARA,QAAQ;IAAEC,QAAQ,cAARA,QAAQ;EAEjC,IAAIF,KAAK,EAAE;IACTH,MAAM,GAAGL,MAAM,CAACW,GAAG;IACnBP,aAAa,GAAG;MACdQ,KAAK,EAAEH,QAAQ;MACfI,KAAK,EAAEH;IACT,CAAC;EACH;EAEA,IAAMI,WAAwB,GAAG;IAC/BX,SAAS,EAATA,SAAS;IACTE,MAAM,EAANA,MAAM;IACND,aAAa,EAAbA;EACF,CAAC;EAEDH,QAAQ,CAACE,SAAS,CAAC,GAAGW,WAAW;EAEjC,OAAOA,WAAW;AACpB;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASC,cAAc,CAACC,KAAa,EAAkB;EAC5D,OAAO;IACLC,OAAO,EAAE,KAAK;IACdC,KAAK,EAAEF,KAAK;IACZG,QAAQ,EAAEC,WAAI;IACdC,WAAW,EAAED,WAAI;IACjBE,cAAc,EAAEF,WAAI;IACpBG,gBAAgB,EAAEH,WAAI;IACtBI,mBAAmB,EAAEJ,WAAI;IACzBK,aAAa,2BAAG;MACd,OAAO,KAAK;IACd;EACF,CAAC;AACH"}
|
package/dist/cjs/lib/utils.d.ts
CHANGED
|
@@ -12,5 +12,4 @@ export declare function setRef<T>(element: T, ref?: React.Ref<T>): void;
|
|
|
12
12
|
export declare function multiRef<T>(...refs: Array<React.Ref<T> | undefined>): React.RefObject<T>;
|
|
13
13
|
export declare const noop: () => void;
|
|
14
14
|
export declare function getTitleFromChildren(children: React.ReactNode): string;
|
|
15
|
-
export declare const generateRandomId: () => string;
|
|
16
15
|
export declare const stopPropagation: <T extends React.SyntheticEvent<Element, Event>>(event: T) => void;
|
package/dist/cjs/lib/utils.js
CHANGED
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.debounce = debounce;
|
|
8
|
-
exports.generateRandomId = void 0;
|
|
9
8
|
exports.getTitleFromChildren = getTitleFromChildren;
|
|
10
9
|
exports.hasReactNode = hasReactNode;
|
|
11
10
|
exports.isFunction = isFunction;
|
|
@@ -90,10 +89,6 @@ function getTitleFromChildren(children) {
|
|
|
90
89
|
});
|
|
91
90
|
return label;
|
|
92
91
|
}
|
|
93
|
-
var generateRandomId = function generateRandomId() {
|
|
94
|
-
return Math.random().toString(36).replace(/[^a-z]+/g, "");
|
|
95
|
-
};
|
|
96
|
-
exports.generateRandomId = generateRandomId;
|
|
97
92
|
var stopPropagation = function stopPropagation(event) {
|
|
98
93
|
return event.stopPropagation();
|
|
99
94
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["isNumeric","value","isNaN","parseFloat","isFinite","isFunction","debounce","fn","delay","timeout","args","clearTimeout","setTimeout","leadingZero","val","strVal","toFixed","length","hasReactNode","undefined","isPrimitiveReactNode","node","setRef","element","ref","current","multiRef","refs","forEach","noop","getTitleFromChildren","children","label","React","Children","map","child","
|
|
1
|
+
{"version":3,"file":"utils.js","names":["isNumeric","value","isNaN","parseFloat","isFinite","isFunction","debounce","fn","delay","timeout","args","clearTimeout","setTimeout","leadingZero","val","strVal","toFixed","length","hasReactNode","undefined","isPrimitiveReactNode","node","setRef","element","ref","current","multiRef","refs","forEach","noop","getTitleFromChildren","children","label","React","Children","map","child","stopPropagation","event"],"sources":["../../../src/lib/utils.ts"],"sourcesContent":["import * as React from \"react\";\n\nexport type ImgOnlyAttributes = {\n [index in Exclude<\n keyof React.ImgHTMLAttributes<HTMLImageElement>,\n keyof React.HTMLAttributes<HTMLImageElement>\n >]: React.ImgHTMLAttributes<HTMLImageElement>[index];\n};\n\n// Является ли переданное значение числовым\nexport function isNumeric(value: any): boolean {\n return !isNaN(parseFloat(value)) && isFinite(value);\n}\n\n// Является ли переданное значение функцией\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === \"function\";\n}\n\nexport function debounce<A extends any[]>(\n fn: (...args: A) => void,\n delay: number\n) {\n let timeout: any;\n\n return (...args: A) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => fn(...args), delay);\n };\n}\n\nexport function leadingZero(val: number) {\n let strVal = val.toFixed();\n\n if (strVal.length === 1) {\n return \"0\" + strVal;\n }\n\n return strVal;\n}\n\nexport function hasReactNode(value: React.ReactNode): boolean {\n return (\n value !== undefined && value !== false && value !== null && value !== \"\"\n );\n}\n\nexport function isPrimitiveReactNode(node: React.ReactNode): boolean {\n return typeof node === \"string\" || typeof node === \"number\";\n}\n\nexport function setRef<T>(element: T, ref?: React.Ref<T>): void {\n if (ref) {\n if (typeof ref === \"function\") {\n ref(element);\n } else {\n (ref as React.MutableRefObject<T>).current = element;\n }\n }\n}\n\nexport function multiRef<T>(\n ...refs: Array<React.Ref<T> | undefined>\n): React.RefObject<T> {\n let current: T | null = null;\n return {\n get current() {\n return current;\n },\n set current(element) {\n current = element;\n refs.forEach((ref) => ref && setRef(element, ref));\n },\n };\n}\n\n// eslint-disable-next-line\nexport const noop = () => {};\n\nexport function getTitleFromChildren(children: React.ReactNode): string {\n let label = \"\";\n\n React.Children.map(children, (child) => {\n if (typeof child === \"string\") {\n label += child;\n }\n });\n\n return label;\n}\n\nexport const stopPropagation = <T extends React.SyntheticEvent>(event: T) =>\n event.stopPropagation();\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AASA;AACO,SAASA,SAAS,CAACC,KAAU,EAAW;EAC7C,OAAO,CAACC,KAAK,CAACC,UAAU,CAACF,KAAK,CAAC,CAAC,IAAIG,QAAQ,CAACH,KAAK,CAAC;AACrD;;AAEA;AACO,SAASI,UAAU,CAACJ,KAAU,EAAoC;EACvE,OAAO,OAAOA,KAAK,KAAK,UAAU;AACpC;AAEO,SAASK,QAAQ,CACtBC,EAAwB,EACxBC,KAAa,EACb;EACA,IAAIC,OAAY;EAEhB,OAAO,YAAgB;IAAA,kCAAZC,IAAI;MAAJA,IAAI;IAAA;IACbC,YAAY,CAACF,OAAO,CAAC;IACrBA,OAAO,GAAGG,UAAU,CAAC;MAAA,OAAML,EAAE,eAAIG,IAAI,CAAC;IAAA,GAAEF,KAAK,CAAC;EAChD,CAAC;AACH;AAEO,SAASK,WAAW,CAACC,GAAW,EAAE;EACvC,IAAIC,MAAM,GAAGD,GAAG,CAACE,OAAO,EAAE;EAE1B,IAAID,MAAM,CAACE,MAAM,KAAK,CAAC,EAAE;IACvB,OAAO,GAAG,GAAGF,MAAM;EACrB;EAEA,OAAOA,MAAM;AACf;AAEO,SAASG,YAAY,CAACjB,KAAsB,EAAW;EAC5D,OACEA,KAAK,KAAKkB,SAAS,IAAIlB,KAAK,KAAK,KAAK,IAAIA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,EAAE;AAE5E;AAEO,SAASmB,oBAAoB,CAACC,IAAqB,EAAW;EACnE,OAAO,OAAOA,IAAI,KAAK,QAAQ,IAAI,OAAOA,IAAI,KAAK,QAAQ;AAC7D;AAEO,SAASC,MAAM,CAAIC,OAAU,EAAEC,GAAkB,EAAQ;EAC9D,IAAIA,GAAG,EAAE;IACP,IAAI,OAAOA,GAAG,KAAK,UAAU,EAAE;MAC7BA,GAAG,CAACD,OAAO,CAAC;IACd,CAAC,MAAM;MACJC,GAAG,CAA+BC,OAAO,GAAGF,OAAO;IACtD;EACF;AACF;AAEO,SAASG,QAAQ,GAEF;EAAA,mCADjBC,IAAI;IAAJA,IAAI;EAAA;EAEP,IAAIF,OAAiB,GAAG,IAAI;EAC5B,OAAO;IACL,IAAIA,OAAO,GAAG;MACZ,OAAOA,OAAO;IAChB,CAAC;IACD,IAAIA,OAAO,CAACF,OAAO,EAAE;MACnBE,OAAO,GAAGF,OAAO;MACjBI,IAAI,CAACC,OAAO,CAAC,UAACJ,GAAG;QAAA,OAAKA,GAAG,IAAIF,MAAM,CAACC,OAAO,EAAEC,GAAG,CAAC;MAAA,EAAC;IACpD;EACF,CAAC;AACH;;AAEA;AACO,IAAMK,IAAI,GAAG,SAAPA,IAAI,GAAS,CAAC,CAAC;AAAC;AAEtB,SAASC,oBAAoB,CAACC,QAAyB,EAAU;EACtE,IAAIC,KAAK,GAAG,EAAE;EAEdC,KAAK,CAACC,QAAQ,CAACC,GAAG,CAACJ,QAAQ,EAAE,UAACK,KAAK,EAAK;IACtC,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7BJ,KAAK,IAAII,KAAK;IAChB;EACF,CAAC,CAAC;EAEF,OAAOJ,KAAK;AACd;AAEO,IAAMK,eAAe,GAAG,SAAlBA,eAAe,CAAoCC,KAAQ;EAAA,OACtEA,KAAK,CAACD,eAAe,EAAE;AAAA;AAAC"}
|
|
@@ -25,6 +25,7 @@ var MEDIA_QUERIES = {
|
|
|
25
25
|
TABLET: "(min-width: ".concat(BREAKPOINTS.TABLET, "px) and (max-width: ").concat(BREAKPOINTS.DESKTOP - 1, "px)"),
|
|
26
26
|
// prettier-ignore
|
|
27
27
|
|
|
28
|
+
SMALL_TABLET_PLUS: "(min-width: ".concat(BREAKPOINTS.TABLET, "px)"),
|
|
28
29
|
SMALL_TABLET: "(min-width: ".concat(BREAKPOINTS.SMALL_TABLET, "px) and (max-width: ").concat(BREAKPOINTS.TABLET - 1, "px)"),
|
|
29
30
|
// prettier-ignore
|
|
30
31
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"breakpoints.js","names":["BREAKPOINTS","DESKTOP","TABLET","SMALL_TABLET","MOBILE","MOBILE_LANDSCAPE_HEIGHT","MEDIUM_HEIGHT","MEDIA_QUERIES","DESKTOP_PLUS","module","exports"],"sources":["../../../src/shared/breakpoints.js"],"sourcesContent":["/**\n * Храним брейкпоинты в JS файле для синхронизации значений между TS и CSS.\n *\n * @type {{\n * DESKTOP: 1280,\n * TABLET: 1024,\n * SMALL_TABLET: 768,\n * MOBILE: 320,\n * MOBILE_LANDSCAPE_HEIGHT: 414,\n * MEDIUM_HEIGHT: 720\n * }}\n */\nconst BREAKPOINTS = {\n DESKTOP: 1280,\n TABLET: 1024,\n SMALL_TABLET: 768,\n MOBILE: 320,\n MOBILE_LANDSCAPE_HEIGHT: 414,\n MEDIUM_HEIGHT: 720,\n};\n\nconst MEDIA_QUERIES = {\n DESKTOP_PLUS: `(min-width: ${BREAKPOINTS.DESKTOP}px)`,\n\n TABLET: `(min-width: ${BREAKPOINTS.TABLET}px) and (max-width: ${BREAKPOINTS.DESKTOP - 1}px)`, // prettier-ignore\n\n SMALL_TABLET: `(min-width: ${BREAKPOINTS.SMALL_TABLET}px) and (max-width: ${BREAKPOINTS.TABLET - 1}px)`, // prettier-ignore\n\n MOBILE: `(min-width: ${BREAKPOINTS.MOBILE}px) and (max-width: ${BREAKPOINTS.SMALL_TABLET - 1}px)`, // prettier-ignore\n\n MEDIUM_HEIGHT: `(min-height: ${BREAKPOINTS.MEDIUM_HEIGHT}px)`,\n\n MOBILE_LANDSCAPE_HEIGHT: `(min-height: ${BREAKPOINTS.MOBILE_LANDSCAPE_HEIGHT + 1}px)`, // prettier-ignore\n};\n\nmodule.exports = { BREAKPOINTS, MEDIA_QUERIES };\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMA,WAAW,GAAG;EAClBC,OAAO,EAAE,IAAI;EACbC,MAAM,EAAE,IAAI;EACZC,YAAY,EAAE,GAAG;EACjBC,MAAM,EAAE,GAAG;EACXC,uBAAuB,EAAE,GAAG;EAC5BC,aAAa,EAAE;AACjB,CAAC;AAED,IAAMC,aAAa,GAAG;EACpBC,YAAY,wBAAiBR,WAAW,CAACC,OAAO,QAAK;EAErDC,MAAM,wBAAiBF,WAAW,CAACE,MAAM,iCAAuBF,WAAW,CAACC,OAAO,GAAG,CAAC,QAAK;EAAE;;
|
|
1
|
+
{"version":3,"file":"breakpoints.js","names":["BREAKPOINTS","DESKTOP","TABLET","SMALL_TABLET","MOBILE","MOBILE_LANDSCAPE_HEIGHT","MEDIUM_HEIGHT","MEDIA_QUERIES","DESKTOP_PLUS","SMALL_TABLET_PLUS","module","exports"],"sources":["../../../src/shared/breakpoints.js"],"sourcesContent":["/**\n * Храним брейкпоинты в JS файле для синхронизации значений между TS и CSS.\n *\n * @type {{\n * DESKTOP: 1280,\n * TABLET: 1024,\n * SMALL_TABLET: 768,\n * MOBILE: 320,\n * MOBILE_LANDSCAPE_HEIGHT: 414,\n * MEDIUM_HEIGHT: 720\n * }}\n */\nconst BREAKPOINTS = {\n DESKTOP: 1280,\n TABLET: 1024,\n SMALL_TABLET: 768,\n MOBILE: 320,\n MOBILE_LANDSCAPE_HEIGHT: 414,\n MEDIUM_HEIGHT: 720,\n};\n\nconst MEDIA_QUERIES = {\n DESKTOP_PLUS: `(min-width: ${BREAKPOINTS.DESKTOP}px)`,\n\n TABLET: `(min-width: ${BREAKPOINTS.TABLET}px) and (max-width: ${BREAKPOINTS.DESKTOP - 1}px)`, // prettier-ignore\n\n SMALL_TABLET_PLUS: `(min-width: ${BREAKPOINTS.TABLET}px)`,\n SMALL_TABLET: `(min-width: ${BREAKPOINTS.SMALL_TABLET}px) and (max-width: ${BREAKPOINTS.TABLET - 1}px)`, // prettier-ignore\n\n MOBILE: `(min-width: ${BREAKPOINTS.MOBILE}px) and (max-width: ${BREAKPOINTS.SMALL_TABLET - 1}px)`, // prettier-ignore\n\n MEDIUM_HEIGHT: `(min-height: ${BREAKPOINTS.MEDIUM_HEIGHT}px)`,\n\n MOBILE_LANDSCAPE_HEIGHT: `(min-height: ${BREAKPOINTS.MOBILE_LANDSCAPE_HEIGHT + 1}px)`, // prettier-ignore\n};\n\nmodule.exports = { BREAKPOINTS, MEDIA_QUERIES };\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMA,WAAW,GAAG;EAClBC,OAAO,EAAE,IAAI;EACbC,MAAM,EAAE,IAAI;EACZC,YAAY,EAAE,GAAG;EACjBC,MAAM,EAAE,GAAG;EACXC,uBAAuB,EAAE,GAAG;EAC5BC,aAAa,EAAE;AACjB,CAAC;AAED,IAAMC,aAAa,GAAG;EACpBC,YAAY,wBAAiBR,WAAW,CAACC,OAAO,QAAK;EAErDC,MAAM,wBAAiBF,WAAW,CAACE,MAAM,iCAAuBF,WAAW,CAACC,OAAO,GAAG,CAAC,QAAK;EAAE;;EAE9FQ,iBAAiB,wBAAiBT,WAAW,CAACE,MAAM,QAAK;EACzDC,YAAY,wBAAiBH,WAAW,CAACG,YAAY,iCAAuBH,WAAW,CAACE,MAAM,GAAG,CAAC,QAAK;EAAE;;EAEzGE,MAAM,wBAAiBJ,WAAW,CAACI,MAAM,iCAAuBJ,WAAW,CAACG,YAAY,GAAG,CAAC,QAAK;EAAE;;EAEnGG,aAAa,yBAAkBN,WAAW,CAACM,aAAa,QAAK;EAE7DD,uBAAuB,yBAAkBL,WAAW,CAACK,uBAAuB,GAAG,CAAC,QAAK,CAAE;AACzF,CAAC;;AAEDK,MAAM,CAACC,OAAO,GAAG;EAAEX,WAAW,EAAXA,WAAW;EAAEO,aAAa,EAAbA;AAAc,CAAC"}
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -35,3 +35,9 @@ export interface Version {
|
|
|
35
35
|
minor?: number;
|
|
36
36
|
patch?: number;
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Тип содержит атрибуты, которые применяются только для `<a>`
|
|
40
|
+
*
|
|
41
|
+
* @see {@link https://developer.mozilla.org/ru/docs/Web/HTML/Element/A <a> - HTML | MDN}
|
|
42
|
+
*/
|
|
43
|
+
export declare type AnchorHTMLAttributesOnly = Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, keyof React.HTMLAttributes<HTMLAnchorElement>>;
|
package/dist/cjs/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["import * as React from \"react\";\nimport { PlatformType } from \"./lib/platform\";\nimport { Insets } from \"@vkontakte/vk-bridge\";\n\nexport type AnyFunction = (...args: any[]) => any;\n\nexport type AlignType = \"left\" | \"center\" | \"right\";\n\nexport interface HasChildren {\n children?: React.ReactNode;\n}\n\nexport interface HasRootRef<T> {\n getRootRef?: React.Ref<T>;\n}\n\nexport interface HasRef<T> {\n getRef?: React.Ref<T>;\n}\n\nexport interface HasComponent {\n Component?: React.ElementType;\n}\n\nexport interface HasAlign {\n align?: AlignType;\n}\n\nexport interface HasPlatform {\n /**\n * @ignore\n */\n platform?: PlatformType;\n}\n\nexport interface HasInsets {\n /**\n * @ignore\n */\n insets?: Partial<Insets>;\n}\n\nexport interface Version {\n major: number;\n minor?: number;\n patch?: number;\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/types.ts"],"sourcesContent":["import * as React from \"react\";\nimport { PlatformType } from \"./lib/platform\";\nimport { Insets } from \"@vkontakte/vk-bridge\";\n\nexport type AnyFunction = (...args: any[]) => any;\n\nexport type AlignType = \"left\" | \"center\" | \"right\";\n\nexport interface HasChildren {\n children?: React.ReactNode;\n}\n\nexport interface HasRootRef<T> {\n getRootRef?: React.Ref<T>;\n}\n\nexport interface HasRef<T> {\n getRef?: React.Ref<T>;\n}\n\nexport interface HasComponent {\n Component?: React.ElementType;\n}\n\nexport interface HasAlign {\n align?: AlignType;\n}\n\nexport interface HasPlatform {\n /**\n * @ignore\n */\n platform?: PlatformType;\n}\n\nexport interface HasInsets {\n /**\n * @ignore\n */\n insets?: Partial<Insets>;\n}\n\nexport interface Version {\n major: number;\n minor?: number;\n patch?: number;\n}\n\n/**\n * Тип содержит атрибуты, которые применяются только для `<a>`\n *\n * @see {@link https://developer.mozilla.org/ru/docs/Web/HTML/Element/A <a> - HTML | MDN}\n */\nexport type AnchorHTMLAttributesOnly = Omit<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n keyof React.HTMLAttributes<HTMLAnchorElement>\n>;\n"],"mappings":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { ButtonProps } from "../Button/Button";
|
|
3
|
-
|
|
4
|
-
export interface
|
|
3
|
+
import { AnchorHTMLAttributesOnly } from "../../types";
|
|
4
|
+
export interface AlertActionInterface extends Pick<ButtonProps, "Component">, AnchorHTMLAttributesOnly {
|
|
5
5
|
title: string;
|
|
6
6
|
action?: VoidFunction;
|
|
7
7
|
autoClose?: boolean;
|
|
@@ -9,7 +9,7 @@ export interface AlertAction extends Pick<ButtonProps, "Component" | "href"> {
|
|
|
9
9
|
}
|
|
10
10
|
export interface AlertProps extends React.HTMLAttributes<HTMLElement> {
|
|
11
11
|
actionsLayout?: "vertical" | "horizontal";
|
|
12
|
-
actions?:
|
|
12
|
+
actions?: AlertActionInterface[];
|
|
13
13
|
header?: React.ReactNode;
|
|
14
14
|
text?: React.ReactNode;
|
|
15
15
|
onClose: VoidFunction;
|