@vkontakte/vkui 6.1.0 → 6.1.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 (167) hide show
  1. package/dist/cjs/components/Clickable/useState.d.ts.map +1 -1
  2. package/dist/cjs/components/Clickable/useState.js +7 -6
  3. package/dist/cjs/components/Clickable/useState.js.map +1 -1
  4. package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  5. package/dist/cjs/components/CustomScrollView/CustomScrollView.js +8 -1
  6. package/dist/cjs/components/CustomScrollView/CustomScrollView.js.map +1 -1
  7. package/dist/cjs/components/DatePicker/DatePicker.d.ts +3 -2
  8. package/dist/cjs/components/DatePicker/DatePicker.d.ts.map +1 -1
  9. package/dist/cjs/components/DatePicker/DatePicker.js +64 -50
  10. package/dist/cjs/components/DatePicker/DatePicker.js.map +1 -1
  11. package/dist/cjs/components/FocusTrap/FocusTrap.d.ts +2 -2
  12. package/dist/cjs/components/FocusTrap/FocusTrap.d.ts.map +1 -1
  13. package/dist/cjs/components/FocusTrap/FocusTrap.js +36 -11
  14. package/dist/cjs/components/FocusTrap/FocusTrap.js.map +1 -1
  15. package/dist/cjs/components/Select/Select.d.ts +1 -1
  16. package/dist/cjs/components/Select/Select.d.ts.map +1 -1
  17. package/dist/cjs/components/Select/Select.js +12 -6
  18. package/dist/cjs/components/Select/Select.js.map +1 -1
  19. package/dist/cjs/components/Spacing/Spacing.d.ts +16 -5
  20. package/dist/cjs/components/Spacing/Spacing.d.ts.map +1 -1
  21. package/dist/cjs/components/Spacing/Spacing.js +38 -31
  22. package/dist/cjs/components/Spacing/Spacing.js.map +1 -1
  23. package/dist/cjs/components/SplitLayout/SplitLayout.js +2 -2
  24. package/dist/cjs/components/SplitLayout/SplitLayout.js.map +1 -1
  25. package/dist/cjs/components/ToolButton/ToolButton.d.ts +5 -0
  26. package/dist/cjs/components/ToolButton/ToolButton.d.ts.map +1 -1
  27. package/dist/cjs/components/ToolButton/ToolButton.js +2 -1
  28. package/dist/cjs/components/ToolButton/ToolButton.js.map +1 -1
  29. package/dist/cjs/hooks/useDraggableWithDomApi/autoScroll.d.ts +0 -1
  30. package/dist/cjs/hooks/useDraggableWithDomApi/autoScroll.d.ts.map +1 -1
  31. package/dist/cjs/hooks/useDraggableWithDomApi/autoScroll.js +1 -5
  32. package/dist/cjs/hooks/useDraggableWithDomApi/autoScroll.js.map +1 -1
  33. package/dist/cjs/hooks/useResizeObserver.d.ts +6 -0
  34. package/dist/cjs/hooks/useResizeObserver.d.ts.map +1 -0
  35. package/dist/cjs/hooks/useResizeObserver.js +32 -0
  36. package/dist/cjs/hooks/useResizeObserver.js.map +1 -0
  37. package/dist/cjs/lib/floating/customResizeObserver.d.ts.map +1 -1
  38. package/dist/cjs/lib/floating/customResizeObserver.js +2 -1
  39. package/dist/cjs/lib/floating/customResizeObserver.js.map +1 -1
  40. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  41. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +11 -1
  42. package/dist/cjs/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  43. package/dist/cjs/lib/utils.d.ts.map +1 -1
  44. package/dist/cjs/lib/utils.js +1 -2
  45. package/dist/cjs/lib/utils.js.map +1 -1
  46. package/dist/components/Clickable/useState.d.ts.map +1 -1
  47. package/dist/components/Clickable/useState.js +7 -6
  48. package/dist/components/Clickable/useState.js.map +1 -1
  49. package/dist/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  50. package/dist/components/CustomScrollView/CustomScrollView.js +8 -1
  51. package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
  52. package/dist/components/DatePicker/DatePicker.d.ts +3 -2
  53. package/dist/components/DatePicker/DatePicker.d.ts.map +1 -1
  54. package/dist/components/DatePicker/DatePicker.js +64 -50
  55. package/dist/components/DatePicker/DatePicker.js.map +1 -1
  56. package/dist/components/FocusTrap/FocusTrap.d.ts +2 -2
  57. package/dist/components/FocusTrap/FocusTrap.d.ts.map +1 -1
  58. package/dist/components/FocusTrap/FocusTrap.js +37 -11
  59. package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
  60. package/dist/components/Select/Select.d.ts +1 -1
  61. package/dist/components/Select/Select.d.ts.map +1 -1
  62. package/dist/components/Select/Select.js +12 -6
  63. package/dist/components/Select/Select.js.map +1 -1
  64. package/dist/components/Spacing/Spacing.d.ts +16 -5
  65. package/dist/components/Spacing/Spacing.d.ts.map +1 -1
  66. package/dist/components/Spacing/Spacing.js +33 -28
  67. package/dist/components/Spacing/Spacing.js.map +1 -1
  68. package/dist/components/SplitLayout/SplitLayout.js +2 -2
  69. package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
  70. package/dist/components/ToolButton/ToolButton.d.ts +5 -0
  71. package/dist/components/ToolButton/ToolButton.d.ts.map +1 -1
  72. package/dist/components/ToolButton/ToolButton.js +2 -1
  73. package/dist/components/ToolButton/ToolButton.js.map +1 -1
  74. package/dist/components.css +6 -6
  75. package/dist/components.css.map +1 -1
  76. package/dist/components.js.tmp +542 -399
  77. package/dist/cssm/components/Clickable/useState.d.ts.map +1 -1
  78. package/dist/cssm/components/Clickable/useState.js +7 -6
  79. package/dist/cssm/components/Clickable/useState.js.map +1 -1
  80. package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  81. package/dist/cssm/components/CustomScrollView/CustomScrollView.js +8 -1
  82. package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
  83. package/dist/cssm/components/CustomScrollView/CustomScrollView.module.css +4 -0
  84. package/dist/cssm/components/DatePicker/DatePicker.d.ts +3 -2
  85. package/dist/cssm/components/DatePicker/DatePicker.d.ts.map +1 -1
  86. package/dist/cssm/components/DatePicker/DatePicker.js +57 -41
  87. package/dist/cssm/components/DatePicker/DatePicker.js.map +1 -1
  88. package/dist/cssm/components/FocusTrap/FocusTrap.d.ts +2 -2
  89. package/dist/cssm/components/FocusTrap/FocusTrap.d.ts.map +1 -1
  90. package/dist/cssm/components/FocusTrap/FocusTrap.js +37 -11
  91. package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
  92. package/dist/cssm/components/Select/Select.d.ts +1 -1
  93. package/dist/cssm/components/Select/Select.d.ts.map +1 -1
  94. package/dist/cssm/components/Select/Select.js +8 -5
  95. package/dist/cssm/components/Select/Select.js.map +1 -1
  96. package/dist/cssm/components/Spacing/Spacing.d.ts +16 -5
  97. package/dist/cssm/components/Spacing/Spacing.d.ts.map +1 -1
  98. package/dist/cssm/components/Spacing/Spacing.js +31 -30
  99. package/dist/cssm/components/Spacing/Spacing.js.map +1 -1
  100. package/dist/cssm/components/Spacing/Spacing.module.css +44 -0
  101. package/dist/cssm/components/SplitLayout/SplitLayout.js +2 -2
  102. package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
  103. package/dist/cssm/components/SplitLayout/SplitLayout.module.css +1 -1
  104. package/dist/cssm/components/Textarea/Textarea.module.css +1 -0
  105. package/dist/cssm/components/ToolButton/ToolButton.d.ts +5 -0
  106. package/dist/cssm/components/ToolButton/ToolButton.d.ts.map +1 -1
  107. package/dist/cssm/components/ToolButton/ToolButton.js +2 -1
  108. package/dist/cssm/components/ToolButton/ToolButton.js.map +1 -1
  109. package/dist/cssm/components/ToolButton/ToolButton.module.css +6 -20
  110. package/dist/cssm/hooks/useDraggableWithDomApi/autoScroll.d.ts +0 -1
  111. package/dist/cssm/hooks/useDraggableWithDomApi/autoScroll.d.ts.map +1 -1
  112. package/dist/cssm/hooks/useDraggableWithDomApi/autoScroll.js +1 -2
  113. package/dist/cssm/hooks/useDraggableWithDomApi/autoScroll.js.map +1 -1
  114. package/dist/cssm/hooks/useResizeObserver.d.ts +6 -0
  115. package/dist/cssm/hooks/useResizeObserver.d.ts.map +1 -0
  116. package/dist/cssm/hooks/useResizeObserver.js +23 -0
  117. package/dist/cssm/hooks/useResizeObserver.js.map +1 -0
  118. package/dist/cssm/lib/floating/customResizeObserver.d.ts.map +1 -1
  119. package/dist/cssm/lib/floating/customResizeObserver.js +2 -1
  120. package/dist/cssm/lib/floating/customResizeObserver.js.map +1 -1
  121. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  122. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +11 -1
  123. package/dist/cssm/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  124. package/dist/cssm/lib/utils.d.ts.map +1 -1
  125. package/dist/cssm/lib/utils.js +1 -2
  126. package/dist/cssm/lib/utils.js.map +1 -1
  127. package/dist/cssm/styles/adaptivity.module.css +1 -2
  128. package/dist/hooks/useDraggableWithDomApi/autoScroll.d.ts +0 -1
  129. package/dist/hooks/useDraggableWithDomApi/autoScroll.d.ts.map +1 -1
  130. package/dist/hooks/useDraggableWithDomApi/autoScroll.js +1 -2
  131. package/dist/hooks/useDraggableWithDomApi/autoScroll.js.map +1 -1
  132. package/dist/hooks/useResizeObserver.d.ts +6 -0
  133. package/dist/hooks/useResizeObserver.d.ts.map +1 -0
  134. package/dist/hooks/useResizeObserver.js +23 -0
  135. package/dist/hooks/useResizeObserver.js.map +1 -0
  136. package/dist/lib/floating/customResizeObserver.d.ts.map +1 -1
  137. package/dist/lib/floating/customResizeObserver.js +2 -1
  138. package/dist/lib/floating/customResizeObserver.js.map +1 -1
  139. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.d.ts.map +1 -1
  140. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js +11 -1
  141. package/dist/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.js.map +1 -1
  142. package/dist/lib/utils.d.ts.map +1 -1
  143. package/dist/lib/utils.js +1 -2
  144. package/dist/lib/utils.js.map +1 -1
  145. package/dist/vkui.css +6 -6
  146. package/dist/vkui.css.map +1 -1
  147. package/dist/vkui.js.tmp +542 -399
  148. package/package.json +1 -1
  149. package/src/components/Clickable/useState.tsx +16 -6
  150. package/src/components/CustomScrollView/CustomScrollView.module.css +4 -0
  151. package/src/components/CustomScrollView/CustomScrollView.tsx +7 -1
  152. package/src/components/DatePicker/DatePicker.tsx +80 -45
  153. package/src/components/FocusTrap/FocusTrap.tsx +54 -20
  154. package/src/components/Select/Select.tsx +12 -5
  155. package/src/components/Spacing/Spacing.module.css +44 -0
  156. package/src/components/Spacing/Spacing.tsx +38 -34
  157. package/src/components/SplitLayout/SplitLayout.module.css +1 -1
  158. package/src/components/SplitLayout/SplitLayout.tsx +1 -1
  159. package/src/components/Textarea/Textarea.module.css +1 -0
  160. package/src/components/ToolButton/ToolButton.module.css +4 -14
  161. package/src/components/ToolButton/ToolButton.tsx +7 -2
  162. package/src/hooks/useDraggableWithDomApi/autoScroll.ts +1 -4
  163. package/src/hooks/useResizeObserver.ts +30 -0
  164. package/src/lib/floating/customResizeObserver.ts +10 -1
  165. package/src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts +11 -1
  166. package/src/lib/utils.ts +1 -2
  167. package/src/styles/adaptivity.module.css +1 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/floating/customResizeObserver.ts"],"sourcesContent":["const defaultIframeStyles: Pick<\n CSSStyleDeclaration,\n 'position' | 'left' | 'top' | 'zIndex' | 'width' | 'height' | 'pointerEvents' | 'opacity'\n> = {\n position: 'absolute',\n left: '0',\n top: '0',\n zIndex: '-1',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n opacity: '0',\n};\n\n/*\n * Специальный CustomResizeObserver как fallback для ResizeObserver\n * Используется для вызова update() функции (перерисовка плавающего окна) floating-ui\n * при изменении размера reference или floating элементов.\n *\n * По умолчанию пытаемся нарисовать скрытый, абсолютно позиционированный относительно\n * наблюдаемого элемента iframe.\n * В случае же, если наблюдаемый элемент имеет position: static, то правильно спозиционировать\n * iframe у нас не получится, поэтому в такой ситуации мы используем MutationObserver.\n *\n * Использовать только MutationObserver мы не можем, потому что с помощью него нельзя отследить\n * изменение размера вызванное переполнением текста.\n *\n * Применяется только если нету поддержики или полифила ResizeObserver.\n * */\nexport class CustomResizeObserver {\n records: Array<{\n target: HTMLElement;\n iframe: HTMLIFrameElement;\n }> = [];\n mutationObserverFallback: MutationObserver | null = null;\n\n constructor(private readonly updateFunction: () => void) {\n this.updateFunction = updateFunction;\n }\n\n observe(element: HTMLElement) {\n if (isPositioned(element)) {\n return this.observeUsingIframe(element);\n }\n return this.observeUsingMutationObserver(element);\n }\n\n appendToTheDOM() {\n for (let record of this.records) {\n record.target.appendChild(record.iframe);\n }\n\n for (let record of this.records) {\n if (record.iframe.contentWindow) {\n record.iframe.contentWindow.addEventListener('resize', this.updateFunction);\n }\n }\n }\n\n observeUsingIframe(element: HTMLElement) {\n const iframe = element.ownerDocument.createElement('iframe');\n iframe.src = 'javascript:void(0)';\n iframe.ariaHidden = 'true';\n iframe.tabIndex = -1;\n Object.assign(iframe.style, defaultIframeStyles);\n\n this.records.push({ target: element, iframe });\n }\n\n observeUsingMutationObserver(element: HTMLElement) {\n if (!this.mutationObserverFallback) {\n this.mutationObserverFallback = new MutationObserver(this.updateFunction);\n }\n\n this.mutationObserverFallback.observe(element, {\n childList: true,\n subtree: true,\n });\n }\n\n disconnect() {\n this.records.map(({ target, iframe }) => {\n if (iframe.contentWindow) {\n iframe.contentWindow.removeEventListener('resize', this.updateFunction);\n }\n\n target.removeChild(iframe);\n });\n this.records = [];\n\n if (this.mutationObserverFallback) {\n this.mutationObserverFallback.disconnect();\n }\n this.mutationObserverFallback = null;\n }\n}\n\nfunction isPositioned(element: HTMLElement): boolean {\n return getComputedStyle(element).position !== 'static';\n}\n"],"names":["defaultIframeStyles","position","left","top","zIndex","width","height","pointerEvents","opacity","CustomResizeObserver","records","mutationObserverFallback","constructor","updateFunction","observe","element","isPositioned","observeUsingIframe","observeUsingMutationObserver","appendToTheDOM","record","target","appendChild","iframe","contentWindow","addEventListener","ownerDocument","createElement","src","ariaHidden","tabIndex","Object","assign","style","push","MutationObserver","childList","subtree","disconnect","map","removeEventListener","removeChild","getComputedStyle"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,MAAMA,sBAGF;IACFC,UAAU;IACVC,MAAM;IACNC,KAAK;IACLC,QAAQ;IACRC,OAAO;IACPC,QAAQ;IACRC,eAAe;IACfC,SAAS;AACX;AAEA;;;;;;;;;;;;;;GAcG,GACH,OAAO,MAAMC;;IACXC,QAGQ;IACRC,yBAAyD;IAEzDC,YAAY,AAAiBC,cAA0B,CAAE;aAA5BA,iBAAAA;aAN7BH,UAGK,EAAE;aACPC,2BAAoD;QAGlD,IAAI,CAACE,cAAc,GAAGA;IACxB;IAEAC,QAAQC,OAAoB,EAAE;QAC5B,IAAIC,aAAaD,UAAU;YACzB,OAAO,IAAI,CAACE,kBAAkB,CAACF;QACjC;QACA,OAAO,IAAI,CAACG,4BAA4B,CAACH;IAC3C;IAEAI,iBAAiB;QACf,KAAK,IAAIC,UAAU,IAAI,CAACV,OAAO,CAAE;YAC/BU,OAAOC,MAAM,CAACC,WAAW,CAACF,OAAOG,MAAM;QACzC;QAEA,KAAK,IAAIH,UAAU,IAAI,CAACV,OAAO,CAAE;YAC/B,IAAIU,OAAOG,MAAM,CAACC,aAAa,EAAE;gBAC/BJ,OAAOG,MAAM,CAACC,aAAa,CAACC,gBAAgB,CAAC,UAAU,IAAI,CAACZ,cAAc;YAC5E;QACF;IACF;IAEAI,mBAAmBF,OAAoB,EAAE;QACvC,MAAMQ,SAASR,QAAQW,aAAa,CAACC,aAAa,CAAC;QACnDJ,OAAOK,GAAG,GAAG;QACbL,OAAOM,UAAU,GAAG;QACpBN,OAAOO,QAAQ,GAAG,CAAC;QACnBC,OAAOC,MAAM,CAACT,OAAOU,KAAK,EAAEjC;QAE5B,IAAI,CAACU,OAAO,CAACwB,IAAI,CAAC;YAAEb,QAAQN;YAASQ;QAAO;IAC9C;IAEAL,6BAA6BH,OAAoB,EAAE;QACjD,IAAI,CAAC,IAAI,CAACJ,wBAAwB,EAAE;YAClC,IAAI,CAACA,wBAAwB,GAAG,IAAIwB,iBAAiB,IAAI,CAACtB,cAAc;QAC1E;QAEA,IAAI,CAACF,wBAAwB,CAACG,OAAO,CAACC,SAAS;YAC7CqB,WAAW;YACXC,SAAS;QACX;IACF;IAEAC,aAAa;QACX,IAAI,CAAC5B,OAAO,CAAC6B,GAAG,CAAC,CAAC,EAAElB,MAAM,EAAEE,MAAM,EAAE;YAClC,IAAIA,OAAOC,aAAa,EAAE;gBACxBD,OAAOC,aAAa,CAACgB,mBAAmB,CAAC,UAAU,IAAI,CAAC3B,cAAc;YACxE;YAEAQ,OAAOoB,WAAW,CAAClB;QACrB;QACA,IAAI,CAACb,OAAO,GAAG,EAAE;QAEjB,IAAI,IAAI,CAACC,wBAAwB,EAAE;YACjC,IAAI,CAACA,wBAAwB,CAAC2B,UAAU;QAC1C;QACA,IAAI,CAAC3B,wBAAwB,GAAG;IAClC;AACF;AAEA,SAASK,aAAaD,OAAoB;IACxC,OAAO2B,iBAAiB3B,SAASd,QAAQ,KAAK;AAChD"}
