@hh.ru/magritte-ui-media-viewer 1.3.11 → 1.3.13
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/index.css +83 -83
- package/index.js +2 -2
- package/internal/Counter.js +2 -2
- package/internal/GalleryItemBody.js +14 -5
- package/internal/GalleryItemBody.js.map +1 -1
- package/internal/PreviewItem.js +2 -2
- package/internal/PreviewItemBody.js +2 -2
- package/internal/PreviewZoomControl.js +8 -5
- package/internal/PreviewZoomControl.js.map +1 -1
- package/internal/animations.d.ts +1 -1
- package/internal/animations.js +5 -5
- package/internal/animations.js.map +1 -1
- package/internal/context.js +1 -1
- package/internal/hooks/useAutoHideTools.js +3 -3
- package/internal/hooks/useAutoHideTools.js.map +1 -1
- package/internal/hooks/useDoubleTapScale.js +10 -4
- package/internal/hooks/useDoubleTapScale.js.map +1 -1
- package/internal/hooks/useGalleryItemController.js +2 -2
- package/internal/hooks/useGalleryItemController.js.map +1 -1
- package/internal/hooks/usePan.js +1 -1
- package/internal/hooks/usePinchToZoom.js +1 -1
- package/internal/hooks/useSwipe.js +2 -2
- package/internal/hooks/useSwipe.js.map +1 -1
- package/internal/hooks/useSwipeToClose.js +4 -4
- package/internal/hooks/useSwipeToClose.js.map +1 -1
- package/internal/hooks/useTapToToggleTools.js +2 -2
- package/internal/hooks/useTapToToggleTools.js.map +1 -1
- package/internal/hooks/useVirtualization.js +1 -1
- package/internal/hooks/useWheelToZoom.js +1 -1
- package/internal/utils.js +7 -4
- package/internal/utils.js.map +1 -1
- package/media-viewer-CFODj3fP.js +5 -0
- package/media-viewer-CFODj3fP.js.map +1 -0
- package/package.json +9 -9
- package/public/Footer.js +1 -1
- package/public/Gallery.js +2 -2
- package/public/GalleryItem.js +2 -2
- package/public/Header.js +1 -1
- package/public/MediaViewer.js +4 -4
- package/public/MediaViewer.js.map +1 -1
- package/public/Preview.js +16 -7
- package/public/Preview.js.map +1 -1
- package/public/Toolbar.js +2 -2
- package/public/Tools.js +1 -1
- package/media-viewer-Cc0v73D3.js +0 -5
- package/media-viewer-Cc0v73D3.js.map +0 -1
package/internal/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["src/internal/utils.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { type MotionValue, animate, useMotionValueEvent } from 'motion/react';\n\nimport { tokenSemanticAnimationTimeMDuration } from '@hh.ru/magritte-design-tokens/types';\nimport { EASE_BASE } from '@hh.ru/magritte-ui-media-viewer/internal/animations';\nimport { type GalleryItemController } from '@hh.ru/magritte-ui-media-viewer/internal/hooks/useGalleryItemController';\nimport { type FitFillValues } from '@hh.ru/magritte-ui-media-viewer/public/types';\n\nexport const useInitOnce = <T>(initializer: () => T): T => {\n const ref = useRef<{ initialized: boolean; value?: T }>({ initialized: false });\n\n if (!ref.current.initialized) {\n ref.current.value = initializer();\n ref.current.initialized = true;\n }\n\n return ref.current.value as T;\n};\n\nconst SCALE_EPSILON = 0.001;\n\nexport function isClose(a: number, b: number, epsilon: number = SCALE_EPSILON): boolean {\n return Math.abs(a - b) < epsilon;\n}\n\nexport function matchesFitOrFill(scale: number, fitFill: FitFillValues): 'fit' | 'fill' | null {\n if (isClose(scale, fitFill.fit)) {\n return 'fit';\n }\n if (isClose(scale, fitFill.fill)) {\n return 'fill';\n }\n return null;\n}\n\nexport const clamp = (value: number, min: number, max: number): number => {\n return Math.min(Math.max(value, min), max);\n};\n\nexport const useDetectDiscreteChange = (value: MotionValue<number>): (() => boolean) => {\n const prevValueRef = useRef<number>(value.get());\n const isLastChangeDiscreteRef = useRef<boolean>(false);\n useMotionValueEvent(value, 'change', (newValue) => {\n isLastChangeDiscreteRef.current = Math.abs(newValue - prevValueRef.current) >= 1;\n prevValueRef.current = newValue;\n });\n const check = useInitOnce(() => () => isLastChangeDiscreteRef.current);\n return check;\n};\n\nexport const lerp = (from: number, to: number, progress: number): number => from + (to - from) * progress;\n\nexport const getDimensionsAfterRotation = (\n size: { width: number; height: number },\n rotation: number\n): { width: number; height: number } => {\n if (rotation % 2 === 0) {\n return size;\n }\n return { width: size.height, height: size.width };\n};\n\nexport const clampOffset = (offset: number, imageSize: number, containerSize: number): number => {\n const maxOffset = Math.max(0, (imageSize - containerSize) / 2);\n return clamp(offset, -maxOffset, maxOffset);\n};\n\nexport const animateOffsetClamp = (\n controller: GalleryItemController,\n dimensions: MotionValue<DOMRectReadOnly | null>,\n anchorPoint?: [number, number]\n): void => {\n const contentSize = controller.contentSize.get();\n const rotation = controller.rotation.get() ?? 0;\n const zoomStops = controller.zoomStops.get()[rotation % 2];\n const viewPortDimensions = dimensions.get();\n if (!viewPortDimensions || !contentSize) {\n return;\n }\n\n const sizeAfterRotation = getDimensionsAfterRotation(contentSize, rotation);\n const scale = clamp(controller.scale.get(), zoomStops[0], zoomStops[zoomStops.length - 1]);\n const offset = anchorPoint\n ? {\n x: lerp(anchorPoint[0], controller.offsetX.get(), scale / controller.scale.get()),\n y: lerp(anchorPoint[1], controller.offsetY.get(), scale / controller.scale.get()),\n }\n : {\n x: controller.offsetX.get(),\n y: controller.offsetY.get(),\n };\n const clampedOffsetX = clampOffset(offset.x, sizeAfterRotation.width * scale, viewPortDimensions.width);\n const clampedOffsetY = clampOffset(offset.y, sizeAfterRotation.height * scale, viewPortDimensions.height);\n\n if (!isClose(controller.offsetX.get(), clampedOffsetX)) {\n animate(controller.offsetX, clampedOffsetX, {\n duration: tokenSemanticAnimationTimeMDuration / 1000,\n ease: EASE_BASE,\n });\n }\n\n if (!isClose(controller.offsetY.get(), clampedOffsetY)) {\n animate(controller.offsetY, clampedOffsetY, {\n duration: tokenSemanticAnimationTimeMDuration / 1000,\n ease: EASE_BASE,\n });\n }\n\n if (!isClose(controller.scale.get(), scale)) {\n animate(controller.scale, scale, { duration: tokenSemanticAnimationTimeMDuration / 1000, ease: EASE_BASE });\n }\n};\n\nexport const isScaleBiggerThanFit = (controller: GalleryItemController): boolean => {\n const fitFill = controller.fitFillScales.get();\n if (fitFill === null) {\n return false;\n }\n const rotation = controller.rotation.get();\n const fitFillForRotation = fitFill[rotation % 2];\n return controller.scale.get() > fitFillForRotation.fit + SCALE_EPSILON;\n};\n\nexport const findNextValue = (values: number[], current: number, bigger: boolean): number => {\n if (bigger) {\n for (const value of values) {\n if (value > current) {\n return value;\n }\n }\n return values[values.length - 1];\n }\n for (let i = values.length - 1; i >= 0; i--) {\n const value = values[i];\n if (value < current) {\n return value;\n }\n }\n\n return values[0];\n};\n\nexport const calcOriginOffset = (\n origin: [number, number],\n viewportDimensions: DOMRectReadOnly\n): { x: number; y: number } => {\n return {\n x: origin[0] - viewportDimensions.left - viewportDimensions.width / 2,\n y: origin[1] - viewportDimensions.top - viewportDimensions.height / 2,\n };\n};\n"],"names":[],"mappings":";;;;;AAQa,MAAA,WAAW,GAAG,CAAI,WAAoB,KAAO;IACtD,MAAM,GAAG,GAAG,MAAM,CAAsC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;AAEhF,IAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE;AAC1B,QAAA,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC;AAClC,QAAA,GAAG,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;KAClC;AAED,IAAA,OAAO,GAAG,CAAC,OAAO,CAAC,KAAU,CAAC;AAClC,EAAE;AAEF,MAAM,aAAa,GAAG,KAAK,CAAC;AAEtB,SAAU,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,UAAkB,aAAa,EAAA;IACzE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AACrC,CAAC;AAEe,SAAA,gBAAgB,CAAC,KAAa,EAAE,OAAsB,EAAA;IAClE,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;AAC7B,QAAA,OAAO,KAAK,CAAC;KAChB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;AAC9B,QAAA,OAAO,MAAM,CAAC;KACjB;AACD,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;AAEY,MAAA,KAAK,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,KAAY;AACrE,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/C,EAAE;AAEW,MAAA,uBAAuB,GAAG,CAAC,KAA0B,KAAqB;IACnF,MAAM,YAAY,GAAG,MAAM,CAAS,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AACjD,IAAA,MAAM,uBAAuB,GAAG,MAAM,CAAU,KAAK,CAAC,CAAC;IACvD,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,QAAQ,KAAI;AAC9C,QAAA,uBAAuB,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACjF,QAAA,YAAY,CAAC,OAAO,GAAG,QAAQ,CAAC;AACpC,KAAC,CAAC,CAAC;AACH,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACvE,IAAA,OAAO,KAAK,CAAC;AACjB,EAAE;MAEW,IAAI,GAAG,CAAC,IAAY,EAAE,EAAU,EAAE,QAAgB,KAAa,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,SAAS;MAE7F,0BAA0B,GAAG,CACtC,IAAuC,EACvC,QAAgB,KACmB;AACnC,IAAA,IAAI,QAAQ,GAAG,CAAC,KAAK,CAAC,EAAE;AACpB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACtD,EAAE;AAEW,MAAA,WAAW,GAAG,CAAC,MAAc,EAAE,SAAiB,EAAE,aAAqB,KAAY;AAC5F,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC;IAC/D,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAChD,EAAE;AAEW,MAAA,kBAAkB,GAAG,CAC9B,UAAiC,EACjC,UAA+C,EAC/C,WAA8B,KACxB;IACN,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAChD,IAAA,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AAC3D,IAAA,MAAM,kBAAkB,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;AAC5C,IAAA,IAAI,CAAC,kBAAkB,IAAI,CAAC,WAAW,EAAE;QACrC,OAAO;KACV;IAED,MAAM,iBAAiB,GAAG,0BAA0B,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,MAAM,GAAG,WAAW;AACtB,UAAE;YACI,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACjF,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;AACpF,SAAA;AACH,UAAE;AACI,YAAA,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE;AAC3B,YAAA,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE;SAC9B,CAAC;AACR,IAAA,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,iBAAiB,CAAC,KAAK,GAAG,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACxG,IAAA,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,iBAAiB,CAAC,MAAM,GAAG,KAAK,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAE1G,IAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,EAAE;AACpD,QAAA,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE;YACxC,QAAQ,EAAE,mCAAmC,GAAG,IAAI;AACpD,YAAA,IAAI,EAAE,SAAS;AAClB,SAAA,CAAC,CAAC;KACN;AAED,IAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,EAAE;AACpD,QAAA,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE;YACxC,QAAQ,EAAE,mCAAmC,GAAG,IAAI;AACpD,YAAA,IAAI,EAAE,SAAS;AAClB,SAAA,CAAC,CAAC;KACN;AAED,IAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,EAAE;AACzC,QAAA,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,mCAAmC,GAAG,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;KAC/G;AACL,EAAE;AAEW,MAAA,oBAAoB,GAAG,CAAC,UAAiC,KAAa;IAC/E,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;AAC/C,IAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AAClB,QAAA,OAAO,KAAK,CAAC;KAChB;IACD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IAC3C,MAAM,kBAAkB,GAAG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AACjD,IAAA,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,kBAAkB,CAAC,GAAG,GAAG,aAAa,CAAC;AAC3E,EAAE;AAEW,MAAA,aAAa,GAAG,CAAC,MAAgB,EAAE,OAAe,EAAE,MAAe,KAAY;IACxF,IAAI,MAAM,EAAE;AACR,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AACxB,YAAA,IAAI,KAAK,GAAG,OAAO,EAAE;AACjB,gBAAA,OAAO,KAAK,CAAC;aAChB;SACJ;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACpC;AACD,IAAA,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,KAAK,GAAG,OAAO,EAAE;AACjB,YAAA,OAAO,KAAK,CAAC;SAChB;KACJ;AAED,IAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACrB,EAAE;MAEW,gBAAgB,GAAG,CAC5B,MAAwB,EACxB,kBAAmC,KACT;IAC1B,OAAO;AACH,QAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,IAAI,GAAG,kBAAkB,CAAC,KAAK,GAAG,CAAC;AACrE,QAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,GAAG,GAAG,kBAAkB,CAAC,MAAM,GAAG,CAAC;KACxE,CAAC;AACN;;;;"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["src/internal/utils.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { type MotionValue, animate, useMotionValueEvent } from 'motion/react';\n\nimport CoreTokens from '@hh.ru/magritte-design-tokens/core-tokens';\nimport { EASE_BASE } from '@hh.ru/magritte-ui-media-viewer/internal/animations';\nimport { type GalleryItemController } from '@hh.ru/magritte-ui-media-viewer/internal/hooks/useGalleryItemController';\nimport { type FitFillValues } from '@hh.ru/magritte-ui-media-viewer/public/types';\n\nexport const useInitOnce = <T>(initializer: () => T): T => {\n const ref = useRef<{ initialized: boolean; value?: T }>({ initialized: false });\n\n if (!ref.current.initialized) {\n ref.current.value = initializer();\n ref.current.initialized = true;\n }\n\n return ref.current.value as T;\n};\n\nconst SCALE_EPSILON = 0.001;\n\nexport function isClose(a: number, b: number, epsilon: number = SCALE_EPSILON): boolean {\n return Math.abs(a - b) < epsilon;\n}\n\nexport function matchesFitOrFill(scale: number, fitFill: FitFillValues): 'fit' | 'fill' | null {\n if (isClose(scale, fitFill.fit)) {\n return 'fit';\n }\n if (isClose(scale, fitFill.fill)) {\n return 'fill';\n }\n return null;\n}\n\nexport const clamp = (value: number, min: number, max: number): number => {\n return Math.min(Math.max(value, min), max);\n};\n\nexport const useDetectDiscreteChange = (value: MotionValue<number>): (() => boolean) => {\n const prevValueRef = useRef<number>(value.get());\n const isLastChangeDiscreteRef = useRef<boolean>(false);\n useMotionValueEvent(value, 'change', (newValue) => {\n isLastChangeDiscreteRef.current = Math.abs(newValue - prevValueRef.current) >= 1;\n prevValueRef.current = newValue;\n });\n const check = useInitOnce(() => () => isLastChangeDiscreteRef.current);\n return check;\n};\n\nexport const lerp = (from: number, to: number, progress: number): number => from + (to - from) * progress;\n\nexport const getDimensionsAfterRotation = (\n size: { width: number; height: number },\n rotation: number\n): { width: number; height: number } => {\n if (rotation % 2 === 0) {\n return size;\n }\n return { width: size.height, height: size.width };\n};\n\nexport const clampOffset = (offset: number, imageSize: number, containerSize: number): number => {\n const maxOffset = Math.max(0, (imageSize - containerSize) / 2);\n return clamp(offset, -maxOffset, maxOffset);\n};\n\nexport const animateOffsetClamp = (\n controller: GalleryItemController,\n dimensions: MotionValue<DOMRectReadOnly | null>,\n anchorPoint?: [number, number]\n): void => {\n const contentSize = controller.contentSize.get();\n const rotation = controller.rotation.get() ?? 0;\n const zoomStops = controller.zoomStops.get()[rotation % 2];\n const viewPortDimensions = dimensions.get();\n if (!viewPortDimensions || !contentSize) {\n return;\n }\n\n const sizeAfterRotation = getDimensionsAfterRotation(contentSize, rotation);\n const scale = clamp(controller.scale.get(), zoomStops[0], zoomStops[zoomStops.length - 1]);\n const offset = anchorPoint\n ? {\n x: lerp(anchorPoint[0], controller.offsetX.get(), scale / controller.scale.get()),\n y: lerp(anchorPoint[1], controller.offsetY.get(), scale / controller.scale.get()),\n }\n : {\n x: controller.offsetX.get(),\n y: controller.offsetY.get(),\n };\n const clampedOffsetX = clampOffset(offset.x, sizeAfterRotation.width * scale, viewPortDimensions.width);\n const clampedOffsetY = clampOffset(offset.y, sizeAfterRotation.height * scale, viewPortDimensions.height);\n\n if (!isClose(controller.offsetX.get(), clampedOffsetX)) {\n animate(controller.offsetX, clampedOffsetX, {\n duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,\n ease: EASE_BASE,\n });\n }\n\n if (!isClose(controller.offsetY.get(), clampedOffsetY)) {\n animate(controller.offsetY, clampedOffsetY, {\n duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,\n ease: EASE_BASE,\n });\n }\n\n if (!isClose(controller.scale.get(), scale)) {\n animate(controller.scale, scale, {\n duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,\n ease: EASE_BASE,\n });\n }\n};\n\nexport const isScaleBiggerThanFit = (controller: GalleryItemController): boolean => {\n const fitFill = controller.fitFillScales.get();\n if (fitFill === null) {\n return false;\n }\n const rotation = controller.rotation.get();\n const fitFillForRotation = fitFill[rotation % 2];\n return controller.scale.get() > fitFillForRotation.fit + SCALE_EPSILON;\n};\n\nexport const findNextValue = (values: number[], current: number, bigger: boolean): number => {\n if (bigger) {\n for (const value of values) {\n if (value > current) {\n return value;\n }\n }\n return values[values.length - 1];\n }\n for (let i = values.length - 1; i >= 0; i--) {\n const value = values[i];\n if (value < current) {\n return value;\n }\n }\n\n return values[0];\n};\n\nexport const calcOriginOffset = (\n origin: [number, number],\n viewportDimensions: DOMRectReadOnly\n): { x: number; y: number } => {\n return {\n x: origin[0] - viewportDimensions.left - viewportDimensions.width / 2,\n y: origin[1] - viewportDimensions.top - viewportDimensions.height / 2,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import './index.css';
|
|
2
|
+
var styles = {"media-viewer":"magritte-media-viewer___KnrXP_1-3-13","mediaViewer":"magritte-media-viewer___KnrXP_1-3-13","gallery-placeholder":"magritte-gallery-placeholder___rUoGL_1-3-13","galleryPlaceholder":"magritte-gallery-placeholder___rUoGL_1-3-13","media-viewer-gallery":"magritte-media-viewer-gallery___P0SnN_1-3-13","mediaViewerGallery":"magritte-media-viewer-gallery___P0SnN_1-3-13","gallery-item":"magritte-gallery-item___Js0Z5_1-3-13","galleryItem":"magritte-gallery-item___Js0Z5_1-3-13","gallery-item-transform-container":"magritte-gallery-item-transform-container___N8-sA_1-3-13","galleryItemTransformContainer":"magritte-gallery-item-transform-container___N8-sA_1-3-13","preview-counter":"magritte-preview-counter___uP2Hc_1-3-13","previewCounter":"magritte-preview-counter___uP2Hc_1-3-13","with-description":"magritte-with-description___-w7ld_1-3-13","withDescription":"magritte-with-description___-w7ld_1-3-13","counter-number":"magritte-counter-number___gUpMp_1-3-13","counterNumber":"magritte-counter-number___gUpMp_1-3-13","no-description-placeholder":"magritte-no-description-placeholder___qc6h2_1-3-13","noDescriptionPlaceholder":"magritte-no-description-placeholder___qc6h2_1-3-13","preview-zoom-control":"magritte-preview-zoom-control___026jA_1-3-13","previewZoomControl":"magritte-preview-zoom-control___026jA_1-3-13","preview-container":"magritte-preview-container___nwjNY_1-3-13","previewContainer":"magritte-preview-container___nwjNY_1-3-13","preview":"magritte-preview___0Ge4C_1-3-13","preview-list":"magritte-preview-list___SAXLZ_1-3-13","previewList":"magritte-preview-list___SAXLZ_1-3-13","preview-item":"magritte-preview-item___gz5f2_1-3-13","previewItem":"magritte-preview-item___gz5f2_1-3-13","preview-item-container":"magritte-preview-item-container___JDVsk_1-3-13","previewItemContainer":"magritte-preview-item-container___JDVsk_1-3-13","media-viewer-toolbar":"magritte-media-viewer-toolbar___2C8nr_1-3-13","mediaViewerToolbar":"magritte-media-viewer-toolbar___2C8nr_1-3-13","no-description":"magritte-no-description___NebrT_1-3-13","noDescription":"magritte-no-description___NebrT_1-3-13","media-viewer-toolbar-left":"magritte-media-viewer-toolbar-left___YzkJt_1-3-13","mediaViewerToolbarLeft":"magritte-media-viewer-toolbar-left___YzkJt_1-3-13","media-viewer-toolbar-right":"magritte-media-viewer-toolbar-right___kBER9_1-3-13","mediaViewerToolbarRight":"magritte-media-viewer-toolbar-right___kBER9_1-3-13","prev-button":"magritte-prev-button___WMYjR_1-3-13","prevButton":"magritte-prev-button___WMYjR_1-3-13","next-button":"magritte-next-button___f8hJT_1-3-13","nextButton":"magritte-next-button___f8hJT_1-3-13","slide-button":"magritte-slide-button___sY8LB_1-3-13","slideButton":"magritte-slide-button___sY8LB_1-3-13","preview-placeholder":"magritte-preview-placeholder___yuhW1_1-3-13","previewPlaceholder":"magritte-preview-placeholder___yuhW1_1-3-13","gallery-item-loader":"magritte-gallery-item-loader___70TDe_1-3-13","galleryItemLoader":"magritte-gallery-item-loader___70TDe_1-3-13","gallery-item-error-container":"magritte-gallery-item-error-container___Z-HyZ_1-3-13","galleryItemErrorContainer":"magritte-gallery-item-error-container___Z-HyZ_1-3-13","description-bottom-sheet-content":"magritte-description-bottom-sheet-content___swnEV_1-3-13","descriptionBottomSheetContent":"magritte-description-bottom-sheet-content___swnEV_1-3-13","header":"magritte-header___egZXt_1-3-13","footer":"magritte-footer___rOH-M_1-3-13","description":"magritte-description___dYc-E_1-3-13"};
|
|
3
|
+
|
|
4
|
+
export { styles as s };
|
|
5
|
+
//# sourceMappingURL=media-viewer-CFODj3fP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-viewer-CFODj3fP.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hh.ru/magritte-ui-media-viewer",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.13",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"sideEffects": [
|
|
@@ -26,17 +26,17 @@
|
|
|
26
26
|
"@hh.ru/magritte-common-resize": "0.2.2",
|
|
27
27
|
"@hh.ru/magritte-common-use-multiple-refs": "1.1.11",
|
|
28
28
|
"@hh.ru/magritte-common-use-translation": "3.2.0",
|
|
29
|
-
"@hh.ru/magritte-design-tokens": "
|
|
29
|
+
"@hh.ru/magritte-design-tokens": "25.0.0",
|
|
30
30
|
"@hh.ru/magritte-internal-accessible-region": "1.0.3",
|
|
31
|
-
"@hh.ru/magritte-ui-bottom-sheet": "9.4.
|
|
31
|
+
"@hh.ru/magritte-ui-bottom-sheet": "9.4.21",
|
|
32
32
|
"@hh.ru/magritte-ui-breakpoint": "6.1.1",
|
|
33
|
-
"@hh.ru/magritte-ui-icon": "
|
|
33
|
+
"@hh.ru/magritte-ui-icon": "15.0.0",
|
|
34
34
|
"@hh.ru/magritte-ui-layer": "3.2.6",
|
|
35
|
-
"@hh.ru/magritte-ui-loader": "4.0.
|
|
35
|
+
"@hh.ru/magritte-ui-loader": "4.0.8",
|
|
36
36
|
"@hh.ru/magritte-ui-mock-component": "1.1.7",
|
|
37
|
-
"@hh.ru/magritte-ui-nav-bar": "2.0.
|
|
38
|
-
"@hh.ru/magritte-ui-tooltip": "11.0.
|
|
39
|
-
"@hh.ru/magritte-ui-typography": "5.3.
|
|
37
|
+
"@hh.ru/magritte-ui-nav-bar": "2.0.9",
|
|
38
|
+
"@hh.ru/magritte-ui-tooltip": "11.0.37",
|
|
39
|
+
"@hh.ru/magritte-ui-typography": "5.3.11",
|
|
40
40
|
"@use-gesture/react": "10.3.1"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"motion": "^12.23.12",
|
|
45
45
|
"react": ">=18.2.0"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "66ff92f76337f5eee98fe0890a41eedbff6dc148"
|
|
48
48
|
}
|
package/public/Footer.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import './../index.css';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { s as styles } from '../media-viewer-
|
|
3
|
+
import { s as styles } from '../media-viewer-CFODj3fP.js';
|
|
4
4
|
|
|
5
5
|
const Footer = ({ children }) => {
|
|
6
6
|
return (jsx("div", { "data-media-viewer-interactive": "true", className: styles.footer, children: children }));
|
package/public/Gallery.js
CHANGED
|
@@ -10,10 +10,10 @@ import { useMediaViewerContext, useGalleryItemsContext } from '../internal/conte
|
|
|
10
10
|
import { useSwipe } from '../internal/hooks/useSwipe.js';
|
|
11
11
|
import { clamp } from '../internal/utils.js';
|
|
12
12
|
import { GalleryItem } from './GalleryItem.js';
|
|
13
|
-
import { s as styles } from '../media-viewer-
|
|
13
|
+
import { s as styles } from '../media-viewer-CFODj3fP.js';
|
|
14
14
|
import '../internal/ImagesLoader.js';
|
|
15
15
|
import '@use-gesture/react';
|
|
16
|
-
import '@hh.ru/magritte-design-tokens/
|
|
16
|
+
import '@hh.ru/magritte-design-tokens/core-tokens';
|
|
17
17
|
import '../internal/animations.js';
|
|
18
18
|
import '../internal/GalleryItemBody.js';
|
|
19
19
|
import '@hh.ru/magritte-ui-loader';
|
package/public/GalleryItem.js
CHANGED
|
@@ -6,7 +6,7 @@ import { useIsVisible, useOnVisibleRangeChange } from '../internal/hooks/useVirt
|
|
|
6
6
|
import 'react';
|
|
7
7
|
import 'motion/react';
|
|
8
8
|
import '@hh.ru/magritte-common-use-translation';
|
|
9
|
-
import '@hh.ru/magritte-design-tokens/
|
|
9
|
+
import '@hh.ru/magritte-design-tokens/core-tokens';
|
|
10
10
|
import '@hh.ru/magritte-ui-loader';
|
|
11
11
|
import '../internal/animations.js';
|
|
12
12
|
import '../internal/hooks/useDoubleTapScale.js';
|
|
@@ -17,7 +17,7 @@ import '@use-gesture/react';
|
|
|
17
17
|
import '../internal/hooks/usePinchToZoom.js';
|
|
18
18
|
import '../internal/hooks/useWheelToZoom.js';
|
|
19
19
|
import '@hh.ru/magritte-ui-typography';
|
|
20
|
-
import '../media-viewer-
|
|
20
|
+
import '../media-viewer-CFODj3fP.js';
|
|
21
21
|
import '../internal/ImagesLoader.js';
|
|
22
22
|
|
|
23
23
|
const GALLERY_ITEM_VIRTUALIZATION_PADDING = 5;
|
package/public/Header.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import './../index.css';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { NavBarDefaultPropsContext } from '@hh.ru/magritte-ui-nav-bar';
|
|
4
|
-
import { s as styles } from '../media-viewer-
|
|
4
|
+
import { s as styles } from '../media-viewer-CFODj3fP.js';
|
|
5
5
|
|
|
6
6
|
const NAV_BAR_ACTIONS_DEFAULT_PROPS = {
|
|
7
7
|
verticalAlign: 'top',
|
package/public/MediaViewer.js
CHANGED
|
@@ -4,7 +4,7 @@ import { useRef, useCallback, useState, useEffect } from 'react';
|
|
|
4
4
|
import { useMotionValue, animate, motion } from 'motion/react';
|
|
5
5
|
import { disableScroll } from '@hh.ru/magritte-common-modal-helper';
|
|
6
6
|
import { useTranslation } from '@hh.ru/magritte-common-use-translation';
|
|
7
|
-
import
|
|
7
|
+
import CoreTokens from '@hh.ru/magritte-design-tokens/core-tokens';
|
|
8
8
|
import { AccessibleRegionProvider, useAccessibleRegionProps } from '@hh.ru/magritte-internal-accessible-region';
|
|
9
9
|
import { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';
|
|
10
10
|
import { Layer } from '@hh.ru/magritte-ui-layer';
|
|
@@ -22,7 +22,7 @@ import { Header } from './Header.js';
|
|
|
22
22
|
import { Preview } from './Preview.js';
|
|
23
23
|
import { Toolbar } from './Toolbar.js';
|
|
24
24
|
import { DesktopTool, MobileTool, RotateTool, CloseTool, FullWidthTool } from './Tools.js';
|
|
25
|
-
import { s as styles } from '../media-viewer-
|
|
25
|
+
import { s as styles } from '../media-viewer-CFODj3fP.js';
|
|
26
26
|
import '../internal/ImagesLoader.js';
|
|
27
27
|
import '@use-gesture/react';
|
|
28
28
|
import '@hh.ru/magritte-common-resize';
|
|
@@ -283,7 +283,7 @@ const MediaViewer = ({ children, visible, onClose, initialItemIndex = 0, 'aria-l
|
|
|
283
283
|
return;
|
|
284
284
|
}
|
|
285
285
|
const delta = Math.abs(closeProgress.get() - 1);
|
|
286
|
-
const animationDuration = delta * (
|
|
286
|
+
const animationDuration = delta * (CoreTokens['magritte-semantic-animation-time-m'].duration / 1000);
|
|
287
287
|
animate(closeProgress, 1, {
|
|
288
288
|
duration: animationDuration,
|
|
289
289
|
ease: EASE_BASE,
|
|
@@ -347,7 +347,7 @@ const MediaViewer = ({ children, visible, onClose, initialItemIndex = 0, 'aria-l
|
|
|
347
347
|
currentSlideIndex.set(initialItemIndex);
|
|
348
348
|
setIsVisible(true);
|
|
349
349
|
animate(contextValue.closeProgress, 0, {
|
|
350
|
-
duration:
|
|
350
|
+
duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,
|
|
351
351
|
ease: EASE_BASE,
|
|
352
352
|
});
|
|
353
353
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaViewer.js","sources":["../../common/keyboard/lib/keys-BQYfE7yD.js","../../common/keyboard/lib/findNextFocusableElement.js","../../common/keyboard/lib/match.js","../../common/keyboard/lib/useKeyboardNavigation.js","src/public/MediaViewer.tsx"],"sourcesContent":["const Escape = {\n key: 'Escape',\n code: 'Esc',\n};\nconst PageUp = {\n key: 'PageUp',\n code: 'Numpad9',\n};\nconst PageDown = {\n key: 'PageDown',\n code: 'Numpad3',\n};\nconst Enter = {\n key: 'Enter',\n code: 'Enter',\n};\nconst Space = {\n key: ' ',\n code: 'Space',\n};\nconst Backspace = {\n key: 'Backspace',\n code: 'Backspace',\n};\nconst Delete = {\n key: 'Delete',\n code: 'Delete',\n};\nconst Home = {\n key: 'Home',\n code: 'Home',\n};\nconst End = {\n key: 'End',\n code: 'End',\n};\nconst ArrowRight = {\n key: 'ArrowRight',\n code: 'ArrowRight',\n};\nconst ArrowLeft = {\n key: 'ArrowLeft',\n code: 'ArrowLeft',\n};\nconst ArrowUp = {\n key: 'ArrowUp',\n code: 'ArrowUp',\n};\nconst ArrowDown = {\n key: 'ArrowDown',\n code: 'ArrowDown',\n};\nconst Tab = {\n key: 'Tab',\n code: 'Tab',\n};\nconst DigitKeys = [\n {\n key: '0',\n code: 'Digit0',\n },\n {\n key: '1',\n code: 'Digit1',\n },\n {\n key: '2',\n code: 'Digit2',\n },\n {\n key: '3',\n code: 'Digit3',\n },\n {\n key: '4',\n code: 'Digit4',\n },\n {\n key: '5',\n code: 'Digit5',\n },\n {\n key: '6',\n code: 'Digit6',\n },\n {\n key: '7',\n code: 'Digit7',\n },\n {\n key: '8',\n code: 'Digit8',\n },\n {\n key: '9',\n code: 'Digit9',\n },\n];\n\nvar keys = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ArrowDown: ArrowDown,\n ArrowLeft: ArrowLeft,\n ArrowRight: ArrowRight,\n ArrowUp: ArrowUp,\n Backspace: Backspace,\n Delete: Delete,\n DigitKeys: DigitKeys,\n End: End,\n Enter: Enter,\n Escape: Escape,\n Home: Home,\n PageDown: PageDown,\n PageUp: PageUp,\n Space: Space,\n Tab: Tab\n});\n\nexport { ArrowUp as A, Backspace as B, Delete as D, Escape as E, Home as H, PageUp as P, Space as S, Tab as T, ArrowRight as a, ArrowDown as b, ArrowLeft as c, PageDown as d, Enter as e, End as f, DigitKeys as g, keys as k };\n//# sourceMappingURL=keys-BQYfE7yD.js.map\n","const FLOAT_COMPARISON_THRESHOLD = 0.5;\nconst FOCUSABLE_SELECTOR = `\n button:not([disabled]):not([tabindex=\"-1\"]),\n a[href],\n input:not([disabled]):not([tabindex=\"-1\"]):not([type=\"hidden\"]),\n select:not([disabled]):not([tabindex=\"-1\"]),\n textarea:not([disabled]):not([tabindex=\"-1\"]),\n [tabindex]:not([tabindex=\"-1\"])\n`;\nconst findAllFocusableElements = (container) => {\n return [...container.querySelectorAll(FOCUSABLE_SELECTOR)];\n};\n/**\n * Находит следующий фокусабельный элемент в контейнере\n * В зависимости от параметра `mode`:\n * `list` — элемент ищется сначала в заданном направлении, потом с противоположной стороны контейнера (т.е. навигация зациклена)\n * `main` — элемент ищется только в заданном направлении относительно таргета\n */\nconst findNextFocusableElement = (container, targetElement, direction, mode = 'main') => {\n if ((mode === 'main' && !targetElement) ||\n (targetElement !== null && (targetElement === container || !container.contains(targetElement)))) {\n return null;\n }\n const focusableElements = findAllFocusableElements(container);\n const targetRect = targetElement?.getBoundingClientRect() ?? null;\n const targetCenterX = targetRect !== null ? Math.round(targetRect.left + targetRect.width / 2) : Number.NaN;\n const targetCenterY = targetRect !== null ? Math.round(targetRect.top + targetRect.height / 2) : Number.NaN;\n let nearestElement = null;\n let minDistance = Infinity;\n let oppositeElement = null;\n let oppositeCoordinate = Number.NaN;\n switch (direction) {\n case 'up':\n oppositeCoordinate = targetRect?.top ?? 0;\n break;\n case 'down':\n oppositeCoordinate = targetRect?.bottom ?? Infinity;\n break;\n case 'left':\n oppositeCoordinate = targetRect?.right ?? 0;\n break;\n case 'right':\n oppositeCoordinate = targetRect?.left ?? Infinity;\n break;\n }\n focusableElements.forEach((element) => {\n if (targetElement === element) {\n return;\n }\n const elementRect = element.getBoundingClientRect();\n const elementCenterX = Math.round(elementRect.left + elementRect.width / 2);\n const elementCenterY = Math.round(elementRect.top + elementRect.height / 2);\n // Ищем ближайший к таргету элемент в заданном направлении\n if (targetRect !== null &&\n !(direction === 'up' && (elementCenterY >= targetCenterY || elementRect.bottom > targetRect.top)) &&\n !(direction === 'down' && (elementCenterY <= targetCenterY || elementRect.top < targetRect.bottom)) &&\n !(direction === 'left' && (elementCenterX >= targetCenterX || elementRect.right > targetRect.left)) &&\n !(direction === 'right' && (elementCenterX <= targetCenterX || elementRect.left < targetRect.right))) {\n let distanceX = Math.abs(targetCenterX - elementCenterX);\n let distanceY = Math.abs(targetCenterY - elementCenterY);\n // Добавляем коэффициенты для соответствующих осей,\n // чтобы сделать элементы в направлении, соответствующем нажатой arrow-клавише, более приоритетными\n if (direction === 'up' || direction === 'down') {\n distanceY *= 0.5;\n }\n else {\n distanceX *= 0.5;\n }\n const distance = Math.hypot(distanceX, distanceY);\n if (distance < minDistance) {\n minDistance = distance;\n nearestElement = element;\n }\n }\n // Ищем ближайший к противоположной стороне элемент\n if (mode === 'list') {\n if (direction === 'up' && elementRect.top - oppositeCoordinate > FLOAT_COMPARISON_THRESHOLD) {\n oppositeElement = element;\n oppositeCoordinate = elementRect.top;\n }\n else if (direction === 'down' && elementRect.bottom - oppositeCoordinate < -FLOAT_COMPARISON_THRESHOLD) {\n oppositeElement = element;\n oppositeCoordinate = elementRect.bottom;\n }\n else if (direction === 'left' && elementRect.right - oppositeCoordinate > FLOAT_COMPARISON_THRESHOLD) {\n oppositeElement = element;\n oppositeCoordinate = elementRect.right;\n }\n else if (direction === 'right' && elementRect.left - oppositeCoordinate < -FLOAT_COMPARISON_THRESHOLD) {\n oppositeElement = element;\n oppositeCoordinate = elementRect.left;\n }\n }\n });\n return nearestElement ?? oppositeElement;\n};\n\nexport { FOCUSABLE_SELECTOR, findAllFocusableElements, findNextFocusableElement };\n//# sourceMappingURL=findNextFocusableElement.js.map\n","const keyboardMatch = (event, { key, code }) => {\n return event.key === key || event.code === code;\n};\nconst keyboardMatches = (event, keysToMatch) => {\n for (let i = 0; i < keysToMatch.length; i++) {\n if (keyboardMatch(event, keysToMatch[i])) {\n return true;\n }\n }\n return false;\n};\n\nexport { keyboardMatch, keyboardMatches };\n//# sourceMappingURL=match.js.map\n","import { useRef, useCallback } from 'react';\nimport { findAllFocusableElements, findNextFocusableElement } from './findNextFocusableElement.js';\nimport { T as Tab, A as ArrowUp, a as ArrowRight, b as ArrowDown, c as ArrowLeft } from './keys-BQYfE7yD.js';\nimport { keyboardMatch } from './match.js';\n\nconst TEXT_FIELD_SELECTOR = 'textarea, input:not([type=\"checkbox\"]):not([type=\"radio\"]), [contenteditable=\"true\"]';\nconst isTextElement = (element) => {\n return element?.matches(TEXT_FIELD_SELECTOR) ?? false;\n};\nconst getNavigationDirection = (event, mode = 'main') => {\n if (mode === 'list' && keyboardMatch(event, Tab)) {\n return event.shiftKey ? 'up' : 'down';\n }\n if (keyboardMatch(event, ArrowUp)) {\n return 'up';\n }\n if (keyboardMatch(event, ArrowRight)) {\n return 'right';\n }\n if (keyboardMatch(event, ArrowDown)) {\n return 'down';\n }\n if (keyboardMatch(event, ArrowLeft)) {\n return 'left';\n }\n return null;\n};\nconst handleKeyboardNavigation = (event, container, activeElementOverride = null, mode = 'main') => {\n const activeElement = activeElementOverride ?? document.activeElement;\n if (mode === 'loop') {\n const focusableElements = findAllFocusableElements(container);\n if (keyboardMatch(event, Tab) && focusableElements.length > 1) {\n if ((activeElement === container || activeElement === focusableElements[focusableElements.length - 1]) &&\n !event.shiftKey) {\n event.preventDefault();\n focusableElements[0].focus();\n }\n if ((activeElement === container || activeElement === focusableElements[0]) && event.shiftKey) {\n event.preventDefault();\n focusableElements[focusableElements.length - 1].focus();\n }\n }\n }\n if (mode !== 'loop' && !isTextElement(activeElement)) {\n const direction = getNavigationDirection(event, mode);\n if (direction !== null) {\n const nextFocusableElement = findNextFocusableElement(container, activeElement, direction, mode);\n if (nextFocusableElement !== null) {\n event.preventDefault();\n nextFocusableElement.focus();\n }\n }\n }\n};\n/**\n * Хук для клавиатурной навигации внутри контейнера с использованием клавиш-стрелок и Tab.\n * Поведение зависит от параметра `mode`:\n * `main` — поддерживается навигация стрелками, поведение Tab не переопределяется\n * `list` — поддерживается навигация стрелками, Tab и Shift+Tab работают аналогично ↓ и ↑, навигация зациклена\n * `loop` — навигация стрелками не поддерживается, навигация с помощью Tab и Shift+Tab зациклена\n */\nconst useKeyboardNavigation = (args = {}) => {\n const { mode = 'main', enabled = true, activeElement: activeElementOverride } = args;\n const enabledRef = useRef(enabled);\n enabledRef.current = enabled;\n const activeElementOverrideRef = useRef(activeElementOverride);\n activeElementOverrideRef.current = activeElementOverride;\n const modeRef = useRef(mode);\n modeRef.current = mode;\n const cleanupRef = useRef(null);\n const bindNavigationRef = useCallback((container) => {\n if (!container) {\n cleanupRef.current?.();\n cleanupRef.current = null;\n return;\n }\n const handleKeyDown = (event) => {\n if (enabledRef.current) {\n handleKeyboardNavigation(event, container, activeElementOverrideRef.current, modeRef.current);\n }\n };\n container.addEventListener('keydown', handleKeyDown);\n cleanupRef.current = () => {\n container.removeEventListener('keydown', handleKeyDown);\n };\n }, []);\n return bindNavigationRef;\n};\n\nexport { TEXT_FIELD_SELECTOR, isTextElement, useKeyboardNavigation };\n//# sourceMappingURL=useKeyboardNavigation.js.map\n","import {\n type FC,\n type PropsWithChildren,\n type ReactElement,\n type Ref,\n useState,\n CSSProperties,\n useEffect,\n useCallback,\n useRef,\n} from 'react';\nimport { type HTMLMotionProps, motion, useMotionValue, animate } from 'motion/react';\n\nimport { useKeyboardNavigation } from '@hh.ru/magritte-common-keyboard';\nimport { disableScroll } from '@hh.ru/magritte-common-modal-helper';\nimport { useTranslation } from '@hh.ru/magritte-common-use-translation';\nimport { tokenSemanticAnimationTimeMDuration } from '@hh.ru/magritte-design-tokens/types';\nimport {\n AccessibleRegionProvider,\n useAccessibleRegionProps,\n type ExplicitRegionProps,\n} from '@hh.ru/magritte-internal-accessible-region';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { Layer } from '@hh.ru/magritte-ui-layer';\nimport { GalleryItemProps } from '@hh.ru/magritte-ui-media-viewer/internal/GalleryItemBody';\nimport { EASE_BASE } from '@hh.ru/magritte-ui-media-viewer/internal/animations';\nimport {\n createMediaViewerContextValue,\n MediaViewerContext,\n GalleryItemsContext,\n} from '@hh.ru/magritte-ui-media-viewer/internal/context';\nimport { useAutoHideTools } from '@hh.ru/magritte-ui-media-viewer/internal/hooks/useAutoHideTools';\nimport { useSwipeToClose } from '@hh.ru/magritte-ui-media-viewer/internal/hooks/useSwipeToClose';\nimport { useTapToToggleTools } from '@hh.ru/magritte-ui-media-viewer/internal/hooks/useTapToToggleTools';\nimport { useVirtualization } from '@hh.ru/magritte-ui-media-viewer/internal/hooks/useVirtualization';\nimport { clamp, useInitOnce } from '@hh.ru/magritte-ui-media-viewer/internal/utils';\nimport { Footer } from '@hh.ru/magritte-ui-media-viewer/public/Footer';\nimport { Gallery } from '@hh.ru/magritte-ui-media-viewer/public/Gallery';\nimport { GalleryItem } from '@hh.ru/magritte-ui-media-viewer/public/GalleryItem';\nimport { Header } from '@hh.ru/magritte-ui-media-viewer/public/Header';\nimport { Preview, PreviewProps } from '@hh.ru/magritte-ui-media-viewer/public/Preview';\nimport { Toolbar, ToolbarProps } from '@hh.ru/magritte-ui-media-viewer/public/Toolbar';\nimport {\n DesktopTool,\n MobileTool,\n RotateTool,\n CloseTool,\n FullWidthTool,\n} from '@hh.ru/magritte-ui-media-viewer/public/Tools';\n\nimport styles from './media-viewer.less';\n\ninterface MediaViewerCompound {\n Gallery: FC<PropsWithChildren>;\n GalleryItem: FC<GalleryItemProps>;\n Preview: FC<PreviewProps>;\n Toolbar: FC<ToolbarProps>;\n Header: FC<PropsWithChildren>;\n Footer: FC<PropsWithChildren>;\n DesktopTool: FC<PropsWithChildren>;\n MobileTool: FC<PropsWithChildren>;\n RotateTool: FC<PropsWithChildren>;\n CloseTool: FC<PropsWithChildren>;\n FullWidthTool: FC<PropsWithChildren>;\n}\n\ninterface MediaViewerDialogProps extends HTMLMotionProps<'div'> {\n explicitAria: ExplicitRegionProps;\n /** Плейсхолдер из переводов — используется только если метка не задана иным источником */\n fallbackLabel: string | undefined;\n dialogRef: Ref<HTMLDivElement>;\n}\n\n/**\n * Внутренний `role=\"dialog\"`-узел. Вынесен в отдельный компонент, потому что обязан жить **под**\n * `AccessibleRegionProvider`: только так `useAccessibleRegionProps` видит метки/описания,\n * зарегистрированные потомками, и выставляет `aria-labelledby` / `aria-describedby`. Явные\n * `aria-*` пропы при этом всё перекрывают. Метка из переводов — лишь дефолт: применяется\n * локально, только когда ни один другой источник метку не дал.\n */\nconst MediaViewerDialog: FC<MediaViewerDialogProps> = ({\n explicitAria,\n fallbackLabel,\n dialogRef,\n children,\n ...rest\n}) => {\n const aria = useAccessibleRegionProps(explicitAria);\n const hasLabel = 'aria-label' in aria || 'aria-labelledby' in aria;\n\n return (\n <motion.div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={hasLabel ? undefined : fallbackLabel}\n {...aria}\n {...rest}\n ref={dialogRef}\n >\n {children}\n </motion.div>\n );\n};\n\nexport const MediaViewer: FC<\n PropsWithChildren<{\n /** Флаг видимости компонента */\n visible: boolean;\n /** Коллбек, вызываемый при закрытии медиавьюера */\n onClose?: VoidFunction;\n /** Индекс слайда, который будет отображаться при открытии компонента, индексация с 0 */\n initialItemIndex?: number;\n }> &\n ExplicitRegionProps\n> &\n MediaViewerCompound = ({\n children,\n visible,\n onClose,\n initialItemIndex = 0,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-description': ariaDescription,\n}) => {\n const [isVisible, setIsVisible] = useState(visible);\n const currentSlideIndex = useMotionValue<number>(0);\n const closeProgress = useMotionValue(isVisible ? 0 : 1);\n const visibleRange = useVirtualization(4, currentSlideIndex);\n const closeCallbackRef = useRef(onClose);\n closeCallbackRef.current = onClose;\n const scrollEnableRef = useRef<VoidFunction | null>(null);\n\n const close = useInitOnce(() => () => {\n if (closeProgress.get() >= 1) {\n closeProgress.set(1);\n setIsVisible(false);\n scrollEnableRef.current?.();\n scrollEnableRef.current = null;\n currentSlideIndex.set(0);\n closeCallbackRef.current?.();\n return;\n }\n const delta = Math.abs(closeProgress.get() - 1);\n const animationDuration = delta * (tokenSemanticAnimationTimeMDuration / 1000);\n animate(closeProgress, 1, {\n duration: animationDuration,\n ease: EASE_BASE,\n onComplete: () => {\n setIsVisible(false);\n scrollEnableRef.current?.();\n scrollEnableRef.current = null;\n currentSlideIndex.set(0);\n closeCallbackRef.current?.();\n },\n });\n });\n const rootRef = useKeyboardNavigation({ mode: 'loop', enabled: isVisible });\n\n const contextValue = useInitOnce(() => {\n const contextValue = createMediaViewerContextValue(visibleRange, currentSlideIndex, closeProgress, close);\n contextValue.onRequestClose = () => {\n setIsVisible(false);\n };\n return contextValue;\n });\n\n const keyHandler = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n close();\n return;\n }\n\n const currentSlideIndexRounded = Math.round(currentSlideIndex.get());\n let slideIndex = currentSlideIndexRounded;\n const slidesCount = contextValue.totalSlides.get();\n if (event.key === 'ArrowLeft') {\n slideIndex = clamp(slideIndex - 1, 0, slidesCount - 1);\n }\n if (event.key === 'ArrowRight') {\n slideIndex = clamp(slideIndex + 1, 0, slidesCount - 1);\n }\n if (slideIndex === currentSlideIndexRounded) {\n return;\n }\n\n currentSlideIndex.set(slideIndex);\n },\n [currentSlideIndex, contextValue, close]\n );\n\n useEffect(() => {\n if (visible) {\n document.addEventListener('keydown', keyHandler);\n } else {\n document.removeEventListener('keydown', keyHandler);\n }\n return () => {\n document.removeEventListener('keydown', keyHandler);\n };\n }, [visible, keyHandler]);\n\n const componentDescriptionTrl = useTranslation('MediaViewer', 'componentDescription');\n\n const explicitAria: ExplicitRegionProps = {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-description': ariaDescription,\n };\n\n useEffect(() => {\n if (visible && !isVisible) {\n scrollEnableRef.current = disableScroll();\n currentSlideIndex.set(initialItemIndex);\n setIsVisible(true);\n animate(contextValue.closeProgress, 0, {\n duration: tokenSemanticAnimationTimeMDuration / 1000,\n ease: EASE_BASE,\n });\n return;\n }\n\n if (!visible && isVisible) {\n close();\n }\n // нельзя реагировать на изменения isVisible, иначе при закрытии жестом хук будет срабатывать\n // и переоткрывать компонент, хук должен реагировать только на изменения visible пропса\n // eslint-disable-next-line disable-autofix/react-hooks/exhaustive-deps\n }, [visible, contextValue]);\n\n useEffect(\n () => () => {\n scrollEnableRef.current?.();\n scrollEnableRef.current = null;\n },\n []\n );\n\n const { isMobile } = useBreakpoint();\n\n const [bindSwipeToClose, isSwipeClosing] = useSwipeToClose<HTMLDivElement>(contextValue);\n const { onTouchStart, onTouchEnd, onClick } = useTapToToggleTools(contextValue);\n const { onMouseMove, onClick: onDesktopClick } = useAutoHideTools(contextValue);\n\n const [items, setItems] = useState<ReactElement<GalleryItemProps>[]>([]);\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <GalleryItemsContext.Provider value={{ items, setItems }}>\n <MediaViewerContext.Provider value={contextValue}>\n <AccessibleRegionProvider>\n <Layer layer=\"media-viewer\">\n <MediaViewerDialog\n explicitAria={explicitAria}\n fallbackLabel={componentDescriptionTrl}\n className={styles.mediaViewer}\n {...(bindSwipeToClose() as HTMLMotionProps<'div'>)}\n dialogRef={rootRef}\n style={\n {\n '--magritte-ui-media-viewer-close-progress': contextValue.closeProgress,\n '--magritte-ui-media-viewer-hide-tools-progress': contextValue.hideToolsProgress,\n ...(!isSwipeClosing\n ? {\n '--magritte-ui-media-viewer-image-close-progress':\n contextValue.closeProgress,\n }\n : {}),\n } as CSSProperties\n }\n onTouchStart={isMobile ? onTouchStart : undefined}\n onTouchEnd={isMobile ? onTouchEnd : undefined}\n onClick={isMobile ? onClick : onDesktopClick}\n onMouseMove={!isMobile ? onMouseMove : undefined}\n >\n {children}\n </MediaViewerDialog>\n </Layer>\n </AccessibleRegionProvider>\n </MediaViewerContext.Provider>\n </GalleryItemsContext.Provider>\n );\n};\n\nMediaViewer.Header = Header;\nMediaViewer.Footer = Footer;\nMediaViewer.Gallery = Gallery;\nMediaViewer.GalleryItem = GalleryItem;\nMediaViewer.Preview = Preview;\nMediaViewer.Toolbar = Toolbar;\nMediaViewer.DesktopTool = DesktopTool;\nMediaViewer.MobileTool = MobileTool;\nMediaViewer.RotateTool = RotateTool;\nMediaViewer.CloseTool = CloseTool;\nMediaViewer.FullWidthTool = FullWidthTool;\n\nMediaViewer.displayName = 'MediaViewer';\n"],"names":["_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MediaViewer.js","sources":["../../common/keyboard/lib/keys-BQYfE7yD.js","../../common/keyboard/lib/findNextFocusableElement.js","../../common/keyboard/lib/match.js","../../common/keyboard/lib/useKeyboardNavigation.js","src/public/MediaViewer.tsx"],"sourcesContent":["const Escape = {\n key: 'Escape',\n code: 'Esc',\n};\nconst PageUp = {\n key: 'PageUp',\n code: 'Numpad9',\n};\nconst PageDown = {\n key: 'PageDown',\n code: 'Numpad3',\n};\nconst Enter = {\n key: 'Enter',\n code: 'Enter',\n};\nconst Space = {\n key: ' ',\n code: 'Space',\n};\nconst Backspace = {\n key: 'Backspace',\n code: 'Backspace',\n};\nconst Delete = {\n key: 'Delete',\n code: 'Delete',\n};\nconst Home = {\n key: 'Home',\n code: 'Home',\n};\nconst End = {\n key: 'End',\n code: 'End',\n};\nconst ArrowRight = {\n key: 'ArrowRight',\n code: 'ArrowRight',\n};\nconst ArrowLeft = {\n key: 'ArrowLeft',\n code: 'ArrowLeft',\n};\nconst ArrowUp = {\n key: 'ArrowUp',\n code: 'ArrowUp',\n};\nconst ArrowDown = {\n key: 'ArrowDown',\n code: 'ArrowDown',\n};\nconst Tab = {\n key: 'Tab',\n code: 'Tab',\n};\nconst DigitKeys = [\n {\n key: '0',\n code: 'Digit0',\n },\n {\n key: '1',\n code: 'Digit1',\n },\n {\n key: '2',\n code: 'Digit2',\n },\n {\n key: '3',\n code: 'Digit3',\n },\n {\n key: '4',\n code: 'Digit4',\n },\n {\n key: '5',\n code: 'Digit5',\n },\n {\n key: '6',\n code: 'Digit6',\n },\n {\n key: '7',\n code: 'Digit7',\n },\n {\n key: '8',\n code: 'Digit8',\n },\n {\n key: '9',\n code: 'Digit9',\n },\n];\n\nvar keys = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ArrowDown: ArrowDown,\n ArrowLeft: ArrowLeft,\n ArrowRight: ArrowRight,\n ArrowUp: ArrowUp,\n Backspace: Backspace,\n Delete: Delete,\n DigitKeys: DigitKeys,\n End: End,\n Enter: Enter,\n Escape: Escape,\n Home: Home,\n PageDown: PageDown,\n PageUp: PageUp,\n Space: Space,\n Tab: Tab\n});\n\nexport { ArrowUp as A, Backspace as B, Delete as D, Escape as E, Home as H, PageUp as P, Space as S, Tab as T, ArrowRight as a, ArrowDown as b, ArrowLeft as c, PageDown as d, Enter as e, End as f, DigitKeys as g, keys as k };\n//# sourceMappingURL=keys-BQYfE7yD.js.map\n","const FLOAT_COMPARISON_THRESHOLD = 0.5;\nconst FOCUSABLE_SELECTOR = `\n button:not([disabled]):not([tabindex=\"-1\"]),\n a[href],\n input:not([disabled]):not([tabindex=\"-1\"]):not([type=\"hidden\"]),\n select:not([disabled]):not([tabindex=\"-1\"]),\n textarea:not([disabled]):not([tabindex=\"-1\"]),\n [tabindex]:not([tabindex=\"-1\"])\n`;\nconst findAllFocusableElements = (container) => {\n return [...container.querySelectorAll(FOCUSABLE_SELECTOR)];\n};\n/**\n * Находит следующий фокусабельный элемент в контейнере\n * В зависимости от параметра `mode`:\n * `list` — элемент ищется сначала в заданном направлении, потом с противоположной стороны контейнера (т.е. навигация зациклена)\n * `main` — элемент ищется только в заданном направлении относительно таргета\n */\nconst findNextFocusableElement = (container, targetElement, direction, mode = 'main') => {\n if ((mode === 'main' && !targetElement) ||\n (targetElement !== null && (targetElement === container || !container.contains(targetElement)))) {\n return null;\n }\n const focusableElements = findAllFocusableElements(container);\n const targetRect = targetElement?.getBoundingClientRect() ?? null;\n const targetCenterX = targetRect !== null ? Math.round(targetRect.left + targetRect.width / 2) : Number.NaN;\n const targetCenterY = targetRect !== null ? Math.round(targetRect.top + targetRect.height / 2) : Number.NaN;\n let nearestElement = null;\n let minDistance = Infinity;\n let oppositeElement = null;\n let oppositeCoordinate = Number.NaN;\n switch (direction) {\n case 'up':\n oppositeCoordinate = targetRect?.top ?? 0;\n break;\n case 'down':\n oppositeCoordinate = targetRect?.bottom ?? Infinity;\n break;\n case 'left':\n oppositeCoordinate = targetRect?.right ?? 0;\n break;\n case 'right':\n oppositeCoordinate = targetRect?.left ?? Infinity;\n break;\n }\n focusableElements.forEach((element) => {\n if (targetElement === element) {\n return;\n }\n const elementRect = element.getBoundingClientRect();\n const elementCenterX = Math.round(elementRect.left + elementRect.width / 2);\n const elementCenterY = Math.round(elementRect.top + elementRect.height / 2);\n // Ищем ближайший к таргету элемент в заданном направлении\n if (targetRect !== null &&\n !(direction === 'up' && (elementCenterY >= targetCenterY || elementRect.bottom > targetRect.top)) &&\n !(direction === 'down' && (elementCenterY <= targetCenterY || elementRect.top < targetRect.bottom)) &&\n !(direction === 'left' && (elementCenterX >= targetCenterX || elementRect.right > targetRect.left)) &&\n !(direction === 'right' && (elementCenterX <= targetCenterX || elementRect.left < targetRect.right))) {\n let distanceX = Math.abs(targetCenterX - elementCenterX);\n let distanceY = Math.abs(targetCenterY - elementCenterY);\n // Добавляем коэффициенты для соответствующих осей,\n // чтобы сделать элементы в направлении, соответствующем нажатой arrow-клавише, более приоритетными\n if (direction === 'up' || direction === 'down') {\n distanceY *= 0.5;\n }\n else {\n distanceX *= 0.5;\n }\n const distance = Math.hypot(distanceX, distanceY);\n if (distance < minDistance) {\n minDistance = distance;\n nearestElement = element;\n }\n }\n // Ищем ближайший к противоположной стороне элемент\n if (mode === 'list') {\n if (direction === 'up' && elementRect.top - oppositeCoordinate > FLOAT_COMPARISON_THRESHOLD) {\n oppositeElement = element;\n oppositeCoordinate = elementRect.top;\n }\n else if (direction === 'down' && elementRect.bottom - oppositeCoordinate < -FLOAT_COMPARISON_THRESHOLD) {\n oppositeElement = element;\n oppositeCoordinate = elementRect.bottom;\n }\n else if (direction === 'left' && elementRect.right - oppositeCoordinate > FLOAT_COMPARISON_THRESHOLD) {\n oppositeElement = element;\n oppositeCoordinate = elementRect.right;\n }\n else if (direction === 'right' && elementRect.left - oppositeCoordinate < -FLOAT_COMPARISON_THRESHOLD) {\n oppositeElement = element;\n oppositeCoordinate = elementRect.left;\n }\n }\n });\n return nearestElement ?? oppositeElement;\n};\n\nexport { FOCUSABLE_SELECTOR, findAllFocusableElements, findNextFocusableElement };\n//# sourceMappingURL=findNextFocusableElement.js.map\n","const keyboardMatch = (event, { key, code }) => {\n return event.key === key || event.code === code;\n};\nconst keyboardMatches = (event, keysToMatch) => {\n for (let i = 0; i < keysToMatch.length; i++) {\n if (keyboardMatch(event, keysToMatch[i])) {\n return true;\n }\n }\n return false;\n};\n\nexport { keyboardMatch, keyboardMatches };\n//# sourceMappingURL=match.js.map\n","import { useRef, useCallback } from 'react';\nimport { findAllFocusableElements, findNextFocusableElement } from './findNextFocusableElement.js';\nimport { T as Tab, A as ArrowUp, a as ArrowRight, b as ArrowDown, c as ArrowLeft } from './keys-BQYfE7yD.js';\nimport { keyboardMatch } from './match.js';\n\nconst TEXT_FIELD_SELECTOR = 'textarea, input:not([type=\"checkbox\"]):not([type=\"radio\"]), [contenteditable=\"true\"]';\nconst isTextElement = (element) => {\n return element?.matches(TEXT_FIELD_SELECTOR) ?? false;\n};\nconst getNavigationDirection = (event, mode = 'main') => {\n if (mode === 'list' && keyboardMatch(event, Tab)) {\n return event.shiftKey ? 'up' : 'down';\n }\n if (keyboardMatch(event, ArrowUp)) {\n return 'up';\n }\n if (keyboardMatch(event, ArrowRight)) {\n return 'right';\n }\n if (keyboardMatch(event, ArrowDown)) {\n return 'down';\n }\n if (keyboardMatch(event, ArrowLeft)) {\n return 'left';\n }\n return null;\n};\nconst handleKeyboardNavigation = (event, container, activeElementOverride = null, mode = 'main') => {\n const activeElement = activeElementOverride ?? document.activeElement;\n if (mode === 'loop') {\n const focusableElements = findAllFocusableElements(container);\n if (keyboardMatch(event, Tab) && focusableElements.length > 1) {\n if ((activeElement === container || activeElement === focusableElements[focusableElements.length - 1]) &&\n !event.shiftKey) {\n event.preventDefault();\n focusableElements[0].focus();\n }\n if ((activeElement === container || activeElement === focusableElements[0]) && event.shiftKey) {\n event.preventDefault();\n focusableElements[focusableElements.length - 1].focus();\n }\n }\n }\n if (mode !== 'loop' && !isTextElement(activeElement)) {\n const direction = getNavigationDirection(event, mode);\n if (direction !== null) {\n const nextFocusableElement = findNextFocusableElement(container, activeElement, direction, mode);\n if (nextFocusableElement !== null) {\n event.preventDefault();\n nextFocusableElement.focus();\n }\n }\n }\n};\n/**\n * Хук для клавиатурной навигации внутри контейнера с использованием клавиш-стрелок и Tab.\n * Поведение зависит от параметра `mode`:\n * `main` — поддерживается навигация стрелками, поведение Tab не переопределяется\n * `list` — поддерживается навигация стрелками, Tab и Shift+Tab работают аналогично ↓ и ↑, навигация зациклена\n * `loop` — навигация стрелками не поддерживается, навигация с помощью Tab и Shift+Tab зациклена\n */\nconst useKeyboardNavigation = (args = {}) => {\n const { mode = 'main', enabled = true, activeElement: activeElementOverride } = args;\n const enabledRef = useRef(enabled);\n enabledRef.current = enabled;\n const activeElementOverrideRef = useRef(activeElementOverride);\n activeElementOverrideRef.current = activeElementOverride;\n const modeRef = useRef(mode);\n modeRef.current = mode;\n const cleanupRef = useRef(null);\n const bindNavigationRef = useCallback((container) => {\n if (!container) {\n cleanupRef.current?.();\n cleanupRef.current = null;\n return;\n }\n const handleKeyDown = (event) => {\n if (enabledRef.current) {\n handleKeyboardNavigation(event, container, activeElementOverrideRef.current, modeRef.current);\n }\n };\n container.addEventListener('keydown', handleKeyDown);\n cleanupRef.current = () => {\n container.removeEventListener('keydown', handleKeyDown);\n };\n }, []);\n return bindNavigationRef;\n};\n\nexport { TEXT_FIELD_SELECTOR, isTextElement, useKeyboardNavigation };\n//# sourceMappingURL=useKeyboardNavigation.js.map\n","import {\n type FC,\n type PropsWithChildren,\n type ReactElement,\n type Ref,\n useState,\n CSSProperties,\n useEffect,\n useCallback,\n useRef,\n} from 'react';\nimport { type HTMLMotionProps, motion, useMotionValue, animate } from 'motion/react';\n\nimport { useKeyboardNavigation } from '@hh.ru/magritte-common-keyboard';\nimport { disableScroll } from '@hh.ru/magritte-common-modal-helper';\nimport { useTranslation } from '@hh.ru/magritte-common-use-translation';\nimport CoreTokens from '@hh.ru/magritte-design-tokens/core-tokens';\nimport {\n AccessibleRegionProvider,\n useAccessibleRegionProps,\n type ExplicitRegionProps,\n} from '@hh.ru/magritte-internal-accessible-region';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { Layer } from '@hh.ru/magritte-ui-layer';\nimport { GalleryItemProps } from '@hh.ru/magritte-ui-media-viewer/internal/GalleryItemBody';\nimport { EASE_BASE } from '@hh.ru/magritte-ui-media-viewer/internal/animations';\nimport {\n createMediaViewerContextValue,\n MediaViewerContext,\n GalleryItemsContext,\n} from '@hh.ru/magritte-ui-media-viewer/internal/context';\nimport { useAutoHideTools } from '@hh.ru/magritte-ui-media-viewer/internal/hooks/useAutoHideTools';\nimport { useSwipeToClose } from '@hh.ru/magritte-ui-media-viewer/internal/hooks/useSwipeToClose';\nimport { useTapToToggleTools } from '@hh.ru/magritte-ui-media-viewer/internal/hooks/useTapToToggleTools';\nimport { useVirtualization } from '@hh.ru/magritte-ui-media-viewer/internal/hooks/useVirtualization';\nimport { clamp, useInitOnce } from '@hh.ru/magritte-ui-media-viewer/internal/utils';\nimport { Footer } from '@hh.ru/magritte-ui-media-viewer/public/Footer';\nimport { Gallery } from '@hh.ru/magritte-ui-media-viewer/public/Gallery';\nimport { GalleryItem } from '@hh.ru/magritte-ui-media-viewer/public/GalleryItem';\nimport { Header } from '@hh.ru/magritte-ui-media-viewer/public/Header';\nimport { Preview, PreviewProps } from '@hh.ru/magritte-ui-media-viewer/public/Preview';\nimport { Toolbar, ToolbarProps } from '@hh.ru/magritte-ui-media-viewer/public/Toolbar';\nimport {\n DesktopTool,\n MobileTool,\n RotateTool,\n CloseTool,\n FullWidthTool,\n} from '@hh.ru/magritte-ui-media-viewer/public/Tools';\n\nimport styles from './media-viewer.less';\n\ninterface MediaViewerCompound {\n Gallery: FC<PropsWithChildren>;\n GalleryItem: FC<GalleryItemProps>;\n Preview: FC<PreviewProps>;\n Toolbar: FC<ToolbarProps>;\n Header: FC<PropsWithChildren>;\n Footer: FC<PropsWithChildren>;\n DesktopTool: FC<PropsWithChildren>;\n MobileTool: FC<PropsWithChildren>;\n RotateTool: FC<PropsWithChildren>;\n CloseTool: FC<PropsWithChildren>;\n FullWidthTool: FC<PropsWithChildren>;\n}\n\ninterface MediaViewerDialogProps extends HTMLMotionProps<'div'> {\n explicitAria: ExplicitRegionProps;\n /** Плейсхолдер из переводов — используется только если метка не задана иным источником */\n fallbackLabel: string | undefined;\n dialogRef: Ref<HTMLDivElement>;\n}\n\n/**\n * Внутренний `role=\"dialog\"`-узел. Вынесен в отдельный компонент, потому что обязан жить **под**\n * `AccessibleRegionProvider`: только так `useAccessibleRegionProps` видит метки/описания,\n * зарегистрированные потомками, и выставляет `aria-labelledby` / `aria-describedby`. Явные\n * `aria-*` пропы при этом всё перекрывают. Метка из переводов — лишь дефолт: применяется\n * локально, только когда ни один другой источник метку не дал.\n */\nconst MediaViewerDialog: FC<MediaViewerDialogProps> = ({\n explicitAria,\n fallbackLabel,\n dialogRef,\n children,\n ...rest\n}) => {\n const aria = useAccessibleRegionProps(explicitAria);\n const hasLabel = 'aria-label' in aria || 'aria-labelledby' in aria;\n\n return (\n <motion.div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={hasLabel ? undefined : fallbackLabel}\n {...aria}\n {...rest}\n ref={dialogRef}\n >\n {children}\n </motion.div>\n );\n};\n\nexport const MediaViewer: FC<\n PropsWithChildren<{\n /** Флаг видимости компонента */\n visible: boolean;\n /** Коллбек, вызываемый при закрытии медиавьюера */\n onClose?: VoidFunction;\n /** Индекс слайда, который будет отображаться при открытии компонента, индексация с 0 */\n initialItemIndex?: number;\n }> &\n ExplicitRegionProps\n> &\n MediaViewerCompound = ({\n children,\n visible,\n onClose,\n initialItemIndex = 0,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-description': ariaDescription,\n}) => {\n const [isVisible, setIsVisible] = useState(visible);\n const currentSlideIndex = useMotionValue<number>(0);\n const closeProgress = useMotionValue(isVisible ? 0 : 1);\n const visibleRange = useVirtualization(4, currentSlideIndex);\n const closeCallbackRef = useRef(onClose);\n closeCallbackRef.current = onClose;\n const scrollEnableRef = useRef<VoidFunction | null>(null);\n\n const close = useInitOnce(() => () => {\n if (closeProgress.get() >= 1) {\n closeProgress.set(1);\n setIsVisible(false);\n scrollEnableRef.current?.();\n scrollEnableRef.current = null;\n currentSlideIndex.set(0);\n closeCallbackRef.current?.();\n return;\n }\n const delta = Math.abs(closeProgress.get() - 1);\n const animationDuration = delta * (CoreTokens['magritte-semantic-animation-time-m'].duration / 1000);\n animate(closeProgress, 1, {\n duration: animationDuration,\n ease: EASE_BASE,\n onComplete: () => {\n setIsVisible(false);\n scrollEnableRef.current?.();\n scrollEnableRef.current = null;\n currentSlideIndex.set(0);\n closeCallbackRef.current?.();\n },\n });\n });\n const rootRef = useKeyboardNavigation({ mode: 'loop', enabled: isVisible });\n\n const contextValue = useInitOnce(() => {\n const contextValue = createMediaViewerContextValue(visibleRange, currentSlideIndex, closeProgress, close);\n contextValue.onRequestClose = () => {\n setIsVisible(false);\n };\n return contextValue;\n });\n\n const keyHandler = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n close();\n return;\n }\n\n const currentSlideIndexRounded = Math.round(currentSlideIndex.get());\n let slideIndex = currentSlideIndexRounded;\n const slidesCount = contextValue.totalSlides.get();\n if (event.key === 'ArrowLeft') {\n slideIndex = clamp(slideIndex - 1, 0, slidesCount - 1);\n }\n if (event.key === 'ArrowRight') {\n slideIndex = clamp(slideIndex + 1, 0, slidesCount - 1);\n }\n if (slideIndex === currentSlideIndexRounded) {\n return;\n }\n\n currentSlideIndex.set(slideIndex);\n },\n [currentSlideIndex, contextValue, close]\n );\n\n useEffect(() => {\n if (visible) {\n document.addEventListener('keydown', keyHandler);\n } else {\n document.removeEventListener('keydown', keyHandler);\n }\n return () => {\n document.removeEventListener('keydown', keyHandler);\n };\n }, [visible, keyHandler]);\n\n const componentDescriptionTrl = useTranslation('MediaViewer', 'componentDescription');\n\n const explicitAria: ExplicitRegionProps = {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-description': ariaDescription,\n };\n\n useEffect(() => {\n if (visible && !isVisible) {\n scrollEnableRef.current = disableScroll();\n currentSlideIndex.set(initialItemIndex);\n setIsVisible(true);\n animate(contextValue.closeProgress, 0, {\n duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,\n ease: EASE_BASE,\n });\n return;\n }\n\n if (!visible && isVisible) {\n close();\n }\n // нельзя реагировать на изменения isVisible, иначе при закрытии жестом хук будет срабатывать\n // и переоткрывать компонент, хук должен реагировать только на изменения visible пропса\n // eslint-disable-next-line disable-autofix/react-hooks/exhaustive-deps\n }, [visible, contextValue]);\n\n useEffect(\n () => () => {\n scrollEnableRef.current?.();\n scrollEnableRef.current = null;\n },\n []\n );\n\n const { isMobile } = useBreakpoint();\n\n const [bindSwipeToClose, isSwipeClosing] = useSwipeToClose<HTMLDivElement>(contextValue);\n const { onTouchStart, onTouchEnd, onClick } = useTapToToggleTools(contextValue);\n const { onMouseMove, onClick: onDesktopClick } = useAutoHideTools(contextValue);\n\n const [items, setItems] = useState<ReactElement<GalleryItemProps>[]>([]);\n\n if (!isVisible) {\n return null;\n }\n\n return (\n <GalleryItemsContext.Provider value={{ items, setItems }}>\n <MediaViewerContext.Provider value={contextValue}>\n <AccessibleRegionProvider>\n <Layer layer=\"media-viewer\">\n <MediaViewerDialog\n explicitAria={explicitAria}\n fallbackLabel={componentDescriptionTrl}\n className={styles.mediaViewer}\n {...(bindSwipeToClose() as HTMLMotionProps<'div'>)}\n dialogRef={rootRef}\n style={\n {\n '--magritte-ui-media-viewer-close-progress': contextValue.closeProgress,\n '--magritte-ui-media-viewer-hide-tools-progress': contextValue.hideToolsProgress,\n ...(!isSwipeClosing\n ? {\n '--magritte-ui-media-viewer-image-close-progress':\n contextValue.closeProgress,\n }\n : {}),\n } as CSSProperties\n }\n onTouchStart={isMobile ? onTouchStart : undefined}\n onTouchEnd={isMobile ? onTouchEnd : undefined}\n onClick={isMobile ? onClick : onDesktopClick}\n onMouseMove={!isMobile ? onMouseMove : undefined}\n >\n {children}\n </MediaViewerDialog>\n </Layer>\n </AccessibleRegionProvider>\n </MediaViewerContext.Provider>\n </GalleryItemsContext.Provider>\n );\n};\n\nMediaViewer.Header = Header;\nMediaViewer.Footer = Footer;\nMediaViewer.Gallery = Gallery;\nMediaViewer.GalleryItem = GalleryItem;\nMediaViewer.Preview = Preview;\nMediaViewer.Toolbar = Toolbar;\nMediaViewer.DesktopTool = DesktopTool;\nMediaViewer.MobileTool = MobileTool;\nMediaViewer.RotateTool = RotateTool;\nMediaViewer.CloseTool = CloseTool;\nMediaViewer.FullWidthTool = FullWidthTool;\n\nMediaViewer.displayName = 'MediaViewer';\n"],"names":["_jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,MAAM,UAAU,GAAG;AACnB,IAAI,GAAG,EAAE,YAAY;AACrB,IAAI,IAAI,EAAE,YAAY;AACtB,CAAC,CAAC;AACF,MAAM,SAAS,GAAG;AAClB,IAAI,GAAG,EAAE,WAAW;AACpB,IAAI,IAAI,EAAE,WAAW;AACrB,CAAC,CAAC;AACF,MAAM,OAAO,GAAG;AAChB,IAAI,GAAG,EAAE,SAAS;AAClB,IAAI,IAAI,EAAE,SAAS;AACnB,CAAC,CAAC;AACF,MAAM,SAAS,GAAG;AAClB,IAAI,GAAG,EAAE,WAAW;AACpB,IAAI,IAAI,EAAE,WAAW;AACrB,CAAC,CAAC;AACF,MAAM,GAAG,GAAG;AACZ,IAAI,GAAG,EAAE,KAAK;AACd,IAAI,IAAI,EAAE,KAAK;AACf,CAAC;;ACvDD,MAAM,0BAA0B,GAAG,GAAG,CAAC;AACvC,MAAM,kBAAkB,GAAG,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC;AACF,MAAM,wBAAwB,GAAG,CAAC,SAAS,KAAK;AAChD,IAAI,OAAO,CAAC,GAAG,SAAS,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,wBAAwB,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,KAAK;AACzF,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,aAAa;AAC1C,SAAS,aAAa,KAAK,IAAI,KAAK,aAAa,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;AACzG,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;AAClE,IAAI,MAAM,UAAU,GAAG,aAAa,EAAE,qBAAqB,EAAE,IAAI,IAAI,CAAC;AACtE,IAAI,MAAM,aAAa,GAAG,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AAChH,IAAI,MAAM,aAAa,GAAG,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AAChH,IAAI,IAAI,cAAc,GAAG,IAAI,CAAC;AAC9B,IAAI,IAAI,WAAW,GAAG,QAAQ,CAAC;AAC/B,IAAI,IAAI,eAAe,GAAG,IAAI,CAAC;AAC/B,IAAI,IAAI,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAC;AACxC,IAAI,QAAQ,SAAS;AACrB,QAAQ,KAAK,IAAI;AACjB,YAAY,kBAAkB,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;AACtD,YAAY,MAAM;AAClB,QAAQ,KAAK,MAAM;AACnB,YAAY,kBAAkB,GAAG,UAAU,EAAE,MAAM,IAAI,QAAQ,CAAC;AAChE,YAAY,MAAM;AAClB,QAAQ,KAAK,MAAM;AACnB,YAAY,kBAAkB,GAAG,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;AACxD,YAAY,MAAM;AAClB,QAAQ,KAAK,OAAO;AACpB,YAAY,kBAAkB,GAAG,UAAU,EAAE,IAAI,IAAI,QAAQ,CAAC;AAC9D,YAAY,MAAM;AAClB,KAAK;AACL,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK;AAC3C,QAAQ,IAAI,aAAa,KAAK,OAAO,EAAE;AACvC,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;AAC5D,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACpF,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpF;AACA,QAAQ,IAAI,UAAU,KAAK,IAAI;AAC/B,YAAY,EAAE,SAAS,KAAK,IAAI,KAAK,cAAc,IAAI,aAAa,IAAI,WAAW,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7G,YAAY,EAAE,SAAS,KAAK,MAAM,KAAK,cAAc,IAAI,aAAa,IAAI,WAAW,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AAC/G,YAAY,EAAE,SAAS,KAAK,MAAM,KAAK,cAAc,IAAI,aAAa,IAAI,WAAW,CAAC,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;AAC/G,YAAY,EAAE,SAAS,KAAK,OAAO,KAAK,cAAc,IAAI,aAAa,IAAI,WAAW,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;AAClH,YAAY,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,cAAc,CAAC,CAAC;AACrE,YAAY,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,cAAc,CAAC,CAAC;AACrE;AACA;AACA,YAAY,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE;AAC5D,gBAAgB,SAAS,IAAI,GAAG,CAAC;AACjC,aAAa;AACb,iBAAiB;AACjB,gBAAgB,SAAS,IAAI,GAAG,CAAC;AACjC,aAAa;AACb,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAC9D,YAAY,IAAI,QAAQ,GAAG,WAAW,EAAE;AACxC,gBAAgB,WAAW,GAAG,QAAQ,CAAC;AACvC,gBAAgB,cAAc,GAAG,OAAO,CAAC;AACzC,aAAa;AACb,SAAS;AACT;AACA,QAAQ,IAAI,IAAI,KAAK,MAAM,EAAE;AAC7B,YAAY,IAAI,SAAS,KAAK,IAAI,IAAI,WAAW,CAAC,GAAG,GAAG,kBAAkB,GAAG,0BAA0B,EAAE;AACzG,gBAAgB,eAAe,GAAG,OAAO,CAAC;AAC1C,gBAAgB,kBAAkB,GAAG,WAAW,CAAC,GAAG,CAAC;AACrD,aAAa;AACb,iBAAiB,IAAI,SAAS,KAAK,MAAM,IAAI,WAAW,CAAC,MAAM,GAAG,kBAAkB,GAAG,CAAC,0BAA0B,EAAE;AACpH,gBAAgB,eAAe,GAAG,OAAO,CAAC;AAC1C,gBAAgB,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAAC;AACxD,aAAa;AACb,iBAAiB,IAAI,SAAS,KAAK,MAAM,IAAI,WAAW,CAAC,KAAK,GAAG,kBAAkB,GAAG,0BAA0B,EAAE;AAClH,gBAAgB,eAAe,GAAG,OAAO,CAAC;AAC1C,gBAAgB,kBAAkB,GAAG,WAAW,CAAC,KAAK,CAAC;AACvD,aAAa;AACb,iBAAiB,IAAI,SAAS,KAAK,OAAO,IAAI,WAAW,CAAC,IAAI,GAAG,kBAAkB,GAAG,CAAC,0BAA0B,EAAE;AACnH,gBAAgB,eAAe,GAAG,OAAO,CAAC;AAC1C,gBAAgB,kBAAkB,GAAG,WAAW,CAAC,IAAI,CAAC;AACtD,aAAa;AACb,SAAS;AACT,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,cAAc,IAAI,eAAe,CAAC;AAC7C,CAAC;;AC/FD,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK;AAChD,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AACpD,CAAC;;ACGD,MAAM,mBAAmB,GAAG,sFAAsF,CAAC;AACnH,MAAM,aAAa,GAAG,CAAC,OAAO,KAAK;AACnC,IAAI,OAAO,OAAO,EAAE,OAAO,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC;AAC1D,CAAC,CAAC;AACF,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,KAAK;AACzD,IAAI,IAAI,IAAI,KAAK,MAAM,IAAI,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;AACtD,QAAQ,OAAO,KAAK,CAAC,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC;AAC9C,KAAK;AACL,IAAI,IAAI,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AACvC,QAAQ,OAAO,IAAI,CAAC;AACpB,KAAK;AACL,IAAI,IAAI,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;AAC1C,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,IAAI,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;AACzC,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,IAAI,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;AACzC,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AACF,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,qBAAqB,GAAG,IAAI,EAAE,IAAI,GAAG,MAAM,KAAK;AACpG,IAAI,MAAM,aAAa,GAAG,qBAAqB,IAAI,QAAQ,CAAC,aAAa,CAAC;AAC1E,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE;AACzB,QAAQ,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;AACtE,QAAQ,IAAI,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AACvE,YAAY,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;AACjH,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE;AACjC,gBAAgB,KAAK,CAAC,cAAc,EAAE,CAAC;AACvC,gBAAgB,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AAC7C,aAAa;AACb,YAAY,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,iBAAiB,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,EAAE;AAC3G,gBAAgB,KAAK,CAAC,cAAc,EAAE,CAAC;AACvC,gBAAgB,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AACxE,aAAa;AACb,SAAS;AACT,KAAK;AACL,IAAI,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE;AAC1D,QAAQ,MAAM,SAAS,GAAG,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9D,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE;AAChC,YAAY,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAC7G,YAAY,IAAI,oBAAoB,KAAK,IAAI,EAAE;AAC/C,gBAAgB,KAAK,CAAC,cAAc,EAAE,CAAC;AACvC,gBAAgB,oBAAoB,CAAC,KAAK,EAAE,CAAC;AAC7C,aAAa;AACb,SAAS;AACT,KAAK;AACL,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAqB,GAAG,CAAC,IAAI,GAAG,EAAE,KAAK;AAC7C,IAAI,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,aAAa,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC;AACzF,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AACvC,IAAI,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;AACjC,IAAI,MAAM,wBAAwB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AACnE,IAAI,wBAAwB,CAAC,OAAO,GAAG,qBAAqB,CAAC;AAC7D,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;AAC3B,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACpC,IAAI,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,SAAS,KAAK;AACzD,QAAQ,IAAI,CAAC,SAAS,EAAE;AACxB,YAAY,UAAU,CAAC,OAAO,IAAI,CAAC;AACnC,YAAY,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;AACtC,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,aAAa,GAAG,CAAC,KAAK,KAAK;AACzC,YAAY,IAAI,UAAU,CAAC,OAAO,EAAE;AACpC,gBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,EAAE,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9G,aAAa;AACb,SAAS,CAAC;AACV,QAAQ,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AAC7D,QAAQ,UAAU,CAAC,OAAO,GAAG,MAAM;AACnC,YAAY,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACpE,SAAS,CAAC;AACV,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,IAAI,OAAO,iBAAiB,CAAC;AAC7B,CAAC;;ACdD;;;;;;AAMG;AACH,MAAM,iBAAiB,GAA+B,CAAC,EACnD,YAAY,EACZ,aAAa,EACb,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACV,KAAI;AACD,IAAA,MAAM,IAAI,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,YAAY,IAAI,IAAI,IAAI,iBAAiB,IAAI,IAAI,CAAC;AAEnE,IAAA,QACIA,GAAA,CAAC,MAAM,CAAC,GAAG,EACP,EAAA,IAAI,EAAC,QAAQ,EACF,YAAA,EAAA,MAAM,EACL,YAAA,EAAA,QAAQ,GAAG,SAAS,GAAG,aAAa,EAAA,GAC5C,IAAI,EACJ,GAAA,IAAI,EACR,GAAG,EAAE,SAAS,EAAA,QAAA,EAEb,QAAQ,EAAA,CACA,EACf;AACN,CAAC,CAAC;AAEK,MAAM,WAAW,GAWE,CAAC,EACvB,QAAQ,EACR,OAAO,EACP,OAAO,EACP,gBAAgB,GAAG,CAAC,EACpB,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,kBAAkB,EAAE,eAAe,EACnC,kBAAkB,EAAE,eAAe,GACtC,KAAI;IACD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpD,IAAA,MAAM,iBAAiB,GAAG,cAAc,CAAS,CAAC,CAAC,CAAC;AACpD,IAAA,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,YAAY,GAAG,iBAAiB,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAC7D,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AACzC,IAAA,gBAAgB,CAAC,OAAO,GAAG,OAAO,CAAC;AACnC,IAAA,MAAM,eAAe,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAC;IAE1D,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,MAAK;AACjC,QAAA,IAAI,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;AAC1B,YAAA,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,YAAY,CAAC,KAAK,CAAC,CAAC;AACpB,YAAA,eAAe,CAAC,OAAO,IAAI,CAAC;AAC5B,YAAA,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;AAC/B,YAAA,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB,YAAA,gBAAgB,CAAC,OAAO,IAAI,CAAC;YAC7B,OAAO;SACV;AACD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAChD,QAAA,MAAM,iBAAiB,GAAG,KAAK,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AACrG,QAAA,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE;AACtB,YAAA,QAAQ,EAAE,iBAAiB;AAC3B,YAAA,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,MAAK;gBACb,YAAY,CAAC,KAAK,CAAC,CAAC;AACpB,gBAAA,eAAe,CAAC,OAAO,IAAI,CAAC;AAC5B,gBAAA,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;AAC/B,gBAAA,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzB,gBAAA,gBAAgB,CAAC,OAAO,IAAI,CAAC;aAChC;AACJ,SAAA,CAAC,CAAC;AACP,KAAC,CAAC,CAAC;AACH,IAAA,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAE5E,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;AAClC,QAAA,MAAM,YAAY,GAAG,6BAA6B,CAAC,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;AAC1G,QAAA,YAAY,CAAC,cAAc,GAAG,MAAK;YAC/B,YAAY,CAAC,KAAK,CAAC,CAAC;AACxB,SAAC,CAAC;AACF,QAAA,OAAO,YAAY,CAAC;AACxB,KAAC,CAAC,CAAC;AAEH,IAAA,MAAM,UAAU,GAAG,WAAW,CAC1B,CAAC,KAAoB,KAAI;AACrB,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;AACxB,YAAA,KAAK,EAAE,CAAC;YACR,OAAO;SACV;QAED,MAAM,wBAAwB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC;QACrE,IAAI,UAAU,GAAG,wBAAwB,CAAC;QAC1C,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;AACnD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;AAC3B,YAAA,UAAU,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;SAC1D;AACD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,EAAE;AAC5B,YAAA,UAAU,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;SAC1D;AACD,QAAA,IAAI,UAAU,KAAK,wBAAwB,EAAE;YACzC,OAAO;SACV;AAED,QAAA,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KACrC,EACD,CAAC,iBAAiB,EAAE,YAAY,EAAE,KAAK,CAAC,CAC3C,CAAC;IAEF,SAAS,CAAC,MAAK;QACX,IAAI,OAAO,EAAE;AACT,YAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;SACpD;aAAM;AACH,YAAA,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;SACvD;AACD,QAAA,OAAO,MAAK;AACR,YAAA,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACxD,SAAC,CAAC;AACN,KAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAE1B,MAAM,uBAAuB,GAAG,cAAc,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;AAEtF,IAAA,MAAM,YAAY,GAAwB;AACtC,QAAA,YAAY,EAAE,SAAS;AACvB,QAAA,iBAAiB,EAAE,cAAc;AACjC,QAAA,kBAAkB,EAAE,eAAe;AACnC,QAAA,kBAAkB,EAAE,eAAe;KACtC,CAAC;IAEF,SAAS,CAAC,MAAK;AACX,QAAA,IAAI,OAAO,IAAI,CAAC,SAAS,EAAE;AACvB,YAAA,eAAe,CAAC,OAAO,GAAG,aAAa,EAAE,CAAC;AAC1C,YAAA,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACxC,YAAY,CAAC,IAAI,CAAC,CAAC;AACnB,YAAA,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,EAAE;gBACnC,QAAQ,EAAE,UAAU,CAAC,oCAAoC,CAAC,CAAC,QAAQ,GAAG,IAAI;AAC1E,gBAAA,IAAI,EAAE,SAAS;AAClB,aAAA,CAAC,CAAC;YACH,OAAO;SACV;AAED,QAAA,IAAI,CAAC,OAAO,IAAI,SAAS,EAAE;AACvB,YAAA,KAAK,EAAE,CAAC;SACX;;;;AAIL,KAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AAE5B,IAAA,SAAS,CACL,MAAM,MAAK;AACP,QAAA,eAAe,CAAC,OAAO,IAAI,CAAC;AAC5B,QAAA,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;KAClC,EACD,EAAE,CACL,CAAC;AAEF,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAC;IAErC,MAAM,CAAC,gBAAgB,EAAE,cAAc,CAAC,GAAG,eAAe,CAAiB,YAAY,CAAC,CAAC;AACzF,IAAA,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;AAChF,IAAA,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAEhF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAmC,EAAE,CAAC,CAAC;IAEzE,IAAI,CAAC,SAAS,EAAE;AACZ,QAAA,OAAO,IAAI,CAAC;KACf;IAED,QACIA,GAAC,CAAA,mBAAmB,CAAC,QAAQ,EAAC,EAAA,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EACpD,QAAA,EAAAA,GAAA,CAAC,kBAAkB,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,YAAY,EAAA,QAAA,EAC5CA,GAAC,CAAA,wBAAwB,EACrB,EAAA,QAAA,EAAAA,GAAA,CAAC,KAAK,EAAA,EAAC,KAAK,EAAC,cAAc,EACvB,QAAA,EAAAA,GAAA,CAAC,iBAAiB,EAAA,EACd,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,uBAAuB,EACtC,SAAS,EAAE,MAAM,CAAC,WAAW,EAAA,GACxB,gBAAgB,EAA6B,EAClD,SAAS,EAAE,OAAO,EAClB,KAAK,EACD;4BACI,2CAA2C,EAAE,YAAY,CAAC,aAAa;4BACvE,gDAAgD,EAAE,YAAY,CAAC,iBAAiB;4BAChF,IAAI,CAAC,cAAc;AACf,kCAAE;oCACI,iDAAiD,EAC7C,YAAY,CAAC,aAAa;AACjC,iCAAA;kCACD,EAAE;yBACM,EAEtB,YAAY,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,EACjD,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,EAC7C,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,cAAc,EAC5C,WAAW,EAAE,CAAC,QAAQ,GAAG,WAAW,GAAG,SAAS,EAE/C,QAAA,EAAA,QAAQ,EACO,CAAA,EAAA,CAChB,EACe,CAAA,EAAA,CACD,EACH,CAAA,EACjC;AACN,EAAE;AAEF,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;AAC5B,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;AAC5B,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC;AAC9B,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC;AACtC,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC;AAC9B,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC;AAC9B,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC;AACtC,WAAW,CAAC,UAAU,GAAG,UAAU,CAAC;AACpC,WAAW,CAAC,UAAU,GAAG,UAAU,CAAC;AACpC,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC;AAClC,WAAW,CAAC,aAAa,GAAG,aAAa,CAAC;AAE1C,WAAW,CAAC,WAAW,GAAG,aAAa;;;;"}
|
package/public/Preview.js
CHANGED
|
@@ -3,7 +3,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
3
3
|
import { useRef } from 'react';
|
|
4
4
|
import { useDrag } from '@use-gesture/react';
|
|
5
5
|
import { useMotionValue, useMotionValueEvent, useTransform, animate, motion } from 'motion/react';
|
|
6
|
-
import
|
|
6
|
+
import CoreTokens from '@hh.ru/magritte-design-tokens/core-tokens';
|
|
7
7
|
import { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';
|
|
8
8
|
import { Counter } from '../internal/Counter.js';
|
|
9
9
|
import { PreviewItem } from '../internal/PreviewItem.js';
|
|
@@ -12,7 +12,7 @@ import { EASE_BASE } from '../internal/animations.js';
|
|
|
12
12
|
import { useMediaViewerContext, useGalleryItemsContext, PreviewContext } from '../internal/context.js';
|
|
13
13
|
import { useVirtualization } from '../internal/hooks/useVirtualization.js';
|
|
14
14
|
import { useDetectDiscreteChange, useInitOnce, clamp } from '../internal/utils.js';
|
|
15
|
-
import { s as styles } from '../media-viewer-
|
|
15
|
+
import { s as styles } from '../media-viewer-CFODj3fP.js';
|
|
16
16
|
import 'classnames';
|
|
17
17
|
import '@hh.ru/magritte-common-use-translation';
|
|
18
18
|
import '@hh.ru/magritte-ui-bottom-sheet';
|
|
@@ -59,7 +59,10 @@ const Preview = ({ noZoom = false, noCounter = false }) => {
|
|
|
59
59
|
const applyShift = () => {
|
|
60
60
|
const newMobileX = calcMobileX(activePreviewItemIndex.get());
|
|
61
61
|
if (isDiscrete() && !isDraggingRef.current) {
|
|
62
|
-
animate(mobileX, newMobileX, {
|
|
62
|
+
animate(mobileX, newMobileX, {
|
|
63
|
+
duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,
|
|
64
|
+
ease: EASE_BASE,
|
|
65
|
+
});
|
|
63
66
|
}
|
|
64
67
|
else {
|
|
65
68
|
mobileX.set(newMobileX);
|
|
@@ -84,7 +87,7 @@ const Preview = ({ noZoom = false, noCounter = false }) => {
|
|
|
84
87
|
const newDesktopX = calcDesktopX();
|
|
85
88
|
if (isDiscrete()) {
|
|
86
89
|
animate(desktopX, newDesktopX, {
|
|
87
|
-
duration:
|
|
90
|
+
duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,
|
|
88
91
|
ease: EASE_BASE,
|
|
89
92
|
});
|
|
90
93
|
}
|
|
@@ -99,17 +102,23 @@ const Preview = ({ noZoom = false, noCounter = false }) => {
|
|
|
99
102
|
useMotionValueEvent(activePreviewItemIndex, 'change', applyMobileShift);
|
|
100
103
|
const bindMobileDrag = useDrag(({ delta, active, last, first }) => {
|
|
101
104
|
if (first) {
|
|
102
|
-
animate(dragFactor, 1, {
|
|
105
|
+
animate(dragFactor, 1, {
|
|
106
|
+
duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,
|
|
107
|
+
ease: EASE_BASE,
|
|
108
|
+
});
|
|
103
109
|
}
|
|
104
110
|
isDraggingRef.current = active;
|
|
105
111
|
activePreviewItemIndex.set(clamp(activePreviewItemIndex.get() - delta[0] / (MINIATURE_SIZE_MOBILE_COLLAPSED + MINIATURE_GAP_MOBILE), 0, items.length - 1));
|
|
106
112
|
globalContext.currentSlideIndex.set(Math.round(activePreviewItemIndex.get()));
|
|
107
113
|
if (last) {
|
|
108
114
|
animate(activePreviewItemIndex, globalContext.currentSlideIndex.get(), {
|
|
109
|
-
duration:
|
|
115
|
+
duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,
|
|
116
|
+
ease: EASE_BASE,
|
|
117
|
+
});
|
|
118
|
+
animate(dragFactor, 0, {
|
|
119
|
+
duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,
|
|
110
120
|
ease: EASE_BASE,
|
|
111
121
|
});
|
|
112
|
-
animate(dragFactor, 0, { duration: tokenSemanticAnimationTimeMDuration / 1000, ease: EASE_BASE });
|
|
113
122
|
}
|
|
114
123
|
}, { axis: 'x' });
|
|
115
124
|
return (jsxs("div", { className: styles.previewContainer, children: [!noCounter && !isMobile && jsx(Counter, { items: items }), jsxs("div", { className: styles.preview, ...(isMobile ? bindMobileDrag() : {}), style: { '--media-viewer-max-visible-items': MAX_VISIBLE_ITEMS_DESKTOP }, "aria-hidden": true, children: [jsx(motion.div, { className: styles.previewPlaceholder, style: { '--magritte-media-viewer-placeholder-size': visibleRange.startIndex } }), jsx(motion.div, { className: styles.previewList, style: { x: isMobile ? mobileX : desktopX }, children: jsx(PreviewContext.Provider, { value: contextValue, children: items.map((item, index) => {
|
package/public/Preview.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Preview.js","sources":["src/public/Preview.tsx"],"sourcesContent":["import { type FC, type CSSProperties, useRef } from 'react';\nimport { useDrag } from '@use-gesture/react';\nimport { motion, animate, useMotionValueEvent, useMotionValue, MotionStyle, useTransform } from 'motion/react';\n\nimport { tokenSemanticAnimationTimeMDuration } from '@hh.ru/magritte-design-tokens/types';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { Counter } from '@hh.ru/magritte-ui-media-viewer/internal/Counter';\nimport { PreviewItem } from '@hh.ru/magritte-ui-media-viewer/internal/PreviewItem';\nimport { PreviewZoomControl } from '@hh.ru/magritte-ui-media-viewer/internal/PreviewZoomControl';\nimport { EASE_BASE } from '@hh.ru/magritte-ui-media-viewer/internal/animations';\nimport {\n useMediaViewerContext,\n PreviewContext,\n useGalleryItemsContext,\n} from '@hh.ru/magritte-ui-media-viewer/internal/context';\nimport { useVirtualization } from '@hh.ru/magritte-ui-media-viewer/internal/hooks/useVirtualization';\nimport { useInitOnce, clamp, useDetectDiscreteChange } from '@hh.ru/magritte-ui-media-viewer/internal/utils';\n\nimport styles from './media-viewer.less';\n\nexport interface PreviewProps {\n /** Отключить возможность зума из превью */\n noZoom?: boolean;\n /** Не показывать счётчик элементов */\n noCounter?: boolean;\n}\n\nconst MINIATURE_SIZE_MOBILE_COLLAPSED = 24;\nconst MINIATURE_SIZE_MOBILE_EXPANDED = 48;\nconst MINIATURE_GAP_MOBILE = 2;\nconst MINIATURE_SIZE_DESKTOP_COLLAPSED = 40;\nconst MINIATURE_SIZE_DESKTOP_EXPANDED = 80;\nconst MINIATURE_GAP_DESKTOP = 8;\nconst MAX_VISIBLE_ITEMS_DESKTOP = 10;\nconst MAX_CONTAINER_WIDTH_DESKTOP =\n (MAX_VISIBLE_ITEMS_DESKTOP - 1) * (MINIATURE_SIZE_DESKTOP_COLLAPSED + MINIATURE_GAP_DESKTOP) +\n MINIATURE_SIZE_DESKTOP_EXPANDED;\n\nconst VIRTUALIZATION_BATCH_SIZE = Math.ceil(\n 1024 /* s breakpoint */ / (MINIATURE_SIZE_MOBILE_COLLAPSED + MINIATURE_GAP_MOBILE)\n);\n\nexport const Preview: FC<PreviewProps> = ({ noZoom = false, noCounter = false }) => {\n const { isMobile } = useBreakpoint();\n const globalContext = useMediaViewerContext();\n const { items } = useGalleryItemsContext();\n const isDraggingRef = useRef(false);\n const activePreviewItemIndex = useMotionValue(globalContext.currentSlideIndex.get());\n const dragFactor = useMotionValue(0);\n const isDiscrete = useDetectDiscreteChange(activePreviewItemIndex);\n const desktopX = useMotionValue(0);\n const mobileX = useMotionValue(0);\n const visibleRange = useVirtualization(VIRTUALIZATION_BATCH_SIZE, globalContext.currentSlideIndex);\n const contextValue = useInitOnce(() => ({\n activeItemIndex: activePreviewItemIndex,\n visibleRange,\n }));\n\n useMotionValueEvent(globalContext.currentSlideIndex, 'change', (newIndex) => {\n !isDraggingRef.current && activePreviewItemIndex.set(newIndex);\n });\n\n const rightPlaceholderWidth = useTransform(visibleRange.endIndex, (endIndex) => {\n const itemsCount = items.length;\n return Math.max(0, itemsCount - endIndex);\n });\n\n const applyMobileShift = useInitOnce(() => {\n const calcMobileX = (index: number) =>\n -(index * (MINIATURE_SIZE_MOBILE_COLLAPSED + MINIATURE_GAP_MOBILE)) - MINIATURE_SIZE_MOBILE_EXPANDED / 2;\n\n const applyShift = () => {\n const newMobileX = calcMobileX(activePreviewItemIndex.get());\n if (isDiscrete() && !isDraggingRef.current) {\n animate(mobileX, newMobileX, { duration: tokenSemanticAnimationTimeMDuration / 1000, ease: EASE_BASE });\n } else {\n mobileX.set(newMobileX);\n }\n };\n\n applyShift();\n return applyShift;\n });\n\n const applyDesktopShift = useInitOnce(() => {\n const calcDesktopX = () => {\n const index = activePreviewItemIndex.get();\n const itemsCount = globalContext.totalSlides.get();\n\n const indexCenterPos =\n index * (MINIATURE_SIZE_DESKTOP_COLLAPSED + MINIATURE_GAP_DESKTOP) +\n MINIATURE_SIZE_DESKTOP_EXPANDED / 2;\n\n const containerCenterPos = MAX_CONTAINER_WIDTH_DESKTOP / 2;\n\n const itemsWidth =\n (itemsCount - 1) * (MINIATURE_SIZE_DESKTOP_COLLAPSED + MINIATURE_GAP_DESKTOP) +\n MINIATURE_SIZE_DESKTOP_EXPANDED;\n const translation = clamp(\n containerCenterPos - indexCenterPos,\n Math.min(MAX_CONTAINER_WIDTH_DESKTOP - itemsWidth, 0),\n 0\n );\n\n return translation;\n };\n\n const applyShift = () => {\n const newDesktopX = calcDesktopX();\n if (isDiscrete()) {\n animate(desktopX, newDesktopX, {\n duration: tokenSemanticAnimationTimeMDuration / 1000,\n ease: EASE_BASE,\n });\n } else {\n desktopX.set(newDesktopX);\n }\n };\n\n return applyShift;\n });\n\n useMotionValueEvent(globalContext.currentSlideIndex, 'change', applyDesktopShift);\n useMotionValueEvent(activePreviewItemIndex, 'change', applyDesktopShift);\n useMotionValueEvent(activePreviewItemIndex, 'change', applyMobileShift);\n\n const bindMobileDrag = useDrag(\n ({ delta, active, last, first }) => {\n if (first) {\n animate(dragFactor, 1, { duration: tokenSemanticAnimationTimeMDuration / 1000, ease: EASE_BASE });\n }\n isDraggingRef.current = active;\n activePreviewItemIndex.set(\n clamp(\n activePreviewItemIndex.get() - delta[0] / (MINIATURE_SIZE_MOBILE_COLLAPSED + MINIATURE_GAP_MOBILE),\n 0,\n items.length - 1\n )\n );\n globalContext.currentSlideIndex.set(Math.round(activePreviewItemIndex.get()));\n if (last) {\n animate(activePreviewItemIndex, globalContext.currentSlideIndex.get(), {\n duration: tokenSemanticAnimationTimeMDuration / 1000,\n ease: EASE_BASE,\n });\n animate(dragFactor, 0, { duration: tokenSemanticAnimationTimeMDuration / 1000, ease: EASE_BASE });\n }\n },\n { axis: 'x' }\n );\n\n return (\n <div className={styles.previewContainer}>\n {!noCounter && !isMobile && <Counter items={items} />}\n <div\n className={styles.preview}\n {...(isMobile ? bindMobileDrag() : {})}\n style={{ '--media-viewer-max-visible-items': MAX_VISIBLE_ITEMS_DESKTOP } as CSSProperties}\n aria-hidden={true}\n >\n <motion.div\n className={styles.previewPlaceholder}\n style={{ '--magritte-media-viewer-placeholder-size': visibleRange.startIndex } as MotionStyle}\n />\n <motion.div className={styles.previewList} style={{ x: isMobile ? mobileX : desktopX }}>\n <PreviewContext.Provider value={contextValue}>\n {items.map((item, index) => {\n const { previewSrc, src } = item.props;\n const thumbnailSrc = previewSrc ?? src;\n\n return <PreviewItem index={index} key={index} dragFactor={dragFactor} src={thumbnailSrc} />;\n })}\n </PreviewContext.Provider>\n </motion.div>\n <motion.div\n className={styles.previewPlaceholder}\n style={{ '--magritte-media-viewer-placeholder-size': rightPlaceholderWidth } as MotionStyle}\n />\n </div>\n {!isMobile && !noZoom && <PreviewZoomControl />}\n </div>\n );\n};\n\nPreview.displayName = 'Preview';\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Preview.js","sources":["src/public/Preview.tsx"],"sourcesContent":["import { type FC, type CSSProperties, useRef } from 'react';\nimport { useDrag } from '@use-gesture/react';\nimport { motion, animate, useMotionValueEvent, useMotionValue, MotionStyle, useTransform } from 'motion/react';\n\nimport CoreTokens from '@hh.ru/magritte-design-tokens/core-tokens';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { Counter } from '@hh.ru/magritte-ui-media-viewer/internal/Counter';\nimport { PreviewItem } from '@hh.ru/magritte-ui-media-viewer/internal/PreviewItem';\nimport { PreviewZoomControl } from '@hh.ru/magritte-ui-media-viewer/internal/PreviewZoomControl';\nimport { EASE_BASE } from '@hh.ru/magritte-ui-media-viewer/internal/animations';\nimport {\n useMediaViewerContext,\n PreviewContext,\n useGalleryItemsContext,\n} from '@hh.ru/magritte-ui-media-viewer/internal/context';\nimport { useVirtualization } from '@hh.ru/magritte-ui-media-viewer/internal/hooks/useVirtualization';\nimport { useInitOnce, clamp, useDetectDiscreteChange } from '@hh.ru/magritte-ui-media-viewer/internal/utils';\n\nimport styles from './media-viewer.less';\n\nexport interface PreviewProps {\n /** Отключить возможность зума из превью */\n noZoom?: boolean;\n /** Не показывать счётчик элементов */\n noCounter?: boolean;\n}\n\nconst MINIATURE_SIZE_MOBILE_COLLAPSED = 24;\nconst MINIATURE_SIZE_MOBILE_EXPANDED = 48;\nconst MINIATURE_GAP_MOBILE = 2;\nconst MINIATURE_SIZE_DESKTOP_COLLAPSED = 40;\nconst MINIATURE_SIZE_DESKTOP_EXPANDED = 80;\nconst MINIATURE_GAP_DESKTOP = 8;\nconst MAX_VISIBLE_ITEMS_DESKTOP = 10;\nconst MAX_CONTAINER_WIDTH_DESKTOP =\n (MAX_VISIBLE_ITEMS_DESKTOP - 1) * (MINIATURE_SIZE_DESKTOP_COLLAPSED + MINIATURE_GAP_DESKTOP) +\n MINIATURE_SIZE_DESKTOP_EXPANDED;\n\nconst VIRTUALIZATION_BATCH_SIZE = Math.ceil(\n 1024 /* s breakpoint */ / (MINIATURE_SIZE_MOBILE_COLLAPSED + MINIATURE_GAP_MOBILE)\n);\n\nexport const Preview: FC<PreviewProps> = ({ noZoom = false, noCounter = false }) => {\n const { isMobile } = useBreakpoint();\n const globalContext = useMediaViewerContext();\n const { items } = useGalleryItemsContext();\n const isDraggingRef = useRef(false);\n const activePreviewItemIndex = useMotionValue(globalContext.currentSlideIndex.get());\n const dragFactor = useMotionValue(0);\n const isDiscrete = useDetectDiscreteChange(activePreviewItemIndex);\n const desktopX = useMotionValue(0);\n const mobileX = useMotionValue(0);\n const visibleRange = useVirtualization(VIRTUALIZATION_BATCH_SIZE, globalContext.currentSlideIndex);\n const contextValue = useInitOnce(() => ({\n activeItemIndex: activePreviewItemIndex,\n visibleRange,\n }));\n\n useMotionValueEvent(globalContext.currentSlideIndex, 'change', (newIndex) => {\n !isDraggingRef.current && activePreviewItemIndex.set(newIndex);\n });\n\n const rightPlaceholderWidth = useTransform(visibleRange.endIndex, (endIndex) => {\n const itemsCount = items.length;\n return Math.max(0, itemsCount - endIndex);\n });\n\n const applyMobileShift = useInitOnce(() => {\n const calcMobileX = (index: number) =>\n -(index * (MINIATURE_SIZE_MOBILE_COLLAPSED + MINIATURE_GAP_MOBILE)) - MINIATURE_SIZE_MOBILE_EXPANDED / 2;\n\n const applyShift = () => {\n const newMobileX = calcMobileX(activePreviewItemIndex.get());\n if (isDiscrete() && !isDraggingRef.current) {\n animate(mobileX, newMobileX, {\n duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,\n ease: EASE_BASE,\n });\n } else {\n mobileX.set(newMobileX);\n }\n };\n\n applyShift();\n return applyShift;\n });\n\n const applyDesktopShift = useInitOnce(() => {\n const calcDesktopX = () => {\n const index = activePreviewItemIndex.get();\n const itemsCount = globalContext.totalSlides.get();\n\n const indexCenterPos =\n index * (MINIATURE_SIZE_DESKTOP_COLLAPSED + MINIATURE_GAP_DESKTOP) +\n MINIATURE_SIZE_DESKTOP_EXPANDED / 2;\n\n const containerCenterPos = MAX_CONTAINER_WIDTH_DESKTOP / 2;\n\n const itemsWidth =\n (itemsCount - 1) * (MINIATURE_SIZE_DESKTOP_COLLAPSED + MINIATURE_GAP_DESKTOP) +\n MINIATURE_SIZE_DESKTOP_EXPANDED;\n const translation = clamp(\n containerCenterPos - indexCenterPos,\n Math.min(MAX_CONTAINER_WIDTH_DESKTOP - itemsWidth, 0),\n 0\n );\n\n return translation;\n };\n\n const applyShift = () => {\n const newDesktopX = calcDesktopX();\n if (isDiscrete()) {\n animate(desktopX, newDesktopX, {\n duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,\n ease: EASE_BASE,\n });\n } else {\n desktopX.set(newDesktopX);\n }\n };\n\n return applyShift;\n });\n\n useMotionValueEvent(globalContext.currentSlideIndex, 'change', applyDesktopShift);\n useMotionValueEvent(activePreviewItemIndex, 'change', applyDesktopShift);\n useMotionValueEvent(activePreviewItemIndex, 'change', applyMobileShift);\n\n const bindMobileDrag = useDrag(\n ({ delta, active, last, first }) => {\n if (first) {\n animate(dragFactor, 1, {\n duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,\n ease: EASE_BASE,\n });\n }\n isDraggingRef.current = active;\n activePreviewItemIndex.set(\n clamp(\n activePreviewItemIndex.get() - delta[0] / (MINIATURE_SIZE_MOBILE_COLLAPSED + MINIATURE_GAP_MOBILE),\n 0,\n items.length - 1\n )\n );\n globalContext.currentSlideIndex.set(Math.round(activePreviewItemIndex.get()));\n if (last) {\n animate(activePreviewItemIndex, globalContext.currentSlideIndex.get(), {\n duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,\n ease: EASE_BASE,\n });\n animate(dragFactor, 0, {\n duration: CoreTokens['magritte-semantic-animation-time-m'].duration / 1000,\n ease: EASE_BASE,\n });\n }\n },\n { axis: 'x' }\n );\n\n return (\n <div className={styles.previewContainer}>\n {!noCounter && !isMobile && <Counter items={items} />}\n <div\n className={styles.preview}\n {...(isMobile ? bindMobileDrag() : {})}\n style={{ '--media-viewer-max-visible-items': MAX_VISIBLE_ITEMS_DESKTOP } as CSSProperties}\n aria-hidden={true}\n >\n <motion.div\n className={styles.previewPlaceholder}\n style={{ '--magritte-media-viewer-placeholder-size': visibleRange.startIndex } as MotionStyle}\n />\n <motion.div className={styles.previewList} style={{ x: isMobile ? mobileX : desktopX }}>\n <PreviewContext.Provider value={contextValue}>\n {items.map((item, index) => {\n const { previewSrc, src } = item.props;\n const thumbnailSrc = previewSrc ?? src;\n\n return <PreviewItem index={index} key={index} dragFactor={dragFactor} src={thumbnailSrc} />;\n })}\n </PreviewContext.Provider>\n </motion.div>\n <motion.div\n className={styles.previewPlaceholder}\n style={{ '--magritte-media-viewer-placeholder-size': rightPlaceholderWidth } as MotionStyle}\n />\n </div>\n {!isMobile && !noZoom && <PreviewZoomControl />}\n </div>\n );\n};\n\nPreview.displayName = 'Preview';\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
package/public/Toolbar.js
CHANGED
|
@@ -4,7 +4,7 @@ import classNames from 'classnames';
|
|
|
4
4
|
import { IconDefaultPropsContext } from '@hh.ru/magritte-ui-icon';
|
|
5
5
|
import { Counter } from '../internal/Counter.js';
|
|
6
6
|
import { useGalleryItemsContext } from '../internal/context.js';
|
|
7
|
-
import { s as styles } from '../media-viewer-
|
|
7
|
+
import { s as styles } from '../media-viewer-CFODj3fP.js';
|
|
8
8
|
import 'react';
|
|
9
9
|
import 'motion/react';
|
|
10
10
|
import '@hh.ru/magritte-common-use-translation';
|
|
@@ -13,7 +13,7 @@ import '@hh.ru/magritte-ui-tooltip';
|
|
|
13
13
|
import '@hh.ru/magritte-ui-typography';
|
|
14
14
|
import '../internal/ImagesLoader.js';
|
|
15
15
|
import '../internal/utils.js';
|
|
16
|
-
import '@hh.ru/magritte-design-tokens/
|
|
16
|
+
import '@hh.ru/magritte-design-tokens/core-tokens';
|
|
17
17
|
import '../internal/animations.js';
|
|
18
18
|
|
|
19
19
|
const ICON_DEFAULT_PROPS = {
|
package/public/Tools.js
CHANGED
|
@@ -6,7 +6,7 @@ import 'react';
|
|
|
6
6
|
import 'motion/react';
|
|
7
7
|
import '../internal/ImagesLoader.js';
|
|
8
8
|
import '../internal/utils.js';
|
|
9
|
-
import '@hh.ru/magritte-design-tokens/
|
|
9
|
+
import '@hh.ru/magritte-design-tokens/core-tokens';
|
|
10
10
|
import '../internal/animations.js';
|
|
11
11
|
|
|
12
12
|
const MobileTool = ({ children }) => {
|
package/media-viewer-Cc0v73D3.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import './index.css';
|
|
2
|
-
var styles = {"media-viewer":"magritte-media-viewer___KnrXP_1-3-11","mediaViewer":"magritte-media-viewer___KnrXP_1-3-11","gallery-placeholder":"magritte-gallery-placeholder___rUoGL_1-3-11","galleryPlaceholder":"magritte-gallery-placeholder___rUoGL_1-3-11","media-viewer-gallery":"magritte-media-viewer-gallery___P0SnN_1-3-11","mediaViewerGallery":"magritte-media-viewer-gallery___P0SnN_1-3-11","gallery-item":"magritte-gallery-item___Js0Z5_1-3-11","galleryItem":"magritte-gallery-item___Js0Z5_1-3-11","gallery-item-transform-container":"magritte-gallery-item-transform-container___N8-sA_1-3-11","galleryItemTransformContainer":"magritte-gallery-item-transform-container___N8-sA_1-3-11","preview-counter":"magritte-preview-counter___uP2Hc_1-3-11","previewCounter":"magritte-preview-counter___uP2Hc_1-3-11","with-description":"magritte-with-description___-w7ld_1-3-11","withDescription":"magritte-with-description___-w7ld_1-3-11","counter-number":"magritte-counter-number___gUpMp_1-3-11","counterNumber":"magritte-counter-number___gUpMp_1-3-11","no-description-placeholder":"magritte-no-description-placeholder___qc6h2_1-3-11","noDescriptionPlaceholder":"magritte-no-description-placeholder___qc6h2_1-3-11","preview-zoom-control":"magritte-preview-zoom-control___026jA_1-3-11","previewZoomControl":"magritte-preview-zoom-control___026jA_1-3-11","preview-container":"magritte-preview-container___nwjNY_1-3-11","previewContainer":"magritte-preview-container___nwjNY_1-3-11","preview":"magritte-preview___0Ge4C_1-3-11","preview-list":"magritte-preview-list___SAXLZ_1-3-11","previewList":"magritte-preview-list___SAXLZ_1-3-11","preview-item":"magritte-preview-item___gz5f2_1-3-11","previewItem":"magritte-preview-item___gz5f2_1-3-11","preview-item-container":"magritte-preview-item-container___JDVsk_1-3-11","previewItemContainer":"magritte-preview-item-container___JDVsk_1-3-11","media-viewer-toolbar":"magritte-media-viewer-toolbar___2C8nr_1-3-11","mediaViewerToolbar":"magritte-media-viewer-toolbar___2C8nr_1-3-11","no-description":"magritte-no-description___NebrT_1-3-11","noDescription":"magritte-no-description___NebrT_1-3-11","media-viewer-toolbar-left":"magritte-media-viewer-toolbar-left___YzkJt_1-3-11","mediaViewerToolbarLeft":"magritte-media-viewer-toolbar-left___YzkJt_1-3-11","media-viewer-toolbar-right":"magritte-media-viewer-toolbar-right___kBER9_1-3-11","mediaViewerToolbarRight":"magritte-media-viewer-toolbar-right___kBER9_1-3-11","prev-button":"magritte-prev-button___WMYjR_1-3-11","prevButton":"magritte-prev-button___WMYjR_1-3-11","next-button":"magritte-next-button___f8hJT_1-3-11","nextButton":"magritte-next-button___f8hJT_1-3-11","slide-button":"magritte-slide-button___sY8LB_1-3-11","slideButton":"magritte-slide-button___sY8LB_1-3-11","preview-placeholder":"magritte-preview-placeholder___yuhW1_1-3-11","previewPlaceholder":"magritte-preview-placeholder___yuhW1_1-3-11","gallery-item-loader":"magritte-gallery-item-loader___70TDe_1-3-11","galleryItemLoader":"magritte-gallery-item-loader___70TDe_1-3-11","gallery-item-error-container":"magritte-gallery-item-error-container___Z-HyZ_1-3-11","galleryItemErrorContainer":"magritte-gallery-item-error-container___Z-HyZ_1-3-11","description-bottom-sheet-content":"magritte-description-bottom-sheet-content___swnEV_1-3-11","descriptionBottomSheetContent":"magritte-description-bottom-sheet-content___swnEV_1-3-11","header":"magritte-header___egZXt_1-3-11","footer":"magritte-footer___rOH-M_1-3-11","description":"magritte-description___dYc-E_1-3-11"};
|
|
3
|
-
|
|
4
|
-
export { styles as s };
|
|
5
|
-
//# sourceMappingURL=media-viewer-Cc0v73D3.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"media-viewer-Cc0v73D3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|