@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.
- package/CHANGELOG.md +19 -0
- package/README.md +41 -13
- package/cjs/components/Autocomplete/Autocomplete.md +76 -3
- package/cjs/components/Button/Button.md +38 -11
- package/cjs/components/Calendar/Calendar.md +40 -0
- package/cjs/components/DropdownMenu/DropdownMenu.md +39 -0
- package/cjs/components/FileUploader/FileUploader.d.ts +2 -0
- package/cjs/components/FileUploader/FileUploader.js +32 -9
- package/cjs/components/FileUploader/FileUploader.js.map +1 -1
- package/cjs/components/FileUploader/FileUploader.md +29 -0
- package/cjs/components/ScrollContainer/ScrollContainer.d.ts +1 -0
- package/cjs/components/ScrollContainer/ScrollContainer.js +6 -0
- package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
- package/cjs/hooks/useDrop.d.ts +1 -1
- package/cjs/hooks/useDrop.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.d.ts +5 -2
- package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js +16 -3
- package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +1 -0
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js +4 -2
- package/cjs/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.js.map +1 -1
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +1 -0
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js +3 -2
- package/cjs/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderContainer.d.ts +2 -0
- package/cjs/internal/RenderContainer/RenderContainer.js +6 -3
- package/cjs/internal/RenderContainer/RenderContainer.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderInnerContainer.js +3 -2
- package/cjs/internal/RenderContainer/RenderInnerContainer.js.map +1 -1
- package/cjs/internal/ZIndex/ZIndex.d.ts +7 -3
- package/cjs/internal/ZIndex/ZIndex.js +41 -3
- package/cjs/internal/ZIndex/ZIndex.js.map +1 -1
- package/cjs/lib/listenFocusOutside.js +4 -2
- package/cjs/lib/listenFocusOutside.js.map +1 -1
- package/components/Autocomplete/Autocomplete.md +76 -3
- package/components/Button/Button.md +38 -11
- package/components/Calendar/Calendar.md +40 -0
- package/components/DropdownMenu/DropdownMenu.md +39 -0
- package/components/FileUploader/FileUploader/FileUploader.js +30 -8
- package/components/FileUploader/FileUploader/FileUploader.js.map +1 -1
- package/components/FileUploader/FileUploader.d.ts +2 -0
- package/components/FileUploader/FileUploader.md +29 -0
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +5 -0
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.d.ts +1 -0
- package/hooks/useDrop/useDrop.js.map +1 -1
- package/hooks/useDrop.d.ts +1 -1
- package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js +12 -3
- package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderControlProvider.d.ts +5 -2
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js +4 -2
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile/FileUploaderFile.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderFile/FileUploaderFile.d.ts +1 -0
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js +4 -2
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList/FileUploaderFileList.js.map +1 -1
- package/internal/FileUploaderControl/FileUploaderFileList/FileUploaderFileList.d.ts +1 -0
- package/internal/RenderContainer/RenderContainer/RenderContainer.js +3 -1
- package/internal/RenderContainer/RenderContainer/RenderContainer.js.map +1 -1
- package/internal/RenderContainer/RenderContainer.d.ts +2 -0
- package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js +5 -4
- package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js.map +1 -1
- package/internal/ZIndex/ZIndex/ZIndex.js +55 -7
- package/internal/ZIndex/ZIndex/ZIndex.js.map +1 -1
- package/internal/ZIndex/ZIndex.d.ts +7 -3
- package/lib/listenFocusOutside/listenFocusOutside.js +3 -2
- package/lib/listenFocusOutside/listenFocusOutside.js.map +1 -1
- 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
|
|
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");
|
|
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(
|
|
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":"
|
|
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", {
|
|
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
|
|
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
|
|
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.
|
|
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(
|
|
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("[
|
|
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":"wRAAA;AACA;AACA;;AAEA;AACA,kC;;;;;;;AAOA,IAAMA,QAAoC,GAAG,EAA7C;;AAEA,SAASC,cAAT,GAA0B;AACxB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACE,sDAAaC,QAAb,2CAAuBC,IAAvB,CAA4BC,gBAA5B;AACEC,sBAAY,OAAZ,GAAuB,SADzB;AAEEA,sBAAY,qBAASC,iBAAT,EAA4B,CAA5B,EAA+B,EAAEC,OAAO,EAAE,IAAX,EAAiBC,QAAQ,EAAE,KAA3B,EAA/B,CAAZ,GAAiFF,iBAFnF;AAGE,IAAEG,OAAO,EAAE,IAAX,EAHF;;AAKD;;AAED,IAAI,sDAAaP,QAAb,4CAAuBQ,UAAvB,MAAsC,UAA1C,EAAsD;AACpDT,EAAAA,cAAc;AACf,CAFD,MAEO;AACLU,6BAAaP,gBAAb,+CAAaA,gBAAb,CAAgC,MAAhC,EAAwCH,cAAxC;AACD;;AAED,SAASK,iBAAT,CAA2BM,KAA3B,EAA2C;AACzC;AACA,MAAMC,MAAe,GAAID,KAAK,CAACC,MAAN,IAAgBD,KAAK,CAACE,UAA/C;;AAEAd,EAAAA,QAAQ,CAACe,OAAT,CAAiB,UAACC,OAAD,EAAa;AAC5B,QAAIC,QAAQ,GAAGD,OAAO,CAACC,QAAvB;AACA,QAAI,OAAOA,QAAP,KAAoB,UAAxB,EAAoC;AAClCA,MAAAA,QAAQ,GAAGA,QAAQ,EAAnB;AACD;;AAED,QAAIA,QAAQ,CAACC,IAAT,CAAcC,+BAA+B,CAACN,MAAD,CAA7C,CAAJ,EAA4D;AAC1D;AACD;AACDO,sBAASC,uBAAT,CAAiC,oBAAML,OAAO,CAACM,QAAR,CAAiBV,KAAjB,CAAN,EAAjC;AACD,GAVD;AAWD;;AAEM,SAASO,+BAAT,CAAyCN,MAAzC,EAA0D;AAC/D,SAAO,UAACU,OAAD,EAAsB;AAC3B,QAAI,CAACA,OAAL,EAAc;AACZ,aAAO,KAAP;AACD;AACD,QAAIA,OAAO,CAACC,QAAR,CAAiBX,MAAjB,CAAJ,EAA8B;AAC5B,aAAO,IAAP;AACD;AACD,QAAMY,SAAS,GAAGC,mBAAmB,CAACb,MAAD,EAASU,OAAT,CAArC;AACA,WAAO,CAAC,CAACE,SAAF,IAAeF,OAAO,CAACC,QAAR,CAAiBC,SAAjB,CAAtB;AACD,GATD;AAUD;;AAED;AACA;AACA;AACO,SAASC,mBAAT,CAA6BC,IAA7B,EAA4CC,QAA5C,EAA+DH,SAA/D,EAAoG;AACzG,MAAMI,WAAW,GAAGF,IAAI,CAACG,UAAzB;AACA;AACE,GAACD,WAAD;AACAF,EAAAA,IAAI,KAAKC,QADT;AAEAC,EAAAA,WAAW,KAAKD,QAFhB;AAGAC,EAAAA,WAAW,gCAAKlB,2BAAaT,QAAlB,qBAAK,uBAAuBC,IAA5B,CAHX;AAIA0B,EAAAA,WAAW,gCAAKlB,2BAAaT,QAAlB,qBAAK,uBAAuB6B,eAA5B,CAJX;AAKA,GAAC,gCAAaF,WAAb,EAA0BlB,2BAAaqB,OAAvC,CANH;AAOE;AACA,WAAOP,SAAS,GAAGA,SAAH,GAAe,IAA/B;AACD;;AAED,MAAMQ,cAAc,GAAGJ,WAAW,CAACK,YAAZ,
|
|
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
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
+
```
|