@vkontakte/vkui 6.2.0 → 6.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/dist/cjs/components/Avatar/Avatar.d.ts +1 -4
  2. package/dist/cjs/components/Avatar/Avatar.d.ts.map +1 -1
  3. package/dist/cjs/components/Checkbox/Checkbox.d.ts.map +1 -1
  4. package/dist/cjs/components/Checkbox/Checkbox.js +10 -8
  5. package/dist/cjs/components/Checkbox/Checkbox.js.map +1 -1
  6. package/dist/cjs/components/ChipsInputBase/ChipsInputBase.d.ts.map +1 -1
  7. package/dist/cjs/components/ChipsInputBase/ChipsInputBase.js +3 -5
  8. package/dist/cjs/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  9. package/dist/cjs/components/ChipsInputBase/constants.js +2 -3
  10. package/dist/cjs/components/ChipsInputBase/constants.js.map +1 -1
  11. package/dist/cjs/components/CustomSelect/CustomSelect.js +4 -5
  12. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  13. package/dist/cjs/components/FocusTrap/FocusTrap.d.ts.map +1 -1
  14. package/dist/cjs/components/FocusTrap/FocusTrap.js +10 -1
  15. package/dist/cjs/components/FocusTrap/FocusTrap.js.map +1 -1
  16. package/dist/cjs/components/GridAvatar/GridAvatar.js +1 -1
  17. package/dist/cjs/components/GridAvatar/GridAvatar.js.map +1 -1
  18. package/dist/cjs/components/Image/Image.d.ts +2 -4
  19. package/dist/cjs/components/Image/Image.d.ts.map +1 -1
  20. package/dist/cjs/components/ImageBase/ImageBase.d.ts +1 -4
  21. package/dist/cjs/components/ImageBase/ImageBase.d.ts.map +1 -1
  22. package/dist/cjs/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts +4 -38
  23. package/dist/cjs/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts.map +1 -1
  24. package/dist/cjs/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js +60 -19
  25. package/dist/cjs/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js.map +1 -1
  26. package/dist/cjs/components/ImageBase/ImageBaseOverlay/hooks.d.ts +6 -0
  27. package/dist/cjs/components/ImageBase/ImageBaseOverlay/hooks.d.ts.map +1 -0
  28. package/dist/cjs/components/ImageBase/ImageBaseOverlay/hooks.js +37 -0
  29. package/dist/cjs/components/ImageBase/ImageBaseOverlay/hooks.js.map +1 -0
  30. package/dist/cjs/components/ImageBase/ImageBaseOverlay/types.d.ts +54 -0
  31. package/dist/cjs/components/ImageBase/ImageBaseOverlay/types.d.ts.map +1 -0
  32. package/dist/cjs/components/ImageBase/ImageBaseOverlay/types.js +8 -0
  33. package/dist/cjs/components/ImageBase/ImageBaseOverlay/types.js.map +1 -0
  34. package/dist/cjs/components/PanelHeaderContext/PanelHeaderContext.d.ts.map +1 -1
  35. package/dist/cjs/components/PanelHeaderContext/PanelHeaderContext.js +1 -1
  36. package/dist/cjs/components/PanelHeaderContext/PanelHeaderContext.js.map +1 -1
  37. package/dist/cjs/components/Popover/Popover.d.ts +2 -2
  38. package/dist/cjs/components/Popover/Popover.d.ts.map +1 -1
  39. package/dist/cjs/components/Popover/Popover.js +4 -2
  40. package/dist/cjs/components/Popover/Popover.js.map +1 -1
  41. package/dist/cjs/components/Snackbar/Snackbar.d.ts +6 -0
  42. package/dist/cjs/components/Snackbar/Snackbar.d.ts.map +1 -1
  43. package/dist/cjs/components/Snackbar/Snackbar.js +3 -1
  44. package/dist/cjs/components/Snackbar/Snackbar.js.map +1 -1
  45. package/dist/cjs/components/Snackbar/types.d.ts +1 -0
  46. package/dist/cjs/components/Snackbar/types.d.ts.map +1 -1
  47. package/dist/cjs/components/Snackbar/utils.d.ts +4 -8
  48. package/dist/cjs/components/Snackbar/utils.d.ts.map +1 -1
  49. package/dist/cjs/components/Snackbar/utils.js +31 -41
  50. package/dist/cjs/components/Snackbar/utils.js.map +1 -1
  51. package/dist/cjs/helpers/array.d.ts +5 -0
  52. package/dist/cjs/helpers/array.d.ts.map +1 -0
  53. package/dist/cjs/helpers/array.js +20 -0
  54. package/dist/cjs/helpers/array.js.map +1 -0
  55. package/dist/cjs/hooks/useEnsuredControl.js +1 -1
  56. package/dist/cjs/hooks/useEnsuredControl.js.map +1 -1
  57. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  58. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +9 -5
  59. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  60. package/dist/cjs/lib/tokens/TokensClassProvider.d.ts.map +1 -1
  61. package/dist/cjs/lib/tokens/TokensClassProvider.js +1 -1
  62. package/dist/cjs/lib/tokens/TokensClassProvider.js.map +1 -1
  63. package/dist/components/Avatar/Avatar.d.ts +1 -4
  64. package/dist/components/Avatar/Avatar.d.ts.map +1 -1
  65. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
  66. package/dist/components/Checkbox/Checkbox.js +10 -8
  67. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  68. package/dist/components/ChipsInputBase/ChipsInputBase.d.ts.map +1 -1
  69. package/dist/components/ChipsInputBase/ChipsInputBase.js +3 -5
  70. package/dist/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  71. package/dist/components/ChipsInputBase/constants.js +2 -3
  72. package/dist/components/ChipsInputBase/constants.js.map +1 -1
  73. package/dist/components/CustomSelect/CustomSelect.js +4 -5
  74. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  75. package/dist/components/FocusTrap/FocusTrap.d.ts.map +1 -1
  76. package/dist/components/FocusTrap/FocusTrap.js +10 -1
  77. package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
  78. package/dist/components/GridAvatar/GridAvatar.js +1 -1
  79. package/dist/components/GridAvatar/GridAvatar.js.map +1 -1
  80. package/dist/components/Image/Image.d.ts +2 -4
  81. package/dist/components/Image/Image.d.ts.map +1 -1
  82. package/dist/components/ImageBase/ImageBase.d.ts +1 -4
  83. package/dist/components/ImageBase/ImageBase.d.ts.map +1 -1
  84. package/dist/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts +4 -38
  85. package/dist/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts.map +1 -1
  86. package/dist/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js +64 -23
  87. package/dist/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js.map +1 -1
  88. package/dist/components/ImageBase/ImageBaseOverlay/hooks.d.ts +6 -0
  89. package/dist/components/ImageBase/ImageBaseOverlay/hooks.d.ts.map +1 -0
  90. package/dist/components/ImageBase/ImageBaseOverlay/hooks.js +26 -0
  91. package/dist/components/ImageBase/ImageBaseOverlay/hooks.js.map +1 -0
  92. package/dist/components/ImageBase/ImageBaseOverlay/types.d.ts +54 -0
  93. package/dist/components/ImageBase/ImageBaseOverlay/types.d.ts.map +1 -0
  94. package/dist/components/ImageBase/ImageBaseOverlay/types.js +3 -0
  95. package/dist/components/ImageBase/ImageBaseOverlay/types.js.map +1 -0
  96. package/dist/components/PanelHeaderContext/PanelHeaderContext.d.ts.map +1 -1
  97. package/dist/components/PanelHeaderContext/PanelHeaderContext.js +1 -1
  98. package/dist/components/PanelHeaderContext/PanelHeaderContext.js.map +1 -1
  99. package/dist/components/Popover/Popover.d.ts +2 -2
  100. package/dist/components/Popover/Popover.d.ts.map +1 -1
  101. package/dist/components/Popover/Popover.js +4 -2
  102. package/dist/components/Popover/Popover.js.map +1 -1
  103. package/dist/components/Snackbar/Snackbar.d.ts +6 -0
  104. package/dist/components/Snackbar/Snackbar.d.ts.map +1 -1
  105. package/dist/components/Snackbar/Snackbar.js +3 -1
  106. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  107. package/dist/components/Snackbar/types.d.ts +1 -0
  108. package/dist/components/Snackbar/types.d.ts.map +1 -1
  109. package/dist/components/Snackbar/types.js.map +1 -1
  110. package/dist/components/Snackbar/utils.d.ts +4 -8
  111. package/dist/components/Snackbar/utils.d.ts.map +1 -1
  112. package/dist/components/Snackbar/utils.js +30 -41
  113. package/dist/components/Snackbar/utils.js.map +1 -1
  114. package/dist/components.css +3 -3
  115. package/dist/components.css.map +1 -1
  116. package/dist/components.js.tmp +336 -192
  117. package/dist/cssm/components/Avatar/Avatar.d.ts +1 -4
  118. package/dist/cssm/components/Avatar/Avatar.d.ts.map +1 -1
  119. package/dist/cssm/components/Checkbox/Checkbox.d.ts.map +1 -1
  120. package/dist/cssm/components/Checkbox/Checkbox.js +10 -8
  121. package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
  122. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.d.ts.map +1 -1
  123. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js +3 -5
  124. package/dist/cssm/components/ChipsInputBase/ChipsInputBase.js.map +1 -1
  125. package/dist/cssm/components/ChipsInputBase/constants.js +2 -2
  126. package/dist/cssm/components/ChipsInputBase/constants.js.map +1 -1
  127. package/dist/cssm/components/CustomScrollView/CustomScrollView.module.css +2 -0
  128. package/dist/cssm/components/CustomSelect/CustomSelect.js +4 -4
  129. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  130. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.module.css +1 -0
  131. package/dist/cssm/components/FocusTrap/FocusTrap.d.ts.map +1 -1
  132. package/dist/cssm/components/FocusTrap/FocusTrap.js +10 -1
  133. package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
  134. package/dist/cssm/components/GridAvatar/GridAvatar.js +1 -1
  135. package/dist/cssm/components/GridAvatar/GridAvatar.js.map +1 -1
  136. package/dist/cssm/components/Image/Image.d.ts +2 -4
  137. package/dist/cssm/components/Image/Image.d.ts.map +1 -1
  138. package/dist/cssm/components/ImageBase/ImageBase.d.ts +1 -4
  139. package/dist/cssm/components/ImageBase/ImageBase.d.ts.map +1 -1
  140. package/dist/cssm/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts +4 -38
  141. package/dist/cssm/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.d.ts.map +1 -1
  142. package/dist/cssm/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js +54 -18
  143. package/dist/cssm/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.js.map +1 -1
  144. package/dist/cssm/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.module.css +10 -0
  145. package/dist/cssm/components/ImageBase/ImageBaseOverlay/hooks.d.ts +6 -0
  146. package/dist/cssm/components/ImageBase/ImageBaseOverlay/hooks.d.ts.map +1 -0
  147. package/dist/cssm/components/ImageBase/ImageBaseOverlay/hooks.js +26 -0
  148. package/dist/cssm/components/ImageBase/ImageBaseOverlay/hooks.js.map +1 -0
  149. package/dist/cssm/components/ImageBase/ImageBaseOverlay/types.d.ts +54 -0
  150. package/dist/cssm/components/ImageBase/ImageBaseOverlay/types.d.ts.map +1 -0
  151. package/dist/cssm/components/ImageBase/ImageBaseOverlay/types.js +3 -0
  152. package/dist/cssm/components/ImageBase/ImageBaseOverlay/types.js.map +1 -0
  153. package/dist/cssm/components/ModalDismissButton/ModalDismissButton.module.css +5 -6
  154. package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.d.ts.map +1 -1
  155. package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.js +1 -1
  156. package/dist/cssm/components/PanelHeaderContext/PanelHeaderContext.js.map +1 -1
  157. package/dist/cssm/components/Popover/Popover.d.ts +2 -2
  158. package/dist/cssm/components/Popover/Popover.d.ts.map +1 -1
  159. package/dist/cssm/components/Popover/Popover.js +3 -2
  160. package/dist/cssm/components/Popover/Popover.js.map +1 -1
  161. package/dist/cssm/components/Search/Search.module.css +4 -5
  162. package/dist/cssm/components/Snackbar/Snackbar.d.ts +6 -0
  163. package/dist/cssm/components/Snackbar/Snackbar.d.ts.map +1 -1
  164. package/dist/cssm/components/Snackbar/Snackbar.js +3 -1
  165. package/dist/cssm/components/Snackbar/Snackbar.js.map +1 -1
  166. package/dist/cssm/components/Snackbar/Snackbar.module.css +47 -33
  167. package/dist/cssm/components/Snackbar/types.d.ts +1 -0
  168. package/dist/cssm/components/Snackbar/types.d.ts.map +1 -1
  169. package/dist/cssm/components/Snackbar/types.js.map +1 -1
  170. package/dist/cssm/components/Snackbar/utils.d.ts +4 -8
  171. package/dist/cssm/components/Snackbar/utils.d.ts.map +1 -1
  172. package/dist/cssm/components/Snackbar/utils.js +30 -41
  173. package/dist/cssm/components/Snackbar/utils.js.map +1 -1
  174. package/dist/cssm/helpers/array.d.ts +5 -0
  175. package/dist/cssm/helpers/array.d.ts.map +1 -0
  176. package/dist/cssm/helpers/array.js +10 -0
  177. package/dist/cssm/helpers/array.js.map +1 -0
  178. package/dist/cssm/hooks/useEnsuredControl.js +1 -1
  179. package/dist/cssm/hooks/useEnsuredControl.js.map +1 -1
  180. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  181. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +9 -5
  182. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  183. package/dist/cssm/lib/tokens/TokensClassProvider.d.ts.map +1 -1
  184. package/dist/cssm/lib/tokens/TokensClassProvider.js +2 -1
  185. package/dist/cssm/lib/tokens/TokensClassProvider.js.map +1 -1
  186. package/dist/cssm/lib/tokens/TokensClassProvider.module.css +4 -0
  187. package/dist/helpers/array.d.ts +5 -0
  188. package/dist/helpers/array.d.ts.map +1 -0
  189. package/dist/helpers/array.js +10 -0
  190. package/dist/helpers/array.js.map +1 -0
  191. package/dist/hooks/useEnsuredControl.js +1 -1
  192. package/dist/hooks/useEnsuredControl.js.map +1 -1
  193. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  194. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +9 -5
  195. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  196. package/dist/lib/tokens/TokensClassProvider.d.ts.map +1 -1
  197. package/dist/lib/tokens/TokensClassProvider.js +1 -1
  198. package/dist/lib/tokens/TokensClassProvider.js.map +1 -1
  199. package/dist/vkui.css +3 -3
  200. package/dist/vkui.css.map +1 -1
  201. package/dist/vkui.js.tmp +336 -192
  202. package/package.json +1 -1
  203. package/src/components/Checkbox/Checkbox.tsx +11 -8
  204. package/src/components/ChipsInputBase/ChipsInputBase.tsx +3 -5
  205. package/src/components/ChipsInputBase/constants.tsx +2 -2
  206. package/src/components/CustomScrollView/CustomScrollView.module.css +2 -0
  207. package/src/components/CustomSelect/CustomSelect.tsx +7 -7
  208. package/src/components/CustomSelectOption/CustomSelectOption.module.css +1 -0
  209. package/src/components/FocusTrap/FocusTrap.tsx +10 -1
  210. package/src/components/GridAvatar/GridAvatar.tsx +1 -1
  211. package/src/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.module.css +10 -0
  212. package/src/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.tsx +89 -65
  213. package/src/components/ImageBase/ImageBaseOverlay/hooks.ts +26 -0
  214. package/src/components/ImageBase/ImageBaseOverlay/types.ts +58 -0
  215. package/src/components/ModalDismissButton/ModalDismissButton.module.css +5 -6
  216. package/src/components/PanelHeaderContext/PanelHeaderContext.tsx +2 -0
  217. package/src/components/Popover/Popover.tsx +3 -0
  218. package/src/components/Search/Search.module.css +4 -5
  219. package/src/components/Snackbar/Snackbar.module.css +47 -33
  220. package/src/components/Snackbar/Snackbar.tsx +9 -0
  221. package/src/components/Snackbar/types.ts +8 -1
  222. package/src/components/Snackbar/utils.ts +46 -42
  223. package/src/helpers/array.ts +9 -0
  224. package/src/hooks/useEnsuredControl.ts +1 -1
  225. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +18 -10
  226. package/src/lib/tokens/TokensClassProvider.module.css +4 -0
  227. package/src/lib/tokens/TokensClassProvider.tsx +6 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/FocusTrap/FocusTrap.tsx"],"sourcesContent":["import { AllHTMLAttributes, useCallback, useRef, useState } from 'react';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { FOCUSABLE_ELEMENTS_LIST, Keys, pressedKey } from '../../lib/accessibility';\nimport {\n contains,\n getActiveElementByAnotherElement,\n getWindow,\n isHTMLElement,\n useDOM,\n} from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { HasComponent, HasRootRef } from '../../types';\n\nconst FOCUSABLE_ELEMENTS: string = FOCUSABLE_ELEMENTS_LIST.join();\nexport interface FocusTrapProps<T extends HTMLElement = HTMLElement>\n extends AllHTMLAttributes<T>,\n HasRootRef<T>,\n HasComponent {\n autoFocus?: boolean;\n restoreFocus?: boolean | (() => boolean);\n mount?: boolean;\n timeout?: number;\n onClose?: () => void;\n /**\n * Форсированное отключение захвата фокуса\n */\n disabled?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/FocusTrap\n */\nexport const FocusTrap = <T extends HTMLElement = HTMLElement>({\n Component = 'div',\n onClose,\n autoFocus = true,\n restoreFocus = true,\n disabled = false,\n mount = true,\n timeout = 0,\n getRootRef,\n children,\n ...restProps\n}: FocusTrapProps<T>) => {\n const ref = useExternRef<T>(getRootRef);\n const { document } = useDOM();\n\n const focusableNodesRef = useRef<HTMLElement[]>([]);\n\n const [restoreFocusTo, setRestoreFocusTo] = useState<Element | null>(null);\n\n const focusNodeByIndex = (nodeIndex: number) => {\n const element = focusableNodesRef.current[nodeIndex];\n\n if (element) {\n element.focus();\n }\n };\n\n const recalculateFocusableNodesRef = (parentNode: HTMLElement) => {\n // eslint-disable-next-line no-restricted-properties\n const newFocusableElements = parentNode.querySelectorAll<HTMLElement>(FOCUSABLE_ELEMENTS);\n\n const nodes: HTMLElement[] = [];\n newFocusableElements.forEach((focusableEl) => {\n const { display, visibility } = getComputedStyle(focusableEl);\n if (display !== 'none' && visibility !== 'hidden') {\n nodes.push(focusableEl);\n }\n });\n\n if (nodes.length === 0) {\n // Чтобы фокус был хотя бы на родителе\n nodes.push(parentNode);\n }\n focusableNodesRef.current = nodes;\n };\n\n const onMutateParentHandler = (parentNode: HTMLElement) => {\n recalculateFocusableNodesRef(parentNode);\n\n if (document) {\n const activeElement = document.activeElement as HTMLElement;\n const currentElementIndex = Math.max(\n document.activeElement ? focusableNodesRef.current.indexOf(activeElement) : -1,\n 0,\n );\n focusNodeByIndex(currentElementIndex);\n }\n };\n\n useIsomorphicLayoutEffect(\n function collectFocusableNodesRef() {\n if (!ref.current) {\n return;\n }\n const parentNode = ref.current;\n const observer = new MutationObserver(() => onMutateParentHandler(parentNode));\n observer.observe(ref.current, {\n subtree: true,\n childList: true,\n });\n recalculateFocusableNodesRef(parentNode);\n return () => observer.disconnect();\n },\n [ref],\n );\n\n useIsomorphicLayoutEffect(\n function tryToAutoFocusToFirstNode() {\n if (!ref.current || !autoFocus || disabled) {\n return;\n }\n\n const autoFocusToFirstNode = () => {\n if (!ref.current || !focusableNodesRef.current.length) {\n return;\n }\n const activeElement = getActiveElementByAnotherElement(ref.current);\n if (!contains(ref.current, activeElement)) {\n focusableNodesRef.current[0].focus();\n }\n };\n const timeoutId = setTimeout(autoFocusToFirstNode, timeout);\n return () => {\n clearTimeout(timeoutId);\n };\n },\n [autoFocus, timeout, disabled],\n );\n\n const restoreFocusImpl = useCallback(() => {\n const shouldRestoreFocus = typeof restoreFocus === 'function' ? restoreFocus() : restoreFocus;\n\n if (!restoreFocusTo || !isHTMLElement(restoreFocusTo) || !shouldRestoreFocus) {\n return;\n }\n\n setTimeout(() => {\n if (restoreFocusTo) {\n restoreFocusTo.focus();\n setRestoreFocusTo(null);\n }\n }, timeout);\n }, [restoreFocus, restoreFocusTo, timeout]);\n\n useIsomorphicLayoutEffect(\n function calculateRestoreFocusTo() {\n if (!ref.current || !restoreFocus || !mount) {\n setRestoreFocusTo(null);\n return;\n }\n setRestoreFocusTo(getActiveElementByAnotherElement(ref.current));\n },\n [ref, mount, restoreFocus],\n );\n\n useIsomorphicLayoutEffect(\n function tryToRestoreFocusOnUnmount() {\n return () => restoreFocusImpl();\n },\n [restoreFocusImpl],\n );\n\n useIsomorphicLayoutEffect(\n function tryToRestoreFocusWhenFakeUnmount() {\n if (!mount) {\n restoreFocusImpl();\n }\n },\n [mount, restoreFocusImpl],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (!ref.current) {\n return;\n }\n\n const onDocumentKeydown = (event: KeyboardEvent) => {\n if (disabled) {\n return;\n }\n\n const pressedKeyResult = pressedKey(event);\n\n switch (pressedKeyResult) {\n case Keys.TAB: {\n if (!focusableNodesRef.current.length) {\n return false;\n }\n\n const lastIdx = focusableNodesRef.current.length - 1;\n const targetIdx = focusableNodesRef.current.findIndex((node) => node === event.target);\n\n const shouldFocusFirstNode =\n targetIdx === -1 || (targetIdx === lastIdx && !event.shiftKey);\n\n if (shouldFocusFirstNode || (targetIdx === 0 && event.shiftKey)) {\n event.preventDefault();\n\n const node = focusableNodesRef.current[shouldFocusFirstNode ? 0 : lastIdx];\n\n if (node !== getActiveElementByAnotherElement(node)) {\n node.focus();\n }\n\n return false;\n }\n\n break;\n }\n case Keys.ESCAPE: {\n if (onClose) {\n event.preventDefault();\n onClose();\n }\n }\n }\n\n return true;\n };\n\n const doc = getWindow(ref.current).document;\n doc.addEventListener('keydown', onDocumentKeydown, {\n capture: true,\n });\n return () => {\n doc.removeEventListener('keydown', onDocumentKeydown, true);\n };\n }, [onClose, ref, disabled]);\n\n return (\n <Component tabIndex={-1} ref={ref} {...restProps}>\n {children}\n </Component>\n );\n};\n"],"names":["FocusTrap","FOCUSABLE_ELEMENTS","FOCUSABLE_ELEMENTS_LIST","join","Component","onClose","autoFocus","restoreFocus","disabled","mount","timeout","getRootRef","children","restProps","ref","useExternRef","document","useDOM","focusableNodesRef","useRef","restoreFocusTo","setRestoreFocusTo","useState","focusNodeByIndex","nodeIndex","element","current","focus","recalculateFocusableNodesRef","parentNode","newFocusableElements","querySelectorAll","nodes","forEach","focusableEl","display","visibility","getComputedStyle","push","length","onMutateParentHandler","activeElement","currentElementIndex","Math","max","indexOf","useIsomorphicLayoutEffect","collectFocusableNodesRef","observer","MutationObserver","observe","subtree","childList","disconnect","tryToAutoFocusToFirstNode","autoFocusToFirstNode","getActiveElementByAnotherElement","contains","timeoutId","setTimeout","clearTimeout","restoreFocusImpl","useCallback","shouldRestoreFocus","isHTMLElement","calculateRestoreFocusTo","tryToRestoreFocusOnUnmount","tryToRestoreFocusWhenFakeUnmount","onDocumentKeydown","event","pressedKeyResult","pressedKey","Keys","TAB","lastIdx","targetIdx","findIndex","node","target","shouldFocusFirstNode","shiftKey","preventDefault","ESCAPE","doc","getWindow","addEventListener","capture","removeEventListener","tabIndex"],"mappings":";;;;+BAgCaA;;;eAAAA;;;;;;;uBAhCoD;8BACpC;+BAC6B;qBAOnD;2CACmC;AAG1C,MAAMC,qBAA6BC,sCAAuB,CAACC,IAAI;AAmBxD,MAAMH,YAAY;QAAsC,EAC7DI,YAAY,KAAK,EACjBC,OAAO,EACPC,YAAY,IAAI,EAChBC,eAAe,IAAI,EACnBC,WAAW,KAAK,EAChBC,QAAQ,IAAI,EACZC,UAAU,CAAC,EACXC,UAAU,EACVC,QAAQ,EAEU,WADfC;QATHT;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,MAAMC,IAAAA,0BAAY,EAAIJ;IAC5B,MAAM,EAAEK,QAAQ,EAAE,GAAGC,IAAAA,WAAM;IAE3B,MAAMC,oBAAoBC,IAAAA,aAAM,EAAgB,EAAE;IAElD,MAAM,CAACC,gBAAgBC,kBAAkB,GAAGC,IAAAA,eAAQ,EAAiB;IAErE,MAAMC,mBAAmB,CAACC;QACxB,MAAMC,UAAUP,kBAAkBQ,OAAO,CAACF,UAAU;QAEpD,IAAIC,SAAS;YACXA,QAAQE,KAAK;QACf;IACF;IAEA,MAAMC,+BAA+B,CAACC;QACpC,oDAAoD;QACpD,MAAMC,uBAAuBD,WAAWE,gBAAgB,CAAc9B;QAEtE,MAAM+B,QAAuB,EAAE;QAC/BF,qBAAqBG,OAAO,CAAC,CAACC;YAC5B,MAAM,EAAEC,OAAO,EAAEC,UAAU,EAAE,GAAGC,iBAAiBH;YACjD,IAAIC,YAAY,UAAUC,eAAe,UAAU;gBACjDJ,MAAMM,IAAI,CAACJ;YACb;QACF;QAEA,IAAIF,MAAMO,MAAM,KAAK,GAAG;YACtB,sCAAsC;YACtCP,MAAMM,IAAI,CAACT;QACb;QACAX,kBAAkBQ,OAAO,GAAGM;IAC9B;IAEA,MAAMQ,wBAAwB,CAACX;QAC7BD,6BAA6BC;QAE7B,IAAIb,UAAU;YACZ,MAAMyB,gBAAgBzB,SAASyB,aAAa;YAC5C,MAAMC,sBAAsBC,KAAKC,GAAG,CAClC5B,SAASyB,aAAa,GAAGvB,kBAAkBQ,OAAO,CAACmB,OAAO,CAACJ,iBAAiB,CAAC,GAC7E;YAEFlB,iBAAiBmB;QACnB;IACF;IAEAI,IAAAA,oDAAyB,EACvB,SAASC;QACP,IAAI,CAACjC,IAAIY,OAAO,EAAE;YAChB;QACF;QACA,MAAMG,aAAaf,IAAIY,OAAO;QAC9B,MAAMsB,WAAW,IAAIC,iBAAiB,IAAMT,sBAAsBX;QAClEmB,SAASE,OAAO,CAACpC,IAAIY,OAAO,EAAE;YAC5ByB,SAAS;YACTC,WAAW;QACb;QACAxB,6BAA6BC;QAC7B,OAAO,IAAMmB,SAASK,UAAU;IAClC,GACA;QAACvC;KAAI;IAGPgC,IAAAA,oDAAyB,EACvB,SAASQ;QACP,IAAI,CAACxC,IAAIY,OAAO,IAAI,CAACpB,aAAaE,UAAU;YAC1C;QACF;QAEA,MAAM+C,uBAAuB;YAC3B,IAAI,CAACzC,IAAIY,OAAO,IAAI,CAACR,kBAAkBQ,OAAO,CAACa,MAAM,EAAE;gBACrD;YACF;YACA,MAAME,gBAAgBe,IAAAA,qCAAgC,EAAC1C,IAAIY,OAAO;YAClE,IAAI,CAAC+B,IAAAA,aAAQ,EAAC3C,IAAIY,OAAO,EAAEe,gBAAgB;gBACzCvB,kBAAkBQ,OAAO,CAAC,EAAE,CAACC,KAAK;YACpC;QACF;QACA,MAAM+B,YAAYC,WAAWJ,sBAAsB7C;QACnD,OAAO;YACLkD,aAAaF;QACf;IACF,GACA;QAACpD;QAAWI;QAASF;KAAS;IAGhC,MAAMqD,mBAAmBC,IAAAA,kBAAW,EAAC;QACnC,MAAMC,qBAAqB,OAAOxD,iBAAiB,aAAaA,iBAAiBA;QAEjF,IAAI,CAACa,kBAAkB,CAAC4C,IAAAA,kBAAa,EAAC5C,mBAAmB,CAAC2C,oBAAoB;YAC5E;QACF;QAEAJ,WAAW;YACT,IAAIvC,gBAAgB;gBAClBA,eAAeO,KAAK;gBACpBN,kBAAkB;YACpB;QACF,GAAGX;IACL,GAAG;QAACH;QAAca;QAAgBV;KAAQ;IAE1CoC,IAAAA,oDAAyB,EACvB,SAASmB;QACP,IAAI,CAACnD,IAAIY,OAAO,IAAI,CAACnB,gBAAgB,CAACE,OAAO;YAC3CY,kBAAkB;YAClB;QACF;QACAA,kBAAkBmC,IAAAA,qCAAgC,EAAC1C,IAAIY,OAAO;IAChE,GACA;QAACZ;QAAKL;QAAOF;KAAa;IAG5BuC,IAAAA,oDAAyB,EACvB,SAASoB;QACP,OAAO,IAAML;IACf,GACA;QAACA;KAAiB;IAGpBf,IAAAA,oDAAyB,EACvB,SAASqB;QACP,IAAI,CAAC1D,OAAO;YACVoD;QACF;IACF,GACA;QAACpD;QAAOoD;KAAiB;IAG3Bf,IAAAA,oDAAyB,EAAC;QACxB,IAAI,CAAChC,IAAIY,OAAO,EAAE;YAChB;QACF;QAEA,MAAM0C,oBAAoB,CAACC;YACzB,IAAI7D,UAAU;gBACZ;YACF;YAEA,MAAM8D,mBAAmBC,IAAAA,yBAAU,EAACF;YAEpC,OAAQC;gBACN,KAAKE,mBAAI,CAACC,GAAG;oBAAE;wBACb,IAAI,CAACvD,kBAAkBQ,OAAO,CAACa,MAAM,EAAE;4BACrC,OAAO;wBACT;wBAEA,MAAMmC,UAAUxD,kBAAkBQ,OAAO,CAACa,MAAM,GAAG;wBACnD,MAAMoC,YAAYzD,kBAAkBQ,OAAO,CAACkD,SAAS,CAAC,CAACC,OAASA,SAASR,MAAMS,MAAM;wBAErF,MAAMC,uBACJJ,cAAc,CAAC,KAAMA,cAAcD,WAAW,CAACL,MAAMW,QAAQ;wBAE/D,IAAID,wBAAyBJ,cAAc,KAAKN,MAAMW,QAAQ,EAAG;4BAC/DX,MAAMY,cAAc;4BAEpB,MAAMJ,OAAO3D,kBAAkBQ,OAAO,CAACqD,uBAAuB,IAAIL,QAAQ;4BAE1E,IAAIG,SAASrB,IAAAA,qCAAgC,EAACqB,OAAO;gCACnDA,KAAKlD,KAAK;4BACZ;4BAEA,OAAO;wBACT;wBAEA;oBACF;gBACA,KAAK6C,mBAAI,CAACU,MAAM;oBAAE;wBAChB,IAAI7E,SAAS;4BACXgE,MAAMY,cAAc;4BACpB5E;wBACF;oBACF;YACF;YAEA,OAAO;QACT;QAEA,MAAM8E,MAAMC,IAAAA,cAAS,EAACtE,IAAIY,OAAO,EAAEV,QAAQ;QAC3CmE,IAAIE,gBAAgB,CAAC,WAAWjB,mBAAmB;YACjDkB,SAAS;QACX;QACA,OAAO;YACLH,IAAII,mBAAmB,CAAC,WAAWnB,mBAAmB;QACxD;IACF,GAAG;QAAC/D;QAASS;QAAKN;KAAS;IAE3B,qBACE,qBAACJ;QAAUoF,UAAU,CAAC;QAAG1E,KAAKA;OAASD;kBACpCD;;AAGP"}
1
+ {"version":3,"sources":["../../../../src/components/FocusTrap/FocusTrap.tsx"],"sourcesContent":["import { AllHTMLAttributes, useCallback, useRef, useState } from 'react';\nimport { arraysEquals } from '../../helpers/array';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { FOCUSABLE_ELEMENTS_LIST, Keys, pressedKey } from '../../lib/accessibility';\nimport {\n contains,\n getActiveElementByAnotherElement,\n getWindow,\n isHTMLElement,\n useDOM,\n} from '../../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { HasComponent, HasRootRef } from '../../types';\n\nconst FOCUSABLE_ELEMENTS: string = FOCUSABLE_ELEMENTS_LIST.join();\nexport interface FocusTrapProps<T extends HTMLElement = HTMLElement>\n extends AllHTMLAttributes<T>,\n HasRootRef<T>,\n HasComponent {\n autoFocus?: boolean;\n restoreFocus?: boolean | (() => boolean);\n mount?: boolean;\n timeout?: number;\n onClose?: () => void;\n /**\n * Форсированное отключение захвата фокуса\n */\n disabled?: boolean;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/FocusTrap\n */\nexport const FocusTrap = <T extends HTMLElement = HTMLElement>({\n Component = 'div',\n onClose,\n autoFocus = true,\n restoreFocus = true,\n disabled = false,\n mount = true,\n timeout = 0,\n getRootRef,\n children,\n ...restProps\n}: FocusTrapProps<T>) => {\n const ref = useExternRef<T>(getRootRef);\n const { document } = useDOM();\n\n const focusableNodesRef = useRef<HTMLElement[]>([]);\n\n const [restoreFocusTo, setRestoreFocusTo] = useState<Element | null>(null);\n\n const focusNodeByIndex = (nodeIndex: number) => {\n const element = focusableNodesRef.current[nodeIndex];\n\n if (element) {\n element.focus({\n preventScroll: true,\n });\n }\n };\n\n const recalculateFocusableNodesRef = (parentNode: HTMLElement) => {\n // eslint-disable-next-line no-restricted-properties\n const newFocusableElements = parentNode.querySelectorAll<HTMLElement>(FOCUSABLE_ELEMENTS);\n\n const nodes: HTMLElement[] = [];\n newFocusableElements.forEach((focusableEl) => {\n const { display, visibility } = getComputedStyle(focusableEl);\n if (display !== 'none' && visibility !== 'hidden') {\n nodes.push(focusableEl);\n }\n });\n\n if (nodes.length === 0) {\n // Чтобы фокус был хотя бы на родителе\n nodes.push(parentNode);\n }\n focusableNodesRef.current = nodes;\n };\n\n const onMutateParentHandler = (parentNode: HTMLElement) => {\n const oldFocusableNodes = [...focusableNodesRef.current];\n\n recalculateFocusableNodesRef(parentNode);\n\n if (arraysEquals(oldFocusableNodes, focusableNodesRef.current)) {\n return;\n }\n\n if (document) {\n const activeElement = document.activeElement as HTMLElement;\n const currentElementIndex = Math.max(\n document.activeElement ? focusableNodesRef.current.indexOf(activeElement) : -1,\n 0,\n );\n focusNodeByIndex(currentElementIndex);\n }\n };\n\n useIsomorphicLayoutEffect(\n function collectFocusableNodesRef() {\n if (!ref.current) {\n return;\n }\n const parentNode = ref.current;\n const observer = new MutationObserver(() => onMutateParentHandler(parentNode));\n observer.observe(ref.current, {\n subtree: true,\n childList: true,\n });\n recalculateFocusableNodesRef(parentNode);\n return () => observer.disconnect();\n },\n [ref],\n );\n\n useIsomorphicLayoutEffect(\n function tryToAutoFocusToFirstNode() {\n if (!ref.current || !autoFocus || disabled) {\n return;\n }\n\n const autoFocusToFirstNode = () => {\n if (!ref.current || !focusableNodesRef.current.length) {\n return;\n }\n const activeElement = getActiveElementByAnotherElement(ref.current);\n if (!contains(ref.current, activeElement)) {\n focusableNodesRef.current[0].focus();\n }\n };\n const timeoutId = setTimeout(autoFocusToFirstNode, timeout);\n return () => {\n clearTimeout(timeoutId);\n };\n },\n [autoFocus, timeout, disabled],\n );\n\n const restoreFocusImpl = useCallback(() => {\n const shouldRestoreFocus = typeof restoreFocus === 'function' ? restoreFocus() : restoreFocus;\n\n if (!restoreFocusTo || !isHTMLElement(restoreFocusTo) || !shouldRestoreFocus) {\n return;\n }\n\n setTimeout(() => {\n if (restoreFocusTo) {\n restoreFocusTo.focus();\n setRestoreFocusTo(null);\n }\n }, timeout);\n }, [restoreFocus, restoreFocusTo, timeout]);\n\n useIsomorphicLayoutEffect(\n function calculateRestoreFocusTo() {\n if (!ref.current || !restoreFocus || !mount) {\n setRestoreFocusTo(null);\n return;\n }\n setRestoreFocusTo(getActiveElementByAnotherElement(ref.current));\n },\n [ref, mount, restoreFocus],\n );\n\n useIsomorphicLayoutEffect(\n function tryToRestoreFocusOnUnmount() {\n return () => restoreFocusImpl();\n },\n [restoreFocusImpl],\n );\n\n useIsomorphicLayoutEffect(\n function tryToRestoreFocusWhenFakeUnmount() {\n if (!mount) {\n restoreFocusImpl();\n }\n },\n [mount, restoreFocusImpl],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (!ref.current) {\n return;\n }\n\n const onDocumentKeydown = (event: KeyboardEvent) => {\n if (disabled) {\n return;\n }\n\n const pressedKeyResult = pressedKey(event);\n\n switch (pressedKeyResult) {\n case Keys.TAB: {\n if (!focusableNodesRef.current.length) {\n return false;\n }\n\n const lastIdx = focusableNodesRef.current.length - 1;\n const targetIdx = focusableNodesRef.current.findIndex((node) => node === event.target);\n\n const shouldFocusFirstNode =\n targetIdx === -1 || (targetIdx === lastIdx && !event.shiftKey);\n\n if (shouldFocusFirstNode || (targetIdx === 0 && event.shiftKey)) {\n event.preventDefault();\n\n const node = focusableNodesRef.current[shouldFocusFirstNode ? 0 : lastIdx];\n\n if (node !== getActiveElementByAnotherElement(node)) {\n node.focus();\n }\n\n return false;\n }\n\n break;\n }\n case Keys.ESCAPE: {\n if (onClose) {\n event.preventDefault();\n onClose();\n }\n }\n }\n\n return true;\n };\n\n const doc = getWindow(ref.current).document;\n doc.addEventListener('keydown', onDocumentKeydown, {\n capture: true,\n });\n return () => {\n doc.removeEventListener('keydown', onDocumentKeydown, true);\n };\n }, [onClose, ref, disabled]);\n\n return (\n <Component tabIndex={-1} ref={ref} {...restProps}>\n {children}\n </Component>\n );\n};\n"],"names":["FocusTrap","FOCUSABLE_ELEMENTS","FOCUSABLE_ELEMENTS_LIST","join","Component","onClose","autoFocus","restoreFocus","disabled","mount","timeout","getRootRef","children","restProps","ref","useExternRef","document","useDOM","focusableNodesRef","useRef","restoreFocusTo","setRestoreFocusTo","useState","focusNodeByIndex","nodeIndex","element","current","focus","preventScroll","recalculateFocusableNodesRef","parentNode","newFocusableElements","querySelectorAll","nodes","forEach","focusableEl","display","visibility","getComputedStyle","push","length","onMutateParentHandler","oldFocusableNodes","arraysEquals","activeElement","currentElementIndex","Math","max","indexOf","useIsomorphicLayoutEffect","collectFocusableNodesRef","observer","MutationObserver","observe","subtree","childList","disconnect","tryToAutoFocusToFirstNode","autoFocusToFirstNode","getActiveElementByAnotherElement","contains","timeoutId","setTimeout","clearTimeout","restoreFocusImpl","useCallback","shouldRestoreFocus","isHTMLElement","calculateRestoreFocusTo","tryToRestoreFocusOnUnmount","tryToRestoreFocusWhenFakeUnmount","onDocumentKeydown","event","pressedKeyResult","pressedKey","Keys","TAB","lastIdx","targetIdx","findIndex","node","target","shouldFocusFirstNode","shiftKey","preventDefault","ESCAPE","doc","getWindow","addEventListener","capture","removeEventListener","tabIndex"],"mappings":";;;;+BAiCaA;;;eAAAA;;;;;;;uBAjCoD;uBACpC;8BACA;+BAC6B;qBAOnD;2CACmC;AAG1C,MAAMC,qBAA6BC,sCAAuB,CAACC,IAAI;AAmBxD,MAAMH,YAAY;QAAsC,EAC7DI,YAAY,KAAK,EACjBC,OAAO,EACPC,YAAY,IAAI,EAChBC,eAAe,IAAI,EACnBC,WAAW,KAAK,EAChBC,QAAQ,IAAI,EACZC,UAAU,CAAC,EACXC,UAAU,EACVC,QAAQ,EAEU,WADfC;QATHT;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAME,MAAMC,IAAAA,0BAAY,EAAIJ;IAC5B,MAAM,EAAEK,QAAQ,EAAE,GAAGC,IAAAA,WAAM;IAE3B,MAAMC,oBAAoBC,IAAAA,aAAM,EAAgB,EAAE;IAElD,MAAM,CAACC,gBAAgBC,kBAAkB,GAAGC,IAAAA,eAAQ,EAAiB;IAErE,MAAMC,mBAAmB,CAACC;QACxB,MAAMC,UAAUP,kBAAkBQ,OAAO,CAACF,UAAU;QAEpD,IAAIC,SAAS;YACXA,QAAQE,KAAK,CAAC;gBACZC,eAAe;YACjB;QACF;IACF;IAEA,MAAMC,+BAA+B,CAACC;QACpC,oDAAoD;QACpD,MAAMC,uBAAuBD,WAAWE,gBAAgB,CAAc/B;QAEtE,MAAMgC,QAAuB,EAAE;QAC/BF,qBAAqBG,OAAO,CAAC,CAACC;YAC5B,MAAM,EAAEC,OAAO,EAAEC,UAAU,EAAE,GAAGC,iBAAiBH;YACjD,IAAIC,YAAY,UAAUC,eAAe,UAAU;gBACjDJ,MAAMM,IAAI,CAACJ;YACb;QACF;QAEA,IAAIF,MAAMO,MAAM,KAAK,GAAG;YACtB,sCAAsC;YACtCP,MAAMM,IAAI,CAACT;QACb;QACAZ,kBAAkBQ,OAAO,GAAGO;IAC9B;IAEA,MAAMQ,wBAAwB,CAACX;QAC7B,MAAMY,oBAAoB;eAAIxB,kBAAkBQ,OAAO;SAAC;QAExDG,6BAA6BC;QAE7B,IAAIa,IAAAA,mBAAY,EAACD,mBAAmBxB,kBAAkBQ,OAAO,GAAG;YAC9D;QACF;QAEA,IAAIV,UAAU;YACZ,MAAM4B,gBAAgB5B,SAAS4B,aAAa;YAC5C,MAAMC,sBAAsBC,KAAKC,GAAG,CAClC/B,SAAS4B,aAAa,GAAG1B,kBAAkBQ,OAAO,CAACsB,OAAO,CAACJ,iBAAiB,CAAC,GAC7E;YAEFrB,iBAAiBsB;QACnB;IACF;IAEAI,IAAAA,oDAAyB,EACvB,SAASC;QACP,IAAI,CAACpC,IAAIY,OAAO,EAAE;YAChB;QACF;QACA,MAAMI,aAAahB,IAAIY,OAAO;QAC9B,MAAMyB,WAAW,IAAIC,iBAAiB,IAAMX,sBAAsBX;QAClEqB,SAASE,OAAO,CAACvC,IAAIY,OAAO,EAAE;YAC5B4B,SAAS;YACTC,WAAW;QACb;QACA1B,6BAA6BC;QAC7B,OAAO,IAAMqB,SAASK,UAAU;IAClC,GACA;QAAC1C;KAAI;IAGPmC,IAAAA,oDAAyB,EACvB,SAASQ;QACP,IAAI,CAAC3C,IAAIY,OAAO,IAAI,CAACpB,aAAaE,UAAU;YAC1C;QACF;QAEA,MAAMkD,uBAAuB;YAC3B,IAAI,CAAC5C,IAAIY,OAAO,IAAI,CAACR,kBAAkBQ,OAAO,CAACc,MAAM,EAAE;gBACrD;YACF;YACA,MAAMI,gBAAgBe,IAAAA,qCAAgC,EAAC7C,IAAIY,OAAO;YAClE,IAAI,CAACkC,IAAAA,aAAQ,EAAC9C,IAAIY,OAAO,EAAEkB,gBAAgB;gBACzC1B,kBAAkBQ,OAAO,CAAC,EAAE,CAACC,KAAK;YACpC;QACF;QACA,MAAMkC,YAAYC,WAAWJ,sBAAsBhD;QACnD,OAAO;YACLqD,aAAaF;QACf;IACF,GACA;QAACvD;QAAWI;QAASF;KAAS;IAGhC,MAAMwD,mBAAmBC,IAAAA,kBAAW,EAAC;QACnC,MAAMC,qBAAqB,OAAO3D,iBAAiB,aAAaA,iBAAiBA;QAEjF,IAAI,CAACa,kBAAkB,CAAC+C,IAAAA,kBAAa,EAAC/C,mBAAmB,CAAC8C,oBAAoB;YAC5E;QACF;QAEAJ,WAAW;YACT,IAAI1C,gBAAgB;gBAClBA,eAAeO,KAAK;gBACpBN,kBAAkB;YACpB;QACF,GAAGX;IACL,GAAG;QAACH;QAAca;QAAgBV;KAAQ;IAE1CuC,IAAAA,oDAAyB,EACvB,SAASmB;QACP,IAAI,CAACtD,IAAIY,OAAO,IAAI,CAACnB,gBAAgB,CAACE,OAAO;YAC3CY,kBAAkB;YAClB;QACF;QACAA,kBAAkBsC,IAAAA,qCAAgC,EAAC7C,IAAIY,OAAO;IAChE,GACA;QAACZ;QAAKL;QAAOF;KAAa;IAG5B0C,IAAAA,oDAAyB,EACvB,SAASoB;QACP,OAAO,IAAML;IACf,GACA;QAACA;KAAiB;IAGpBf,IAAAA,oDAAyB,EACvB,SAASqB;QACP,IAAI,CAAC7D,OAAO;YACVuD;QACF;IACF,GACA;QAACvD;QAAOuD;KAAiB;IAG3Bf,IAAAA,oDAAyB,EAAC;QACxB,IAAI,CAACnC,IAAIY,OAAO,EAAE;YAChB;QACF;QAEA,MAAM6C,oBAAoB,CAACC;YACzB,IAAIhE,UAAU;gBACZ;YACF;YAEA,MAAMiE,mBAAmBC,IAAAA,yBAAU,EAACF;YAEpC,OAAQC;gBACN,KAAKE,mBAAI,CAACC,GAAG;oBAAE;wBACb,IAAI,CAAC1D,kBAAkBQ,OAAO,CAACc,MAAM,EAAE;4BACrC,OAAO;wBACT;wBAEA,MAAMqC,UAAU3D,kBAAkBQ,OAAO,CAACc,MAAM,GAAG;wBACnD,MAAMsC,YAAY5D,kBAAkBQ,OAAO,CAACqD,SAAS,CAAC,CAACC,OAASA,SAASR,MAAMS,MAAM;wBAErF,MAAMC,uBACJJ,cAAc,CAAC,KAAMA,cAAcD,WAAW,CAACL,MAAMW,QAAQ;wBAE/D,IAAID,wBAAyBJ,cAAc,KAAKN,MAAMW,QAAQ,EAAG;4BAC/DX,MAAMY,cAAc;4BAEpB,MAAMJ,OAAO9D,kBAAkBQ,OAAO,CAACwD,uBAAuB,IAAIL,QAAQ;4BAE1E,IAAIG,SAASrB,IAAAA,qCAAgC,EAACqB,OAAO;gCACnDA,KAAKrD,KAAK;4BACZ;4BAEA,OAAO;wBACT;wBAEA;oBACF;gBACA,KAAKgD,mBAAI,CAACU,MAAM;oBAAE;wBAChB,IAAIhF,SAAS;4BACXmE,MAAMY,cAAc;4BACpB/E;wBACF;oBACF;YACF;YAEA,OAAO;QACT;QAEA,MAAMiF,MAAMC,IAAAA,cAAS,EAACzE,IAAIY,OAAO,EAAEV,QAAQ;QAC3CsE,IAAIE,gBAAgB,CAAC,WAAWjB,mBAAmB;YACjDkB,SAAS;QACX;QACA,OAAO;YACLH,IAAII,mBAAmB,CAAC,WAAWnB,mBAAmB;QACxD;IACF,GAAG;QAAClE;QAASS;QAAKN;KAAS;IAE3B,qBACE,qBAACJ;QAAUuF,UAAU,CAAC;QAAG7E,KAAKA;OAASD;kBACpCD;;AAGP"}
@@ -54,7 +54,7 @@ const GridAvatar = (_param)=>{
54
54
  style: {
55
55
  backgroundImage: `url(${url})`
56
56
  }
57
- }, url) : null)
57
+ }, index) : null)
58
58
  }),
