@skbkontur/react-ui 4.25.2 → 4.26.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 (67) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +41 -13
  3. package/cjs/components/Autocomplete/Autocomplete.md +76 -3
  4. package/cjs/components/Button/Button.md +38 -11
  5. package/cjs/components/Calendar/Calendar.md +40 -0
  6. package/cjs/components/DropdownMenu/DropdownMenu.md +39 -0
  7. package/cjs/components/FileUploader/FileUploader.d.ts +2 -0
  8. package/cjs/components/FileUploader/FileUploader.js +32 -9
  9. package/cjs/components/FileUploader/FileUploader.js.map +1 -1
  10. package/cjs/components/FileUploader/FileUploader.md +29 -0
  11. package/cjs/components/ScrollContainer/ScrollContainer.d.ts +1 -0
  12. package/cjs/components/ScrollContainer/ScrollContainer.js +6 -0
  13. package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
  14. package/cjs/hooks/useDrop.d.ts +1 -1
  15. package/cjs/hooks/useDrop.js.map +1 -1
  16. package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.d.ts +5 -2
  17. package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js +16 -3
  18. package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js.map +1 -1
  19. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +1 -0
  20. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js +4 -2
  21. package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js.map +1 -1
  22. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +1 -0
  23. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js +3 -2
  24. package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
  25. package/cjs/internal/RenderContainer/RenderContainer.d.ts +2 -0
  26. package/cjs/internal/RenderContainer/RenderContainer.js +6 -3
  27. package/cjs/internal/RenderContainer/RenderContainer.js.map +1 -1
  28. package/cjs/internal/RenderContainer/RenderInnerContainer.js +3 -2
  29. package/cjs/internal/RenderContainer/RenderInnerContainer.js.map +1 -1
  30. package/cjs/internal/ZIndex/ZIndex.d.ts +7 -3
  31. package/cjs/internal/ZIndex/ZIndex.js +41 -3
  32. package/cjs/internal/ZIndex/ZIndex.js.map +1 -1
  33. package/cjs/lib/listenFocusOutside.js +4 -2
  34. package/cjs/lib/listenFocusOutside.js.map +1 -1
  35. package/components/Autocomplete/Autocomplete.md +76 -3
  36. package/components/Button/Button.md +38 -11
  37. package/components/Calendar/Calendar.md +40 -0
  38. package/components/DropdownMenu/DropdownMenu.md +39 -0
  39. package/components/FileUploader/FileUploader/FileUploader.js +30 -8
  40. package/components/FileUploader/FileUploader/FileUploader.js.map +1 -1
  41. package/components/FileUploader/FileUploader.d.ts +2 -0
  42. package/components/FileUploader/FileUploader.md +29 -0
  43. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +5 -0
  44. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
  45. package/components/ScrollContainer/ScrollContainer.d.ts +1 -0
  46. package/hooks/useDrop/useDrop.js.map +1 -1
  47. package/hooks/useDrop.d.ts +1 -1
  48. package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js +12 -3
  49. package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js.map +1 -1
  50. package/internal/FileUploaderControl/FileUploaderControlProvider.d.ts +5 -2
  51. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js +4 -2
  52. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js.map +1 -1
  53. package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +1 -0
  54. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js +4 -2
  55. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
  56. package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +1 -0
  57. package/internal/RenderContainer/RenderContainer/RenderContainer.js +3 -1
  58. package/internal/RenderContainer/RenderContainer/RenderContainer.js.map +1 -1
  59. package/internal/RenderContainer/RenderContainer.d.ts +2 -0
  60. package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js +5 -4
  61. package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js.map +1 -1
  62. package/internal/ZIndex/ZIndex/ZIndex.js +55 -7
  63. package/internal/ZIndex/ZIndex/ZIndex.js.map +1 -1
  64. package/internal/ZIndex/ZIndex.d.ts +7 -3
  65. package/lib/listenFocusOutside/listenFocusOutside.js +3 -2
  66. package/lib/listenFocusOutside/listenFocusOutside.js.map +1 -1
  67. package/package.json +2 -2
@@ -15,12 +15,13 @@ var _FileUploaderFileList = require("./FileUploaderFileList.styles");
15
15
 
16
16
 
17
17
 
18
+
18
19
  var FileUploaderFileDataTids = {
19
20
  fileList: 'FileUploader__fileList' };exports.FileUploaderFileDataTids = FileUploaderFileDataTids;
20
21
 
21
22
 
22
23
  var FileUploaderFileList = function FileUploaderFileList(props) {
23
- var renderFile = props.renderFile,size = props.size;
24
+ var renderFile = props.renderFile,size = props.size,onRemove = props.onRemove;
24
25
  var _useContext = (0, _react.useContext)(_FileUploaderControlContext.FileUploaderControlContext),files = _useContext.files;
25
26
  var theme = (0, _react.useContext)(_ThemeContext.ThemeContext);
26
27
 
@@ -35,7 +36,7 @@ var FileUploaderFileList = function FileUploaderFileList(props) {
35
36
  files.map(function (file) {return /*#__PURE__*/(
36
37
  _react.default.createElement("div", { key: file.id, className: (0, _Emotion.cx)(_FileUploaderFileList.jsStyles.fileWrapper(theme), fileWrapperClass) }, /*#__PURE__*/
37
38
  _react.default.createElement("div", { className: _FileUploaderFileList.jsStyles.file() },
38
- renderFile(file, /*#__PURE__*/_react.default.createElement(_FileUploaderFile.FileUploaderFile, { file: file, showSize: true, multiple: true, size: size })))));})));
39
+ renderFile(file, /*#__PURE__*/_react.default.createElement(_FileUploaderFile.FileUploaderFile, { file: file, showSize: true, multiple: true, size: size, onRemove: onRemove })))));})));
39
40
 
40
41
 
41
42
 
@@ -1 +1 @@
1
- {"version":3,"sources":["FileUploaderFileList.tsx"],"names":["FileUploaderFileDataTids","fileList","FileUploaderFileList","props","renderFile","size","FileUploaderControlContext","files","theme","ThemeContext","fileWrapperClass","small","jsStyles","fileWrapperSmall","medium","fileWrapperMedium","large","fileWrapperLarge","map","file","id","fileWrapper","__KONTUR_REACT_UI__","displayName"],"mappings":"+MAAA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;;;;AAOO,IAAMA,wBAAwB,GAAG;AACtCC,EAAAA,QAAQ,EAAE,wBAD4B,EAAjC,C;;;AAIA,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,CAACC,KAAD,EAAsC;AACxE,MAAQC,UAAR,GAA6BD,KAA7B,CAAQC,UAAR,CAAoBC,IAApB,GAA6BF,KAA7B,CAAoBE,IAApB;AACA,oBAAkB,uBAAWC,sDAAX,CAAlB,CAAQC,KAAR,eAAQA,KAAR;AACA,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;;AAEA,MAAMC,gBAAgB,GAAG,8CAAoBL,IAApB,EAA0B;AACjDM,IAAAA,KAAK,EAAEC,+BAASC,gBAAT,CAA0BL,KAA1B,CAD0C;AAEjDM,IAAAA,MAAM,EAAEF,+BAASG,iBAAT,CAA2BP,KAA3B,CAFyC;AAGjDQ,IAAAA,KAAK,EAAEJ,+BAASK,gBAAT,CAA0BT,KAA1B,CAH0C,EAA1B,CAAzB;;;AAMA;AACE,0CAAK,YAAUR,wBAAwB,CAACC,QAAxC;AACGM,IAAAA,KAAK,CAACW,GAAN,CAAU,UAACC,IAAD;AACT,8CAAK,GAAG,EAAEA,IAAI,CAACC,EAAf,EAAmB,SAAS,EAAE,iBAAGR,+BAASS,WAAT,CAAqBb,KAArB,CAAH,EAAgCE,gBAAhC,CAA9B;AACE,8CAAK,SAAS,EAAEE,+BAASO,IAAT,EAAhB;AACGf,QAAAA,UAAU,CAACe,IAAD,eAAO,6BAAC,kCAAD,IAAkB,IAAI,EAAEA,IAAxB,EAA8B,QAAQ,MAAtC,EAAuC,QAAQ,MAA/C,EAAgD,IAAI,EAAEd,IAAtD,GAAP,CADb,CADF,CADS,GAAV,CADH,CADF;;;;;;AAWD,CAtBM,C;;AAwBPH,oBAAoB,CAACoB,mBAArB,GAA2C,sBAA3C;AACApB,oBAAoB,CAACqB,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 { cx } from '../../../lib/theming/Emotion';\nimport { useFileUploaderSize } from '../hooks/useFileUploaderSize';\nimport { SizeProp } from '../../../lib/types/props';\n\nimport { jsStyles } from './FileUploaderFileList.styles';\n\ninterface FileUploaderFileListProps {\n renderFile: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;\n size: SizeProp;\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.__KONTUR_REACT_UI__ = 'FileUploaderFileList';\nFileUploaderFileList.displayName = 'FileUploaderFileList';\n"]}
1
+ {"version":3,"sources":["FileUploaderFileList.tsx"],"names":["FileUploaderFileDataTids","fileList","FileUploaderFileList","props","renderFile","size","onRemove","FileUploaderControlContext","files","theme","ThemeContext","fileWrapperClass","small","jsStyles","fileWrapperSmall","medium","fileWrapperMedium","large","fileWrapperLarge","map","file","id","fileWrapper","__KONTUR_REACT_UI__","displayName"],"mappings":"+MAAA;;AAEA;AACA;AACA;;AAEA;AACA;;;AAGA;;;;;;;;AAQO,IAAMA,wBAAwB,GAAG;AACtCC,EAAAA,QAAQ,EAAE,wBAD4B,EAAjC,C;;;AAIA,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,CAACC,KAAD,EAAsC;AACxE,MAAQC,UAAR,GAAuCD,KAAvC,CAAQC,UAAR,CAAoBC,IAApB,GAAuCF,KAAvC,CAAoBE,IAApB,CAA0BC,QAA1B,GAAuCH,KAAvC,CAA0BG,QAA1B;AACA,oBAAkB,uBAAWC,sDAAX,CAAlB,CAAQC,KAAR,eAAQA,KAAR;AACA,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;;AAEA,MAAMC,gBAAgB,GAAG,8CAAoBN,IAApB,EAA0B;AACjDO,IAAAA,KAAK,EAAEC,+BAASC,gBAAT,CAA0BL,KAA1B,CAD0C;AAEjDM,IAAAA,MAAM,EAAEF,+BAASG,iBAAT,CAA2BP,KAA3B,CAFyC;AAGjDQ,IAAAA,KAAK,EAAEJ,+BAASK,gBAAT,CAA0BT,KAA1B,CAH0C,EAA1B,CAAzB;;;AAMA;AACE,0CAAK,YAAUT,wBAAwB,CAACC,QAAxC;AACGO,IAAAA,KAAK,CAACW,GAAN,CAAU,UAACC,IAAD;AACT,8CAAK,GAAG,EAAEA,IAAI,CAACC,EAAf,EAAmB,SAAS,EAAE,iBAAGR,+BAASS,WAAT,CAAqBb,KAArB,CAAH,EAAgCE,gBAAhC,CAA9B;AACE,8CAAK,SAAS,EAAEE,+BAASO,IAAT,EAAhB;AACGhB,QAAAA,UAAU,CAACgB,IAAD,eAAO,6BAAC,kCAAD,IAAkB,IAAI,EAAEA,IAAxB,EAA8B,QAAQ,MAAtC,EAAuC,QAAQ,MAA/C,EAAgD,IAAI,EAAEf,IAAtD,EAA4D,QAAQ,EAAEC,QAAtE,GAAP,CADb,CADF,CADS,GAAV,CADH,CADF;;;;;;AAWD,CAtBM,C;;AAwBPJ,oBAAoB,CAACqB,mBAArB,GAA2C,sBAA3C;AACArB,oBAAoB,CAACsB,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 { cx } from '../../../lib/theming/Emotion';\nimport { useFileUploaderSize } from '../hooks/useFileUploaderSize';\nimport { SizeProp } from '../../../lib/types/props';\n\nimport { jsStyles } from './FileUploaderFileList.styles';\n\ninterface FileUploaderFileListProps {\n renderFile: (file: FileUploaderAttachedFile, fileNode: React.ReactElement) => React.ReactNode;\n size: SizeProp;\n onRemove(fileId: string): void;\n}\n\nexport const FileUploaderFileDataTids = {\n fileList: 'FileUploader__fileList',\n} as const;\n\nexport const FileUploaderFileList = (props: FileUploaderFileListProps) => {\n const { renderFile, size, onRemove } = 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} onRemove={onRemove} />)}\n </div>\n </div>\n ))}\n </div>\n );\n};\n\nFileUploaderFileList.__KONTUR_REACT_UI__ = 'FileUploaderFileList';\nFileUploaderFileList.displayName = 'FileUploaderFileList';\n"]}
@@ -1,5 +1,7 @@
1
1
  import React from 'react';