1
+ {"version":3,"sources":["../../../../src/lib/floating/customResizeObserver.ts"],"sourcesContent":["const defaultIframeStyles: Pick<\n CSSStyleDeclaration,\n | 'position'\n | 'left'\n | 'top'\n | 'zIndex'\n | 'width'\n | 'height'\n | 'pointerEvents'\n | 'opacity'\n | 'border'\n> = {\n position: 'absolute',\n left: '0',\n top: '0',\n zIndex: '-1',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n opacity: '0',\n border: '0',\n};\n\n/*\n * Специальный CustomResizeObserver как fallback для ResizeObserver\n * Используется для вызова update() функции (перерисовка плавающего окна) floating-ui\n * при изменении размера reference или floating элементов.\n *\n * По умолчанию пытаемся нарисовать скрытый, абсолютно позиционированный относительно\n * наблюдаемого элемента iframe.\n * В случае же, если наблюдаемый элемент имеет position: static, то правильно спозиционировать\n * iframe у нас не получится, поэтому в такой ситуации мы используем MutationObserver.\n *\n * Использовать только MutationObserver мы не можем, потому что с помощью него нельзя отследить\n * изменение размера вызванное переполнением текста.\n *\n * Применяется только если нету поддержики или полифила ResizeObserver.\n * */\nexport class CustomResizeObserver {\n records: Array<{\n target: HTMLElement;\n iframe: HTMLIFrameElement;\n }> = [];\n mutationObserverFallback: MutationObserver | null = null;\n\n constructor(private readonly updateFunction: () => void) {\n this.updateFunction = updateFunction;\n }\n\n observe(element: HTMLElement) {\n if (isPositioned(element)) {\n return this.observeUsingIframe(element);\n }\n return this.observeUsingMutationObserver(element);\n }\n\n appendToTheDOM() {\n for (let record of this.records) {\n record.target.appendChild(record.iframe);\n }\n\n for (let record of this.records) {\n if (record.iframe.contentWindow) {\n record.iframe.contentWindow.addEventListener('resize', this.updateFunction);\n }\n }\n }\n\n observeUsingIframe(element: HTMLElement) {\n const iframe = element.ownerDocument.createElement('iframe');\n iframe.src = 'javascript:void(0)';\n iframe.ariaHidden = 'true';\n iframe.tabIndex = -1;\n Object.assign(iframe.style, defaultIframeStyles);\n\n this.records.push({ target: element, iframe });\n }\n\n observeUsingMutationObserver(element: HTMLElement) {\n if (!this.mutationObserverFallback) {\n this.mutationObserverFallback = new MutationObserver(this.updateFunction);\n }\n\n this.mutationObserverFallback.observe(element, {\n childList: true,\n subtree: true,\n });\n }\n\n disconnect() {\n this.records.map(({ target, iframe }) => {\n if (iframe.contentWindow) {\n iframe.contentWindow.removeEventListener('resize', this.updateFunction);\n }\n\n target.removeChild(iframe);\n });\n this.records = [];\n\n if (this.mutationObserverFallback) {\n this.mutationObserverFallback.disconnect();\n }\n this.mutationObserverFallback = null;\n }\n}\n\nfunction isPositioned(element: HTMLElement): boolean {\n return getComputedStyle(element).position !== 'static';\n}\n"],"names":["defaultIframeStyles","position","left","top","zIndex","width","height","pointerEvents","opacity","border","CustomResizeObserver","records","mutationObserverFallback","constructor","updateFunction","observe","element","isPositioned","observeUsingIframe","observeUsingMutationObserver","appendToTheDOM","record","target","appendChild","iframe","contentWindow","addEventListener","ownerDocument","createElement","src","ariaHidden","tabIndex","Object","assign","style","push","MutationObserver","childList","subtree","disconnect","map","removeEventListener","removeChild","getComputedStyle"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,MAAMA,sBAWF;IACFC,UAAU;IACVC,MAAM;IACNC,KAAK;IACLC,QAAQ;IACRC,OAAO;IACPC,QAAQ;IACRC,eAAe;IACfC,SAAS;IACTC,QAAQ;AACV;AAEA;;;;;;;;;;;;;;GAcG,GACH,OAAO,MAAMC;;IACXC,QAGQ;IACRC,yBAAyD;IAEzDC,YAAY,AAAiBC,cAA0B,CAAE;aAA5BA,iBAAAA;aAN7BH,UAGK,EAAE;aACPC,2BAAoD;QAGlD,IAAI,CAACE,cAAc,GAAGA;IACxB;IAEAC,QAAQC,OAAoB,EAAE;QAC5B,IAAIC,aAAaD,UAAU;YACzB,OAAO,IAAI,CAACE,kBAAkB,CAACF;QACjC;QACA,OAAO,IAAI,CAACG,4BAA4B,CAACH;IAC3C;IAEAI,iBAAiB;QACf,KAAK,IAAIC,UAAU,IAAI,CAACV,OAAO,CAAE;YAC/BU,OAAOC,MAAM,CAACC,WAAW,CAACF,OAAOG,MAAM;QACzC;QAEA,KAAK,IAAIH,UAAU,IAAI,CAACV,OAAO,CAAE;YAC/B,IAAIU,OAAOG,MAAM,CAACC,aAAa,EAAE;gBAC/BJ,OAAOG,MAAM,CAACC,aAAa,CAACC,gBAAgB,CAAC,UAAU,IAAI,CAACZ,cAAc;YAC5E;QACF;IACF;IAEAI,mBAAmBF,OAAoB,EAAE;QACvC,MAAMQ,SAASR,QAAQW,aAAa,CAACC,aAAa,CAAC;QACnDJ,OAAOK,GAAG,GAAG;QACbL,OAAOM,UAAU,GAAG;QACpBN,OAAOO,QAAQ,GAAG,CAAC;QACnBC,OAAOC,MAAM,CAACT,OAAOU,KAAK,EAAElC;QAE5B,IAAI,CAACW,OAAO,CAACwB,IAAI,CAAC;YAAEb,QAAQN;YAASQ;QAAO;IAC9C;IAEAL,6BAA6BH,OAAoB,EAAE;QACjD,IAAI,CAAC,IAAI,CAACJ,wBAAwB,EAAE;YAClC,IAAI,CAACA,wBAAwB,GAAG,IAAIwB,iBAAiB,IAAI,CAACtB,cAAc;QAC1E;QAEA,IAAI,CAACF,wBAAwB,CAACG,OAAO,CAACC,SAAS;YAC7CqB,WAAW;YACXC,SAAS;QACX;IACF;IAEAC,aAAa;QACX,IAAI,CAAC5B,OAAO,CAAC6B,GAAG,CAAC,CAAC,EAAElB,MAAM,EAAEE,MAAM,EAAE;YAClC,IAAIA,OAAOC,aAAa,EAAE;gBACxBD,OAAOC,aAAa,CAACgB,mBAAmB,CAAC,UAAU,IAAI,CAAC3B,cAAc;YACxE;YAEAQ,OAAOoB,WAAW,CAAClB;QACrB;QACA,IAAI,CAACb,OAAO,GAAG,EAAE;QAEjB,IAAI,IAAI,CAACC,wBAAwB,EAAE;YACjC,IAAI,CAACA,wBAAwB,CAAC2B,UAAU;QAC1C;QACA,IAAI,CAAC3B,wBAAwB,GAAG;IAClC;AACF;AAEA,SAASK,aAAaD,OAAoB;IACxC,OAAO2B,iBAAiB3B,SAASf,QAAQ,KAAK;AAChD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFloatingWithInteractions.d.ts","sourceRoot":"","sources":["../../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAIV,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,SAAS,CAAC;AASjB;;GAEG;AACH,eAAO,MAAM,2BAA2B,4QAqBrC,gCAAgC,KAAG,kCAAkC,CAAC,CAiTxE,CAAC"}
1
+ {"version":3,"file":"useFloatingWithInteractions.d.ts","sourceRoot":"","sources":["../../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAIV,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,SAAS,CAAC;AASjB;;GAEG;AACH,eAAO,MAAM,2BAA2B,4QAqBrC,gCAAgC,KAAG,kCAAkC,CAAC,CA2TxE,CAAC"}
@@ -55,7 +55,7 @@ shown: shownProp, onShownChange: onShownChangeProp })=>{
55
55
  });
