@skbkontur/react-ui 4.6.1 → 4.7.0

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 (139) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/cjs/components/ComboBox/ComboBox.d.ts +15 -0
  3. package/cjs/components/ComboBox/ComboBox.js +16 -0
  4. package/cjs/components/ComboBox/ComboBox.js.map +1 -1
  5. package/cjs/components/ComboBox/ComboBox.md +10 -1
  6. package/cjs/components/DropdownMenu/DropdownMenu.md +11 -9
  7. package/cjs/components/FileUploader/FileUploader.d.ts +9 -1
  8. package/cjs/components/FileUploader/FileUploader.js +67 -18
  9. package/cjs/components/FileUploader/FileUploader.js.map +1 -1
  10. package/cjs/components/FileUploader/FileUploader.mixins.d.ts +1 -0
  11. package/cjs/components/FileUploader/FileUploader.mixins.js +10 -0
  12. package/cjs/components/FileUploader/FileUploader.mixins.js.map +1 -0
  13. package/cjs/components/FileUploader/FileUploader.styles.d.ts +12 -1
  14. package/cjs/components/FileUploader/FileUploader.styles.js +119 -22
  15. package/cjs/components/FileUploader/FileUploader.styles.js.map +1 -1
  16. package/cjs/components/Hint/Hint.d.ts +1 -0
  17. package/cjs/components/Hint/Hint.js +6 -2
  18. package/cjs/components/Hint/Hint.js.map +1 -1
  19. package/cjs/components/Paging/Paging.js +20 -15
  20. package/cjs/components/Paging/Paging.js.map +1 -1
  21. package/cjs/components/Paging/Paging.md +13 -0
  22. package/cjs/components/Paging/Paging.styles.d.ts +6 -2
  23. package/cjs/components/Paging/Paging.styles.js +40 -15
  24. package/cjs/components/Paging/Paging.styles.js.map +1 -1
  25. package/cjs/components/Select/Select.js +5 -3
  26. package/cjs/components/Select/Select.js.map +1 -1
  27. package/cjs/components/Toggle/Toggle.js +2 -1
  28. package/cjs/components/Toggle/Toggle.js.map +1 -1
  29. package/cjs/internal/CustomComboBox/ComboBoxMenu.d.ts +1 -0
  30. package/cjs/internal/CustomComboBox/ComboBoxMenu.js +3 -1
  31. package/cjs/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
  32. package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +1 -0
  33. package/cjs/internal/CustomComboBox/ComboBoxView.js +3 -1
  34. package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  35. package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +1 -0
  36. package/cjs/internal/CustomComboBox/CustomComboBox.js +3 -1
  37. package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
  38. package/cjs/internal/FileUploaderControl/FileUploaderControlContext.d.ts +2 -0
  39. package/cjs/internal/FileUploaderControl/FileUploaderControlContext.js +2 -0
  40. package/cjs/internal/FileUploaderControl/FileUploaderControlContext.js.map +1 -1
  41. package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js +4 -1
  42. package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js.map +1 -1
  43. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +3 -0
  44. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js +46 -11
  45. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js.map +1 -1
  46. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.d.ts +7 -0
  47. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.js +54 -7
  48. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.js.map +1 -1
  49. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +2 -0
  50. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js +15 -3
  51. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
  52. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles.d.ts +3 -0
  53. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles.js +19 -1
  54. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles.js.map +1 -1
  55. package/cjs/internal/FileUploaderControl/hooks/useFileUploaderSize.d.ts +2 -0
  56. package/cjs/internal/FileUploaderControl/hooks/useFileUploaderSize.js +18 -0
  57. package/cjs/internal/FileUploaderControl/hooks/useFileUploaderSize.js.map +1 -0
  58. package/cjs/internal/Popup/Popup.d.ts +5 -0
  59. package/cjs/internal/Popup/Popup.js +10 -2
  60. package/cjs/internal/Popup/Popup.js.map +1 -1
  61. package/cjs/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
  62. package/cjs/internal/themes/DarkTheme.d.ts +1 -0
  63. package/cjs/internal/themes/DarkTheme.js +2 -1
  64. package/cjs/internal/themes/DarkTheme.js.map +1 -1
  65. package/cjs/internal/themes/DefaultTheme.d.ts +16 -0
  66. package/cjs/internal/themes/DefaultTheme.js +41 -1
  67. package/cjs/internal/themes/DefaultTheme.js.map +1 -1
  68. package/cjs/lib/utils.d.ts +2 -3
  69. package/cjs/lib/utils.js +1 -2
  70. package/cjs/lib/utils.js.map +1 -1
  71. package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
  72. package/components/ComboBox/ComboBox.d.ts +15 -0
  73. package/components/ComboBox/ComboBox.md +10 -1
  74. package/components/DropdownMenu/DropdownMenu.md +11 -9
  75. package/components/FileUploader/FileUploader/FileUploader.js +56 -20
  76. package/components/FileUploader/FileUploader/FileUploader.js.map +1 -1
  77. package/components/FileUploader/FileUploader.d.ts +9 -1
  78. package/components/FileUploader/FileUploader.mixins/FileUploader.mixins.js +8 -0
  79. package/components/FileUploader/FileUploader.mixins/FileUploader.mixins.js.map +1 -0
  80. package/components/FileUploader/FileUploader.mixins/package.json +6 -0
  81. package/components/FileUploader/FileUploader.mixins.d.ts +1 -0
  82. package/components/FileUploader/FileUploader.styles/FileUploader.styles.js +51 -17
  83. package/components/FileUploader/FileUploader.styles/FileUploader.styles.js.map +1 -1
  84. package/components/FileUploader/FileUploader.styles.d.ts +12 -1
  85. package/components/Hint/Hint/Hint.js +13 -5
  86. package/components/Hint/Hint/Hint.js.map +1 -1
  87. package/components/Hint/Hint.d.ts +1 -0
  88. package/components/Paging/Paging/Paging.js +12 -9
  89. package/components/Paging/Paging/Paging.js.map +1 -1
  90. package/components/Paging/Paging.md +13 -0
  91. package/components/Paging/Paging.styles/Paging.styles.js +27 -15
  92. package/components/Paging/Paging.styles/Paging.styles.js.map +1 -1
  93. package/components/Paging/Paging.styles.d.ts +6 -2
  94. package/components/Select/Select/Select.js +5 -5
  95. package/components/Select/Select/Select.js.map +1 -1
  96. package/components/Toggle/Toggle/Toggle.js +2 -1
  97. package/components/Toggle/Toggle/Toggle.js.map +1 -1
  98. package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js +3 -1
  99. package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js.map +1 -1
  100. package/internal/CustomComboBox/ComboBoxMenu.d.ts +1 -0
  101. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +3 -1
  102. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
  103. package/internal/CustomComboBox/ComboBoxView.d.ts +1 -0
  104. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +1 -0
  105. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
  106. package/internal/CustomComboBox/CustomComboBox.d.ts +1 -0
  107. package/internal/FileUploaderControl/FileUploaderControlContext/FileUploaderControlContext.js.map +1 -1
  108. package/internal/FileUploaderControl/FileUploaderControlContext.d.ts +2 -0
  109. package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js +7 -1
  110. package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js.map +1 -1
  111. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js +38 -13
  112. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js.map +1 -1
  113. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +3 -0
  114. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles/FileUploaderFile.styles.js +26 -5
  115. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles/FileUploaderFile.styles.js.map +1 -1
  116. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.styles.d.ts +7 -0
  117. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js +13 -3
  118. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
  119. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +2 -0
  120. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles/FileUploaderFileList.styles.js +10 -1
  121. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles/FileUploaderFileList.styles.js.map +1 -1
  122. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.styles.d.ts +3 -0
  123. package/internal/FileUploaderControl/hooks/useFileUploaderSize/package.json +6 -0
  124. package/internal/FileUploaderControl/hooks/useFileUploaderSize/useFileUploaderSize.js +21 -0
  125. package/internal/FileUploaderControl/hooks/useFileUploaderSize/useFileUploaderSize.js.map +1 -0
  126. package/internal/FileUploaderControl/hooks/useFileUploaderSize.d.ts +2 -0
  127. package/internal/Popup/Popup/Popup.js +5 -1
  128. package/internal/Popup/Popup/Popup.js.map +1 -1
  129. package/internal/Popup/Popup.d.ts +5 -0
  130. package/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
  131. package/internal/themes/DarkTheme/DarkTheme.js +1 -0
  132. package/internal/themes/DarkTheme/DarkTheme.js.map +1 -1
  133. package/internal/themes/DarkTheme.d.ts +1 -0
  134. package/internal/themes/DefaultTheme/DefaultTheme.js +64 -0
  135. package/internal/themes/DefaultTheme/DefaultTheme.js.map +1 -1
  136. package/internal/themes/DefaultTheme.d.ts +16 -0
  137. package/lib/utils/utils.js.map +1 -1
  138. package/lib/utils.d.ts +2 -3
  139. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["FileUploaderFile.styles.ts"],"names":["css","memoizeStyle","styles","root","content","error","t","fileUploaderBorderColorError","name","size","icon","fileUploaderIconSize","deleteIcon","fileUploaderIconColor","fileUploaderIconHoverColor","focusedIcon","borderColorFocus","jsStyles"],"mappings":"kPAAA,SAASA,GAAT,EAAcC,YAAd,QAAkC,8BAAlC;;;AAGA,IAAMC,MAAM,GAAG;AACbC,EAAAA,IADa,kBACN;AACL,WAAOH,GAAP;;;AAGD,GALY;;AAObI,EAAAA,OAPa,qBAOH;AACR,WAAOJ,GAAP;;;;;;AAMD,GAdY;;AAgBbK,EAAAA,KAhBa,iBAgBPC,CAhBO,EAgBG;AACd,WAAON,GAAP;AACWM,IAAAA,CAAC,CAACC,4BADb;;AAGD,GApBY;;AAsBbC,EAAAA,IAtBa,kBAsBN;AACL,WAAOR,GAAP;;;;AAID,GA3BY;;AA6BbS,EAAAA,IA7Ba,kBA6BN;AACL,WAAOT,GAAP;;;;AAID,GAlCY;;AAoCbU,EAAAA,IApCa,gBAoCRJ,CApCQ,EAoCE;AACb,WAAON,GAAP;;;;;AAKeM,IAAAA,CAAC,CAACK,oBALjB;;;;AASD,GA9CY;;AAgDbC,EAAAA,UAhDa,sBAgDFN,CAhDE,EAgDQ;AACnB,WAAON,GAAP;AACWM,IAAAA,CAAC,CAACO,qBADb;;AAGaP,IAAAA,CAAC,CAACQ,0BAHf;;;AAMD,GAvDY;;AAyDbC,EAAAA,WAzDa,uBAyDDT,CAzDC,EAyDS;AACpB,WAAON,GAAP;AACuBM,IAAAA,CAAC,CAACU,gBADzB;;AAGD,GA7DY,EAAf;;;AAgEA,OAAO,IAAMC,QAAQ,GAAGhB,YAAY,CAACC,MAAD,CAA7B","sourcesContent":["import { css, memoizeStyle } from '../../../lib/theming/Emotion';\nimport { Theme } from '../../../lib/theming/Theme';\n\nconst styles = {\n root() {\n return css`\n width: 100%;\n `;\n },\n\n content() {\n return css`\n display: flex;\n width: 100%;\n align-items: center;\n position: relative;\n `;\n },\n\n error(t: Theme) {\n return css`\n color: ${t.fileUploaderBorderColorError};\n `;\n },\n\n name() {\n return css`\n flex: 1 1 100%;\n overflow: hidden;\n `;\n },\n\n size() {\n return css`\n margin-left: 28px;\n flex: 1 0 auto;\n `;\n },\n\n icon(t: Theme) {\n return css`\n width: 16px;\n margin-left: 23px;\n flex: 1 0 auto;\n cursor: pointer;\n font-size: ${t.fileUploaderIconSize};\n text-align: right;\n outline: none;\n `;\n },\n\n deleteIcon(t: Theme) {\n return css`\n color: ${t.fileUploaderIconColor};\n &:hover {\n color: ${t.fileUploaderIconHoverColor};\n }\n `;\n },\n\n focusedIcon(t: Theme) {\n return css`\n outline: 1px solid ${t.borderColorFocus};\n `;\n },\n};\n\nexport const jsStyles = memoizeStyle(styles);\n"]}