2
2
  import { RenderContainerProps } from './RenderContainerTypes';
3
+ export declare const PORTAL_INLET_ATTR = "data-render-container-id";
4
+ export declare const PORTAL_OUTLET_ATTR = "data-rendered-container-id";
3
5
  export declare class RenderContainer extends React.Component<RenderContainerProps> {
4
6
  static __KONTUR_REACT_UI__: string;
5
7
  static displayName: string;
@@ -1,4 +1,4 @@
1
- "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;exports.__esModule = true;exports.RenderContainer = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _react = _interopRequireDefault(require("react"));
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;exports.__esModule = true;exports.RenderContainer = exports.PORTAL_OUTLET_ATTR = exports.PORTAL_INLET_ATTR = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _react = _interopRequireDefault(require("react"));
2
2
  var _globalObject = require("@skbkontur/global-object");
3
3
 
4
4
 
@@ -6,9 +6,12 @@ var _utils = require("../../lib/utils");
6
6
  var _Upgrades = require("../../lib/Upgrades");
7
7
  var _callChildRef = require("../../lib/callChildRef/callChildRef");
8
8
 
9
- var _RenderInnerContainer = require("./RenderInnerContainer");var
9
+ var _RenderInnerContainer = require("./RenderInnerContainer");
10
10
 
11
11
 
12
+ var PORTAL_INLET_ATTR = 'data-render-container-id';exports.PORTAL_INLET_ATTR = PORTAL_INLET_ATTR;
13
+ var PORTAL_OUTLET_ATTR = 'data-rendered-container-id';exports.PORTAL_OUTLET_ATTR = PORTAL_OUTLET_ATTR;var
14
+
12
15
  RenderContainer = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default)(RenderContainer, _React$Component);function RenderContainer() {var _this;for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];}_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;_this.
13
16
 
14
17
 
@@ -44,7 +47,7 @@ RenderContainer = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.
44
47
  var domContainer = (_globalObject$documen = _globalObject.globalObject.document) == null ? void 0 : _globalObject$documen.createElement('div');
45
48
  if (domContainer) {
46
49
  domContainer.setAttribute('class', _Upgrades.Upgrade.getSpecificityClassName());
47
- domContainer.setAttribute('data-rendered-container-id', "" + this.rootId);
50
+ domContainer.setAttribute(PORTAL_OUTLET_ATTR, "" + this.rootId);
48
51
  this.domContainer = domContainer;
49
52
  }
50
53
  };_proto.