56
56
  const commitShownLocalState = React.useCallback((nextShown, reason)=>{
57
57
  setShownLocalState((prevState)=>{
58
- if (prevState.shown !== nextShown) {
58
+ if (prevState.shown !== nextShown || prevState.reason !== reason) {
59
59
  return {
60
60
  shown: nextShown,
61
61
  reason
@@ -79,6 +79,11 @@ shown: shownProp, onShownChange: onShownChangeProp })=>{
79
79
  commitShownLocalState
80
80
  ]);
81
81
  const handleFocusOnReference = useStableCallback(()=>{
82
+ // Повторный вызов события фокуса - следствие клика на reference-элемент
83
+ if (shownLocalState.shown) {
84
+ commitShownLocalState(false, 'focus');
85
+ return;
86
+ }
82
87
  if (blockFocusRef.current) {
83
88
  /* istanbul ignore next: в Jest не воспроизводится баг на вебе (cм. onRestoreFocus) */ blockFocusRef.current = false;
84
89
  return;
@@ -109,6 +114,11 @@ shown: shownProp, onShownChange: onShownChangeProp })=>{
109
114
  });
110
115
  });
111
116
  const handleClickOnReference = useStableCallback(()=>{
117
+ // Предыдущий триггер (фокус) уже вызвал открытие/закрытие всплывающего окна, игнорируем вызов
118
+ if (shownLocalState.reason === 'focus') {
119
+ commitShownLocalState(shownLocalState.shown, 'click');
120
+ return;
121
+ }
112
122
  commitShownLocalState(!shownLocalState.shown, 'click');
113
123
  });
114
124
  const handleClickOnReferenceForOnlyClose = useStableCallback(()=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce } from '@vkontakte/vkjs';\nimport { getWindow, isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useCustomEnsuredControl } from '../../../hooks/useEnsuredControl';\nimport { useGlobalOnClickOutside } from '../../../hooks/useGlobalOnClickOutside';\nimport { useStableCallback } from '../../../hooks/useStableCallback';\nimport { contains, getActiveElementByAnotherElement } from '../../dom';\nimport { useIsomorphicLayoutEffect } from '../../useIsomorphicLayoutEffect';\nimport { autoUpdateFloatingElement, useFloating } from '../adapters';\nimport { convertFloatingDataToReactCSSProperties } from '../functions';\nimport { type UseFloatingOptions } from '../types/common';\nimport { DEFAULT_TRIGGER } from './constants';\nimport type {\n FloatingProps,\n ReferenceProps,\n ShownChangeReason,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from './types';\nimport { useResolveTriggerType } from './useResolveTriggerType';\n\ntype LocalState = { shown: boolean; reason?: ShownChangeReason };\n\nconst whileElementsMounted: UseFloatingOptions['whileElementsMounted'] = (...args) =>\n /* istanbul ignore next: не знаю как проверить */\n autoUpdateFloatingElement(...args, { elementResize: true });\n\n/**\n * @private\n */\nexport const useFloatingWithInteractions = <T extends HTMLElement = HTMLElement>({\n trigger = DEFAULT_TRIGGER,\n\n // UseFloating\n placement: placementProp = 'bottom',\n middlewares,\n hoverDelay = 0,\n closeAfterClick = false,\n\n // disables\n disabled = false,\n disableInteractive = false,\n disableCloseOnClickOutside = false,\n disableCloseOnEscKey = false,\n\n // uncontrolled\n defaultShown = false,\n\n // controlled\n shown: shownProp,\n onShownChange: onShownChangeProp,\n}: UseFloatingWithInteractionsProps): UseFloatingWithInteractionsReturn<T> => {\n const memoizedValue = React.useMemo(\n () => (shownProp !== undefined ? { shown: shownProp } : undefined),\n [shownProp],\n );\n const [shownLocalState, setShownLocalState] = useCustomEnsuredControl<LocalState>({\n value: memoizedValue,\n disabled,\n defaultValue: { shown: defaultShown },\n onChange: useStableCallback(({ shown, reason }) => {\n if (onShownChangeProp) {\n onShownChangeProp(shown, reason);\n }\n }),\n });\n const [shownFinalState, setShownFinalState] = React.useState(() => shownLocalState.shown);\n const [willBeHide, setWillBeHide] = React.useState(false);\n\n const hasCSSAnimation = React.useRef(false);\n\n const blockMouseEnterRef = React.useRef(false);\n const blockFocusRef = React.useRef(false);\n const blurTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>();\n\n const handleCloseOnReferenceClickOutsideDisabled =\n disabled || disableCloseOnClickOutside || willBeHide || !shownLocalState.shown;\n const handleCloseOnFloatingClickOutsideDisabled =\n disableInteractive || handleCloseOnReferenceClickOutsideDisabled;\n\n const { triggerOnFocus, triggerOnClick, triggerOnHover } = useResolveTriggerType(trigger);\n\n // Библиотека `floating-ui`\n const { placement, x, y, strategy, refs, middlewareData } = useFloating<T>({\n strategy: 'fixed',\n placement: placementProp,\n middleware: middlewares,\n whileElementsMounted,\n });\n\n const commitShownLocalState = React.useCallback(\n (nextShown: boolean, reason: ShownChangeReason) => {\n setShownLocalState((prevState) => {\n if (prevState.shown !== nextShown) {\n return {\n shown: nextShown,\n reason,\n };\n }\n /* istanbul ignore next: страховка, если вдруг на момент вызова обновления состояния, оно уже будет актуальным */\n return prevState;\n });\n },\n [setShownLocalState],\n );\n\n const [mouseEnterDelay, mouseLeaveDelay] =\n typeof hoverDelay === 'number' ? [hoverDelay, hoverDelay] : hoverDelay;\n\n const showWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(true, 'hover'), mouseEnterDelay),\n [mouseEnterDelay, commitShownLocalState],\n );\n\n const hideWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(false, 'hover'), mouseLeaveDelay),\n [mouseLeaveDelay, commitShownLocalState],\n );\n\n const handleFocusOnReference = useStableCallback(() => {\n if (blockFocusRef.current) {\n /* istanbul ignore next: в Jest не воспроизводится баг на вебе (cм. onRestoreFocus) */\n blockFocusRef.current = false;\n return;\n }\n\n commitShownLocalState(true, 'focus');\n });\n\n const handleBlurOnReference = useStableCallback((event: React.FocusEvent) => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (!shownLocalState.shown) {\n clearTimeout(blurTimeoutRef.current);\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n blurTimeoutRef.current = setTimeout(function waitWindowBlurFire() {\n const reference = refs.reference.current;\n // Если пользователь покинул текущее окно в открытом состоянии, то\n // не закрываем всплывающий элемент.\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (!relatedTarget && getActiveElementByAnotherElement(reference) === reference) {\n /* istanbul ignore next */\n return;\n }\n\n // Если пользователь нажал на всплывающий элемент, то не закрываем всплывающий элемент.\n // Note: для этого элемент должен быть фокусируемый (например, за счёт `tabindex=\"-1\"`).\n if (contains(refs.floating.current, relatedTarget) || contains(reference, relatedTarget)) {\n return;\n }\n\n commitShownLocalState(false, 'focus');\n });\n });\n\n const handleClickOnReference = useStableCallback(() => {\n commitShownLocalState(!shownLocalState.shown, 'click');\n });\n\n const handleClickOnReferenceForOnlyClose = useStableCallback(() => {\n blockMouseEnterRef.current = true;\n commitShownLocalState(false, 'click');\n });\n\n const handleMouseEnterOnBoth = useStableCallback(() => {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (!blockMouseEnterRef.current && !shownLocalState.shown) {\n showWithDelay();\n }\n });\n\n const handleMouseLeaveOnBothForHoverAndFocusStates = useStableCallback(() => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (triggerOnHover) {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (shownLocalState.reason !== 'focus' && shownLocalState.reason !== 'click') {\n hideWithDelay();\n }\n }\n });\n\n const handleFloatingAnimationStart = () => {\n hasCSSAnimation.current = true;\n };\n\n const handleFloatingAnimationEnd = () => {\n if (willBeHide) {\n setShownFinalState(false);\n setWillBeHide(false);\n }\n };\n\n const handleOnClose = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'callback');\n }, [commitShownLocalState]);\n\n const handleRestoreFocus = React.useCallback(\n () => (triggerOnFocus ? blockFocusRef.current : true),\n [triggerOnFocus],\n );\n\n const handleEscapeKeyDown = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'escape-key');\n }, [commitShownLocalState]);\n\n const handleClickOutside = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'click-outside');\n }, [commitShownLocalState]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n handleCloseOnReferenceClickOutsideDisabled ? null : refs.reference,\n handleCloseOnFloatingClickOutsideDisabled ? null : refs.floating,\n );\n\n useIsomorphicLayoutEffect(\n /**\n * Если пользователь покинул активное окно и:\n * 1. целевой элемент был в состоянии фокуса;\n * 2. всплывающий элемент был закрытом состоянии;\n * то фокус должен быть заблокирован, когда пользователь вернётся обратно. Иначе покажется\n * всплывающий элемент.\n */\n function setGlobalBlurForTriggerOnFocus() {\n if (!triggerOnFocus || !refs.reference.current) {\n return;\n }\n\n const handleGlobalBlur = () => {\n /* istanbul ignore next */\n const reference = refs.reference.current;\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (\n !shownLocalState.shown &&\n isHTMLElement(reference) &&\n reference === getActiveElementByAnotherElement(reference)\n ) {\n /* istanbul ignore next */\n blockFocusRef.current = true;\n }\n };\n\n const win = getWindow(refs.reference.current);\n win.addEventListener('blur', handleGlobalBlur);\n return () => {\n win.removeEventListener('blur', handleGlobalBlur);\n };\n },\n [triggerOnFocus, refs.reference, shownLocalState],\n );\n\n useIsomorphicLayoutEffect(\n function resolveShownStates() {\n if (willBeHide || shownLocalState.shown === shownFinalState) {\n return;\n }\n\n if (shownLocalState.shown) {\n setShownFinalState(true);\n } else if (hasCSSAnimation.current && !willBeHide) {\n setWillBeHide(true);\n } else {\n setShownFinalState(false);\n }\n\n return () => {\n clearTimeout(blurTimeoutRef.current);\n };\n },\n [shownLocalState, shownFinalState, willBeHide],\n );\n\n const referencePropsRef = React.useRef<ReferenceProps>({});\n const floatingPropsRef = React.useRef<FloatingProps>({ style: {} });\n\n if (shownFinalState) {\n floatingPropsRef.current.style = convertFloatingDataToReactCSSProperties(\n strategy,\n x,\n y,\n undefined,\n middlewareData,\n );\n\n if (disableInteractive) {\n floatingPropsRef.current.style.pointerEvents = 'none';\n }\n }\n\n if (triggerOnFocus) {\n referencePropsRef.current.onFocus = handleFocusOnReference;\n referencePropsRef.current.onBlur = handleBlurOnReference;\n }\n\n if (triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReference;\n }\n\n if (triggerOnHover) {\n referencePropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n\n if (closeAfterClick && !triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReferenceForOnlyClose;\n }\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n }\n }\n\n if (triggerOnHover || triggerOnFocus) {\n referencePropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n }\n }\n\n if (shownFinalState) {\n floatingPropsRef.current.onAnimationStart = handleFloatingAnimationStart;\n floatingPropsRef.current.onAnimationEnd = handleFloatingAnimationEnd;\n }\n\n return {\n placement,\n shown: shownFinalState,\n willBeHide,\n refs,\n referenceProps: referencePropsRef.current,\n floatingProps: floatingPropsRef.current,\n middlewareData,\n onClose: handleOnClose,\n // FocusTrap уже определяет нажатие на ESC, поэтому название события содержит конкретный код\n // кнопки вместо просто onKeyDown.\n onEscapeKeyDown: !shownFinalState || disableCloseOnEscKey ? undefined : handleEscapeKeyDown,\n // [Обход баги с FocusTrap]\n //\n // Если сфокусироваться на целевой элемент через нажатие, а потом нажать в область за пределами\n // целевого и всплывающего элемента, то появляется моргание из-за того, что FocusTrap\n // восстанавливает фокус, из-за чего всплывающий элемент снова показывается за счёт\n // `handleFocusOnReference`, а потом скрывается за счёт `handleBlurOnReference`.\n onRestoreFocus: handleRestoreFocus,\n };\n};\n"],"names":["React","debounce","getWindow","isHTMLElement","useCustomEnsuredControl","useGlobalOnClickOutside","useStableCallback","contains","getActiveElementByAnotherElement","useIsomorphicLayoutEffect","autoUpdateFloatingElement","useFloating","convertFloatingDataToReactCSSProperties","DEFAULT_TRIGGER","useResolveTriggerType","whileElementsMounted","args","elementResize","useFloatingWithInteractions","trigger","placement","placementProp","middlewares","hoverDelay","closeAfterClick","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","defaultShown","shown","shownProp","onShownChange","onShownChangeProp","memoizedValue","useMemo","undefined","shownLocalState","setShownLocalState","value","defaultValue","onChange","reason","shownFinalState","setShownFinalState","useState","willBeHide","setWillBeHide","hasCSSAnimation","useRef","blockMouseEnterRef","blockFocusRef","blurTimeoutRef","handleCloseOnReferenceClickOutsideDisabled","handleCloseOnFloatingClickOutsideDisabled","triggerOnFocus","triggerOnClick","triggerOnHover","x","y","strategy","refs","middlewareData","middleware","commitShownLocalState","useCallback","nextShown","prevState","mouseEnterDelay","mouseLeaveDelay","showWithDelay","hideWithDelay","handleFocusOnReference","current","handleBlurOnReference","event","clearTimeout","relatedTarget","setTimeout","waitWindowBlurFire","reference","floating","handleClickOnReference","handleClickOnReferenceForOnlyClose","handleMouseEnterOnBoth","cancel","handleMouseLeaveOnBothForHoverAndFocusStates","handleFloatingAnimationStart","handleFloatingAnimationEnd","handleOnClose","handleRestoreFocus","handleEscapeKeyDown","handleClickOutside","setGlobalBlurForTriggerOnFocus","handleGlobalBlur","win","addEventListener","removeEventListener","resolveShownStates","referencePropsRef","floatingPropsRef","style","pointerEvents","onFocus","onBlur","onClick","onMouseOver","onMouseLeave","onAnimationStart","onAnimationEnd","referenceProps","floatingProps","onClose","onEscapeKeyDown","onRestoreFocus"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce } from '@vkontakte/vkjs';\nimport { getWindow, isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useCustomEnsuredControl } from '../../../hooks/useEnsuredControl';\nimport { useGlobalOnClickOutside } from '../../../hooks/useGlobalOnClickOutside';\nimport { useStableCallback } from '../../../hooks/useStableCallback';\nimport { contains, getActiveElementByAnotherElement } from '../../dom';\nimport { useIsomorphicLayoutEffect } from '../../useIsomorphicLayoutEffect';\nimport { autoUpdateFloatingElement, useFloating } from '../adapters';\nimport { convertFloatingDataToReactCSSProperties } from '../functions';\nimport { type UseFloatingOptions } from '../types/common';\nimport { DEFAULT_TRIGGER } from './constants';\nimport type {\n FloatingProps,\n ReferenceProps,\n ShownChangeReason,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from './types';\nimport { useResolveTriggerType } from './useResolveTriggerType';\n\ntype LocalState = { shown: boolean; reason?: ShownChangeReason };\n\nconst whileElementsMounted: UseFloatingOptions['whileElementsMounted'] = (...args) =>\n /* istanbul ignore next: не знаю как проверить */\n autoUpdateFloatingElement(...args, { elementResize: true });\n\n/**\n * @private\n */\nexport const useFloatingWithInteractions = <T extends HTMLElement = HTMLElement>({\n trigger = DEFAULT_TRIGGER,\n\n // UseFloating\n placement: placementProp = 'bottom',\n middlewares,\n hoverDelay = 0,\n closeAfterClick = false,\n\n // disables\n disabled = false,\n disableInteractive = false,\n disableCloseOnClickOutside = false,\n disableCloseOnEscKey = false,\n\n // uncontrolled\n defaultShown = false,\n\n // controlled\n shown: shownProp,\n onShownChange: onShownChangeProp,\n}: UseFloatingWithInteractionsProps): UseFloatingWithInteractionsReturn<T> => {\n const memoizedValue = React.useMemo(\n () => (shownProp !== undefined ? { shown: shownProp } : undefined),\n [shownProp],\n );\n const [shownLocalState, setShownLocalState] = useCustomEnsuredControl<LocalState>({\n value: memoizedValue,\n disabled,\n defaultValue: { shown: defaultShown },\n onChange: useStableCallback(({ shown, reason }) => {\n if (onShownChangeProp) {\n onShownChangeProp(shown, reason);\n }\n }),\n });\n const [shownFinalState, setShownFinalState] = React.useState(() => shownLocalState.shown);\n const [willBeHide, setWillBeHide] = React.useState(false);\n\n const hasCSSAnimation = React.useRef(false);\n\n const blockMouseEnterRef = React.useRef(false);\n const blockFocusRef = React.useRef(false);\n const blurTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>();\n\n const handleCloseOnReferenceClickOutsideDisabled =\n disabled || disableCloseOnClickOutside || willBeHide || !shownLocalState.shown;\n const handleCloseOnFloatingClickOutsideDisabled =\n disableInteractive || handleCloseOnReferenceClickOutsideDisabled;\n\n const { triggerOnFocus, triggerOnClick, triggerOnHover } = useResolveTriggerType(trigger);\n\n // Библиотека `floating-ui`\n const { placement, x, y, strategy, refs, middlewareData } = useFloating<T>({\n strategy: 'fixed',\n placement: placementProp,\n middleware: middlewares,\n whileElementsMounted,\n });\n\n const commitShownLocalState = React.useCallback(\n (nextShown: boolean, reason: ShownChangeReason) => {\n setShownLocalState((prevState) => {\n if (prevState.shown !== nextShown || prevState.reason !== reason) {\n return {\n shown: nextShown,\n reason,\n };\n }\n /* istanbul ignore next: страховка, если вдруг на момент вызова обновления состояния, оно уже будет актуальным */\n return prevState;\n });\n },\n [setShownLocalState],\n );\n\n const [mouseEnterDelay, mouseLeaveDelay] =\n typeof hoverDelay === 'number' ? [hoverDelay, hoverDelay] : hoverDelay;\n\n const showWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(true, 'hover'), mouseEnterDelay),\n [mouseEnterDelay, commitShownLocalState],\n );\n\n const hideWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(false, 'hover'), mouseLeaveDelay),\n [mouseLeaveDelay, commitShownLocalState],\n );\n\n const handleFocusOnReference = useStableCallback(() => {\n // Повторный вызов события фокуса - следствие клика на reference-элемент\n if (shownLocalState.shown) {\n commitShownLocalState(false, 'focus');\n return;\n }\n if (blockFocusRef.current) {\n /* istanbul ignore next: в Jest не воспроизводится баг на вебе (cм. onRestoreFocus) */\n blockFocusRef.current = false;\n return;\n }\n\n commitShownLocalState(true, 'focus');\n });\n\n const handleBlurOnReference = useStableCallback((event: React.FocusEvent) => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (!shownLocalState.shown) {\n clearTimeout(blurTimeoutRef.current);\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n blurTimeoutRef.current = setTimeout(function waitWindowBlurFire() {\n const reference = refs.reference.current;\n // Если пользователь покинул текущее окно в открытом состоянии, то\n // не закрываем всплывающий элемент.\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (!relatedTarget && getActiveElementByAnotherElement(reference) === reference) {\n /* istanbul ignore next */\n return;\n }\n\n // Если пользователь нажал на всплывающий элемент, то не закрываем всплывающий элемент.\n // Note: для этого элемент должен быть фокусируемый (например, за счёт `tabindex=\"-1\"`).\n if (contains(refs.floating.current, relatedTarget) || contains(reference, relatedTarget)) {\n return;\n }\n\n commitShownLocalState(false, 'focus');\n });\n });\n\n const handleClickOnReference = useStableCallback(() => {\n // Предыдущий триггер (фокус) уже вызвал открытие/закрытие всплывающего окна, игнорируем вызов\n if (shownLocalState.reason === 'focus') {\n commitShownLocalState(shownLocalState.shown, 'click');\n return;\n }\n commitShownLocalState(!shownLocalState.shown, 'click');\n });\n\n const handleClickOnReferenceForOnlyClose = useStableCallback(() => {\n blockMouseEnterRef.current = true;\n commitShownLocalState(false, 'click');\n });\n\n const handleMouseEnterOnBoth = useStableCallback(() => {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (!blockMouseEnterRef.current && !shownLocalState.shown) {\n showWithDelay();\n }\n });\n\n const handleMouseLeaveOnBothForHoverAndFocusStates = useStableCallback(() => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (triggerOnHover) {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (shownLocalState.reason !== 'focus' && shownLocalState.reason !== 'click') {\n hideWithDelay();\n }\n }\n });\n\n const handleFloatingAnimationStart = () => {\n hasCSSAnimation.current = true;\n };\n\n const handleFloatingAnimationEnd = () => {\n if (willBeHide) {\n setShownFinalState(false);\n setWillBeHide(false);\n }\n };\n\n const handleOnClose = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'callback');\n }, [commitShownLocalState]);\n\n const handleRestoreFocus = React.useCallback(\n () => (triggerOnFocus ? blockFocusRef.current : true),\n [triggerOnFocus],\n );\n\n const handleEscapeKeyDown = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'escape-key');\n }, [commitShownLocalState]);\n\n const handleClickOutside = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'click-outside');\n }, [commitShownLocalState]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n handleCloseOnReferenceClickOutsideDisabled ? null : refs.reference,\n handleCloseOnFloatingClickOutsideDisabled ? null : refs.floating,\n );\n\n useIsomorphicLayoutEffect(\n /**\n * Если пользователь покинул активное окно и:\n * 1. целевой элемент был в состоянии фокуса;\n * 2. всплывающий элемент был закрытом состоянии;\n * то фокус должен быть заблокирован, когда пользователь вернётся обратно. Иначе покажется\n * всплывающий элемент.\n */\n function setGlobalBlurForTriggerOnFocus() {\n if (!triggerOnFocus || !refs.reference.current) {\n return;\n }\n\n const handleGlobalBlur = () => {\n /* istanbul ignore next */\n const reference = refs.reference.current;\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (\n !shownLocalState.shown &&\n isHTMLElement(reference) &&\n reference === getActiveElementByAnotherElement(reference)\n ) {\n /* istanbul ignore next */\n blockFocusRef.current = true;\n }\n };\n\n const win = getWindow(refs.reference.current);\n win.addEventListener('blur', handleGlobalBlur);\n return () => {\n win.removeEventListener('blur', handleGlobalBlur);\n };\n },\n [triggerOnFocus, refs.reference, shownLocalState],\n );\n\n useIsomorphicLayoutEffect(\n function resolveShownStates() {\n if (willBeHide || shownLocalState.shown === shownFinalState) {\n return;\n }\n\n if (shownLocalState.shown) {\n setShownFinalState(true);\n } else if (hasCSSAnimation.current && !willBeHide) {\n setWillBeHide(true);\n } else {\n setShownFinalState(false);\n }\n\n return () => {\n clearTimeout(blurTimeoutRef.current);\n };\n },\n [shownLocalState, shownFinalState, willBeHide],\n );\n\n const referencePropsRef = React.useRef<ReferenceProps>({});\n const floatingPropsRef = React.useRef<FloatingProps>({ style: {} });\n\n if (shownFinalState) {\n floatingPropsRef.current.style = convertFloatingDataToReactCSSProperties(\n strategy,\n x,\n y,\n undefined,\n middlewareData,\n );\n\n if (disableInteractive) {\n floatingPropsRef.current.style.pointerEvents = 'none';\n }\n }\n\n if (triggerOnFocus) {\n referencePropsRef.current.onFocus = handleFocusOnReference;\n referencePropsRef.current.onBlur = handleBlurOnReference;\n }\n\n if (triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReference;\n }\n\n if (triggerOnHover) {\n referencePropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n\n if (closeAfterClick && !triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReferenceForOnlyClose;\n }\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n }\n }\n\n if (triggerOnHover || triggerOnFocus) {\n referencePropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n }\n }\n\n if (shownFinalState) {\n floatingPropsRef.current.onAnimationStart = handleFloatingAnimationStart;\n floatingPropsRef.current.onAnimationEnd = handleFloatingAnimationEnd;\n }\n\n return {\n placement,\n shown: shownFinalState,\n willBeHide,\n refs,\n referenceProps: referencePropsRef.current,\n floatingProps: floatingPropsRef.current,\n middlewareData,\n onClose: handleOnClose,\n // FocusTrap уже определяет нажатие на ESC, поэтому название события содержит конкретный код\n // кнопки вместо просто onKeyDown.\n onEscapeKeyDown: !shownFinalState || disableCloseOnEscKey ? undefined : handleEscapeKeyDown,\n // [Обход баги с FocusTrap]\n //\n // Если сфокусироваться на целевой элемент через нажатие, а потом нажать в область за пределами\n // целевого и всплывающего элемента, то появляется моргание из-за того, что FocusTrap\n // восстанавливает фокус, из-за чего всплывающий элемент снова показывается за счёт\n // `handleFocusOnReference`, а потом скрывается за счёт `handleBlurOnReference`.\n onRestoreFocus: handleRestoreFocus,\n };\n};\n"],"names":["React","debounce","getWindow","isHTMLElement","useCustomEnsuredControl","useGlobalOnClickOutside","useStableCallback","contains","getActiveElementByAnotherElement","useIsomorphicLayoutEffect","autoUpdateFloatingElement","useFloating","convertFloatingDataToReactCSSProperties","DEFAULT_TRIGGER","useResolveTriggerType","whileElementsMounted","args","elementResize","useFloatingWithInteractions","trigger","placement","placementProp","middlewares","hoverDelay","closeAfterClick","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","defaultShown","shown","shownProp","onShownChange","onShownChangeProp","memoizedValue","useMemo","undefined","shownLocalState","setShownLocalState","value","defaultValue","onChange","reason","shownFinalState","setShownFinalState","useState","willBeHide","setWillBeHide","hasCSSAnimation","useRef","blockMouseEnterRef","blockFocusRef","blurTimeoutRef","handleCloseOnReferenceClickOutsideDisabled","handleCloseOnFloatingClickOutsideDisabled","triggerOnFocus","triggerOnClick","triggerOnHover","x","y","strategy","refs","middlewareData","middleware","commitShownLocalState","useCallback","nextShown","prevState","mouseEnterDelay","mouseLeaveDelay","showWithDelay","hideWithDelay","handleFocusOnReference","current","handleBlurOnReference","event","clearTimeout","relatedTarget","setTimeout","waitWindowBlurFire","reference","floating","handleClickOnReference","handleClickOnReferenceForOnlyClose","handleMouseEnterOnBoth","cancel","handleMouseLeaveOnBothForHoverAndFocusStates","handleFloatingAnimationStart","handleFloatingAnimationEnd","handleOnClose","handleRestoreFocus","handleEscapeKeyDown","handleClickOutside","setGlobalBlurForTriggerOnFocus","handleGlobalBlur","win","addEventListener","removeEventListener","resolveShownStates","referencePropsRef","floatingPropsRef","style","pointerEvents","onFocus","onBlur","onClick","onMouseOver","onMouseLeave","onAnimationStart","onAnimationEnd","referenceProps","floatingProps","onClose","onEscapeKeyDown","onRestoreFocus"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,QAAQ,QAAQ,kBAAkB;AAC3C,SAASC,SAAS,EAAEC,aAAa,QAAQ,wCAAwC;AACjF,SAASC,uBAAuB,QAAQ,mCAAmC;AAC3E,SAASC,uBAAuB,QAAQ,yCAAyC;AACjF,SAASC,iBAAiB,QAAQ,mCAAmC;AACrE,SAASC,QAAQ,EAAEC,gCAAgC,QAAQ,YAAY;AACvE,SAASC,yBAAyB,QAAQ,kCAAkC;AAC5E,SAASC,yBAAyB,EAAEC,WAAW,QAAQ,cAAc;AACrE,SAASC,uCAAuC,QAAQ,eAAe;AAEvE,SAASC,eAAe,QAAQ,cAAc;AAQ9C,SAASC,qBAAqB,QAAQ,0BAA0B;AAIhE,MAAMC,uBAAmE,CAAC,GAAGC,OAC3E,+CAA+C,GAC/CN,6BAA6BM,MAAM;QAAEC,eAAe;IAAK;AAE3D;;CAEC,GACD,OAAO,MAAMC,8BAA8B,CAAsC,EAC/EC,UAAUN,eAAe,EAEzB,cAAc;AACdO,WAAWC,gBAAgB,QAAQ,EACnCC,WAAW,EACXC,aAAa,CAAC,EACdC,kBAAkB,KAAK,EAEvB,WAAW;AACXC,WAAW,KAAK,EAChBC,qBAAqB,KAAK,EAC1BC,6BAA6B,KAAK,EAClCC,uBAAuB,KAAK,EAE5B,eAAe;AACfC,eAAe,KAAK,EAEpB,aAAa;AACbC,OAAOC,SAAS,EAChBC,eAAeC,iBAAiB,EACC;IACjC,MAAMC,gBAAgBlC,MAAMmC,OAAO,CACjC,IAAOJ,cAAcK,YAAY;YAAEN,OAAOC;QAAU,IAAIK,WACxD;QAACL;KAAU;IAEb,MAAM,CAACM,iBAAiBC,mBAAmB,GAAGlC,wBAAoC;QAChFmC,OAAOL;QACPT;QACAe,cAAc;YAAEV,OAAOD;QAAa;QACpCY,UAAUnC,kBAAkB,CAAC,EAAEwB,KAAK,EAAEY,MAAM,EAAE;YAC5C,IAAIT,mBAAmB;gBACrBA,kBAAkBH,OAAOY;YAC3B;QACF;IACF;IACA,MAAM,CAACC,iBAAiBC,mBAAmB,GAAG5C,MAAM6C,QAAQ,CAAC,IAAMR,gBAAgBP,KAAK;IACxF,MAAM,CAACgB,YAAYC,cAAc,GAAG/C,MAAM6C,QAAQ,CAAC;IAEnD,MAAMG,kBAAkBhD,MAAMiD,MAAM,CAAC;IAErC,MAAMC,qBAAqBlD,MAAMiD,MAAM,CAAC;IACxC,MAAME,gBAAgBnD,MAAMiD,MAAM,CAAC;IACnC,MAAMG,iBAAiBpD,MAAMiD,MAAM;IAEnC,MAAMI,6CACJ5B,YAAYE,8BAA8BmB,cAAc,CAACT,gBAAgBP,KAAK;IAChF,MAAMwB,4CACJ5B,sBAAsB2B;IAExB,MAAM,EAAEE,cAAc,EAAEC,cAAc,EAAEC,cAAc,EAAE,GAAG3C,sBAAsBK;IAEjF,2BAA2B;IAC3B,MAAM,EAAEC,SAAS,EAAEsC,CAAC,EAAEC,CAAC,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,cAAc,EAAE,GAAGnD,YAAe;QACzEiD,UAAU;QACVxC,WAAWC;QACX0C,YAAYzC;QACZP;IACF;IAEA,MAAMiD,wBAAwBhE,MAAMiE,WAAW,CAC7C,CAACC,WAAoBxB;QACnBJ,mBAAmB,CAAC6B;YAClB,IAAIA,UAAUrC,KAAK,KAAKoC,aAAaC,UAAUzB,MAAM,KAAKA,QAAQ;gBAChE,OAAO;oBACLZ,OAAOoC;oBACPxB;gBACF;YACF;YACA,+GAA+G,GAC/G,OAAOyB;QACT;IACF,GACA;QAAC7B;KAAmB;IAGtB,MAAM,CAAC8B,iBAAiBC,gBAAgB,GACtC,OAAO9C,eAAe,WAAW;QAACA;QAAYA;KAAW,GAAGA;IAE9D,MAAM+C,gBAAgBtE,MAAMmC,OAAO,CACjC,IAAMlC,SAAS,IAAM+D,sBAAsB,MAAM,UAAUI,kBAC3D;QAACA;QAAiBJ;KAAsB;IAG1C,MAAMO,gBAAgBvE,MAAMmC,OAAO,CACjC,IAAMlC,SAAS,IAAM+D,sBAAsB,OAAO,UAAUK,kBAC5D;QAACA;QAAiBL;KAAsB;IAG1C,MAAMQ,yBAAyBlE,kBAAkB;QAC/C,wEAAwE;QACxE,IAAI+B,gBAAgBP,KAAK,EAAE;YACzBkC,sBAAsB,OAAO;YAC7B;QACF;QACA,IAAIb,cAAcsB,OAAO,EAAE;YACzB,oFAAoF,GACpFtB,cAAcsB,OAAO,GAAG;YACxB;QACF;QAEAT,sBAAsB,MAAM;IAC9B;IAEA,MAAMU,wBAAwBpE,kBAAkB,CAACqE;QAC/CxB,cAAcsB,OAAO,GAAG;QACxBvB,mBAAmBuB,OAAO,GAAG;QAE7B,IAAI,CAACpC,gBAAgBP,KAAK,EAAE;YAC1B8C,aAAaxB,eAAeqB,OAAO;YACnC;QACF;QAEA,MAAMI,gBAAgBF,MAAME,aAAa;QACzCzB,eAAeqB,OAAO,GAAGK,WAAW,SAASC;YAC3C,MAAMC,YAAYnB,KAAKmB,SAAS,CAACP,OAAO;YACxC,kEAAkE;YAClE,oCAAoC;YACpC,mEAAmE,GACnE,IAAI,CAACI,iBAAiBrE,iCAAiCwE,eAAeA,WAAW;gBAC/E,wBAAwB,GACxB;YACF;YAEA,uFAAuF;YACvF,wFAAwF;YACxF,IAAIzE,SAASsD,KAAKoB,QAAQ,CAACR,OAAO,EAAEI,kBAAkBtE,SAASyE,WAAWH,gBAAgB;gBACxF;YACF;YAEAb,sBAAsB,OAAO;QAC/B;IACF;IAEA,MAAMkB,yBAAyB5E,kBAAkB;QAC/C,8FAA8F;QAC9F,IAAI+B,gBAAgBK,MAAM,KAAK,SAAS;YACtCsB,sBAAsB3B,gBAAgBP,KAAK,EAAE;YAC7C;QACF;QACAkC,sBAAsB,CAAC3B,gBAAgBP,KAAK,EAAE;IAChD;IAEA,MAAMqD,qCAAqC7E,kBAAkB;QAC3D4C,mBAAmBuB,OAAO,GAAG;QAC7BT,sBAAsB,OAAO;IAC/B;IAEA,MAAMoB,yBAAyB9E,kBAAkB;QAC/CgE,cAAce,MAAM;QACpBd,cAAcc,MAAM;QAEpB,IAAI,CAACnC,mBAAmBuB,OAAO,IAAI,CAACpC,gBAAgBP,KAAK,EAAE;YACzDwC;QACF;IACF;IAEA,MAAMgB,+CAA+ChF,kBAAkB;QACrE6C,cAAcsB,OAAO,GAAG;QACxBvB,mBAAmBuB,OAAO,GAAG;QAE7B,IAAIhB,gBAAgB;YAClBa,cAAce,MAAM;YACpBd,cAAcc,MAAM;YAEpB,IAAIhD,gBAAgBK,MAAM,KAAK,WAAWL,gBAAgBK,MAAM,KAAK,SAAS;gBAC5E6B;YACF;QACF;IACF;IAEA,MAAMgB,+BAA+B;QACnCvC,gBAAgByB,OAAO,GAAG;IAC5B;IAEA,MAAMe,6BAA6B;QACjC,IAAI1C,YAAY;YACdF,mBAAmB;YACnBG,cAAc;QAChB;IACF;IAEA,MAAM0C,gBAAgBzF,MAAMiE,WAAW,CAAC;QACtCd,cAAcsB,OAAO,GAAG;QACxBT,sBAAsB,OAAO;IAC/B,GAAG;QAACA;KAAsB;IAE1B,MAAM0B,qBAAqB1F,MAAMiE,WAAW,CAC1C,IAAOV,iBAAiBJ,cAAcsB,OAAO,GAAG,MAChD;QAAClB;KAAe;IAGlB,MAAMoC,sBAAsB3F,MAAMiE,WAAW,CAAC;QAC5Cd,cAAcsB,OAAO,GAAG;QACxBT,sBAAsB,OAAO;IAC/B,GAAG;QAACA;KAAsB;IAE1B,MAAM4B,qBAAqB5F,MAAMiE,WAAW,CAAC;QAC3Cd,cAAcsB,OAAO,GAAG;QACxBT,sBAAsB,OAAO;IAC/B,GAAG;QAACA;KAAsB;IAE1B3D,wBACEuF,oBACAvC,6CAA6C,OAAOQ,KAAKmB,SAAS,EAClE1B,4CAA4C,OAAOO,KAAKoB,QAAQ;IAGlExE,0BACE;;;;;;KAMC,GACD,SAASoF;QACP,IAAI,CAACtC,kBAAkB,CAACM,KAAKmB,SAAS,CAACP,OAAO,EAAE;YAC9C;QACF;QAEA,MAAMqB,mBAAmB;YACvB,wBAAwB,GACxB,MAAMd,YAAYnB,KAAKmB,SAAS,CAACP,OAAO;YACxC,mEAAmE,GACnE,IACE,CAACpC,gBAAgBP,KAAK,IACtB3B,cAAc6E,cACdA,cAAcxE,iCAAiCwE,YAC/C;gBACA,wBAAwB,GACxB7B,cAAcsB,OAAO,GAAG;YAC1B;QACF;QAEA,MAAMsB,MAAM7F,UAAU2D,KAAKmB,SAAS,CAACP,OAAO;QAC5CsB,IAAIC,gBAAgB,CAAC,QAAQF;QAC7B,OAAO;YACLC,IAAIE,mBAAmB,CAAC,QAAQH;QAClC;IACF,GACA;QAACvC;QAAgBM,KAAKmB,SAAS;QAAE3C;KAAgB;IAGnD5B,0BACE,SAASyF;QACP,IAAIpD,cAAcT,gBAAgBP,KAAK,KAAKa,iBAAiB;YAC3D;QACF;QAEA,IAAIN,gBAAgBP,KAAK,EAAE;YACzBc,mBAAmB;QACrB,OAAO,IAAII,gBAAgByB,OAAO,IAAI,CAAC3B,YAAY;YACjDC,cAAc;QAChB,OAAO;YACLH,mBAAmB;QACrB;QAEA,OAAO;YACLgC,aAAaxB,eAAeqB,OAAO;QACrC;IACF,GACA;QAACpC;QAAiBM;QAAiBG;KAAW;IAGhD,MAAMqD,oBAAoBnG,MAAMiD,MAAM,CAAiB,CAAC;IACxD,MAAMmD,mBAAmBpG,MAAMiD,MAAM,CAAgB;QAAEoD,OAAO,CAAC;IAAE;IAEjE,IAAI1D,iBAAiB;QACnByD,iBAAiB3B,OAAO,CAAC4B,KAAK,GAAGzF,wCAC/BgD,UACAF,GACAC,GACAvB,WACA0B;QAGF,IAAIpC,oBAAoB;YACtB0E,iBAAiB3B,OAAO,CAAC4B,KAAK,CAACC,aAAa,GAAG;QACjD;IACF;IAEA,IAAI/C,gBAAgB;QAClB4C,kBAAkB1B,OAAO,CAAC8B,OAAO,GAAG/B;QACpC2B,kBAAkB1B,OAAO,CAAC+B,MAAM,GAAG9B;IACrC;IAEA,IAAIlB,gBAAgB;QAClB2C,kBAAkB1B,OAAO,CAACgC,OAAO,GAAGvB;IACtC;IAEA,IAAIzB,gBAAgB;QAClB0C,kBAAkB1B,OAAO,CAACiC,WAAW,GAAGtB;QAExC,IAAI5D,mBAAmB,CAACgC,gBAAgB;YACtC2C,kBAAkB1B,OAAO,CAACgC,OAAO,GAAGtB;QACtC;QAEA,IAAI,CAACzD,oBAAoB;YACvB0E,iBAAiB3B,OAAO,CAACiC,WAAW,GAAGtB;QACzC;IACF;IAEA,IAAI3B,kBAAkBF,gBAAgB;QACpC4C,kBAAkB1B,OAAO,CAACkC,YAAY,GAAGrB;QAEzC,IAAI,CAAC5D,oBAAoB;YACvB0E,iBAAiB3B,OAAO,CAACkC,YAAY,GAAGrB;QAC1C;IACF;IAEA,IAAI3C,iBAAiB;QACnByD,iBAAiB3B,OAAO,CAACmC,gBAAgB,GAAGrB;QAC5Ca,iBAAiB3B,OAAO,CAACoC,cAAc,GAAGrB;IAC5C;IAEA,OAAO;QACLpE;QACAU,OAAOa;QACPG;QACAe;QACAiD,gBAAgBX,kBAAkB1B,OAAO;QACzCsC,eAAeX,iBAAiB3B,OAAO;QACvCX;QACAkD,SAASvB;QACT,4FAA4F;QAC5F,kCAAkC;QAClCwB,iBAAiB,CAACtE,mBAAmBf,uBAAuBQ,YAAYuD;QACxE,2BAA2B;QAC3B,EAAE;QACF,+FAA+F;QAC/F,qFAAqF;QACrF,mFAAmF;QACnF,gFAAgF;QAChFuB,gBAAgBxB;IAClB;AACF,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,iBAAiB,GAAG;KAC7B,KAAK,IAAI,OAAO,CACf,MAAM,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAC/C,MAAM,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAC7C,GAAG,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC;CACrD,CAAC;AAEF,wBAAgB,QAAQ,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,MAAM,aAG9D,CAAC,UAInB;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAQ9D;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAWxF;AAED,eAAO,MAAM,eAAe,0DAA2C,CAAC,SAC/C,CAAC;AAE1B,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,QAK5E;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,QAWzF;AAED,KAAK,wBAAwB,CAAC,CAAC,IAAI;KAChC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,wBAAwB,yDAC9B,CAAC,KACL,yBAAyB,CAAC,CAQ5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,2FAIlB,MAAM,YAAY;UAC+B,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS;CAClD,CAAC;AAEnC,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GACnD,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAM1D;AAED,wBAAgB,mBAAmB,CACjC,CAAC,SAAS,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAC1D,CAAC,SAAS,OAAO,EAEjB,QAAQ,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GACnD,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;CAAE,CAStF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC;;;;;;EAMhG"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,iBAAiB,GAAG;KAC7B,KAAK,IAAI,OAAO,CACf,MAAM,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAC/C,MAAM,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAC7C,GAAG,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC;CACrD,CAAC;AAEF,wBAAgB,QAAQ,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,MAAM,aAG9D,CAAC,UAInB;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAQ9D;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAWxF;AAED,eAAO,MAAM,eAAe,0DAA2C,CAAC,SAC/C,CAAC;AAE1B,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,QAK5E;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,QAWzF;AAED,KAAK,wBAAwB,CAAC,CAAC,IAAI;KAChC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,wBAAwB,yDAC9B,CAAC,KACL,yBAAyB,CAAC,CAQ5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,2FAIlB,MAAM,YAAY;UAC+B,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS;CAClD,CAAC;AAEnC,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GACnD,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAM1D;AAED,wBAAgB,mBAAmB,CACjC,CAAC,SAAS,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAC1D,CAAC,SAAS,OAAO,EAEjB,QAAQ,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GACnD,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;CAAE,CAStF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC;;;;;;EAKhG"}
@@ -69,8 +69,7 @@ export function isForwardRefElement(children) {
69
69
  * При использовании пропа fetchPriority генерируется warning "Invalid DOM property" (версия React 18.*)
70
70
  * Ворнинга нет в React версии 19.*, поэтому пока поддерживаем 2 версии наименования
71
71
  */ export function getFetchPriorityProp(value) {
72
- // @ts-expect-error: TS2339 Появится только в версии React >= 19.*
73
- if (Boolean(React.use)) {
72
+ if (React.version.startsWith('19')) {
74
73
  return {
75
74
  fetchPriority: value
76
75
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils.ts"],"sourcesContent":["import * as React from 'react';\n\nexport type ImgOnlyAttributes = {\n [index in Exclude<\n keyof React.ImgHTMLAttributes<HTMLImageElement>,\n keyof React.HTMLAttributes<HTMLImageElement>\n >]: React.ImgHTMLAttributes<HTMLImageElement>[index];\n};\n\nexport function debounce<A extends any[]>(fn: (...args: A) => void, delay: number) {\n let timeout: any;\n\n return (...args: A) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => fn(...args), delay);\n };\n}\n\nexport function setRef<T>(element: T, ref?: React.Ref<T>): void {\n if (ref) {\n if (typeof ref === 'function') {\n ref(element);\n } else {\n (ref as React.MutableRefObject<T>).current = element;\n }\n }\n}\n\nexport function multiRef<T>(...refs: Array<React.Ref<T> | undefined>): React.RefObject<T> {\n let current: T | null = null;\n return {\n get current() {\n return current;\n },\n set current(element) {\n current = element;\n refs.forEach((ref) => ref && setRef(element, ref));\n },\n };\n}\n\nexport const stopPropagation = <T extends React.SyntheticEvent>(event: T) =>\n event.stopPropagation();\n\nexport function addClassNameToElement(element: HTMLElement, className: string) {\n const elementClassName = element.getAttribute('class') || '';\n const updatedClassName = `${elementClassName}${elementClassName ? ' ' : ''}${className}`;\n\n element.setAttribute('class', updatedClassName);\n}\n\nexport function removeClassNameFromElement(element: HTMLElement, classNameToRemove: string) {\n const classNamesArray = (element.getAttribute('class') || '').split(/\\s+/);\n const elementIndexToRemove = classNamesArray.findIndex(\n (className) => className === classNameToRemove,\n );\n if (elementIndexToRemove === -1) {\n return;\n }\n classNamesArray.splice(elementIndexToRemove, 1);\n\n element.setAttribute('class', classNamesArray.join(' '));\n}\n\ntype ExcludeKeysWithUndefined<T> = {\n [P in keyof T]?: Exclude<T[P], undefined>;\n};\n\nexport const excludeKeysWithUndefined = <T extends Record<string | number | symbol, any>>(\n obj: T,\n): ExcludeKeysWithUndefined<T> => {\n const filteredObj: ExcludeKeysWithUndefined<T> = {};\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] !== undefined) {\n filteredObj[key] = obj[key];\n }\n }\n return filteredObj;\n};\n\nexport const isDOMTypeElement = <\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element,\n>(\n element: React.ReactElement,\n): element is Omit<React.DOMElement<P, T>, 'ref'> & { ref?: React.Ref<T> | undefined } =>\n typeof element.type === 'string';\n\nexport function isValidNotReactFragmentElement(\n children: Parameters<typeof React.isValidElement>[0],\n): children is React.ReactElement<Record<PropertyKey, any>> {\n return (\n React.isValidElement(children) &&\n // @ts-expect-error: TS2339 $$typeof всегда symbol, в отличии от type, благодаря этому пропускаем лишние проверки на тип.\n children.$$typeof !== Symbol.for('react.fragment')\n );\n}\n\nexport function isForwardRefElement<\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element,\n>(\n children: Parameters<typeof React.isValidElement>[0],\n): children is Omit<React.DOMElement<P, T>, 'ref'> & { ref?: React.Ref<T> | undefined } {\n if (!React.isValidElement(children)) {\n return false;\n }\n\n // @ts-expect-error: TS2339 $$typeof всегда symbol, в отличии от type, благодаря этому пропускаем лишние проверки на тип.\n // черпаем вдохновение из react-is https://github.com/facebook/react/blob/d48dbb824985166ecb7b2959db03090a8593dce0/packages/react-is/src/ReactIs.js#L119-L121\n const typeOfOfType = children.type && children.type.$$typeof;\n return typeOfOfType === Symbol.for('react.forward_ref');\n}\n\n/**\n * При использовании пропа fetchPriority генерируется warning \"Invalid DOM property\" (версия React 18.*)\n * Ворнинга нет в React версии 19.*, поэтому пока поддерживаем 2 версии наименования\n */\nexport function getFetchPriorityProp(value: React.ImgHTMLAttributes<HTMLElement>['fetchPriority']) {\n // @ts-expect-error: TS2339 Появится только в версии React >= 19.*\n if (Boolean(React.use)) {\n return { fetchPriority: value };\n }\n return { fetchpriority: value };\n}\n"],"names":["React","debounce","fn","delay","timeout","args","clearTimeout","setTimeout","setRef","element","ref","current","multiRef","refs","forEach","stopPropagation","event","addClassNameToElement","className","elementClassName","getAttribute","updatedClassName","setAttribute","removeClassNameFromElement","classNameToRemove","classNamesArray","split","elementIndexToRemove","findIndex","splice","join","excludeKeysWithUndefined","obj","filteredObj","key","hasOwnProperty","undefined","isDOMTypeElement","type","isValidNotReactFragmentElement","children","isValidElement","$$typeof","Symbol","for","isForwardRefElement","typeOfOfType","getFetchPriorityProp","value","Boolean","use","fetchPriority","fetchpriority"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,YAAYA,WAAW,QAAQ;AAS/B,OAAO,SAASC,SAA0BC,EAAwB,EAAEC,KAAa;IAC/E,IAAIC;IAEJ,OAAO,CAAC,GAAGC;QACTC,aAAaF;QACbA,UAAUG,WAAW,IAAML,MAAMG,OAAOF;IAC1C;AACF;AAEA,OAAO,SAASK,OAAUC,QAAU,EAAEC,GAAkB;IACtD,IAAIA,KAAK;QACP,IAAI,OAAOA,QAAQ,YAAY;YAC7BA,IAAID;QACN,OAAO;YACJC,IAAkCC,OAAO,GAAGF;QAC/C;IACF;AACF;AAEA,OAAO,SAASG,SAAY,GAAGC,IAAqC;IAClE,IAAIF,UAAoB;IACxB,OAAO;QACL,IAAIA,WAAU;YACZ,OAAOA;QACT;QACA,IAAIA,SAAQF,QAAS;YACnBE,UAAUF;YACVI,KAAKC,OAAO,CAAC,CAACJ,MAAQA,OAAOF,OAAOC,SAASC;QAC/C;IACF;AACF;AAEA,OAAO,MAAMK,kBAAkB,CAAiCC,QAC9DA,MAAMD,eAAe,GAAG;AAE1B,OAAO,SAASE,sBAAsBR,QAAoB,EAAES,SAAiB;IAC3E,MAAMC,mBAAmBV,SAAQW,YAAY,CAAC,YAAY;IAC1D,MAAMC,mBAAmB,CAAC,EAAEF,iBAAiB,EAAEA,mBAAmB,MAAM,GAAG,EAAED,UAAU,CAAC;IAExFT,SAAQa,YAAY,CAAC,SAASD;AAChC;AAEA,OAAO,SAASE,2BAA2Bd,QAAoB,EAAEe,iBAAyB;IACxF,MAAMC,kBAAkB,AAAChB,CAAAA,SAAQW,YAAY,CAAC,YAAY,EAAC,EAAGM,KAAK,CAAC;IACpE,MAAMC,uBAAuBF,gBAAgBG,SAAS,CACpD,CAACV,YAAcA,cAAcM;IAE/B,IAAIG,yBAAyB,CAAC,GAAG;QAC/B;IACF;IACAF,gBAAgBI,MAAM,CAACF,sBAAsB;IAE7ClB,SAAQa,YAAY,CAAC,SAASG,gBAAgBK,IAAI,CAAC;AACrD;AAMA,OAAO,MAAMC,2BAA2B,CACtCC;IAEA,MAAMC,cAA2C,CAAC;IAClD,IAAK,MAAMC,OAAOF,IAAK;QACrB,IAAIA,IAAIG,cAAc,CAACD,QAAQF,GAAG,CAACE,IAAI,KAAKE,WAAW;YACrDH,WAAW,CAACC,IAAI,GAAGF,GAAG,CAACE,IAAI;QAC7B;IACF;IACA,OAAOD;AACT,EAAE;AAEF,OAAO,MAAMI,mBAAmB,CAI9B5B,WAEA,OAAOA,SAAQ6B,IAAI,KAAK,SAAS;AAEnC,OAAO,SAASC,+BACdC,QAAoD;IAEpD,OACExC,MAAMyC,cAAc,CAACD,aACrB,yHAAyH;IACzHA,SAASE,QAAQ,KAAKC,OAAOC,GAAG,CAAC;AAErC;AAEA,OAAO,SAASC,oBAIdL,QAAoD;IAEpD,IAAI,CAACxC,MAAMyC,cAAc,CAACD,WAAW;QACnC,OAAO;IACT;IAEA,yHAAyH;IACzH,6JAA6J;IAC7J,MAAMM,eAAeN,SAASF,IAAI,IAAIE,SAASF,IAAI,CAACI,QAAQ;IAC5D,OAAOI,iBAAiBH,OAAOC,GAAG,CAAC;AACrC;AAEA;;;CAGC,GACD,OAAO,SAASG,qBAAqBC,KAA4D;IAC/F,kEAAkE;IAClE,IAAIC,QAAQjD,MAAMkD,GAAG,GAAG;QACtB,OAAO;YAAEC,eAAeH;QAAM;IAChC;IACA,OAAO;QAAEI,eAAeJ;IAAM;AAChC"}
1
+ {"version":3,"sources":["../../../src/lib/utils.ts"],"sourcesContent":["import * as React from 'react';\n\nexport type ImgOnlyAttributes = {\n [index in Exclude<\n keyof React.ImgHTMLAttributes<HTMLImageElement>,\n keyof React.HTMLAttributes<HTMLImageElement>\n >]: React.ImgHTMLAttributes<HTMLImageElement>[index];\n};\n\nexport function debounce<A extends any[]>(fn: (...args: A) => void, delay: number) {\n let timeout: any;\n\n return (...args: A) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => fn(...args), delay);\n };\n}\n\nexport function setRef<T>(element: T, ref?: React.Ref<T>): void {\n if (ref) {\n if (typeof ref === 'function') {\n ref(element);\n } else {\n (ref as React.MutableRefObject<T>).current = element;\n }\n }\n}\n\nexport function multiRef<T>(...refs: Array<React.Ref<T> | undefined>): React.RefObject<T> {\n let current: T | null = null;\n return {\n get current() {\n return current;\n },\n set current(element) {\n current = element;\n refs.forEach((ref) => ref && setRef(element, ref));\n },\n };\n}\n\nexport const stopPropagation = <T extends React.SyntheticEvent>(event: T) =>\n event.stopPropagation();\n\nexport function addClassNameToElement(element: HTMLElement, className: string) {\n const elementClassName = element.getAttribute('class') || '';\n const updatedClassName = `${elementClassName}${elementClassName ? ' ' : ''}${className}`;\n\n element.setAttribute('class', updatedClassName);\n}\n\nexport function removeClassNameFromElement(element: HTMLElement, classNameToRemove: string) {\n const classNamesArray = (element.getAttribute('class') || '').split(/\\s+/);\n const elementIndexToRemove = classNamesArray.findIndex(\n (className) => className === classNameToRemove,\n );\n if (elementIndexToRemove === -1) {\n return;\n }\n classNamesArray.splice(elementIndexToRemove, 1);\n\n element.setAttribute('class', classNamesArray.join(' '));\n}\n\ntype ExcludeKeysWithUndefined<T> = {\n [P in keyof T]?: Exclude<T[P], undefined>;\n};\n\nexport const excludeKeysWithUndefined = <T extends Record<string | number | symbol, any>>(\n obj: T,\n): ExcludeKeysWithUndefined<T> => {\n const filteredObj: ExcludeKeysWithUndefined<T> = {};\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] !== undefined) {\n filteredObj[key] = obj[key];\n }\n }\n return filteredObj;\n};\n\nexport const isDOMTypeElement = <\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element,\n>(\n element: React.ReactElement,\n): element is Omit<React.DOMElement<P, T>, 'ref'> & { ref?: React.Ref<T> | undefined } =>\n typeof element.type === 'string';\n\nexport function isValidNotReactFragmentElement(\n children: Parameters<typeof React.isValidElement>[0],\n): children is React.ReactElement<Record<PropertyKey, any>> {\n return (\n React.isValidElement(children) &&\n // @ts-expect-error: TS2339 $$typeof всегда symbol, в отличии от type, благодаря этому пропускаем лишние проверки на тип.\n children.$$typeof !== Symbol.for('react.fragment')\n );\n}\n\nexport function isForwardRefElement<\n P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,\n T extends Element,\n>(\n children: Parameters<typeof React.isValidElement>[0],\n): children is Omit<React.DOMElement<P, T>, 'ref'> & { ref?: React.Ref<T> | undefined } {\n if (!React.isValidElement(children)) {\n return false;\n }\n\n // @ts-expect-error: TS2339 $$typeof всегда symbol, в отличии от type, благодаря этому пропускаем лишние проверки на тип.\n // черпаем вдохновение из react-is https://github.com/facebook/react/blob/d48dbb824985166ecb7b2959db03090a8593dce0/packages/react-is/src/ReactIs.js#L119-L121\n const typeOfOfType = children.type && children.type.$$typeof;\n return typeOfOfType === Symbol.for('react.forward_ref');\n}\n\n/**\n * При использовании пропа fetchPriority генерируется warning \"Invalid DOM property\" (версия React 18.*)\n * Ворнинга нет в React версии 19.*, поэтому пока поддерживаем 2 версии наименования\n */\nexport function getFetchPriorityProp(value: React.ImgHTMLAttributes<HTMLElement>['fetchPriority']) {\n if (React.version.startsWith('19')) {\n return { fetchPriority: value };\n }\n return { fetchpriority: value };\n}\n"],"names":["React","debounce","fn","delay","timeout","args","clearTimeout","setTimeout","setRef","element","ref","current","multiRef","refs","forEach","stopPropagation","event","addClassNameToElement","className","elementClassName","getAttribute","updatedClassName","setAttribute","removeClassNameFromElement","classNameToRemove","classNamesArray","split","elementIndexToRemove","findIndex","splice","join","excludeKeysWithUndefined","obj","filteredObj","key","hasOwnProperty","undefined","isDOMTypeElement","type","isValidNotReactFragmentElement","children","isValidElement","$$typeof","Symbol","for","isForwardRefElement","typeOfOfType","getFetchPriorityProp","value","version","startsWith","fetchPriority","fetchpriority"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,YAAYA,WAAW,QAAQ;AAS/B,OAAO,SAASC,SAA0BC,EAAwB,EAAEC,KAAa;IAC/E,IAAIC;IAEJ,OAAO,CAAC,GAAGC;QACTC,aAAaF;QACbA,UAAUG,WAAW,IAAML,MAAMG,OAAOF;IAC1C;AACF;AAEA,OAAO,SAASK,OAAUC,QAAU,EAAEC,GAAkB;IACtD,IAAIA,KAAK;QACP,IAAI,OAAOA,QAAQ,YAAY;YAC7BA,IAAID;QACN,OAAO;YACJC,IAAkCC,OAAO,GAAGF;QAC/C;IACF;AACF;AAEA,OAAO,SAASG,SAAY,GAAGC,IAAqC;IAClE,IAAIF,UAAoB;IACxB,OAAO;QACL,IAAIA,WAAU;YACZ,OAAOA;QACT;QACA,IAAIA,SAAQF,QAAS;YACnBE,UAAUF;YACVI,KAAKC,OAAO,CAAC,CAACJ,MAAQA,OAAOF,OAAOC,SAASC;QAC/C;IACF;AACF;AAEA,OAAO,MAAMK,kBAAkB,CAAiCC,QAC9DA,MAAMD,eAAe,GAAG;AAE1B,OAAO,SAASE,sBAAsBR,QAAoB,EAAES,SAAiB;IAC3E,MAAMC,mBAAmBV,SAAQW,YAAY,CAAC,YAAY;IAC1D,MAAMC,mBAAmB,CAAC,EAAEF,iBAAiB,EAAEA,mBAAmB,MAAM,GAAG,EAAED,UAAU,CAAC;IAExFT,SAAQa,YAAY,CAAC,SAASD;AAChC;AAEA,OAAO,SAASE,2BAA2Bd,QAAoB,EAAEe,iBAAyB;IACxF,MAAMC,kBAAkB,AAAChB,CAAAA,SAAQW,YAAY,CAAC,YAAY,EAAC,EAAGM,KAAK,CAAC;IACpE,MAAMC,uBAAuBF,gBAAgBG,SAAS,CACpD,CAACV,YAAcA,cAAcM;IAE/B,IAAIG,yBAAyB,CAAC,GAAG;QAC/B;IACF;IACAF,gBAAgBI,MAAM,CAACF,sBAAsB;IAE7ClB,SAAQa,YAAY,CAAC,SAASG,gBAAgBK,IAAI,CAAC;AACrD;AAMA,OAAO,MAAMC,2BAA2B,CACtCC;IAEA,MAAMC,cAA2C,CAAC;IAClD,IAAK,MAAMC,OAAOF,IAAK;QACrB,IAAIA,IAAIG,cAAc,CAACD,QAAQF,GAAG,CAACE,IAAI,KAAKE,WAAW;YACrDH,WAAW,CAACC,IAAI,GAAGF,GAAG,CAACE,IAAI;QAC7B;IACF;IACA,OAAOD;AACT,EAAE;AAEF,OAAO,MAAMI,mBAAmB,CAI9B5B,WAEA,OAAOA,SAAQ6B,IAAI,KAAK,SAAS;AAEnC,OAAO,SAASC,+BACdC,QAAoD;IAEpD,OACExC,MAAMyC,cAAc,CAACD,aACrB,yHAAyH;IACzHA,SAASE,QAAQ,KAAKC,OAAOC,GAAG,CAAC;AAErC;AAEA,OAAO,SAASC,oBAIdL,QAAoD;IAEpD,IAAI,CAACxC,MAAMyC,cAAc,CAACD,WAAW;QACnC,OAAO;IACT;IAEA,yHAAyH;IACzH,6JAA6J;IAC7J,MAAMM,eAAeN,SAASF,IAAI,IAAIE,SAASF,IAAI,CAACI,QAAQ;IAC5D,OAAOI,iBAAiBH,OAAOC,GAAG,CAAC;AACrC;AAEA;;;CAGC,GACD,OAAO,SAASG,qBAAqBC,KAA4D;IAC/F,IAAIhD,MAAMiD,OAAO,CAACC,UAAU,CAAC,OAAO;QAClC,OAAO;YAAEC,eAAeH;QAAM;IAChC;IACA,OAAO;QAAEI,eAAeJ;IAAM;AAChC"}
@@ -77,8 +77,7 @@ Note: В начале классов разделить (`-`), чтобы кра
77
77
 
78
78
  .-deviceType--mobile-forced,
79
79
  .-deviceType--desktop-forced {
80
- /* stylelint-disable-next-line declaration-no-important */
81
- display: none !important;
80
+ /* Пустой класс для CSS Modules (см. CONTRIBUTING.md) */
82
81
  }
83
82
 
84
83
  @media (min-width: 768px) and (pointer: fine),(min-width: 768px) and (min-height: 720px) {
@@ -1,5 +1,4 @@
1
1
  export declare const EDGE_SIZE = 50;
2
- export declare const OUTBOX_OFFSET = -30;
3
2
  export declare const getAutoScrollingData: (clientY: number, scrollEl: Element | Window) => {
4
3
  shouldScrolling: boolean;
5
4
  y: number;
@@ -1 +1 @@
1
- {"version":3,"file":"autoScroll.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDraggableWithDomApi/autoScroll.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,eAAO,MAAM,oBAAoB,YAAa,MAAM,YAAY,OAAO,GAAG,MAAM;;;CA+B/E,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM;IAAE,eAAe,EAAE,OAAO,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,eAAO,MAAM,0BAA0B,aAAc,OAAO,GAAG,MAAM;wBAgBxC,mBAAmB;;;CAgB/C,CAAC"}
1
+ {"version":3,"file":"autoScroll.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDraggableWithDomApi/autoScroll.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,SAAS,KAAK,CAAC;AAE5B,eAAO,MAAM,oBAAoB,YAAa,MAAM,YAAY,OAAO,GAAG,MAAM;;;CA6B/E,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,MAAM;IAAE,eAAe,EAAE,OAAO,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,eAAO,MAAM,0BAA0B,aAAc,OAAO,GAAG,MAAM;wBAgBxC,mBAAmB;;;CAgB/C,CAAC"}
@@ -2,7 +2,6 @@ import { getNodeScroll, getScrollHeight, getScrollRect } from '../../lib/dom';
2
2
  import { rafSchd } from '../../lib/rafSchd';
3
3
  const SCROLL_SPEED = 10;
4
4
  export const EDGE_SIZE = 50;
5
- export const OUTBOX_OFFSET = -30;
6
5
  export const getAutoScrollingData = (clientY, scrollEl)=>{
7
6
  const scrollTop = Math.floor(getNodeScroll(scrollEl).scrollTop);
8
7
  const { relative, edges } = getScrollRect(scrollEl);
@@ -17,7 +16,7 @@ export const getAutoScrollingData = (clientY, scrollEl)=>{
17
16
  const isInTopEdge = topDistance <= EDGE_SIZE;
18
17
  const isInBottomEdge = bottomDistance <= EDGE_SIZE;
19
18
  const result = {
20
- shouldScrolling: canScrollUp && isInTopEdge && topDistance >= OUTBOX_OFFSET || canScrollDown && isInBottomEdge && bottomDistance >= OUTBOX_OFFSET,
19
+ shouldScrolling: canScrollUp && isInTopEdge || canScrollDown && isInBottomEdge,
21
20
  y: 0
22
21
  };
23
22
  // Inspired by https://github.com/SortableJS/Sortable/issues/1907#issuecomment-1495403785
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/hooks/useDraggableWithDomApi/autoScroll.ts"],"sourcesContent":["import { getNodeScroll, getScrollHeight, getScrollRect } from '../../lib/dom';\nimport { rafSchd } from '../../lib/rafSchd';\n\nconst SCROLL_SPEED = 10;\nexport const EDGE_SIZE = 50;\nexport const OUTBOX_OFFSET = -30;\n\nexport const getAutoScrollingData = (clientY: number, scrollEl: Element | Window) => {\n const scrollTop = Math.floor(getNodeScroll(scrollEl).scrollTop);\n\n const { relative, edges } = getScrollRect(scrollEl);\n const viewportHeight = relative.height;\n const documentHeight = getScrollHeight(scrollEl);\n const maxScrollY = documentHeight - viewportHeight;\n const canScrollUp = scrollTop > 0;\n const canScrollDown = scrollTop < maxScrollY;\n\n const [edgeTop, edgeBottom] = edges.y;\n const topDistance = clientY - edgeTop;\n const bottomDistance = edgeBottom - clientY;\n const isInTopEdge = topDistance <= EDGE_SIZE;\n const isInBottomEdge = bottomDistance <= EDGE_SIZE;\n\n const result = {\n shouldScrolling:\n (canScrollUp && isInTopEdge && topDistance >= OUTBOX_OFFSET) ||\n (canScrollDown && isInBottomEdge && bottomDistance >= OUTBOX_OFFSET),\n y: 0,\n };\n\n // Inspired by https://github.com/SortableJS/Sortable/issues/1907#issuecomment-1495403785\n if (isInTopEdge) {\n result.y = -1 * ((EDGE_SIZE - topDistance) / EDGE_SIZE) * SCROLL_SPEED;\n } else if (isInBottomEdge) {\n result.y = ((EDGE_SIZE - bottomDistance) / EDGE_SIZE) * SCROLL_SPEED;\n }\n\n return result;\n};\n\nexport type AutoScrollingDataFn = () => { shouldScrolling: boolean; y: number };\n\nexport const createAutoScrollController = (scrollEl: Element | Window) => {\n let isRunning = false;\n const scheduledScroll = rafSchd(scroll);\n\n function scroll(fn: AutoScrollingDataFn) {\n const { shouldScrolling, y } = fn();\n if (shouldScrolling) {\n isRunning = true;\n scrollEl.scrollBy(0, y);\n scheduledScroll(fn);\n } else {\n isRunning = false;\n scheduledScroll.cancel();\n }\n }\n\n const tryAutoScroll = (fn: AutoScrollingDataFn) => {\n scheduledScroll(fn);\n };\n\n const stop = () => {\n isRunning = false;\n scheduledScroll.cancel();\n };\n\n return {\n tryAutoScroll,\n stop,\n get isRunning() {\n return isRunning;\n },\n };\n};\n"],"names":["getNodeScroll","getScrollHeight","getScrollRect","rafSchd","SCROLL_SPEED","EDGE_SIZE","OUTBOX_OFFSET","getAutoScrollingData","clientY","scrollEl","scrollTop","Math","floor","relative","edges","viewportHeight","height","documentHeight","maxScrollY","canScrollUp","canScrollDown","edgeTop","edgeBottom","y","topDistance","bottomDistance","isInTopEdge","isInBottomEdge","result","shouldScrolling","createAutoScrollController","isRunning","scheduledScroll","scroll","fn","scrollBy","cancel","tryAutoScroll","stop"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,aAAa,EAAEC,eAAe,EAAEC,aAAa,QAAQ,gBAAgB;AAC9E,SAASC,OAAO,QAAQ,oBAAoB;AAE5C,MAAMC,eAAe;AACrB,OAAO,MAAMC,YAAY,GAAG;AAC5B,OAAO,MAAMC,gBAAgB,CAAC,GAAG;AAEjC,OAAO,MAAMC,uBAAuB,CAACC,SAAiBC;IACpD,MAAMC,YAAYC,KAAKC,KAAK,CAACZ,cAAcS,UAAUC,SAAS;IAE9D,MAAM,EAAEG,QAAQ,EAAEC,KAAK,EAAE,GAAGZ,cAAcO;IAC1C,MAAMM,iBAAiBF,SAASG,MAAM;IACtC,MAAMC,iBAAiBhB,gBAAgBQ;IACvC,MAAMS,aAAaD,iBAAiBF;IACpC,MAAMI,cAAcT,YAAY;IAChC,MAAMU,gBAAgBV,YAAYQ;IAElC,MAAM,CAACG,SAASC,WAAW,GAAGR,MAAMS,CAAC;IACrC,MAAMC,cAAchB,UAAUa;IAC9B,MAAMI,iBAAiBH,aAAad;IACpC,MAAMkB,cAAcF,eAAenB;IACnC,MAAMsB,iBAAiBF,kBAAkBpB;IAEzC,MAAMuB,SAAS;QACbC,iBACE,AAACV,eAAeO,eAAeF,eAAelB,iBAC7Cc,iBAAiBO,kBAAkBF,kBAAkBnB;QACxDiB,GAAG;IACL;IAEA,yFAAyF;IACzF,IAAIG,aAAa;QACfE,OAAOL,CAAC,GAAG,CAAC,IAAK,CAAA,AAAClB,CAAAA,YAAYmB,WAAU,IAAKnB,SAAQ,IAAKD;IAC5D,OAAO,IAAIuB,gBAAgB;QACzBC,OAAOL,CAAC,GAAG,AAAElB,CAAAA,YAAYoB,cAAa,IAAKpB,YAAaD;IAC1D;IAEA,OAAOwB;AACT,EAAE;AAIF,OAAO,MAAME,6BAA6B,CAACrB;IACzC,IAAIsB,YAAY;IAChB,MAAMC,kBAAkB7B,QAAQ8B;IAEhC,SAASA,OAAOC,EAAuB;QACrC,MAAM,EAAEL,eAAe,EAAEN,CAAC,EAAE,GAAGW;QAC/B,IAAIL,iBAAiB;YACnBE,YAAY;YACZtB,SAAS0B,QAAQ,CAAC,GAAGZ;YACrBS,gBAAgBE;QAClB,OAAO;YACLH,YAAY;YACZC,gBAAgBI,MAAM;QACxB;IACF;IAEA,MAAMC,gBAAgB,CAACH;QACrBF,gBAAgBE;IAClB;IAEA,MAAMI,OAAO;QACXP,YAAY;QACZC,gBAAgBI,MAAM;IACxB;IAEA,OAAO;QACLC;QACAC;QACA,IAAIP,aAAY;YACd,OAAOA;QACT;IACF;AACF,EAAE"}
1
+ {"version":3,"sources":["../../../src/hooks/useDraggableWithDomApi/autoScroll.ts"],"sourcesContent":["import { getNodeScroll, getScrollHeight, getScrollRect } from '../../lib/dom';\nimport { rafSchd } from '../../lib/rafSchd';\n\nconst SCROLL_SPEED = 10;\nexport const EDGE_SIZE = 50;\n\nexport const getAutoScrollingData = (clientY: number, scrollEl: Element | Window) => {\n const scrollTop = Math.floor(getNodeScroll(scrollEl).scrollTop);\n\n const { relative, edges } = getScrollRect(scrollEl);\n const viewportHeight = relative.height;\n const documentHeight = getScrollHeight(scrollEl);\n const maxScrollY = documentHeight - viewportHeight;\n const canScrollUp = scrollTop > 0;\n const canScrollDown = scrollTop < maxScrollY;\n\n const [edgeTop, edgeBottom] = edges.y;\n const topDistance = clientY - edgeTop;\n const bottomDistance = edgeBottom - clientY;\n const isInTopEdge = topDistance <= EDGE_SIZE;\n const isInBottomEdge = bottomDistance <= EDGE_SIZE;\n\n const result = {\n shouldScrolling: (canScrollUp && isInTopEdge) || (canScrollDown && isInBottomEdge),\n y: 0,\n };\n\n // Inspired by https://github.com/SortableJS/Sortable/issues/1907#issuecomment-1495403785\n if (isInTopEdge) {\n result.y = -1 * ((EDGE_SIZE - topDistance) / EDGE_SIZE) * SCROLL_SPEED;\n } else if (isInBottomEdge) {\n result.y = ((EDGE_SIZE - bottomDistance) / EDGE_SIZE) * SCROLL_SPEED;\n }\n\n return result;\n};\n\nexport type AutoScrollingDataFn = () => { shouldScrolling: boolean; y: number };\n\nexport const createAutoScrollController = (scrollEl: Element | Window) => {\n let isRunning = false;\n const scheduledScroll = rafSchd(scroll);\n\n function scroll(fn: AutoScrollingDataFn) {\n const { shouldScrolling, y } = fn();\n if (shouldScrolling) {\n isRunning = true;\n scrollEl.scrollBy(0, y);\n scheduledScroll(fn);\n } else {\n isRunning = false;\n scheduledScroll.cancel();\n }\n }\n\n const tryAutoScroll = (fn: AutoScrollingDataFn) => {\n scheduledScroll(fn);\n };\n\n const stop = () => {\n isRunning = false;\n scheduledScroll.cancel();\n };\n\n return {\n tryAutoScroll,\n stop,\n get isRunning() {\n return isRunning;\n },\n };\n};\n"],"names":["getNodeScroll","getScrollHeight","getScrollRect","rafSchd","SCROLL_SPEED","EDGE_SIZE","getAutoScrollingData","clientY","scrollEl","scrollTop","Math","floor","relative","edges","viewportHeight","height","documentHeight","maxScrollY","canScrollUp","canScrollDown","edgeTop","edgeBottom","y","topDistance","bottomDistance","isInTopEdge","isInBottomEdge","result","shouldScrolling","createAutoScrollController","isRunning","scheduledScroll","scroll","fn","scrollBy","cancel","tryAutoScroll","stop"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,aAAa,EAAEC,eAAe,EAAEC,aAAa,QAAQ,gBAAgB;AAC9E,SAASC,OAAO,QAAQ,oBAAoB;AAE5C,MAAMC,eAAe;AACrB,OAAO,MAAMC,YAAY,GAAG;AAE5B,OAAO,MAAMC,uBAAuB,CAACC,SAAiBC;IACpD,MAAMC,YAAYC,KAAKC,KAAK,CAACX,cAAcQ,UAAUC,SAAS;IAE9D,MAAM,EAAEG,QAAQ,EAAEC,KAAK,EAAE,GAAGX,cAAcM;IAC1C,MAAMM,iBAAiBF,SAASG,MAAM;IACtC,MAAMC,iBAAiBf,gBAAgBO;IACvC,MAAMS,aAAaD,iBAAiBF;IACpC,MAAMI,cAAcT,YAAY;IAChC,MAAMU,gBAAgBV,YAAYQ;IAElC,MAAM,CAACG,SAASC,WAAW,GAAGR,MAAMS,CAAC;IACrC,MAAMC,cAAchB,UAAUa;IAC9B,MAAMI,iBAAiBH,aAAad;IACpC,MAAMkB,cAAcF,eAAelB;IACnC,MAAMqB,iBAAiBF,kBAAkBnB;IAEzC,MAAMsB,SAAS;QACbC,iBAAiB,AAACV,eAAeO,eAAiBN,iBAAiBO;QACnEJ,GAAG;IACL;IAEA,yFAAyF;IACzF,IAAIG,aAAa;QACfE,OAAOL,CAAC,GAAG,CAAC,IAAK,CAAA,AAACjB,CAAAA,YAAYkB,WAAU,IAAKlB,SAAQ,IAAKD;IAC5D,OAAO,IAAIsB,gBAAgB;QACzBC,OAAOL,CAAC,GAAG,AAAEjB,CAAAA,YAAYmB,cAAa,IAAKnB,YAAaD;IAC1D;IAEA,OAAOuB;AACT,EAAE;AAIF,OAAO,MAAME,6BAA6B,CAACrB;IACzC,IAAIsB,YAAY;IAChB,MAAMC,kBAAkB5B,QAAQ6B;IAEhC,SAASA,OAAOC,EAAuB;QACrC,MAAM,EAAEL,eAAe,EAAEN,CAAC,EAAE,GAAGW;QAC/B,IAAIL,iBAAiB;YACnBE,YAAY;YACZtB,SAAS0B,QAAQ,CAAC,GAAGZ;YACrBS,gBAAgBE;QAClB,OAAO;YACLH,YAAY;YACZC,gBAAgBI,MAAM;QACxB;IACF;IAEA,MAAMC,gBAAgB,CAACH;QACrBF,gBAAgBE;IAClB;IAEA,MAAMI,OAAO;QACXP,YAAY;QACZC,gBAAgBI,MAAM;IACxB;IAEA,OAAO;QACLC;QACAC;QACA,IAAIP,aAAY;YACd,OAAOA;QACT;IACF;AACF,EAAE"}
@@ -0,0 +1,6 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * Хук вызывает переданный коллбэк при изменении размеров элемента.
4
+ */
5
+ export declare function useResizeObserver(ref: React.MutableRefObject<HTMLElement | null>, callback: (element: HTMLElement) => void): void;
6
+ //# sourceMappingURL=useResizeObserver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResizeObserver.d.ts","sourceRoot":"","sources":["../../src/hooks/useResizeObserver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,KAAK,CAAC,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,EAC/C,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,QAmBzC"}
@@ -0,0 +1,23 @@
1
+ import * as React from 'react';
2
+ import { CustomResizeObserver } from '../lib/floating/customResizeObserver';
3
+ import { useIsomorphicLayoutEffect } from '../lib/useIsomorphicLayoutEffect';
4
+ import { useStableCallback } from './useStableCallback';
5
+ /**
6
+ * Хук вызывает переданный коллбэк при изменении размеров элемента.
7
+ */ export function useResizeObserver(ref, callback) {
8
+ const stableCallback = useStableCallback(callback);
9
+ useIsomorphicLayoutEffect(function addResizeObserverHandler() {
10
+ /* istanbul ignore if: невозможный кейс (в SSR вызова этой функции не будет) */ if (!ref.current) {
11
+ return;
12
+ }
13
+ const element = ref.current;
14
+ const observer = new CustomResizeObserver(()=>stableCallback(element));
15
+ observer.observe(element);
16
+ observer.appendToTheDOM();
17
+ return ()=>observer.disconnect();
18
+ }, [
19
+ ref
20
+ ]);
21
+ }
22
+
23
+ //# sourceMappingURL=useResizeObserver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hooks/useResizeObserver.ts"],"sourcesContent":["import * as React from 'react';\nimport { CustomResizeObserver } from '../lib/floating/customResizeObserver';\nimport { useIsomorphicLayoutEffect } from '../lib/useIsomorphicLayoutEffect';\nimport { useStableCallback } from './useStableCallback';\n\n/**\n * Хук вызывает переданный коллбэк при изменении размеров элемента.\n */\nexport function useResizeObserver(\n ref: React.MutableRefObject<HTMLElement | null>,\n callback: (element: HTMLElement) => void,\n) {\n const stableCallback = useStableCallback(callback);\n\n useIsomorphicLayoutEffect(\n function addResizeObserverHandler() {\n /* istanbul ignore if: невозможный кейс (в SSR вызова этой функции не будет) */\n if (!ref.current) {\n return;\n }\n const element = ref.current;\n const observer = new CustomResizeObserver(() => stableCallback(element));\n observer.observe(element);\n observer.appendToTheDOM();\n\n return () => observer.disconnect();\n },\n [ref],\n );\n}\n"],"names":["React","CustomResizeObserver","useIsomorphicLayoutEffect","useStableCallback","useResizeObserver","ref","callback","stableCallback","addResizeObserverHandler","current","element","observer","observe","appendToTheDOM","disconnect"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,oBAAoB,QAAQ,uCAAuC;AAC5E,SAASC,yBAAyB,QAAQ,mCAAmC;AAC7E,SAASC,iBAAiB,QAAQ,sBAAsB;AAExD;;CAEC,GACD,OAAO,SAASC,kBACdC,GAA+C,EAC/CC,QAAwC;IAExC,MAAMC,iBAAiBJ,kBAAkBG;IAEzCJ,0BACE,SAASM;QACP,6EAA6E,GAC7E,IAAI,CAACH,IAAII,OAAO,EAAE;YAChB;QACF;QACA,MAAMC,UAAUL,IAAII,OAAO;QAC3B,MAAME,WAAW,IAAIV,qBAAqB,IAAMM,eAAeG;QAC/DC,SAASC,OAAO,CAACF;QACjBC,SAASE,cAAc;QAEvB,OAAO,IAAMF,SAASG,UAAU;IAClC,GACA;QAACT;KAAI;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"customResizeObserver.d.ts","sourceRoot":"","sources":["../../../src/lib/floating/customResizeObserver.ts"],"names":[],"mappings":"AA6BA,qBAAa,oBAAoB;IAOnB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAN3C,OAAO,EAAE,KAAK,CAAC;QACb,MAAM,EAAE,WAAW,CAAC;QACpB,MAAM,EAAE,iBAAiB,CAAC;KAC3B,CAAC,CAAM;IACR,wBAAwB,EAAE,gBAAgB,GAAG,IAAI,CAAQ;gBAE5B,cAAc,EAAE,MAAM,IAAI;IAIvD,OAAO,CAAC,OAAO,EAAE,WAAW;IAO5B,cAAc;IAYd,kBAAkB,CAAC,OAAO,EAAE,WAAW;IAUvC,4BAA4B,CAAC,OAAO,EAAE,WAAW;IAWjD,UAAU;CAeX"}
1
+ {"version":3,"file":"customResizeObserver.d.ts","sourceRoot":"","sources":["../../../src/lib/floating/customResizeObserver.ts"],"names":[],"mappings":"AAsCA,qBAAa,oBAAoB;IAOnB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAN3C,OAAO,EAAE,KAAK,CAAC;QACb,MAAM,EAAE,WAAW,CAAC;QACpB,MAAM,EAAE,iBAAiB,CAAC;KAC3B,CAAC,CAAM;IACR,wBAAwB,EAAE,gBAAgB,GAAG,IAAI,CAAQ;gBAE5B,cAAc,EAAE,MAAM,IAAI;IAIvD,OAAO,CAAC,OAAO,EAAE,WAAW;IAO5B,cAAc;IAYd,kBAAkB,CAAC,OAAO,EAAE,WAAW;IAUvC,4BAA4B,CAAC,OAAO,EAAE,WAAW;IAWjD,UAAU;CAeX"}
@@ -7,7 +7,8 @@ const defaultIframeStyles = {
7
7
  width: '100%',
8
8
  height: '100%',
9
9
  pointerEvents: 'none',
10
- opacity: '0'
10
+ opacity: '0',
11
+ border: '0'
11
12
  };
12
13
  /*
13
14
  * Специальный CustomResizeObserver как fallback для ResizeObserver
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/floating/customResizeObserver.ts"],"sourcesContent":["const defaultIframeStyles: Pick<\n CSSStyleDeclaration,\n 'position' | 'left' | 'top' | 'zIndex' | 'width' | 'height' | 'pointerEvents' | 'opacity'\n> = {\n position: 'absolute',\n left: '0',\n top: '0',\n zIndex: '-1',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n opacity: '0',\n};\n\n/*\n * Специальный CustomResizeObserver как fallback для ResizeObserver\n * Используется для вызова update() функции (перерисовка плавающего окна) floating-ui\n * при изменении размера reference или floating элементов.\n *\n * По умолчанию пытаемся нарисовать скрытый, абсолютно позиционированный относительно\n * наблюдаемого элемента iframe.\n * В случае же, если наблюдаемый элемент имеет position: static, то правильно спозиционировать\n * iframe у нас не получится, поэтому в такой ситуации мы используем MutationObserver.\n *\n * Использовать только MutationObserver мы не можем, потому что с помощью него нельзя отследить\n * изменение размера вызванное переполнением текста.\n *\n * Применяется только если нету поддержики или полифила ResizeObserver.\n * */\nexport class CustomResizeObserver {\n records: Array<{\n target: HTMLElement;\n iframe: HTMLIFrameElement;\n }> = [];\n mutationObserverFallback: MutationObserver | null = null;\n\n constructor(private readonly updateFunction: () => void) {\n this.updateFunction = updateFunction;\n }\n\n observe(element: HTMLElement) {\n if (isPositioned(element)) {\n return this.observeUsingIframe(element);\n }\n return this.observeUsingMutationObserver(element);\n }\n\n appendToTheDOM() {\n for (let record of this.records) {\n record.target.appendChild(record.iframe);\n }\n\n for (let record of this.records) {\n if (record.iframe.contentWindow) {\n record.iframe.contentWindow.addEventListener('resize', this.updateFunction);\n }\n }\n }\n\n observeUsingIframe(element: HTMLElement) {\n const iframe = element.ownerDocument.createElement('iframe');\n iframe.src = 'javascript:void(0)';\n iframe.ariaHidden = 'true';\n iframe.tabIndex = -1;\n Object.assign(iframe.style, defaultIframeStyles);\n\n this.records.push({ target: element, iframe });\n }\n\n observeUsingMutationObserver(element: HTMLElement) {\n if (!this.mutationObserverFallback) {\n this.mutationObserverFallback = new MutationObserver(this.updateFunction);\n }\n\n this.mutationObserverFallback.observe(element, {\n childList: true,\n subtree: true,\n });\n }\n\n disconnect() {\n this.records.map(({ target, iframe }) => {\n if (iframe.contentWindow) {\n iframe.contentWindow.removeEventListener('resize', this.updateFunction);\n }\n\n target.removeChild(iframe);\n });\n this.records = [];\n\n if (this.mutationObserverFallback) {\n this.mutationObserverFallback.disconnect();\n }\n this.mutationObserverFallback = null;\n }\n}\n\nfunction isPositioned(element: HTMLElement): boolean {\n return getComputedStyle(element).position !== 'static';\n}\n"],"names":["defaultIframeStyles","position","left","top","zIndex","width","height","pointerEvents","opacity","CustomResizeObserver","observe","element","isPositioned","observeUsingIframe","observeUsingMutationObserver","appendToTheDOM","record","records","target","appendChild","iframe","contentWindow","addEventListener","updateFunction","ownerDocument","createElement","src","ariaHidden","tabIndex","Object","assign","style","push","mutationObserverFallback","MutationObserver","childList","subtree","disconnect","map","removeEventListener","removeChild","constructor","getComputedStyle"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";AAAA,MAAMA,sBAGF;IACFC,UAAU;IACVC,MAAM;IACNC,KAAK;IACLC,QAAQ;IACRC,OAAO;IACPC,QAAQ;IACRC,eAAe;IACfC,SAAS;AACX;AAEA;;;;;;;;;;;;;;GAcG,GACH,OAAO,MAAMC;IAWXC,QAAQC,OAAoB,EAAE;QAC5B,IAAIC,aAAaD,UAAU;YACzB,OAAO,IAAI,CAACE,kBAAkB,CAACF;QACjC;QACA,OAAO,IAAI,CAACG,4BAA4B,CAACH;IAC3C;IAEAI,iBAAiB;QACf,KAAK,IAAIC,UAAU,IAAI,CAACC,OAAO,CAAE;YAC/BD,OAAOE,MAAM,CAACC,WAAW,CAACH,OAAOI,MAAM;QACzC;QAEA,KAAK,IAAIJ,UAAU,IAAI,CAACC,OAAO,CAAE;YAC/B,IAAID,OAAOI,MAAM,CAACC,aAAa,EAAE;gBAC/BL,OAAOI,MAAM,CAACC,aAAa,CAACC,gBAAgB,CAAC,UAAU,IAAI,CAACC,cAAc;YAC5E;QACF;IACF;IAEAV,mBAAmBF,OAAoB,EAAE;QACvC,MAAMS,SAAST,QAAQa,aAAa,CAACC,aAAa,CAAC;QACnDL,OAAOM,GAAG,GAAG;QACbN,OAAOO,UAAU,GAAG;QACpBP,OAAOQ,QAAQ,GAAG,CAAC;QACnBC,OAAOC,MAAM,CAACV,OAAOW,KAAK,EAAE/B;QAE5B,IAAI,CAACiB,OAAO,CAACe,IAAI,CAAC;YAAEd,QAAQP;YAASS;QAAO;IAC9C;IAEAN,6BAA6BH,OAAoB,EAAE;QACjD,IAAI,CAAC,IAAI,CAACsB,wBAAwB,EAAE;YAClC,IAAI,CAACA,wBAAwB,GAAG,IAAIC,iBAAiB,IAAI,CAACX,cAAc;QAC1E;QAEA,IAAI,CAACU,wBAAwB,CAACvB,OAAO,CAACC,SAAS;YAC7CwB,WAAW;YACXC,SAAS;QACX;IACF;IAEAC,aAAa;QACX,IAAI,CAACpB,OAAO,CAACqB,GAAG,CAAC,CAAC,EAAEpB,MAAM,EAAEE,MAAM,EAAE;YAClC,IAAIA,OAAOC,aAAa,EAAE;gBACxBD,OAAOC,aAAa,CAACkB,mBAAmB,CAAC,UAAU,IAAI,CAAChB,cAAc;YACxE;YAEAL,OAAOsB,WAAW,CAACpB;QACrB;QACA,IAAI,CAACH,OAAO,GAAG,EAAE;QAEjB,IAAI,IAAI,CAACgB,wBAAwB,EAAE;YACjC,IAAI,CAACA,wBAAwB,CAACI,UAAU;QAC1C;QACA,IAAI,CAACJ,wBAAwB,GAAG;IAClC;IA1DAQ,YAAY,AAAiBlB,cAA0B,CAAE;;QANzDN,uBAAAA,WAAAA,KAAAA;QAIAgB,uBAAAA,4BAAAA,KAAAA;aAE6BV,iBAAAA;aAN7BN,UAGK,EAAE;aACPgB,2BAAoD;QAGlD,IAAI,CAACV,cAAc,GAAGA;IACxB;AAyDF;AAEA,SAASX,aAAaD,OAAoB;IACxC,OAAO+B,iBAAiB/B,SAASV,QAAQ,KAAK;AAChD"}
1
+ {"version":3,"sources":["../../../src/lib/floating/customResizeObserver.ts"],"sourcesContent":["const defaultIframeStyles: Pick<\n CSSStyleDeclaration,\n | 'position'\n | 'left'\n | 'top'\n | 'zIndex'\n | 'width'\n | 'height'\n | 'pointerEvents'\n | 'opacity'\n | 'border'\n> = {\n position: 'absolute',\n left: '0',\n top: '0',\n zIndex: '-1',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n opacity: '0',\n border: '0',\n};\n\n/*\n * Специальный CustomResizeObserver как fallback для ResizeObserver\n * Используется для вызова update() функции (перерисовка плавающего окна) floating-ui\n * при изменении размера reference или floating элементов.\n *\n * По умолчанию пытаемся нарисовать скрытый, абсолютно позиционированный относительно\n * наблюдаемого элемента iframe.\n * В случае же, если наблюдаемый элемент имеет position: static, то правильно спозиционировать\n * iframe у нас не получится, поэтому в такой ситуации мы используем MutationObserver.\n *\n * Использовать только MutationObserver мы не можем, потому что с помощью него нельзя отследить\n * изменение размера вызванное переполнением текста.\n *\n * Применяется только если нету поддержики или полифила ResizeObserver.\n * */\nexport class CustomResizeObserver {\n records: Array<{\n target: HTMLElement;\n iframe: HTMLIFrameElement;\n }> = [];\n mutationObserverFallback: MutationObserver | null = null;\n\n constructor(private readonly updateFunction: () => void) {\n this.updateFunction = updateFunction;\n }\n\n observe(element: HTMLElement) {\n if (isPositioned(element)) {\n return this.observeUsingIframe(element);\n }\n return this.observeUsingMutationObserver(element);\n }\n\n appendToTheDOM() {\n for (let record of this.records) {\n record.target.appendChild(record.iframe);\n }\n\n for (let record of this.records) {\n if (record.iframe.contentWindow) {\n record.iframe.contentWindow.addEventListener('resize', this.updateFunction);\n }\n }\n }\n\n observeUsingIframe(element: HTMLElement) {\n const iframe = element.ownerDocument.createElement('iframe');\n iframe.src = 'javascript:void(0)';\n iframe.ariaHidden = 'true';\n iframe.tabIndex = -1;\n Object.assign(iframe.style, defaultIframeStyles);\n\n this.records.push({ target: element, iframe });\n }\n\n observeUsingMutationObserver(element: HTMLElement) {\n if (!this.mutationObserverFallback) {\n this.mutationObserverFallback = new MutationObserver(this.updateFunction);\n }\n\n this.mutationObserverFallback.observe(element, {\n childList: true,\n subtree: true,\n });\n }\n\n disconnect() {\n this.records.map(({ target, iframe }) => {\n if (iframe.contentWindow) {\n iframe.contentWindow.removeEventListener('resize', this.updateFunction);\n }\n\n target.removeChild(iframe);\n });\n this.records = [];\n\n if (this.mutationObserverFallback) {\n this.mutationObserverFallback.disconnect();\n }\n this.mutationObserverFallback = null;\n }\n}\n\nfunction isPositioned(element: HTMLElement): boolean {\n return getComputedStyle(element).position !== 'static';\n}\n"],"names":["defaultIframeStyles","position","left","top","zIndex","width","height","pointerEvents","opacity","border","CustomResizeObserver","observe","element","isPositioned","observeUsingIframe","observeUsingMutationObserver","appendToTheDOM","record","records","target","appendChild","iframe","contentWindow","addEventListener","updateFunction","ownerDocument","createElement","src","ariaHidden","tabIndex","Object","assign","style","push","mutationObserverFallback","MutationObserver","childList","subtree","disconnect","map","removeEventListener","removeChild","constructor","getComputedStyle"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";AAAA,MAAMA,sBAWF;IACFC,UAAU;IACVC,MAAM;IACNC,KAAK;IACLC,QAAQ;IACRC,OAAO;IACPC,QAAQ;IACRC,eAAe;IACfC,SAAS;IACTC,QAAQ;AACV;AAEA;;;;;;;;;;;;;;GAcG,GACH,OAAO,MAAMC;IAWXC,QAAQC,OAAoB,EAAE;QAC5B,IAAIC,aAAaD,UAAU;YACzB,OAAO,IAAI,CAACE,kBAAkB,CAACF;QACjC;QACA,OAAO,IAAI,CAACG,4BAA4B,CAACH;IAC3C;IAEAI,iBAAiB;QACf,KAAK,IAAIC,UAAU,IAAI,CAACC,OAAO,CAAE;YAC/BD,OAAOE,MAAM,CAACC,WAAW,CAACH,OAAOI,MAAM;QACzC;QAEA,KAAK,IAAIJ,UAAU,IAAI,CAACC,OAAO,CAAE;YAC/B,IAAID,OAAOI,MAAM,CAACC,aAAa,EAAE;gBAC/BL,OAAOI,MAAM,CAACC,aAAa,CAACC,gBAAgB,CAAC,UAAU,IAAI,CAACC,cAAc;YAC5E;QACF;IACF;IAEAV,mBAAmBF,OAAoB,EAAE;QACvC,MAAMS,SAAST,QAAQa,aAAa,CAACC,aAAa,CAAC;QACnDL,OAAOM,GAAG,GAAG;QACbN,OAAOO,UAAU,GAAG;QACpBP,OAAOQ,QAAQ,GAAG,CAAC;QACnBC,OAAOC,MAAM,CAACV,OAAOW,KAAK,EAAEhC;QAE5B,IAAI,CAACkB,OAAO,CAACe,IAAI,CAAC;YAAEd,QAAQP;YAASS;QAAO;IAC9C;IAEAN,6BAA6BH,OAAoB,EAAE;QACjD,IAAI,CAAC,IAAI,CAACsB,wBAAwB,EAAE;YAClC,IAAI,CAACA,wBAAwB,GAAG,IAAIC,iBAAiB,IAAI,CAACX,cAAc;QAC1E;QAEA,IAAI,CAACU,wBAAwB,CAACvB,OAAO,CAACC,SAAS;YAC7CwB,WAAW;YACXC,SAAS;QACX;IACF;IAEAC,aAAa;QACX,IAAI,CAACpB,OAAO,CAACqB,GAAG,CAAC,CAAC,EAAEpB,MAAM,EAAEE,MAAM,EAAE;YAClC,IAAIA,OAAOC,aAAa,EAAE;gBACxBD,OAAOC,aAAa,CAACkB,mBAAmB,CAAC,UAAU,IAAI,CAAChB,cAAc;YACxE;YAEAL,OAAOsB,WAAW,CAACpB;QACrB;QACA,IAAI,CAACH,OAAO,GAAG,EAAE;QAEjB,IAAI,IAAI,CAACgB,wBAAwB,EAAE;YACjC,IAAI,CAACA,wBAAwB,CAACI,UAAU;QAC1C;QACA,IAAI,CAACJ,wBAAwB,GAAG;IAClC;IA1DAQ,YAAY,AAAiBlB,cAA0B,CAAE;;QANzDN,uBAAAA,WAAAA,KAAAA;QAIAgB,uBAAAA,4BAAAA,KAAAA;aAE6BV,iBAAAA;aAN7BN,UAGK,EAAE;aACPgB,2BAAoD;QAGlD,IAAI,CAACV,cAAc,GAAGA;IACxB;AAyDF;AAEA,SAASX,aAAaD,OAAoB;IACxC,OAAO+B,iBAAiB/B,SAASX,QAAQ,KAAK;AAChD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFloatingWithInteractions.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAIV,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,SAAS,CAAC;AASjB;;GAEG;AACH,eAAO,MAAM,2BAA2B,4QAqBrC,gCAAgC,KAAG,kCAAkC,CAAC,CAiTxE,CAAC"}
1
+ {"version":3,"file":"useFloatingWithInteractions.d.ts","sourceRoot":"","sources":["../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAIV,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,SAAS,CAAC;AASjB;;GAEG;AACH,eAAO,MAAM,2BAA2B,4QAqBrC,gCAAgC,KAAG,kCAAkC,CAAC,CA2TxE,CAAC"}
@@ -55,7 +55,7 @@ shown: shownProp, onShownChange: onShownChangeProp })=>{
55
55
  });
56
56
  const commitShownLocalState = React.useCallback((nextShown, reason)=>{
57
57
  setShownLocalState((prevState)=>{
58
- if (prevState.shown !== nextShown) {
58
+ if (prevState.shown !== nextShown || prevState.reason !== reason) {
59
59
  return {
60
60
  shown: nextShown,
61
61
  reason
@@ -79,6 +79,11 @@ shown: shownProp, onShownChange: onShownChangeProp })=>{
79
79
  commitShownLocalState
80
80
  ]);
81
81
  const handleFocusOnReference = useStableCallback(()=>{
82
+ // Повторный вызов события фокуса - следствие клика на reference-элемент
83
+ if (shownLocalState.shown) {
84
+ commitShownLocalState(false, 'focus');
85
+ return;
86
+ }
82
87
  if (blockFocusRef.current) {
83
88
  /* istanbul ignore next: в Jest не воспроизводится баг на вебе (cм. onRestoreFocus) */ blockFocusRef.current = false;
84
89
  return;
@@ -109,6 +114,11 @@ shown: shownProp, onShownChange: onShownChangeProp })=>{
109
114
  });
110
115
  });
111
116
  const handleClickOnReference = useStableCallback(()=>{
117
+ // Предыдущий триггер (фокус) уже вызвал открытие/закрытие всплывающего окна, игнорируем вызов
118
+ if (shownLocalState.reason === 'focus') {
119
+ commitShownLocalState(shownLocalState.shown, 'click');
120
+ return;
121
+ }
112
122
  commitShownLocalState(!shownLocalState.shown, 'click');
113
123
  });
114
124
  const handleClickOnReferenceForOnlyClose = useStableCallback(()=>{
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce } from '@vkontakte/vkjs';\nimport { getWindow, isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useCustomEnsuredControl } from '../../../hooks/useEnsuredControl';\nimport { useGlobalOnClickOutside } from '../../../hooks/useGlobalOnClickOutside';\nimport { useStableCallback } from '../../../hooks/useStableCallback';\nimport { contains, getActiveElementByAnotherElement } from '../../dom';\nimport { useIsomorphicLayoutEffect } from '../../useIsomorphicLayoutEffect';\nimport { autoUpdateFloatingElement, useFloating } from '../adapters';\nimport { convertFloatingDataToReactCSSProperties } from '../functions';\nimport { type UseFloatingOptions } from '../types/common';\nimport { DEFAULT_TRIGGER } from './constants';\nimport type {\n FloatingProps,\n ReferenceProps,\n ShownChangeReason,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from './types';\nimport { useResolveTriggerType } from './useResolveTriggerType';\n\ntype LocalState = { shown: boolean; reason?: ShownChangeReason };\n\nconst whileElementsMounted: UseFloatingOptions['whileElementsMounted'] = (...args) =>\n /* istanbul ignore next: не знаю как проверить */\n autoUpdateFloatingElement(...args, { elementResize: true });\n\n/**\n * @private\n */\nexport const useFloatingWithInteractions = <T extends HTMLElement = HTMLElement>({\n trigger = DEFAULT_TRIGGER,\n\n // UseFloating\n placement: placementProp = 'bottom',\n middlewares,\n hoverDelay = 0,\n closeAfterClick = false,\n\n // disables\n disabled = false,\n disableInteractive = false,\n disableCloseOnClickOutside = false,\n disableCloseOnEscKey = false,\n\n // uncontrolled\n defaultShown = false,\n\n // controlled\n shown: shownProp,\n onShownChange: onShownChangeProp,\n}: UseFloatingWithInteractionsProps): UseFloatingWithInteractionsReturn<T> => {\n const memoizedValue = React.useMemo(\n () => (shownProp !== undefined ? { shown: shownProp } : undefined),\n [shownProp],\n );\n const [shownLocalState, setShownLocalState] = useCustomEnsuredControl<LocalState>({\n value: memoizedValue,\n disabled,\n defaultValue: { shown: defaultShown },\n onChange: useStableCallback(({ shown, reason }) => {\n if (onShownChangeProp) {\n onShownChangeProp(shown, reason);\n }\n }),\n });\n const [shownFinalState, setShownFinalState] = React.useState(() => shownLocalState.shown);\n const [willBeHide, setWillBeHide] = React.useState(false);\n\n const hasCSSAnimation = React.useRef(false);\n\n const blockMouseEnterRef = React.useRef(false);\n const blockFocusRef = React.useRef(false);\n const blurTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>();\n\n const handleCloseOnReferenceClickOutsideDisabled =\n disabled || disableCloseOnClickOutside || willBeHide || !shownLocalState.shown;\n const handleCloseOnFloatingClickOutsideDisabled =\n disableInteractive || handleCloseOnReferenceClickOutsideDisabled;\n\n const { triggerOnFocus, triggerOnClick, triggerOnHover } = useResolveTriggerType(trigger);\n\n // Библиотека `floating-ui`\n const { placement, x, y, strategy, refs, middlewareData } = useFloating<T>({\n strategy: 'fixed',\n placement: placementProp,\n middleware: middlewares,\n whileElementsMounted,\n });\n\n const commitShownLocalState = React.useCallback(\n (nextShown: boolean, reason: ShownChangeReason) => {\n setShownLocalState((prevState) => {\n if (prevState.shown !== nextShown) {\n return {\n shown: nextShown,\n reason,\n };\n }\n /* istanbul ignore next: страховка, если вдруг на момент вызова обновления состояния, оно уже будет актуальным */\n return prevState;\n });\n },\n [setShownLocalState],\n );\n\n const [mouseEnterDelay, mouseLeaveDelay] =\n typeof hoverDelay === 'number' ? [hoverDelay, hoverDelay] : hoverDelay;\n\n const showWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(true, 'hover'), mouseEnterDelay),\n [mouseEnterDelay, commitShownLocalState],\n );\n\n const hideWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(false, 'hover'), mouseLeaveDelay),\n [mouseLeaveDelay, commitShownLocalState],\n );\n\n const handleFocusOnReference = useStableCallback(() => {\n if (blockFocusRef.current) {\n /* istanbul ignore next: в Jest не воспроизводится баг на вебе (cм. onRestoreFocus) */\n blockFocusRef.current = false;\n return;\n }\n\n commitShownLocalState(true, 'focus');\n });\n\n const handleBlurOnReference = useStableCallback((event: React.FocusEvent) => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (!shownLocalState.shown) {\n clearTimeout(blurTimeoutRef.current);\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n blurTimeoutRef.current = setTimeout(function waitWindowBlurFire() {\n const reference = refs.reference.current;\n // Если пользователь покинул текущее окно в открытом состоянии, то\n // не закрываем всплывающий элемент.\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (!relatedTarget && getActiveElementByAnotherElement(reference) === reference) {\n /* istanbul ignore next */\n return;\n }\n\n // Если пользователь нажал на всплывающий элемент, то не закрываем всплывающий элемент.\n // Note: для этого элемент должен быть фокусируемый (например, за счёт `tabindex=\"-1\"`).\n if (contains(refs.floating.current, relatedTarget) || contains(reference, relatedTarget)) {\n return;\n }\n\n commitShownLocalState(false, 'focus');\n });\n });\n\n const handleClickOnReference = useStableCallback(() => {\n commitShownLocalState(!shownLocalState.shown, 'click');\n });\n\n const handleClickOnReferenceForOnlyClose = useStableCallback(() => {\n blockMouseEnterRef.current = true;\n commitShownLocalState(false, 'click');\n });\n\n const handleMouseEnterOnBoth = useStableCallback(() => {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (!blockMouseEnterRef.current && !shownLocalState.shown) {\n showWithDelay();\n }\n });\n\n const handleMouseLeaveOnBothForHoverAndFocusStates = useStableCallback(() => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (triggerOnHover) {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (shownLocalState.reason !== 'focus' && shownLocalState.reason !== 'click') {\n hideWithDelay();\n }\n }\n });\n\n const handleFloatingAnimationStart = () => {\n hasCSSAnimation.current = true;\n };\n\n const handleFloatingAnimationEnd = () => {\n if (willBeHide) {\n setShownFinalState(false);\n setWillBeHide(false);\n }\n };\n\n const handleOnClose = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'callback');\n }, [commitShownLocalState]);\n\n const handleRestoreFocus = React.useCallback(\n () => (triggerOnFocus ? blockFocusRef.current : true),\n [triggerOnFocus],\n );\n\n const handleEscapeKeyDown = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'escape-key');\n }, [commitShownLocalState]);\n\n const handleClickOutside = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'click-outside');\n }, [commitShownLocalState]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n handleCloseOnReferenceClickOutsideDisabled ? null : refs.reference,\n handleCloseOnFloatingClickOutsideDisabled ? null : refs.floating,\n );\n\n useIsomorphicLayoutEffect(\n /**\n * Если пользователь покинул активное окно и:\n * 1. целевой элемент был в состоянии фокуса;\n * 2. всплывающий элемент был закрытом состоянии;\n * то фокус должен быть заблокирован, когда пользователь вернётся обратно. Иначе покажется\n * всплывающий элемент.\n */\n function setGlobalBlurForTriggerOnFocus() {\n if (!triggerOnFocus || !refs.reference.current) {\n return;\n }\n\n const handleGlobalBlur = () => {\n /* istanbul ignore next */\n const reference = refs.reference.current;\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (\n !shownLocalState.shown &&\n isHTMLElement(reference) &&\n reference === getActiveElementByAnotherElement(reference)\n ) {\n /* istanbul ignore next */\n blockFocusRef.current = true;\n }\n };\n\n const win = getWindow(refs.reference.current);\n win.addEventListener('blur', handleGlobalBlur);\n return () => {\n win.removeEventListener('blur', handleGlobalBlur);\n };\n },\n [triggerOnFocus, refs.reference, shownLocalState],\n );\n\n useIsomorphicLayoutEffect(\n function resolveShownStates() {\n if (willBeHide || shownLocalState.shown === shownFinalState) {\n return;\n }\n\n if (shownLocalState.shown) {\n setShownFinalState(true);\n } else if (hasCSSAnimation.current && !willBeHide) {\n setWillBeHide(true);\n } else {\n setShownFinalState(false);\n }\n\n return () => {\n clearTimeout(blurTimeoutRef.current);\n };\n },\n [shownLocalState, shownFinalState, willBeHide],\n );\n\n const referencePropsRef = React.useRef<ReferenceProps>({});\n const floatingPropsRef = React.useRef<FloatingProps>({ style: {} });\n\n if (shownFinalState) {\n floatingPropsRef.current.style = convertFloatingDataToReactCSSProperties(\n strategy,\n x,\n y,\n undefined,\n middlewareData,\n );\n\n if (disableInteractive) {\n floatingPropsRef.current.style.pointerEvents = 'none';\n }\n }\n\n if (triggerOnFocus) {\n referencePropsRef.current.onFocus = handleFocusOnReference;\n referencePropsRef.current.onBlur = handleBlurOnReference;\n }\n\n if (triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReference;\n }\n\n if (triggerOnHover) {\n referencePropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n\n if (closeAfterClick && !triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReferenceForOnlyClose;\n }\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n }\n }\n\n if (triggerOnHover || triggerOnFocus) {\n referencePropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n }\n }\n\n if (shownFinalState) {\n floatingPropsRef.current.onAnimationStart = handleFloatingAnimationStart;\n floatingPropsRef.current.onAnimationEnd = handleFloatingAnimationEnd;\n }\n\n return {\n placement,\n shown: shownFinalState,\n willBeHide,\n refs,\n referenceProps: referencePropsRef.current,\n floatingProps: floatingPropsRef.current,\n middlewareData,\n onClose: handleOnClose,\n // FocusTrap уже определяет нажатие на ESC, поэтому название события содержит конкретный код\n // кнопки вместо просто onKeyDown.\n onEscapeKeyDown: !shownFinalState || disableCloseOnEscKey ? undefined : handleEscapeKeyDown,\n // [Обход баги с FocusTrap]\n //\n // Если сфокусироваться на целевой элемент через нажатие, а потом нажать в область за пределами\n // целевого и всплывающего элемента, то появляется моргание из-за того, что FocusTrap\n // восстанавливает фокус, из-за чего всплывающий элемент снова показывается за счёт\n // `handleFocusOnReference`, а потом скрывается за счёт `handleBlurOnReference`.\n onRestoreFocus: handleRestoreFocus,\n };\n};\n"],"names":["React","debounce","getWindow","isHTMLElement","useCustomEnsuredControl","useGlobalOnClickOutside","useStableCallback","contains","getActiveElementByAnotherElement","useIsomorphicLayoutEffect","autoUpdateFloatingElement","useFloating","convertFloatingDataToReactCSSProperties","DEFAULT_TRIGGER","useResolveTriggerType","whileElementsMounted","args","elementResize","useFloatingWithInteractions","trigger","placement","placementProp","middlewares","hoverDelay","closeAfterClick","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","defaultShown","shown","shownProp","onShownChange","onShownChangeProp","memoizedValue","useMemo","undefined","shownLocalState","setShownLocalState","value","defaultValue","onChange","reason","shownFinalState","setShownFinalState","useState","willBeHide","setWillBeHide","hasCSSAnimation","useRef","blockMouseEnterRef","blockFocusRef","blurTimeoutRef","handleCloseOnReferenceClickOutsideDisabled","handleCloseOnFloatingClickOutsideDisabled","triggerOnFocus","triggerOnClick","triggerOnHover","x","y","strategy","refs","middlewareData","middleware","commitShownLocalState","useCallback","nextShown","prevState","mouseEnterDelay","mouseLeaveDelay","showWithDelay","hideWithDelay","handleFocusOnReference","current","handleBlurOnReference","event","clearTimeout","relatedTarget","setTimeout","waitWindowBlurFire","reference","floating","handleClickOnReference","handleClickOnReferenceForOnlyClose","handleMouseEnterOnBoth","cancel","handleMouseLeaveOnBothForHoverAndFocusStates","handleFloatingAnimationStart","handleFloatingAnimationEnd","handleOnClose","handleRestoreFocus","handleEscapeKeyDown","handleClickOutside","setGlobalBlurForTriggerOnFocus","handleGlobalBlur","win","addEventListener","removeEventListener","resolveShownStates","referencePropsRef","floatingPropsRef","style","pointerEvents","onFocus","onBlur","onClick","onMouseOver","onMouseLeave","onAnimationStart","onAnimationEnd","referenceProps","floatingProps","onClose","onEscapeKeyDown","onRestoreFocus"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/lib/floating/useFloatingWithInteractions/useFloatingWithInteractions.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce } from '@vkontakte/vkjs';\nimport { getWindow, isHTMLElement } from '@vkontakte/vkui-floating-ui/utils/dom';\nimport { useCustomEnsuredControl } from '../../../hooks/useEnsuredControl';\nimport { useGlobalOnClickOutside } from '../../../hooks/useGlobalOnClickOutside';\nimport { useStableCallback } from '../../../hooks/useStableCallback';\nimport { contains, getActiveElementByAnotherElement } from '../../dom';\nimport { useIsomorphicLayoutEffect } from '../../useIsomorphicLayoutEffect';\nimport { autoUpdateFloatingElement, useFloating } from '../adapters';\nimport { convertFloatingDataToReactCSSProperties } from '../functions';\nimport { type UseFloatingOptions } from '../types/common';\nimport { DEFAULT_TRIGGER } from './constants';\nimport type {\n FloatingProps,\n ReferenceProps,\n ShownChangeReason,\n UseFloatingWithInteractionsProps,\n UseFloatingWithInteractionsReturn,\n} from './types';\nimport { useResolveTriggerType } from './useResolveTriggerType';\n\ntype LocalState = { shown: boolean; reason?: ShownChangeReason };\n\nconst whileElementsMounted: UseFloatingOptions['whileElementsMounted'] = (...args) =>\n /* istanbul ignore next: не знаю как проверить */\n autoUpdateFloatingElement(...args, { elementResize: true });\n\n/**\n * @private\n */\nexport const useFloatingWithInteractions = <T extends HTMLElement = HTMLElement>({\n trigger = DEFAULT_TRIGGER,\n\n // UseFloating\n placement: placementProp = 'bottom',\n middlewares,\n hoverDelay = 0,\n closeAfterClick = false,\n\n // disables\n disabled = false,\n disableInteractive = false,\n disableCloseOnClickOutside = false,\n disableCloseOnEscKey = false,\n\n // uncontrolled\n defaultShown = false,\n\n // controlled\n shown: shownProp,\n onShownChange: onShownChangeProp,\n}: UseFloatingWithInteractionsProps): UseFloatingWithInteractionsReturn<T> => {\n const memoizedValue = React.useMemo(\n () => (shownProp !== undefined ? { shown: shownProp } : undefined),\n [shownProp],\n );\n const [shownLocalState, setShownLocalState] = useCustomEnsuredControl<LocalState>({\n value: memoizedValue,\n disabled,\n defaultValue: { shown: defaultShown },\n onChange: useStableCallback(({ shown, reason }) => {\n if (onShownChangeProp) {\n onShownChangeProp(shown, reason);\n }\n }),\n });\n const [shownFinalState, setShownFinalState] = React.useState(() => shownLocalState.shown);\n const [willBeHide, setWillBeHide] = React.useState(false);\n\n const hasCSSAnimation = React.useRef(false);\n\n const blockMouseEnterRef = React.useRef(false);\n const blockFocusRef = React.useRef(false);\n const blurTimeoutRef = React.useRef<ReturnType<typeof setTimeout>>();\n\n const handleCloseOnReferenceClickOutsideDisabled =\n disabled || disableCloseOnClickOutside || willBeHide || !shownLocalState.shown;\n const handleCloseOnFloatingClickOutsideDisabled =\n disableInteractive || handleCloseOnReferenceClickOutsideDisabled;\n\n const { triggerOnFocus, triggerOnClick, triggerOnHover } = useResolveTriggerType(trigger);\n\n // Библиотека `floating-ui`\n const { placement, x, y, strategy, refs, middlewareData } = useFloating<T>({\n strategy: 'fixed',\n placement: placementProp,\n middleware: middlewares,\n whileElementsMounted,\n });\n\n const commitShownLocalState = React.useCallback(\n (nextShown: boolean, reason: ShownChangeReason) => {\n setShownLocalState((prevState) => {\n if (prevState.shown !== nextShown || prevState.reason !== reason) {\n return {\n shown: nextShown,\n reason,\n };\n }\n /* istanbul ignore next: страховка, если вдруг на момент вызова обновления состояния, оно уже будет актуальным */\n return prevState;\n });\n },\n [setShownLocalState],\n );\n\n const [mouseEnterDelay, mouseLeaveDelay] =\n typeof hoverDelay === 'number' ? [hoverDelay, hoverDelay] : hoverDelay;\n\n const showWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(true, 'hover'), mouseEnterDelay),\n [mouseEnterDelay, commitShownLocalState],\n );\n\n const hideWithDelay = React.useMemo(\n () => debounce(() => commitShownLocalState(false, 'hover'), mouseLeaveDelay),\n [mouseLeaveDelay, commitShownLocalState],\n );\n\n const handleFocusOnReference = useStableCallback(() => {\n // Повторный вызов события фокуса - следствие клика на reference-элемент\n if (shownLocalState.shown) {\n commitShownLocalState(false, 'focus');\n return;\n }\n if (blockFocusRef.current) {\n /* istanbul ignore next: в Jest не воспроизводится баг на вебе (cм. onRestoreFocus) */\n blockFocusRef.current = false;\n return;\n }\n\n commitShownLocalState(true, 'focus');\n });\n\n const handleBlurOnReference = useStableCallback((event: React.FocusEvent) => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (!shownLocalState.shown) {\n clearTimeout(blurTimeoutRef.current);\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n blurTimeoutRef.current = setTimeout(function waitWindowBlurFire() {\n const reference = refs.reference.current;\n // Если пользователь покинул текущее окно в открытом состоянии, то\n // не закрываем всплывающий элемент.\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (!relatedTarget && getActiveElementByAnotherElement(reference) === reference) {\n /* istanbul ignore next */\n return;\n }\n\n // Если пользователь нажал на всплывающий элемент, то не закрываем всплывающий элемент.\n // Note: для этого элемент должен быть фокусируемый (например, за счёт `tabindex=\"-1\"`).\n if (contains(refs.floating.current, relatedTarget) || contains(reference, relatedTarget)) {\n return;\n }\n\n commitShownLocalState(false, 'focus');\n });\n });\n\n const handleClickOnReference = useStableCallback(() => {\n // Предыдущий триггер (фокус) уже вызвал открытие/закрытие всплывающего окна, игнорируем вызов\n if (shownLocalState.reason === 'focus') {\n commitShownLocalState(shownLocalState.shown, 'click');\n return;\n }\n commitShownLocalState(!shownLocalState.shown, 'click');\n });\n\n const handleClickOnReferenceForOnlyClose = useStableCallback(() => {\n blockMouseEnterRef.current = true;\n commitShownLocalState(false, 'click');\n });\n\n const handleMouseEnterOnBoth = useStableCallback(() => {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (!blockMouseEnterRef.current && !shownLocalState.shown) {\n showWithDelay();\n }\n });\n\n const handleMouseLeaveOnBothForHoverAndFocusStates = useStableCallback(() => {\n blockFocusRef.current = false;\n blockMouseEnterRef.current = false;\n\n if (triggerOnHover) {\n showWithDelay.cancel();\n hideWithDelay.cancel();\n\n if (shownLocalState.reason !== 'focus' && shownLocalState.reason !== 'click') {\n hideWithDelay();\n }\n }\n });\n\n const handleFloatingAnimationStart = () => {\n hasCSSAnimation.current = true;\n };\n\n const handleFloatingAnimationEnd = () => {\n if (willBeHide) {\n setShownFinalState(false);\n setWillBeHide(false);\n }\n };\n\n const handleOnClose = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'callback');\n }, [commitShownLocalState]);\n\n const handleRestoreFocus = React.useCallback(\n () => (triggerOnFocus ? blockFocusRef.current : true),\n [triggerOnFocus],\n );\n\n const handleEscapeKeyDown = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'escape-key');\n }, [commitShownLocalState]);\n\n const handleClickOutside = React.useCallback(() => {\n blockFocusRef.current = true;\n commitShownLocalState(false, 'click-outside');\n }, [commitShownLocalState]);\n\n useGlobalOnClickOutside(\n handleClickOutside,\n handleCloseOnReferenceClickOutsideDisabled ? null : refs.reference,\n handleCloseOnFloatingClickOutsideDisabled ? null : refs.floating,\n );\n\n useIsomorphicLayoutEffect(\n /**\n * Если пользователь покинул активное окно и:\n * 1. целевой элемент был в состоянии фокуса;\n * 2. всплывающий элемент был закрытом состоянии;\n * то фокус должен быть заблокирован, когда пользователь вернётся обратно. Иначе покажется\n * всплывающий элемент.\n */\n function setGlobalBlurForTriggerOnFocus() {\n if (!triggerOnFocus || !refs.reference.current) {\n return;\n }\n\n const handleGlobalBlur = () => {\n /* istanbul ignore next */\n const reference = refs.reference.current;\n /* istanbul ignore if: не умеем симулировать уход из текущего окна */\n if (\n !shownLocalState.shown &&\n isHTMLElement(reference) &&\n reference === getActiveElementByAnotherElement(reference)\n ) {\n /* istanbul ignore next */\n blockFocusRef.current = true;\n }\n };\n\n const win = getWindow(refs.reference.current);\n win.addEventListener('blur', handleGlobalBlur);\n return () => {\n win.removeEventListener('blur', handleGlobalBlur);\n };\n },\n [triggerOnFocus, refs.reference, shownLocalState],\n );\n\n useIsomorphicLayoutEffect(\n function resolveShownStates() {\n if (willBeHide || shownLocalState.shown === shownFinalState) {\n return;\n }\n\n if (shownLocalState.shown) {\n setShownFinalState(true);\n } else if (hasCSSAnimation.current && !willBeHide) {\n setWillBeHide(true);\n } else {\n setShownFinalState(false);\n }\n\n return () => {\n clearTimeout(blurTimeoutRef.current);\n };\n },\n [shownLocalState, shownFinalState, willBeHide],\n );\n\n const referencePropsRef = React.useRef<ReferenceProps>({});\n const floatingPropsRef = React.useRef<FloatingProps>({ style: {} });\n\n if (shownFinalState) {\n floatingPropsRef.current.style = convertFloatingDataToReactCSSProperties(\n strategy,\n x,\n y,\n undefined,\n middlewareData,\n );\n\n if (disableInteractive) {\n floatingPropsRef.current.style.pointerEvents = 'none';\n }\n }\n\n if (triggerOnFocus) {\n referencePropsRef.current.onFocus = handleFocusOnReference;\n referencePropsRef.current.onBlur = handleBlurOnReference;\n }\n\n if (triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReference;\n }\n\n if (triggerOnHover) {\n referencePropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n\n if (closeAfterClick && !triggerOnClick) {\n referencePropsRef.current.onClick = handleClickOnReferenceForOnlyClose;\n }\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseOver = handleMouseEnterOnBoth;\n }\n }\n\n if (triggerOnHover || triggerOnFocus) {\n referencePropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n\n if (!disableInteractive) {\n floatingPropsRef.current.onMouseLeave = handleMouseLeaveOnBothForHoverAndFocusStates;\n }\n }\n\n if (shownFinalState) {\n floatingPropsRef.current.onAnimationStart = handleFloatingAnimationStart;\n floatingPropsRef.current.onAnimationEnd = handleFloatingAnimationEnd;\n }\n\n return {\n placement,\n shown: shownFinalState,\n willBeHide,\n refs,\n referenceProps: referencePropsRef.current,\n floatingProps: floatingPropsRef.current,\n middlewareData,\n onClose: handleOnClose,\n // FocusTrap уже определяет нажатие на ESC, поэтому название события содержит конкретный код\n // кнопки вместо просто onKeyDown.\n onEscapeKeyDown: !shownFinalState || disableCloseOnEscKey ? undefined : handleEscapeKeyDown,\n // [Обход баги с FocusTrap]\n //\n // Если сфокусироваться на целевой элемент через нажатие, а потом нажать в область за пределами\n // целевого и всплывающего элемента, то появляется моргание из-за того, что FocusTrap\n // восстанавливает фокус, из-за чего всплывающий элемент снова показывается за счёт\n // `handleFocusOnReference`, а потом скрывается за счёт `handleBlurOnReference`.\n onRestoreFocus: handleRestoreFocus,\n };\n};\n"],"names":["React","debounce","getWindow","isHTMLElement","useCustomEnsuredControl","useGlobalOnClickOutside","useStableCallback","contains","getActiveElementByAnotherElement","useIsomorphicLayoutEffect","autoUpdateFloatingElement","useFloating","convertFloatingDataToReactCSSProperties","DEFAULT_TRIGGER","useResolveTriggerType","whileElementsMounted","args","elementResize","useFloatingWithInteractions","trigger","placement","placementProp","middlewares","hoverDelay","closeAfterClick","disabled","disableInteractive","disableCloseOnClickOutside","disableCloseOnEscKey","defaultShown","shown","shownProp","onShownChange","onShownChangeProp","memoizedValue","useMemo","undefined","shownLocalState","setShownLocalState","value","defaultValue","onChange","reason","shownFinalState","setShownFinalState","useState","willBeHide","setWillBeHide","hasCSSAnimation","useRef","blockMouseEnterRef","blockFocusRef","blurTimeoutRef","handleCloseOnReferenceClickOutsideDisabled","handleCloseOnFloatingClickOutsideDisabled","triggerOnFocus","triggerOnClick","triggerOnHover","x","y","strategy","refs","middlewareData","middleware","commitShownLocalState","useCallback","nextShown","prevState","mouseEnterDelay","mouseLeaveDelay","showWithDelay","hideWithDelay","handleFocusOnReference","current","handleBlurOnReference","event","clearTimeout","relatedTarget","setTimeout","waitWindowBlurFire","reference","floating","handleClickOnReference","handleClickOnReferenceForOnlyClose","handleMouseEnterOnBoth","cancel","handleMouseLeaveOnBothForHoverAndFocusStates","handleFloatingAnimationStart","handleFloatingAnimationEnd","handleOnClose","handleRestoreFocus","handleEscapeKeyDown","handleClickOutside","setGlobalBlurForTriggerOnFocus","handleGlobalBlur","win","addEventListener","removeEventListener","resolveShownStates","referencePropsRef","floatingPropsRef","style","pointerEvents","onFocus","onBlur","onClick","onMouseOver","onMouseLeave","onAnimationStart","onAnimationEnd","referenceProps","floatingProps","onClose","onEscapeKeyDown","onRestoreFocus"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,iBAAiB,GAAG;KAC7B,KAAK,IAAI,OAAO,CACf,MAAM,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAC/C,MAAM,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAC7C,GAAG,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC;CACrD,CAAC;AAEF,wBAAgB,QAAQ,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,MAAM,aAG9D,CAAC,UAInB;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAQ9D;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAWxF;AAED,eAAO,MAAM,eAAe,0DAA2C,CAAC,SAC/C,CAAC;AAE1B,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,QAK5E;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,QAWzF;AAED,KAAK,wBAAwB,CAAC,CAAC,IAAI;KAChC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,wBAAwB,yDAC9B,CAAC,KACL,yBAAyB,CAAC,CAQ5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,2FAIlB,MAAM,YAAY;UAC+B,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS;CAClD,CAAC;AAEnC,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GACnD,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAM1D;AAED,wBAAgB,mBAAmB,CACjC,CAAC,SAAS,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAC1D,CAAC,SAAS,OAAO,EAEjB,QAAQ,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GACnD,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;CAAE,CAStF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC;;;;;;EAMhG"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,MAAM,iBAAiB,GAAG;KAC7B,KAAK,IAAI,OAAO,CACf,MAAM,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAC/C,MAAM,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAC7C,GAAG,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC;CACrD,CAAC;AAEF,wBAAgB,QAAQ,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,MAAM,aAG9D,CAAC,UAInB;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAQ9D;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAWxF;AAED,eAAO,MAAM,eAAe,0DAA2C,CAAC,SAC/C,CAAC;AAE1B,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,QAK5E;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,QAWzF;AAED,KAAK,wBAAwB,CAAC,CAAC,IAAI;KAChC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,wBAAwB,yDAC9B,CAAC,KACL,yBAAyB,CAAC,CAQ5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,2FAIlB,MAAM,YAAY;UAC+B,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS;CAClD,CAAC;AAEnC,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GACnD,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAM1D;AAED,wBAAgB,mBAAmB,CACjC,CAAC,SAAS,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAC1D,CAAC,SAAS,OAAO,EAEjB,QAAQ,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GACnD,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAA;CAAE,CAStF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC;;;;;;EAKhG"}
package/dist/lib/utils.js CHANGED
@@ -69,8 +69,7 @@ export function isForwardRefElement(children) {
69
69
  * При использовании пропа fetchPriority генерируется warning "Invalid DOM property" (версия React 18.*)
70
70
  * Ворнинга нет в React версии 19.*, поэтому пока поддерживаем 2 версии наименования
71
71
  */ export function getFetchPriorityProp(value) {
72
- // @ts-expect-error: TS2339 Появится только в версии React >= 19.*
73
- if (Boolean(React.use)) {
72
+ if (React.version.startsWith('19')) {
74
73
  return {
75
74
  fetchPriority: value
76
75
  };