59
59
  children
60
60
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/GridAvatar/GridAvatar.tsx"],"sourcesContent":["import { classNames } from '@vkontakte/vkjs';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ImageBase, type ImageBaseProps } from '../ImageBase/ImageBase';\nimport { GridAvatarBadge, type GridAvatarBadgeProps } from './GridAvatarBadge/GridAvatarBadge';\nimport styles from './GridAvatar.module.css';\n\nexport { GridAvatarBadgeProps };\n\nexport const GRID_AVATAR_DEFAULT_SIZE = 48;\n\nexport const MAX_GRID_LENGTH = 4;\n\nexport interface GridAvatarProps extends Omit<ImageBaseProps, 'src' | 'fallbackIcon'> {\n /**\n * Массив со ссылками. От 1 до 4 элементов.\n */\n src?: string[];\n}\n\nconst warn = warnOnce('GridAvatar');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/GridAvatar\n */\nexport const GridAvatar = ({\n src = [],\n size = GRID_AVATAR_DEFAULT_SIZE,\n className,\n children,\n ...restProps\n}: GridAvatarProps) => {\n if (process.env.NODE_ENV === 'development') {\n if (src.length > MAX_GRID_LENGTH) {\n warn(`Длина массива src (${src.length}) больше максимальной (${MAX_GRID_LENGTH})`, 'error');\n }\n }\n\n return (\n <ImageBase {...restProps} size={size} className={classNames(styles['GridAvatar'], className)}>\n <div className={styles['GridAvatar__in']} aria-hidden>\n {src.map((url, index) =>\n index < MAX_GRID_LENGTH ? (\n <div\n key={url}\n className={styles['GridAvatar__item']}\n style={{ backgroundImage: `url(${url})` }}\n />\n ) : null,\n )}\n </div>\n {children}\n </ImageBase>\n );\n};\n\nGridAvatar.Badge = GridAvatarBadge;\n"],"names":["GRID_AVATAR_DEFAULT_SIZE","GridAvatar","MAX_GRID_LENGTH","warn","warnOnce","src","size","className","children","restProps","process","env","NODE_ENV","length","ImageBase","classNames","div","aria-hidden","map","url","index","style","backgroundImage","Badge","GridAvatarBadge"],"mappings":";;;;;;;;;;;IAQaA,wBAAwB;eAAxBA;;IAgBAC,UAAU;eAAVA;;IAdAC,eAAe;eAAfA;;;;;;;sBAVc;0BACF;2BACsB;iCACY;AAKpD,MAAMF,2BAA2B;AAEjC,MAAME,kBAAkB;AAS/B,MAAMC,OAAOC,IAAAA,kBAAQ,EAAC;AAKf,MAAMH,aAAa;QAAC,EACzBI,MAAM,EAAE,EACRC,OAAON,wBAAwB,EAC/BO,SAAS,EACTC,QAAQ,EAEQ,WADbC;QAJHJ;QACAC;QACAC;QACAC;;IAGA,IAAIE,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C,IAAIP,IAAIQ,MAAM,GAAGX,iBAAiB;YAChCC,KAAK,CAAC,mBAAmB,EAAEE,IAAIQ,MAAM,CAAC,uBAAuB,EAAEX,gBAAgB,CAAC,CAAC,EAAE;QACrF;IACF;IAEA,qBACE,sBAACY,oBAAS,8CAAKL;QAAWH,MAAMA;QAAMC,WAAWQ,IAAAA,gBAAU,oBAAuBR;;0BAChF,qBAACS;gBAAIT,SAAS;gBAA4BU,aAAW;0BAClDZ,IAAIa,GAAG,CAAC,CAACC,KAAKC,QACbA,QAAQlB,gCACN,qBAACc;wBAECT,SAAS;wBACTc,OAAO;4BAAEC,iBAAiB,CAAC,IAAI,EAAEH,IAAI,CAAC,CAAC;wBAAC;uBAFnCA,OAIL;;YAGPX;;;AAGP;AAEAP,WAAWsB,KAAK,GAAGC,gCAAe"}
1
+ {"version":3,"sources":["../../../../src/components/GridAvatar/GridAvatar.tsx"],"sourcesContent":["import { classNames } from '@vkontakte/vkjs';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ImageBase, type ImageBaseProps } from '../ImageBase/ImageBase';\nimport { GridAvatarBadge, type GridAvatarBadgeProps } from './GridAvatarBadge/GridAvatarBadge';\nimport styles from './GridAvatar.module.css';\n\nexport { GridAvatarBadgeProps };\n\nexport const GRID_AVATAR_DEFAULT_SIZE = 48;\n\nexport const MAX_GRID_LENGTH = 4;\n\nexport interface GridAvatarProps extends Omit<ImageBaseProps, 'src' | 'fallbackIcon'> {\n /**\n * Массив со ссылками. От 1 до 4 элементов.\n */\n src?: string[];\n}\n\nconst warn = warnOnce('GridAvatar');\n\n/**\n * @see https://vkcom.github.io/VKUI/#/GridAvatar\n */\nexport const GridAvatar = ({\n src = [],\n size = GRID_AVATAR_DEFAULT_SIZE,\n className,\n children,\n ...restProps\n}: GridAvatarProps) => {\n if (process.env.NODE_ENV === 'development') {\n if (src.length > MAX_GRID_LENGTH) {\n warn(`Длина массива src (${src.length}) больше максимальной (${MAX_GRID_LENGTH})`, 'error');\n }\n }\n\n return (\n <ImageBase {...restProps} size={size} className={classNames(styles['GridAvatar'], className)}>\n <div className={styles['GridAvatar__in']} aria-hidden>\n {src.map((url, index) =>\n index < MAX_GRID_LENGTH ? (\n <div\n key={index}\n className={styles['GridAvatar__item']}\n style={{ backgroundImage: `url(${url})` }}\n />\n ) : null,\n )}\n </div>\n {children}\n </ImageBase>\n );\n};\n\nGridAvatar.Badge = GridAvatarBadge;\n"],"names":["GRID_AVATAR_DEFAULT_SIZE","GridAvatar","MAX_GRID_LENGTH","warn","warnOnce","src","size","className","children","restProps","process","env","NODE_ENV","length","ImageBase","classNames","div","aria-hidden","map","url","index","style","backgroundImage","Badge","GridAvatarBadge"],"mappings":";;;;;;;;;;;IAQaA,wBAAwB;eAAxBA;;IAgBAC,UAAU;eAAVA;;IAdAC,eAAe;eAAfA;;;;;;;sBAVc;0BACF;2BACsB;iCACY;AAKpD,MAAMF,2BAA2B;AAEjC,MAAME,kBAAkB;AAS/B,MAAMC,OAAOC,IAAAA,kBAAQ,EAAC;AAKf,MAAMH,aAAa;QAAC,EACzBI,MAAM,EAAE,EACRC,OAAON,wBAAwB,EAC/BO,SAAS,EACTC,QAAQ,EAEQ,WADbC;QAJHJ;QACAC;QACAC;QACAC;;IAGA,IAAIE,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C,IAAIP,IAAIQ,MAAM,GAAGX,iBAAiB;YAChCC,KAAK,CAAC,mBAAmB,EAAEE,IAAIQ,MAAM,CAAC,uBAAuB,EAAEX,gBAAgB,CAAC,CAAC,EAAE;QACrF;IACF;IAEA,qBACE,sBAACY,oBAAS,8CAAKL;QAAWH,MAAMA;QAAMC,WAAWQ,IAAAA,gBAAU,oBAAuBR;;0BAChF,qBAACS;gBAAIT,SAAS;gBAA4BU,aAAW;0BAClDZ,IAAIa,GAAG,CAAC,CAACC,KAAKC,QACbA,QAAQlB,gCACN,qBAACc;wBAECT,SAAS;wBACTc,OAAO;4BAAEC,iBAAiB,CAAC,IAAI,EAAEH,IAAI,CAAC,CAAC;wBAAC;uBAFnCC,SAIL;;YAGPZ;;;AAGP;AAEAP,WAAWsB,KAAK,GAAGC,gCAAe"}
@@ -1,3 +1,4 @@
1
+ import * as React from 'react';
1
2
  import { type ImageBaseOverlayProps, type ImageBaseProps } from '../ImageBase/ImageBase';