@@ -1 +1 @@
1
- {"version":3,"sources":["RenderContainer.tsx"],"names":["RenderContainer","domContainer","rootId","getRootId","shouldComponentUpdate","nextProps","props","children","mountContainer","unmountContainer","componentWillUnmount","destroyContainer","render","createContainer","globalObject","document","createElement","setAttribute","Upgrade","getSpecificityClassName","parentNode","body","appendChild","containerRef","ReactTesting","addRenderContainer","removeChild","removeRenderContainer","React","Component","__KONTUR_REACT_UI__","displayName"],"mappings":"qVAAA;AACA;;;AAGA;AACA;AACA;;AAEA,8D;;;AAGaA,e;;;;;AAKHC,IAAAA,Y,GAAsC,I;;AAE7BC,IAAAA,M,GAAiBF,eAAe,CAACG,SAAhB,E;;AAE3BC,EAAAA,qB,GAAP,+BAA6BC,SAA7B,EAA8D;AAC5D,QAAI,CAAC,KAAKC,KAAL,CAAWC,QAAZ,IAAwBF,SAAS,CAACE,QAAtC,EAAgD;AAC9C,WAAKC,cAAL;AACD;AACD,QAAI,KAAKF,KAAL,CAAWC,QAAX,IAAuB,CAACF,SAAS,CAACE,QAAtC,EAAgD;AAC9C,WAAKE,gBAAL;AACD;AACD,WAAO,IAAP;AACD,G;;AAEMC,EAAAA,oB,GAAP,gCAA8B;AAC5B,SAAKC,gBAAL;AACD,G;;AAEMC,EAAAA,M,GAAP,kBAAgB;AACd,QAAI,KAAKN,KAAL,CAAWC,QAAf,EAAyB;AACvB,WAAKC,cAAL;AACD;;AAED,wBAAO,6BAAC,0CAAD,6BAA0B,KAAKF,KAA/B,IAAsC,YAAY,EAAE,KAAKL,YAAzD,EAAuE,MAAM,EAAE,KAAKC,MAApF,IAAP;AACD,G;;AAEOW,EAAAA,e,GAAR,2BAA0B;AACxB,QAAMZ,YAAY,4BAAGa,2BAAaC,QAAhB,qBAAG,sBAAuBC,aAAvB,CAAqC,KAArC,CAArB;AACA,QAAIf,YAAJ,EAAkB;AAChBA,MAAAA,YAAY,CAACgB,YAAb,CAA0B,OAA1B,EAAmCC,kBAAQC,uBAAR,EAAnC;AACAlB,MAAAA,YAAY,CAACgB,YAAb,CAA0B,4BAA1B,OAA2D,KAAKf,MAAhE;AACA,WAAKD,YAAL,GAAoBA,YAApB;AACD;AACF,G;;AAEOO,EAAAA,c,GAAR,0BAAyB;AACvB,QAAI,CAAC,KAAKP,YAAV,EAAwB;AACtB,WAAKY,eAAL;AACD;AACD,QAAI,KAAKZ,YAAL,IAAqB,KAAKA,YAAL,CAAkBmB,UAAlB,gCAAiCN,2BAAaC,QAA9C,qBAAiC,uBAAuBM,IAAxD,CAAzB,EAAuF;AACrF,2DAAaN,QAAb,4CAAuBM,IAAvB,CAA4BC,WAA5B,CAAwC,KAAKrB,YAA7C;;AAEA,UAAI,KAAKK,KAAL,CAAWiB,YAAf,EAA6B;AAC3B,wCAAa,KAAKjB,KAAL,CAAWiB,YAAxB,EAAsC,KAAKtB,YAA3C;AACD;AACD,UAAIa,2BAAaU,YAAjB,EAA+B;AAC7BV,mCAAaU,YAAb,CAA0BC,kBAA1B,CAA6C,KAAKvB,MAAlD,EAA0D,IAA1D;AACD;AACF;AACF,G;;AAEOS,EAAAA,gB,GAAR,4BAA2B;AACzB,QAAI,KAAKV,YAAT,EAAuB;AACrB,WAAKQ,gBAAL;AACA,WAAKR,YAAL,GAAoB,IAApB;AACD;AACF,G;;AAEOQ,EAAAA,gB,GAAR,4BAA2B;AACzB,QAAI,KAAKR,YAAL,IAAqB,KAAKA,YAAL,CAAkBmB,UAA3C,EAAuD;AACrD,WAAKnB,YAAL,CAAkBmB,UAAlB,CAA6BM,WAA7B,CAAyC,KAAKzB,YAA9C;;AAEA,UAAI,KAAKK,KAAL,CAAWiB,YAAf,EAA6B;AAC3B,wCAAa,KAAKjB,KAAL,CAAWiB,YAAxB,EAAsC,IAAtC;AACD;;AAED,UAAIT,2BAAaU,YAAjB,EAA+B;AAC7BV,mCAAaU,YAAb,CAA0BG,qBAA1B,CAAgD,KAAKzB,MAArD;AACD;AACF;AACF,G,0BA3EkC0B,eAAMC,S,4CAA9B7B,e,CACG8B,mB,GAAsB,iB,CADzB9B,e,CAEG+B,W,GAAc,iB,CAFjB/B,e,CAIIG,S,GAAY,oBAAM,yBAAN,E","sourcesContent":["import React from 'react';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { getRandomID } from '../../lib/utils';\nimport { Upgrade } from '../../lib/Upgrades';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nimport { RenderInnerContainer } from './RenderInnerContainer';\nimport { RenderContainerProps } from './RenderContainerTypes';\n\nexport class RenderContainer extends React.Component<RenderContainerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderContainer';\n public static displayName = 'RenderContainer';\n\n private static getRootId = () => getRandomID();\n private domContainer: Nullable<HTMLElement> = null;\n\n private readonly rootId: string = RenderContainer.getRootId();\n\n public shouldComponentUpdate(nextProps: RenderContainerProps) {\n if (!this.props.children && nextProps.children) {\n this.mountContainer();\n }\n if (this.props.children && !nextProps.children) {\n this.unmountContainer();\n }\n return true;\n }\n\n public componentWillUnmount() {\n this.destroyContainer();\n }\n\n public render() {\n if (this.props.children) {\n this.mountContainer();\n }\n\n return <RenderInnerContainer {...this.props} domContainer={this.domContainer} rootId={this.rootId} />;\n }\n\n private createContainer() {\n const domContainer = globalObject.document?.createElement('div');\n if (domContainer) {\n domContainer.setAttribute('class', Upgrade.getSpecificityClassName());\n domContainer.setAttribute('data-rendered-container-id', `${this.rootId}`);\n this.domContainer = domContainer;\n }\n }\n\n private mountContainer() {\n if (!this.domContainer) {\n this.createContainer();\n }\n if (this.domContainer && this.domContainer.parentNode !== globalObject.document?.body) {\n globalObject.document?.body.appendChild(this.domContainer);\n\n if (this.props.containerRef) {\n callChildRef(this.props.containerRef, this.domContainer);\n }\n if (globalObject.ReactTesting) {\n globalObject.ReactTesting.addRenderContainer(this.rootId, this);\n }\n }\n }\n\n private destroyContainer() {\n if (this.domContainer) {\n this.unmountContainer();\n this.domContainer = null;\n }\n }\n\n private unmountContainer() {\n if (this.domContainer && this.domContainer.parentNode) {\n this.domContainer.parentNode.removeChild(this.domContainer);\n\n if (this.props.containerRef) {\n callChildRef(this.props.containerRef, null);\n }\n\n if (globalObject.ReactTesting) {\n globalObject.ReactTesting.removeRenderContainer(this.rootId);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["RenderContainer.tsx"],"names":["PORTAL_INLET_ATTR","PORTAL_OUTLET_ATTR","RenderContainer","domContainer","rootId","getRootId","shouldComponentUpdate","nextProps","props","children","mountContainer","unmountContainer","componentWillUnmount","destroyContainer","render","createContainer","globalObject","document","createElement","setAttribute","Upgrade","getSpecificityClassName","parentNode","body","appendChild","containerRef","ReactTesting","addRenderContainer","removeChild","removeRenderContainer","React","Component","__KONTUR_REACT_UI__","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { getRandomID } from '../../lib/utils';\nimport { Upgrade } from '../../lib/Upgrades';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nimport { RenderInnerContainer } from './RenderInnerContainer';\nimport { RenderContainerProps } from './RenderContainerTypes';\n\nexport const PORTAL_INLET_ATTR = 'data-render-container-id';\nexport const PORTAL_OUTLET_ATTR = 'data-rendered-container-id';\n\nexport class RenderContainer extends React.Component<RenderContainerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderContainer';\n public static displayName = 'RenderContainer';\n\n private static getRootId = () => getRandomID();\n private domContainer: Nullable<HTMLElement> = null;\n\n private readonly rootId: string = RenderContainer.getRootId();\n\n public shouldComponentUpdate(nextProps: RenderContainerProps) {\n if (!this.props.children && nextProps.children) {\n this.mountContainer();\n }\n if (this.props.children && !nextProps.children) {\n this.unmountContainer();\n }\n return true;\n }\n\n public componentWillUnmount() {\n this.destroyContainer();\n }\n\n public render() {\n if (this.props.children) {\n this.mountContainer();\n }\n\n return <RenderInnerContainer {...this.props} domContainer={this.domContainer} rootId={this.rootId} />;\n }\n\n private createContainer() {\n const domContainer = globalObject.document?.createElement('div');\n if (domContainer) {\n domContainer.setAttribute('class', Upgrade.getSpecificityClassName());\n domContainer.setAttribute(PORTAL_OUTLET_ATTR, `${this.rootId}`);\n this.domContainer = domContainer;\n }\n }\n\n private mountContainer() {\n if (!this.domContainer) {\n this.createContainer();\n }\n if (this.domContainer && this.domContainer.parentNode !== globalObject.document?.body) {\n globalObject.document?.body.appendChild(this.domContainer);\n\n if (this.props.containerRef) {\n callChildRef(this.props.containerRef, this.domContainer);\n }\n if (globalObject.ReactTesting) {\n globalObject.ReactTesting.addRenderContainer(this.rootId, this);\n }\n }\n }\n\n private destroyContainer() {\n if (this.domContainer) {\n this.unmountContainer();\n this.domContainer = null;\n }\n }\n\n private unmountContainer() {\n if (this.domContainer && this.domContainer.parentNode) {\n this.domContainer.parentNode.removeChild(this.domContainer);\n\n if (this.props.containerRef) {\n callChildRef(this.props.containerRef, null);\n }\n\n if (globalObject.ReactTesting) {\n globalObject.ReactTesting.removeRenderContainer(this.rootId);\n }\n }\n }\n}\n"]}
@@ -7,6 +7,7 @@ var _globalObject = require("@skbkontur/global-object");
7
7
  var _SSRSafe = require("../../lib/SSRSafe");
8
8
 
9
9
 
10
+ var _RenderContainer = require("./RenderContainer");
10
11
 
11
12
 
12
13
 
@@ -33,12 +34,12 @@ var _SSRSafe = require("../../lib/SSRSafe");
33
34
 
34
35
  var SSRPlaceholder = function SSRPlaceholder() {return /*#__PURE__*/_react.default.createElement("script", { "data-id": "ssr-placeholder" });};
35
36
 
36
- var Portal = function Portal(_ref) {var container = _ref.container,rt_rootID = _ref.rt_rootID,children = _ref.children;
37
+ var Portal = function Portal(_ref) {var _ref2;var container = _ref.container,rt_rootID = _ref.rt_rootID,children = _ref.children;
37
38
  // container exists only in browser
38
39
  return /*#__PURE__*/(
39
40
  _react.default.createElement(_react.default.Fragment, null,
40
41
  container ? /*#__PURE__*/_reactDom.default.createPortal(children, container) : /*#__PURE__*/_react.default.createElement(SSRPlaceholder, null),
41
- container ? /*#__PURE__*/_react.default.createElement("noscript", { "data-render-container-id": rt_rootID }) : /*#__PURE__*/_react.default.createElement(SSRPlaceholder, null)));
42
+ container ? /*#__PURE__*/_react.default.createElement("noscript", (_ref2 = {}, _ref2[_RenderContainer.PORTAL_INLET_ATTR] = rt_rootID, _ref2)) : /*#__PURE__*/_react.default.createElement(SSRPlaceholder, null)));
42
43
 
43
44
 
44
45
  };exports.Portal = Portal;var
@@ -1 +1 @@
1
- {"version":3,"sources":["RenderInnerContainer.tsx"],"names":["SSRPlaceholder","Portal","container","rt_rootID","children","ReactDOM","createPortal","RenderInnerContainer","render","props","anchor","domContainer","rootId","inner","React","Component","__KONTUR_REACT_UI__","displayName","propTypes","globalObject","HTMLElement","string","isRequired","node"],"mappings":"yRAAA;AACA;AACA;AACA;;;AAGA;;;;;;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,wBAAM,yCAAQ,WAAQ,iBAAhB,GAAN,EAAvB;;AAEO,IAAMC,MAAM,GAAG,SAATA,MAAS,OAAqD,KAAlDC,SAAkD,QAAlDA,SAAkD,CAAvCC,SAAuC,QAAvCA,SAAuC,CAA5BC,QAA4B,QAA5BA,QAA4B;AACzE;AACA;AACE,iCAAC,cAAD,CAAO,QAAP;AACGF,IAAAA,SAAS,gBAAGG,kBAASC,YAAT,CAAsBF,QAAtB,EAAgCF,SAAhC,CAAH,gBAAgD,6BAAC,cAAD,OAD5D;AAEGA,IAAAA,SAAS,gBAAG,2CAAU,4BAA0BC,SAApC,GAAH,gBAAuD,6BAAC,cAAD,OAFnE,CADF;;;AAMD,CARM,C;;AAUMI,oB;;;;AAIJC,EAAAA,M,GAAP,kBAAgB;AACd,sBAAmD,KAAKC,KAAxD,CAAQC,MAAR,eAAQA,MAAR,CAAgBN,QAAhB,eAAgBA,QAAhB,CAA0BO,YAA1B,eAA0BA,YAA1B,CAAwCC,MAAxC,eAAwCA,MAAxC;AACA,QAAIC,KAAK,GAAGH,MAAZ;;AAEA,QAAIN,QAAJ,EAAc;AACZS,MAAAA,KAAK;AACH,mCAAC,cAAD,CAAO,QAAP;AACGH,MAAAA,MADH;AAEE,mCAAC,MAAD,IAAQ,GAAG,EAAC,YAAZ,EAAyB,SAAS,EAAEE,MAApC,EAA4C,SAAS,EAAED,YAAvD;AACGP,MAAAA,QADH,CAFF,CADF;;;;AAQD;;AAED,WAAOS,KAAP;AACD,G,+BApBuCC,eAAMC,S,sDAAnCR,oB,CACGS,mB,GAAsB,sB,CADzBT,oB,CAEGU,W,GAAc,sB;;;AAqB9BhB,MAAM,CAACiB,SAAP,GAAmB;AACjBhB,EAAAA,SAAS,EAAE,sCAAwBiB,2BAAaC,WAArC,CADM;AAEjBjB,EAAAA,SAAS,EAAEe,mBAAUG,MAAV,CAAiBC,UAFX;AAGjBlB,EAAAA,QAAQ,EAAEc,mBAAUK,IAAV,CAAeD,UAHR,EAAnB;;;AAMArB,MAAM,CAACe,mBAAP,GAA6B,QAA7B;AACAf,MAAM,CAACgB,WAAP,GAAqB,QAArB","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport propTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { safePropTypesInstanceOf } from '../../lib/SSRSafe';\n\nimport { PortalProps, RenderContainerProps } from './RenderContainerTypes';\n\ninterface RenderInnerContainerProps extends RenderContainerProps {\n domContainer: Nullable<HTMLElement>;\n rootId: string;\n}\n\n// Заглушка нужна для корректной гидрации порталов после SSR,\n// которую реакт сам пока не поддерживает.\n// @see https://github.com/facebook/react/issues/13097\n// А также для вставки актуального render-container-id на клиенте.\n//\n// Дело в том, что во время гидрации, структура HTML на сервере\n// и на клиенте должна совпадать, иначе возможны артефакты.\n// Алгоритм там примерно такой. Клиент во время гидрации идет\n// по этим двум деревьям и сравнивает узлы. Элементы разных типов\n// он подменяет на свои. А те, что совпадают, он оставляет как есть\n// вместе со всеми атрибутами, навесив только обработчики событий.\n//\n// Поэтому, для портала, который рендерится только на клиенте,\n// нужно использовать серверную заглушку, чтобы при гидрации\n// он не испортил какой-то другой элемент. Null не подходит,\n// т.к. на сервере он тоже не рендерится.\n// А элемент с render-container-id нужно отрендерить с нуля.\n\nconst SSRPlaceholder = () => <script data-id=\"ssr-placeholder\" />;\n\nexport const Portal = ({ container, rt_rootID, children }: PortalProps) => {\n // container exists only in browser\n return (\n <React.Fragment>\n {container ? ReactDOM.createPortal(children, container) : <SSRPlaceholder />}\n {container ? <noscript data-render-container-id={rt_rootID} /> : <SSRPlaceholder />}\n </React.Fragment>\n );\n};\n\nexport class RenderInnerContainer extends React.Component<RenderInnerContainerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderInnerContainer';\n public static displayName = 'RenderInnerContainer';\n\n public render() {\n const { anchor, children, domContainer, rootId } = this.props;\n let inner = anchor;\n\n if (children) {\n inner = (\n <React.Fragment>\n {anchor}\n <Portal key=\"portal-ref\" rt_rootID={rootId} container={domContainer}>\n {children}\n </Portal>\n </React.Fragment>\n );\n }\n\n return inner;\n }\n}\n\nPortal.propTypes = {\n container: safePropTypesInstanceOf(globalObject.HTMLElement),\n rt_rootID: propTypes.string.isRequired,\n children: propTypes.node.isRequired,\n};\n\nPortal.__KONTUR_REACT_UI__ = 'Portal';\nPortal.displayName = 'Portal';\n"]}
1
+ {"version":3,"sources":["RenderInnerContainer.tsx"],"names":["SSRPlaceholder","Portal","container","rt_rootID","children","ReactDOM","createPortal","PORTAL_INLET_ATTR","RenderInnerContainer","render","props","anchor","domContainer","rootId","inner","React","Component","__KONTUR_REACT_UI__","displayName","propTypes","globalObject","HTMLElement","string","isRequired","node"],"mappings":"yRAAA;AACA;AACA;AACA;;;AAGA;;;AAGA;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,wBAAM,yCAAQ,WAAQ,iBAAhB,GAAN,EAAvB;;AAEO,IAAMC,MAAM,GAAG,SAATA,MAAS,OAAqD,eAAlDC,SAAkD,QAAlDA,SAAkD,CAAvCC,SAAuC,QAAvCA,SAAuC,CAA5BC,QAA4B,QAA5BA,QAA4B;AACzE;AACA;AACE,iCAAC,cAAD,CAAO,QAAP;AACGF,IAAAA,SAAS,gBAAGG,kBAASC,YAAT,CAAsBF,QAAtB,EAAgCF,SAAhC,CAAH,gBAAgD,6BAAC,cAAD,OAD5D;AAEGA,IAAAA,SAAS,gBAAG,4DAAiBK,kCAAjB,IAAqCJ,SAArC,SAAH,gBAA0D,6BAAC,cAAD,OAFtE,CADF;;;AAMD,CARM,C;;AAUMK,oB;;;;AAIJC,EAAAA,M,GAAP,kBAAgB;AACd,sBAAmD,KAAKC,KAAxD,CAAQC,MAAR,eAAQA,MAAR,CAAgBP,QAAhB,eAAgBA,QAAhB,CAA0BQ,YAA1B,eAA0BA,YAA1B,CAAwCC,MAAxC,eAAwCA,MAAxC;AACA,QAAIC,KAAK,GAAGH,MAAZ;;AAEA,QAAIP,QAAJ,EAAc;AACZU,MAAAA,KAAK;AACH,mCAAC,cAAD,CAAO,QAAP;AACGH,MAAAA,MADH;AAEE,mCAAC,MAAD,IAAQ,GAAG,EAAC,YAAZ,EAAyB,SAAS,EAAEE,MAApC,EAA4C,SAAS,EAAED,YAAvD;AACGR,MAAAA,QADH,CAFF,CADF;;;;AAQD;;AAED,WAAOU,KAAP;AACD,G,+BApBuCC,eAAMC,S,sDAAnCR,oB,CACGS,mB,GAAsB,sB,CADzBT,oB,CAEGU,W,GAAc,sB;;;AAqB9BjB,MAAM,CAACkB,SAAP,GAAmB;AACjBjB,EAAAA,SAAS,EAAE,sCAAwBkB,2BAAaC,WAArC,CADM;AAEjBlB,EAAAA,SAAS,EAAEgB,mBAAUG,MAAV,CAAiBC,UAFX;AAGjBnB,EAAAA,QAAQ,EAAEe,mBAAUK,IAAV,CAAeD,UAHR,EAAnB;;;AAMAtB,MAAM,CAACgB,mBAAP,GAA6B,QAA7B;AACAhB,MAAM,CAACiB,WAAP,GAAqB,QAArB","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport propTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { safePropTypesInstanceOf } from '../../lib/SSRSafe';\n\nimport { PortalProps, RenderContainerProps } from './RenderContainerTypes';\nimport { PORTAL_INLET_ATTR } from './RenderContainer';\n\ninterface RenderInnerContainerProps extends RenderContainerProps {\n domContainer: Nullable<HTMLElement>;\n rootId: string;\n}\n\n// Заглушка нужна для корректной гидрации порталов после SSR,\n// которую реакт сам пока не поддерживает.\n// @see https://github.com/facebook/react/issues/13097\n// А также для вставки актуального render-container-id на клиенте.\n//\n// Дело в том, что во время гидрации, структура HTML на сервере\n// и на клиенте должна совпадать, иначе возможны артефакты.\n// Алгоритм там примерно такой. Клиент во время гидрации идет\n// по этим двум деревьям и сравнивает узлы. Элементы разных типов\n// он подменяет на свои. А те, что совпадают, он оставляет как есть\n// вместе со всеми атрибутами, навесив только обработчики событий.\n//\n// Поэтому, для портала, который рендерится только на клиенте,\n// нужно использовать серверную заглушку, чтобы при гидрации\n// он не испортил какой-то другой элемент. Null не подходит,\n// т.к. на сервере он тоже не рендерится.\n// А элемент с render-container-id нужно отрендерить с нуля.\n\nconst SSRPlaceholder = () => <script data-id=\"ssr-placeholder\" />;\n\nexport const Portal = ({ container, rt_rootID, children }: PortalProps) => {\n // container exists only in browser\n return (\n <React.Fragment>\n {container ? ReactDOM.createPortal(children, container) : <SSRPlaceholder />}\n {container ? <noscript {...{ [PORTAL_INLET_ATTR]: rt_rootID }} /> : <SSRPlaceholder />}\n </React.Fragment>\n );\n};\n\nexport class RenderInnerContainer extends React.Component<RenderInnerContainerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderInnerContainer';\n public static displayName = 'RenderInnerContainer';\n\n public render() {\n const { anchor, children, domContainer, rootId } = this.props;\n let inner = anchor;\n\n if (children) {\n inner = (\n <React.Fragment>\n {anchor}\n <Portal key=\"portal-ref\" rt_rootID={rootId} container={domContainer}>\n {children}\n </Portal>\n </React.Fragment>\n );\n }\n\n return inner;\n }\n}\n\nPortal.propTypes = {\n container: safePropTypesInstanceOf(globalObject.HTMLElement),\n rt_rootID: propTypes.string.isRequired,\n children: propTypes.node.isRequired,\n};\n\nPortal.__KONTUR_REACT_UI__ = 'Portal';\nPortal.displayName = 'Portal';\n"]}
@@ -23,19 +23,22 @@ export interface ZIndexProps extends React.HTMLAttributes<HTMLDivElement> {
23
23
  declare type DefaultProps = Required<Pick<ZIndexProps, 'delta' | 'priority' | 'style' | 'applyZIndex' | 'coverChildren' | 'createStackingContext' | 'useWrapper'>>;
24
24
  interface ZIndexState {
25
25
  zIndex: number;
26
+ savedZIndexContext: {
27
+ parentLayerZIndex: number;
28
+ maxZIndex: number;
29
+ } | null;
26
30
  }
27
31
  export declare class ZIndex extends React.Component<ZIndexProps, ZIndexState> {
28
32
  static __KONTUR_REACT_UI__: string;
29
33
  static displayName: string;
30
34
  static defaultProps: DefaultProps;
31
- state: {
32
- zIndex: number;
33
- };
35
+ state: ZIndexState;
34
36
  private getProps;
35
37
  static propTypes: {
36
38
  delta(props: ZIndexProps): Error | undefined;
37
39
  };
38
40
  private setRootNode;
41
+ private zIndexContext;
39
42
  constructor(props: ZIndexProps);
40
43
  componentDidUpdate(prevProps: Readonly<ZIndexProps>): void;
41
44
  componentWillUnmount(): void;
@@ -43,5 +46,6 @@ export declare class ZIndex extends React.Component<ZIndexProps, ZIndexState> {
43
46
  private wrapperRef;
44
47
  private calcZIndex;
45
48
  private increment;
49
+ private tryGetContextByDOM;
46
50
  }
47
51
  export {};
@@ -4,10 +4,15 @@ var _globalObject = require("@skbkontur/global-object");
4
4
  var _callChildRef = require("../../lib/callChildRef/callChildRef");
5
5
  var _rootNode = require("../../lib/rootNode");
6
6
  var _createPropsGetter = require("../../lib/createPropsGetter");
7
+ var _isInstanceOf = require("../../lib/isInstanceOf");
8
+ var _Loader = require("../../components/Loader");
9
+ var _RenderContainer = require("../RenderContainer");
7
10
 
8
11
  var _ZIndexStorage = require("./ZIndexStorage");var _excluded = ["style", "children", "delta", "priority", "applyZIndex", "coverChildren", "createStackingContext", "wrapperRef", "useWrapper"];var _class, _class2, _temp;
9
12
 
10
- var ZIndexContext = /*#__PURE__*/_react.default.createContext({ parentLayerZIndex: 0, maxZIndex: Infinity });
13
+ var DEFAULT_ZINDEX_CONTEXT = { parentLayerZIndex: 0, maxZIndex: Infinity };
14
+
15
+ var ZIndexContext = /*#__PURE__*/_react.default.createContext(DEFAULT_ZINDEX_CONTEXT);
11
16
 
12
17
  ZIndexContext.displayName = 'ZIndexContext';var
13
18
 
@@ -43,6 +48,7 @@ ZIndexContext.displayName = 'ZIndexContext';var
43
48
 
44
49
 
45
50
 
51
+
46
52
 
47
53
 
48
54
  ZIndex = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default)(ZIndex, _React$Component);
@@ -75,11 +81,15 @@ ZIndex = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functi
75
81
 
76
82
 
77
83
 
84
+
85
+
78
86
 
79
87
 
80
88
 
81
89
  function ZIndex(props) {var _this;
82
- _this = _React$Component.call(this, props) || this;_this.state = { zIndex: 0 };_this.getProps = (0, _createPropsGetter.createPropsGetter)(ZIndex.defaultProps);_this.
90
+ _this = _React$Component.call(this, props) || this;_this.state = { zIndex: 0, savedZIndexContext: null };_this.getProps = (0, _createPropsGetter.createPropsGetter)(ZIndex.defaultProps);_this.zIndexContext = null;_this.
91
+
92
+
83
93
 
84
94
 
85
95
 
@@ -148,6 +158,7 @@ ZIndex = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functi
148
158
  var wrapperRef = _this.props.wrapperRef;
149
159
  _this.setRootNode(element);
150
160
  wrapperRef && (0, _callChildRef.callChildRef)(wrapperRef, element);
161
+ element && _this.tryGetContextByDOM(element);
151
162
  };_this.
152
163
 
153
164
 
@@ -168,4 +179,31 @@ ZIndex = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functi
168
179
  var _this$getProps = _this.getProps(),priority = _this$getProps.priority,delta = _this$getProps.delta;
169
180
 
170
181
  return (0, _ZIndexStorage.incrementZIndex)(priority, delta);
171
- };_this.state.zIndex = _this.increment();return _this;}var _proto = ZIndex.prototype;_proto.componentDidUpdate = function componentDidUpdate(prevProps) {if (prevProps.priority !== this.props.priority || prevProps.delta !== this.props.delta) {(0, _ZIndexStorage.removeZIndex)(this.state.zIndex);this.setState({ zIndex: this.increment() });}};_proto.componentWillUnmount = function componentWillUnmount() {(0, _ZIndexStorage.removeZIndex)(this.state.zIndex);};_proto.render = function render() {var _this2 = this;var _this$getProps2 = this.getProps(),style = _this$getProps2.style,children = _this$getProps2.children,delta = _this$getProps2.delta,priority = _this$getProps2.priority,applyZIndex = _this$getProps2.applyZIndex,coverChildren = _this$getProps2.coverChildren,createStackingContext = _this$getProps2.createStackingContext,wrapperRef = _this$getProps2.wrapperRef,useWrapper = _this$getProps2.useWrapper,rest = (0, _objectWithoutPropertiesLoose2.default)(_this$getProps2, _excluded);var wrapperStyle = {};return /*#__PURE__*/_react.default.createElement(ZIndexContext.Consumer, null, function (_ref) {var parentLayerZIndex = _ref.parentLayerZIndex,maxZIndex = _ref.maxZIndex;var zIndexContextValue = { parentLayerZIndex: parentLayerZIndex, maxZIndex: maxZIndex };if (applyZIndex) {var newZIndex = _this2.calcZIndex(parentLayerZIndex, maxZIndex);wrapperStyle.zIndex = newZIndex;zIndexContextValue = coverChildren ? { parentLayerZIndex: parentLayerZIndex, maxZIndex: newZIndex } : { parentLayerZIndex: newZIndex, maxZIndex: Number.isFinite(maxZIndex) ? newZIndex : Infinity };if (createStackingContext) {(0, _globalObject.isBrowser)(_globalObject.globalObject) && 'isolation' in _globalObject.globalObject.document.body.style ? wrapperStyle.isolation = 'isolate' : wrapperStyle.transform = 'rotate(0)';}}var child = !useWrapper ? children : /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({ style: (0, _extends2.default)({}, style, wrapperStyle), ref: _this2.wrapperRef }, rest), children);return /*#__PURE__*/_react.default.createElement(ZIndexContext.Provider, { value: zIndexContextValue }, child);});};_proto.calcZIndex = function calcZIndex(parentLayerZIndex, maxZIndex) {var newZIndex = this.state.zIndex;if (Number.isFinite(maxZIndex)) {var allowedValuesIntervalLength = maxZIndex - parentLayerZIndex;var scale = _ZIndexStorage.upperBorder / allowedValuesIntervalLength;newZIndex = Math.ceil(newZIndex / scale);}newZIndex += parentLayerZIndex;return newZIndex;};return ZIndex;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'ZIndex', _class2.displayName = 'ZIndex', _class2.defaultProps = { delta: 10, priority: 0, style: {}, applyZIndex: true, coverChildren: false, createStackingContext: false, useWrapper: true }, _class2.propTypes = { delta: function delta(props) {if ((props.delta || _class2.defaultProps.delta) <= 0) {return new Error("[ZIndex]: Prop 'delta' must be greater than 0, received " + props.delta);}if (Math.trunc(props.delta || _class2.defaultProps.delta) !== props.delta) {return new Error("[ZIndex]: Prop 'delta' must be integer, received " + props.delta);}} }, _temp)) || _class;exports.ZIndex = ZIndex;
182
+ };_this.
183
+
184
+ tryGetContextByDOM = function (element) {
185
+ if (DEFAULT_ZINDEX_CONTEXT === _this.zIndexContext && _this.state.savedZIndexContext === null) {var _element$parentElemen;
186
+ var savedZIndexContext = DEFAULT_ZINDEX_CONTEXT;
187
+ var portal = (_element$parentElemen = element.parentElement) == null ? void 0 : _element$parentElemen.closest("[" + _RenderContainer.PORTAL_OUTLET_ATTR + "]");
188
+
189
+ if ((0, _isInstanceOf.isInstanceOf)(portal, _globalObject.globalObject.HTMLElement)) {var _noscript$parentEleme;
190
+ var portalID = portal.getAttribute(_RenderContainer.PORTAL_OUTLET_ATTR);
191
+ var noscript = document.querySelector("noscript[" + _RenderContainer.PORTAL_INLET_ATTR + "=\"" + portalID + "\"]");
192
+ var parent = noscript == null ? void 0 : (_noscript$parentEleme = noscript.parentElement) == null ? void 0 : _noscript$parentEleme.closest('[style*=z-index]');
193
+
194
+ if ((0, _isInstanceOf.isInstanceOf)(parent, _globalObject.globalObject.HTMLElement)) {var _parent$parentElement;
195
+ var newZIndex = Number(parent.style.zIndex || 0);
196
+
197
+ var maxZIndex = Infinity;
198
+
199
+ if (((_parent$parentElement = parent.parentElement) == null ? void 0 : _parent$parentElement.dataset.tid) === _Loader.LoaderDataTids.veil) {
200
+ maxZIndex = _this.calcZIndex(newZIndex, maxZIndex);
201
+ }
202
+
203
+ savedZIndexContext = { maxZIndex: maxZIndex, parentLayerZIndex: newZIndex };
204
+ }
205
+ }
206
+
207
+ _this.setState({ savedZIndexContext: savedZIndexContext });
208
+ }
209
+ };_this.state.zIndex = _this.increment();return _this;}var _proto = ZIndex.prototype;_proto.componentDidUpdate = function componentDidUpdate(prevProps) {if (prevProps.priority !== this.props.priority || prevProps.delta !== this.props.delta) {(0, _ZIndexStorage.removeZIndex)(this.state.zIndex);this.setState({ zIndex: this.increment() });}};_proto.componentWillUnmount = function componentWillUnmount() {(0, _ZIndexStorage.removeZIndex)(this.state.zIndex);};_proto.render = function render() {var _this2 = this;var _this$getProps2 = this.getProps(),style = _this$getProps2.style,children = _this$getProps2.children,delta = _this$getProps2.delta,priority = _this$getProps2.priority,applyZIndex = _this$getProps2.applyZIndex,coverChildren = _this$getProps2.coverChildren,createStackingContext = _this$getProps2.createStackingContext,wrapperRef = _this$getProps2.wrapperRef,useWrapper = _this$getProps2.useWrapper,rest = (0, _objectWithoutPropertiesLoose2.default)(_this$getProps2, _excluded);var wrapperStyle = {};return /*#__PURE__*/_react.default.createElement(ZIndexContext.Consumer, null, function (context) {_this2.zIndexContext = context;var _ref = _this2.state.savedZIndexContext || context,parentLayerZIndex = _ref.parentLayerZIndex,maxZIndex = _ref.maxZIndex;var zIndexContextValue = { parentLayerZIndex: parentLayerZIndex, maxZIndex: maxZIndex };var newZIndex = 0;if (applyZIndex) {newZIndex = _this2.calcZIndex(parentLayerZIndex, maxZIndex);wrapperStyle.zIndex = newZIndex;zIndexContextValue = coverChildren ? { parentLayerZIndex: parentLayerZIndex, maxZIndex: newZIndex } : { parentLayerZIndex: newZIndex, maxZIndex: Number.isFinite(maxZIndex) ? newZIndex : Infinity };if (createStackingContext) {(0, _globalObject.isBrowser)(_globalObject.globalObject) && 'isolation' in _globalObject.globalObject.document.body.style ? wrapperStyle.isolation = 'isolate' : wrapperStyle.transform = 'rotate(0)';}}var child = !useWrapper ? children : /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({ style: (0, _extends2.default)({}, style, wrapperStyle), ref: _this2.wrapperRef }, rest), children);return /*#__PURE__*/_react.default.createElement(ZIndexContext.Provider, { value: zIndexContextValue }, child);});};_proto.calcZIndex = function calcZIndex(parentLayerZIndex, maxZIndex) {var newZIndex = this.state.zIndex;if (Number.isFinite(maxZIndex)) {var allowedValuesIntervalLength = maxZIndex - parentLayerZIndex;var scale = _ZIndexStorage.upperBorder / allowedValuesIntervalLength;newZIndex = Math.ceil(newZIndex / scale);}newZIndex += parentLayerZIndex;return newZIndex;};return ZIndex;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'ZIndex', _class2.displayName = 'ZIndex', _class2.defaultProps = { delta: 10, priority: 0, style: {}, applyZIndex: true, coverChildren: false, createStackingContext: false, useWrapper: true }, _class2.propTypes = { delta: function delta(props) {if ((props.delta || _class2.defaultProps.delta) <= 0) {return new Error("[ZIndex]: Prop 'delta' must be greater than 0, received " + props.delta);}if (Math.trunc(props.delta || _class2.defaultProps.delta) !== props.delta) {return new Error("[ZIndex]: Prop 'delta' must be integer, received " + props.delta);}} }, _temp)) || _class;exports.ZIndex = ZIndex;
@@ -1 +1 @@
1
- {"version":3,"sources":["ZIndex.tsx"],"names":["ZIndexContext","React","createContext","parentLayerZIndex","maxZIndex","Infinity","displayName","ZIndex","rootNode","props","state","zIndex","getProps","defaultProps","wrapperRef","element","setRootNode","increment","priority","delta","componentDidUpdate","prevProps","setState","componentWillUnmount","render","style","children","applyZIndex","coverChildren","createStackingContext","useWrapper","rest","wrapperStyle","zIndexContextValue","newZIndex","calcZIndex","Number","isFinite","globalObject","document","body","isolation","transform","child","allowedValuesIntervalLength","scale","upperBorder","Math","ceil","Component","__KONTUR_REACT_UI__","propTypes","Error","trunc"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { incrementZIndex, removeZIndex, upperBorder, LayerComponentName } from './ZIndexStorage';\n\nconst ZIndexContext = React.createContext({ parentLayerZIndex: 0, maxZIndex: Infinity });\n\nZIndexContext.displayName = 'ZIndexContext';\n\nexport interface ZIndexProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Приращение к z-index\n */\n delta?: number;\n priority?: number | LayerComponentName;\n style?: React.CSSProperties;\n createStackingContext?: boolean;\n coverChildren?: boolean;\n applyZIndex?: boolean;\n className?: string;\n wrapperRef?: React.Ref<HTMLDivElement> | undefined | null;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<div/>`.\n * Для случаев, когда необходимо задать **только** контекст для области.\n *\n * @default true\n */\n useWrapper?: boolean;\n}\n\ntype DefaultProps = Required<\n Pick<\n ZIndexProps,\n 'delta' | 'priority' | 'style' | 'applyZIndex' | 'coverChildren' | 'createStackingContext' | 'useWrapper'\n >\n>;\n\ninterface ZIndexState {\n zIndex: number;\n}\n\n@rootNode\nexport class ZIndex extends React.Component<ZIndexProps, ZIndexState> {\n public static __KONTUR_REACT_UI__ = 'ZIndex';\n public static displayName = 'ZIndex';\n\n public static defaultProps: DefaultProps = {\n delta: 10,\n priority: 0,\n style: {},\n applyZIndex: true,\n coverChildren: false,\n createStackingContext: false,\n useWrapper: true,\n };\n\n public state = {\n zIndex: 0,\n };\n\n private getProps = createPropsGetter(ZIndex.defaultProps);\n\n public static propTypes = {\n delta(props: ZIndexProps) {\n if ((props.delta || ZIndex.defaultProps.delta) <= 0) {\n return new Error(`[ZIndex]: Prop 'delta' must be greater than 0, received ${props.delta}`);\n }\n if (Math.trunc(props.delta || ZIndex.defaultProps.delta) !== props.delta) {\n return new Error(`[ZIndex]: Prop 'delta' must be integer, received ${props.delta}`);\n }\n },\n };\n\n private setRootNode!: TSetRootNode;\n\n constructor(props: ZIndexProps) {\n super(props);\n this.state.zIndex = this.increment();\n }\n\n public componentDidUpdate(prevProps: Readonly<ZIndexProps>) {\n if (prevProps.priority !== this.props.priority || prevProps.delta !== this.props.delta) {\n removeZIndex(this.state.zIndex);\n this.setState({ zIndex: this.increment() });\n }\n }\n\n public componentWillUnmount() {\n removeZIndex(this.state.zIndex);\n }\n\n public render() {\n const {\n style,\n children,\n delta,\n priority,\n applyZIndex,\n coverChildren,\n createStackingContext,\n wrapperRef,\n useWrapper,\n ...rest\n } = this.getProps();\n\n const wrapperStyle: React.CSSProperties = {};\n\n return (\n <ZIndexContext.Consumer>\n {({ parentLayerZIndex, maxZIndex }) => {\n let zIndexContextValue = { parentLayerZIndex, maxZIndex };\n\n if (applyZIndex) {\n const newZIndex = this.calcZIndex(parentLayerZIndex, maxZIndex);\n wrapperStyle.zIndex = newZIndex;\n\n zIndexContextValue = coverChildren\n ? { parentLayerZIndex, maxZIndex: newZIndex }\n : { parentLayerZIndex: newZIndex, maxZIndex: Number.isFinite(maxZIndex) ? newZIndex : Infinity };\n\n if (createStackingContext) {\n isBrowser(globalObject) && 'isolation' in globalObject.document.body.style\n ? (wrapperStyle.isolation = 'isolate')\n : (wrapperStyle.transform = 'rotate(0)');\n }\n }\n\n const child = !useWrapper ? (\n children\n ) : (\n <div style={{ ...style, ...wrapperStyle }} ref={this.wrapperRef} {...rest}>\n {children}\n </div>\n );\n\n return <ZIndexContext.Provider value={zIndexContextValue}>{child}</ZIndexContext.Provider>;\n }}\n </ZIndexContext.Consumer>\n );\n }\n\n private wrapperRef = (element: HTMLDivElement | null) => {\n const { wrapperRef } = this.props;\n this.setRootNode(element);\n wrapperRef && callChildRef(wrapperRef, element);\n };\n\n private calcZIndex(parentLayerZIndex: number, maxZIndex: number) {\n let newZIndex = this.state.zIndex;\n\n if (Number.isFinite(maxZIndex)) {\n const allowedValuesIntervalLength = maxZIndex - parentLayerZIndex;\n const scale = upperBorder / allowedValuesIntervalLength;\n newZIndex = Math.ceil(newZIndex / scale);\n }\n\n newZIndex += parentLayerZIndex;\n\n return newZIndex;\n }\n\n private increment = () => {\n const { priority, delta } = this.getProps();\n\n return incrementZIndex(priority, delta);\n };\n}\n"]}
1
+ {"version":3,"sources":["ZIndex.tsx"],"names":["DEFAULT_ZINDEX_CONTEXT","parentLayerZIndex","maxZIndex","Infinity","ZIndexContext","React","createContext","displayName","ZIndex","rootNode","props","state","zIndex","savedZIndexContext","getProps","defaultProps","zIndexContext","wrapperRef","element","setRootNode","tryGetContextByDOM","increment","priority","delta","portal","parentElement","closest","PORTAL_OUTLET_ATTR","globalObject","HTMLElement","portalID","getAttribute","noscript","document","querySelector","PORTAL_INLET_ATTR","parent","newZIndex","Number","style","dataset","tid","LoaderDataTids","veil","calcZIndex","setState","componentDidUpdate","prevProps","componentWillUnmount","render","children","applyZIndex","coverChildren","createStackingContext","useWrapper","rest","wrapperStyle","context","zIndexContextValue","isFinite","body","isolation","transform","child","allowedValuesIntervalLength","scale","upperBorder","Math","ceil","Component","__KONTUR_REACT_UI__","propTypes","Error","trunc"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport { LoaderDataTids } from '../../components/Loader';\nimport { PORTAL_INLET_ATTR, PORTAL_OUTLET_ATTR } from '../RenderContainer';\n\nimport { incrementZIndex, removeZIndex, upperBorder, LayerComponentName } from './ZIndexStorage';\n\nconst DEFAULT_ZINDEX_CONTEXT = { parentLayerZIndex: 0, maxZIndex: Infinity };\n\nconst ZIndexContext = React.createContext(DEFAULT_ZINDEX_CONTEXT);\n\nZIndexContext.displayName = 'ZIndexContext';\n\nexport interface ZIndexProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Приращение к z-index\n */\n delta?: number;\n priority?: number | LayerComponentName;\n style?: React.CSSProperties;\n createStackingContext?: boolean;\n coverChildren?: boolean;\n applyZIndex?: boolean;\n className?: string;\n wrapperRef?: React.Ref<HTMLDivElement> | undefined | null;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<div/>`.\n * Для случаев, когда необходимо задать **только** контекст для области.\n *\n * @default true\n */\n useWrapper?: boolean;\n}\n\ntype DefaultProps = Required<\n Pick<\n ZIndexProps,\n 'delta' | 'priority' | 'style' | 'applyZIndex' | 'coverChildren' | 'createStackingContext' | 'useWrapper'\n >\n>;\n\ninterface ZIndexState {\n zIndex: number;\n savedZIndexContext: { parentLayerZIndex: number; maxZIndex: number } | null;\n}\n\n@rootNode\nexport class ZIndex extends React.Component<ZIndexProps, ZIndexState> {\n public static __KONTUR_REACT_UI__ = 'ZIndex';\n public static displayName = 'ZIndex';\n\n public static defaultProps: DefaultProps = {\n delta: 10,\n priority: 0,\n style: {},\n applyZIndex: true,\n coverChildren: false,\n createStackingContext: false,\n useWrapper: true,\n };\n\n public state: ZIndexState = {\n zIndex: 0,\n savedZIndexContext: null,\n };\n\n private getProps = createPropsGetter(ZIndex.defaultProps);\n\n public static propTypes = {\n delta(props: ZIndexProps) {\n if ((props.delta || ZIndex.defaultProps.delta) <= 0) {\n return new Error(`[ZIndex]: Prop 'delta' must be greater than 0, received ${props.delta}`);\n }\n if (Math.trunc(props.delta || ZIndex.defaultProps.delta) !== props.delta) {\n return new Error(`[ZIndex]: Prop 'delta' must be integer, received ${props.delta}`);\n }\n },\n };\n\n private setRootNode!: TSetRootNode;\n private zIndexContext: { parentLayerZIndex: number; maxZIndex: number } | null = null;\n\n constructor(props: ZIndexProps) {\n super(props);\n this.state.zIndex = this.increment();\n }\n\n public componentDidUpdate(prevProps: Readonly<ZIndexProps>) {\n if (prevProps.priority !== this.props.priority || prevProps.delta !== this.props.delta) {\n removeZIndex(this.state.zIndex);\n this.setState({ zIndex: this.increment() });\n }\n }\n\n public componentWillUnmount() {\n removeZIndex(this.state.zIndex);\n }\n\n public render() {\n const {\n style,\n children,\n delta,\n priority,\n applyZIndex,\n coverChildren,\n createStackingContext,\n wrapperRef,\n useWrapper,\n ...rest\n } = this.getProps();\n\n const wrapperStyle: React.CSSProperties = {};\n\n return (\n <ZIndexContext.Consumer>\n {(context) => {\n this.zIndexContext = context;\n const { parentLayerZIndex, maxZIndex } = this.state.savedZIndexContext || context;\n let zIndexContextValue = { parentLayerZIndex, maxZIndex };\n let newZIndex = 0;\n if (applyZIndex) {\n newZIndex = this.calcZIndex(parentLayerZIndex, maxZIndex);\n wrapperStyle.zIndex = newZIndex;\n\n zIndexContextValue = coverChildren\n ? { parentLayerZIndex, maxZIndex: newZIndex }\n : { parentLayerZIndex: newZIndex, maxZIndex: Number.isFinite(maxZIndex) ? newZIndex : Infinity };\n\n if (createStackingContext) {\n isBrowser(globalObject) && 'isolation' in globalObject.document.body.style\n ? (wrapperStyle.isolation = 'isolate')\n : (wrapperStyle.transform = 'rotate(0)');\n }\n }\n\n const child = !useWrapper ? (\n children\n ) : (\n <div style={{ ...style, ...wrapperStyle }} ref={this.wrapperRef} {...rest}>\n {children}\n </div>\n );\n\n return <ZIndexContext.Provider value={zIndexContextValue}>{child}</ZIndexContext.Provider>;\n }}\n </ZIndexContext.Consumer>\n );\n }\n\n private wrapperRef = (element: HTMLDivElement | null) => {\n const { wrapperRef } = this.props;\n this.setRootNode(element);\n wrapperRef && callChildRef(wrapperRef, element);\n element && this.tryGetContextByDOM(element);\n };\n\n private calcZIndex(parentLayerZIndex: number, maxZIndex: number) {\n let newZIndex = this.state.zIndex;\n\n if (Number.isFinite(maxZIndex)) {\n const allowedValuesIntervalLength = maxZIndex - parentLayerZIndex;\n const scale = upperBorder / allowedValuesIntervalLength;\n newZIndex = Math.ceil(newZIndex / scale);\n }\n\n newZIndex += parentLayerZIndex;\n\n return newZIndex;\n }\n\n private increment = () => {\n const { priority, delta } = this.getProps();\n\n return incrementZIndex(priority, delta);\n };\n\n private tryGetContextByDOM = (element: HTMLDivElement) => {\n if (DEFAULT_ZINDEX_CONTEXT === this.zIndexContext && this.state.savedZIndexContext === null) {\n let savedZIndexContext = DEFAULT_ZINDEX_CONTEXT;\n const portal = element.parentElement?.closest(`[${PORTAL_OUTLET_ATTR}]`);\n\n if (isInstanceOf(portal, globalObject.HTMLElement)) {\n const portalID = portal.getAttribute(PORTAL_OUTLET_ATTR);\n const noscript = document.querySelector(`noscript[${PORTAL_INLET_ATTR}=\"${portalID}\"]`);\n const parent = noscript?.parentElement?.closest('[style*=z-index]');\n\n if (isInstanceOf(parent, globalObject.HTMLElement)) {\n const newZIndex = Number(parent.style.zIndex || 0);\n\n let maxZIndex = Infinity;\n\n if (parent.parentElement?.dataset.tid === LoaderDataTids.veil) {\n maxZIndex = this.calcZIndex(newZIndex, maxZIndex);\n }\n\n savedZIndexContext = { maxZIndex, parentLayerZIndex: newZIndex };\n }\n }\n\n this.setState({ savedZIndexContext });\n }\n };\n}\n"]}
@@ -2,6 +2,8 @@
2
2
  var _lodash = _interopRequireDefault(require("lodash.debounce"));
3
3
  var _globalObject = require("@skbkontur/global-object");
4
4
 
5
+ var _RenderContainer = require("../internal/RenderContainer");
6
+
5
7
  var _isInstanceOf = require("./isInstanceOf");
6
8
  var _client = require("./client");var _globalObject$documen2;
7
9
 
@@ -80,9 +82,9 @@ function findRenderContainer(node, rootNode, container) {var _globalObject$docum
80
82
  return container ? container : null;
81
83
  }
82
84
 
83
- var newContainerId = currentNode.getAttribute('data-rendered-container-id');
85
+ var newContainerId = currentNode.getAttribute(_RenderContainer.PORTAL_OUTLET_ATTR);
84
86
  if (newContainerId) {var _globalObject$documen5;
85
- var nextNode = (_globalObject$documen5 = _globalObject.globalObject.document) == null ? void 0 : _globalObject$documen5.querySelector("[data-render-container-id~=\"" + newContainerId + "\"]");
87
+ var nextNode = (_globalObject$documen5 = _globalObject.globalObject.document) == null ? void 0 : _globalObject$documen5.querySelector("[" + _RenderContainer.PORTAL_INLET_ATTR + "~=\"" + newContainerId + "\"]");
86
88
 
87
89
  if (!nextNode) {
88
90
  throw Error("Origin node for render container was not found");
@@ -1 +1 @@
1
- {"version":3,"sources":["listenFocusOutside.ts"],"names":["handlers","addHandleEvent","document","body","addEventListener","isFirefox","handleNativeFocus","leading","trailing","capture","readyState","globalObject","event","target","srcElement","forEach","handler","elements","some","containsTargetOrRenderContainer","ReactDOM","unstable_batchedUpdates","callback","element","contains","container","findRenderContainer","node","rootNode","currentNode","parentNode","documentElement","Element","newContainerId","getAttribute","nextNode","querySelector","Error","listen","push","remove","index","indexOf","splice"],"mappings":"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","sourcesContent":["import ReactDOM from 'react-dom';\nimport debounce from 'lodash.debounce';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { isInstanceOf } from './isInstanceOf';\nimport { isFirefox } from './client';\n\ninterface FocusOutsideEventHandler {\n elements: Element[] | (() => Element[]);\n callback: (event: Event) => void;\n}\n\nconst handlers: FocusOutsideEventHandler[] = [];\n\nfunction addHandleEvent() {\n /**\n * Firefox do not supports 'focusin' event.\n * Focus events bubbles multiple time\n * without possibilty to cancell bubbling.\n * Using debounce to capture only first focus event\n * Mozilla Firefix\n * ¯\\_(ツ)_/¯\n */\n globalObject.document?.body.addEventListener(\n isFirefox ? 'focus' : ('focusin' as 'focus'),\n isFirefox ? debounce(handleNativeFocus, 0, { leading: true, trailing: false }) : handleNativeFocus,\n { capture: true },\n );\n}\n\nif (globalObject.document?.readyState === 'complete') {\n addHandleEvent();\n} else {\n globalObject.addEventListener?.('load', addHandleEvent);\n}\n\nfunction handleNativeFocus(event: UIEvent) {\n // FIXME: not safe casting\n const target: Element = (event.target || event.srcElement) as Element;\n\n handlers.forEach((handler) => {\n let elements = handler.elements;\n if (typeof elements === 'function') {\n elements = elements();\n }\n\n if (elements.some(containsTargetOrRenderContainer(target))) {\n return;\n }\n ReactDOM.unstable_batchedUpdates(() => handler.callback(event));\n });\n}\n\nexport function containsTargetOrRenderContainer(target: Element) {\n return (element: Element) => {\n if (!element) {\n return false;\n }\n if (element.contains(target)) {\n return true;\n }\n const container = findRenderContainer(target, element);\n return !!container && element.contains(container);\n };\n}\n\n/**\n * Searches RenderContainer placed in \"rootNode\" for \"node\"\n */\nexport function findRenderContainer(node: Element, rootNode: Element, container?: Element): Element | null {\n const currentNode = node.parentNode;\n if (\n !currentNode ||\n node === rootNode ||\n currentNode === rootNode ||\n currentNode === globalObject.document?.body ||\n currentNode === globalObject.document?.documentElement ||\n !isInstanceOf(currentNode, globalObject.Element)\n ) {\n return container ? container : null;\n }\n\n const newContainerId = currentNode.getAttribute('data-rendered-container-id');\n if (newContainerId) {\n const nextNode = globalObject.document?.querySelector(`[data-render-container-id~=\"${newContainerId}\"]`);\n\n if (!nextNode) {\n throw Error(`Origin node for render container was not found`);\n }\n\n return findRenderContainer(nextNode, rootNode, nextNode);\n }\n\n return findRenderContainer(currentNode, rootNode, container);\n}\n\nexport function listen(elements: Element[] | (() => Element[]), callback: (event: Event) => void) {\n const handler = {\n elements,\n callback,\n };\n handlers.push(handler);\n\n return {\n remove() {\n const index = handlers.indexOf(handler);\n if (index > -1) {\n handlers.splice(index, 1);\n }\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["listenFocusOutside.ts"],"names":["handlers","addHandleEvent","document","body","addEventListener","isFirefox","handleNativeFocus","leading","trailing","capture","readyState","globalObject","event","target","srcElement","forEach","handler","elements","some","containsTargetOrRenderContainer","ReactDOM","unstable_batchedUpdates","callback","element","contains","container","findRenderContainer","node","rootNode","currentNode","parentNode","documentElement","Element","newContainerId","getAttribute","PORTAL_OUTLET_ATTR","nextNode","querySelector","PORTAL_INLET_ATTR","Error","listen","push","remove","index","indexOf","splice"],"mappings":"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","sourcesContent":["import ReactDOM from 'react-dom';\nimport debounce from 'lodash.debounce';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { PORTAL_INLET_ATTR, PORTAL_OUTLET_ATTR } from '../internal/RenderContainer';\n\nimport { isInstanceOf } from './isInstanceOf';\nimport { isFirefox } from './client';\n\ninterface FocusOutsideEventHandler {\n elements: Element[] | (() => Element[]);\n callback: (event: Event) => void;\n}\n\nconst handlers: FocusOutsideEventHandler[] = [];\n\nfunction addHandleEvent() {\n /**\n * Firefox do not supports 'focusin' event.\n * Focus events bubbles multiple time\n * without possibilty to cancell bubbling.\n * Using debounce to capture only first focus event\n * Mozilla Firefix\n * ¯\\_(ツ)_/¯\n */\n globalObject.document?.body.addEventListener(\n isFirefox ? 'focus' : ('focusin' as 'focus'),\n isFirefox ? debounce(handleNativeFocus, 0, { leading: true, trailing: false }) : handleNativeFocus,\n { capture: true },\n );\n}\n\nif (globalObject.document?.readyState === 'complete') {\n addHandleEvent();\n} else {\n globalObject.addEventListener?.('load', addHandleEvent);\n}\n\nfunction handleNativeFocus(event: UIEvent) {\n // FIXME: not safe casting\n const target: Element = (event.target || event.srcElement) as Element;\n\n handlers.forEach((handler) => {\n let elements = handler.elements;\n if (typeof elements === 'function') {\n elements = elements();\n }\n\n if (elements.some(containsTargetOrRenderContainer(target))) {\n return;\n }\n ReactDOM.unstable_batchedUpdates(() => handler.callback(event));\n });\n}\n\nexport function containsTargetOrRenderContainer(target: Element) {\n return (element: Element) => {\n if (!element) {\n return false;\n }\n if (element.contains(target)) {\n return true;\n }\n const container = findRenderContainer(target, element);\n return !!container && element.contains(container);\n };\n}\n\n/**\n * Searches RenderContainer placed in \"rootNode\" for \"node\"\n */\nexport function findRenderContainer(node: Element, rootNode: Element, container?: Element): Element | null {\n const currentNode = node.parentNode;\n if (\n !currentNode ||\n node === rootNode ||\n currentNode === rootNode ||\n currentNode === globalObject.document?.body ||\n currentNode === globalObject.document?.documentElement ||\n !isInstanceOf(currentNode, globalObject.Element)\n ) {\n return container ? container : null;\n }\n\n const newContainerId = currentNode.getAttribute(PORTAL_OUTLET_ATTR);\n if (newContainerId) {\n const nextNode = globalObject.document?.querySelector(`[${PORTAL_INLET_ATTR}~=\"${newContainerId}\"]`);\n\n if (!nextNode) {\n throw Error(`Origin node for render container was not found`);\n }\n\n return findRenderContainer(nextNode, rootNode, nextNode);\n }\n\n return findRenderContainer(currentNode, rootNode, container);\n}\n\nexport function listen(elements: Element[] | (() => Element[]), callback: (event: Event) => void) {\n const handler = {\n elements,\n callback,\n };\n handlers.push(handler);\n\n return {\n remove() {\n const index = handlers.indexOf(handler);\n if (index > -1) {\n handlers.splice(index, 1);\n }\n },\n };\n}\n"]}
@@ -1,4 +1,6 @@
1
1
  ```jsx harmony
2
+ import { Autocomplete } from '@skbkontur/react-ui';
3
+
2
4
  const items = ['Grey Face', 'Grey Space', 'Kappa', 'Keepo', 'Resident Sleeper'];
3
5
 
4
6
  const [value, setValue] = React.useState('Kappa');
@@ -6,9 +8,9 @@ const [value, setValue] = React.useState('Kappa');
6
8
  <Autocomplete source={items} value={value} onValueChange={setValue} />;
7
9
  ```
8
10
 
9
- Очистить значение в `Autocomplete` можно только с помощью пустой строки
11
+ Очистить значение в `Autocomplete` можно только с помощью пустой строки.
10
12
  ```jsx harmony
11
- import { Button, Group } from '@skbkontur/react-ui';
13
+ import { Autocomplete, Button, Group } from '@skbkontur/react-ui';
12
14
 
13
15
  const items = ['Grey Face', 'Grey Space', 'Kappa', 'Keepo', 'Resident Sleeper'];
14
16
 
@@ -22,7 +24,7 @@ const [value, setValue] = React.useState('Kappa');
22
24
 
23
25
  У Autocomplete есть 3 стандартных размера.
24
26
  ```jsx harmony
25
- import { Gapped } from '@skbkontur/react-ui';
27
+ import { Autocomplete, Gapped } from '@skbkontur/react-ui';
26
28
 
27
29
  const items = ['Маленький', 'Средний', 'Большой'];
28
30
 
@@ -36,3 +38,74 @@ const [valueLarge, setValueLarge] = React.useState('Большой');
36
38
  <Autocomplete source={items} value={valueLarge} onValueChange={setValueLarge} size={'large'} />
37
39
  </Gapped>
38
40
  ```
41
+
42
+ Можно выделять введеное значение при фокусе.
43
+ ```jsx harmony
44
+ import { Autocomplete } from '@skbkontur/react-ui';
45
+
46
+ const items = ['Grey Face', 'Grey Space', 'Kappa', 'Keepo', 'Resident Sleeper'];
47
+
48
+ const [value, setValue] = React.useState('');
49
+
50
+ <Autocomplete source={items} value={value} onValueChange={setValue} selectAllOnFocus />
51
+ ```
52
+
53
+ Расположение иконки слева и справа.
54
+ ```jsx harmony
55
+ import { Autocomplete, Gapped } from '@skbkontur/react-ui';
56
+ import { SearchLoupeIcon16Regular } from '@skbkontur/icons/SearchLoupeIcon16Regular';
57
+
58
+ const items = ['Grey Face', 'Grey Space', 'Kappa', 'Keepo', 'Resident Sleeper'];
59
+
60
+ const [valueLeft, setValueLeft] = React.useState('');
61
+ const [valueRight, setValueRight] = React.useState('');
62
+
63
+ <Gapped>
64
+ <Autocomplete source={items} value={valueLeft} onValueChange={setValueLeft} leftIcon={<SearchLoupeIcon16Regular />} />
65
+ <Autocomplete source={items} value={valueRight} onValueChange={setValueRight} rightIcon={<SearchLoupeIcon16Regular />} />
66
+ </Gapped>
67
+ ```
68
+
69
+ Изменение ширины меню.
70
+ ```jsx harmony
71
+ import { Autocomplete } from '@skbkontur/react-ui';
72
+
73
+ const items = ['Grey Face', 'Grey Space', 'Kappa', 'Keepo', 'Resident Sleeper'];
74
+
75
+ const [value, setValue] = React.useState('');
76
+
77
+ <Autocomplete source={items} value={value} onValueChange={setValue} menuWidth={'80%'} />
78
+ ```
79
+
80
+ Расположение выпадающего окна Autocomplete.
81
+ ```jsx harmony
82
+ import { Autocomplete } from '@skbkontur/react-ui';
83
+
84
+ const items = ['Grey Face', 'Grey Space', 'Kappa', 'Keepo', 'Resident Sleeper'];
85
+
86
+ const [value, setValue] = React.useState('');
87
+
88
+ <Autocomplete source={items} value={value} onValueChange={setValue} menuPos={'top'} />
89
+ ```
90
+
91
+ Отрисовка тени у выпадающего меню.
92
+ ```jsx harmony
93
+ import { Autocomplete } from '@skbkontur/react-ui';
94
+
95
+ const items = ['Grey Face', 'Grey Space', 'Kappa', 'Keepo', 'Resident Sleeper'];
96
+
97
+ const [value, setValue] = React.useState('');
98
+
99
+ <Autocomplete source={items} value={value} onValueChange={setValue} hasShadow />
100
+ ```
101
+
102
+ Использование режима прозрачной рамки.
103
+ ```jsx harmony
104
+ import { Autocomplete } from '@skbkontur/react-ui';
105
+
106
+ const items = ['Grey Face', 'Grey Space', 'Kappa', 'Keepo', 'Resident Sleeper'];
107
+
108
+ const [value, setValue] = React.useState('Kappa');
109
+
110
+ <Autocomplete source={items} value={value} onValueChange={setValue} borderless />
111
+ ```
@@ -60,15 +60,15 @@ import { XIcon16Regular } from '@skbkontur/icons/XIcon16Regular';
60
60
 
61
61
  ```jsx harmony
62
62
  <div
63
- style={{
64
- display: "flex",
65
- alignItems: "end",
66
- gap: '10px',
67
- }}
68
- >
69
- <Button size="small">Маленькая</Button>
70
- <Button size="medium">Средняя</Button>
71
- <Button size="large">Большая</Button>
63
+ style={{
64
+ display: "flex",
65
+ alignItems: "end",
66
+ gap: '10px',
67
+ }}
68
+ >
69
+ <Button size="small">Маленькая</Button>
70
+ <Button size="medium">Средняя</Button>
71
+ <Button size="large">Большая</Button>
72
72
  </div>
73
73
  ```
74
74
 
@@ -133,7 +133,7 @@ const handleClick = () => {
133
133
 
134
134
  ```
135
135
 
136
- Пример кнопки с пропом `theme`
136
+ Пример кнопки с пропом `theme`.
137
137
 
138
138
  ```jsx harmony
139
139
  import { Button, Gapped } from '@skbkontur/react-ui';
@@ -146,7 +146,7 @@ import { Button, Gapped } from '@skbkontur/react-ui';
146
146
  ```
147
147
 
148
148
 
149
- Пример кастомизации кнопки-ссылки
149
+ Пример кастомизации кнопки-ссылки.
150
150
 
151
151
  ```jsx harmony
152
152
  import { Toast } from "@skbkontur/react-ui";
@@ -212,3 +212,30 @@ const renderExampleRow = (title, styles, index) => {
212
212
  {renderExampleRow('Изменение цвета ссылки', differentColorStyles)}
213
213
  </table>
214
214
  ```
215
+
216
+
217
+ Кнопка может быть узкой.
218
+
219
+ ```jsx harmony
220
+ import { Button } from '@skbkontur/react-ui';
221
+
222
+ <Button narrow>
223
+ Создать отчет
224
+ </Button>
225
+ ```
226
+
227
+
228
+ У кнопки есть состояния валидации.
229
+
230
+ ```jsx harmony
231
+ import { Button, Gapped } from '@skbkontur/react-ui';
232
+
233
+ <Gapped gap={5}>
234
+ <Button warning>
235
+ Warning
236
+ </Button>
237
+ <Button error>
238
+ Error
239
+ </Button>
240
+ </Gapped>
241
+ ```