@vkontakte/vkui 6.7.3 → 6.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/BaseGallery/BaseGallery.d.ts.map +1 -1
- package/dist/cjs/components/BaseGallery/BaseGallery.js +5 -2
- package/dist/cjs/components/BaseGallery/BaseGallery.js.map +1 -1
- package/dist/cjs/components/Calendar/Calendar.d.ts +6 -6
- package/dist/cjs/components/Calendar/Calendar.d.ts.map +1 -1
- package/dist/cjs/components/Calendar/Calendar.js +25 -5
- package/dist/cjs/components/Calendar/Calendar.js.map +1 -1
- package/dist/cjs/components/CalendarDay/CalendarDay.d.ts +4 -1
- package/dist/cjs/components/CalendarDay/CalendarDay.d.ts.map +1 -1
- package/dist/cjs/components/CalendarDay/CalendarDay.js +5 -3
- package/dist/cjs/components/CalendarDay/CalendarDay.js.map +1 -1
- package/dist/cjs/components/CalendarDays/CalendarDays.d.ts +6 -3
- package/dist/cjs/components/CalendarDays/CalendarDays.d.ts.map +1 -1
- package/dist/cjs/components/CalendarDays/CalendarDays.js +5 -3
- package/dist/cjs/components/CalendarDays/CalendarDays.js.map +1 -1
- package/dist/cjs/components/CalendarHeader/CalendarHeader.d.ts +8 -2
- package/dist/cjs/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
- package/dist/cjs/components/CalendarHeader/CalendarHeader.js +14 -6
- package/dist/cjs/components/CalendarHeader/CalendarHeader.js.map +1 -1
- package/dist/cjs/components/CalendarRange/CalendarRange.d.ts +8 -4
- package/dist/cjs/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/cjs/components/CalendarRange/CalendarRange.js +13 -8
- package/dist/cjs/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/cjs/components/CalendarTime/CalendarTime.d.ts +9 -2
- package/dist/cjs/components/CalendarTime/CalendarTime.d.ts.map +1 -1
- package/dist/cjs/components/CalendarTime/CalendarTime.js +10 -5
- package/dist/cjs/components/CalendarTime/CalendarTime.js.map +1 -1
- package/dist/cjs/components/Clickable/useState.d.ts +1 -1
- package/dist/cjs/components/Clickable/useState.d.ts.map +1 -1
- package/dist/cjs/components/Clickable/useState.js +12 -19
- package/dist/cjs/components/Clickable/useState.js.map +1 -1
- package/dist/cjs/components/DateInput/DateInput.d.ts +12 -3
- package/dist/cjs/components/DateInput/DateInput.d.ts.map +1 -1
- package/dist/cjs/components/DateInput/DateInput.js +26 -11
- package/dist/cjs/components/DateInput/DateInput.js.map +1 -1
- package/dist/cjs/components/DateRangeInput/DateRangeInput.d.ts +15 -3
- package/dist/cjs/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/cjs/components/DateRangeInput/DateRangeInput.js +22 -11
- package/dist/cjs/components/DateRangeInput/DateRangeInput.js.map +1 -1
- package/dist/cjs/components/FocusTrap/FocusTrap.d.ts +1 -1
- package/dist/cjs/components/FocusTrap/FocusTrap.d.ts.map +1 -1
- package/dist/cjs/components/FocusTrap/FocusTrap.js +50 -41
- package/dist/cjs/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/cjs/components/Gallery/Gallery.d.ts +1 -1
- package/dist/cjs/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/cjs/components/Gallery/Gallery.js +12 -3
- package/dist/cjs/components/Gallery/Gallery.js.map +1 -1
- package/dist/cjs/components/Gallery/hooks.d.ts +9 -1
- package/dist/cjs/components/Gallery/hooks.d.ts.map +1 -1
- package/dist/cjs/components/Gallery/hooks.js +43 -25
- package/dist/cjs/components/Gallery/hooks.js.map +1 -1
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +19 -26
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/cjs/components/Popover/Popover.js +1 -1
- package/dist/cjs/components/Popover/Popover.js.map +1 -1
- package/dist/cjs/hooks/useDateInput.d.ts +2 -1
- package/dist/cjs/hooks/useDateInput.d.ts.map +1 -1
- package/dist/cjs/hooks/useDateInput.js +29 -9
- package/dist/cjs/hooks/useDateInput.js.map +1 -1
- package/dist/cjs/lib/floating/customResizeObserver.d.ts.map +1 -1
- package/dist/cjs/lib/floating/customResizeObserver.js +0 -1
- package/dist/cjs/lib/floating/customResizeObserver.js.map +1 -1
- package/dist/cjs/lib/floating/types/component.d.ts +2 -2
- package/dist/cjs/lib/floating/types/component.d.ts.map +1 -1
- package/dist/cjs/lib/floating/useFloatingWithInteractions/index.d.ts +1 -0
- package/dist/cjs/lib/floating/useFloatingWithInteractions/index.d.ts.map +1 -1
- package/dist/cjs/lib/floating/useFloatingWithInteractions/index.js.map +1 -1
- package/dist/cjs/lib/floating/useFloatingWithInteractions/types.d.ts +2 -1
- package/dist/cjs/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
- package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
- package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +14 -1
- package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
- package/dist/components/BaseGallery/BaseGallery.d.ts.map +1 -1
- package/dist/components/BaseGallery/BaseGallery.js +5 -2
- package/dist/components/BaseGallery/BaseGallery.js.map +1 -1
- package/dist/components/Calendar/Calendar.d.ts +6 -6
- package/dist/components/Calendar/Calendar.d.ts.map +1 -1
- package/dist/components/Calendar/Calendar.js +25 -5
- package/dist/components/Calendar/Calendar.js.map +1 -1
- package/dist/components/CalendarDay/CalendarDay.d.ts +4 -1
- package/dist/components/CalendarDay/CalendarDay.d.ts.map +1 -1
- package/dist/components/CalendarDay/CalendarDay.js +5 -3
- package/dist/components/CalendarDay/CalendarDay.js.map +1 -1
- package/dist/components/CalendarDays/CalendarDays.d.ts +6 -3
- package/dist/components/CalendarDays/CalendarDays.d.ts.map +1 -1
- package/dist/components/CalendarDays/CalendarDays.js +5 -3
- package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
- package/dist/components/CalendarHeader/CalendarHeader.d.ts +8 -2
- package/dist/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
- package/dist/components/CalendarHeader/CalendarHeader.js +14 -6
- package/dist/components/CalendarHeader/CalendarHeader.js.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.d.ts +8 -4
- package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.js +13 -8
- package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/components/CalendarTime/CalendarTime.d.ts +9 -2
- package/dist/components/CalendarTime/CalendarTime.d.ts.map +1 -1
- package/dist/components/CalendarTime/CalendarTime.js +10 -5
- package/dist/components/CalendarTime/CalendarTime.js.map +1 -1
- package/dist/components/Clickable/useState.d.ts +1 -1
- package/dist/components/Clickable/useState.d.ts.map +1 -1
- package/dist/components/Clickable/useState.js +12 -19
- package/dist/components/Clickable/useState.js.map +1 -1
- package/dist/components/DateInput/DateInput.d.ts +12 -3
- package/dist/components/DateInput/DateInput.d.ts.map +1 -1
- package/dist/components/DateInput/DateInput.js +26 -11
- package/dist/components/DateInput/DateInput.js.map +1 -1
- package/dist/components/DateRangeInput/DateRangeInput.d.ts +15 -3
- package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/components/DateRangeInput/DateRangeInput.js +22 -11
- package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
- package/dist/components/FocusTrap/FocusTrap.d.ts +1 -1
- package/dist/components/FocusTrap/FocusTrap.d.ts.map +1 -1
- package/dist/components/FocusTrap/FocusTrap.js +51 -42
- package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/components/Gallery/Gallery.d.ts +1 -1
- package/dist/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/components/Gallery/Gallery.js +12 -3
- package/dist/components/Gallery/Gallery.js.map +1 -1
- package/dist/components/Gallery/hooks.d.ts +9 -1
- package/dist/components/Gallery/hooks.d.ts.map +1 -1
- package/dist/components/Gallery/hooks.js +43 -25
- package/dist/components/Gallery/hooks.js.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.js +20 -27
- package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/components/Popover/Popover.js +1 -1
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/components.js.tmp +374 -212
- package/dist/cssm/components/BaseGallery/BaseGallery.d.ts.map +1 -1
- package/dist/cssm/components/BaseGallery/BaseGallery.js +3 -1
- package/dist/cssm/components/BaseGallery/BaseGallery.js.map +1 -1
- package/dist/cssm/components/Calendar/Calendar.d.ts +6 -6
- package/dist/cssm/components/Calendar/Calendar.d.ts.map +1 -1
- package/dist/cssm/components/Calendar/Calendar.js +14 -4
- package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
- package/dist/cssm/components/CalendarDay/CalendarDay.d.ts +4 -1
- package/dist/cssm/components/CalendarDay/CalendarDay.d.ts.map +1 -1
- package/dist/cssm/components/CalendarDay/CalendarDay.js +2 -1
- package/dist/cssm/components/CalendarDay/CalendarDay.js.map +1 -1
- package/dist/cssm/components/CalendarDays/CalendarDays.d.ts +6 -3
- package/dist/cssm/components/CalendarDays/CalendarDays.d.ts.map +1 -1
- package/dist/cssm/components/CalendarDays/CalendarDays.js +2 -1
- package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
- package/dist/cssm/components/CalendarHeader/CalendarHeader.d.ts +8 -2
- package/dist/cssm/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
- package/dist/cssm/components/CalendarHeader/CalendarHeader.js +7 -3
- package/dist/cssm/components/CalendarHeader/CalendarHeader.js.map +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.d.ts +8 -4
- package/dist/cssm/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.js +9 -5
- package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/cssm/components/CalendarTime/CalendarTime.d.ts +9 -2
- package/dist/cssm/components/CalendarTime/CalendarTime.d.ts.map +1 -1
- package/dist/cssm/components/CalendarTime/CalendarTime.js +10 -5
- package/dist/cssm/components/CalendarTime/CalendarTime.js.map +1 -1
- package/dist/cssm/components/CalendarTime/CalendarTime.module.css +4 -0
- package/dist/cssm/components/Clickable/useState.d.ts +1 -1
- package/dist/cssm/components/Clickable/useState.d.ts.map +1 -1
- package/dist/cssm/components/Clickable/useState.js +10 -11
- package/dist/cssm/components/Clickable/useState.js.map +1 -1
- package/dist/cssm/components/DateInput/DateInput.d.ts +12 -3
- package/dist/cssm/components/DateInput/DateInput.d.ts.map +1 -1
- package/dist/cssm/components/DateInput/DateInput.js +18 -9
- package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
- package/dist/cssm/components/DateRangeInput/DateRangeInput.d.ts +15 -3
- package/dist/cssm/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/cssm/components/DateRangeInput/DateRangeInput.js +17 -9
- package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
- package/dist/cssm/components/FocusTrap/FocusTrap.d.ts +1 -1
- package/dist/cssm/components/FocusTrap/FocusTrap.d.ts.map +1 -1
- package/dist/cssm/components/FocusTrap/FocusTrap.js +51 -42
- package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/cssm/components/Gallery/Gallery.d.ts +1 -1
- package/dist/cssm/components/Gallery/Gallery.d.ts.map +1 -1
- package/dist/cssm/components/Gallery/Gallery.js +9 -2
- package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
- package/dist/cssm/components/Gallery/hooks.d.ts +9 -1
- package/dist/cssm/components/Gallery/hooks.d.ts.map +1 -1
- package/dist/cssm/components/Gallery/hooks.js +43 -25
- package/dist/cssm/components/Gallery/hooks.js.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +20 -27
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/cssm/components/Popover/Popover.js +1 -1
- package/dist/cssm/components/Popover/Popover.js.map +1 -1
- package/dist/cssm/hooks/useDateInput.d.ts +2 -1
- package/dist/cssm/hooks/useDateInput.d.ts.map +1 -1
- package/dist/cssm/hooks/useDateInput.js +30 -9
- package/dist/cssm/hooks/useDateInput.js.map +1 -1
- package/dist/cssm/lib/floating/customResizeObserver.d.ts.map +1 -1
- package/dist/cssm/lib/floating/customResizeObserver.js +0 -1
- package/dist/cssm/lib/floating/customResizeObserver.js.map +1 -1
- package/dist/cssm/lib/floating/types/component.d.ts +2 -2
- package/dist/cssm/lib/floating/types/component.d.ts.map +1 -1
- package/dist/cssm/lib/floating/types/component.js.map +1 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/index.d.ts +1 -0
- package/dist/cssm/lib/floating/useFloatingWithInteractions/index.d.ts.map +1 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/index.js.map +1 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/types.d.ts +2 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +14 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
- package/dist/hooks/useDateInput.d.ts +2 -1
- package/dist/hooks/useDateInput.d.ts.map +1 -1
- package/dist/hooks/useDateInput.js +30 -9
- package/dist/hooks/useDateInput.js.map +1 -1
- package/dist/lib/floating/customResizeObserver.d.ts.map +1 -1
- package/dist/lib/floating/customResizeObserver.js +0 -1
- package/dist/lib/floating/customResizeObserver.js.map +1 -1
- package/dist/lib/floating/types/component.d.ts +2 -2
- package/dist/lib/floating/types/component.d.ts.map +1 -1
- package/dist/lib/floating/types/component.js.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/index.d.ts +1 -0
- package/dist/lib/floating/useFloatingWithInteractions/index.d.ts.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/index.js.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/types.d.ts +2 -1
- package/dist/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +14 -1
- package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/dist/vkui.js.tmp +374 -212
- package/package.json +1 -1
- package/src/components/BaseGallery/BaseGallery.tsx +8 -1
- package/src/components/Calendar/Calendar.tsx +49 -6
- package/src/components/CalendarDay/CalendarDay.tsx +7 -1
- package/src/components/CalendarDays/CalendarDays.tsx +9 -1
- package/src/components/CalendarHeader/CalendarHeader.tsx +21 -1
- package/src/components/CalendarRange/CalendarRange.tsx +24 -3
- package/src/components/CalendarTime/CalendarTime.module.css +4 -0
- package/src/components/CalendarTime/CalendarTime.tsx +39 -10
- package/src/components/Clickable/useState.tsx +30 -27
- package/src/components/DateInput/DateInput.tsx +32 -3
- package/src/components/DateRangeInput/DateRangeInput.tsx +28 -1
- package/src/components/FocusTrap/FocusTrap.tsx +75 -45
- package/src/components/Gallery/Gallery.tsx +10 -1
- package/src/components/Gallery/hooks.ts +49 -33
- package/src/components/HorizontalScroll/HorizontalScroll.tsx +23 -28
- package/src/components/Popover/Popover.tsx +1 -1
- package/src/hooks/useDateInput.ts +23 -6
- package/src/lib/floating/customResizeObserver.ts +0 -1
- package/src/lib/floating/types/component.ts +2 -1
- package/src/lib/floating/useFloatingWithInteractions/index.ts +2 -0
- package/src/lib/floating/useFloatingWithInteractions/types.ts +3 -1
- package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +15 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useDateInput.ts"],"sourcesContent":["import * as React from 'react';\nimport { useDOM } from '../lib/dom';\nimport { useBooleanState } from './useBooleanState';\nimport { useGlobalEventListener } from './useGlobalEventListener';\n\nexport interface UseDateInputDependencies<T, D> {\n maxElement: number;\n refs: Array<React.RefObject<T>>;\n autoFocus?: boolean;\n disabled?: boolean;\n value?: D;\n elementsConfig: (index: number) => {\n length: number;\n min: number;\n max: number;\n };\n onInternalValueChange: (value: string[]) => void;\n getInternalValue: (value?: D | undefined) => string[];\n onChange?: (value?: D | undefined) => void;\n}\n\nexport function useDateInput<T extends HTMLElement, D>({\n maxElement,\n refs,\n autoFocus,\n disabled,\n elementsConfig,\n onChange,\n onInternalValueChange,\n getInternalValue,\n value,\n}: UseDateInputDependencies<T, D>): {\n rootRef: React.RefObject<HTMLDivElement>;\n calendarRef: React.RefObject<HTMLDivElement>;\n open: boolean;\n openCalendar: () => void;\n closeCalendar: () => void;\n internalValue: string[];\n focusedElement: number | null;\n setFocusedElement: React.Dispatch<React.SetStateAction<number | null>>;\n handleKeyDown: (e: React.KeyboardEvent<HTMLSpanElement>) => void;\n clear: () => void;\n handleFieldEnter: () => void;\n removeFocusFromField: () => void;\n} {\n const { document } = useDOM();\n const { value: open, setTrue: openCalendar, setFalse: closeCalendar } = useBooleanState(false);\n const rootRef = React.useRef<HTMLDivElement>(null);\n const calendarRef = React.useRef<HTMLDivElement>(null);\n const [internalValue, setInternalValue] = React.useState<string[]>([]);\n const [focusedElement, setFocusedElement] = React.useState<number | null>(null);\n const { window } = useDOM();\n\n const removeFocusFromField = React.useCallback(() => {\n if (focusedElement !== null) {\n setFocusedElement(null);\n closeCalendar();\n window!.getSelection()?.removeAllRanges();\n setInternalValue(getInternalValue(value));\n }\n }, [focusedElement, closeCalendar, getInternalValue, value, window]);\n\n const handleClickOutside = React.useCallback(\n (e: MouseEvent) => {\n if (\n !rootRef.current?.contains(e.target as Node | null) &&\n !calendarRef.current?.contains(e.target as Node | null)\n ) {\n removeFocusFromField();\n }\n },\n [removeFocusFromField],\n );\n\n const selectFirst = React.useCallback(() => {\n setFocusedElement(0);\n }, []);\n\n useGlobalEventListener(document, 'click', handleClickOutside, {\n capture: true,\n });\n\n React.useEffect(() => {\n setInternalValue(getInternalValue(value));\n }, [getInternalValue, value]);\n\n React.useEffect(() => {\n if (autoFocus) {\n selectFirst();\n }\n }, [autoFocus, selectFirst]);\n\n React.useEffect(() => {\n if (disabled || focusedElement === null) {\n return;\n }\n\n const range = window!.document.createRange();\n\n let element = refs[focusedElement].current;\n\n if (element) {\n element.focus();\n openCalendar();\n range.selectNodeContents(element as Node);\n\n const selection = window!.getSelection();\n selection?.removeAllRanges();\n selection?.addRange(range);\n }\n }, [disabled, focusedElement, openCalendar, refs, window]);\n\n const clear = React.useCallback(() => {\n onChange?.(undefined);\n selectFirst();\n }, [onChange, selectFirst]);\n\n const handleFieldEnter = React.useCallback(() => {\n if (!open) {\n selectFirst();\n }\n }, [open, selectFirst]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLSpanElement>) => {\n if (focusedElement === null) {\n return;\n }\n\n const _value = [...internalValue];\n const config = elementsConfig(focusedElement);\n\n if (/^\\d+$/.test(e.key)) {\n if (_value[focusedElement].length >= config.length) {\n _value[focusedElement] = e.key;\n } else {\n _value[focusedElement] += e.key;\n if (_value[focusedElement].length >= config.length && focusedElement < maxElement) {\n setFocusedElement(focusedElement + 1);\n }\n }\n } else if (e.key === 'Backspace') {\n if (!_value[focusedElement]) {\n setFocusedElement(focusedElement <= 0 ? maxElement : focusedElement - 1);\n } else {\n _value[focusedElement] = _value[focusedElement].slice(0, -1);\n }\n } else if (e.key === 'ArrowDown' || e.key === 'Down') {\n let currentValue = Number(_value[focusedElement]);\n _value[focusedElement] = String(\n currentValue <= config.min ? config.max : currentValue - 1,\n ).padStart(config.length, '0');\n } else if (e.key === 'ArrowUp' || e.key === 'Up') {\n let currentValue = Number(_value[focusedElement]);\n _value[focusedElement] = String(\n currentValue >= config.max ? config.min : currentValue + 1,\n ).padStart(config.length, '0');\n } else if (\n e.key === 'Enter' ||\n (e.key === 'Tab' && focusedElement === maxElement) ||\n (e.key === 'Tab' && e.shiftKey && focusedElement === 0)\n ) {\n removeFocusFromField();\n return;\n } else if (e.key === 'ArrowLeft' || e.key === 'Left' || (e.key === 'Tab' && e.shiftKey)) {\n setFocusedElement(focusedElement <= 0 ? maxElement : focusedElement - 1);\n } else if (e.key === 'ArrowRight' || e.key === 'Right' || e.key === 'Tab') {\n setFocusedElement(focusedElement >= maxElement ? 0 : focusedElement + 1);\n } else if (e.key === 'Delete' || e.key === 'Del') {\n _value[focusedElement] = '';\n } else {\n return;\n }\n\n e.preventDefault();\n setInternalValue(_value);\n onInternalValueChange(_value);\n },\n [\n elementsConfig,\n focusedElement,\n internalValue,\n maxElement,\n onInternalValueChange,\n removeFocusFromField,\n ],\n );\n\n return {\n rootRef,\n calendarRef,\n open,\n openCalendar,\n closeCalendar,\n internalValue,\n focusedElement,\n setFocusedElement,\n handleKeyDown,\n clear,\n handleFieldEnter,\n removeFocusFromField,\n };\n}\n"],"names":["React","useDOM","useBooleanState","useGlobalEventListener","useDateInput","maxElement","refs","autoFocus","disabled","elementsConfig","onChange","onInternalValueChange","getInternalValue","value","document","open","setTrue","openCalendar","setFalse","closeCalendar","rootRef","useRef","calendarRef","internalValue","setInternalValue","useState","focusedElement","setFocusedElement","window","removeFocusFromField","useCallback","getSelection","removeAllRanges","handleClickOutside","e","current","contains","target","selectFirst","capture","useEffect","range","createRange","element","focus","selectNodeContents","selection","addRange","clear","undefined","handleFieldEnter","handleKeyDown","_value","config","test","key","length","slice","currentValue","Number","String","min","max","padStart","shiftKey","preventDefault"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,MAAM,QAAQ,aAAa;AACpC,SAASC,eAAe,QAAQ,oBAAoB;AACpD,SAASC,sBAAsB,QAAQ,2BAA2B;AAkBlE,OAAO,SAASC,aAAuC,EACrDC,UAAU,EACVC,IAAI,EACJC,SAAS,EACTC,QAAQ,EACRC,cAAc,EACdC,QAAQ,EACRC,qBAAqB,EACrBC,gBAAgB,EAChBC,KAAK,EAC0B;IAc/B,MAAM,EAAEC,QAAQ,EAAE,GAAGb;IACrB,MAAM,EAAEY,OAAOE,IAAI,EAAEC,SAASC,YAAY,EAAEC,UAAUC,aAAa,EAAE,GAAGjB,gBAAgB;IACxF,MAAMkB,UAAUpB,MAAMqB,MAAM,CAAiB;IAC7C,MAAMC,cAActB,MAAMqB,MAAM,CAAiB;IACjD,MAAM,CAACE,eAAeC,iBAAiB,GAAGxB,MAAMyB,QAAQ,CAAW,EAAE;IACrE,MAAM,CAACC,gBAAgBC,kBAAkB,GAAG3B,MAAMyB,QAAQ,CAAgB;IAC1E,MAAM,EAAEG,MAAM,EAAE,GAAG3B;IAEnB,MAAM4B,uBAAuB7B,MAAM8B,WAAW,CAAC;QAC7C,IAAIJ,mBAAmB,MAAM;gBAG3BE;YAFAD,kBAAkB;YAClBR;aACAS,uBAAAA,OAAQG,YAAY,gBAApBH,2CAAAA,qBAAwBI,eAAe;YACvCR,iBAAiBZ,iBAAiBC;QACpC;IACF,GAAG;QAACa;QAAgBP;QAAeP;QAAkBC;QAAOe;KAAO;IAEnE,MAAMK,qBAAqBjC,MAAM8B,WAAW,CAC1C,CAACI;YAEId,kBACAE;QAFH,IACE,GAACF,mBAAAA,QAAQe,OAAO,cAAff,uCAAAA,iBAAiBgB,QAAQ,CAACF,EAAEG,MAAM,MACnC,GAACf,uBAAAA,YAAYa,OAAO,cAAnBb,2CAAAA,qBAAqBc,QAAQ,CAACF,EAAEG,MAAM,IACvC;YACAR;QACF;IACF,GACA;QAACA;KAAqB;IAGxB,MAAMS,cAActC,MAAM8B,WAAW,CAAC;QACpCH,kBAAkB;IACpB,GAAG,EAAE;IAELxB,uBAAuBW,UAAU,SAASmB,oBAAoB;QAC5DM,SAAS;IACX;IAEAvC,MAAMwC,SAAS,CAAC;QACdhB,iBAAiBZ,iBAAiBC;IACpC,GAAG;QAACD;QAAkBC;KAAM;IAE5Bb,MAAMwC,SAAS,CAAC;QACd,IAAIjC,WAAW;YACb+B;QACF;IACF,GAAG;QAAC/B;QAAW+B;KAAY;IAE3BtC,MAAMwC,SAAS,CAAC;QACd,IAAIhC,YAAYkB,mBAAmB,MAAM;YACvC;QACF;QAEA,MAAMe,QAAQb,OAAQd,QAAQ,CAAC4B,WAAW;QAE1C,IAAIC,UAAUrC,IAAI,CAACoB,eAAe,CAACS,OAAO;QAE1C,IAAIQ,SAAS;YACXA,QAAQC,KAAK;YACb3B;YACAwB,MAAMI,kBAAkB,CAACF;YAEzB,MAAMG,YAAYlB,OAAQG,YAAY;YACtCe,sBAAAA,gCAAAA,UAAWd,eAAe;YAC1Bc,sBAAAA,gCAAAA,UAAWC,QAAQ,CAACN;QACtB;IACF,GAAG;QAACjC;QAAUkB;QAAgBT;QAAcX;QAAMsB;KAAO;IAEzD,MAAMoB,QAAQhD,MAAM8B,WAAW,CAAC;QAC9BpB,qBAAAA,+BAAAA,SAAWuC;QACXX;IACF,GAAG;QAAC5B;QAAU4B;KAAY;IAE1B,MAAMY,mBAAmBlD,MAAM8B,WAAW,CAAC;QACzC,IAAI,CAACf,MAAM;YACTuB;QACF;IACF,GAAG;QAACvB;QAAMuB;KAAY;IAEtB,MAAMa,gBAAgBnD,MAAM8B,WAAW,CACrC,CAACI;QACC,IAAIR,mBAAmB,MAAM;YAC3B;QACF;QAEA,MAAM0B,SAAS;eAAI7B;SAAc;QACjC,MAAM8B,SAAS5C,eAAeiB;QAE9B,IAAI,QAAQ4B,IAAI,CAACpB,EAAEqB,GAAG,GAAG;YACvB,IAAIH,MAAM,CAAC1B,eAAe,CAAC8B,MAAM,IAAIH,OAAOG,MAAM,EAAE;gBAClDJ,MAAM,CAAC1B,eAAe,GAAGQ,EAAEqB,GAAG;YAChC,OAAO;gBACLH,MAAM,CAAC1B,eAAe,IAAIQ,EAAEqB,GAAG;gBAC/B,IAAIH,MAAM,CAAC1B,eAAe,CAAC8B,MAAM,IAAIH,OAAOG,MAAM,IAAI9B,iBAAiBrB,YAAY;oBACjFsB,kBAAkBD,iBAAiB;gBACrC;YACF;QACF,OAAO,IAAIQ,EAAEqB,GAAG,KAAK,aAAa;YAChC,IAAI,CAACH,MAAM,CAAC1B,eAAe,EAAE;gBAC3BC,kBAAkBD,kBAAkB,IAAIrB,aAAaqB,iBAAiB;YACxE,OAAO;gBACL0B,MAAM,CAAC1B,eAAe,GAAG0B,MAAM,CAAC1B,eAAe,CAAC+B,KAAK,CAAC,GAAG,CAAC;YAC5D;QACF,OAAO,IAAIvB,EAAEqB,GAAG,KAAK,eAAerB,EAAEqB,GAAG,KAAK,QAAQ;YACpD,IAAIG,eAAeC,OAAOP,MAAM,CAAC1B,eAAe;YAChD0B,MAAM,CAAC1B,eAAe,GAAGkC,OACvBF,gBAAgBL,OAAOQ,GAAG,GAAGR,OAAOS,GAAG,GAAGJ,eAAe,GACzDK,QAAQ,CAACV,OAAOG,MAAM,EAAE;QAC5B,OAAO,IAAItB,EAAEqB,GAAG,KAAK,aAAarB,EAAEqB,GAAG,KAAK,MAAM;YAChD,IAAIG,eAAeC,OAAOP,MAAM,CAAC1B,eAAe;YAChD0B,MAAM,CAAC1B,eAAe,GAAGkC,OACvBF,gBAAgBL,OAAOS,GAAG,GAAGT,OAAOQ,GAAG,GAAGH,eAAe,GACzDK,QAAQ,CAACV,OAAOG,MAAM,EAAE;QAC5B,OAAO,IACLtB,EAAEqB,GAAG,KAAK,WACTrB,EAAEqB,GAAG,KAAK,SAAS7B,mBAAmBrB,cACtC6B,EAAEqB,GAAG,KAAK,SAASrB,EAAE8B,QAAQ,IAAItC,mBAAmB,GACrD;YACAG;YACA;QACF,OAAO,IAAIK,EAAEqB,GAAG,KAAK,eAAerB,EAAEqB,GAAG,KAAK,UAAWrB,EAAEqB,GAAG,KAAK,SAASrB,EAAE8B,QAAQ,EAAG;YACvFrC,kBAAkBD,kBAAkB,IAAIrB,aAAaqB,iBAAiB;QACxE,OAAO,IAAIQ,EAAEqB,GAAG,KAAK,gBAAgBrB,EAAEqB,GAAG,KAAK,WAAWrB,EAAEqB,GAAG,KAAK,OAAO;YACzE5B,kBAAkBD,kBAAkBrB,aAAa,IAAIqB,iBAAiB;QACxE,OAAO,IAAIQ,EAAEqB,GAAG,KAAK,YAAYrB,EAAEqB,GAAG,KAAK,OAAO;YAChDH,MAAM,CAAC1B,eAAe,GAAG;QAC3B,OAAO;YACL;QACF;QAEAQ,EAAE+B,cAAc;QAChBzC,iBAAiB4B;QACjBzC,sBAAsByC;IACxB,GACA;QACE3C;QACAiB;QACAH;QACAlB;QACAM;QACAkB;KACD;IAGH,OAAO;QACLT;QACAE;QACAP;QACAE;QACAE;QACAI;QACAG;QACAC;QACAwB;QACAH;QACAE;QACArB;IACF;AACF"}
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useDateInput.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport * as React from 'react';\nimport { useDOM } from '../lib/dom';\nimport { useBooleanState } from './useBooleanState';\nimport { useGlobalEventListener } from './useGlobalEventListener';\n\nexport interface UseDateInputDependencies<T, D> {\n maxElement: number;\n refs: Array<React.RefObject<T>>;\n autoFocus?: boolean;\n disabled?: boolean;\n value?: D;\n elementsConfig: (index: number) => {\n length: number;\n min: number;\n max: number;\n };\n onInternalValueChange: (value: string[]) => void;\n getInternalValue: (value?: D | undefined) => string[];\n onChange?: (value?: D | undefined) => void;\n onCalendarOpenChanged?: (opened: boolean) => void;\n}\n\nexport function useDateInput<T extends HTMLElement, D>({\n maxElement,\n refs,\n autoFocus,\n disabled,\n elementsConfig,\n onChange,\n onInternalValueChange,\n getInternalValue,\n value,\n onCalendarOpenChanged,\n}: UseDateInputDependencies<T, D>): {\n rootRef: React.RefObject<HTMLDivElement>;\n calendarRef: React.RefObject<HTMLDivElement>;\n open: boolean;\n openCalendar: () => void;\n closeCalendar: () => void;\n internalValue: string[];\n focusedElement: number | null;\n setFocusedElement: React.Dispatch<React.SetStateAction<number | null>>;\n handleKeyDown: (e: React.KeyboardEvent<HTMLSpanElement>) => void;\n clear: () => void;\n handleFieldEnter: () => void;\n removeFocusFromField: () => void;\n} {\n const { document } = useDOM();\n const { value: open, setTrue: openCalendar, setFalse: closeCalendar } = useBooleanState(false);\n const rootRef = React.useRef<HTMLDivElement>(null);\n const calendarRef = React.useRef<HTMLDivElement>(null);\n const [internalValue, setInternalValue] = React.useState<string[]>([]);\n const [focusedElement, setFocusedElement] = React.useState<number | null>(null);\n const { window } = useDOM();\n\n const _onCalendarClose = useCallback(() => {\n if (open) {\n closeCalendar();\n onCalendarOpenChanged?.(false);\n }\n }, [closeCalendar, onCalendarOpenChanged, open]);\n\n const _onCalendarOpen = useCallback(() => {\n if (!open) {\n openCalendar();\n onCalendarOpenChanged?.(true);\n }\n }, [onCalendarOpenChanged, open, openCalendar]);\n\n const removeFocusFromField = React.useCallback(() => {\n if (focusedElement !== null) {\n setFocusedElement(null);\n _onCalendarClose();\n window!.getSelection()?.removeAllRanges();\n setInternalValue(getInternalValue(value));\n }\n }, [focusedElement, _onCalendarClose, window, getInternalValue, value]);\n\n const handleClickOutside = React.useCallback(\n (e: MouseEvent) => {\n if (\n !rootRef.current?.contains(e.target as Node | null) &&\n !calendarRef.current?.contains(e.target as Node | null)\n ) {\n removeFocusFromField();\n }\n },\n [removeFocusFromField],\n );\n\n const selectFirst = React.useCallback(() => {\n setFocusedElement(0);\n }, []);\n\n useGlobalEventListener(document, 'click', handleClickOutside, {\n capture: true,\n });\n\n React.useEffect(() => {\n setInternalValue(getInternalValue(value));\n }, [getInternalValue, value]);\n\n React.useEffect(() => {\n if (autoFocus) {\n selectFirst();\n }\n }, [autoFocus, selectFirst]);\n\n React.useEffect(() => {\n if (disabled || focusedElement === null) {\n return;\n }\n\n const range = window!.document.createRange();\n\n let element = refs[focusedElement].current;\n\n if (element) {\n element.focus();\n _onCalendarOpen();\n range.selectNodeContents(element as Node);\n\n const selection = window!.getSelection();\n selection?.removeAllRanges();\n selection?.addRange(range);\n }\n }, [disabled, focusedElement, _onCalendarOpen, refs, window]);\n\n const clear = React.useCallback(() => {\n onChange?.(undefined);\n selectFirst();\n }, [onChange, selectFirst]);\n\n const handleFieldEnter = React.useCallback(() => {\n if (!open) {\n selectFirst();\n }\n }, [open, selectFirst]);\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLSpanElement>) => {\n if (focusedElement === null) {\n return;\n }\n\n const _value = [...internalValue];\n const config = elementsConfig(focusedElement);\n\n if (/^\\d+$/.test(e.key)) {\n if (_value[focusedElement].length >= config.length) {\n _value[focusedElement] = e.key;\n } else {\n _value[focusedElement] += e.key;\n if (_value[focusedElement].length >= config.length && focusedElement < maxElement) {\n setFocusedElement(focusedElement + 1);\n }\n }\n } else if (e.key === 'Backspace') {\n if (!_value[focusedElement]) {\n setFocusedElement(focusedElement <= 0 ? maxElement : focusedElement - 1);\n } else {\n _value[focusedElement] = _value[focusedElement].slice(0, -1);\n }\n } else if (e.key === 'ArrowDown' || e.key === 'Down') {\n let currentValue = Number(_value[focusedElement]);\n _value[focusedElement] = String(\n currentValue <= config.min ? config.max : currentValue - 1,\n ).padStart(config.length, '0');\n } else if (e.key === 'ArrowUp' || e.key === 'Up') {\n let currentValue = Number(_value[focusedElement]);\n _value[focusedElement] = String(\n currentValue >= config.max ? config.min : currentValue + 1,\n ).padStart(config.length, '0');\n } else if (\n e.key === 'Enter' ||\n (e.key === 'Tab' && focusedElement === maxElement) ||\n (e.key === 'Tab' && e.shiftKey && focusedElement === 0)\n ) {\n removeFocusFromField();\n return;\n } else if (e.key === 'ArrowLeft' || e.key === 'Left' || (e.key === 'Tab' && e.shiftKey)) {\n setFocusedElement(focusedElement <= 0 ? maxElement : focusedElement - 1);\n } else if (e.key === 'ArrowRight' || e.key === 'Right' || e.key === 'Tab') {\n setFocusedElement(focusedElement >= maxElement ? 0 : focusedElement + 1);\n } else if (e.key === 'Delete' || e.key === 'Del') {\n _value[focusedElement] = '';\n } else {\n return;\n }\n\n e.preventDefault();\n setInternalValue(_value);\n onInternalValueChange(_value);\n },\n [\n elementsConfig,\n focusedElement,\n internalValue,\n maxElement,\n onInternalValueChange,\n removeFocusFromField,\n ],\n );\n\n return {\n rootRef,\n calendarRef,\n open,\n openCalendar: _onCalendarOpen,\n closeCalendar: _onCalendarClose,\n internalValue,\n focusedElement,\n setFocusedElement,\n handleKeyDown,\n clear,\n handleFieldEnter,\n removeFocusFromField,\n };\n}\n"],"names":["useCallback","React","useDOM","useBooleanState","useGlobalEventListener","useDateInput","maxElement","refs","autoFocus","disabled","elementsConfig","onChange","onInternalValueChange","getInternalValue","value","onCalendarOpenChanged","document","open","setTrue","openCalendar","setFalse","closeCalendar","rootRef","useRef","calendarRef","internalValue","setInternalValue","useState","focusedElement","setFocusedElement","window","_onCalendarClose","_onCalendarOpen","removeFocusFromField","getSelection","removeAllRanges","handleClickOutside","e","current","contains","target","selectFirst","capture","useEffect","range","createRange","element","focus","selectNodeContents","selection","addRange","clear","undefined","handleFieldEnter","handleKeyDown","_value","config","test","key","length","slice","currentValue","Number","String","min","max","padStart","shiftKey","preventDefault"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customResizeObserver.d.ts","sourceRoot":"","sources":["../../../src/lib/floating/customResizeObserver.ts"],"names":[],"mappings":"AAsCA,qBAAa,oBAAoB;IAOnB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAN3C,OAAO,EAAE,KAAK,CAAC;QACb,MAAM,EAAE,WAAW,CAAC;QACpB,MAAM,EAAE,iBAAiB,CAAC;KAC3B,CAAC,CAAM;IACR,wBAAwB,EAAE,gBAAgB,GAAG,IAAI,CAAQ;gBAE5B,cAAc,EAAE,MAAM,IAAI;IAIvD,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAOnC,cAAc,IAAI,IAAI;IAYtB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"customResizeObserver.d.ts","sourceRoot":"","sources":["../../../src/lib/floating/customResizeObserver.ts"],"names":[],"mappings":"AAsCA,qBAAa,oBAAoB;IAOnB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAN3C,OAAO,EAAE,KAAK,CAAC;QACb,MAAM,EAAE,WAAW,CAAC;QACpB,MAAM,EAAE,iBAAiB,CAAC;KAC3B,CAAC,CAAM;IACR,wBAAwB,EAAE,gBAAgB,GAAG,IAAI,CAAQ;gBAE5B,cAAc,EAAE,MAAM,IAAI;IAIvD,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAOnC,cAAc,IAAI,IAAI;IAYtB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAS9C,4BAA4B,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAWxD,UAAU,IAAI,IAAI;CAenB"}
|
|
@@ -43,7 +43,6 @@ const defaultIframeStyles = {
|
|
|
43
43
|
}
|
|
44
44
|
observeUsingIframe(element) {
|
|
45
45
|
const iframe = element.ownerDocument.createElement('iframe');
|
|
46
|
-
iframe.src = 'javascript:void(0)';
|
|
47
46
|
iframe.ariaHidden = 'true';
|
|
48
47
|
iframe.tabIndex = -1;
|
|
49
48
|
Object.assign(iframe.style, defaultIframeStyles);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/floating/customResizeObserver.ts"],"sourcesContent":["const defaultIframeStyles: Pick<\n CSSStyleDeclaration,\n | 'position'\n | 'left'\n | 'top'\n | 'zIndex'\n | 'width'\n | 'height'\n | 'pointerEvents'\n | 'opacity'\n | 'border'\n> = {\n position: 'absolute',\n left: '0',\n top: '0',\n zIndex: '-1',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n opacity: '0',\n border: '0',\n};\n\n/*\n * Специальный CustomResizeObserver как fallback для ResizeObserver\n * Используется для вызова update() функции (перерисовка плавающего окна) floating-ui\n * при изменении размера reference или floating элементов.\n *\n * По умолчанию пытаемся нарисовать скрытый, абсолютно позиционированный относительно\n * наблюдаемого элемента iframe.\n * В случае же, если наблюдаемый элемент имеет position: static, то правильно спозиционировать\n * iframe у нас не получится, поэтому в такой ситуации мы используем MutationObserver.\n *\n * Использовать только MutationObserver мы не можем, потому что с помощью него нельзя отследить\n * изменение размера вызванное переполнением текста.\n *\n * Применяется только если нету поддержики или полифила ResizeObserver.\n * */\nexport class CustomResizeObserver {\n records: Array<{\n target: HTMLElement;\n iframe: HTMLIFrameElement;\n }> = [];\n mutationObserverFallback: MutationObserver | null = null;\n\n constructor(private readonly updateFunction: () => void) {\n this.updateFunction = updateFunction;\n }\n\n observe(element: HTMLElement): void {\n if (isPositioned(element)) {\n return this.observeUsingIframe(element);\n }\n return this.observeUsingMutationObserver(element);\n }\n\n appendToTheDOM(): void {\n for (let record of this.records) {\n record.target.appendChild(record.iframe);\n }\n\n for (let record of this.records) {\n if (record.iframe.contentWindow) {\n record.iframe.contentWindow.addEventListener('resize', this.updateFunction);\n }\n }\n }\n\n observeUsingIframe(element: HTMLElement): void {\n const iframe = element.ownerDocument.createElement('iframe');\n iframe.
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/floating/customResizeObserver.ts"],"sourcesContent":["const defaultIframeStyles: Pick<\n CSSStyleDeclaration,\n | 'position'\n | 'left'\n | 'top'\n | 'zIndex'\n | 'width'\n | 'height'\n | 'pointerEvents'\n | 'opacity'\n | 'border'\n> = {\n position: 'absolute',\n left: '0',\n top: '0',\n zIndex: '-1',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n opacity: '0',\n border: '0',\n};\n\n/*\n * Специальный CustomResizeObserver как fallback для ResizeObserver\n * Используется для вызова update() функции (перерисовка плавающего окна) floating-ui\n * при изменении размера reference или floating элементов.\n *\n * По умолчанию пытаемся нарисовать скрытый, абсолютно позиционированный относительно\n * наблюдаемого элемента iframe.\n * В случае же, если наблюдаемый элемент имеет position: static, то правильно спозиционировать\n * iframe у нас не получится, поэтому в такой ситуации мы используем MutationObserver.\n *\n * Использовать только MutationObserver мы не можем, потому что с помощью него нельзя отследить\n * изменение размера вызванное переполнением текста.\n *\n * Применяется только если нету поддержики или полифила ResizeObserver.\n * */\nexport class CustomResizeObserver {\n records: Array<{\n target: HTMLElement;\n iframe: HTMLIFrameElement;\n }> = [];\n mutationObserverFallback: MutationObserver | null = null;\n\n constructor(private readonly updateFunction: () => void) {\n this.updateFunction = updateFunction;\n }\n\n observe(element: HTMLElement): void {\n if (isPositioned(element)) {\n return this.observeUsingIframe(element);\n }\n return this.observeUsingMutationObserver(element);\n }\n\n appendToTheDOM(): void {\n for (let record of this.records) {\n record.target.appendChild(record.iframe);\n }\n\n for (let record of this.records) {\n if (record.iframe.contentWindow) {\n record.iframe.contentWindow.addEventListener('resize', this.updateFunction);\n }\n }\n }\n\n observeUsingIframe(element: HTMLElement): void {\n const iframe = element.ownerDocument.createElement('iframe');\n iframe.ariaHidden = 'true';\n iframe.tabIndex = -1;\n Object.assign(iframe.style, defaultIframeStyles);\n\n this.records.push({ target: element, iframe });\n }\n\n observeUsingMutationObserver(element: HTMLElement): void {\n if (!this.mutationObserverFallback) {\n this.mutationObserverFallback = new MutationObserver(this.updateFunction);\n }\n\n this.mutationObserverFallback.observe(element, {\n childList: true,\n subtree: true,\n });\n }\n\n disconnect(): void {\n this.records.map(({ target, iframe }) => {\n if (iframe.contentWindow) {\n iframe.contentWindow.removeEventListener('resize', this.updateFunction);\n }\n\n target.removeChild(iframe);\n });\n this.records = [];\n\n if (this.mutationObserverFallback) {\n this.mutationObserverFallback.disconnect();\n }\n this.mutationObserverFallback = null;\n }\n}\n\nfunction isPositioned(element: HTMLElement): boolean {\n return getComputedStyle(element).position !== 'static';\n}\n"],"names":["defaultIframeStyles","position","left","top","zIndex","width","height","pointerEvents","opacity","border","CustomResizeObserver","observe","element","isPositioned","observeUsingIframe","observeUsingMutationObserver","appendToTheDOM","record","records","target","appendChild","iframe","contentWindow","addEventListener","updateFunction","ownerDocument","createElement","ariaHidden","tabIndex","Object","assign","style","push","mutationObserverFallback","MutationObserver","childList","subtree","disconnect","map","removeEventListener","removeChild","constructor","getComputedStyle"],"mappings":";AAAA,MAAMA,sBAWF;IACFC,UAAU;IACVC,MAAM;IACNC,KAAK;IACLC,QAAQ;IACRC,OAAO;IACPC,QAAQ;IACRC,eAAe;IACfC,SAAS;IACTC,QAAQ;AACV;AAEA;;;;;;;;;;;;;;GAcG,GACH,OAAO,MAAMC;IAWXC,QAAQC,OAAoB,EAAQ;QAClC,IAAIC,aAAaD,UAAU;YACzB,OAAO,IAAI,CAACE,kBAAkB,CAACF;QACjC;QACA,OAAO,IAAI,CAACG,4BAA4B,CAACH;IAC3C;IAEAI,iBAAuB;QACrB,KAAK,IAAIC,UAAU,IAAI,CAACC,OAAO,CAAE;YAC/BD,OAAOE,MAAM,CAACC,WAAW,CAACH,OAAOI,MAAM;QACzC;QAEA,KAAK,IAAIJ,UAAU,IAAI,CAACC,OAAO,CAAE;YAC/B,IAAID,OAAOI,MAAM,CAACC,aAAa,EAAE;gBAC/BL,OAAOI,MAAM,CAACC,aAAa,CAACC,gBAAgB,CAAC,UAAU,IAAI,CAACC,cAAc;YAC5E;QACF;IACF;IAEAV,mBAAmBF,OAAoB,EAAQ;QAC7C,MAAMS,SAAST,QAAQa,aAAa,CAACC,aAAa,CAAC;QACnDL,OAAOM,UAAU,GAAG;QACpBN,OAAOO,QAAQ,GAAG,CAAC;QACnBC,OAAOC,MAAM,CAACT,OAAOU,KAAK,EAAE/B;QAE5B,IAAI,CAACkB,OAAO,CAACc,IAAI,CAAC;YAAEb,QAAQP;YAASS;QAAO;IAC9C;IAEAN,6BAA6BH,OAAoB,EAAQ;QACvD,IAAI,CAAC,IAAI,CAACqB,wBAAwB,EAAE;YAClC,IAAI,CAACA,wBAAwB,GAAG,IAAIC,iBAAiB,IAAI,CAACV,cAAc;QAC1E;QAEA,IAAI,CAACS,wBAAwB,CAACtB,OAAO,CAACC,SAAS;YAC7CuB,WAAW;YACXC,SAAS;QACX;IACF;IAEAC,aAAmB;QACjB,IAAI,CAACnB,OAAO,CAACoB,GAAG,CAAC,CAAC,EAAEnB,MAAM,EAAEE,MAAM,EAAE;YAClC,IAAIA,OAAOC,aAAa,EAAE;gBACxBD,OAAOC,aAAa,CAACiB,mBAAmB,CAAC,UAAU,IAAI,CAACf,cAAc;YACxE;YAEAL,OAAOqB,WAAW,CAACnB;QACrB;QACA,IAAI,CAACH,OAAO,GAAG,EAAE;QAEjB,IAAI,IAAI,CAACe,wBAAwB,EAAE;YACjC,IAAI,CAACA,wBAAwB,CAACI,UAAU;QAC1C;QACA,IAAI,CAACJ,wBAAwB,GAAG;IAClC;IAzDAQ,YAAY,AAAiBjB,cAA0B,CAAE;;QANzDN,uBAAAA,WAAAA,KAAAA;QAIAe,uBAAAA,4BAAAA,KAAAA;aAE6BT,iBAAAA;aAN7BN,UAGK,EAAE;aACPe,2BAAoD;QAGlD,IAAI,CAACT,cAAc,GAAGA;IACxB;AAwDF;AAEA,SAASX,aAAaD,OAAoB;IACxC,OAAO8B,iBAAiB9B,SAASX,QAAQ,KAAK;AAChD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type * as React from 'react';
|
|
2
2
|
import type { UseFloatingMiddlewaresBootstrapOptions } from '../useFloatingMiddlewaresBootstrap';
|
|
3
|
-
import type { UseFloatingWithInteractionsProps, UseFloatingWithInteractionsReturn } from '../useFloatingWithInteractions';
|
|
3
|
+
import type { RestoreFocusType, UseFloatingWithInteractionsProps, UseFloatingWithInteractionsReturn } from '../useFloatingWithInteractions';
|
|
4
4
|
import type { OnPlacementChange } from './common';
|
|
5
5
|
/**
|
|
6
6
|
* @private используйте алиасы, если для какого-то компонента нужно экспортировать тип
|
|
@@ -35,7 +35,7 @@ export interface FloatingComponentProps extends UseFloatingMiddlewaresBootstrapO
|
|
|
35
35
|
/**
|
|
36
36
|
* Нужно ли после закрытия всплывающего элемента возвращать фокус на предыдущий активный элемент.
|
|
37
37
|
*/
|
|
38
|
-
restoreFocus?:
|
|
38
|
+
restoreFocus?: RestoreFocusType;
|
|
39
39
|
/**
|
|
40
40
|
* Перебивает zIndex заданный по умолчанию.
|
|
41
41
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/types/component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,oCAAoC,CAAC;AACjG,OAAO,KAAK,EACV,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,CACtC,KAAK,EAAE,IAAI,CAAC,iCAAiC,EAAE,SAAS,CAAC,KACtD,KAAK,CAAC,SAAS,CAAC;AAErB;;;;GAIG;AACH,MAAM,WAAW,sBACf,SAAQ,sCAAsC,EAC5C,IAAI,CAAC,gCAAgC,EAAE,WAAW,GAAG,aAAa,CAAC;IACrE;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,yBAAyB,CAAC;IACtD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC9B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,YAAY,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/types/component.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,oCAAoC,CAAC;AACjG,OAAO,KAAK,EACV,gBAAgB,EAChB,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,CACtC,KAAK,EAAE,IAAI,CAAC,iCAAiC,EAAE,SAAS,CAAC,KACtD,KAAK,CAAC,SAAS,CAAC;AAErB;;;;GAIG;AACH,MAAM,WAAW,sBACf,SAAQ,sCAAsC,EAC5C,IAAI,CAAC,gCAAgC,EAAE,WAAW,GAAG,aAAa,CAAC;IACrE;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,yBAAyB,CAAC;IACtD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC9B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACjE;;;OAGG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/floating/types/component.ts"],"sourcesContent":["import type * as React from 'react';\nimport type { UseFloatingMiddlewaresBootstrapOptions } from '../useFloatingMiddlewaresBootstrap';\nimport type {\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from '../useFloatingWithInteractions';\nimport type { OnPlacementChange } from './common';\n\n/**\n * @private используйте алиасы, если для какого-то компонента нужно экспортировать тип\n */\nexport type FloatingContentRenderProp = (\n props: Pick<UseFloatingWithInteractionsReturn, 'onClose'>,\n) => React.ReactNode;\n\n/**\n * Общий API для всплывающих элементов.\n *\n * @private\n */\nexport interface FloatingComponentProps\n extends UseFloatingMiddlewaresBootstrapOptions,\n Omit<UseFloatingWithInteractionsProps, 'placement' | 'middlewares'> {\n /**\n * Содержимое всплывающего окна.\n *\n * При передаче контента в виде [render prop](https://react.dev/reference/react/cloneElement#passing-data-with-a-render-prop),\n * в аргументе функции можно получить метод `onClose`, с помощью которого можно программно закрывать\n * всплывающее окно.\n */\n content?: React.ReactNode | FloatingContentRenderProp;\n /**\n * Целевой элемент. Всплывающее окно появится возле него.\n *\n * > ⚠️ Если это пользовательский компонент, то он должен:\n * > 1. предоставлять параметры либо `getRootRef`, либо `ref` (cм. `React.forwardRef()`) для получения ссылки на DOM-узел;\n * > 2. принимать DOM атрибуты и события.\n */\n children?: React.ReactElement;\n /**\n * Нужно ли при навигации с клавиатуры авто-фокусироваться на всплывающий элемент.\n */\n autoFocus?: boolean;\n /**\n * Нужно ли после закрытия всплывающего элемента возвращать фокус на предыдущий активный элемент.\n */\n restoreFocus?:
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/floating/types/component.ts"],"sourcesContent":["import type * as React from 'react';\nimport type { UseFloatingMiddlewaresBootstrapOptions } from '../useFloatingMiddlewaresBootstrap';\nimport type {\n RestoreFocusType,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from '../useFloatingWithInteractions';\nimport type { OnPlacementChange } from './common';\n\n/**\n * @private используйте алиасы, если для какого-то компонента нужно экспортировать тип\n */\nexport type FloatingContentRenderProp = (\n props: Pick<UseFloatingWithInteractionsReturn, 'onClose'>,\n) => React.ReactNode;\n\n/**\n * Общий API для всплывающих элементов.\n *\n * @private\n */\nexport interface FloatingComponentProps\n extends UseFloatingMiddlewaresBootstrapOptions,\n Omit<UseFloatingWithInteractionsProps, 'placement' | 'middlewares'> {\n /**\n * Содержимое всплывающего окна.\n *\n * При передаче контента в виде [render prop](https://react.dev/reference/react/cloneElement#passing-data-with-a-render-prop),\n * в аргументе функции можно получить метод `onClose`, с помощью которого можно программно закрывать\n * всплывающее окно.\n */\n content?: React.ReactNode | FloatingContentRenderProp;\n /**\n * Целевой элемент. Всплывающее окно появится возле него.\n *\n * > ⚠️ Если это пользовательский компонент, то он должен:\n * > 1. предоставлять параметры либо `getRootRef`, либо `ref` (cм. `React.forwardRef()`) для получения ссылки на DOM-узел;\n * > 2. принимать DOM атрибуты и события.\n */\n children?: React.ReactElement;\n /**\n * Нужно ли при навигации с клавиатуры авто-фокусироваться на всплывающий элемент.\n */\n autoFocus?: boolean;\n /**\n * Нужно ли после закрытия всплывающего элемента возвращать фокус на предыдущий активный элемент.\n */\n restoreFocus?: RestoreFocusType;\n /**\n * Перебивает zIndex заданный по умолчанию.\n */\n zIndex?: number | string;\n /**\n * По умолчанию используется document.body.\n */\n usePortal?: boolean | HTMLElement | React.RefObject<HTMLElement>;\n /**\n * В зависимости от области видимости, позиция может смениться на более оптимальную,\n * чтобы всплывающий элемент вместился в эту область видимости.\n */\n onPlacementChange?: OnPlacementChange;\n}\n"],"names":[],"mappings":"AAgBA;;;;CAIC,GACD,WAwCC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { useFloatingWithInteractions } from './useFloatingWithInteractions';
|
|
2
2
|
export type { OnShownChange, UseFloatingWithInteractionsProps, UseFloatingWithInteractionsReturn, } from './types';
|
|
3
|
+
export { type RestoreFocusType } from './types';
|
|
3
4
|
export { DEFAULT_TRIGGER } from './constants';
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/useFloatingWithInteractions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,YAAY,EACV,aAAa,EACb,gCAAgC,EAChC,iCAAiC,GAClC,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/useFloatingWithInteractions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,YAAY,EACV,aAAa,EACb,gCAAgC,EAChC,iCAAiC,GAClC,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/floating/useFloatingWithInteractions/index.ts"],"sourcesContent":["export { useFloatingWithInteractions } from './useFloatingWithInteractions';\n\nexport type {\n OnShownChange,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from './types';\n\nexport { DEFAULT_TRIGGER } from './constants';\n"],"names":["useFloatingWithInteractions","DEFAULT_TRIGGER"],"mappings":"AAAA,SAASA,2BAA2B,QAAQ,gCAAgC;
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/floating/useFloatingWithInteractions/index.ts"],"sourcesContent":["export { useFloatingWithInteractions } from './useFloatingWithInteractions';\n\nexport type {\n OnShownChange,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from './types';\n\nexport { type RestoreFocusType } from './types';\n\nexport { DEFAULT_TRIGGER } from './constants';\n"],"names":["useFloatingWithInteractions","DEFAULT_TRIGGER"],"mappings":"AAAA,SAASA,2BAA2B,QAAQ,gCAAgC;AAU5E,SAASC,eAAe,QAAQ,cAAc"}
|
|
@@ -2,6 +2,7 @@ import type { Placement, UseFloatingData, UseFloatingMiddleware, UseFloatingRefs
|
|
|
2
2
|
export type InteractiveTriggerType = 'click' | 'hover' | 'focus';
|
|
3
3
|
export type ManualTriggerType = 'manual';
|
|
4
4
|
export type TriggerType = ManualTriggerType | InteractiveTriggerType | InteractiveTriggerType[];
|
|
5
|
+
export type RestoreFocusType = boolean | 'anchor-element' | HTMLElement;
|
|
5
6
|
export type ShownChangeReason = 'click-outside' | 'escape-key' | 'click' | 'hover' | 'focus' | 'callback';
|
|
6
7
|
export type OnShownChange = (shown: boolean, reason?: ShownChangeReason) => void;
|
|
7
8
|
export interface UseFloatingWithInteractionsProps {
|
|
@@ -82,6 +83,6 @@ export interface UseFloatingWithInteractionsReturn<T extends HTMLElement = HTMLE
|
|
|
82
83
|
middlewareData: UseFloatingData['middlewareData'];
|
|
83
84
|
onClose: (this: void) => void;
|
|
84
85
|
onEscapeKeyDown?: (this: void) => void;
|
|
85
|
-
onRestoreFocus: (
|
|
86
|
+
onRestoreFocus: (restoreFocus?: RestoreFocusType) => boolean | HTMLElement;
|
|
86
87
|
}
|
|
87
88
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/useFloatingWithInteractions/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,qBAAqB,EACrB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAEzC,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,sBAAsB,GAAG,sBAAsB,EAAE,CAAC;AAEhG,MAAM,MAAM,iBAAiB,GACzB,eAAe,GACf,YAAY,GACZ,OAAO,GACP,OAAO,GACP,OAAO,GACP,UAAU,CAAC;AAEf,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAEjF,MAAM,WAAW,gCAAgC;IAC/C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACtC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;OAEG;IACH,cAAc,CAAC,EAAE,aAAa,CAAC;CAChC;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,WAAW,IAAI,IAAI,CAChD,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EACvB,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAC7B,GACC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;AAElG,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,WAAW,IAAI,IAAI,CAC/C,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EACvB,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CACvC,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC,aAAa,CAAA;CAAE,GAAG,IAAI,CACrC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EACtB,aAAa,GAAG,cAAc,GAAG,SAAS,GAAG,kBAAkB,GAAG,gBAAgB,CACnF,CAAC;AAEJ,MAAM,WAAW,iCAAiC,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACpF,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAClC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAChC,cAAc,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAClD,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACvC,cAAc,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/useFloatingWithInteractions/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/floating/useFloatingWithInteractions/types.ts"],"sourcesContent":["import type {\n Placement,\n UseFloatingData,\n UseFloatingMiddleware,\n UseFloatingRefs,\n} from '../types/common';\n\nexport type InteractiveTriggerType = 'click' | 'hover' | 'focus';\n\nexport type ManualTriggerType = 'manual';\n\nexport type TriggerType = ManualTriggerType | InteractiveTriggerType | InteractiveTriggerType[];\n\nexport type ShownChangeReason =\n | 'click-outside'\n | 'escape-key'\n | 'click'\n | 'hover'\n | 'focus'\n | 'callback';\n\nexport type OnShownChange = (shown: boolean, reason?: ShownChangeReason) => void;\n\nexport interface UseFloatingWithInteractionsProps {\n placement?: Placement;\n middlewares?: UseFloatingMiddleware[];\n /**\n * Механика вызова всплывающего элемента.\n *\n * - `\"click\"` – показывается/скрывается только при нажатии.\n * - `\"hover\"` – будет показываться/скрывается при наведении/отведении мыши.\n * - `\"focus\"` – будет показываться/скрывается при фокусе/потере фокуса мыши.\n * - `\"manual\"` – будет показываться/скрывается только через свойство `shown`. `onShownChange`\n * будет вызываться при нажатии за пределы целевого и всплывающего элементов, а также по кнопке\n * ESC.\n *\n * > ⚠️`\"hover\"` на тач-устройствах будет работать как `\"click\"`, с одним лишь нюансом, что\n * > не будет закрываться при повторном нажатии на целевой элемент. Для закрытия необходимо нажать\n * > на область вне целевого элемента и выпадающего окна.\n */\n trigger?: TriggerType;\n /**\n * Количество миллисекунд, после которых произойдёт показ/скрытие всплывающего элемента\n * при наведении.\n *\n * > Чтобы задать разное время на показ и скрытие, передайте массив типа `[<показ>, <скрытие>]`.\n *\n * > Используется только для `trigger=\"hover\"`.\n */\n hoverDelay?: number | [number, number];\n /**\n * При `trigger=\"hover\"` закрывает всплывающий элемент при нажатии на целевой элемент.\n */\n closeAfterClick?: boolean;\n /**\n * Блокирует изменение состояния.\n */\n disabled?: boolean;\n /**\n * Отключает взаимодействие со всплывающим элементом.\n */\n disableInteractive?: boolean;\n /**\n * Отключает закрытие нажатием на область вне целевого и всплывающего элемента.\n */\n disableCloseOnClickOutside?: boolean;\n /**\n * Отключает закрытие нажатием на кнопку ESC.\n */\n disableCloseOnEscKey?: boolean;\n /**\n * Начальное состояние всплывающего элемента.\n */\n defaultShown?: boolean;\n /**\n * Если передан, то всплывающий элемент будет показано/скрыто в зависимости от значения свойства.\n */\n shown?: boolean;\n /**\n * Вызывается при каждом изменении видимости всплывающего элемента.\n */\n onShownChange?: OnShownChange;\n /**\n * Вызывается при каждом изменении видимости всплывающего элемента, но после завершении анимации.\n */\n onShownChanged?: OnShownChange;\n}\n\nexport type ReferenceProps<T = HTMLElement> = Omit<\n React.HTMLAttributes<T>,\n keyof React.DOMAttributes<T>\n> &\n Pick<React.DOMAttributes<T>, 'onMouseOver' | 'onMouseLeave' | 'onClick' | 'onFocus' | 'onBlur'>;\n\nexport type FloatingProps<T = HTMLElement> = Omit<\n React.HTMLAttributes<T>,\n keyof React.DOMAttributes<T> | 'style'\n> & { style: React.CSSProperties } & Pick<\n React.DOMAttributes<T>,\n 'onMouseOver' | 'onMouseLeave' | 'onClick' | 'onAnimationStart' | 'onAnimationEnd'\n >;\n\nexport interface UseFloatingWithInteractionsReturn<T extends HTMLElement = HTMLElement> {\n placement: Placement;\n shown: boolean;\n willBeHide: boolean;\n refs: UseFloatingRefs<T>;\n referenceProps: ReferenceProps<T>;\n floatingProps: FloatingProps<T>;\n middlewareData: UseFloatingData['middlewareData'];\n onClose: (this: void) => void;\n onEscapeKeyDown?: (this: void) => void;\n onRestoreFocus: (
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/floating/useFloatingWithInteractions/types.ts"],"sourcesContent":["import type {\n Placement,\n UseFloatingData,\n UseFloatingMiddleware,\n UseFloatingRefs,\n} from '../types/common';\n\nexport type InteractiveTriggerType = 'click' | 'hover' | 'focus';\n\nexport type ManualTriggerType = 'manual';\n\nexport type TriggerType = ManualTriggerType | InteractiveTriggerType | InteractiveTriggerType[];\n\nexport type RestoreFocusType = boolean | 'anchor-element' | HTMLElement;\n\nexport type ShownChangeReason =\n | 'click-outside'\n | 'escape-key'\n | 'click'\n | 'hover'\n | 'focus'\n | 'callback';\n\nexport type OnShownChange = (shown: boolean, reason?: ShownChangeReason) => void;\n\nexport interface UseFloatingWithInteractionsProps {\n placement?: Placement;\n middlewares?: UseFloatingMiddleware[];\n /**\n * Механика вызова всплывающего элемента.\n *\n * - `\"click\"` – показывается/скрывается только при нажатии.\n * - `\"hover\"` – будет показываться/скрывается при наведении/отведении мыши.\n * - `\"focus\"` – будет показываться/скрывается при фокусе/потере фокуса мыши.\n * - `\"manual\"` – будет показываться/скрывается только через свойство `shown`. `onShownChange`\n * будет вызываться при нажатии за пределы целевого и всплывающего элементов, а также по кнопке\n * ESC.\n *\n * > ⚠️`\"hover\"` на тач-устройствах будет работать как `\"click\"`, с одним лишь нюансом, что\n * > не будет закрываться при повторном нажатии на целевой элемент. Для закрытия необходимо нажать\n * > на область вне целевого элемента и выпадающего окна.\n */\n trigger?: TriggerType;\n /**\n * Количество миллисекунд, после которых произойдёт показ/скрытие всплывающего элемента\n * при наведении.\n *\n * > Чтобы задать разное время на показ и скрытие, передайте массив типа `[<показ>, <скрытие>]`.\n *\n * > Используется только для `trigger=\"hover\"`.\n */\n hoverDelay?: number | [number, number];\n /**\n * При `trigger=\"hover\"` закрывает всплывающий элемент при нажатии на целевой элемент.\n */\n closeAfterClick?: boolean;\n /**\n * Блокирует изменение состояния.\n */\n disabled?: boolean;\n /**\n * Отключает взаимодействие со всплывающим элементом.\n */\n disableInteractive?: boolean;\n /**\n * Отключает закрытие нажатием на область вне целевого и всплывающего элемента.\n */\n disableCloseOnClickOutside?: boolean;\n /**\n * Отключает закрытие нажатием на кнопку ESC.\n */\n disableCloseOnEscKey?: boolean;\n /**\n * Начальное состояние всплывающего элемента.\n */\n defaultShown?: boolean;\n /**\n * Если передан, то всплывающий элемент будет показано/скрыто в зависимости от значения свойства.\n */\n shown?: boolean;\n /**\n * Вызывается при каждом изменении видимости всплывающего элемента.\n */\n onShownChange?: OnShownChange;\n /**\n * Вызывается при каждом изменении видимости всплывающего элемента, но после завершении анимации.\n */\n onShownChanged?: OnShownChange;\n}\n\nexport type ReferenceProps<T = HTMLElement> = Omit<\n React.HTMLAttributes<T>,\n keyof React.DOMAttributes<T>\n> &\n Pick<React.DOMAttributes<T>, 'onMouseOver' | 'onMouseLeave' | 'onClick' | 'onFocus' | 'onBlur'>;\n\nexport type FloatingProps<T = HTMLElement> = Omit<\n React.HTMLAttributes<T>,\n keyof React.DOMAttributes<T> | 'style'\n> & { style: React.CSSProperties } & Pick<\n React.DOMAttributes<T>,\n 'onMouseOver' | 'onMouseLeave' | 'onClick' | 'onAnimationStart' | 'onAnimationEnd'\n >;\n\nexport interface UseFloatingWithInteractionsReturn<T extends HTMLElement = HTMLElement> {\n placement: Placement;\n shown: boolean;\n willBeHide: boolean;\n refs: UseFloatingRefs<T>;\n referenceProps: ReferenceProps<T>;\n floatingProps: FloatingProps<T>;\n middlewareData: UseFloatingData['middlewareData'];\n onClose: (this: void) => void;\n onEscapeKeyDown?: (this: void) => void;\n onRestoreFocus: (restoreFocus?: RestoreFocusType) => boolean | HTMLElement;\n}\n"],"names":[],"mappings":"AAwGA,WAWC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFloatingWithInteractions.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAIV,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,SAAS,CAAC;AASjB;;GAEG;AACH,eAAO,MAAM,2BAA2B,GAAI,CAAC,SAAS,WAAW,wRAsB9D,gCAAgC,KAAG,iCAAiC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"useFloatingWithInteractions.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAIV,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,SAAS,CAAC;AASjB;;GAEG;AACH,eAAO,MAAM,2BAA2B,GAAI,CAAC,SAAS,WAAW,wRAsB9D,gCAAgC,KAAG,iCAAiC,CAAC,CAAC,CAqVxE,CAAC"}
|
|
@@ -167,7 +167,20 @@ shown: shownProp, onShownChange: onShownChangeProp, onShownChanged: onShownChang
|
|
|
167
167
|
}, [
|
|
168
168
|
commitShownLocalState
|
|
169
169
|
]);
|
|
170
|
-
const handleRestoreFocus = React.useCallback((
|
|
170
|
+
const handleRestoreFocus = React.useCallback((restoreFocus = true)=>{
|
|
171
|
+
if (!restoreFocus) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
if (restoreFocus === true) {
|
|
175
|
+
return triggerOnFocus ? blockFocusRef.current : true;
|
|
176
|
+
} else if (restoreFocus === 'anchor-element') {
|
|
177
|
+
return refs.reference.current;
|
|
178
|
+
} else if (restoreFocus instanceof HTMLElement) {
|
|
179
|
+
return restoreFocus;
|
|
180
|
+
}
|
|
181
|
+
return false;
|
|
182
|
+
}, [
|
|
183
|
+
refs.reference,
|
|
171
184
|
triggerOnFocus
|
|
172
185
|
]);
|
|
173
186
|
const handleEscapeKeyDown = React.useCallback(()=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce, noop } from '@vkontakte/vkjs';\nimport { getWindow, isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useCustomEnsuredControl } from '../../../hooks/useEnsuredControl';\nimport { useGlobalOnClickOutside } from '../../../hooks/useGlobalOnClickOutside';\nimport { useStableCallback } from '../../../hooks/useStableCallback';\nimport { contains, getActiveElementByAnotherElement } from '../../dom';\nimport { useIsomorphicLayoutEffect } from '../../useIsomorphicLayoutEffect';\nimport { autoUpdateFloatingElement, useFloating } from '../adapters';\nimport { convertFloatingDataToReactCSSProperties } from '../functions';\nimport { type UseFloatingOptions } from '../types/common';\nimport { DEFAULT_TRIGGER } from './constants';\nimport type {\n FloatingProps,\n ReferenceProps,\n ShownChangeReason,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from './types';\nimport { useResolveTriggerType } from './useResolveTriggerType';\n\ntype LocalState = { shown: boolean; reason?: ShownChangeReason };\n\nconst whileElementsMounted: UseFloatingOptions['whileElementsMounted'] = (...args) =>\n /* istanbul ignore next: не знаю как проверить */\n autoUpdateFloatingElement(...args, { elementResize: true });\n\n/**\n * @private\n */\nexport const useFloatingWithInteractions = <T extends HTMLElement = HTMLElement>({\n trigger = DEFAULT_TRIGGER,\n\n // UseFloating\n placement: placementProp = 'bottom',\n middlewares,\n hoverDelay = 0,\n closeAfterClick = false,\n\n // disables\n disabled = false,\n disableInteractive = false,\n disableCloseOnClickOutside = false,\n disableCloseOnEscKey = false,\n\n // uncontrolled\n defaultShown = false,\n\n // controlled\n shown: shownProp,\n onShownChange: onShownChangeProp,\n onShownChanged: onShownChangedProp,\n}: UseFloatingWithInteractionsProps): UseFloatingWithInteractionsReturn<T> => {\n const memoizedValue = React.useMemo<LocalState | undefined>(\n () => (shownProp !== undefined ? { shown: shownProp } : undefined),\n [shownProp],\n );\n const [shownLocalState, setShownLocalState] = useCustomEnsuredControl<LocalState>({\n value: memoizedValue,\n disabled,\n defaultValue: { shown: defaultShown },\n onChange: useStableCallback(({ shown, reason }) => {\n if (onShownChangeProp) {\n onShownChangeProp(shown, reason);\n }\n }),\n });\n const onShownChanged = useStableCallback(onShownChangedProp ? onShownChangedProp : noop);\n const [shownFinalState, setShownFinalState] = React.useState(() => shownLocalState.shown);\n const [willBeHide, setWillBeHide] = React.useState(false);\n\n const hasCSSAnimation = React.useRef(false);\n\n const blockMouseEnterRef = React.useRef(false);\n const blockFocusRef = React.useRef(false);\n const blurTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>();\n\n const handleCloseOnReferenceClickOutsideDisabled =\n disabled || disableCloseOnClickOutside || willBeHide || !shownLocalState.shown;\n const handleCloseOnFloatingClickOutsideDisabled =\n disableInteractive || handleCloseOnReferenceClickOutsideDisabled;\n\n const { triggerOnFocus, triggerOnClick, triggerOnHover } = useResolveTriggerType(trigger);\n\n // Библиотека `floating-ui`\n const { placement, x, y, strategy, refs, middlewareData } = useFloating<T>({\n strategy: 'fixed',\n placement: placementProp,\n middleware: middlewares,\n whileElementsMounted,\n });\n\n const commitShownLocalState = React.useCallback(\n (nextShown: boolean, reason: ShownChangeReason) => {\n setShownLocalState((prevState) => {\n if (prevState.shown !== nextShown || prevState.reason !== reason) {\n return {\n shown: nextShown,\n reason,\n };\n }\n /* istanbul ignore next: страховка, если вдруг на момент вызова обновления состояния, оно уже будет актуальным */\n return prevState;\n });\n },\n [setShownLocalState],\n );\n\n const [mouseEnterDelay, mouseLeaveDelay] =\n typeof hoverDelay === 'number' ? [hoverDelay, hoverDelay] : hoverDelay;\n\n const showWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(true, 'hover'), mouseEnterDelay),\n [mouseEnterDelay, commitShownLocalState],\n );\n\n const hideWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(false, 'hover'), mouseLeaveDelay),\n [mouseLeaveDelay, commitShownLocalState],\n );\n\n const handleFocusOnReference = useStableCallback(() => {\n // Повторный вызов события фокуса - следствие клика на reference-элемент\n if (shownLocalState.shown) {\n if (!closeAfterClick && shownLocalState.reason === 'hover') {\n return;\n }\n commitShownLocalState(false, 'focus');\n return;\n }\n if (blockFocusRef.current) {\n /* istanbul ignore next: в Jest не воспроизводится баг на вебе (cм. onRestoreFocus) */\n blockFocusRef.current = false;\n return;\n }\n\n commitShownLocalState(true, 'focus');\n });\n\n const handleBlurOnReference = useStableCallback((event: React.FocusEvent) => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (!shownLocalState.shown) {\n clearTimeout(blurTimeoutRef.current);\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n blurTimeoutRef.current = setTimeout(function waitWindowBlurFire() {\n const reference = refs.reference.current;\n // Если пользователь покинул текущее окно в открытом состоянии, то\n // не закрываем всплывающий элемент.\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (!relatedTarget && getActiveElementByAnotherElement(reference) === reference) {\n /* istanbul ignore next */\n return;\n }\n\n // Если пользователь нажал на всплывающий элемент, то не закрываем всплывающий элемент.\n // Note: для этого элемент должен быть фокусируемый (например, за счёт `tabindex=\"-1\"`).\n if (contains(refs.floating.current, relatedTarget) || contains(reference, relatedTarget)) {\n return;\n }\n\n commitShownLocalState(false, 'focus');\n });\n });\n\n const handleClickOnReference = useStableCallback(() => {\n // Предыдущий триггер (фокус) уже вызвал открытие/закрытие всплывающего окна, игнорируем вызов\n if (shownLocalState.reason === 'focus') {\n commitShownLocalState(shownLocalState.shown, 'click');\n return;\n }\n commitShownLocalState(!shownLocalState.shown, 'click');\n });\n\n const handleClickOnReferenceForOnlyClose = useStableCallback(() => {\n blockMouseEnterRef.current = true;\n commitShownLocalState(false, 'click');\n });\n\n const handleMouseEnterOnBoth = useStableCallback((event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (!blockMouseEnterRef.current && !shownLocalState.shown) {\n showWithDelay();\n }\n });\n\n const handleMouseLeaveOnBothForHoverAndFocusStates = useStableCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (triggerOnHover) {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n hideWithDelay();\n }\n },\n );\n\n const handleFloatingAnimationStart = () => {\n hasCSSAnimation.current = true;\n };\n\n const handleFloatingAnimationEnd = () => {\n if (willBeHide) {\n setShownFinalState(false);\n setWillBeHide(false);\n onShownChanged(false, shownLocalState.reason);\n }\n };\n\n const handleOnClose = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'callback');\n }, [commitShownLocalState]);\n\n const handleRestoreFocus = React.useCallback(\n () => (triggerOnFocus ? blockFocusRef.current : true),\n [triggerOnFocus],\n );\n\n const handleEscapeKeyDown = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'escape-key');\n }, [commitShownLocalState]);\n\n const handleClickOutside = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'click-outside');\n }, [commitShownLocalState]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n handleCloseOnReferenceClickOutsideDisabled ? null : refs.reference,\n handleCloseOnFloatingClickOutsideDisabled ? null : refs.floating,\n );\n\n useIsomorphicLayoutEffect(\n /**\n * Если пользователь покинул активное окно и:\n * 1. целевой элемент был в состоянии фокуса;\n * 2. всплывающий элемент был закрытом состоянии;\n * то фокус должен быть заблокирован, когда пользователь вернётся обратно. Иначе покажется\n * всплывающий элемент.\n */\n function setGlobalBlurForTriggerOnFocus() {\n if (!triggerOnFocus || !refs.reference.current) {\n return;\n }\n\n const handleGlobalBlur = () => {\n /* istanbul ignore next */\n const reference = refs.reference.current;\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (\n !shownLocalState.shown &&\n isHTMLElement(reference) &&\n reference === getActiveElementByAnotherElement(reference)\n ) {\n /* istanbul ignore next */\n blockFocusRef.current = true;\n }\n };\n\n const win = getWindow(refs.reference.current);\n win.addEventListener('blur', handleGlobalBlur);\n return () => {\n win.removeEventListener('blur', handleGlobalBlur);\n };\n },\n [triggerOnFocus, refs.reference, shownLocalState],\n );\n\n useIsomorphicLayoutEffect(\n function resolveShownStates() {\n if (willBeHide || shownLocalState.shown === shownFinalState) {\n return;\n }\n\n if (shownLocalState.shown) {\n setShownFinalState(true);\n onShownChanged(true, shownLocalState.reason);\n } else if (hasCSSAnimation.current && !willBeHide) {\n setWillBeHide(true);\n } else {\n setShownFinalState(false);\n }\n\n return () => {\n clearTimeout(blurTimeoutRef.current);\n };\n },\n [shownLocalState, shownFinalState, willBeHide, onShownChanged],\n );\n\n const referencePropsRef = React.useRef<ReferenceProps>({});\n const floatingPropsRef = React.useRef<FloatingProps>({ style: {} });\n\n if (shownFinalState) {\n floatingPropsRef.current.style = convertFloatingDataToReactCSSProperties(\n strategy,\n x,\n y,\n undefined,\n middlewareData,\n );\n\n if (disableInteractive) {\n floatingPropsRef.current.style.pointerEvents = 'none';\n }\n }\n\n if (triggerOnFocus) {\n referencePropsRef.current.onFocus = handleFocusOnReference;\n referencePropsRef.current.onBlur = handleBlurOnReference;\n }\n\n if (triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReference;\n }\n\n if (triggerOnHover) {\n referencePropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n\n if (closeAfterClick && !triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReferenceForOnlyClose;\n }\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n }\n }\n\n if (triggerOnHover || triggerOnFocus) {\n referencePropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n }\n }\n\n if (shownFinalState) {\n floatingPropsRef.current.onAnimationStart = handleFloatingAnimationStart;\n floatingPropsRef.current.onAnimationEnd = handleFloatingAnimationEnd;\n }\n\n return {\n placement,\n shown: shownFinalState,\n willBeHide,\n refs,\n referenceProps: referencePropsRef.current,\n floatingProps: floatingPropsRef.current,\n middlewareData,\n onClose: handleOnClose,\n // FocusTrap уже определяет нажатие на ESC, поэтому название события содержит конкретный код\n // кнопки вместо просто onKeyDown.\n onEscapeKeyDown: !shownFinalState || disableCloseOnEscKey ? undefined : handleEscapeKeyDown,\n // [Обход баги с FocusTrap]\n //\n // Если сфокусироваться на целевой элемент через нажатие, а потом нажать в область за пределами\n // целевого и всплывающего элемента, то появляется моргание из-за того, что FocusTrap\n // восстанавливает фокус, из-за чего всплывающий элемент снова показывается за счёт\n // `handleFocusOnReference`, а потом скрывается за счёт `handleBlurOnReference`.\n onRestoreFocus: handleRestoreFocus,\n };\n};\n"],"names":["React","debounce","noop","getWindow","isHTMLElement","useCustomEnsuredControl","useGlobalOnClickOutside","useStableCallback","contains","getActiveElementByAnotherElement","useIsomorphicLayoutEffect","autoUpdateFloatingElement","useFloating","convertFloatingDataToReactCSSProperties","DEFAULT_TRIGGER","useResolveTriggerType","whileElementsMounted","args","elementResize","useFloatingWithInteractions","trigger","placement","placementProp","middlewares","hoverDelay","closeAfterClick","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","defaultShown","shown","shownProp","onShownChange","onShownChangeProp","onShownChanged","onShownChangedProp","memoizedValue","useMemo","undefined","shownLocalState","setShownLocalState","value","defaultValue","onChange","reason","shownFinalState","setShownFinalState","useState","willBeHide","setWillBeHide","hasCSSAnimation","useRef","blockMouseEnterRef","blockFocusRef","blurTimeoutRef","handleCloseOnReferenceClickOutsideDisabled","handleCloseOnFloatingClickOutsideDisabled","triggerOnFocus","triggerOnClick","triggerOnHover","x","y","strategy","refs","middlewareData","middleware","commitShownLocalState","useCallback","nextShown","prevState","mouseEnterDelay","mouseLeaveDelay","showWithDelay","hideWithDelay","handleFocusOnReference","current","handleBlurOnReference","event","clearTimeout","relatedTarget","setTimeout","waitWindowBlurFire","reference","floating","handleClickOnReference","handleClickOnReferenceForOnlyClose","handleMouseEnterOnBoth","currentTarget","cancel","handleMouseLeaveOnBothForHoverAndFocusStates","handleFloatingAnimationStart","handleFloatingAnimationEnd","handleOnClose","handleRestoreFocus","handleEscapeKeyDown","handleClickOutside","setGlobalBlurForTriggerOnFocus","handleGlobalBlur","win","addEventListener","removeEventListener","resolveShownStates","referencePropsRef","floatingPropsRef","style","pointerEvents","onFocus","onBlur","onClick","onMouseOver","onMouseLeave","onAnimationStart","onAnimationEnd","referenceProps","floatingProps","onClose","onEscapeKeyDown","onRestoreFocus"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce, noop } from '@vkontakte/vkjs';\nimport { getWindow, isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useCustomEnsuredControl } from '../../../hooks/useEnsuredControl';\nimport { useGlobalOnClickOutside } from '../../../hooks/useGlobalOnClickOutside';\nimport { useStableCallback } from '../../../hooks/useStableCallback';\nimport { contains, getActiveElementByAnotherElement } from '../../dom';\nimport { useIsomorphicLayoutEffect } from '../../useIsomorphicLayoutEffect';\nimport { autoUpdateFloatingElement, useFloating } from '../adapters';\nimport { convertFloatingDataToReactCSSProperties } from '../functions';\nimport { type UseFloatingOptions } from '../types/common';\nimport { DEFAULT_TRIGGER } from './constants';\nimport type {\n FloatingProps,\n ReferenceProps,\n ShownChangeReason,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from './types';\nimport { useResolveTriggerType } from './useResolveTriggerType';\n\ntype LocalState = { shown: boolean; reason?: ShownChangeReason };\n\nconst whileElementsMounted: UseFloatingOptions['whileElementsMounted'] = (...args) =>\n /* istanbul ignore next: не знаю как проверить */\n autoUpdateFloatingElement(...args, { elementResize: true });\n\n/**\n * @private\n */\nexport const useFloatingWithInteractions = <T extends HTMLElement = HTMLElement>({\n trigger = DEFAULT_TRIGGER,\n\n // UseFloating\n placement: placementProp = 'bottom',\n middlewares,\n hoverDelay = 0,\n closeAfterClick = false,\n\n // disables\n disabled = false,\n disableInteractive = false,\n disableCloseOnClickOutside = false,\n disableCloseOnEscKey = false,\n\n // uncontrolled\n defaultShown = false,\n\n // controlled\n shown: shownProp,\n onShownChange: onShownChangeProp,\n onShownChanged: onShownChangedProp,\n}: UseFloatingWithInteractionsProps): UseFloatingWithInteractionsReturn<T> => {\n const memoizedValue = React.useMemo<LocalState | undefined>(\n () => (shownProp !== undefined ? { shown: shownProp } : undefined),\n [shownProp],\n );\n const [shownLocalState, setShownLocalState] = useCustomEnsuredControl<LocalState>({\n value: memoizedValue,\n disabled,\n defaultValue: { shown: defaultShown },\n onChange: useStableCallback(({ shown, reason }) => {\n if (onShownChangeProp) {\n onShownChangeProp(shown, reason);\n }\n }),\n });\n const onShownChanged = useStableCallback(onShownChangedProp ? onShownChangedProp : noop);\n const [shownFinalState, setShownFinalState] = React.useState(() => shownLocalState.shown);\n const [willBeHide, setWillBeHide] = React.useState(false);\n\n const hasCSSAnimation = React.useRef(false);\n\n const blockMouseEnterRef = React.useRef(false);\n const blockFocusRef = React.useRef(false);\n const blurTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>();\n\n const handleCloseOnReferenceClickOutsideDisabled =\n disabled || disableCloseOnClickOutside || willBeHide || !shownLocalState.shown;\n const handleCloseOnFloatingClickOutsideDisabled =\n disableInteractive || handleCloseOnReferenceClickOutsideDisabled;\n\n const { triggerOnFocus, triggerOnClick, triggerOnHover } = useResolveTriggerType(trigger);\n\n // Библиотека `floating-ui`\n const { placement, x, y, strategy, refs, middlewareData } = useFloating<T>({\n strategy: 'fixed',\n placement: placementProp,\n middleware: middlewares,\n whileElementsMounted,\n });\n\n const commitShownLocalState = React.useCallback(\n (nextShown: boolean, reason: ShownChangeReason) => {\n setShownLocalState((prevState) => {\n if (prevState.shown !== nextShown || prevState.reason !== reason) {\n return {\n shown: nextShown,\n reason,\n };\n }\n /* istanbul ignore next: страховка, если вдруг на момент вызова обновления состояния, оно уже будет актуальным */\n return prevState;\n });\n },\n [setShownLocalState],\n );\n\n const [mouseEnterDelay, mouseLeaveDelay] =\n typeof hoverDelay === 'number' ? [hoverDelay, hoverDelay] : hoverDelay;\n\n const showWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(true, 'hover'), mouseEnterDelay),\n [mouseEnterDelay, commitShownLocalState],\n );\n\n const hideWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(false, 'hover'), mouseLeaveDelay),\n [mouseLeaveDelay, commitShownLocalState],\n );\n\n const handleFocusOnReference = useStableCallback(() => {\n // Повторный вызов события фокуса - следствие клика на reference-элемент\n if (shownLocalState.shown) {\n if (!closeAfterClick && shownLocalState.reason === 'hover') {\n return;\n }\n commitShownLocalState(false, 'focus');\n return;\n }\n if (blockFocusRef.current) {\n /* istanbul ignore next: в Jest не воспроизводится баг на вебе (cм. onRestoreFocus) */\n blockFocusRef.current = false;\n return;\n }\n\n commitShownLocalState(true, 'focus');\n });\n\n const handleBlurOnReference = useStableCallback((event: React.FocusEvent) => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (!shownLocalState.shown) {\n clearTimeout(blurTimeoutRef.current);\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n blurTimeoutRef.current = setTimeout(function waitWindowBlurFire() {\n const reference = refs.reference.current;\n // Если пользователь покинул текущее окно в открытом состоянии, то\n // не закрываем всплывающий элемент.\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (!relatedTarget && getActiveElementByAnotherElement(reference) === reference) {\n /* istanbul ignore next */\n return;\n }\n\n // Если пользователь нажал на всплывающий элемент, то не закрываем всплывающий элемент.\n // Note: для этого элемент должен быть фокусируемый (например, за счёт `tabindex=\"-1\"`).\n if (contains(refs.floating.current, relatedTarget) || contains(reference, relatedTarget)) {\n return;\n }\n\n commitShownLocalState(false, 'focus');\n });\n });\n\n const handleClickOnReference = useStableCallback(() => {\n // Предыдущий триггер (фокус) уже вызвал открытие/закрытие всплывающего окна, игнорируем вызов\n if (shownLocalState.reason === 'focus') {\n commitShownLocalState(shownLocalState.shown, 'click');\n return;\n }\n commitShownLocalState(!shownLocalState.shown, 'click');\n });\n\n const handleClickOnReferenceForOnlyClose = useStableCallback(() => {\n blockMouseEnterRef.current = true;\n commitShownLocalState(false, 'click');\n });\n\n const handleMouseEnterOnBoth = useStableCallback((event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (!blockMouseEnterRef.current && !shownLocalState.shown) {\n showWithDelay();\n }\n });\n\n const handleMouseLeaveOnBothForHoverAndFocusStates = useStableCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (willBeHide && event.currentTarget === refs.floating.current) {\n return;\n }\n\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (triggerOnHover) {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n hideWithDelay();\n }\n },\n );\n\n const handleFloatingAnimationStart = () => {\n hasCSSAnimation.current = true;\n };\n\n const handleFloatingAnimationEnd = () => {\n if (willBeHide) {\n setShownFinalState(false);\n setWillBeHide(false);\n onShownChanged(false, shownLocalState.reason);\n }\n };\n\n const handleOnClose = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'callback');\n }, [commitShownLocalState]);\n\n const handleRestoreFocus: UseFloatingWithInteractionsReturn['onRestoreFocus'] = React.useCallback(\n (restoreFocus = true) => {\n if (!restoreFocus) {\n return false;\n }\n if (restoreFocus === true) {\n return triggerOnFocus ? blockFocusRef.current : true;\n } else if (restoreFocus === 'anchor-element') {\n return refs.reference.current as HTMLElement;\n } else if (restoreFocus instanceof HTMLElement) {\n return restoreFocus;\n }\n return false;\n },\n [refs.reference, triggerOnFocus],\n );\n\n const handleEscapeKeyDown = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'escape-key');\n }, [commitShownLocalState]);\n\n const handleClickOutside = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'click-outside');\n }, [commitShownLocalState]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n handleCloseOnReferenceClickOutsideDisabled ? null : refs.reference,\n handleCloseOnFloatingClickOutsideDisabled ? null : refs.floating,\n );\n\n useIsomorphicLayoutEffect(\n /**\n * Если пользователь покинул активное окно и:\n * 1. целевой элемент был в состоянии фокуса;\n * 2. всплывающий элемент был закрытом состоянии;\n * то фокус должен быть заблокирован, когда пользователь вернётся обратно. Иначе покажется\n * всплывающий элемент.\n */\n function setGlobalBlurForTriggerOnFocus() {\n if (!triggerOnFocus || !refs.reference.current) {\n return;\n }\n\n const handleGlobalBlur = () => {\n /* istanbul ignore next */\n const reference = refs.reference.current;\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (\n !shownLocalState.shown &&\n isHTMLElement(reference) &&\n reference === getActiveElementByAnotherElement(reference)\n ) {\n /* istanbul ignore next */\n blockFocusRef.current = true;\n }\n };\n\n const win = getWindow(refs.reference.current);\n win.addEventListener('blur', handleGlobalBlur);\n return () => {\n win.removeEventListener('blur', handleGlobalBlur);\n };\n },\n [triggerOnFocus, refs.reference, shownLocalState],\n );\n\n useIsomorphicLayoutEffect(\n function resolveShownStates() {\n if (willBeHide || shownLocalState.shown === shownFinalState) {\n return;\n }\n\n if (shownLocalState.shown) {\n setShownFinalState(true);\n onShownChanged(true, shownLocalState.reason);\n } else if (hasCSSAnimation.current && !willBeHide) {\n setWillBeHide(true);\n } else {\n setShownFinalState(false);\n }\n\n return () => {\n clearTimeout(blurTimeoutRef.current);\n };\n },\n [shownLocalState, shownFinalState, willBeHide, onShownChanged],\n );\n\n const referencePropsRef = React.useRef<ReferenceProps>({});\n const floatingPropsRef = React.useRef<FloatingProps>({ style: {} });\n\n if (shownFinalState) {\n floatingPropsRef.current.style = convertFloatingDataToReactCSSProperties(\n strategy,\n x,\n y,\n undefined,\n middlewareData,\n );\n\n if (disableInteractive) {\n floatingPropsRef.current.style.pointerEvents = 'none';\n }\n }\n\n if (triggerOnFocus) {\n referencePropsRef.current.onFocus = handleFocusOnReference;\n referencePropsRef.current.onBlur = handleBlurOnReference;\n }\n\n if (triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReference;\n }\n\n if (triggerOnHover) {\n referencePropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n\n if (closeAfterClick && !triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReferenceForOnlyClose;\n }\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n }\n }\n\n if (triggerOnHover || triggerOnFocus) {\n referencePropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n }\n }\n\n if (shownFinalState) {\n floatingPropsRef.current.onAnimationStart = handleFloatingAnimationStart;\n floatingPropsRef.current.onAnimationEnd = handleFloatingAnimationEnd;\n }\n\n return {\n placement,\n shown: shownFinalState,\n willBeHide,\n refs,\n referenceProps: referencePropsRef.current,\n floatingProps: floatingPropsRef.current,\n middlewareData,\n onClose: handleOnClose,\n // FocusTrap уже определяет нажатие на ESC, поэтому название события содержит конкретный код\n // кнопки вместо просто onKeyDown.\n onEscapeKeyDown: !shownFinalState || disableCloseOnEscKey ? undefined : handleEscapeKeyDown,\n // [Обход баги с FocusTrap]\n //\n // Если сфокусироваться на целевой элемент через нажатие, а потом нажать в область за пределами\n // целевого и всплывающего элемента, то появляется моргание из-за того, что FocusTrap\n // восстанавливает фокус, из-за чего всплывающий элемент снова показывается за счёт\n // `handleFocusOnReference`, а потом скрывается за счёт `handleBlurOnReference`.\n onRestoreFocus: handleRestoreFocus,\n };\n};\n"],"names":["React","debounce","noop","getWindow","isHTMLElement","useCustomEnsuredControl","useGlobalOnClickOutside","useStableCallback","contains","getActiveElementByAnotherElement","useIsomorphicLayoutEffect","autoUpdateFloatingElement","useFloating","convertFloatingDataToReactCSSProperties","DEFAULT_TRIGGER","useResolveTriggerType","whileElementsMounted","args","elementResize","useFloatingWithInteractions","trigger","placement","placementProp","middlewares","hoverDelay","closeAfterClick","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","defaultShown","shown","shownProp","onShownChange","onShownChangeProp","onShownChanged","onShownChangedProp","memoizedValue","useMemo","undefined","shownLocalState","setShownLocalState","value","defaultValue","onChange","reason","shownFinalState","setShownFinalState","useState","willBeHide","setWillBeHide","hasCSSAnimation","useRef","blockMouseEnterRef","blockFocusRef","blurTimeoutRef","handleCloseOnReferenceClickOutsideDisabled","handleCloseOnFloatingClickOutsideDisabled","triggerOnFocus","triggerOnClick","triggerOnHover","x","y","strategy","refs","middlewareData","middleware","commitShownLocalState","useCallback","nextShown","prevState","mouseEnterDelay","mouseLeaveDelay","showWithDelay","hideWithDelay","handleFocusOnReference","current","handleBlurOnReference","event","clearTimeout","relatedTarget","setTimeout","waitWindowBlurFire","reference","floating","handleClickOnReference","handleClickOnReferenceForOnlyClose","handleMouseEnterOnBoth","currentTarget","cancel","handleMouseLeaveOnBothForHoverAndFocusStates","handleFloatingAnimationStart","handleFloatingAnimationEnd","handleOnClose","handleRestoreFocus","restoreFocus","HTMLElement","handleEscapeKeyDown","handleClickOutside","setGlobalBlurForTriggerOnFocus","handleGlobalBlur","win","addEventListener","removeEventListener","resolveShownStates","referencePropsRef","floatingPropsRef","style","pointerEvents","onFocus","onBlur","onClick","onMouseOver","onMouseLeave","onAnimationStart","onAnimationEnd","referenceProps","floatingProps","onClose","onEscapeKeyDown","onRestoreFocus"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,QAAQ,EAAEC,IAAI,QAAQ,kBAAkB;AACjD,SAASC,SAAS,EAAEC,aAAa,QAAQ,wCAAwC;AACjF,SAASC,uBAAuB,QAAQ,mCAAmC;AAC3E,SAASC,uBAAuB,QAAQ,yCAAyC;AACjF,SAASC,iBAAiB,QAAQ,mCAAmC;AACrE,SAASC,QAAQ,EAAEC,gCAAgC,QAAQ,YAAY;AACvE,SAASC,yBAAyB,QAAQ,kCAAkC;AAC5E,SAASC,yBAAyB,EAAEC,WAAW,QAAQ,cAAc;AACrE,SAASC,uCAAuC,QAAQ,eAAe;AAEvE,SAASC,eAAe,QAAQ,cAAc;AAQ9C,SAASC,qBAAqB,QAAQ,0BAA0B;AAIhE,MAAMC,uBAAmE,CAAC,GAAGC,OAC3E,+CAA+C,GAC/CN,6BAA6BM,MAAM;QAAEC,eAAe;IAAK;AAE3D;;CAEC,GACD,OAAO,MAAMC,8BAA8B,CAAsC,EAC/EC,UAAUN,eAAe,EAEzB,cAAc;AACdO,WAAWC,gBAAgB,QAAQ,EACnCC,WAAW,EACXC,aAAa,CAAC,EACdC,kBAAkB,KAAK,EAEvB,WAAW;AACXC,WAAW,KAAK,EAChBC,qBAAqB,KAAK,EAC1BC,6BAA6B,KAAK,EAClCC,uBAAuB,KAAK,EAE5B,eAAe;AACfC,eAAe,KAAK,EAEpB,aAAa;AACbC,OAAOC,SAAS,EAChBC,eAAeC,iBAAiB,EAChCC,gBAAgBC,kBAAkB,EACD;IACjC,MAAMC,gBAAgBrC,MAAMsC,OAAO,CACjC,IAAON,cAAcO,YAAY;YAAER,OAAOC;QAAU,IAAIO,WACxD;QAACP;KAAU;IAEb,MAAM,CAACQ,iBAAiBC,mBAAmB,GAAGpC,wBAAoC;QAChFqC,OAAOL;QACPX;QACAiB,cAAc;YAAEZ,OAAOD;QAAa;QACpCc,UAAUrC,kBAAkB,CAAC,EAAEwB,KAAK,EAAEc,MAAM,EAAE;YAC5C,IAAIX,mBAAmB;gBACrBA,kBAAkBH,OAAOc;YAC3B;QACF;IACF;IACA,MAAMV,iBAAiB5B,kBAAkB6B,qBAAqBA,qBAAqBlC;IACnF,MAAM,CAAC4C,iBAAiBC,mBAAmB,GAAG/C,MAAMgD,QAAQ,CAAC,IAAMR,gBAAgBT,KAAK;IACxF,MAAM,CAACkB,YAAYC,cAAc,GAAGlD,MAAMgD,QAAQ,CAAC;IAEnD,MAAMG,kBAAkBnD,MAAMoD,MAAM,CAAC;IAErC,MAAMC,qBAAqBrD,MAAMoD,MAAM,CAAC;IACxC,MAAME,gBAAgBtD,MAAMoD,MAAM,CAAC;IACnC,MAAMG,iBAAiBvD,MAAMoD,MAAM;IAEnC,MAAMI,6CACJ9B,YAAYE,8BAA8BqB,cAAc,CAACT,gBAAgBT,KAAK;IAChF,MAAM0B,4CACJ9B,sBAAsB6B;IAExB,MAAM,EAAEE,cAAc,EAAEC,cAAc,EAAEC,cAAc,EAAE,GAAG7C,sBAAsBK;IAEjF,2BAA2B;IAC3B,MAAM,EAAEC,SAAS,EAAEwC,CAAC,EAAEC,CAAC,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,cAAc,EAAE,GAAGrD,YAAe;QACzEmD,UAAU;QACV1C,WAAWC;QACX4C,YAAY3C;QACZP;IACF;IAEA,MAAMmD,wBAAwBnE,MAAMoE,WAAW,CAC7C,CAACC,WAAoBxB;QACnBJ,mBAAmB,CAAC6B;YAClB,IAAIA,UAAUvC,KAAK,KAAKsC,aAAaC,UAAUzB,MAAM,KAAKA,QAAQ;gBAChE,OAAO;oBACLd,OAAOsC;oBACPxB;gBACF;YACF;YACA,+GAA+G,GAC/G,OAAOyB;QACT;IACF,GACA;QAAC7B;KAAmB;IAGtB,MAAM,CAAC8B,iBAAiBC,gBAAgB,GACtC,OAAOhD,eAAe,WAAW;QAACA;QAAYA;KAAW,GAAGA;IAE9D,MAAMiD,gBAAgBzE,MAAMsC,OAAO,CACjC,IAAMrC,SAAS,IAAMkE,sBAAsB,MAAM,UAAUI,kBAC3D;QAACA;QAAiBJ;KAAsB;IAG1C,MAAMO,gBAAgB1E,MAAMsC,OAAO,CACjC,IAAMrC,SAAS,IAAMkE,sBAAsB,OAAO,UAAUK,kBAC5D;QAACA;QAAiBL;KAAsB;IAG1C,MAAMQ,yBAAyBpE,kBAAkB;QAC/C,wEAAwE;QACxE,IAAIiC,gBAAgBT,KAAK,EAAE;YACzB,IAAI,CAACN,mBAAmBe,gBAAgBK,MAAM,KAAK,SAAS;gBAC1D;YACF;YACAsB,sBAAsB,OAAO;YAC7B;QACF;QACA,IAAIb,cAAcsB,OAAO,EAAE;YACzB,oFAAoF,GACpFtB,cAAcsB,OAAO,GAAG;YACxB;QACF;QAEAT,sBAAsB,MAAM;IAC9B;IAEA,MAAMU,wBAAwBtE,kBAAkB,CAACuE;QAC/CxB,cAAcsB,OAAO,GAAG;QACxBvB,mBAAmBuB,OAAO,GAAG;QAE7B,IAAI,CAACpC,gBAAgBT,KAAK,EAAE;YAC1BgD,aAAaxB,eAAeqB,OAAO;YACnC;QACF;QAEA,MAAMI,gBAAgBF,MAAME,aAAa;QACzCzB,eAAeqB,OAAO,GAAGK,WAAW,SAASC;YAC3C,MAAMC,YAAYnB,KAAKmB,SAAS,CAACP,OAAO;YACxC,kEAAkE;YAClE,oCAAoC;YACpC,mEAAmE,GACnE,IAAI,CAACI,iBAAiBvE,iCAAiC0E,eAAeA,WAAW;gBAC/E,wBAAwB,GACxB;YACF;YAEA,uFAAuF;YACvF,wFAAwF;YACxF,IAAI3E,SAASwD,KAAKoB,QAAQ,CAACR,OAAO,EAAEI,kBAAkBxE,SAAS2E,WAAWH,gBAAgB;gBACxF;YACF;YAEAb,sBAAsB,OAAO;QAC/B;IACF;IAEA,MAAMkB,yBAAyB9E,kBAAkB;QAC/C,8FAA8F;QAC9F,IAAIiC,gBAAgBK,MAAM,KAAK,SAAS;YACtCsB,sBAAsB3B,gBAAgBT,KAAK,EAAE;YAC7C;QACF;QACAoC,sBAAsB,CAAC3B,gBAAgBT,KAAK,EAAE;IAChD;IAEA,MAAMuD,qCAAqC/E,kBAAkB;QAC3D8C,mBAAmBuB,OAAO,GAAG;QAC7BT,sBAAsB,OAAO;IAC/B;IAEA,MAAMoB,yBAAyBhF,kBAAkB,CAACuE;QAChD,IAAI7B,cAAc6B,MAAMU,aAAa,KAAKxB,KAAKoB,QAAQ,CAACR,OAAO,EAAE;YAC/D;QACF;QAEAH,cAAcgB,MAAM;QACpBf,cAAce,MAAM;QAEpB,IAAI,CAACpC,mBAAmBuB,OAAO,IAAI,CAACpC,gBAAgBT,KAAK,EAAE;YACzD0C;QACF;IACF;IAEA,MAAMiB,+CAA+CnF,kBACnD,CAACuE;QACC,IAAI7B,cAAc6B,MAAMU,aAAa,KAAKxB,KAAKoB,QAAQ,CAACR,OAAO,EAAE;YAC/D;QACF;QAEAtB,cAAcsB,OAAO,GAAG;QACxBvB,mBAAmBuB,OAAO,GAAG;QAE7B,IAAIhB,gBAAgB;YAClBa,cAAcgB,MAAM;YACpBf,cAAce,MAAM;YAEpBf;QACF;IACF;IAGF,MAAMiB,+BAA+B;QACnCxC,gBAAgByB,OAAO,GAAG;IAC5B;IAEA,MAAMgB,6BAA6B;QACjC,IAAI3C,YAAY;YACdF,mBAAmB;YACnBG,cAAc;YACdf,eAAe,OAAOK,gBAAgBK,MAAM;QAC9C;IACF;IAEA,MAAMgD,gBAAgB7F,MAAMoE,WAAW,CAAC;QACtCd,cAAcsB,OAAO,GAAG;QACxBT,sBAAsB,OAAO;IAC/B,GAAG;QAACA;KAAsB;IAE1B,MAAM2B,qBAA0E9F,MAAMoE,WAAW,CAC/F,CAAC2B,eAAe,IAAI;QAClB,IAAI,CAACA,cAAc;YACjB,OAAO;QACT;QACA,IAAIA,iBAAiB,MAAM;YACzB,OAAOrC,iBAAiBJ,cAAcsB,OAAO,GAAG;QAClD,OAAO,IAAImB,iBAAiB,kBAAkB;YAC5C,OAAO/B,KAAKmB,SAAS,CAACP,OAAO;QAC/B,OAAO,IAAImB,wBAAwBC,aAAa;YAC9C,OAAOD;QACT;QACA,OAAO;IACT,GACA;QAAC/B,KAAKmB,SAAS;QAAEzB;KAAe;IAGlC,MAAMuC,sBAAsBjG,MAAMoE,WAAW,CAAC;QAC5Cd,cAAcsB,OAAO,GAAG;QACxBT,sBAAsB,OAAO;IAC/B,GAAG;QAACA;KAAsB;IAE1B,MAAM+B,qBAAqBlG,MAAMoE,WAAW,CAAC;QAC3Cd,cAAcsB,OAAO,GAAG;QACxBT,sBAAsB,OAAO;IAC/B,GAAG;QAACA;KAAsB;IAE1B7D,wBACE4F,oBACA1C,6CAA6C,OAAOQ,KAAKmB,SAAS,EAClE1B,4CAA4C,OAAOO,KAAKoB,QAAQ;IAGlE1E,0BACE;;;;;;KAMC,GACD,SAASyF;QACP,IAAI,CAACzC,kBAAkB,CAACM,KAAKmB,SAAS,CAACP,OAAO,EAAE;YAC9C;QACF;QAEA,MAAMwB,mBAAmB;YACvB,wBAAwB,GACxB,MAAMjB,YAAYnB,KAAKmB,SAAS,CAACP,OAAO;YACxC,mEAAmE,GACnE,IACE,CAACpC,gBAAgBT,KAAK,IACtB3B,cAAc+E,cACdA,cAAc1E,iCAAiC0E,YAC/C;gBACA,wBAAwB,GACxB7B,cAAcsB,OAAO,GAAG;YAC1B;QACF;QAEA,MAAMyB,MAAMlG,UAAU6D,KAAKmB,SAAS,CAACP,OAAO;QAC5CyB,IAAIC,gBAAgB,CAAC,QAAQF;QAC7B,OAAO;YACLC,IAAIE,mBAAmB,CAAC,QAAQH;QAClC;IACF,GACA;QAAC1C;QAAgBM,KAAKmB,SAAS;QAAE3C;KAAgB;IAGnD9B,0BACE,SAAS8F;QACP,IAAIvD,cAAcT,gBAAgBT,KAAK,KAAKe,iBAAiB;YAC3D;QACF;QAEA,IAAIN,gBAAgBT,KAAK,EAAE;YACzBgB,mBAAmB;YACnBZ,eAAe,MAAMK,gBAAgBK,MAAM;QAC7C,OAAO,IAAIM,gBAAgByB,OAAO,IAAI,CAAC3B,YAAY;YACjDC,cAAc;QAChB,OAAO;YACLH,mBAAmB;QACrB;QAEA,OAAO;YACLgC,aAAaxB,eAAeqB,OAAO;QACrC;IACF,GACA;QAACpC;QAAiBM;QAAiBG;QAAYd;KAAe;IAGhE,MAAMsE,oBAAoBzG,MAAMoD,MAAM,CAAiB,CAAC;IACxD,MAAMsD,mBAAmB1G,MAAMoD,MAAM,CAAgB;QAAEuD,OAAO,CAAC;IAAE;IAEjE,IAAI7D,iBAAiB;QACnB4D,iBAAiB9B,OAAO,CAAC+B,KAAK,GAAG9F,wCAC/BkD,UACAF,GACAC,GACAvB,WACA0B;QAGF,IAAItC,oBAAoB;YACtB+E,iBAAiB9B,OAAO,CAAC+B,KAAK,CAACC,aAAa,GAAG;QACjD;IACF;IAEA,IAAIlD,gBAAgB;QAClB+C,kBAAkB7B,OAAO,CAACiC,OAAO,GAAGlC;QACpC8B,kBAAkB7B,OAAO,CAACkC,MAAM,GAAGjC;IACrC;IAEA,IAAIlB,gBAAgB;QAClB8C,kBAAkB7B,OAAO,CAACmC,OAAO,GAAG1B;IACtC;IAEA,IAAIzB,gBAAgB;QAClB6C,kBAAkB7B,OAAO,CAACoC,WAAW,GAAGzB;QAExC,IAAI9D,mBAAmB,CAACkC,gBAAgB;YACtC8C,kBAAkB7B,OAAO,CAACmC,OAAO,GAAGzB;QACtC;QAEA,IAAI,CAAC3D,oBAAoB;YACvB+E,iBAAiB9B,OAAO,CAACoC,WAAW,GAAGzB;QACzC;IACF;IAEA,IAAI3B,kBAAkBF,gBAAgB;QACpC+C,kBAAkB7B,OAAO,CAACqC,YAAY,GAAGvB;QAEzC,IAAI,CAAC/D,oBAAoB;YACvB+E,iBAAiB9B,OAAO,CAACqC,YAAY,GAAGvB;QAC1C;IACF;IAEA,IAAI5C,iBAAiB;QACnB4D,iBAAiB9B,OAAO,CAACsC,gBAAgB,GAAGvB;QAC5Ce,iBAAiB9B,OAAO,CAACuC,cAAc,GAAGvB;IAC5C;IAEA,OAAO;QACLvE;QACAU,OAAOe;QACPG;QACAe;QACAoD,gBAAgBX,kBAAkB7B,OAAO;QACzCyC,eAAeX,iBAAiB9B,OAAO;QACvCX;QACAqD,SAASzB;QACT,4FAA4F;QAC5F,kCAAkC;QAClC0B,iBAAiB,CAACzE,mBAAmBjB,uBAAuBU,YAAY0D;QACxE,2BAA2B;QAC3B,EAAE;QACF,+FAA+F;QAC/F,qFAAqF;QACrF,mFAAmF;QACnF,gFAAgF;QAChFuB,gBAAgB1B;IAClB;AACF,EAAE"}
|