2
3
  import { type ImageBadgeProps } from './ImageBadge/ImageBadge';
3
4
  export type { ImageBadgeProps, ImageBaseOverlayProps as ImageOverlayProps };
@@ -18,9 +19,6 @@ export declare const Image: {
18
19
  ({ className, ...restProps }: ImageBadgeProps): import("react/jsx-runtime").JSX.Element;
19
20
  displayName: string;
20
21
  };
21
- Overlay: {
22
- ({ className, theme: themeProp, visibility: visibilityProp, children, onClick: onClickProp, ...restProps }: ImageBaseOverlayProps): import("react/jsx-runtime").JSX.Element;
23
- displayName: string;
24
- };
22
+ Overlay: React.FC<ImageBaseOverlayProps>;
25
23
  };
26
24
  //# sourceMappingURL=Image.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../../src/components/Image/Image.tsx"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACpG,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE3E,YAAY,EAAE,eAAe,EAAE,qBAAqB,IAAI,iBAAiB,EAAE,CAAC;AAE5E,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IAC/D;;OAEG;IACH,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAChC;AA0DD;;GAEG;AACH,eAAO,MAAM,KAAK;+EAMf,UAAU;;;;;;;;;;CAcZ,CAAC"}
1
+ {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../../src/components/Image/Image.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAa,KAAK,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACpG,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE3E,YAAY,EAAE,eAAe,EAAE,qBAAqB,IAAI,iBAAiB,EAAE,CAAC;AAE5E,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IAC/D;;OAEG;IACH,YAAY,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CAChC;AA0DD;;GAEG;AACH,eAAO,MAAM,KAAK;+EAMf,UAAU;;;;;;;CAcZ,CAAC"}
@@ -58,9 +58,6 @@ export declare const ImageBase: {
58
58
  ({ background, ...restProps }: ImageBaseBadgeProps): import("react/jsx-runtime").JSX.Element;
59
59
  displayName: string;
60
60
  };
61
- Overlay: {
62
- ({ className, theme: themeProp, visibility: visibilityProp, children, onClick: onClickProp, ...restProps }: ImageBaseOverlayProps): import("react/jsx-runtime").JSX.Element;
63
- displayName: string;
64
- };
61
+ Overlay: React.FC<ImageBaseOverlayProps>;
65
62
  };