1
+ {"version":3,"sources":["FileUploaderFile.styles.ts"],"names":["css","memoizeStyle","styles","root","content","error","t","fileUploaderBorderColorError","name","size","icon","fileUploaderIconSize","iconSmall","fileUploaderPaddingXSmall","iconMedium","fileUploaderPaddingXMedium","iconLarge","fileUploaderPaddingXLarge","iconMultiple","contentSmall","fileUploaderFontSizeSmall","contentMedium","fileUploaderFontSizeMedium","contentLarge","fileUploaderFontSizeLarge","deleteIcon","fileUploaderIconColor","fileUploaderIconHoverColor","focusedIcon","borderColorFocus","jsStyles"],"mappings":"sXAAA,SAASA,GAAT,EAAcC,YAAd,QAAkC,8BAAlC;;;AAGA,IAAMC,MAAM,GAAG;AACbC,EAAAA,IADa,kBACN;AACL,WAAOH,GAAP;;;AAGD,GALY;;AAObI,EAAAA,OAPa,qBAOH;AACR,WAAOJ,GAAP;;;;;AAKD,GAbY;;AAebK,EAAAA,KAfa,iBAePC,CAfO,EAeG;AACd,WAAON,GAAP;AACWM,IAAAA,CAAC,CAACC,4BADb;;AAGD,GAnBY;;AAqBbC,EAAAA,IArBa,kBAqBN;AACL,WAAOR,GAAP;;;;AAID,GA1BY;;AA4BbS,EAAAA,IA5Ba,kBA4BN;AACL,WAAOT,GAAP;;;;AAID,GAjCY;;AAmCbU,EAAAA,IAnCa,gBAmCRJ,CAnCQ,EAmCE;AACb,WAAON,GAAP;;;;AAIeM,IAAAA,CAAC,CAACK,oBAJjB;;;;;;AAUD,GA9CY;;AAgDbC,EAAAA,SAhDa,qBAgDHN,CAhDG,EAgDO;AAClB,WAAON,GAAP;;AAEWM,IAAAA,CAAC,CAACO,yBAFb;;AAID,GArDY;;AAuDbC,EAAAA,UAvDa,sBAuDFR,CAvDE,EAuDQ;AACnB,WAAON,GAAP;;AAEWM,IAAAA,CAAC,CAACS,0BAFb;;;AAKD,GA7DY;;AA+DbC,EAAAA,SA/Da,qBA+DHV,CA/DG,EA+DO;AAClB,WAAON,GAAP;;AAEWM,IAAAA,CAAC,CAACW,yBAFb;;;AAKD,GArEY;;AAuEbC,EAAAA,YAvEa,0BAuEE;AACb,WAAOlB,GAAP;;;AAGD,GA3EY;;AA6EbmB,EAAAA,YA7Ea,wBA6EAb,CA7EA,EA6EU;AACrB,WAAON,GAAP;AACeM,IAAAA,CAAC,CAACc,yBADjB;;AAGD,GAjFY;;AAmFbC,EAAAA,aAnFa,yBAmFCf,CAnFD,EAmFW;AACtB,WAAON,GAAP;AACeM,IAAAA,CAAC,CAACgB,0BADjB;;AAGD,GAvFY;;AAyFbC,EAAAA,YAzFa,wBAyFAjB,CAzFA,EAyFU;AACrB,WAAON,GAAP;AACeM,IAAAA,CAAC,CAACkB,yBADjB;;AAGD,GA7FY;;AA+FbC,EAAAA,UA/Fa,sBA+FFnB,CA/FE,EA+FQ;AACnB,WAAON,GAAP;AACWM,IAAAA,CAAC,CAACoB,qBADb;;AAGapB,IAAAA,CAAC,CAACqB,0BAHf;;;AAMD,GAtGY;;AAwGbC,EAAAA,WAxGa,uBAwGDtB,CAxGC,EAwGS;AACpB,WAAON,GAAP;AACuBM,IAAAA,CAAC,CAACuB,gBADzB;;AAGD,GA5GY,EAAf;;;AA+GA,OAAO,IAAMC,QAAQ,GAAG7B,YAAY,CAACC,MAAD,CAA7B","sourcesContent":["import { css, memoizeStyle } from '../../../lib/theming/Emotion';\nimport { Theme } from '../../../lib/theming/Theme';\n\nconst styles = {\n root() {\n return css`\n width: 100%;\n `;\n },\n\n content() {\n return css`\n display: flex;\n width: 100%;\n align-items: center;\n `;\n },\n\n error(t: Theme) {\n return css`\n color: ${t.fileUploaderBorderColorError};\n `;\n },\n\n name() {\n return css`\n flex: 1 1 100%;\n overflow: hidden;\n `;\n },\n\n size() {\n return css`\n margin-left: 28px;\n flex: 1 0 auto;\n `;\n },\n\n icon(t: Theme) {\n return css`\n width: 16px;\n flex: 1 0 auto;\n cursor: pointer;\n font-size: ${t.fileUploaderIconSize};\n text-align: right;\n outline: none;\n\n position: absolute;\n `;\n },\n\n iconSmall(t: Theme) {\n return css`\n margin-left: 4px;\n right: ${t.fileUploaderPaddingXSmall};\n `;\n },\n\n iconMedium(t: Theme) {\n return css`\n margin-left: 6px;\n right: ${t.fileUploaderPaddingXMedium};\n width: 18px;\n `;\n },\n\n iconLarge(t: Theme) {\n return css`\n margin-left: 6px;\n right: ${t.fileUploaderPaddingXLarge};\n width: 20px;\n `;\n },\n\n iconMultiple() {\n return css`\n position: static;\n `;\n },\n\n contentSmall(t: Theme) {\n return css`\n font-size: ${t.fileUploaderFontSizeSmall};\n `;\n },\n\n contentMedium(t: Theme) {\n return css`\n font-size: ${t.fileUploaderFontSizeMedium};\n `;\n },\n\n contentLarge(t: Theme) {\n return css`\n font-size: ${t.fileUploaderFontSizeLarge};\n `;\n },\n\n deleteIcon(t: Theme) {\n return css`\n color: ${t.fileUploaderIconColor};\n &:hover {\n color: ${t.fileUploaderIconHoverColor};\n }\n `;\n },\n\n focusedIcon(t: Theme) {\n return css`\n outline: 1px solid ${t.borderColorFocus};\n `;\n },\n};\n\nexport const jsStyles = memoizeStyle(styles);\n"]}
@@ -6,6 +6,13 @@ export declare const jsStyles: {
6
6
  name(): string;
7
7
  size(): string;
8
8
  icon(t: Theme): string;
9
+ iconSmall(t: Theme): string;
10
+ iconMedium(t: Theme): string;
11
+ iconLarge(t: Theme): string;
12
+ iconMultiple(): string;
13
+ contentSmall(t: Theme): string;
14
+ contentMedium(t: Theme): string;
15
+ contentLarge(t: Theme): string;
9
16
  deleteIcon(t: Theme): string;
10
17
  focusedIcon(t: Theme): string;
11
18
  };
@@ -2,28 +2,38 @@ import React, { useContext } from 'react';
2
2
  import { FileUploaderControlContext } from "../../FileUploaderControlContext";
3
3
  import { ThemeContext } from "../../../../lib/theming/ThemeContext";
4
4
  import { FileUploaderFile } from "../../FileUploaderFile/FileUploaderFile";
5
+ import { cx } from "../../../../lib/theming/Emotion";
6
+ import { useFileUploaderSize } from "../../hooks/useFileUploaderSize";
5
7
  import { jsStyles } from "../FileUploaderFileList.styles";
6
8
  export var FileUploaderFileDataTids = {
7
9
  fileList: 'FileUploader__fileList'
8
10
  };