66
63
  //# sourceMappingURL=ImageBase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImageBase.d.ts","sourceRoot":"","sources":["../../../../src/components/ImageBase/ImageBase.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAIhG,YAAY,EACV,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,GACtB,CAAC;AAEF,OAAO,EACL,+BAA+B,EAC/B,kCAAkC,EAClC,iCAAiC,GAClC,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAO5B,MAAM,WAAW,cACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAC1C,wBAAwB,EACxB,UAAU,CAAC,cAAc,CAAC,EAC1B,MAAM,CAAC,gBAAgB,CAAC;IAC1B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC3C;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;IAC9D;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;iTAyBnB,cAAc;;;;;;;;;;CA2FhB,CAAC"}
1
+ {"version":3,"file":"ImageBase.d.ts","sourceRoot":"","sources":["../../../../src/components/ImageBase/ImageBase.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAIhG,YAAY,EACV,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,GACtB,CAAC;AAEF,OAAO,EACL,+BAA+B,EAC/B,kCAAkC,EAClC,iCAAiC,GAClC,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAO5B,MAAM,WAAW,cACf,SAAQ,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAC1C,wBAAwB,EACxB,UAAU,CAAC,cAAc,CAAC,EAC1B,MAAM,CAAC,gBAAgB,CAAC;IAC1B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC3C;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;IAC9D;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;iTAyBnB,cAAc;;;;;;;CA2FhB,CAAC"}
@@ -1,42 +1,8 @@
1
1
  import * as React from 'react';
2
- import type { ImageBaseExpectedIconProps } from '../types';
3
- export interface ImageBaseOverlayProps extends React.AriaAttributes {
4
- /**
5
- * Задаёт тему оформления.
6
- *
7
- * > По умолчанию берётся из параметра `appearance` в `ConfigProvider`.
8
- */
9
- theme?: 'dark' | 'light';
10
- /**
11
- * Определяет каким образом должен показываться оверлей.
12
- *
13
- * - `"on-hover"` – на наведение указателя мыши.
14
- * - `"always"` – всегда показывать.
15
- *
16
- * > По умолчанию определяется в зависимости от того, есть ли у пользователя мышь или нет.
17
- */
18
- visibility?: 'on-hover' | 'always';
19
- /**
20
- * Принимает иконку.
21
- *
22
- *
23
- * > 📝 Нужный для `<ImageBase size={...} />` размер можно узнать из функции `getOverlayIconSizeByImageBaseSize()`.
24
- *
25
- * > Предпочтительней использовать иконки из `@vkontakte/icons`.
26
- *
27
- * > 📊️ Если вы хотите передать кастомную иконку, то следует именовать её по шаблону `Icon<size><name>`. Или же
28
- * > чтобы в неё был передан параметр `width`. Тогда мы сможем выводить в консоль подсказку правильного ли размера вы
29
- * > использовали иконку.
30
- */
31
- children: React.ReactElement<ImageBaseExpectedIconProps>;
32
- className?: string;
33
- onClick?: React.MouseEventHandler<HTMLElement>;
34
- }
2
+ import type { ImageBaseOverlayInteractiveProps, ImageBaseOverlayNonInteractiveProps } from './types';
3
+ export type ImageBaseOverlayProps = ImageBaseOverlayInteractiveProps | ImageBaseOverlayNonInteractiveProps;
35
4
  /**
36
- * Интерактивный оверлей над картинкой.
5
+ * Оверлей над картинкой.
37
6
  */
38
- export declare const ImageBaseOverlay: {
39
- ({ className, theme: themeProp, visibility: visibilityProp, children, onClick: onClickProp, ...restProps }: ImageBaseOverlayProps): import("react/jsx-runtime").JSX.Element;
40
- displayName: string;
41
- };
7
+ export declare const ImageBaseOverlay: React.FC<ImageBaseOverlayProps>;
42
8
  //# sourceMappingURL=ImageBaseOverlay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImageBaseOverlay.d.ts","sourceRoot":"","sources":["../../../../../src/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAI3D,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc;IACjE;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IACnC;;;;;;;;;;;OAWG;IACH,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;gHAO1B,qBAAqB;;CAsCvB,CAAC"}
1
+ {"version":3,"file":"ImageBaseOverlay.d.ts","sourceRoot":"","sources":["../../../../../src/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,KAAK,EACV,gCAAgC,EAChC,mCAAmC,EACpC,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,qBAAqB,GAC7B,gCAAgC,GAChC,mCAAmC,CAAC;AAiExC;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA6B5D,CAAC"}
@@ -15,24 +15,31 @@ const _object_without_properties = require("@swc/helpers/_/_object_without_prope
15
15
  const _jsxruntime = require("react/jsx-runtime");
16
16
  const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
17
17
  const _vkjs = require("@vkontakte/vkjs");
18
+ const _useKeyboard = require("../../../components/Clickable/useKeyboard");
18
19
  const _useAdaptivityHasPointer = require("../../../hooks/useAdaptivityHasPointer");
19
20
  const _useAppearance = require("../../../hooks/useAppearance");
21
+ const _useExternRef = require("../../../hooks/useExternRef");
22
+ const _useFocusVisible = require("../../../hooks/useFocusVisible");
20
23
  const _useFocusVisibleClassName = require("../../../hooks/useFocusVisibleClassName");
21
- const _Tappable = require("../../Tappable/Tappable");
22
24
  const _context = require("../context");
23
25
  const _validators = require("../validators");
24
- const ImageBaseOverlay = (_param)=>{
25
- var { className, theme: themeProp, visibility: visibilityProp, children, onClick: onClickProp } = _param, restProps = _object_without_properties._(_param, [
26
- "className",
27
- "theme",
28
- "visibility",
26
+ const _hooks = require("./hooks");
27
+ const ImageBaseOverlayInteractive = (_param)=>{
28
+ var { children, className, getRootRef, disableInteractive, overlayShown } = _param, restProps = _object_without_properties._(_param, [
29
29
  "children",
30
- "onClick"
30
+ "className",
31
+ "getRootRef",
32
+ "disableInteractive",
33
+ "overlayShown"
31
34
  ]);
32
- const appearance = (0, _useAppearance.useAppearance)();
33
- const hasPointer = (0, _useAdaptivityHasPointer.useAdaptivityHasPointer)();
34
- const theme = themeProp !== null && themeProp !== void 0 ? themeProp : appearance;
35
- const visibility = visibilityProp !== null && visibilityProp !== void 0 ? visibilityProp : hasPointer ? 'on-hover' : 'always';
35
+ const _useFocusVisible1 = (0, _useFocusVisible.useFocusVisible)(), { focusVisible } = _useFocusVisible1, focusEvents = _object_without_properties._(_useFocusVisible1, [
36
+ "focusVisible"
37
+ ]);
38
+ const focusVisibleClassNames = (0, _useFocusVisibleClassName.useFocusVisibleClassName)({
39
+ focusVisible,
40
+ mode: 'inside'
41
+ });
42
+ const keyboardHandlers = (0, _useKeyboard.useKeyboard)();
36
43
  if (process.env.NODE_ENV === 'development') {
37
44
  if (children) {
38
45
  // eslint-disable-next-line react-hooks/rules-of-hooks
@@ -43,17 +50,51 @@ const ImageBaseOverlay = (_param)=>{
43
50
  });
44
51
  }
45
52
  }
46
- const onClick = (onClickProp !== null && onClickProp !== void 0 ? onClickProp : visibility === 'on-hover') ? _vkjs.noop : undefined;
47
- return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Tappable.Tappable, _object_spread_props._(_object_spread._({}, restProps), {
48
- className: (0, _vkjs.classNames)("vkuiImageBaseOverlay", visibility === 'always' && "vkuiImageBaseOverlay--visible", theme === 'light' && "vkuiImageBaseOverlay--theme-light", theme === 'dark' && "vkuiImageBaseOverlay--theme-dark", className),
49
- hasHover: visibility === 'on-hover',
50
- hoverMode: visibility === 'on-hover' ? "vkuiImageBaseOverlay--visible" : undefined,
51
- focusVisibleMode: (0, _vkjs.classNames)(_useFocusVisibleClassName.focusVisiblePresetModeClassNames['inside'], "vkuiImageBaseOverlay--visible"),
52
- hasActive: false,
53
- onClick: onClick,
53
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)("div", _object_spread_props._(_object_spread._(_object_spread_props._(_object_spread._({}, restProps), {
54
+ tabIndex: 0,
55
+ role: "button",
56
+ className: (0, _vkjs.classNames)("vkuiImageBaseOverlay--clickable", (focusVisible || overlayShown) && "vkuiImageBaseOverlay--visible", focusVisibleClassNames, className),
57
+ ref: getRootRef
58
+ }), focusEvents, keyboardHandlers), {
54
59
  children: children
55
60
  }));
56
61
  };
62
+ const ImageBaseOverlayNonInteractive = (_param)=>{
63
+ var { className, getRootRef, disableInteractive, overlayShown: overlayShownProps } = _param, restProps = _object_without_properties._(_param, [
64
+ "className",
65
+ "getRootRef",
66
+ "disableInteractive",
67
+ "overlayShown"
68
+ ]);
69
+ const rootRef = (0, _useExternRef.useExternRef)(getRootRef);
70
+ const { shown: overlayShown, onClick: onOverlayClick } = (0, _hooks.useNonInteractiveOverlayProps)(rootRef);
71
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)("div", _object_spread_props._(_object_spread._({}, restProps), {
72
+ ref: rootRef,
73
+ className: (0, _vkjs.classNames)((overlayShown || overlayShownProps) && "vkuiImageBaseOverlay--visible", className),
74
+ onClick: onOverlayClick
75
+ }));
76
+ };
77
+ const ImageBaseOverlay = (_param)=>{
78
+ var { className, theme: themeProp, visibility: visibilityProp } = _param, restProps = _object_without_properties._(_param, [
79
+ "className",
80
+ "theme",
81
+ "visibility"
82
+ ]);
83
+ const appearance = (0, _useAppearance.useAppearance)();
84
+ const hasPointer = (0, _useAdaptivityHasPointer.useAdaptivityHasPointer)();
85
+ const theme = themeProp !== null && themeProp !== void 0 ? themeProp : appearance;
86
+ const visibility = visibilityProp !== null && visibilityProp !== void 0 ? visibilityProp : hasPointer ? 'on-hover' : 'always';
87
+ const commonClassNames = (0, _vkjs.classNames)("vkuiImageBaseOverlay", theme === 'light' && "vkuiImageBaseOverlay--theme-light", theme === 'dark' && "vkuiImageBaseOverlay--theme-dark", className);
88
+ const commonProps = {
89
+ className: commonClassNames,
90
+ overlayShown: visibility === 'always'
91
+ };
92
+ // Не делаем деструктуризацию пропа, потому что Typescript не вывозит
93
+ if (restProps.disableInteractive) {
94
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(ImageBaseOverlayNonInteractive, _object_spread._({}, restProps, commonProps));
95
+ }
96
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(ImageBaseOverlayInteractive, _object_spread._({}, restProps, commonProps));
97
+ };
57
98
  ImageBaseOverlay.displayName = 'ImageBaseOverlay';
58
99
 
59
100
  //# sourceMappingURL=ImageBaseOverlay.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../../hooks/useAdaptivityHasPointer';\nimport { useAppearance } from '../../../hooks/useAppearance';\nimport { focusVisiblePresetModeClassNames } from '../../../hooks/useFocusVisibleClassName';\nimport { Tappable } from '../../Tappable/Tappable';\nimport { ImageBaseContext } from '../context';\nimport type { ImageBaseExpectedIconProps } from '../types';\nimport { validateOverlayIcon } from '../validators';\nimport styles from './ImageBaseOverlay.module.css';\n\nexport interface ImageBaseOverlayProps extends React.AriaAttributes {\n /**\n * Задаёт тему оформления.\n *\n * > По умолчанию берётся из параметра `appearance` в `ConfigProvider`.\n */\n theme?: 'dark' | 'light';\n /**\n * Определяет каким образом должен показываться оверлей.\n *\n * - `\"on-hover\"` на наведение указателя мыши.\n * - `\"always\"` – всегда показывать.\n *\n * > По умолчанию определяется в зависимости от того, есть ли у пользователя мышь или нет.\n */\n visibility?: 'on-hover' | 'always';\n /**\n * Принимает иконку.\n *\n *\n * > 📝 Нужный для `<ImageBase size={...} />` размер можно узнать из функции `getOverlayIconSizeByImageBaseSize()`.\n *\n * > Предпочтительней использовать иконки из `@vkontakte/icons`.\n *\n * > 📊️ Если вы хотите передать кастомную иконку, то следует именовать её по шаблону `Icon<size><name>`. Или же\n * > чтобы в неё был передан параметр `width`. Тогда мы сможем выводить в консоль подсказку правильного ли размера вы\n * > использовали иконку.\n */\n children: React.ReactElement<ImageBaseExpectedIconProps>;\n className?: string;\n onClick?: React.MouseEventHandler<HTMLElement>;\n}\n\n/**\n * Интерактивный оверлей над картинкой.\n */\nexport const ImageBaseOverlay = ({\n className,\n theme: themeProp,\n visibility: visibilityProp,\n children,\n onClick: onClickProp,\n ...restProps\n}: ImageBaseOverlayProps) => {\n const appearance = useAppearance();\n const hasPointer = useAdaptivityHasPointer();\n const theme = themeProp ?? appearance;\n const visibility = visibilityProp ?? (hasPointer ? 'on-hover' : 'always');\n\n if (process.env.NODE_ENV === 'development') {\n if (children) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { size } = React.useContext(ImageBaseContext);\n validateOverlayIcon(size, { name: 'children', value: children });\n }\n }\n\n const onClick = onClickProp ?? visibility === 'on-hover' ? noop : undefined;\n\n return (\n <Tappable\n {...restProps}\n className={classNames(\n styles['ImageBaseOverlay'],\n visibility === 'always' && styles['ImageBaseOverlay--visible'],\n theme === 'light' && styles['ImageBaseOverlay--theme-light'],\n theme === 'dark' && styles['ImageBaseOverlay--theme-dark'],\n className,\n )}\n hasHover={visibility === 'on-hover'}\n hoverMode={visibility === 'on-hover' ? styles['ImageBaseOverlay--visible'] : undefined}\n focusVisibleMode={classNames(\n focusVisiblePresetModeClassNames['inside'],\n styles['ImageBaseOverlay--visible'],\n )}\n hasActive={false}\n onClick={onClick}\n >\n {children}\n </Tappable>\n );\n};\n\nImageBaseOverlay.displayName = 'ImageBaseOverlay';\n"],"names":["ImageBaseOverlay","className","theme","themeProp","visibility","visibilityProp","children","onClick","onClickProp","restProps","appearance","useAppearance","hasPointer","useAdaptivityHasPointer","process","env","NODE_ENV","size","React","useContext","ImageBaseContext","validateOverlayIcon","name","value","noop","undefined","Tappable","classNames","hasHover","hoverMode","focusVisibleMode","focusVisiblePresetModeClassNames","hasActive","displayName"],"mappings":";;;;+BA+CaA;;;eAAAA;;;;;;;;iEA/CU;sBACU;yCACO;+BACV;0CACmB;0BACxB;yBACQ;4BAEG;AAuC7B,MAAMA,mBAAmB;QAAC,EAC/BC,SAAS,EACTC,OAAOC,SAAS,EAChBC,YAAYC,cAAc,EAC1BC,QAAQ,EACRC,SAASC,WAAW,EAEE,WADnBC;QALHR;QACAC;QACAE;QACAE;QACAC;;IAGA,MAAMG,aAAaC,IAAAA,4BAAa;IAChC,MAAMC,aAAaC,IAAAA,gDAAuB;IAC1C,MAAMX,QAAQC,sBAAAA,uBAAAA,YAAaO;IAC3B,MAAMN,aAAaC,2BAAAA,4BAAAA,iBAAmBO,aAAa,aAAa;IAEhE,IAAIE,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C,IAAIV,UAAU;YACZ,sDAAsD;YACtD,MAAM,EAAEW,IAAI,EAAE,GAAGC,OAAMC,UAAU,CAACC,yBAAgB;YAClDC,IAAAA,+BAAmB,EAACJ,MAAM;gBAAEK,MAAM;gBAAYC,OAAOjB;YAAS;QAChE;IACF;IAEA,MAAMC,UAAUC,CAAAA,wBAAAA,yBAAAA,cAAeJ,eAAe,UAAS,IAAIoB,UAAI,GAAGC;IAElE,qBACE,qBAACC,kBAAQ,8CACHjB;QACJR,WAAW0B,IAAAA,gBAAU,0BAEnBvB,eAAe,6CACfF,UAAU,gDACVA,UAAU,8CACVD;QAEF2B,UAAUxB,eAAe;QACzByB,WAAWzB,eAAe,+CAAmDqB;QAC7EK,kBAAkBH,IAAAA,gBAAU,EAC1BI,0DAAgC,CAAC,SAAS;QAG5CC,WAAW;QACXzB,SAASA;kBAERD;;AAGP;AAEAN,iBAAiBiC,WAAW,GAAG"}
1
+ {"version":3,"sources":["../../../../../src/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useKeyboard } from '../../../components/Clickable/useKeyboard';\nimport { useAdaptivityHasPointer } from '../../../hooks/useAdaptivityHasPointer';\nimport { useAppearance } from '../../../hooks/useAppearance';\nimport { useExternRef } from '../../../hooks/useExternRef';\nimport { useFocusVisible } from '../../../hooks/useFocusVisible';\nimport { useFocusVisibleClassName } from '../../../hooks/useFocusVisibleClassName';\nimport { ImageBaseContext } from '../context';\nimport { validateOverlayIcon } from '../validators';\nimport { useNonInteractiveOverlayProps } from './hooks';\nimport type {\n ImageBaseOverlayInteractiveProps,\n ImageBaseOverlayNonInteractiveProps,\n} from './types';\nimport styles from './ImageBaseOverlay.module.css';\n\nexport type ImageBaseOverlayProps =\n | ImageBaseOverlayInteractiveProps\n | ImageBaseOverlayNonInteractiveProps;\n\nconst ImageBaseOverlayInteractive = ({\n children,\n className,\n getRootRef,\n disableInteractive,\n overlayShown,\n ...restProps\n}: ImageBaseOverlayInteractiveProps & { overlayShown?: boolean }) => {\n const { focusVisible, ...focusEvents } = useFocusVisible();\n const focusVisibleClassNames = useFocusVisibleClassName({ focusVisible, mode: 'inside' });\n const keyboardHandlers = useKeyboard();\n\n if (process.env.NODE_ENV === 'development') {\n if (children) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { size } = React.useContext(ImageBaseContext);\n validateOverlayIcon(size, { name: 'children', value: children });\n }\n }\n\n return (\n <div\n {...restProps}\n tabIndex={0}\n role=\"button\"\n className={classNames(\n styles['ImageBaseOverlay--clickable'],\n (focusVisible || overlayShown) && styles['ImageBaseOverlay--visible'],\n focusVisibleClassNames,\n className,\n )}\n ref={getRootRef}\n {...focusEvents}\n {...keyboardHandlers}\n >\n {children}\n </div>\n );\n};\n\nconst ImageBaseOverlayNonInteractive = ({\n className,\n getRootRef,\n disableInteractive,\n overlayShown: overlayShownProps,\n ...restProps\n}: ImageBaseOverlayNonInteractiveProps & { overlayShown?: boolean }) => {\n const rootRef = useExternRef(getRootRef);\n const { shown: overlayShown, onClick: onOverlayClick } = useNonInteractiveOverlayProps(rootRef);\n\n return (\n <div\n {...restProps}\n ref={rootRef}\n className={classNames(\n (overlayShown || overlayShownProps) && styles['ImageBaseOverlay--visible'],\n className,\n )}\n onClick={onOverlayClick}\n />\n );\n};\n\n/**\n * Оверлей над картинкой.\n */\nexport const ImageBaseOverlay: React.FC<ImageBaseOverlayProps> = ({\n className,\n theme: themeProp,\n visibility: visibilityProp,\n ...restProps\n}: ImageBaseOverlayProps) => {\n const appearance = useAppearance();\n const hasPointer = useAdaptivityHasPointer();\n const theme = themeProp ?? appearance;\n const visibility = visibilityProp ?? (hasPointer ? 'on-hover' : 'always');\n\n const commonClassNames = classNames(\n styles['ImageBaseOverlay'],\n theme === 'light' && styles['ImageBaseOverlay--theme-light'],\n theme === 'dark' && styles['ImageBaseOverlay--theme-dark'],\n className,\n );\n\n const commonProps = {\n className: commonClassNames,\n overlayShown: visibility === 'always',\n };\n\n // Не делаем деструктуризацию пропа, потому что Typescript не вывозит\n if (restProps.disableInteractive) {\n return <ImageBaseOverlayNonInteractive {...restProps} {...commonProps} />;\n }\n\n return <ImageBaseOverlayInteractive {...restProps} {...commonProps} />;\n};\n\nImageBaseOverlay.displayName = 'ImageBaseOverlay';\n"],"names":["ImageBaseOverlay","ImageBaseOverlayInteractive","children","className","getRootRef","disableInteractive","overlayShown","restProps","useFocusVisible","focusVisible","focusEvents","focusVisibleClassNames","useFocusVisibleClassName","mode","keyboardHandlers","useKeyboard","process","env","NODE_ENV","size","React","useContext","ImageBaseContext","validateOverlayIcon","name","value","div","tabIndex","role","classNames","ref","ImageBaseOverlayNonInteractive","overlayShownProps","rootRef","useExternRef","shown","onClick","onOverlayClick","useNonInteractiveOverlayProps","theme","themeProp","visibility","visibilityProp","appearance","useAppearance","hasPointer","useAdaptivityHasPointer","commonClassNames","commonProps","displayName"],"mappings":";;;;+BAuFaA;;;eAAAA;;;;;;;;iEAvFU;sBACI;6BACC;yCACY;+BACV;8BACD;iCACG;0CACS;yBACR;4BACG;uBACU;AAW9C,MAAMC,8BAA8B;QAAC,EACnCC,QAAQ,EACRC,SAAS,EACTC,UAAU,EACVC,kBAAkB,EAClBC,YAAY,EAEkD,WAD3DC;QALHL;QACAC;QACAC;QACAC;QACAC;;IAGA,MAAyCE,oBAAAA,IAAAA,gCAAe,KAAlD,EAAEC,YAAY,EAAkB,GAAGD,mBAAhBE,2CAAgBF;QAAjCC;;IACR,MAAME,yBAAyBC,IAAAA,kDAAwB,EAAC;QAAEH;QAAcI,MAAM;IAAS;IACvF,MAAMC,mBAAmBC,IAAAA,wBAAW;IAEpC,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C,IAAIhB,UAAU;YACZ,sDAAsD;YACtD,MAAM,EAAEiB,IAAI,EAAE,GAAGC,OAAMC,UAAU,CAACC,yBAAgB;YAClDC,IAAAA,+BAAmB,EAACJ,MAAM;gBAAEK,MAAM;gBAAYC,OAAOvB;YAAS;QAChE;IACF;IAEA,qBACE,qBAACwB,2FACKnB;QACJoB,UAAU;QACVC,MAAK;QACLzB,WAAW0B,IAAAA,gBAAU,qCAEnB,AAACpB,CAAAA,gBAAgBH,YAAW,sCAC5BK,wBACAR;QAEF2B,KAAK1B;QACDM,aACAI;kBAEHZ;;AAGP;AAEA,MAAM6B,iCAAiC;QAAC,EACtC5B,SAAS,EACTC,UAAU,EACVC,kBAAkB,EAClBC,cAAc0B,iBAAiB,EAEkC,WAD9DzB;QAJHJ;QACAC;QACAC;QACAC;;IAGA,MAAM2B,UAAUC,IAAAA,0BAAY,EAAC9B;IAC7B,MAAM,EAAE+B,OAAO7B,YAAY,EAAE8B,SAASC,cAAc,EAAE,GAAGC,IAAAA,oCAA6B,EAACL;IAEvF,qBACE,qBAACP,mDACKnB;QACJuB,KAAKG;QACL9B,WAAW0B,IAAAA,gBAAU,EACnB,AAACvB,CAAAA,gBAAgB0B,iBAAgB,sCACjC7B;QAEFiC,SAASC;;AAGf;AAKO,MAAMrC,mBAAoD;QAAC,EAChEG,SAAS,EACToC,OAAOC,SAAS,EAChBC,YAAYC,cAAc,EAEJ,WADnBnC;QAHHJ;QACAoC;QACAE;;IAGA,MAAME,aAAaC,IAAAA,4BAAa;IAChC,MAAMC,aAAaC,IAAAA,gDAAuB;IAC1C,MAAMP,QAAQC,sBAAAA,uBAAAA,YAAaG;IAC3B,MAAMF,aAAaC,2BAAAA,4BAAAA,iBAAmBG,aAAa,aAAa;IAEhE,MAAME,mBAAmBlB,IAAAA,gBAAU,0BAEjCU,UAAU,gDACVA,UAAU,8CACVpC;IAGF,MAAM6C,cAAc;QAClB7C,WAAW4C;QACXzC,cAAcmC,eAAe;IAC/B;IAEA,qEAAqE;IACrE,IAAIlC,UAAUF,kBAAkB,EAAE;QAChC,qBAAO,qBAAC0B,qDAAmCxB,WAAeyC;IAC5D;IAEA,qBAAO,qBAAC/C,kDAAgCM,WAAeyC;AACzD;AAEAhD,iBAAiBiD,WAAW,GAAG"}
@@ -0,0 +1,6 @@
1
+ import * as React from 'react';
2
+ export declare function useNonInteractiveOverlayProps(rootRef: React.MutableRefObject<HTMLElement | null>): {
3
+ shown: boolean;
4
+ onClick: (event: React.MouseEvent) => void;
5
+ };
6
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../../../src/components/ImageBase/ImageBaseOverlay/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC;;qBAIvE,KAAK,CAAC,UAAU;EAiBzC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "useNonInteractiveOverlayProps", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return useNonInteractiveOverlayProps;
9
+ }
10
+ });
11
+ const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
12
+ const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
13
+ const _useFocusWithin = require("../../../hooks/useFocusWithin");
14
+ const _useIsomorphicLayoutEffect = require("../../../lib/useIsomorphicLayoutEffect");
15
+ function useNonInteractiveOverlayProps(rootRef) {
16
+ const focusWithin = (0, _useFocusWithin.useFocusWithin)(rootRef);
17
+ const [nonInteractiveFocusShown, setNonInteractiveFocusShown] = _react.useState(false);
18
+ function onClick(event) {
19
+ if (event.detail > 0) {
20
+ // Если мы попали на вложенный в оверлей элемент через focus,
21
+ // то при клике мышкой мы должны начать реагировать на hover-состояние,
22
+ // даже если фокус всё ещё остался на вложенном элементе (был по нему клик)
23
+ setNonInteractiveFocusShown(false);
24
+ }
25
+ }
26
+ (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(()=>{
27
+ setNonInteractiveFocusShown(focusWithin);
28
+ }, [
29
+ focusWithin
30
+ ]);
31
+ return {
32
+ shown: nonInteractiveFocusShown && focusWithin,
33
+ onClick
34
+ };
35
+ }
36
+
37
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/ImageBase/ImageBaseOverlay/hooks.ts"],"sourcesContent":["import * as React from 'react';\nimport { useFocusWithin } from '../../../hooks/useFocusWithin';\nimport { useIsomorphicLayoutEffect } from '../../../lib/useIsomorphicLayoutEffect';\n\nexport function useNonInteractiveOverlayProps(rootRef: React.MutableRefObject<HTMLElement | null>) {\n const focusWithin = useFocusWithin(rootRef);\n const [nonInteractiveFocusShown, setNonInteractiveFocusShown] = React.useState(false);\n\n function onClick(event: React.MouseEvent) {\n if (event.detail > 0) {\n // Если мы попали на вложенный в оверлей элемент через focus,\n // то при клике мышкой мы должны начать реагировать на hover-состояние,\n // даже если фокус всё ещё остался на вложенном элементе (был по нему клик)\n setNonInteractiveFocusShown(false);\n }\n }\n\n useIsomorphicLayoutEffect(() => {\n setNonInteractiveFocusShown(focusWithin);\n }, [focusWithin]);\n\n return {\n shown: nonInteractiveFocusShown && focusWithin,\n onClick,\n };\n}\n"],"names":["useNonInteractiveOverlayProps","rootRef","focusWithin","useFocusWithin","nonInteractiveFocusShown","setNonInteractiveFocusShown","React","useState","onClick","event","detail","useIsomorphicLayoutEffect","shown"],"mappings":";;;;+BAIgBA;;;eAAAA;;;;iEAJO;gCACQ;2CACW;AAEnC,SAASA,8BAA8BC,OAAmD;IAC/F,MAAMC,cAAcC,IAAAA,8BAAc,EAACF;IACnC,MAAM,CAACG,0BAA0BC,4BAA4B,GAAGC,OAAMC,QAAQ,CAAC;IAE/E,SAASC,QAAQC,KAAuB;QACtC,IAAIA,MAAMC,MAAM,GAAG,GAAG;YACpB,6DAA6D;YAC7D,uEAAuE;YACvE,2EAA2E;YAC3EL,4BAA4B;QAC9B;IACF;IAEAM,IAAAA,oDAAyB,EAAC;QACxBN,4BAA4BH;IAC9B,GAAG;QAACA;KAAY;IAEhB,OAAO;QACLU,OAAOR,4BAA4BF;QACnCM;IACF;AACF"}
@@ -0,0 +1,54 @@
1
+ import * as React from 'react';
2
+ import { HasRootRef } from '../../../types';
3
+ import type { ImageBaseExpectedIconProps } from '../types';
4
+ export interface ImageBaseOverlayCommonProps extends React.AriaAttributes, HasRootRef<HTMLDivElement> {
5
+ /**
6
+ * Задаёт тему оформления.
7
+ *
8
+ * > По умолчанию берётся из параметра `appearance` в `ConfigProvider`.
9
+ */
10
+ theme?: 'dark' | 'light';
11
+ /**
12
+ * Определяет каким образом должен показываться оверлей.
13
+ *
14
+ * - `"on-hover"` – на наведение указателя мыши.
15
+ * - `"always"` – всегда показывать.
16
+ *
17
+ * > По умолчанию определяется в зависимости от того, есть ли у пользователя мышь или нет.
18
+ */
19
+ visibility?: 'on-hover' | 'always';
20
+ className?: string;
21
+ }
22
+ export interface ImageBaseOverlayInteractiveProps extends ImageBaseOverlayCommonProps {
23
+ /**
24
+ * Обработчик взаимодействия с элементом.
25
+ * Свойство несовместимо с `nonInteractive={true}`.
26
+ */
27
+ onClick?: React.MouseEventHandler<HTMLElement>;
28
+ /**
29
+ * Принимает иконку.
30
+ *
31
+ *
32
+ * > 📝 Нужный для `<ImageBase size={...} />` размер можно узнать из функции `getOverlayIconSizeByImageBaseSize()`.
33
+ *
34
+ * > Предпочтительней использовать иконки из `@vkontakte/icons`.
35
+ *
36
+ * > 📊️ Если вы хотите передать кастомную иконку, то следует именовать её по шаблону `Icon<size><name>`. Или же
37
+ * > чтобы в неё был передан параметр `width`. Тогда мы сможем выводить в консоль подсказку правильного ли размера вы
38
+ * > использовали иконку.
39
+ */
40
+ children: React.ReactElement<ImageBaseExpectedIconProps>;
41
+ disableInteractive?: false;
42
+ }
43
+ export interface ImageBaseOverlayNonInteractiveProps extends ImageBaseOverlayCommonProps {
44
+ /**
45
+ * По умолчанию сам компонент является интерактивным элементом. Передав значение `true`, можно отключить
46
+ * такое поведение, что дает возможность передавать отдельные интерактивные элементы в `children`.
47
+ *
48
+ * TODO [>=7]: для определения интерактивности завязываться на св-во `onClick`
49
+ */
50
+ disableInteractive: true;
51
+ onClick?: undefined;
52
+ children: React.ReactNode;
53
+ }
54
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/components/ImageBase/ImageBaseOverlay/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAE3D,MAAM,WAAW,2BACf,SAAQ,KAAK,CAAC,cAAc,EAC1B,UAAU,CAAC,cAAc,CAAC;IAC5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gCAAiC,SAAQ,2BAA2B;IACnF;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC/C;;;;;;;;;;;OAWG;IACH,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;IACzD,kBAAkB,CAAC,EAAE,KAAK,CAAC;CAC5B;AAED,MAAM,WAAW,mCAAoC,SAAQ,2BAA2B;IACtF;;;;;OAKG;IACH,kBAAkB,EAAE,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
6
+ const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
7
+
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/ImageBase/ImageBaseOverlay/types.ts"],"sourcesContent":["import * as React from 'react';\nimport { HasRootRef } from '../../../types';\nimport type { ImageBaseExpectedIconProps } from '../types';\n\nexport interface ImageBaseOverlayCommonProps\n extends React.AriaAttributes,\n HasRootRef<HTMLDivElement> {\n /**\n * Задаёт тему оформления.\n *\n * > По умолчанию берётся из параметра `appearance` в `ConfigProvider`.\n */\n theme?: 'dark' | 'light';\n /**\n * Определяет каким образом должен показываться оверлей.\n *\n * - `\"on-hover\"` – на наведение указателя мыши.\n * - `\"always\"` – всегда показывать.\n *\n * > По умолчанию определяется в зависимости от того, есть ли у пользователя мышь или нет.\n */\n visibility?: 'on-hover' | 'always';\n className?: string;\n}\n\nexport interface ImageBaseOverlayInteractiveProps extends ImageBaseOverlayCommonProps {\n /**\n * Обработчик взаимодействия с элементом.\n * Свойство несовместимо с `nonInteractive={true}`.\n */\n onClick?: React.MouseEventHandler<HTMLElement>;\n /**\n * Принимает иконку.\n *\n *\n * > 📝 Нужный для `<ImageBase size={...} />` размер можно узнать из функции `getOverlayIconSizeByImageBaseSize()`.\n *\n * > Предпочтительней использовать иконки из `@vkontakte/icons`.\n *\n * > 📊️ Если вы хотите передать кастомную иконку, то следует именовать её по шаблону `Icon<size><name>`. Или же\n * > чтобы в неё был передан параметр `width`. Тогда мы сможем выводить в консоль подсказку правильного ли размера вы\n * > использовали иконку.\n */\n children: React.ReactElement<ImageBaseExpectedIconProps>;\n disableInteractive?: false;\n}\n\nexport interface ImageBaseOverlayNonInteractiveProps extends ImageBaseOverlayCommonProps {\n /**\n * По умолчанию сам компонент является интерактивным элементом. Передав значение `true`, можно отключить\n * такое поведение, что дает возможность передавать отдельные интерактивные элементы в `children`.\n *\n * TODO [>=7]: для определения интерактивности завязываться на св-во `onClick`\n */\n disableInteractive: true;\n onClick?: undefined;\n children: React.ReactNode;\n}\n"],"names":[],"mappings":";;;;;iEAAuB"}
@@ -1 +1 @@
1
- {"version":3,"file":"PanelHeaderContext.d.ts","sourceRoot":"","sources":["../../../../src/components/PanelHeaderContext/PanelHeaderContext.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAW7D,MAAM,WAAW,uBAAwB,SAAQ,yBAAyB,CAAC,cAAc,CAAC;IACxF,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,2DAM5B,uBAAuB,mDAwDzB,CAAC"}
1
+ {"version":3,"file":"PanelHeaderContext.d.ts","sourceRoot":"","sources":["../../../../src/components/PanelHeaderContext/PanelHeaderContext.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAW7D,MAAM,WAAW,uBAAwB,SAAQ,yBAAyB,CAAC,cAAc,CAAC;IACxF,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,2DAM5B,uBAAuB,mDA0DzB,CAAC"}
@@ -36,7 +36,7 @@ const PanelHeaderContext = (_param)=>{
36
36
  const platform = (0, _usePlatform.usePlatform)();
37
37
  const { sizeX = 'none' } = (0, _useAdaptivity.useAdaptivity)();
38
38
  const elementRef = _react.useRef(null);
39
- const [animationState, animationHandlers] = (0, _animation.useCSSKeyframesAnimationController)(opened ? 'enter' : 'exit');
39
+ const [animationState, animationHandlers] = (0, _animation.useCSSKeyframesAnimationController)(opened ? 'enter' : 'exit', undefined, true);
40
40
  const visible = animationState !== 'exited';
41
41
  (0, _ScrollContext.useScrollLock)(platform !== 'vkcom' && visible);
42
42
  const handleGlobalOnClickOutside = _react.useCallback((event)=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/PanelHeaderContext/PanelHeaderContext.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useGlobalOnClickOutside } from '../../hooks/useGlobalOnClickOutside';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useCSSKeyframesAnimationController } from '../../lib/animation';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { FixedLayout } from '../FixedLayout/FixedLayout';\nimport styles from './PanelHeaderContext.module.css';\n\nconst sizeXClassNames = {\n none: styles['PanelHeaderContext--sizeX-none'],\n compact: styles['PanelHeaderContext--sizeX-compact'],\n regular: styles['PanelHeaderContext--sizeX-regular'],\n};\n\nexport interface PanelHeaderContextProps extends HTMLAttributesWithRootRef<HTMLDivElement> {\n opened: boolean;\n onClose: VoidFunction;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PanelHeaderContext\n */\nexport const PanelHeaderContext = ({\n children,\n opened = false,\n className,\n onClose,\n ...restProps\n}: PanelHeaderContextProps) => {\n const platform = usePlatform();\n const { sizeX = 'none' } = useAdaptivity();\n const elementRef = React.useRef<HTMLDivElement>(null);\n const [animationState, animationHandlers] = useCSSKeyframesAnimationController(\n opened ? 'enter' : 'exit',\n );\n const visible = animationState !== 'exited';\n\n useScrollLock(platform !== 'vkcom' && visible);\n\n const handleGlobalOnClickOutside = React.useCallback(\n (event: MouseEvent) => {\n if (opened) {\n event.stopPropagation();\n onClose();\n }\n },\n [opened, onClose],\n );\n\n useGlobalOnClickOutside(handleGlobalOnClickOutside, visible ? elementRef : null);\n\n if (!visible) {\n return null;\n }\n\n return (\n <FixedLayout\n {...restProps}\n className={classNames(\n styles['PanelHeaderContext'],\n platform === 'ios' && styles['PanelHeaderContext--ios'],\n opened ? styles['PanelHeaderContext--opened'] : styles['PanelHeaderContext--closing'],\n sizeXClassNames[sizeX],\n className,\n )}\n vertical=\"top\"\n >\n <div\n onClick={(event) => {\n event.stopPropagation();\n onClose();\n }}\n className={styles['PanelHeaderContext__fade']}\n />\n <div\n data-testid={process.env.NODE_ENV === 'test' ? 'content' : undefined}\n className={styles['PanelHeaderContext__in']}\n ref={elementRef}\n {...animationHandlers}\n >\n <div className={styles['PanelHeaderContext__content']}>{children}</div>\n </div>\n </FixedLayout>\n );\n};\n"],"names":["PanelHeaderContext","sizeXClassNames","none","compact","regular","children","opened","className","onClose","restProps","platform","usePlatform","sizeX","useAdaptivity","elementRef","React","useRef","animationState","animationHandlers","useCSSKeyframesAnimationController","visible","useScrollLock","handleGlobalOnClickOutside","useCallback","event","stopPropagation","useGlobalOnClickOutside","FixedLayout","classNames","vertical","div","onClick","data-testid","process","env","NODE_ENV","undefined","ref"],"mappings":";;;;+BAyBaA;;;eAAAA;;;;;;;;iEAzBU;sBACI;+BACG;yCACU;6BACZ;2BACuB;+BAErB;6BACF;AAG5B,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;IACPC,OAAO;AACT;AAUO,MAAMJ,qBAAqB;QAAC,EACjCK,QAAQ,EACRC,SAAS,KAAK,EACdC,SAAS,EACTC,OAAO,EAEiB,WADrBC;QAJHJ;QACAC;QACAC;QACAC;;IAGA,MAAME,WAAWC,IAAAA,wBAAW;IAC5B,MAAM,EAAEC,QAAQ,MAAM,EAAE,GAAGC,IAAAA,4BAAa;IACxC,MAAMC,aAAaC,OAAMC,MAAM,CAAiB;IAChD,MAAM,CAACC,gBAAgBC,kBAAkB,GAAGC,IAAAA,6CAAkC,EAC5Eb,SAAS,UAAU;IAErB,MAAMc,UAAUH,mBAAmB;IAEnCI,IAAAA,4BAAa,EAACX,aAAa,WAAWU;IAEtC,MAAME,6BAA6BP,OAAMQ,WAAW,CAClD,CAACC;QACC,IAAIlB,QAAQ;YACVkB,MAAMC,eAAe;YACrBjB;QACF;IACF,GACA;QAACF;QAAQE;KAAQ;IAGnBkB,IAAAA,gDAAuB,EAACJ,4BAA4BF,UAAUN,aAAa;IAE3E,IAAI,CAACM,SAAS;QACZ,OAAO;IACT;IAEA,qBACE,sBAACO,wBAAW,8CACNlB;QACJF,WAAWqB,IAAAA,gBAAU,4BAEnBlB,aAAa,wCACbJ,+EACAL,eAAe,CAACW,MAAM,EACtBL;QAEFsB,UAAS;;0BAET,qBAACC;gBACCC,SAAS,CAACP;oBACRA,MAAMC,eAAe;oBACrBjB;gBACF;gBACAD,SAAS;;0BAEX,qBAACuB;gBACCE,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,YAAYC;gBAC3D7B,SAAS;gBACT8B,KAAKvB;eACDI;0BAEJ,cAAA,qBAACY;oBAAIvB,SAAS;8BAA0CF;;;;;AAIhE"}
1
+ {"version":3,"sources":["../../../../src/components/PanelHeaderContext/PanelHeaderContext.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useGlobalOnClickOutside } from '../../hooks/useGlobalOnClickOutside';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { useCSSKeyframesAnimationController } from '../../lib/animation';\nimport type { HTMLAttributesWithRootRef } from '../../types';\nimport { useScrollLock } from '../AppRoot/ScrollContext';\nimport { FixedLayout } from '../FixedLayout/FixedLayout';\nimport styles from './PanelHeaderContext.module.css';\n\nconst sizeXClassNames = {\n none: styles['PanelHeaderContext--sizeX-none'],\n compact: styles['PanelHeaderContext--sizeX-compact'],\n regular: styles['PanelHeaderContext--sizeX-regular'],\n};\n\nexport interface PanelHeaderContextProps extends HTMLAttributesWithRootRef<HTMLDivElement> {\n opened: boolean;\n onClose: VoidFunction;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/PanelHeaderContext\n */\nexport const PanelHeaderContext = ({\n children,\n opened = false,\n className,\n onClose,\n ...restProps\n}: PanelHeaderContextProps) => {\n const platform = usePlatform();\n const { sizeX = 'none' } = useAdaptivity();\n const elementRef = React.useRef<HTMLDivElement>(null);\n const [animationState, animationHandlers] = useCSSKeyframesAnimationController(\n opened ? 'enter' : 'exit',\n undefined,\n true,\n );\n const visible = animationState !== 'exited';\n\n useScrollLock(platform !== 'vkcom' && visible);\n\n const handleGlobalOnClickOutside = React.useCallback(\n (event: MouseEvent) => {\n if (opened) {\n event.stopPropagation();\n onClose();\n }\n },\n [opened, onClose],\n );\n\n useGlobalOnClickOutside(handleGlobalOnClickOutside, visible ? elementRef : null);\n\n if (!visible) {\n return null;\n }\n\n return (\n <FixedLayout\n {...restProps}\n className={classNames(\n styles['PanelHeaderContext'],\n platform === 'ios' && styles['PanelHeaderContext--ios'],\n opened ? styles['PanelHeaderContext--opened'] : styles['PanelHeaderContext--closing'],\n sizeXClassNames[sizeX],\n className,\n )}\n vertical=\"top\"\n >\n <div\n onClick={(event) => {\n event.stopPropagation();\n onClose();\n }}\n className={styles['PanelHeaderContext__fade']}\n />\n <div\n data-testid={process.env.NODE_ENV === 'test' ? 'content' : undefined}\n className={styles['PanelHeaderContext__in']}\n ref={elementRef}\n {...animationHandlers}\n >\n <div className={styles['PanelHeaderContext__content']}>{children}</div>\n </div>\n </FixedLayout>\n );\n};\n"],"names":["PanelHeaderContext","sizeXClassNames","none","compact","regular","children","opened","className","onClose","restProps","platform","usePlatform","sizeX","useAdaptivity","elementRef","React","useRef","animationState","animationHandlers","useCSSKeyframesAnimationController","undefined","visible","useScrollLock","handleGlobalOnClickOutside","useCallback","event","stopPropagation","useGlobalOnClickOutside","FixedLayout","classNames","vertical","div","onClick","data-testid","process","env","NODE_ENV","ref"],"mappings":";;;;+BAyBaA;;;eAAAA;;;;;;;;iEAzBU;sBACI;+BACG;yCACU;6BACZ;2BACuB;+BAErB;6BACF;AAG5B,MAAMC,kBAAkB;IACtBC,IAAI;IACJC,OAAO;IACPC,OAAO;AACT;AAUO,MAAMJ,qBAAqB;QAAC,EACjCK,QAAQ,EACRC,SAAS,KAAK,EACdC,SAAS,EACTC,OAAO,EAEiB,WADrBC;QAJHJ;QACAC;QACAC;QACAC;;IAGA,MAAME,WAAWC,IAAAA,wBAAW;IAC5B,MAAM,EAAEC,QAAQ,MAAM,EAAE,GAAGC,IAAAA,4BAAa;IACxC,MAAMC,aAAaC,OAAMC,MAAM,CAAiB;IAChD,MAAM,CAACC,gBAAgBC,kBAAkB,GAAGC,IAAAA,6CAAkC,EAC5Eb,SAAS,UAAU,QACnBc,WACA;IAEF,MAAMC,UAAUJ,mBAAmB;IAEnCK,IAAAA,4BAAa,EAACZ,aAAa,WAAWW;IAEtC,MAAME,6BAA6BR,OAAMS,WAAW,CAClD,CAACC;QACC,IAAInB,QAAQ;YACVmB,MAAMC,eAAe;YACrBlB;QACF;IACF,GACA;QAACF;QAAQE;KAAQ;IAGnBmB,IAAAA,gDAAuB,EAACJ,4BAA4BF,UAAUP,aAAa;IAE3E,IAAI,CAACO,SAAS;QACZ,OAAO;IACT;IAEA,qBACE,sBAACO,wBAAW,8CACNnB;QACJF,WAAWsB,IAAAA,gBAAU,4BAEnBnB,aAAa,wCACbJ,+EACAL,eAAe,CAACW,MAAM,EACtBL;QAEFuB,UAAS;;0BAET,qBAACC;gBACCC,SAAS,CAACP;oBACRA,MAAMC,eAAe;oBACrBlB;gBACF;gBACAD,SAAS;;0BAEX,qBAACwB;gBACCE,eAAaC,QAAQC,GAAG,CAACC,QAAQ,KAAK,SAAS,YAAYhB;gBAC3Db,SAAS;gBACT8B,KAAKvB;eACDI;0BAEJ,cAAA,qBAACa;oBAAIxB,SAAS;8BAA0CF;;;;;AAIhE"}
@@ -16,7 +16,7 @@ export type PopoverOnShownChange = OnShownChange;
16
16
  * @public
17
17
  */
18
18
  export type PopoverContentRenderProp = FloatingContentRenderProp;
19
- type AllowedFloatingComponentProps = Pick<FloatingComponentProps, 'arrow' | 'arrowHeight' | 'arrowPadding' | 'placement' | 'onPlacementChange' | 'trigger' | 'content' | 'hoverDelay' | 'closeAfterClick' | 'offsetByMainAxis' | 'offsetByCrossAxis' | 'defaultShown' | 'shown' | 'onShownChange' | 'usePortal' | 'sameWidth' | 'hideWhenReferenceHidden' | 'disabled' | 'disableInteractive' | 'disableCloseOnClickOutside' | 'disableCloseOnEscKey' | 'autoFocus' | 'restoreFocus' | 'children' | 'zIndex' | 'disableFlipMiddleware'>;
19
+ type AllowedFloatingComponentProps = Pick<FloatingComponentProps, 'arrow' | 'arrowHeight' | 'arrowPadding' | 'placement' | 'onPlacementChange' | 'trigger' | 'content' | 'hoverDelay' | 'closeAfterClick' | 'offsetByMainAxis' | 'offsetByCrossAxis' | 'defaultShown' | 'shown' | 'onShownChange' | 'usePortal' | 'sameWidth' | 'hideWhenReferenceHidden' | 'disabled' | 'disableInteractive' | 'disableCloseOnClickOutside' | 'disableCloseOnEscKey' | 'autoFocus' | 'restoreFocus' | 'children' | 'zIndex' | 'disableFlipMiddleware' | 'customMiddlewares'>;
20
20
  /**
21
21
  * @public
22
22
  */
@@ -62,6 +62,6 @@ export interface PopoverProps extends AllowedFloatingComponentProps, Omit<HTMLAt
62
62
  /**
63
63
  * @see https://vkcom.github.io/VKUI/#/Popover
64
64
  */
65
- export declare const Popover: ({ arrow: withArrow, arrowHeight, arrowPadding, placement: expectedPlacement, onPlacementChange, disableFlipMiddleware, trigger, content, hoverDelay, closeAfterClick, offsetByMainAxis, offsetByCrossAxis, sameWidth, hideWhenReferenceHidden, disabled, disableInteractive, disableCloseOnClickOutside, disableCloseOnEscKey, keepMounted, defaultShown, shown: shownProp, onShownChange, usePortal, arrowProps, ArrowIcon, autoFocus, restoreFocus, className, children, noStyling, zIndex, role, ...restPopoverProps }: PopoverProps) => import("react/jsx-runtime").JSX.Element;
65
+ export declare const Popover: ({ arrow: withArrow, arrowHeight, arrowPadding, placement: expectedPlacement, onPlacementChange, disableFlipMiddleware, trigger, content, hoverDelay, closeAfterClick, offsetByMainAxis, offsetByCrossAxis, sameWidth, hideWhenReferenceHidden, disabled, disableInteractive, disableCloseOnClickOutside, disableCloseOnEscKey, keepMounted, customMiddlewares, defaultShown, shown: shownProp, onShownChange, usePortal, arrowProps, ArrowIcon, autoFocus, restoreFocus, className, children, noStyling, zIndex, role, ...restPopoverProps }: PopoverProps) => import("react/jsx-runtime").JSX.Element;
66
66
  export {};
67
67
  //# sourceMappingURL=Popover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.d.ts","sourceRoot":"","sources":["../../../../src/components/Popover/Popover.tsx"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAInB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAO7D,OAAO,EAEL,KAAK,kBAAkB,IAAI,yBAAyB,EACrD,MAAM,gCAAgC,CAAC;AAIxC;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,yBAAyB,EACzB,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAC/C,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAEjE,KAAK,6BAA6B,GAAG,IAAI,CACvC,sBAAsB,EACpB,OAAO,GACP,aAAa,GACb,cAAc,GACd,WAAW,GACX,mBAAmB,GACnB,SAAS,GACT,SAAS,GACT,YAAY,GACZ,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,GACnB,cAAc,GACd,OAAO,GACP,eAAe,GACf,WAAW,GACX,WAAW,GACX,yBAAyB,GACzB,UAAU,GACV,oBAAoB,GACpB,4BAA4B,GAC5B,sBAAsB,GACtB,WAAW,GACX,cAAc,GACd,UAAU,GACV,QAAQ,GACR,uBAAuB,CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,YACf,SAAQ,6BAA6B,EACnC,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,MAAM,sBAAsB,CAAC;IAC/E;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC9C;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,8fA4CjB,YAAY,4CA2Gd,CAAC"}
1
+ {"version":3,"file":"Popover.d.ts","sourceRoot":"","sources":["../../../../src/components/Popover/Popover.tsx"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAInB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAO7D,OAAO,EAEL,KAAK,kBAAkB,IAAI,yBAAyB,EACrD,MAAM,gCAAgC,CAAC;AAIxC;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,yBAAyB,EACzB,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAC/C,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAEjE,KAAK,6BAA6B,GAAG,IAAI,CACvC,sBAAsB,EACpB,OAAO,GACP,aAAa,GACb,cAAc,GACd,WAAW,GACX,mBAAmB,GACnB,SAAS,GACT,SAAS,GACT,YAAY,GACZ,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,GACnB,cAAc,GACd,OAAO,GACP,eAAe,GACf,WAAW,GACX,WAAW,GACX,yBAAyB,GACzB,UAAU,GACV,oBAAoB,GACpB,4BAA4B,GAC5B,sBAAsB,GACtB,WAAW,GACX,cAAc,GACd,UAAU,GACV,QAAQ,GACR,uBAAuB,GACvB,mBAAmB,CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,YACf,SAAQ,6BAA6B,EACnC,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,EAAE,MAAM,sBAAsB,CAAC;IAC/E;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC9C;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,ihBA6CjB,YAAY,4CA4Gd,CAAC"}
@@ -25,7 +25,7 @@ const _FloatingArrow = require("../FloatingArrow/FloatingArrow");
25
25
  const _FocusTrap = require("../FocusTrap/FocusTrap");
26
26
  const Popover = (_param)=>{
27
27
  var { // UsePopoverProps
28
- arrow: withArrow, arrowHeight = _DefaultIcon.DEFAULT_ARROW_HEIGHT, arrowPadding = _DefaultIcon.DEFAULT_ARROW_PADDING, placement: expectedPlacement = 'bottom-start', onPlacementChange, disableFlipMiddleware = false, trigger = 'click', content, hoverDelay = 150, closeAfterClick, offsetByMainAxis = 8, offsetByCrossAxis = 0, sameWidth, hideWhenReferenceHidden, disabled, disableInteractive, disableCloseOnClickOutside, disableCloseOnEscKey, keepMounted = false, // uncontrolled
28
+ arrow: withArrow, arrowHeight = _DefaultIcon.DEFAULT_ARROW_HEIGHT, arrowPadding = _DefaultIcon.DEFAULT_ARROW_PADDING, placement: expectedPlacement = 'bottom-start', onPlacementChange, disableFlipMiddleware = false, trigger = 'click', content, hoverDelay = 150, closeAfterClick, offsetByMainAxis = 8, offsetByCrossAxis = 0, sameWidth, hideWhenReferenceHidden, disabled, disableInteractive, disableCloseOnClickOutside, disableCloseOnEscKey, keepMounted = false, customMiddlewares, // uncontrolled
29
29
  defaultShown = false, // controlled
30
30
  shown: shownProp, onShownChange, // Для AppRootPortal
31
31
  usePortal = true, // Для FloatingArrow
@@ -51,6 +51,7 @@ const Popover = (_param)=>{
51
51
  "disableCloseOnClickOutside",
52
52
  "disableCloseOnEscKey",
53
53
  "keepMounted",
54
+ "customMiddlewares",
54
55
  "defaultShown",
55
56
  "shown",
56
57
  "onShownChange",
@@ -76,7 +77,8 @@ const Popover = (_param)=>{
76
77
  offsetByCrossAxis,
77
78
  sameWidth,
78
79
  hideWhenReferenceHidden,
79
- disableFlipMiddleware
80
+ disableFlipMiddleware,
81
+ customMiddlewares
80
82
  });
81
83
  const { placement: resolvedPlacement, shown, willBeHide, refs, referenceProps, floatingProps, middlewareData, onClose, onRestoreFocus, onEscapeKeyDown } = (0, _floating.useFloatingWithInteractions)({
82
84
  middlewares,