9
11
  export var FileUploaderFileList = function FileUploaderFileList(props) {
10
- var renderFile = props.renderFile;
12
+ var renderFile = props.renderFile,
13
+ size = props.size;
11
14
 
12
15
  var _useContext = useContext(FileUploaderControlContext),
13
16
  files = _useContext.files;
14
17
 
15
18
  var theme = useContext(ThemeContext);
19
+ var fileWrapperClass = useFileUploaderSize(size, {
20
+ small: jsStyles.fileWrapperSmall(theme),
21
+ medium: jsStyles.fileWrapperMedium(theme),
22
+ large: jsStyles.fileWrapperLarge(theme)
23
+ });
16
24
  return /*#__PURE__*/React.createElement("div", {
17
25
  "data-tid": FileUploaderFileDataTids.fileList
18
26
  }, files.map(function (file) {
19
27
  return /*#__PURE__*/React.createElement("div", {
20
28
  key: file.id,
21
- className: jsStyles.fileWrapper(theme)
29
+ className: cx(jsStyles.fileWrapper(theme), fileWrapperClass)
22
30
  }, /*#__PURE__*/React.createElement("div", {
23
31
  className: jsStyles.file()
24
32
  }, renderFile(file, /*#__PURE__*/React.createElement(FileUploaderFile, {
25
33
  file: file,
26
- showSize: true
34
+ showSize: true,
35
+ multiple: true,
36
+ size: size
27
37
  }))));
28
38
  }));
29
39
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["FileUploaderFileList.tsx"],"names":["React","useContext","FileUploaderControlContext","ThemeContext","FileUploaderFile","jsStyles","FileUploaderFileDataTids","fileList","FileUploaderFileList","props","renderFile","files","theme","map","file","id","fileWrapper","displayName"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,UAAhB,QAAkC,OAAlC;;AAEA,SAASC,0BAAT,QAA2C,+BAA3C;AACA,SAASC,YAAT,QAA6B,mCAA7B;AACA,SAASC,gBAAT,QAAiC,sCAAjC;;;AAGA,SAASC,QAAT,QAAyB,+BAAzB;;;;;;AAMA,OAAO,IAAMC,wBAAwB,GAAG;AACtCC,EAAAA,QAAQ,EAAE,wBAD4B,EAAjC;;;AAIP,OAAO,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,CAACC,KAAD,EAAsC;AACxE,MAAQC,UAAR,GAAuBD,KAAvB,CAAQC,UAAR;AACA,oBAAkBT,UAAU,CAACC,0BAAD,CAA5B,CAAQS,KAAR,eAAQA,KAAR;AACA,MAAMC,KAAK,GAAGX,UAAU,CAACE,YAAD,CAAxB;;AAEA;AACE,iCAAK,YAAUG,wBAAwB,CAACC,QAAxC;AACGI,IAAAA,KAAK,CAACE,GAAN,CAAU,UAACC,IAAD;AACT,qCAAK,GAAG,EAAEA,IAAI,CAACC,EAAf,EAAmB,SAAS,EAAEV,QAAQ,CAACW,WAAT,CAAqBJ,KAArB,CAA9B;AACE,qCAAK,SAAS,EAAEP,QAAQ,CAACS,IAAT,EAAhB,IAAkCJ,UAAU,CAACI,IAAD,eAAO,oBAAC,gBAAD,IAAkB,IAAI,EAAEA,IAAxB,EAA8B,QAAQ,MAAtC,GAAP,CAA5C,CADF,CADS,GAAV,CADH,CADF;;;;;AASD,CAdM;;AAgBPN,oBAAoB,CAACS,WAArB,GAAmC,sBAAnC","sourcesContent":["import React, { useContext } from 'react';\n\nimport { FileUploaderControlContext } from '../FileUploaderControlContext';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\nimport { FileUploaderFile } from '../FileUploaderFile/FileUploaderFile';\nimport { FileUploaderAttachedFile } from '../fileUtils';\n\nimport { jsStyles } from './FileUploaderFileList.styles';\n\ninterface FileUploaderFileListProps {\n renderFile: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;\n}\n\nexport const FileUploaderFileDataTids = {\n fileList: 'FileUploader__fileList',\n} as const;\n\nexport const FileUploaderFileList = (props: FileUploaderFileListProps) => {\n const { renderFile } = props;\n const { files } = useContext(FileUploaderControlContext);\n const theme = useContext(ThemeContext);\n\n return (\n <div data-tid={FileUploaderFileDataTids.fileList}>\n {files.map((file) => (\n <div key={file.id} className={jsStyles.fileWrapper(theme)}>\n <div className={jsStyles.file()}>{renderFile(file, <FileUploaderFile file={file} showSize />)}</div>\n </div>\n ))}\n </div>\n );\n};\n\nFileUploaderFileList.displayName = 'FileUploaderFileList';\n"]}
1
+ {"version":3,"sources":["FileUploaderFileList.tsx"],"names":["React","useContext","FileUploaderControlContext","ThemeContext","FileUploaderFile","cx","useFileUploaderSize","jsStyles","FileUploaderFileDataTids","fileList","FileUploaderFileList","props","renderFile","size","files","theme","fileWrapperClass","small","fileWrapperSmall","medium","fileWrapperMedium","large","fileWrapperLarge","map","file","id","fileWrapper","displayName"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,UAAhB,QAAkC,OAAlC;;AAEA,SAASC,0BAAT,QAA2C,+BAA3C;AACA,SAASC,YAAT,QAA6B,mCAA7B;AACA,SAASC,gBAAT,QAAiC,sCAAjC;;;AAGA,SAASC,EAAT,QAAmB,8BAAnB;AACA,SAASC,mBAAT,QAAoC,8BAApC;;AAEA,SAASC,QAAT,QAAyB,+BAAzB;;;;;;;AAOA,OAAO,IAAMC,wBAAwB,GAAG;AACtCC,EAAAA,QAAQ,EAAE,wBAD4B,EAAjC;;;AAIP,OAAO,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,CAACC,KAAD,EAAsC;AACxE,MAAQC,UAAR,GAA6BD,KAA7B,CAAQC,UAAR,CAAoBC,IAApB,GAA6BF,KAA7B,CAAoBE,IAApB;AACA,oBAAkBZ,UAAU,CAACC,0BAAD,CAA5B,CAAQY,KAAR,eAAQA,KAAR;AACA,MAAMC,KAAK,GAAGd,UAAU,CAACE,YAAD,CAAxB;;AAEA,MAAMa,gBAAgB,GAAGV,mBAAmB,CAACO,IAAD,EAAO;AACjDI,IAAAA,KAAK,EAAEV,QAAQ,CAACW,gBAAT,CAA0BH,KAA1B,CAD0C;AAEjDI,IAAAA,MAAM,EAAEZ,QAAQ,CAACa,iBAAT,CAA2BL,KAA3B,CAFyC;AAGjDM,IAAAA,KAAK,EAAEd,QAAQ,CAACe,gBAAT,CAA0BP,KAA1B,CAH0C,EAAP,CAA5C;;;AAMA;AACE,iCAAK,YAAUP,wBAAwB,CAACC,QAAxC;AACGK,IAAAA,KAAK,CAACS,GAAN,CAAU,UAACC,IAAD;AACT,qCAAK,GAAG,EAAEA,IAAI,CAACC,EAAf,EAAmB,SAAS,EAAEpB,EAAE,CAACE,QAAQ,CAACmB,WAAT,CAAqBX,KAArB,CAAD,EAA8BC,gBAA9B,CAAhC;AACE,qCAAK,SAAS,EAAET,QAAQ,CAACiB,IAAT,EAAhB;AACGZ,QAAAA,UAAU,CAACY,IAAD,eAAO,oBAAC,gBAAD,IAAkB,IAAI,EAAEA,IAAxB,EAA8B,QAAQ,MAAtC,EAAuC,QAAQ,MAA/C,EAAgD,IAAI,EAAEX,IAAtD,GAAP,CADb,CADF,CADS,GAAV,CADH,CADF;;;;;;AAWD,CAtBM;;AAwBPH,oBAAoB,CAACiB,WAArB,GAAmC,sBAAnC","sourcesContent":["import React, { useContext } from 'react';\n\nimport { FileUploaderControlContext } from '../FileUploaderControlContext';\nimport { ThemeContext } from '../../../lib/theming/ThemeContext';\nimport { FileUploaderFile } from '../FileUploaderFile/FileUploaderFile';\nimport { FileUploaderAttachedFile } from '../fileUtils';\nimport { FileUploaderSize } from '../../../components/FileUploader';\nimport { cx } from '../../../lib/theming/Emotion';\nimport { useFileUploaderSize } from '../hooks/useFileUploaderSize';\n\nimport { jsStyles } from './FileUploaderFileList.styles';\n\ninterface FileUploaderFileListProps {\n renderFile: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;\n size: FileUploaderSize;\n}\n\nexport const FileUploaderFileDataTids = {\n fileList: 'FileUploader__fileList',\n} as const;\n\nexport const FileUploaderFileList = (props: FileUploaderFileListProps) => {\n const { renderFile, size } = props;\n const { files } = useContext(FileUploaderControlContext);\n const theme = useContext(ThemeContext);\n\n const fileWrapperClass = useFileUploaderSize(size, {\n small: jsStyles.fileWrapperSmall(theme),\n medium: jsStyles.fileWrapperMedium(theme),\n large: jsStyles.fileWrapperLarge(theme),\n });\n\n return (\n <div data-tid={FileUploaderFileDataTids.fileList}>\n {files.map((file) => (\n <div key={file.id} className={cx(jsStyles.fileWrapper(theme), fileWrapperClass)}>\n <div className={jsStyles.file()}>\n {renderFile(file, <FileUploaderFile file={file} showSize multiple size={size} />)}\n </div>\n </div>\n ))}\n </div>\n );\n};\n\nFileUploaderFileList.displayName = 'FileUploaderFileList';\n"]}
@@ -1,7 +1,9 @@
1
1
  import React from 'react';
2
2
  import { FileUploaderAttachedFile } from '../fileUtils';
3
+ import { FileUploaderSize } from '../../../components/FileUploader';
3
4
  interface FileUploaderFileListProps {
4
5
  renderFile: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;
6
+ size: FileUploaderSize;
5
7
  }
6
8
  export declare const FileUploaderFileDataTids: {
7
9
  readonly fileList: "FileUploader__fileList";
@@ -1,6 +1,6 @@
1
1
  import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTemplateLiteralLoose";
2
2
 
3
- var _templateObject, _templateObject2;
3
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
4
4
 
5
5
  import { css, memoizeStyle } from "../../../../lib/theming/Emotion";
6
6
  var styles = {
@@ -9,6 +9,15 @@ var styles = {
9
9
  },
10
10
  fileWrapper: function fileWrapper(t) {
11
11
  return css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n width: 100%;\n height: 32px;\n display: flex;\n align-items: center;\n box-sizing: border-box;\n padding: ", " ", ";\n "])), t.fileUploaderPaddingY, t.fileUploaderPaddingX);
12
+ },
13
+ fileWrapperSmall: function fileWrapperSmall(t) {
14
+ return css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n padding: ", " ", ";\n "])), t.fileUploaderPaddingYSmall, t.fileUploaderPaddingXSmall);
15
+ },
16
+ fileWrapperMedium: function fileWrapperMedium(t) {
17
+ return css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n padding: ", " ", ";\n "])), t.fileUploaderPaddingYMedium, t.fileUploaderPaddingXMedium);
18
+ },
19
+ fileWrapperLarge: function fileWrapperLarge(t) {
20
+ return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n padding: ", " ", ";\n "])), t.fileUploaderPaddingYLarge, t.fileUploaderPaddingXLarge);
12
21
  }
13
22
  };
14
23
  export var jsStyles = memoizeStyle(styles);
@@ -1 +1 @@
1
- {"version":3,"sources":["FileUploaderFileList.styles.ts"],"names":["css","memoizeStyle","styles","file","fileWrapper","t","fileUploaderPaddingY","fileUploaderPaddingX","jsStyles"],"mappings":"sIAAA,SAASA,GAAT,EAAcC,YAAd,QAAkC,8BAAlC;;;AAGA,IAAMC,MAAM,GAAG;AACbC,EAAAA,IADa,kBACN;AACL,WAAOH,GAAP;;;AAGD,GALY;AAMbI,EAAAA,WANa,uBAMDC,CANC,EAMS;AACpB,WAAOL,GAAP;;;;;;AAMaK,IAAAA,CAAC,CAACC,oBANf,EAMuCD,CAAC,CAACE,oBANzC;;AAQD,GAfY,EAAf;;;AAkBA,OAAO,IAAMC,QAAQ,GAAGP,YAAY,CAACC,MAAD,CAA7B","sourcesContent":["import { css, memoizeStyle } from '../../../lib/theming/Emotion';\nimport { Theme } from '../../../lib/theming/Theme';\n\nconst styles = {\n file() {\n return css`\n width: 100%;\n `;\n },\n fileWrapper(t: Theme) {\n return css`\n width: 100%;\n height: 32px;\n display: flex;\n align-items: center;\n box-sizing: border-box;\n padding: ${t.fileUploaderPaddingY} ${t.fileUploaderPaddingX};\n `;\n },\n};\n\nexport const jsStyles = memoizeStyle(styles);\n"]}
1
+ {"version":3,"sources":["FileUploaderFileList.styles.ts"],"names":["css","memoizeStyle","styles","file","fileWrapper","t","fileUploaderPaddingY","fileUploaderPaddingX","fileWrapperSmall","fileUploaderPaddingYSmall","fileUploaderPaddingXSmall","fileWrapperMedium","fileUploaderPaddingYMedium","fileUploaderPaddingXMedium","fileWrapperLarge","fileUploaderPaddingYLarge","fileUploaderPaddingXLarge","jsStyles"],"mappings":"4LAAA,SAASA,GAAT,EAAcC,YAAd,QAAkC,8BAAlC;;;AAGA,IAAMC,MAAM,GAAG;AACbC,EAAAA,IADa,kBACN;AACL,WAAOH,GAAP;;;AAGD,GALY;AAMbI,EAAAA,WANa,uBAMDC,CANC,EAMS;AACpB,WAAOL,GAAP;;;;;;AAMaK,IAAAA,CAAC,CAACC,oBANf,EAMuCD,CAAC,CAACE,oBANzC;;AAQD,GAfY;;AAiBbC,EAAAA,gBAjBa,4BAiBIH,CAjBJ,EAiBc;AACzB,WAAOL,GAAP;AACaK,IAAAA,CAAC,CAACI,yBADf,EAC4CJ,CAAC,CAACK,yBAD9C;;AAGD,GArBY;;AAuBbC,EAAAA,iBAvBa,6BAuBKN,CAvBL,EAuBe;AAC1B,WAAOL,GAAP;AACaK,IAAAA,CAAC,CAACO,0BADf,EAC6CP,CAAC,CAACQ,0BAD/C;;AAGD,GA3BY;;AA6BbC,EAAAA,gBA7Ba,4BA6BIT,CA7BJ,EA6Bc;AACzB,WAAOL,GAAP;AACaK,IAAAA,CAAC,CAACU,yBADf,EAC4CV,CAAC,CAACW,yBAD9C;;AAGD,GAjCY,EAAf;;;AAoCA,OAAO,IAAMC,QAAQ,GAAGhB,YAAY,CAACC,MAAD,CAA7B","sourcesContent":["import { css, memoizeStyle } from '../../../lib/theming/Emotion';\nimport { Theme } from '../../../lib/theming/Theme';\n\nconst styles = {\n file() {\n return css`\n width: 100%;\n `;\n },\n fileWrapper(t: Theme) {\n return css`\n width: 100%;\n height: 32px;\n display: flex;\n align-items: center;\n box-sizing: border-box;\n padding: ${t.fileUploaderPaddingY} ${t.fileUploaderPaddingX};\n `;\n },\n\n fileWrapperSmall(t: Theme) {\n return css`\n padding: ${t.fileUploaderPaddingYSmall} ${t.fileUploaderPaddingXSmall};\n `;\n },\n\n fileWrapperMedium(t: Theme) {\n return css`\n padding: ${t.fileUploaderPaddingYMedium} ${t.fileUploaderPaddingXMedium};\n `;\n },\n\n fileWrapperLarge(t: Theme) {\n return css`\n padding: ${t.fileUploaderPaddingYLarge} ${t.fileUploaderPaddingXLarge};\n `;\n },\n};\n\nexport const jsStyles = memoizeStyle(styles);\n"]}
@@ -2,4 +2,7 @@ import { Theme } from '../../../lib/theming/Theme';
2
2
  export declare const jsStyles: {
3
3
  file(): string;
4
4
  fileWrapper(t: Theme): string;
5
+ fileWrapperSmall(t: Theme): string;
6
+ fileWrapperMedium(t: Theme): string;
7
+ fileWrapperLarge(t: Theme): string;
5
8
  };
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../../cjs/internal/FileUploaderControl/hooks/useFileUploaderSize.js",
3
+ "module": "useFileUploaderSize",
4
+ "types": "../useFileUploaderSize.d.ts",
5
+ "sideEffects": false
6
+ }
@@ -0,0 +1,21 @@
1
+ import { useMemo } from 'react';
2
+ export function useFileUploaderSize(size, _ref) {
3
+ var small = _ref.small,
4
+ medium = _ref.medium,
5
+ large = _ref.large;
6
+ return useMemo(function () {
7
+ switch (size) {
8
+ case 'large':
9
+ return large;
10
+
11
+ case 'medium':
12
+ return medium;
13
+
14
+ case 'small':
15
+ return small;
16
+
17
+ default:
18
+ return small;
19
+ }
20
+ }, [size]);
21
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useFileUploaderSize.ts"],"names":["useMemo","useFileUploaderSize","size","small","medium","large"],"mappings":"AAAA,SAASA,OAAT,QAAwB,OAAxB;;;;AAIA,OAAO,SAASC,mBAAT,CAAgCC,IAAhC,QAA+G,KAArDC,KAAqD,QAArDA,KAAqD,CAA9CC,MAA8C,QAA9CA,MAA8C,CAAtCC,KAAsC,QAAtCA,KAAsC;AACpH,SAAOL,OAAO,CAAC,YAAM;AACnB,YAAQE,IAAR;AACE,WAAK,OAAL;AACE,eAAOG,KAAP;AACF,WAAK,QAAL;AACE,eAAOD,MAAP;AACF,WAAK,OAAL;AACE,eAAOD,KAAP;AACF;AACE,eAAOA,KAAP,CARJ;;AAUD,GAXa,EAWX,CAACD,IAAD,CAXW,CAAd;AAYD","sourcesContent":["import { useMemo } from 'react';\n\nimport { FileUploaderSize } from '../../../components/FileUploader';\n\nexport function useFileUploaderSize<T>(size: FileUploaderSize, { small, medium, large }: Record<FileUploaderSize, T>) {\n return useMemo(() => {\n switch (size) {\n case 'large':\n return large;\n case 'medium':\n return medium;\n case 'small':\n return small;\n default:\n return small;\n }\n }, [size]);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import { FileUploaderSize } from '../../../components/FileUploader';
2
+ export declare function useFileUploaderSize<T>(size: FileUploaderSize, { small, medium, large }: Record<FileUploaderSize, T>): T;
@@ -75,7 +75,7 @@ var TRANSITION_TIMEOUT = {
75
75
  };
76
76
  export var PopupPositions = ['top left', 'top center', 'top right', 'right top', 'right middle', 'right bottom', 'bottom right', 'bottom center', 'bottom left', 'left bottom', 'left middle', 'left top'];
77
77
  export var DefaultPosition = PopupPositions[0];
78
- var DUMMY_LOCATION = {
78
+ export var DUMMY_LOCATION = {
79
79
  position: DefaultPosition,
80
80
  coordinates: {
81
81
  top: -9999,
@@ -206,6 +206,10 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_temp = _class2
206
206
 
207
207
  var location = _this.getLocation(popupElement, _this.state.location);
208
208
 
209
+ if (location) {
210
+ _this.props.onPositionChange == null ? void 0 : _this.props.onPositionChange(location == null ? void 0 : location.position);
211
+ }
212
+
209
213
  if (!_this.locationEquals(_this.state.location, location)) {
210
214
  _this.setState({
211
215
  location: location
@@ -1 +1 @@
1
- {"version":3,"sources":["Popup.tsx"],"names":["React","PropTypes","Transition","raf","warning","getDOMRect","LayoutEvents","ZIndex","RenderContainer","isFunction","isNonNullable","isNullable","isRefableElement","isIE11","isEdge","isSafari","ThemeContext","isElement","safePropTypesInstanceOf","isTestEnv","CommonWrapper","cx","responsiveLayout","MobilePopup","getRootNode","rootNode","callChildRef","isInstanceWithAnchorElement","createPropsGetter","PopupPin","PopupHelper","styles","POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","PopupPositions","DefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","PopupDataTids","content","contentInner","popupPin","Popup","getProps","defaultProps","state","location","props","opened","locationUpdateId","refForTransition","createRef","anchorElement","updateAnchorElement","instance","childDomNode","getAnchorElement","removeEventListeners","addEventListeners","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","anchorWidth","Math","floor","parseFloat","children","backgroundColor","theme","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","element","lastPopupElement","handleLayoutEvent","updateLocation","popupElement","getLocation","locationEquals","componentDidMount","layoutEventsToken","addListener","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","isMobileLayout","onOpen","onClose","delayUpdateLocation","componentWillUnmount","remove","render","renderMain","renderMobile","renderChildren","mobileOnCloseRequest","useWrapper","anchor","isValidElement","anchorWithRef","cloneElement","ref","originalRef","canGetAnchorNode","withoutMobile","renderContent","addEventListener","removeEventListener","maxWidth","hasShadow","disableAnimations","ignoreHover","getPositionObject","direction","rootStyle","shouldFallbackShadow","Boolean","setRootNode","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","cancel","x","y","abs","positions","tryPreserveFirstRenderedPosition","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","propTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultRootNode"],"mappings":"qzCAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,UAAT,QAA2B,wBAA3B;AACA,OAAOC,GAAP,MAAgB,KAAhB;AACA,OAAOC,OAAP,MAAoB,SAApB;;AAEA,SAASC,UAAT,QAA2B,0BAA3B;;AAEA,OAAO,KAAKC,YAAZ,MAA8B,wBAA9B;AACA,SAASC,MAAT,QAAuB,WAAvB;AACA,SAASC,eAAT,QAAgC,oBAAhC;;AAEA,SAASC,UAAT,EAAqBC,aAArB,EAAoCC,UAApC,EAAgDC,gBAAhD,QAAwE,iBAAxE;AACA,SAASC,MAAT,EAAiBC,MAAjB,EAAyBC,QAAzB,QAAyC,kBAAzC;AACA,SAASC,YAAT,QAA6B,gCAA7B;;AAEA,SAASC,SAAT,EAAoBC,uBAApB,QAAmD,mBAAnD;AACA,SAASC,SAAT,QAA0B,8BAA1B;AACA,SAAsBC,aAAtB,QAA2C,kBAA3C;AACA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,gBAAT,QAAiC,6CAAjC;AACA,SAASC,WAAT,QAA4B,gBAA5B;AACA,SAASC,WAAT,EAAsBC,QAAtB,QAAoD,oBAApD;AACA,SAASC,YAAT,QAA6B,qCAA7B;AACA,SAASC,2BAAT,QAA4C,qCAA5C;AACA,SAASC,iBAAT,QAAkC,6BAAlC;;AAEA,SAASC,QAAT,QAAyB,YAAzB;AACA,SAAiBC,WAAjB,QAA0D,eAA1D;AACA,SAASC,MAAT,QAAuB,gBAAvB;;AAEA,IAAMC,0BAA0B,GAAG,aAAnC;AACA,IAAMC,kBAAkB,GAAG,EAAEC,KAAK,EAAE,CAAT,EAAYC,IAAI,EAAE,GAAlB,EAA3B;;AAEA,OAAO,IAAMC,cAAc,GAAG;AAC5B,UAD4B;AAE5B,YAF4B;AAG5B,WAH4B;AAI5B,WAJ4B;AAK5B,cAL4B;AAM5B,cAN4B;AAO5B,cAP4B;AAQ5B,eAR4B;AAS5B,aAT4B;AAU5B,aAV4B;AAW5B,aAX4B;AAY5B,UAZ4B,CAAvB;;AAcP,OAAO,IAAMC,eAAe,GAAGD,cAAc,CAAC,CAAD,CAAtC;;;;AAIP,IAAME,cAA6B,GAAG;AACpCC,EAAAA,QAAQ,EAAEF,eAD0B;AAEpCG,EAAAA,WAAW,EAAE;AACXC,IAAAA,GAAG,EAAE,CAAC,IADK;AAEXC,IAAAA,IAAI,EAAE,CAAC,IAFI,EAFuB,EAAtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEA,OAAO,IAAMC,aAAa,GAAG;AAC3BC,EAAAA,OAAO,EAAE,cADkB;AAE3BC,EAAAA,YAAY,EAAE,mBAFa;AAG3BC,EAAAA,QAAQ,EAAE,gBAHiB,EAAtB;;;;;;;;;;;;AAeP,WAAaC,KAAb,GAFCzB,gBAED,UADCG,QACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2EUuB,IAAAA,QA3EV,GA2EqBpB,iBAAiB,CAACmB,KAAK,CAACE,YAAP,CA3EtC;;;;;AAgFSC,IAAAA,KAhFT,GAgF6B,EAAEC,QAAQ,EAAE,MAAKC,KAAL,CAAWC,MAAX,GAAoBf,cAApB,GAAqC,IAAjD,EAhF7B;;;AAmFUgB,IAAAA,gBAnFV,GAmF+C,IAnF/C;;;;AAuFUC,IAAAA,gBAvFV,gBAuF6BvD,KAAK,CAACwD,SAAN,EAvF7B;;AAyFSC,IAAAA,aAzFT,GAyF4C,IAzF5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8MUC,IAAAA,mBA9MV,GA8MgC,UAACC,QAAD,EAA6C;AACzE,UAAMC,YAAY,GAAGjC,2BAA2B,CAACgC,QAAD,CAA3B,GAAwCA,QAAQ,CAACE,gBAAT,EAAxC,GAAsErC,WAAW,CAACmC,QAAD,CAAtG;AACA,UAAMF,aAAa,GAAG,MAAKA,aAA3B;;AAEA,UAAIG,YAAY,KAAKH,aAArB,EAAoC;AAClC,cAAKK,oBAAL,CAA0BL,aAA1B;AACA,cAAKA,aAAL,GAAqBG,YAArB;AACA,cAAKG,iBAAL,CAAuBH,YAAvB;AACD;AACF,KAvNH;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmPUI,IAAAA,gBAnPV,GAmP6B,UAACC,KAAD,EAA2B;AACpD,UAAI,MAAKb,KAAL,CAAWc,YAAf,EAA6B;AAC3B,cAAKd,KAAL,CAAWc,YAAX,CAAwBD,KAAxB;AACD;AACF,KAvPH;;AAyPUE,IAAAA,gBAzPV,GAyP6B,UAACF,KAAD,EAA2B;AACpD,UAAI,MAAKb,KAAL,CAAWgB,YAAf,EAA6B;AAC3B,cAAKhB,KAAL,CAAWgB,YAAX,CAAwBH,KAAxB;AACD;AACF,KA7PH;;AA+PUI,IAAAA,WA/PV,GA+PwB,UAACJ,KAAD,EAA2B;AAC/C,UAAI,MAAKb,KAAL,CAAWkB,OAAf,EAAwB;AACtB,cAAKlB,KAAL,CAAWkB,OAAX,CAAmBL,KAAnB;AACD;AACF,KAnQH;;AAqQUM,IAAAA,WArQV,GAqQwB,UAACN,KAAD,EAA2B;AAC/C,UAAI,MAAKb,KAAL,CAAWoB,OAAf,EAAwB;AACtB,cAAKpB,KAAL,CAAWoB,OAAX,CAAmBP,KAAnB;AACD;AACF,KAzQH;;AA2QUQ,IAAAA,UA3QV,GA2QuB,UAACR,KAAD,EAA2B;AAC9C,UAAI,MAAKb,KAAL,CAAWsB,MAAf,EAAuB;AACrB,cAAKtB,KAAL,CAAWsB,MAAX,CAAkBT,KAAlB;AACD;AACF,KA/QH;;AAiRUU,IAAAA,cAjRV,GAiR2B,UAACC,KAAD,EAAgC;AACvD,UAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,CAACC,QAAN,CAAe,GAAf,CAAjC,EAAsD;AACpD,YAAMC,WAAW,GAAGC,IAAI,CAACC,KAAL,CAAW3E,UAAU,CAAC,MAAKoD,aAAN,CAAV,CAA+BmB,KAA1C,CAApB;AACA,eAAO,MAAKnB,aAAL,GAAsBqB,WAAW,GAAGG,UAAU,CAACL,KAAD,CAAzB,GAAoC,GAAzD,GAA+D,CAAtE;AACD;AACD,aAAOA,KAAP;AACD,KAvRH;;AAyRUhC,IAAAA,OAzRV,GAyRoB,UAACsC,QAAD,EAA+B;AAC/C,UAAQC,eAAR,GAA4B,MAAK/B,KAAjC,CAAQ+B,eAAR;AACA,UAAMP,KAAK,GAAG,MAAK5B,QAAL,GAAgB4B,KAA9B;;AAEA;AACE,qCAAK,SAAS,EAAE7C,MAAM,CAACa,OAAP,CAAe,MAAKwC,KAApB,CAAhB,EAA4C,YAAUzC,aAAa,CAACC,OAApE,EAA6E,GAAG,EAAE,MAAKW,gBAAvF;AACE;AACE,UAAA,SAAS,EAAExB,MAAM,CAACc,YAAP,CAAoB,MAAKuC,KAAzB,CADb;AAEE,UAAA,KAAK,EAAE,EAAED,eAAe,EAAfA,eAAF,EAAmBP,KAAK,EAAE,MAAKD,cAAL,CAAoBC,KAApB,CAA1B,EAFT;AAGE,sBAAUjC,aAAa,CAACE,YAH1B;;AAKGqC,QAAAA,QALH,CADF,CADF;;;;AAWD,KAxSH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiWUG,IAAAA,aAjWV,GAiW0B,YAAM;AAC5B,YAAKC,2BAAL;AACA,YAAKpC,KAAL,CAAWC,QAAX,KAAwB,IAAxB,IAAgC,MAAKoC,QAAL,CAAc,EAAEpC,QAAQ,EAAE,IAAZ,EAAd,CAAhC;AACD,KApWH;;;;;;AA0WUqC,IAAAA,eA1WV,GA0W4B,UAACC,OAAD,EAAgC;AACxD,YAAKC,gBAAL,GAAwBD,OAAxB;AACD,KA5WH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0YUE,IAAAA,iBA1YV,GA0Y8B,YAAM;AAChC,UAAI,CAAC,MAAKzC,KAAL,CAAWC,QAAhB,EAA0B;AACxB;AACD;AACD,YAAKyC,cAAL;AACD,KA/YH;;;;;;;;;;;;;;AA6ZUA,IAAAA,cA7ZV,GA6Z2B,YAAM;AAC7B,UAAMC,YAAY,GAAG,MAAKH,gBAA1B;;AAEA,UAAI,CAACG,YAAL,EAAmB;AACjB;AACD;;AAED,UAAM1C,QAAQ,GAAG,MAAK2C,WAAL,CAAiBD,YAAjB,EAA+B,MAAK3C,KAAL,CAAWC,QAA1C,CAAjB;AACA,UAAI,CAAC,MAAK4C,cAAL,CAAoB,MAAK7C,KAAL,CAAWC,QAA/B,EAAyCA,QAAzC,CAAL,EAAyD;AACvD,cAAKoC,QAAL,CAAc,EAAEpC,QAAQ,EAARA,QAAF,EAAd;AACD;AACF,KAxaH,mDA2FS6C,iBA3FT,GA2FE,6BAA2B,CACzB,KAAKJ,cAAL,GACA,KAAKK,iBAAL,GAAyB3F,YAAY,CAAC4F,WAAb,CAAyB,KAAKP,iBAA9B,CAAzB,CACD,CA9FH,OAgGgBQ,wBAhGhB,GAgGE,kCAAuC/C,KAAvC,EAAoEF,KAApE,EAAuF,CACrF;AACJ;AACA,OACI,IAAIE,KAAK,CAACC,MAAV,EAAkB,CAChB,IAAI,CAACH,KAAK,CAACC,QAAX,EAAqB,CACnB,OAAO,EAAEA,QAAQ,EAAEb,cAAZ,EAAP,CACD,CACF,CAJD,MAIO,IAAIY,KAAK,CAACC,QAAV,EAAoB,CACzB,OAAO,EAAEA,QAAQ,EAAEb,cAAZ,EAAP,CACD,CACD,OAAOY,KAAP,CACD,CA5GH,QA8GSkD,kBA9GT,GA8GE,4BAA0BC,SAA1B,EAAiDC,SAAjD,EAAwE,CACtE,IAAMC,aAAa,GAAGD,SAAS,CAACnD,QAAV,KAAuBb,cAA7C,CACA,IAAMkE,WAAW,GAAG,KAAKtD,KAAL,CAAWC,QAAX,KAAwBb,cAA5C,CACA,IAAMmE,SAAS,GAAGJ,SAAS,CAAChD,MAAV,IAAoB,CAAC,KAAKD,KAAL,CAAWC,MAAlD,CAEA,IAAI,KAAKqD,cAAL,IAAuBJ,SAAS,CAACnD,QAAV,KAAuB,IAA9C,IAAsD,KAAKD,KAAL,CAAWC,QAAX,KAAwB,IAAlF,EAAwF,CACtF,KAAKoC,QAAL,CAAc,EAAEpC,QAAQ,EAAEb,cAAZ,EAAd,EACD,CAED,IAAI,KAAKc,KAAL,CAAWC,MAAX,IAAqBkD,aAArB,IAAsCC,WAAtC,IAAqD,KAAKpD,KAAL,CAAWuD,MAApE,EAA4E,CAC1E,KAAKvD,KAAL,CAAWuD,MAAX,GACD,CACD,IAAIF,SAAS,IAAI,CAACD,WAAd,IAA6B,KAAKpD,KAAL,CAAWwD,OAA5C,EAAqD,CACnD,KAAKxD,KAAL,CAAWwD,OAAX,GACD,CACD,IAAI,KAAKxD,KAAL,CAAWC,MAAf,EAAuB,CACrB,KAAKwD,mBAAL,GACD,CACF,CAhIH,QAkISC,oBAlIT,GAkIE,gCAA8B,CAC5B,KAAKxB,2BAAL,GACA,KAAKxB,oBAAL,CAA0B,KAAKL,aAA/B,EACA,IAAI,KAAKwC,iBAAT,EAA4B,CAC1B,KAAKA,iBAAL,CAAuBc,MAAvB,GACA,KAAKd,iBAAL,GAAyB,IAAzB,CACD,CACD,IAAI,KAAK/C,KAAL,CAAWC,QAAX,IAAuB,KAAKC,KAAL,CAAWwD,OAAtC,EAA+C,CAC7C,KAAKxD,KAAL,CAAWwD,OAAX,GACD,CACF,CA5IH,QA8ISI,MA9IT,GA8IE,kBAAgB,mBACd,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAAC5B,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAAC6B,UAAL,EAAP,CACD,CAJH,CADF,CAQD,CAvJH,QAyJUC,YAzJV,GAyJE,wBAAuB,CACrB,IAAQ7D,MAAR,GAAmB,KAAKD,KAAxB,CAAQC,MAAR,CACA,IAAM6B,QAAQ,GAAG,KAAKiC,cAAL,EAAjB,CAEA,OAAOjC,QAAQ,gBACb,oBAAC,WAAD,IAAa,MAAM,EAAE7B,MAArB,EAA6B,sBAAsB,MAAnD,EAAoD,cAAc,EAAE,KAAKD,KAAL,CAAWgE,oBAA/E,IACG,KAAKxE,OAAL,CAAasC,QAAb,CADH,CADa,GAIX,IAJJ,CAKD,CAlKH,QAoKU+B,UApKV,GAoKE,sBAAqB,mBACnB,IAAQ9D,QAAR,GAAqB,KAAKD,KAA1B,CAAQC,QAAR,CACA,IAAQM,aAAR,GAA0B,KAAKL,KAA/B,CAAQK,aAAR,CACA,IAAM4D,UAAU,GAAG,KAAKrE,QAAL,GAAgBqE,UAAnC,CAEA,IAAIC,MAAiC,GAAG,IAAxC,CACA,IAAIrG,SAAS,CAACwC,aAAD,CAAb,EAA8B,CAC5B,KAAKC,mBAAL,CAAyBD,aAAzB,EACD,CAFD,MAEO,kBAAIzD,KAAK,CAACuH,cAAN,CAAqB9D,aAArB,CAAJ,EAAyC,CAC9C6D,MAAM,GAAGD,UAAU,gBAAG,kCAAO5D,aAAP,CAAH,GAAkCA,aAArD,CACD,CAFM,MAEA,CACL6D,MAAM,gBAAG,kCAAO7D,aAAP,CAAT,CACD,CAED,IAAM+D,aAAa,GACjBF,MAAM,iBAAItH,KAAK,CAACuH,cAAN,CAAqBD,MAArB,CAAV,IAA0C1G,gBAAgB,CAAC0G,MAAD,CAA1D,gBACItH,KAAK,CAACyH,YAAN,CAAmBH,MAAnB,EAA2B,EACzBI,GAAG,EAAE,aAAC/D,QAAD,EAA6C,aAChD,MAAI,CAACD,mBAAL,CAAyBC,QAAzB,EACA,IAAMgE,WAAW,cAAIL,MAAJ,qBAAG,QAAsCI,GAA1D,CACAC,WAAW,IAAIjG,YAAY,CAACiG,WAAD,EAAchE,QAAd,CAA3B,CACD,CALwB,EAA3B,CADJ,GAQI,IATN,CAdmB,CAyBnB;AACA;AACA;AACA;AACA;AAEA,QAAMiE,gBAAgB,GAAG,CAAC,CAACJ,aAAF,IAAmBvG,SAAS,CAACwC,aAAD,CAArD,CAEA,oBACE,oBAAC,eAAD,IAAiB,MAAM,EAAE+D,aAAa,IAAIF,MAA1C,EAAkD,GAAG,EAAEM,gBAAgB,GAAG,IAAH,GAAU,KAAKlE,mBAAtF,IACG,KAAKgD,cAAL,IAAuB,CAAC,KAAKtD,KAAL,CAAWyE,aAAnC,GACG,KAAKX,YAAL,EADH,GAEG/D,QAAQ,IAAI,KAAK2E,aAAL,CAAmB3E,QAAnB,CAHlB,CADF,CAOD,CA5MH,QAyNUY,iBAzNV,GAyNE,2BAA0B0B,OAA1B,EAAsD,CACpD,IAAIA,OAAO,IAAIxE,SAAS,CAACwE,OAAD,CAAxB,EAAmC,CACjC;AACAA,MAAAA,OAAO,CAACsC,gBAAR,CAAyB,YAAzB,EAAuC,KAAK/D,gBAA5C,EAFiC,CAGjC;AACAyB,MAAAA,OAAO,CAACsC,gBAAR,CAAyB,YAAzB,EAAuC,KAAK5D,gBAA5C,EAJiC,CAKjC;AACAsB,MAAAA,OAAO,CAACsC,gBAAR,CAAyB,OAAzB,EAAkC,KAAK1D,WAAvC,EACAoB,OAAO,CAACsC,gBAAR,CAAyB,SAAzB,EAAoC,KAAKxD,WAAzC,EACAkB,OAAO,CAACsC,gBAAR,CAAyB,UAAzB,EAAqC,KAAKtD,UAA1C,EACD,CACF,CApOH,QAsOUX,oBAtOV,GAsOE,8BAA6B2B,OAA7B,EAAyD,CACvD,IAAIA,OAAO,IAAIxE,SAAS,CAACwE,OAAD,CAAxB,EAAmC,CACjC;AACAA,MAAAA,OAAO,CAACuC,mBAAR,CAA4B,YAA5B,EAA0C,KAAKhE,gBAA/C,EAFiC,CAGjC;AACAyB,MAAAA,OAAO,CAACuC,mBAAR,CAA4B,YAA5B,EAA0C,KAAK7D,gBAA/C,EAJiC,CAKjC;AACAsB,MAAAA,OAAO,CAACuC,mBAAR,CAA4B,OAA5B,EAAqC,KAAK3D,WAA1C,EACAoB,OAAO,CAACuC,mBAAR,CAA4B,SAA5B,EAAuC,KAAKzD,WAA5C,EACAkB,OAAO,CAACuC,mBAAR,CAA4B,UAA5B,EAAwC,KAAKvD,UAA7C,EACD,CACF,CAjPH,QA0SUqD,aA1SV,GA0SE,uBAAsB3E,QAAtB,EAA+C,mBAC7C,kBAA6B,KAAKC,KAAlC,CAAQ6E,QAAR,eAAQA,QAAR,CAAkB5E,MAAlB,eAAkBA,MAAlB,CACA,qBAAsD,KAAKL,QAAL,EAAtD,CAAQkF,SAAR,kBAAQA,SAAR,CAAmBC,iBAAnB,kBAAmBA,iBAAnB,CAAsCC,WAAtC,kBAAsCA,WAAtC,CACA,IAAMlD,QAAQ,GAAG,KAAKiC,cAAL,EAAjB,CAEA,4BAAsBrF,WAAW,CAACuG,iBAAZ,CAA8BlF,QAAQ,CAACZ,QAAvC,CAAtB,CAAQ+F,SAAR,yBAAQA,SAAR,CACA,IAAMC,SAA8B,gBAAQpF,QAAQ,CAACX,WAAjB,IAA8ByF,QAAQ,EAARA,QAA9B,GAApC,CAEA,IAAMO,oBAAoB,GAAG3H,MAAM,IAAIC,MAAV,IAAoBC,QAAjD,CAEA,oBACE,oBAAC,UAAD,IACE,OAAO,EAAEkB,kBADX,EAEE,MAAM,EAAE,CAACkG,iBAFX,EAGE,MAAIM,OAAO,CAACpF,MAAM,IAAI6B,QAAX,CAHb,EAIE,YAAY,MAJd,EAKE,aAAa,MALf,EAME,KAAK,EAAE,CAACiD,iBANV,EAOE,IAAI,EAAE,CAACA,iBAPT,EAQE,QAAQ,EAAE,KAAK9C,aARjB,EASE,OAAO,EAAE,KAAK9B,gBAThB,IAWG,UAACL,KAAD,2CACC,oBAAC,aAAD,eAAmB,MAAI,CAACE,KAAxB,IAA+B,WAAW,EAAE,MAAI,CAACsF,WAAjD,kBACE,oBAAC,MAAD,IACE,YAAU,aADZ,EAEE,UAAU,EAAE,MAAI,CAAClD,eAFnB,EAGE,QAAQ,EAAE,OAHZ,EAIE,SAAS,EAAEnE,EAAE,qCACVU,MAAM,CAAC4G,KAAP,CAAa,MAAI,CAACvD,KAAlB,CADU,IACiB,IADjB,YAEVrD,MAAM,CAAC6G,MAAP,CAAc,MAAI,CAACxD,KAAnB,CAFU,IAEkB8C,SAAS,IAAI,CAACM,oBAFhC,YAGVzG,MAAM,CAAC8G,cAAP,CAAsB,MAAI,CAACzD,KAA3B,CAHU,IAG0B8C,SAAS,IAAIM,oBAHvC,YAIVzG,MAAM,CAAC+G,gBAAP,EAJU,IAIkBV,WAJlB,cAKPD,iBAAiB,GACjB,EADiB,oBAGdpG,MAAM,uBAAqBuG,SAArB,CAAN,CAA+D,MAAI,CAAClD,KAApE,CAHc,IAG+D,IAH/D,OAIdrD,MAAM,CAACgH,eAAP,EAJc,IAIa7F,KAAK,KAAK,UAJvB,OAKdnB,MAAM,CAACiH,qBAAP,EALc,IAKmB9F,KAAK,KAAK,SAL7B,OAMdnB,MAAM,CAACkH,cAAP,EANc,IAMY/F,KAAK,KAAK,SANtB,OALV,EAJf,EAkBE,KAAK,EAAEqF,SAlBT,EAmBE,YAAY,EAAE,MAAI,CAACvE,gBAnBrB,EAoBE,YAAY,EAAE,MAAI,CAACG,gBApBrB,IAsBG,MAAI,CAACvB,OAAL,CAAasC,QAAb,CAtBH,EAuBG,CAAC,MAAI,CAACwB,cAAN,IAAwB,MAAI,CAACwC,SAAL,CAAe/F,QAAQ,CAACZ,QAAxB,CAvB3B,CADF,CADD,EAXH,CADF,CA2CD,CA/VH,QAsWU4E,cAtWV,GAsWE,0BAAyB,CACvB,OAAO1G,UAAU,CAAC,KAAK2C,KAAL,CAAW8B,QAAZ,CAAV,GAAkC,KAAK9B,KAAL,CAAW8B,QAAX,EAAlC,GAA0D,KAAK9B,KAAL,CAAW8B,QAA5E,CACD,CAxWH,QA8WUgE,SA9WV,GA8WE,mBAAkBC,YAAlB,EAAyD,CACvD;AACJ;AACA;AACA;AACA,OACI,IAAMC,oBAAoB,GAAG,KAAKhE,KAAL,CAAWiE,gBAAX,KAAgCrH,0BAA7D,CACA,IAAMsH,SAAS,GAAGzI,MAAM,IAAIuI,oBAAV,GAAiC,qBAAjC,GAAyD,KAAKhE,KAAL,CAAWiE,gBAAtF,CAEA,mBAAkD,KAAKjG,KAAvD,CAAQmG,OAAR,gBAAQA,OAAR,CAAiBpE,eAAjB,gBAAiBA,eAAjB,CAAkCqE,WAAlC,gBAAkCA,WAAlC,CACA,sBAA8B,KAAKxG,QAAL,EAA9B,CAAQkF,SAAR,mBAAQA,SAAR,CAAmBuB,MAAnB,mBAAmBA,MAAnB,CACA,IAAMlH,QAAQ,GAAGT,WAAW,CAACuG,iBAAZ,CAA8Bc,YAA9B,CAAjB,CAEA,OACEM,MAAM,iBACJ,oBAAC,QAAD,IACE,YAAY,EAAE,KAAK/D,gBADrB,EAEE,aAAa,EAAEyD,YAFjB,EAGE,IAAI,EAAEI,OAAO,IAAIG,QAAQ,CAAC,KAAKtE,KAAL,CAAWuE,YAAZ,CAH3B,EAIE,MAAM,EAAE,KAAKC,YAAL,CAAkBrH,QAAQ,CAACsH,KAA3B,CAJV,EAKE,WAAW,EAAE3B,SAAS,GAAG,CAAH,GAAO,CAL/B,EAME,eAAe,EAAE/C,eAAe,IAAI,KAAKC,KAAL,CAAW0E,eANjD,EAOE,WAAW,EAAEN,WAAW,IAAIF,SAP9B,GAFJ,CAaD,CAxYH,QAiZUzC,mBAjZV,GAiZE,+BAA8B,CAC5B,KAAKvB,2BAAL,GACA,KAAKhC,gBAAL,GAAwBnD,GAAG,CAAC,KAAKyF,cAAN,CAA3B,CACD,CApZH,QAsZUN,2BAtZV,GAsZE,uCAAsC,CACpC,IAAI,KAAKhC,gBAAT,EAA2B,CACzBnD,GAAG,CAAC4J,MAAJ,CAAW,KAAKzG,gBAAhB,EACA,KAAKA,gBAAL,GAAwB,IAAxB,CACD,CACF,CA3ZH,QA0aUyC,cA1aV,GA0aE,wBAAuBiE,CAAvB,EAAmDC,CAAnD,EAA+E,CAC7E,IAAID,CAAC,KAAKC,CAAV,EAAa,CACX,OAAO,IAAP,CACD,CAED,IAAItJ,UAAU,CAACqJ,CAAD,CAAV,IAAiBrJ,UAAU,CAACsJ,CAAD,CAA/B,EAAoC,CAClC,OAAO,KAAP,CACD,CAED,IAAI,CAACpJ,MAAD,IAAW,CAACC,MAAhB,EAAwB,CACtB,OACEkJ,CAAC,CAACxH,WAAF,CAAcE,IAAd,KAAuBuH,CAAC,CAACzH,WAAF,CAAcE,IAArC,IACAsH,CAAC,CAACxH,WAAF,CAAcC,GAAd,KAAsBwH,CAAC,CAACzH,WAAF,CAAcC,GADpC,IAEAuH,CAAC,CAACzH,QAAF,KAAe0H,CAAC,CAAC1H,QAHnB,CAKD;;AAED;AACA;;AAEA;AACEyH,MAAAA,CAAC,CAACzH,QAAF,KAAe0H,CAAC,CAAC1H,QAAjB;AACAwC,MAAAA,IAAI,CAACmF,GAAL,CAASF,CAAC,CAACxH,WAAF,CAAcC,GAAd,GAAoBwH,CAAC,CAACzH,WAAF,CAAcC,GAA3C,KAAmD,CADnD;AAEAsC,MAAAA,IAAI,CAACmF,GAAL,CAASF,CAAC,CAACxH,WAAF,CAAcE,IAAd,GAAqBuH,CAAC,CAACzH,WAAF,CAAcE,IAA5C,KAAqD,CAHvD;;AAKD,GAncH;;AAqcUoD,EAAAA,WArcV,GAqcE,qBAAoBD,YAApB,EAA2C1C,QAA3C,EAA+E;AAC7E,uBAAwD,KAAKC,KAA7D,CAAQ+G,SAAR,gBAAQA,SAAR,CAAmBC,gCAAnB,gBAAmBA,gCAAnB;AACA,QAAM3G,aAAa,GAAG,KAAKA,aAA3B;;AAEArD,IAAAA,OAAO,CAACqD,aAAa,IAAIxC,SAAS,CAACwC,aAAD,CAA3B,EAA4C,0DAA5C,CAAP;;AAEA,QAAI,EAAEA,aAAa,IAAIxC,SAAS,CAACwC,aAAD,CAA5B,CAAJ,EAAkD;AAChD,aAAON,QAAP;AACD;;AAED,QAAMkH,UAAU,GAAGvI,WAAW,CAACwI,sBAAZ,CAAmC7G,aAAnC,CAAnB;AACA,QAAM8G,SAAS,GAAGzI,WAAW,CAACwI,sBAAZ,CAAmCzE,YAAnC,CAAlB;;AAEA,QAAItD,QAAJ;AACA,QAAIC,WAAJ;;AAEA,QAAIW,QAAQ,IAAIA,QAAQ,KAAKb,cAAzB,IAA2Ca,QAAQ,CAACZ,QAAxD,EAAkE;AAChEA,MAAAA,QAAQ,GAAGY,QAAQ,CAACZ,QAApB;AACAC,MAAAA,WAAW,GAAG,KAAKgI,cAAL,CAAoBH,UAApB,EAAgCE,SAAhC,EAA2ChI,QAA3C,CAAd;;AAEA,UAAMkI,cAAc,GAAG3I,WAAW,CAAC2I,cAAZ,CAA2BjI,WAA3B,EAAwC+H,SAAxC,CAAvB;AACA,UAAMG,gBAAgB,GAAG,CAACD,cAAD,IAAmB3I,WAAW,CAAC6I,qBAAZ,CAAkCpI,QAAlC,EAA4CC,WAA5C,CAA5C;;AAEA;AACE;AACA;AACC4H,MAAAA,gCAAgC,KAAKK,cAAc,IAAIC,gBAAvB,CAAjC;AACA;AACA;AACCD,MAAAA,cAAc,IAAIlI,QAAQ,KAAK4H,SAAS,CAAC,CAAD,CAN3C;AAOE;AACA;AACA,eAAO,EAAE3H,WAAW,EAAXA,WAAF,EAAeD,QAAQ,EAARA,QAAf,EAAP;AACD;AACF;;AAED,yDAAiB4H,SAAjB,wCAA4B,CAAvB5H,QAAuB;AAC1BC,MAAAA,WAAW,GAAG,KAAKgI,cAAL,CAAoBH,UAApB,EAAgCE,SAAhC,EAA2ChI,QAA3C,CAAd;AACA,UAAIT,WAAW,CAAC2I,cAAZ,CAA2BjI,WAA3B,EAAwC+H,SAAxC,CAAJ,EAAwD;AACtD,eAAO,EAAE/H,WAAW,EAAXA,WAAF,EAAeD,QAAQ,EAARA,QAAf,EAAP;AACD;AACF;;AAEDA,IAAAA,QAAQ,GAAG4H,SAAS,CAAC,CAAD,CAApB;AACA3H,IAAAA,WAAW,GAAG,KAAKgI,cAAL,CAAoBH,UAApB,EAAgCE,SAAhC,EAA2ChI,QAA3C,CAAd;AACA,WAAO,EAAEC,WAAW,EAAXA,WAAF,EAAeD,QAAQ,EAARA,QAAf,EAAP;AACD,GAnfH;;AAqfUqI,EAAAA,oBArfV,GAqfE,8BAA6BP,UAA7B,EAA+C9H,QAA/C,EAAyE;AACvE,QAAI,CAAC,KAAKS,QAAL,GAAgByG,MAAjB,IAA2B,gBAAgBoB,IAAhB,CAAqBtI,QAAQ,CAACsH,KAA9B,CAA/B,EAAqE;AACnE,aAAO,CAAP;AACD;;AAED,QAAMiB,UAAU,GAAG,aAAaD,IAAb,CAAkBtI,QAAQ,CAAC+F,SAA3B,IAAwC+B,UAAU,CAACzF,KAAnD,GAA2DyF,UAAU,CAACU,MAAzF;;AAEA,QAAQxB,OAAR,GAAoB,KAAKnG,KAAzB,CAAQmG,OAAR;;AAEA,WAAOxE,IAAI,CAACiG,GAAL;AACL,KADK;AAEL,SAAKpB,YAAL,CAAkBrH,QAAQ,CAACsH,KAA3B,KAAqCN,OAAO,IAAIG,QAAQ,CAAC,KAAKtE,KAAL,CAAWuE,YAAZ,CAAxD,IAAqFmB,UAAU,GAAG,CAF7F,CAAP;;AAID,GAlgBH;;AAogBUN,EAAAA,cApgBV,GAogBE,wBAAuBH,UAAvB,EAAyCE,SAAzC,EAA0DpB,YAA1D,EAAgF;AAC9E,QAAgB8B,eAAhB,GAAoC,KAAK7H,KAAzC,CAAQ8H,MAAR;AACA,QAAMA,MAAM;AACVxK,IAAAA,aAAa,CAACuK,eAAD,CAAb,IAAkC,CAACE,KAAK,CAACF,eAAD,CAAxC;AACIA,IAAAA,eADJ;AAEIvB,IAAAA,QAAQ,CAAC,KAAKtE,KAAL,CAAWgG,WAAZ,CAAR,IAAoC,CAH1C;AAIA,QAAM7I,QAAQ,GAAGT,WAAW,CAACuG,iBAAZ,CAA8Bc,YAA9B,CAAjB;AACA,QAAMkC,WAAW,GAAG,KAAKrI,QAAL,GAAgBqI,WAAhB,GAA8B,KAAKT,oBAAL,CAA0BP,UAA1B,EAAsC9H,QAAtC,CAAlD;;AAEA,YAAQA,QAAQ,CAAC+F,SAAjB;AACE,WAAK,KAAL;AACE,eAAO;AACL7F,UAAAA,GAAG,EAAE4H,UAAU,CAAC5H,GAAX,GAAiB8H,SAAS,CAACQ,MAA3B,GAAoCG,MADpC;AAELxI,UAAAA,IAAI,EAAE,KAAK4I,qBAAL,CAA2BjB,UAA3B,EAAuCE,SAAvC,EAAkDhI,QAAQ,CAACsH,KAA3D,EAAkEwB,WAAlE,CAFD,EAAP;;AAIF,WAAK,QAAL;AACE,eAAO;AACL5I,UAAAA,GAAG,EAAE4H,UAAU,CAAC5H,GAAX,GAAiB4H,UAAU,CAACU,MAA5B,GAAqCG,MADrC;AAELxI,UAAAA,IAAI,EAAE,KAAK4I,qBAAL,CAA2BjB,UAA3B,EAAuCE,SAAvC,EAAkDhI,QAAQ,CAACsH,KAA3D,EAAkEwB,WAAlE,CAFD,EAAP;;AAIF,WAAK,MAAL;AACE,eAAO;AACL5I,UAAAA,GAAG,EAAE,KAAK8I,mBAAL,CAAyBlB,UAAzB,EAAqCE,SAArC,EAAgDhI,QAAQ,CAACsH,KAAzD,EAAgEwB,WAAhE,CADA;AAEL3I,UAAAA,IAAI,EAAE2H,UAAU,CAAC3H,IAAX,GAAkB6H,SAAS,CAAC3F,KAA5B,GAAoCsG,MAFrC,EAAP;;AAIF,WAAK,OAAL;AACE,eAAO;AACLzI,UAAAA,GAAG,EAAE,KAAK8I,mBAAL,CAAyBlB,UAAzB,EAAqCE,SAArC,EAAgDhI,QAAQ,CAACsH,KAAzD,EAAgEwB,WAAhE,CADA;AAEL3I,UAAAA,IAAI,EAAE2H,UAAU,CAAC3H,IAAX,GAAkB2H,UAAU,CAACzF,KAA7B,GAAqCsG,MAFtC,EAAP;;AAIF;AACE,cAAM,IAAIM,KAAJ,4BAAmCjJ,QAAQ,CAAC+F,SAA5C,OAAN,CAtBJ;;AAwBD,GAriBH;;AAuiBUsB,EAAAA,YAviBV,GAuiBE,sBAAqBC,KAArB,EAAoC;AAClC,QAAQ4B,SAAR,GAAsB,KAAKrI,KAA3B,CAAQqI,SAAR;;AAEA,YAAQ5B,KAAR;AACE,WAAK,KAAL;AACA,WAAK,QAAL;AACE,eAAO4B,SAAS,IAAI/B,QAAQ,CAAC,KAAKtE,KAAL,CAAWsG,cAAZ,CAArB,IAAoDhC,QAAQ,CAAC,KAAKtE,KAAL,CAAWuG,eAAZ,CAAnE;AACF,WAAK,MAAL;AACA,WAAK,OAAL;AACE,eAAOF,SAAS,IAAI/B,QAAQ,CAAC,KAAKtE,KAAL,CAAWsG,cAAZ,CAArB,IAAoDhC,QAAQ,CAAC,KAAKtE,KAAL,CAAWwG,eAAZ,CAAnE;AACF,WAAK,QAAL;AACA,WAAK,QAAL;AACE,eAAO,CAAP;AACF;AACE,cAAM,IAAIJ,KAAJ,wBAA+B3B,KAA/B,OAAN,CAXJ;;AAaD,GAvjBH;;AAyjBUyB,EAAAA,qBAzjBV,GAyjBE,+BAA8BjB,UAA9B,EAAgDE,SAAhD,EAAiEV,KAAjE,EAAgFwB,WAAhF,EAAqG;AACnG,YAAQxB,KAAR;AACE,WAAK,MAAL;AACE,eAAOQ,UAAU,CAAC3H,IAAX,GAAkB2I,WAAzB;AACF,WAAK,QAAL;AACE,eAAOhB,UAAU,CAAC3H,IAAX,GAAkB,CAAC6H,SAAS,CAAC3F,KAAV,GAAkByF,UAAU,CAACzF,KAA9B,IAAuC,CAAhE;AACF,WAAK,OAAL;AACE,eAAOyF,UAAU,CAAC3H,IAAX,IAAmB6H,SAAS,CAAC3F,KAAV,GAAkByF,UAAU,CAACzF,KAAhD,IAAyDyG,WAAhE;AACF;AACE,cAAM,IAAIG,KAAJ,wBAA+B3B,KAA/B,OAAN,CARJ;;AAUD,GApkBH;;AAskBU0B,EAAAA,mBAtkBV,GAskBE,6BAA4BlB,UAA5B,EAA8CE,SAA9C,EAA+DV,KAA/D,EAA8EwB,WAA9E,EAAmG;AACjG,YAAQxB,KAAR;AACE,WAAK,KAAL;AACE,eAAOQ,UAAU,CAAC5H,GAAX,GAAiB4I,WAAxB;AACF,WAAK,QAAL;AACE,eAAOhB,UAAU,CAAC5H,GAAX,GAAiB,CAAC8H,SAAS,CAACQ,MAAV,GAAmBV,UAAU,CAACU,MAA/B,IAAyC,CAAjE;AACF,WAAK,QAAL;AACE,eAAOV,UAAU,CAAC5H,GAAX,IAAkB8H,SAAS,CAACQ,MAAV,GAAmBV,UAAU,CAACU,MAAhD,IAA0DM,WAAjE;AACF;AACE,cAAM,IAAIG,KAAJ,wBAA+B3B,KAA/B,OAAN,CARJ;;AAUD,GAjlBH,gBAA2B7J,KAAK,CAAC6L,SAAjC,WACgBC,mBADhB,GACsC,OADtC,UAGgBC,SAHhB,GAG4B,EACxB;AACJ;AACA,KACItI,aAAa,EAAExD,SAAS,CAAC+L,SAAV,CAAoB,CAAC9K,uBAAuB,CAAC,oBAAM+K,WAAN,EAAD,CAAxB,EAA6ChM,SAAS,CAACiM,IAAvD,CAApB,EAAkFC,UAJzE,EAMxB;AACJ;AACA,KACIhH,eAAe,EAAElF,SAAS,CAACmM,MATH,EAWxBlH,QAAQ,EAAEjF,SAAS,CAAC+L,SAAV,CAAoB,CAAC/L,SAAS,CAACiM,IAAX,EAAiBjM,SAAS,CAACoM,IAA3B,CAApB,CAXc,EAaxB;AACJ;AACA,KACI5C,MAAM,EAAExJ,SAAS,CAACqM,IAhBM,EAkBxB;AACJ;AACA,KACIpE,SAAS,EAAEjI,SAAS,CAACqM,IArBG,EAuBxB;AACJ;AACA,KACIpB,MAAM,EAAEjL,SAAS,CAACsM,MA1BM,EA4BxB;AACJ;AACA,KACIlJ,MAAM,EAAEpD,SAAS,CAACqM,IA/BM,EAiCxB;AACJ;AACA,KACIb,SAAS,EAAExL,SAAS,CAACsM,MApCG,EAsCxB;AACJ;AACA;AACA;AACA,KACIhD,OAAO,EAAEtJ,SAAS,CAACsM,MA3CK,EA6CxB;AACJ;AACA,KACIlB,WAAW,EAAEpL,SAAS,CAACsM,MAhDC,EAkDxB;AACJ;AACA;AACA,KACIpC,SAAS,EAAElK,SAAS,CAACuM,KAtDG,EAwDxB;AACJ;AACA,KACIpE,WAAW,EAAEnI,SAAS,CAACqM,IA3DC,EAH5B,UAiEgBrJ,YAjEhB,GAiE6C,EACzCoI,WAAW,EAAE,CAD4B,EAEzC5B,MAAM,EAAE,KAFiC,EAGzCvB,SAAS,EAAE,KAH8B,EAIzCC,iBAAiB,EAAEhH,SAJsB,EAKzCkG,UAAU,EAAE,KAL6B,EAMzCe,WAAW,EAAE,KAN4B,EAOzCxD,KAAK,EAAE,MAPkC,EAjE7C,UA8EyB6H,eA9EzB,GA8E2C,IA9E3C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport raf from 'raf';\nimport warning from 'warning';\n\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { Nullable } from '../../typings/utility-types';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { ZIndex } from '../ZIndex';\nimport { RenderContainer } from '../RenderContainer';\nimport { FocusEventType, MouseEventType } from '../../typings/event-types';\nimport { isFunction, isNonNullable, isNullable, isRefableElement } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isElement, safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { MobilePopup } from '../MobilePopup';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { isInstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { PopupPin } from './PopupPin';\nimport { Offset, PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './Popup.styles';\n\nconst POPUP_BORDER_DEFAULT_COLOR = 'transparent';\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nexport const PopupPositions = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom right',\n 'bottom center',\n 'bottom left',\n 'left bottom',\n 'left middle',\n 'left top',\n] as const;\nexport const DefaultPosition = PopupPositions[0];\n\nexport type PopupPositionsType = typeof PopupPositions[number];\n\nconst DUMMY_LOCATION: PopupLocation = {\n position: DefaultPosition,\n coordinates: {\n top: -9999,\n left: -9999,\n },\n};\n\nexport interface PopupHandlerProps {\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n onClick?: (event: MouseEventType) => void;\n onFocus?: (event: FocusEventType) => void;\n onBlur?: (event: FocusEventType) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface PopupProps extends CommonProps, PopupHandlerProps {\n anchorElement: React.ReactNode | HTMLElement;\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n hasPin?: boolean;\n hasShadow?: boolean;\n disableAnimations?: boolean;\n margin?: number;\n maxWidth?: number | string;\n opened: boolean;\n pinOffset?: number;\n pinSize?: number;\n popupOffset?: number;\n positions: Readonly<PopupPositionsType[]>;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n ignoreHover?: boolean;\n width?: React.CSSProperties['width'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n withoutMobile?: boolean;\n mobileOnCloseRequest?: () => void;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPositionsType;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\nexport const PopupDataTids = {\n content: 'PopupContent',\n contentInner: 'PopupContentInner',\n popupPin: 'PopupPin__root',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n PopupProps,\n 'popupOffset' | 'hasPin' | 'hasShadow' | 'disableAnimations' | 'useWrapper' | 'ignoreHover' | 'width'\n >\n>;\n\n@responsiveLayout\n@rootNode\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(() => HTMLElement), PropTypes.node]).isRequired,\n\n /**\n * Фон попапа и пина\n */\n backgroundColor: PropTypes.string,\n\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Показывать ли пин\n */\n hasPin: PropTypes.bool,\n\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow: PropTypes.bool,\n\n /**\n * Отступ попапа от элемента\n */\n margin: PropTypes.number,\n\n /**\n * Показан или скрыт попап\n */\n opened: PropTypes.bool,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset: PropTypes.number,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize: PropTypes.number,\n\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset: PropTypes.number,\n\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions: PropTypes.array,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps: DefaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n width: 'auto',\n };\n\n private getProps = createPropsGetter(Popup.defaultProps);\n\n // see #2873 and #2895\n public static readonly defaultRootNode = null;\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupElement: Nullable<Element>;\n private isMobileLayout!: boolean;\n private setRootNode!: TSetRootNode;\n private refForTransition = React.createRef<HTMLDivElement>();\n\n public anchorElement: Nullable<Element> = null;\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\n }\n\n public static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (props.opened) {\n if (!state.location) {\n return { location: DUMMY_LOCATION };\n }\n } else if (state.location) {\n return { location: DUMMY_LOCATION };\n }\n return state;\n }\n\n public componentDidUpdate(prevProps: PopupProps, prevState: PopupState) {\n const hadNoLocation = prevState.location === DUMMY_LOCATION;\n const hasLocation = this.state.location !== DUMMY_LOCATION;\n const wasClosed = prevProps.opened && !this.props.opened;\n\n if (this.isMobileLayout && prevState.location === null && this.state.location === null) {\n this.setState({ location: DUMMY_LOCATION });\n }\n\n if (this.props.opened && hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (wasClosed && !hasLocation && this.props.onClose) {\n this.props.onClose();\n }\n if (this.props.opened) {\n this.delayUpdateLocation();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n this.removeEventListeners(this.anchorElement);\n if (this.layoutEventsToken) {\n this.layoutEventsToken.remove();\n this.layoutEventsToken = null;\n }\n if (this.state.location && this.props.onClose) {\n this.props.onClose();\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMobile() {\n const { opened } = this.props;\n const children = this.renderChildren();\n\n return children ? (\n <MobilePopup opened={opened} withoutRenderContainer onCloseRequest={this.props.mobileOnCloseRequest}>\n {this.content(children)}\n </MobilePopup>\n ) : null;\n }\n\n private renderMain() {\n const { location } = this.state;\n const { anchorElement } = this.props;\n const useWrapper = this.getProps().useWrapper;\n\n let anchor: Nullable<React.ReactNode> = null;\n if (isElement(anchorElement)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n anchor = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n anchor = <span>{anchorElement}</span>;\n }\n\n const anchorWithRef =\n anchor && React.isValidElement(anchor) && isRefableElement(anchor)\n ? React.cloneElement(anchor, {\n ref: (instance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(instance);\n const originalRef = (anchor as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n },\n })\n : null;\n\n // we need to get anchor's DOM node\n // so we either set our own ref on it via cloning\n // or relay on findDOMNode (inside getRootNode)\n // which should be called within updateAnchorElement\n // in the case when the anchor is not refable\n\n const canGetAnchorNode = !!anchorWithRef || isElement(anchorElement);\n\n return (\n <RenderContainer anchor={anchorWithRef || anchor} ref={canGetAnchorNode ? null : this.updateAnchorElement}>\n {this.isMobileLayout && !this.props.withoutMobile\n ? this.renderMobile()\n : location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private updateAnchorElement = (instance: Nullable<React.ReactInstance>) => {\n const childDomNode = isInstanceWithAnchorElement(instance) ? instance.getAnchorElement() : getRootNode(instance);\n const anchorElement = this.anchorElement;\n\n if (childDomNode !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = childDomNode;\n this.addEventListeners(childDomNode);\n }\n };\n\n private addEventListeners(element: Nullable<Element>) {\n if (element && isElement(element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.addEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.addEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private removeEventListeners(element: Nullable<Element>) {\n if (element && isElement(element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(event);\n }\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(event);\n }\n };\n\n private handleClick = (event: MouseEventType) => {\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private handleFocus = (event: FocusEventType) => {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: FocusEventType) => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private calculateWidth = (width: PopupProps['width']) => {\n if (typeof width === 'string' && width.includes('%')) {\n const anchorWidth = Math.floor(getDOMRect(this.anchorElement).width);\n return this.anchorElement ? (anchorWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private content = (children: React.ReactNode) => {\n const { backgroundColor } = this.props;\n const width = this.getProps().width;\n\n return (\n <div className={styles.content(this.theme)} data-tid={PopupDataTids.content} ref={this.refForTransition}>\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={PopupDataTids.contentInner}\n >\n {children}\n </div>\n </div>\n );\n };\n\n private renderContent(location: PopupLocation) {\n const { maxWidth, opened } = this.props;\n const { hasShadow, disableAnimations, ignoreHover } = this.getProps();\n const children = this.renderChildren();\n\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = { ...location.coordinates, maxWidth };\n\n const shouldFallbackShadow = isIE11 || isEdge || isSafari;\n\n return (\n <Transition\n timeout={TRANSITION_TIMEOUT}\n appear={!disableAnimations}\n in={Boolean(opened && children)}\n mountOnEnter\n unmountOnExit\n enter={!disableAnimations}\n exit={!disableAnimations}\n onExited={this.resetLocation}\n nodeRef={this.refForTransition}\n >\n {(state: string) => (\n <CommonWrapper {...this.props} rootNodeRef={this.setRootNode}>\n <ZIndex\n data-tid={'Popup__root'}\n wrapperRef={this.refPopupElement}\n priority={'Popup'}\n className={cx({\n [styles.popup(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow && !shouldFallbackShadow,\n [styles.shadowFallback(this.theme)]: hasShadow && shouldFallbackShadow,\n [styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [styles[`transition-enter-${direction}` as keyof typeof styles](this.theme)]: true,\n [styles.transitionEnter()]: state === 'entering',\n [styles.transitionEnterActive()]: state === 'entered',\n [styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n {this.content(children)}\n {!this.isMobileLayout && this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.state.location !== null && this.setState({ location: null });\n };\n\n private renderChildren() {\n return isFunction(this.props.children) ? this.props.children() : this.props.children;\n }\n\n private refPopupElement = (element: Nullable<Element>) => {\n this.lastPopupElement = element;\n };\n\n private renderPin(positionName: string): React.ReactNode {\n /**\n * Box-shadow does not appear under the pin. Borders are used instead.\n * In non-ie browsers drop-shadow filter is used. It is applying\n * shadow to the pin too.\n */\n const isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;\n const pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;\n\n const { pinSize, backgroundColor, borderColor } = this.props;\n const { hasShadow, hasPin } = this.getProps();\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n hasPin && (\n <PopupPin\n popupElement={this.lastPopupElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n borderWidth={hasShadow ? 1 : 0}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n borderColor={borderColor || pinBorder}\n />\n )\n );\n }\n\n private handleLayoutEvent = () => {\n if (!this.state.location) {\n return;\n }\n this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = raf(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n raf.cancel(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupElement = this.lastPopupElement;\n\n if (!popupElement) {\n return;\n }\n\n const location = this.getLocation(popupElement, this.state.location);\n if (!this.locationEquals(this.state.location, location)) {\n this.setState({ location });\n }\n };\n\n private locationEquals(x: Nullable<PopupLocation>, y: Nullable<PopupLocation>) {\n if (x === y) {\n return true;\n }\n\n if (isNullable(x) || isNullable(y)) {\n return false;\n }\n\n if (!isIE11 && !isEdge) {\n return (\n x.coordinates.left === y.coordinates.left &&\n x.coordinates.top === y.coordinates.top &&\n x.position === y.position\n );\n }\n\n // Для ie/edge обновляем позицию только при разнице минимум в 1. Иначе есть вероятность\n // уйти в бесконечный ререндер\n\n return (\n x.position === y.position &&\n Math.abs(x.coordinates.top - y.coordinates.top) <= 1 &&\n Math.abs(x.coordinates.left - y.coordinates.left) <= 1\n );\n }\n\n private getLocation(popupElement: Element, location?: Nullable<PopupLocation>) {\n const { positions, tryPreserveFirstRenderedPosition } = this.props;\n const anchorElement = this.anchorElement;\n\n warning(anchorElement && isElement(anchorElement), 'Anchor element is not defined or not instance of Element');\n\n if (!(anchorElement && isElement(anchorElement))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPositionsType;\n let coordinates: Offset;\n\n if (location && location !== DUMMY_LOCATION && location.position) {\n position = location.position;\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);\n const canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);\n\n if (\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0])\n ) {\n // сохраняем текущую позицию\n return { coordinates, position };\n }\n }\n\n for (position of positions) {\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect)) {\n return { coordinates, position };\n }\n }\n\n position = positions[0];\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n return { coordinates, position };\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.getProps().hasPin || /center|middle/.test(position.align)) {\n return 0;\n }\n\n const anchorSize = /top|bottom/.test(position.direction) ? anchorRect.width : anchorRect.height;\n\n const { pinSize } = this.props;\n\n return Math.max(\n 0,\n this.getPinOffset(position.align) + (pinSize || parseInt(this.theme.popupPinSize)) - anchorSize / 2,\n );\n }\n\n private getCoordinates(anchorRect: Rect, popupRect: Rect, positionName: string) {\n const { margin: marginFromProps } = this.props;\n const margin =\n isNonNullable(marginFromProps) && !isNaN(marginFromProps)\n ? marginFromProps\n : parseInt(this.theme.popupMargin) || 0;\n const position = PopupHelper.getPositionObject(positionName);\n const popupOffset = this.getProps().popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n switch (position.direction) {\n case 'top':\n return {\n top: anchorRect.top - popupRect.height - margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'bottom':\n return {\n top: anchorRect.top + anchorRect.height + margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'left':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left - popupRect.width - margin,\n };\n case 'right':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left + anchorRect.width + margin,\n };\n default:\n throw new Error(`Unexpected direction '${position.direction}'`);\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n\n switch (align) {\n case 'top':\n case 'bottom':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetY);\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'top':\n return anchorRect.top - popupOffset;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["Popup.tsx"],"names":["React","PropTypes","Transition","raf","warning","getDOMRect","LayoutEvents","ZIndex","RenderContainer","isFunction","isNonNullable","isNullable","isRefableElement","isIE11","isEdge","isSafari","ThemeContext","isElement","safePropTypesInstanceOf","isTestEnv","CommonWrapper","cx","responsiveLayout","MobilePopup","getRootNode","rootNode","callChildRef","isInstanceWithAnchorElement","createPropsGetter","PopupPin","PopupHelper","styles","POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","PopupPositions","DefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","PopupDataTids","content","contentInner","popupPin","Popup","getProps","defaultProps","state","location","props","opened","locationUpdateId","refForTransition","createRef","anchorElement","updateAnchorElement","instance","childDomNode","getAnchorElement","removeEventListeners","addEventListeners","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","anchorWidth","Math","floor","parseFloat","children","backgroundColor","theme","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","element","lastPopupElement","handleLayoutEvent","updateLocation","popupElement","getLocation","onPositionChange","locationEquals","componentDidMount","layoutEventsToken","addListener","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","isMobileLayout","onOpen","onClose","delayUpdateLocation","componentWillUnmount","remove","render","renderMain","renderMobile","renderChildren","mobileOnCloseRequest","useWrapper","anchor","isValidElement","anchorWithRef","cloneElement","ref","originalRef","canGetAnchorNode","withoutMobile","renderContent","addEventListener","removeEventListener","maxWidth","hasShadow","disableAnimations","ignoreHover","getPositionObject","direction","rootStyle","shouldFallbackShadow","Boolean","setRootNode","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","cancel","x","y","abs","positions","tryPreserveFirstRenderedPosition","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","propTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultRootNode"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport raf from 'raf';\nimport warning from 'warning';\n\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\nimport { Nullable } from '../../typings/utility-types';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { ZIndex } from '../ZIndex';\nimport { RenderContainer } from '../RenderContainer';\nimport { FocusEventType, MouseEventType } from '../../typings/event-types';\nimport { isFunction, isNonNullable, isNullable, isRefableElement } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isElement, safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { MobilePopup } from '../MobilePopup';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { isInstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { PopupPin } from './PopupPin';\nimport { Offset, PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './Popup.styles';\n\nconst POPUP_BORDER_DEFAULT_COLOR = 'transparent';\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nexport const PopupPositions = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom right',\n 'bottom center',\n 'bottom left',\n 'left bottom',\n 'left middle',\n 'left top',\n] as const;\nexport const DefaultPosition = PopupPositions[0];\n\nexport type PopupPositionsType = typeof PopupPositions[number];\n\nexport const DUMMY_LOCATION: PopupLocation = {\n position: DefaultPosition,\n coordinates: {\n top: -9999,\n left: -9999,\n },\n};\n\nexport interface PopupHandlerProps {\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n onClick?: (event: MouseEventType) => void;\n onFocus?: (event: FocusEventType) => void;\n onBlur?: (event: FocusEventType) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface PopupProps extends CommonProps, PopupHandlerProps {\n anchorElement: React.ReactNode | HTMLElement;\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n hasPin?: boolean;\n hasShadow?: boolean;\n disableAnimations?: boolean;\n margin?: number;\n maxWidth?: number | string;\n opened: boolean;\n pinOffset?: number;\n pinSize?: number;\n popupOffset?: number;\n positions: Readonly<PopupPositionsType[]>;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n ignoreHover?: boolean;\n width?: React.CSSProperties['width'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n withoutMobile?: boolean;\n mobileOnCloseRequest?: () => void;\n /**\n * Возвращает текущую позицию попапа\n */\n onPositionChange?: (pos: PopupPositionsType) => void;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPositionsType;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\nexport const PopupDataTids = {\n content: 'PopupContent',\n contentInner: 'PopupContentInner',\n popupPin: 'PopupPin__root',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n PopupProps,\n 'popupOffset' | 'hasPin' | 'hasShadow' | 'disableAnimations' | 'useWrapper' | 'ignoreHover' | 'width'\n >\n>;\n\n@responsiveLayout\n@rootNode\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(() => HTMLElement), PropTypes.node]).isRequired,\n\n /**\n * Фон попапа и пина\n */\n backgroundColor: PropTypes.string,\n\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Показывать ли пин\n */\n hasPin: PropTypes.bool,\n\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow: PropTypes.bool,\n\n /**\n * Отступ попапа от элемента\n */\n margin: PropTypes.number,\n\n /**\n * Показан или скрыт попап\n */\n opened: PropTypes.bool,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset: PropTypes.number,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize: PropTypes.number,\n\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset: PropTypes.number,\n\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions: PropTypes.array,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps: DefaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n width: 'auto',\n };\n\n private getProps = createPropsGetter(Popup.defaultProps);\n\n // see #2873 and #2895\n public static readonly defaultRootNode = null;\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupElement: Nullable<Element>;\n private isMobileLayout!: boolean;\n private setRootNode!: TSetRootNode;\n private refForTransition = React.createRef<HTMLDivElement>();\n\n public anchorElement: Nullable<Element> = null;\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\n }\n\n public static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (props.opened) {\n if (!state.location) {\n return { location: DUMMY_LOCATION };\n }\n } else if (state.location) {\n return { location: DUMMY_LOCATION };\n }\n return state;\n }\n\n public componentDidUpdate(prevProps: PopupProps, prevState: PopupState) {\n const hadNoLocation = prevState.location === DUMMY_LOCATION;\n const hasLocation = this.state.location !== DUMMY_LOCATION;\n const wasClosed = prevProps.opened && !this.props.opened;\n\n if (this.isMobileLayout && prevState.location === null && this.state.location === null) {\n this.setState({ location: DUMMY_LOCATION });\n }\n\n if (this.props.opened && hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (wasClosed && !hasLocation && this.props.onClose) {\n this.props.onClose();\n }\n if (this.props.opened) {\n this.delayUpdateLocation();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n this.removeEventListeners(this.anchorElement);\n if (this.layoutEventsToken) {\n this.layoutEventsToken.remove();\n this.layoutEventsToken = null;\n }\n if (this.state.location && this.props.onClose) {\n this.props.onClose();\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMobile() {\n const { opened } = this.props;\n const children = this.renderChildren();\n\n return children ? (\n <MobilePopup opened={opened} withoutRenderContainer onCloseRequest={this.props.mobileOnCloseRequest}>\n {this.content(children)}\n </MobilePopup>\n ) : null;\n }\n\n private renderMain() {\n const { location } = this.state;\n const { anchorElement } = this.props;\n const useWrapper = this.getProps().useWrapper;\n\n let anchor: Nullable<React.ReactNode> = null;\n if (isElement(anchorElement)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n anchor = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n anchor = <span>{anchorElement}</span>;\n }\n\n const anchorWithRef =\n anchor && React.isValidElement(anchor) && isRefableElement(anchor)\n ? React.cloneElement(anchor, {\n ref: (instance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(instance);\n const originalRef = (anchor as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n },\n })\n : null;\n\n // we need to get anchor's DOM node\n // so we either set our own ref on it via cloning\n // or relay on findDOMNode (inside getRootNode)\n // which should be called within updateAnchorElement\n // in the case when the anchor is not refable\n\n const canGetAnchorNode = !!anchorWithRef || isElement(anchorElement);\n\n return (\n <RenderContainer anchor={anchorWithRef || anchor} ref={canGetAnchorNode ? null : this.updateAnchorElement}>\n {this.isMobileLayout && !this.props.withoutMobile\n ? this.renderMobile()\n : location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private updateAnchorElement = (instance: Nullable<React.ReactInstance>) => {\n const childDomNode = isInstanceWithAnchorElement(instance) ? instance.getAnchorElement() : getRootNode(instance);\n const anchorElement = this.anchorElement;\n\n if (childDomNode !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = childDomNode;\n this.addEventListeners(childDomNode);\n }\n };\n\n private addEventListeners(element: Nullable<Element>) {\n if (element && isElement(element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.addEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.addEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private removeEventListeners(element: Nullable<Element>) {\n if (element && isElement(element)) {\n // @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n // @ts-expect-error: See the comment above\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n // @ts-expect-error: See the comment above\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(event);\n }\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(event);\n }\n };\n\n private handleClick = (event: MouseEventType) => {\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private handleFocus = (event: FocusEventType) => {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: FocusEventType) => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private calculateWidth = (width: PopupProps['width']) => {\n if (typeof width === 'string' && width.includes('%')) {\n const anchorWidth = Math.floor(getDOMRect(this.anchorElement).width);\n return this.anchorElement ? (anchorWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private content = (children: React.ReactNode) => {\n const { backgroundColor } = this.props;\n const width = this.getProps().width;\n\n return (\n <div className={styles.content(this.theme)} data-tid={PopupDataTids.content} ref={this.refForTransition}>\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={PopupDataTids.contentInner}\n >\n {children}\n </div>\n </div>\n );\n };\n\n private renderContent(location: PopupLocation) {\n const { maxWidth, opened } = this.props;\n const { hasShadow, disableAnimations, ignoreHover } = this.getProps();\n const children = this.renderChildren();\n\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = { ...location.coordinates, maxWidth };\n\n const shouldFallbackShadow = isIE11 || isEdge || isSafari;\n\n return (\n <Transition\n timeout={TRANSITION_TIMEOUT}\n appear={!disableAnimations}\n in={Boolean(opened && children)}\n mountOnEnter\n unmountOnExit\n enter={!disableAnimations}\n exit={!disableAnimations}\n onExited={this.resetLocation}\n nodeRef={this.refForTransition}\n >\n {(state: string) => (\n <CommonWrapper {...this.props} rootNodeRef={this.setRootNode}>\n <ZIndex\n data-tid={'Popup__root'}\n wrapperRef={this.refPopupElement}\n priority={'Popup'}\n className={cx({\n [styles.popup(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow && !shouldFallbackShadow,\n [styles.shadowFallback(this.theme)]: hasShadow && shouldFallbackShadow,\n [styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [styles[`transition-enter-${direction}` as keyof typeof styles](this.theme)]: true,\n [styles.transitionEnter()]: state === 'entering',\n [styles.transitionEnterActive()]: state === 'entered',\n [styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n {this.content(children)}\n {!this.isMobileLayout && this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.state.location !== null && this.setState({ location: null });\n };\n\n private renderChildren() {\n return isFunction(this.props.children) ? this.props.children() : this.props.children;\n }\n\n private refPopupElement = (element: Nullable<Element>) => {\n this.lastPopupElement = element;\n };\n\n private renderPin(positionName: string): React.ReactNode {\n /**\n * Box-shadow does not appear under the pin. Borders are used instead.\n * In non-ie browsers drop-shadow filter is used. It is applying\n * shadow to the pin too.\n */\n const isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;\n const pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;\n\n const { pinSize, backgroundColor, borderColor } = this.props;\n const { hasShadow, hasPin } = this.getProps();\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n hasPin && (\n <PopupPin\n popupElement={this.lastPopupElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n borderWidth={hasShadow ? 1 : 0}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n borderColor={borderColor || pinBorder}\n />\n )\n );\n }\n\n private handleLayoutEvent = () => {\n if (!this.state.location) {\n return;\n }\n this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = raf(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n raf.cancel(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupElement = this.lastPopupElement;\n\n if (!popupElement) {\n return;\n }\n\n const location = this.getLocation(popupElement, this.state.location);\n if (location) {\n this.props.onPositionChange?.(location?.position);\n }\n\n if (!this.locationEquals(this.state.location, location)) {\n this.setState({ location });\n }\n };\n\n private locationEquals(x: Nullable<PopupLocation>, y: Nullable<PopupLocation>) {\n if (x === y) {\n return true;\n }\n\n if (isNullable(x) || isNullable(y)) {\n return false;\n }\n\n if (!isIE11 && !isEdge) {\n return (\n x.coordinates.left === y.coordinates.left &&\n x.coordinates.top === y.coordinates.top &&\n x.position === y.position\n );\n }\n\n // Для ie/edge обновляем позицию только при разнице минимум в 1. Иначе есть вероятность\n // уйти в бесконечный ререндер\n\n return (\n x.position === y.position &&\n Math.abs(x.coordinates.top - y.coordinates.top) <= 1 &&\n Math.abs(x.coordinates.left - y.coordinates.left) <= 1\n );\n }\n\n private getLocation(popupElement: Element, location?: Nullable<PopupLocation>) {\n const { positions, tryPreserveFirstRenderedPosition } = this.props;\n const anchorElement = this.anchorElement;\n\n warning(anchorElement && isElement(anchorElement), 'Anchor element is not defined or not instance of Element');\n\n if (!(anchorElement && isElement(anchorElement))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPositionsType;\n let coordinates: Offset;\n\n if (location && location !== DUMMY_LOCATION && location.position) {\n position = location.position;\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);\n const canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);\n\n if (\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0])\n ) {\n // сохраняем текущую позицию\n return { coordinates, position };\n }\n }\n\n for (position of positions) {\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect)) {\n return { coordinates, position };\n }\n }\n\n position = positions[0];\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n return { coordinates, position };\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.getProps().hasPin || /center|middle/.test(position.align)) {\n return 0;\n }\n\n const anchorSize = /top|bottom/.test(position.direction) ? anchorRect.width : anchorRect.height;\n\n const { pinSize } = this.props;\n\n return Math.max(\n 0,\n this.getPinOffset(position.align) + (pinSize || parseInt(this.theme.popupPinSize)) - anchorSize / 2,\n );\n }\n\n private getCoordinates(anchorRect: Rect, popupRect: Rect, positionName: string) {\n const { margin: marginFromProps } = this.props;\n const margin =\n isNonNullable(marginFromProps) && !isNaN(marginFromProps)\n ? marginFromProps\n : parseInt(this.theme.popupMargin) || 0;\n const position = PopupHelper.getPositionObject(positionName);\n const popupOffset = this.getProps().popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n switch (position.direction) {\n case 'top':\n return {\n top: anchorRect.top - popupRect.height - margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'bottom':\n return {\n top: anchorRect.top + anchorRect.height + margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'left':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left - popupRect.width - margin,\n };\n case 'right':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left + anchorRect.width + margin,\n };\n default:\n throw new Error(`Unexpected direction '${position.direction}'`);\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n\n switch (align) {\n case 'top':\n case 'bottom':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetY);\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'top':\n return anchorRect.top - popupOffset;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
@@ -6,6 +6,7 @@ import { CommonProps } from '../CommonWrapper';
6
6
  export declare const PopupPositions: readonly ["top left", "top center", "top right", "right top", "right middle", "right bottom", "bottom right", "bottom center", "bottom left", "left bottom", "left middle", "left top"];
7
7
  export declare const DefaultPosition: "top left";
8
8
  export declare type PopupPositionsType = typeof PopupPositions[number];
9
+ export declare const DUMMY_LOCATION: PopupLocation;
9
10
  export interface PopupHandlerProps {
10
11
  onMouseEnter?: (event: MouseEventType) => void;
11
12
  onMouseLeave?: (event: MouseEventType) => void;
@@ -48,6 +49,10 @@ export interface PopupProps extends CommonProps, PopupHandlerProps {
48
49
  tryPreserveFirstRenderedPosition?: boolean;
49
50
  withoutMobile?: boolean;
50
51
  mobileOnCloseRequest?: () => void;
52
+ /**
53
+ * Возвращает текущую позицию попапа
54
+ */
55
+ onPositionChange?: (pos: PopupPositionsType) => void;
51
56
  }
52
57
  interface PopupLocation {
53
58
  coordinates: {