@skbkontur/react-ui 4.19.0 → 4.19.1

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 (39) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/cjs/components/GlobalLoader/GlobalLoader.js +3 -3
  3. package/cjs/components/GlobalLoader/GlobalLoader.js.map +1 -1
  4. package/cjs/components/Switcher/Switcher.d.ts +1 -1
  5. package/cjs/components/Switcher/Switcher.js.map +1 -1
  6. package/cjs/components/Textarea/Textarea.d.ts +1 -0
  7. package/cjs/components/Textarea/Textarea.js +20 -3
  8. package/cjs/components/Textarea/Textarea.js.map +1 -1
  9. package/cjs/components/Textarea/TextareaWithSafari17Workaround.d.ts +6 -0
  10. package/cjs/components/Textarea/TextareaWithSafari17Workaround.js +20 -0
  11. package/cjs/components/Textarea/TextareaWithSafari17Workaround.js.map +1 -0
  12. package/cjs/lib/client.d.ts +1 -0
  13. package/cjs/lib/client.js +4 -2
  14. package/cjs/lib/client.js.map +1 -1
  15. package/cjs/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +26 -0
  16. package/cjs/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +1 -0
  17. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
  18. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +3 -1
  19. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  20. package/components/GlobalLoader/GlobalLoader/GlobalLoader.js +5 -5
  21. package/components/GlobalLoader/GlobalLoader/GlobalLoader.js.map +1 -1
  22. package/components/Switcher/Switcher/Switcher.js.map +1 -1
  23. package/components/Switcher/Switcher.d.ts +1 -1
  24. package/components/Textarea/Textarea/Textarea.js +13 -7
  25. package/components/Textarea/Textarea/Textarea.js.map +1 -1
  26. package/components/Textarea/Textarea.d.ts +1 -0
  27. package/components/Textarea/TextareaWithSafari17Workaround/TextareaWithSafari17Workaround.js +21 -0
  28. package/components/Textarea/TextareaWithSafari17Workaround/TextareaWithSafari17Workaround.js.map +1 -0
  29. package/components/Textarea/TextareaWithSafari17Workaround/package.json +6 -0
  30. package/components/Textarea/TextareaWithSafari17Workaround.d.ts +6 -0
  31. package/lib/client/client.js +2 -1
  32. package/lib/client/client.js.map +1 -1
  33. package/lib/client.d.ts +1 -0
  34. package/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +26 -0
  35. package/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +1 -0
  36. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js +2 -1
  37. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  38. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
  39. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -3,6 +3,23 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.19.1](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.19.0...@skbkontur/react-ui@4.19.1) (2024-01-25)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **GlobalLoader:** fix warning in strict mode ([#3335](https://github.com/skbkontur/retail-ui/issues/3335)) ([f9ba1bc](https://github.com/skbkontur/retail-ui/commit/f9ba1bcaa1f5e4d5d6bbd07442b37af0c935f0ee))
12
+ * **Switcher:** export SwitcherItems type ([#3342](https://github.com/skbkontur/retail-ui/issues/3342)) ([718b05f](https://github.com/skbkontur/retail-ui/commit/718b05fba9ff1546b50d6b36914c9616cc42fb3b))
13
+
14
+
15
+ ### Features
16
+
17
+ * **Textarea:** add feature flag `textareaUseSafari17Workaround` ([#3352](https://github.com/skbkontur/retail-ui/issues/3352)) ([e40c88b](https://github.com/skbkontur/retail-ui/commit/e40c88bd8b0a47015842d8125348dc066ef30e0e))
18
+
19
+
20
+
21
+
22
+
6
23
  # [4.19.0](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@4.18.0...@skbkontur/react-ui@4.19.0) (2023-12-15)
7
24
 
8
25
 
@@ -1,4 +1,4 @@
1
- "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.GlobalLoaderDataTids = exports.GlobalLoader = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _react = _interopRequireDefault(require("react"));
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.GlobalLoaderDataTids = exports.GlobalLoader = 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 _lodash = _interopRequireDefault(require("lodash.debounce"));
3
3
 
4
4
  var _currentEnvironment = require("../../lib/currentEnvironment");
@@ -103,7 +103,7 @@ GlobalLoader = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/
103
103
 
104
104
 
105
105
 
106
- function GlobalLoader(props) {var _currentGlobalLoader;var _this;
106
+ function GlobalLoader(props) {var _this;
107
107
  _this = _React$Component.call(this, props) || this;_this.getProps = (0, _createPropsGetter.createPropsGetter)(GlobalLoader.defaultProps);_this.startTask = (0, _lodash.default)(function () {_this.setState({ visible: true });_this.props.onStart == null ? void 0 : _this.props.onStart();}, _this.getProps().delayBeforeShow);_this.stopTask = (0, _lodash.default)(function () {_this.setState({ visible: false, successAnimationInProgress: false, started: false });_this.props.onDone == null ? void 0 : _this.props.onDone();}, _this.getProps().delayBeforeHide);_this.resumeTaskAfterSuccessAnimation = (0, _lodash.default)(function () {_this.setActive();}, _this.getProps().delayBeforeHide);_this.
108
108
 
109
109
 
@@ -266,7 +266,7 @@ GlobalLoader = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/
266
266
  _this.setState({
267
267
  dead: true });
268
268
 
269
- };_this.state = { started: false, visible: false, done: false, rejected: false, accept: false, dead: false, successAnimationInProgress: false, expectedResponseTime: _this.getProps().expectedResponseTime };(_currentGlobalLoader = currentGlobalLoader) == null ? void 0 : _currentGlobalLoader.kill();currentGlobalLoader = (0, _assertThisInitialized2.default)(_this);return _this;}var _proto = GlobalLoader.prototype;_proto.componentDidMount = function componentDidMount() {var _this$getProps = this.getProps(),active = _this$getProps.active,rejected = _this$getProps.rejected;if (active) {this.setActive();}if (rejected) {this.setReject(true);}};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var _this$getProps2 = this.getProps(),expectedResponseTime = _this$getProps2.expectedResponseTime,rejected = _this$getProps2.rejected,active = _this$getProps2.active;if (expectedResponseTime !== prevProps.expectedResponseTime) {this.setState({ expectedResponseTime: expectedResponseTime });}if (rejected !== prevProps.rejected) {this.setReject(rejected);}if (active !== prevProps.active) {if (active) {this.setActive();} else {this.setDone();}}};_proto.render = function render() {var status = 'standard';if (this.state.done) {status = 'success';} else if (this.state.rejected) {status = 'error';} else if (this.state.accept) {status = 'accept';}var _this$getProps3 = this.getProps(),delayBeforeHide = _this$getProps3.delayBeforeHide,disableAnimations = _this$getProps3.disableAnimations;return !this.state.dead && this.state.visible && /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(_GlobalLoaderView.GlobalLoaderView, { expectedResponseTime: this.state.expectedResponseTime, delayBeforeHide: delayBeforeHide, status: status, "data-tid": GlobalLoaderDataTids.root, disableAnimations: disableAnimations }));} /**
269
+ };_this.state = { started: false, visible: false, done: false, rejected: false, accept: false, dead: false, successAnimationInProgress: false, expectedResponseTime: _this.getProps().expectedResponseTime };return _this;}var _proto = GlobalLoader.prototype;_proto.componentDidMount = function componentDidMount() {var _currentGlobalLoader;(_currentGlobalLoader = currentGlobalLoader) == null ? void 0 : _currentGlobalLoader.kill();currentGlobalLoader = this;var _this$getProps = this.getProps(),active = _this$getProps.active,rejected = _this$getProps.rejected;if (active) {this.setActive();}if (rejected) {this.setReject(true);}};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var _this$getProps2 = this.getProps(),expectedResponseTime = _this$getProps2.expectedResponseTime,rejected = _this$getProps2.rejected,active = _this$getProps2.active;if (expectedResponseTime !== prevProps.expectedResponseTime) {this.setState({ expectedResponseTime: expectedResponseTime });}if (rejected !== prevProps.rejected) {this.setReject(rejected);}if (active !== prevProps.active) {if (active) {this.setActive();} else {this.setDone();}}};_proto.render = function render() {var status = 'standard';if (this.state.done) {status = 'success';} else if (this.state.rejected) {status = 'error';} else if (this.state.accept) {status = 'accept';}var _this$getProps3 = this.getProps(),delayBeforeHide = _this$getProps3.delayBeforeHide,disableAnimations = _this$getProps3.disableAnimations;return !this.state.dead && this.state.visible && /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement(_GlobalLoaderView.GlobalLoaderView, { expectedResponseTime: this.state.expectedResponseTime, delayBeforeHide: delayBeforeHide, status: status, "data-tid": GlobalLoaderDataTids.root, disableAnimations: disableAnimations }));} /**
270
270
  * Запускает анимацию лоадера <br />
271
271
  * Равносильно установке пропа `active = true`
272
272
  *
@@ -1 +1 @@
1
- {"version":3,"sources":["GlobalLoader.tsx"],"names":["GlobalLoaderDataTids","root","currentGlobalLoader","GlobalLoader","rootNode","props","getProps","defaultProps","startTask","setState","visible","onStart","delayBeforeShow","stopTask","successAnimationInProgress","started","onDone","delayBeforeHide","resumeTaskAfterSuccessAnimation","setActive","cancel","state","done","rejected","accept","setReject","setDone","reject","active","onReject","onAccept","kill","dead","expectedResponseTime","componentDidMount","componentDidUpdate","prevProps","render","status","disableAnimations","setRootNode","updateExpectedResponseTime","React","Component","isTestEnv","start"],"mappings":"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","sourcesContent":["import React from 'react';\nimport debounce from 'lodash.debounce';\n\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonWrapper } from '../../internal/CommonWrapper';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { GlobalLoaderView, GlobalLoaderViewProps } from './GlobalLoaderView';\n\nexport interface GlobalLoaderProps {\n /**\n * Время(ms) до появления лоадера\n */\n delayBeforeShow?: number;\n /**\n * Время(ms) до исчезновения лоадера\n */\n delayBeforeHide?: number;\n /**\n * Ожидаемое время(ms) ответа сервера\n */\n expectedResponseTime?: number;\n /**\n * Анимация лоадера в виде спиннера\n */\n rejected?: boolean;\n /**\n * Показывать лоадер\n */\n active?: boolean;\n /**\n * Не показывать анимацию\n */\n disableAnimations?: boolean;\n /**\n * Коллбек, вызывающийся после появления лоадера\n */\n onStart?(): void;\n /**\n * Коллбек, вызывающийся после исчезновения лоадера\n */\n onDone?(): void;\n /**\n * Коллбек, вызывающийся после вызова `GlobalLoader.reject()`.\n * Или после установки пропа `rejected = true`\n */\n onReject?(): void;\n /**\n * Коллбек, вызывающийся после вызова `GlobalLoader.accept()`.\n * Или после установки пропа `rejected = false`\n */\n onAccept?(): void;\n}\nexport interface GlobalLoaderState {\n visible: boolean;\n done: boolean;\n rejected: boolean;\n accept: boolean;\n dead: boolean;\n successAnimationInProgress: boolean;\n expectedResponseTime: number;\n started: boolean;\n}\n\nexport const GlobalLoaderDataTids = {\n root: 'GlobalLoader',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n GlobalLoaderProps,\n 'expectedResponseTime' | 'delayBeforeShow' | 'delayBeforeHide' | 'rejected' | 'active' | 'disableAnimations'\n >\n>;\n\nlet currentGlobalLoader: GlobalLoader;\n@rootNode\nexport class GlobalLoader extends React.Component<GlobalLoaderProps, GlobalLoaderState> {\n private setRootNode!: TSetRootNode;\n private getProps = createPropsGetter(GlobalLoader.defaultProps);\n\n private readonly startTask = debounce(() => {\n this.setState({ visible: true });\n this.props.onStart?.();\n }, this.getProps().delayBeforeShow);\n\n private readonly stopTask = debounce(() => {\n this.setState({ visible: false, successAnimationInProgress: false, started: false });\n this.props.onDone?.();\n }, this.getProps().delayBeforeHide);\n\n private readonly resumeTaskAfterSuccessAnimation = debounce(() => {\n this.setActive();\n }, this.getProps().delayBeforeHide);\n\n public static defaultProps: DefaultProps = {\n expectedResponseTime: 1000,\n delayBeforeShow: 1000,\n delayBeforeHide: 1000,\n rejected: false,\n active: false,\n disableAnimations: isTestEnv,\n };\n\n constructor(props: GlobalLoaderProps) {\n super(props);\n this.state = {\n started: false,\n visible: false,\n done: false,\n rejected: false,\n accept: false,\n dead: false,\n successAnimationInProgress: false,\n expectedResponseTime: this.getProps().expectedResponseTime,\n };\n currentGlobalLoader?.kill();\n currentGlobalLoader = this;\n }\n componentDidMount() {\n const { active, rejected } = this.getProps();\n if (active) {\n this.setActive();\n }\n if (rejected) {\n this.setReject(true);\n }\n }\n\n componentDidUpdate(prevProps: Readonly<GlobalLoaderProps>) {\n const { expectedResponseTime, rejected, active } = this.getProps();\n if (expectedResponseTime !== prevProps.expectedResponseTime) {\n this.setState({ expectedResponseTime });\n }\n if (rejected !== prevProps.rejected) {\n this.setReject(rejected);\n }\n if (active !== prevProps.active) {\n if (active) {\n this.setActive();\n } else {\n this.setDone();\n }\n }\n }\n\n public render() {\n let status: GlobalLoaderViewProps['status'] = 'standard';\n\n if (this.state.done) {\n status = 'success';\n } else if (this.state.rejected) {\n status = 'error';\n } else if (this.state.accept) {\n status = 'accept';\n }\n const { delayBeforeHide, disableAnimations } = this.getProps();\n return (\n !this.state.dead &&\n this.state.visible && (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <GlobalLoaderView\n expectedResponseTime={this.state.expectedResponseTime}\n delayBeforeHide={delayBeforeHide}\n status={status}\n data-tid={GlobalLoaderDataTids.root}\n disableAnimations={disableAnimations}\n />\n </CommonWrapper>\n )\n );\n }\n\n /**\n * Запускает анимацию лоадера <br />\n * Равносильно установке пропа `active = true`\n *\n * @public\n */\n public static start = (expectedResponseTime?: number) => {\n currentGlobalLoader.setActive();\n if (typeof expectedResponseTime === 'number') {\n currentGlobalLoader.updateExpectedResponseTime(expectedResponseTime);\n }\n };\n\n /**\n * Показывает анимацию успешного завершения загрузки <br />\n * Равносильно установке пропа `active = false`\n *\n * @public\n */\n public static done = () => {\n currentGlobalLoader.setDone();\n };\n\n /**\n * Переключает анимацию лоадера в состояние спиннера <br />\n * Равносильно установке пропа `rejected = true`\n *\n * @public\n */\n public static reject = () => {\n currentGlobalLoader.setReject(true);\n };\n\n /**\n * Возвращает лоадер из состояния спиннера в обычное и продолжает анимацию с того места, на котором она была прерван <br />\n * Равносильно установке пропа `rejected = false`\n *\n * @public\n */\n public static accept = () => {\n currentGlobalLoader.setReject(false);\n };\n\n public setActive = () => {\n this.startTask.cancel();\n if (this.state.successAnimationInProgress) {\n this.resumeTaskAfterSuccessAnimation();\n } else {\n this.setState({ visible: false, done: false, rejected: false, accept: false, started: true });\n if (this.getProps().rejected) {\n this.setReject(true);\n } else {\n this.stopTask.cancel();\n this.startTask();\n }\n }\n };\n\n public setDone = () => {\n if (!this.state.started) {\n return;\n }\n this.setState({ done: true, successAnimationInProgress: true });\n this.startTask.cancel();\n this.resumeTaskAfterSuccessAnimation.cancel();\n this.stopTask();\n };\n\n public setReject = (reject: boolean) => {\n if (!this.state.visible && (this.state.started || this.getProps().active)) {\n this.setState({ visible: true });\n }\n this.startTask.cancel();\n this.stopTask.cancel();\n if (reject) {\n this.props.onReject?.();\n } else if (this.state.rejected) {\n this.setState({ accept: true });\n this.props.onAccept?.();\n }\n this.setState({ rejected: reject });\n };\n\n public updateExpectedResponseTime(expectedResponseTime: number) {\n this.setState({ expectedResponseTime });\n }\n\n public kill = () => {\n this.stopTask.cancel();\n this.startTask.cancel();\n this.resumeTaskAfterSuccessAnimation.cancel();\n this.setState({\n dead: true,\n });\n };\n}\n"]}
1
+ {"version":3,"sources":["GlobalLoader.tsx"],"names":["GlobalLoaderDataTids","root","currentGlobalLoader","GlobalLoader","rootNode","props","getProps","defaultProps","startTask","setState","visible","onStart","delayBeforeShow","stopTask","successAnimationInProgress","started","onDone","delayBeforeHide","resumeTaskAfterSuccessAnimation","setActive","cancel","state","done","rejected","accept","setReject","setDone","reject","active","onReject","onAccept","kill","dead","expectedResponseTime","componentDidMount","componentDidUpdate","prevProps","render","status","disableAnimations","setRootNode","updateExpectedResponseTime","React","Component","isTestEnv","start"],"mappings":"yWAAA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDO,IAAMA,oBAAoB,GAAG;AAClCC,EAAAA,IAAI,EAAE,cAD4B,EAA7B,C;;;;;;;;;;AAWP,IAAIC,mBAAJ,C;;AAEaC,Y,OADZC,kB;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BC,wBAAYC,KAAZ,EAAsC;AACpC,wCAAMA,KAAN,UADoC,MAzB9BC,QAyB8B,GAzBnB,0CAAkBH,YAAY,CAACI,YAA/B,CAyBmB,OAvBrBC,SAuBqB,GAvBT,qBAAS,YAAM,CAC1C,MAAKC,QAAL,CAAc,EAAEC,OAAO,EAAE,IAAX,EAAd,EACA,MAAKL,KAAL,CAAWM,OAAX,0BAAKN,KAAL,CAAWM,OAAX,GACD,CAH4B,EAG1B,MAAKL,QAAL,GAAgBM,eAHU,CAuBS,OAlBrBC,QAkBqB,GAlBV,qBAAS,YAAM,CACzC,MAAKJ,QAAL,CAAc,EAAEC,OAAO,EAAE,KAAX,EAAkBI,0BAA0B,EAAE,KAA9C,EAAqDC,OAAO,EAAE,KAA9D,EAAd,EACA,MAAKV,KAAL,CAAWW,MAAX,0BAAKX,KAAL,CAAWW,MAAX,GACD,CAH2B,EAGzB,MAAKV,QAAL,GAAgBW,eAHS,CAkBU,OAbrBC,+BAaqB,GAba,qBAAS,YAAM,CAChE,MAAKC,SAAL,GACD,CAFkD,EAEhD,MAAKb,QAAL,GAAgBW,eAFgC,CAab;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgH/BE,IAAAA,SAhH+B,GAgHnB,YAAM;AACvB,YAAKX,SAAL,CAAeY,MAAf;AACA,UAAI,MAAKC,KAAL,CAAWP,0BAAf,EAA2C;AACzC,cAAKI,+BAAL;AACD,OAFD,MAEO;AACL,cAAKT,QAAL,CAAc,EAAEC,OAAO,EAAE,KAAX,EAAkBY,IAAI,EAAE,KAAxB,EAA+BC,QAAQ,EAAE,KAAzC,EAAgDC,MAAM,EAAE,KAAxD,EAA+DT,OAAO,EAAE,IAAxE,EAAd;AACA,YAAI,MAAKT,QAAL,GAAgBiB,QAApB,EAA8B;AAC5B,gBAAKE,SAAL,CAAe,IAAf;AACD,SAFD,MAEO;AACL,gBAAKZ,QAAL,CAAcO,MAAd;AACA,gBAAKZ,SAAL;AACD;AACF;AACF,KA7HqC;;AA+H/BkB,IAAAA,OA/H+B,GA+HrB,YAAM;AACrB,UAAI,CAAC,MAAKL,KAAL,CAAWN,OAAhB,EAAyB;AACvB;AACD;AACD,YAAKN,QAAL,CAAc,EAAEa,IAAI,EAAE,IAAR,EAAcR,0BAA0B,EAAE,IAA1C,EAAd;AACA,YAAKN,SAAL,CAAeY,MAAf;AACA,YAAKF,+BAAL,CAAqCE,MAArC;AACA,YAAKP,QAAL;AACD,KAvIqC;;AAyI/BY,IAAAA,SAzI+B,GAyInB,UAACE,MAAD,EAAqB;AACtC,UAAI,CAAC,MAAKN,KAAL,CAAWX,OAAZ,KAAwB,MAAKW,KAAL,CAAWN,OAAX,IAAsB,MAAKT,QAAL,GAAgBsB,MAA9D,CAAJ,EAA2E;AACzE,cAAKnB,QAAL,CAAc,EAAEC,OAAO,EAAE,IAAX,EAAd;AACD;AACD,YAAKF,SAAL,CAAeY,MAAf;AACA,YAAKP,QAAL,CAAcO,MAAd;AACA,UAAIO,MAAJ,EAAY;AACV,cAAKtB,KAAL,CAAWwB,QAAX,0BAAKxB,KAAL,CAAWwB,QAAX;AACD,OAFD,MAEO,IAAI,MAAKR,KAAL,CAAWE,QAAf,EAAyB;AAC9B,cAAKd,QAAL,CAAc,EAAEe,MAAM,EAAE,IAAV,EAAd;AACA,cAAKnB,KAAL,CAAWyB,QAAX,0BAAKzB,KAAL,CAAWyB,QAAX;AACD;AACD,YAAKrB,QAAL,CAAc,EAAEc,QAAQ,EAAEI,MAAZ,EAAd;AACD,KAtJqC;;;;;;AA4J/BI,IAAAA,IA5J+B,GA4JxB,YAAM;AAClB,YAAKlB,QAAL,CAAcO,MAAd;AACA,YAAKZ,SAAL,CAAeY,MAAf;AACA,YAAKF,+BAAL,CAAqCE,MAArC;AACA,YAAKX,QAAL,CAAc;AACZuB,QAAAA,IAAI,EAAE,IADM,EAAd;;AAGD,KAnKqC,CAEpC,MAAKX,KAAL,GAAa,EACXN,OAAO,EAAE,KADE,EAEXL,OAAO,EAAE,KAFE,EAGXY,IAAI,EAAE,KAHK,EAIXC,QAAQ,EAAE,KAJC,EAKXC,MAAM,EAAE,KALG,EAMXQ,IAAI,EAAE,KANK,EAOXlB,0BAA0B,EAAE,KAPjB,EAQXmB,oBAAoB,EAAE,MAAK3B,QAAL,GAAgB2B,oBAR3B,EAAb,CAFoC,aAYrC,C,2CACDC,iB,GAAA,6BAAoB,0BAClB,wBAAAhC,mBAAmB,SAAnB,iCAAqB6B,IAArB,GACA7B,mBAAmB,GAAG,IAAtB,CACA,qBAA6B,KAAKI,QAAL,EAA7B,CAAQsB,MAAR,kBAAQA,MAAR,CAAgBL,QAAhB,kBAAgBA,QAAhB,CACA,IAAIK,MAAJ,EAAY,CACV,KAAKT,SAAL,GACD,CACD,IAAII,QAAJ,EAAc,CACZ,KAAKE,SAAL,CAAe,IAAf,EACD,CACF,C,QAEDU,kB,GAAA,4BAAmBC,SAAnB,EAA2D,CACzD,sBAAmD,KAAK9B,QAAL,EAAnD,CAAQ2B,oBAAR,mBAAQA,oBAAR,CAA8BV,QAA9B,mBAA8BA,QAA9B,CAAwCK,MAAxC,mBAAwCA,MAAxC,CACA,IAAIK,oBAAoB,KAAKG,SAAS,CAACH,oBAAvC,EAA6D,CAC3D,KAAKxB,QAAL,CAAc,EAAEwB,oBAAoB,EAApBA,oBAAF,EAAd,EACD,CACD,IAAIV,QAAQ,KAAKa,SAAS,CAACb,QAA3B,EAAqC,CACnC,KAAKE,SAAL,CAAeF,QAAf,EACD,CACD,IAAIK,MAAM,KAAKQ,SAAS,CAACR,MAAzB,EAAiC,CAC/B,IAAIA,MAAJ,EAAY,CACV,KAAKT,SAAL,GACD,CAFD,MAEO,CACL,KAAKO,OAAL,GACD,CACF,CACF,C,QAEMW,M,GAAP,kBAAgB,CACd,IAAIC,MAAuC,GAAG,UAA9C,CAEA,IAAI,KAAKjB,KAAL,CAAWC,IAAf,EAAqB,CACnBgB,MAAM,GAAG,SAAT,CACD,CAFD,MAEO,IAAI,KAAKjB,KAAL,CAAWE,QAAf,EAAyB,CAC9Be,MAAM,GAAG,OAAT,CACD,CAFM,MAEA,IAAI,KAAKjB,KAAL,CAAWG,MAAf,EAAuB,CAC5Bc,MAAM,GAAG,QAAT,CACD,CACD,sBAA+C,KAAKhC,QAAL,EAA/C,CAAQW,eAAR,mBAAQA,eAAR,CAAyBsB,iBAAzB,mBAAyBA,iBAAzB,CACA,OACE,CAAC,KAAKlB,KAAL,CAAWW,IAAZ,IACA,KAAKX,KAAL,CAAWX,OADX,iBAEE,6BAAC,4BAAD,2BAAe,WAAW,EAAE,KAAK8B,WAAjC,IAAkD,KAAKnC,KAAvD,gBACE,6BAAC,kCAAD,IACE,oBAAoB,EAAE,KAAKgB,KAAL,CAAWY,oBADnC,EAEE,eAAe,EAAEhB,eAFnB,EAGE,MAAM,EAAEqB,MAHV,EAIE,YAAUtC,oBAAoB,CAACC,IAJjC,EAKE,iBAAiB,EAAEsC,iBALrB,GADF,CAHJ,CAcD,C,CAED;AACF;AACA;AACA;AACA;AACA,K,QA8ESE,0B,GAAP,oCAAkCR,oBAAlC,EAAgE,CAC9D,KAAKxB,QAAL,CAAc,EAAEwB,oBAAoB,EAApBA,oBAAF,EAAd,EACD,C,uBArL+BS,eAAMC,S,WAkBxBpC,Y,GAA6B,EACzC0B,oBAAoB,EAAE,IADmB,EAEzCrB,eAAe,EAAE,IAFwB,EAGzCK,eAAe,EAAE,IAHwB,EAIzCM,QAAQ,EAAE,KAJ+B,EAKzCK,MAAM,EAAE,KALiC,EAMzCW,iBAAiB,EAAEK,6BANsB,E,UAoF7BC,K,GAAQ,UAACZ,oBAAD,EAAmC,CACvD/B,mBAAmB,CAACiB,SAApB,GACA,IAAI,OAAOc,oBAAP,KAAgC,QAApC,EAA8C,CAC5C/B,mBAAmB,CAACuC,0BAApB,CAA+CR,oBAA/C,EACD,CACF,C,UAQaX,I,GAAO,YAAM,CACzBpB,mBAAmB,CAACwB,OAApB,GACD,C,UAQaC,M,GAAS,YAAM,CAC3BzB,mBAAmB,CAACuB,SAApB,CAA8B,IAA9B,EACD,C,UAQaD,M,GAAS,YAAM,CAC3BtB,mBAAmB,CAACuB,SAApB,CAA8B,KAA9B,EACD,C","sourcesContent":["import React from 'react';\nimport debounce from 'lodash.debounce';\n\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonWrapper } from '../../internal/CommonWrapper';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { GlobalLoaderView, GlobalLoaderViewProps } from './GlobalLoaderView';\n\nexport interface GlobalLoaderProps {\n /**\n * Время(ms) до появления лоадера\n */\n delayBeforeShow?: number;\n /**\n * Время(ms) до исчезновения лоадера\n */\n delayBeforeHide?: number;\n /**\n * Ожидаемое время(ms) ответа сервера\n */\n expectedResponseTime?: number;\n /**\n * Анимация лоадера в виде спиннера\n */\n rejected?: boolean;\n /**\n * Показывать лоадер\n */\n active?: boolean;\n /**\n * Не показывать анимацию\n */\n disableAnimations?: boolean;\n /**\n * Коллбек, вызывающийся после появления лоадера\n */\n onStart?(): void;\n /**\n * Коллбек, вызывающийся после исчезновения лоадера\n */\n onDone?(): void;\n /**\n * Коллбек, вызывающийся после вызова `GlobalLoader.reject()`.\n * Или после установки пропа `rejected = true`\n */\n onReject?(): void;\n /**\n * Коллбек, вызывающийся после вызова `GlobalLoader.accept()`.\n * Или после установки пропа `rejected = false`\n */\n onAccept?(): void;\n}\nexport interface GlobalLoaderState {\n visible: boolean;\n done: boolean;\n rejected: boolean;\n accept: boolean;\n dead: boolean;\n successAnimationInProgress: boolean;\n expectedResponseTime: number;\n started: boolean;\n}\n\nexport const GlobalLoaderDataTids = {\n root: 'GlobalLoader',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n GlobalLoaderProps,\n 'expectedResponseTime' | 'delayBeforeShow' | 'delayBeforeHide' | 'rejected' | 'active' | 'disableAnimations'\n >\n>;\n\nlet currentGlobalLoader: GlobalLoader;\n@rootNode\nexport class GlobalLoader extends React.Component<GlobalLoaderProps, GlobalLoaderState> {\n private setRootNode!: TSetRootNode;\n private getProps = createPropsGetter(GlobalLoader.defaultProps);\n\n private readonly startTask = debounce(() => {\n this.setState({ visible: true });\n this.props.onStart?.();\n }, this.getProps().delayBeforeShow);\n\n private readonly stopTask = debounce(() => {\n this.setState({ visible: false, successAnimationInProgress: false, started: false });\n this.props.onDone?.();\n }, this.getProps().delayBeforeHide);\n\n private readonly resumeTaskAfterSuccessAnimation = debounce(() => {\n this.setActive();\n }, this.getProps().delayBeforeHide);\n\n public static defaultProps: DefaultProps = {\n expectedResponseTime: 1000,\n delayBeforeShow: 1000,\n delayBeforeHide: 1000,\n rejected: false,\n active: false,\n disableAnimations: isTestEnv,\n };\n\n constructor(props: GlobalLoaderProps) {\n super(props);\n this.state = {\n started: false,\n visible: false,\n done: false,\n rejected: false,\n accept: false,\n dead: false,\n successAnimationInProgress: false,\n expectedResponseTime: this.getProps().expectedResponseTime,\n };\n }\n componentDidMount() {\n currentGlobalLoader?.kill();\n currentGlobalLoader = this;\n const { active, rejected } = this.getProps();\n if (active) {\n this.setActive();\n }\n if (rejected) {\n this.setReject(true);\n }\n }\n\n componentDidUpdate(prevProps: Readonly<GlobalLoaderProps>) {\n const { expectedResponseTime, rejected, active } = this.getProps();\n if (expectedResponseTime !== prevProps.expectedResponseTime) {\n this.setState({ expectedResponseTime });\n }\n if (rejected !== prevProps.rejected) {\n this.setReject(rejected);\n }\n if (active !== prevProps.active) {\n if (active) {\n this.setActive();\n } else {\n this.setDone();\n }\n }\n }\n\n public render() {\n let status: GlobalLoaderViewProps['status'] = 'standard';\n\n if (this.state.done) {\n status = 'success';\n } else if (this.state.rejected) {\n status = 'error';\n } else if (this.state.accept) {\n status = 'accept';\n }\n const { delayBeforeHide, disableAnimations } = this.getProps();\n return (\n !this.state.dead &&\n this.state.visible && (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <GlobalLoaderView\n expectedResponseTime={this.state.expectedResponseTime}\n delayBeforeHide={delayBeforeHide}\n status={status}\n data-tid={GlobalLoaderDataTids.root}\n disableAnimations={disableAnimations}\n />\n </CommonWrapper>\n )\n );\n }\n\n /**\n * Запускает анимацию лоадера <br />\n * Равносильно установке пропа `active = true`\n *\n * @public\n */\n public static start = (expectedResponseTime?: number) => {\n currentGlobalLoader.setActive();\n if (typeof expectedResponseTime === 'number') {\n currentGlobalLoader.updateExpectedResponseTime(expectedResponseTime);\n }\n };\n\n /**\n * Показывает анимацию успешного завершения загрузки <br />\n * Равносильно установке пропа `active = false`\n *\n * @public\n */\n public static done = () => {\n currentGlobalLoader.setDone();\n };\n\n /**\n * Переключает анимацию лоадера в состояние спиннера <br />\n * Равносильно установке пропа `rejected = true`\n *\n * @public\n */\n public static reject = () => {\n currentGlobalLoader.setReject(true);\n };\n\n /**\n * Возвращает лоадер из состояния спиннера в обычное и продолжает анимацию с того места, на котором она была прерван <br />\n * Равносильно установке пропа `rejected = false`\n *\n * @public\n */\n public static accept = () => {\n currentGlobalLoader.setReject(false);\n };\n\n public setActive = () => {\n this.startTask.cancel();\n if (this.state.successAnimationInProgress) {\n this.resumeTaskAfterSuccessAnimation();\n } else {\n this.setState({ visible: false, done: false, rejected: false, accept: false, started: true });\n if (this.getProps().rejected) {\n this.setReject(true);\n } else {\n this.stopTask.cancel();\n this.startTask();\n }\n }\n };\n\n public setDone = () => {\n if (!this.state.started) {\n return;\n }\n this.setState({ done: true, successAnimationInProgress: true });\n this.startTask.cancel();\n this.resumeTaskAfterSuccessAnimation.cancel();\n this.stopTask();\n };\n\n public setReject = (reject: boolean) => {\n if (!this.state.visible && (this.state.started || this.getProps().active)) {\n this.setState({ visible: true });\n }\n this.startTask.cancel();\n this.stopTask.cancel();\n if (reject) {\n this.props.onReject?.();\n } else if (this.state.rejected) {\n this.setState({ accept: true });\n this.props.onAccept?.();\n }\n this.setState({ rejected: reject });\n };\n\n public updateExpectedResponseTime(expectedResponseTime: number) {\n this.setState({ expectedResponseTime });\n }\n\n public kill = () => {\n this.stopTask.cancel();\n this.startTask.cancel();\n this.resumeTaskAfterSuccessAnimation.cancel();\n this.setState({\n dead: true,\n });\n };\n}\n"]}
@@ -8,7 +8,7 @@ import { SizeProp } from '../../lib/types/props';
8
8
  * @deprecated use SizeProp
9
9
  */
10
10
  export declare type SwitcherSize = SizeProp;
11
- declare type SwitcherItems = string | SwitcherItem;
11
+ export declare type SwitcherItems = string | SwitcherItem;
12
12
  export declare const SwitcherDataTids: {
13
13
  readonly root: "Switcher__root";
14
14
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["Switcher.tsx"],"names":["SwitcherDataTids","root","Switcher","rootNode","state","focusedIndex","selectItem","value","props","onValueChange","_extractPropsFromItem","item","label","_extractValuesFromItems","items","map","_focus","index","setState","handleKey","e","buttonProps","disabled","preventDefault","move","left","selectedIndex","newFocusedIndex","_getNextFocusedIndex","i","length","_handleFocus","currentIndex","indexOf","_handleBlur","_renderItems","size","role","renderItem","ariaLabel","itemValue","customButtonProps","isChecked","commonButtonProps","checked","visuallyFocused","onClick","disableFocus","corners","renderDefault","renderDefaultItem","getLabelSizeClassName","styles","captionLarge","theme","captionMedium","captionSmall","render","renderMain","listClassName","error","inputProps","type","onKeyDown","onFocus","onBlur","className","input","captionClassName","caption","setRootNode","wrap","React","Component","__KONTUR_REACT_UI__","defaultProps","propTypes","PropTypes","bool","oneOfType","arrayOf","string","shape","isRequired","func"],"mappings":"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","sourcesContent":["import React, { HTMLAttributes } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isKeyArrowHorizontal, isKeyArrowLeft, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { getButtonCorners, Group } from '../Group';\nimport { Button, ButtonProps } from '../Button';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { SizeProp } from '../../lib/types/props';\n\nimport { styles } from './Switcher.styles';\nimport { getSwitcherTheme } from './switcherTheme';\nimport { mod } from './helpers';\n\n/**\n * @deprecated use SizeProp\n */\nexport type SwitcherSize = SizeProp;\ntype SwitcherItems = string | SwitcherItem;\n\nexport const SwitcherDataTids = {\n root: 'Switcher__root',\n} as const;\n\nexport interface SwitcherProps extends Pick<HTMLAttributes<unknown>, 'role'>, CommonProps {\n /**\n * Список строк или список элементов типа `{ label: string, value: string, buttonProps?: Partial<ButtonProps> }`\n */\n items: SwitcherItems[];\n\n value?: string;\n\n onValueChange?: (value: string) => void;\n\n caption?: string;\n\n error?: boolean;\n\n /** Размер */\n size?: SizeProp;\n\n disabled?: boolean;\n\n /**\n * Функция для отрисовки элемента. Аргументы — `label`,\n * `value`, `buttonProps`, `renderDefault`, `ariaLabel`\n */\n renderItem?: (\n label: string,\n value: string,\n buttonProps: ButtonProps,\n renderDefault: () => React.ReactNode,\n ariaLabel?: string,\n ) => React.ReactNode;\n}\n\ntype DefaultProps = Required<Pick<SwitcherProps, 'role'>>;\n\nexport interface SwitcherState {\n focusedIndex: Nullable<number>;\n}\n\ninterface SwitcherItem {\n value: string;\n label: string;\n 'aria-label'?: string;\n buttonProps?: Partial<ButtonProps>;\n}\n\n@rootNode\nexport class Switcher extends React.Component<SwitcherProps, SwitcherState> {\n public static __KONTUR_REACT_UI__ = 'Switcher';\n\n public static defaultProps: DefaultProps = {\n role: 'switch',\n };\n\n public static propTypes = {\n error: PropTypes.bool,\n disabled: PropTypes.bool,\n items: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.string,\n }),\n ),\n ]).isRequired,\n caption: PropTypes.string,\n value: PropTypes.string,\n onValueChange: PropTypes.func,\n renderItem: PropTypes.func,\n };\n\n public state: SwitcherState = {\n focusedIndex: null,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getSwitcherTheme(theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const listClassName = cx({\n [styles.error(this.theme)]: !!this.props.error,\n });\n\n const inputProps = {\n type: 'checkbox',\n onKeyDown: this.handleKey,\n onFocus: this._handleFocus,\n onBlur: this._handleBlur,\n className: styles.input(),\n };\n\n const captionClassName = cx(styles.caption(this.theme), this.getLabelSizeClassName());\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={SwitcherDataTids.root} className={styles.root()}>\n {this.props.caption ? <div className={captionClassName}>{this.props.caption}</div> : null}\n <div className={styles.wrap()}>\n <input {...inputProps} />\n <div className={listClassName}>\n <Group>{this._renderItems()}</Group>\n </div>\n </div>\n </div>\n </CommonWrapper>\n );\n }\n\n private selectItem = (value: string) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private _extractPropsFromItem = (item: string | SwitcherItem): SwitcherItem => {\n return typeof item === 'object' ? item : { label: item, value: item };\n };\n\n private _extractValuesFromItems = (): string[] => {\n return this.props.items.map((item) => {\n const { value } = this._extractPropsFromItem(item);\n return value;\n });\n };\n\n private _focus = (index: number) => {\n this.setState({ focusedIndex: index });\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const focusedIndex = this.state.focusedIndex;\n if (typeof focusedIndex !== 'number') {\n return;\n }\n\n if (isKeyEnter(e)) {\n if (this.props.onValueChange) {\n const { value, buttonProps } = this._extractPropsFromItem(this.props.items[focusedIndex]);\n if (!buttonProps?.disabled) {\n this.selectItem(value);\n }\n }\n return;\n }\n\n if (isKeyArrowHorizontal(e)) {\n e.preventDefault();\n this.move(isKeyArrowLeft(e));\n }\n };\n\n private move = (left: boolean) => {\n const selectedIndex = this.state.focusedIndex;\n\n if (typeof selectedIndex !== 'number') {\n return;\n }\n const newFocusedIndex = this._getNextFocusedIndex(left, selectedIndex);\n this._focus(newFocusedIndex);\n };\n\n private _getNextFocusedIndex = (left: boolean, focusedIndex: number): number => {\n const { items, disabled } = this.props;\n if (disabled) {\n return focusedIndex;\n }\n\n for (let i = 1; i < items.length; i++) {\n const index = mod(focusedIndex + (left ? -i : i), items.length);\n const { buttonProps } = this._extractPropsFromItem(items[index]);\n if (!buttonProps?.disabled) {\n return index;\n }\n }\n return focusedIndex;\n };\n\n private _handleFocus = () => {\n const { value } = this.props;\n\n const items = this._extractValuesFromItems();\n const currentIndex = [...items].indexOf(value as string);\n const index = currentIndex > -1 ? currentIndex : 0;\n\n this.setState({ focusedIndex: index });\n };\n\n private _handleBlur = () => {\n this.setState({ focusedIndex: null });\n };\n\n private _renderItems = () => {\n const { items, value, size, disabled, role, renderItem } = this.props;\n return items.map((item, i) => {\n const {\n 'aria-label': ariaLabel,\n label,\n value: itemValue,\n buttonProps: customButtonProps,\n } = this._extractPropsFromItem(item);\n\n const isChecked = value === itemValue;\n const commonButtonProps = {\n 'aria-checked': isChecked,\n role,\n checked: isChecked,\n visuallyFocused: this.state.focusedIndex === i,\n onClick: () => {\n this.selectItem(itemValue);\n },\n disableFocus: true,\n size,\n disabled,\n corners: getButtonCorners(i === 0, i === items.length - 1),\n };\n\n const buttonProps = {\n ...commonButtonProps,\n ...customButtonProps,\n };\n\n const renderDefault = () => this.renderDefaultItem(label, itemValue, buttonProps, ariaLabel);\n\n return renderItem ? renderItem(label, itemValue, buttonProps, renderDefault, ariaLabel) : renderDefault();\n });\n };\n\n private renderDefaultItem = (label: string, value: string, buttonProps: ButtonProps, ariaLabel?: string) => (\n <Button aria-label={ariaLabel} key={value} {...buttonProps}>\n {label}\n </Button>\n );\n\n private getLabelSizeClassName = (): string => {\n switch (this.props.size) {\n case 'large':\n return styles.captionLarge(this.theme);\n case 'medium':\n return styles.captionMedium(this.theme);\n case 'small':\n default:\n return styles.captionSmall(this.theme);\n }\n };\n}\n"]}
1
+ {"version":3,"sources":["Switcher.tsx"],"names":["SwitcherDataTids","root","Switcher","rootNode","state","focusedIndex","selectItem","value","props","onValueChange","_extractPropsFromItem","item","label","_extractValuesFromItems","items","map","_focus","index","setState","handleKey","e","buttonProps","disabled","preventDefault","move","left","selectedIndex","newFocusedIndex","_getNextFocusedIndex","i","length","_handleFocus","currentIndex","indexOf","_handleBlur","_renderItems","size","role","renderItem","ariaLabel","itemValue","customButtonProps","isChecked","commonButtonProps","checked","visuallyFocused","onClick","disableFocus","corners","renderDefault","renderDefaultItem","getLabelSizeClassName","styles","captionLarge","theme","captionMedium","captionSmall","render","renderMain","listClassName","error","inputProps","type","onKeyDown","onFocus","onBlur","className","input","captionClassName","caption","setRootNode","wrap","React","Component","__KONTUR_REACT_UI__","defaultProps","propTypes","PropTypes","bool","oneOfType","arrayOf","string","shape","isRequired","func"],"mappings":"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","sourcesContent":["import React, { HTMLAttributes } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { isKeyArrowHorizontal, isKeyArrowLeft, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { getButtonCorners, Group } from '../Group';\nimport { Button, ButtonProps } from '../Button';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { SizeProp } from '../../lib/types/props';\n\nimport { styles } from './Switcher.styles';\nimport { getSwitcherTheme } from './switcherTheme';\nimport { mod } from './helpers';\n\n/**\n * @deprecated use SizeProp\n */\nexport type SwitcherSize = SizeProp;\nexport type SwitcherItems = string | SwitcherItem;\n\nexport const SwitcherDataTids = {\n root: 'Switcher__root',\n} as const;\n\nexport interface SwitcherProps extends Pick<HTMLAttributes<unknown>, 'role'>, CommonProps {\n /**\n * Список строк или список элементов типа `{ label: string, value: string, buttonProps?: Partial<ButtonProps> }`\n */\n items: SwitcherItems[];\n\n value?: string;\n\n onValueChange?: (value: string) => void;\n\n caption?: string;\n\n error?: boolean;\n\n /** Размер */\n size?: SizeProp;\n\n disabled?: boolean;\n\n /**\n * Функция для отрисовки элемента. Аргументы — `label`,\n * `value`, `buttonProps`, `renderDefault`, `ariaLabel`\n */\n renderItem?: (\n label: string,\n value: string,\n buttonProps: ButtonProps,\n renderDefault: () => React.ReactNode,\n ariaLabel?: string,\n ) => React.ReactNode;\n}\n\ntype DefaultProps = Required<Pick<SwitcherProps, 'role'>>;\n\nexport interface SwitcherState {\n focusedIndex: Nullable<number>;\n}\n\ninterface SwitcherItem {\n value: string;\n label: string;\n 'aria-label'?: string;\n buttonProps?: Partial<ButtonProps>;\n}\n\n@rootNode\nexport class Switcher extends React.Component<SwitcherProps, SwitcherState> {\n public static __KONTUR_REACT_UI__ = 'Switcher';\n\n public static defaultProps: DefaultProps = {\n role: 'switch',\n };\n\n public static propTypes = {\n error: PropTypes.bool,\n disabled: PropTypes.bool,\n items: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.string),\n PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.string,\n }),\n ),\n ]).isRequired,\n caption: PropTypes.string,\n value: PropTypes.string,\n onValueChange: PropTypes.func,\n renderItem: PropTypes.func,\n };\n\n public state: SwitcherState = {\n focusedIndex: null,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = getSwitcherTheme(theme);\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const listClassName = cx({\n [styles.error(this.theme)]: !!this.props.error,\n });\n\n const inputProps = {\n type: 'checkbox',\n onKeyDown: this.handleKey,\n onFocus: this._handleFocus,\n onBlur: this._handleBlur,\n className: styles.input(),\n };\n\n const captionClassName = cx(styles.caption(this.theme), this.getLabelSizeClassName());\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={SwitcherDataTids.root} className={styles.root()}>\n {this.props.caption ? <div className={captionClassName}>{this.props.caption}</div> : null}\n <div className={styles.wrap()}>\n <input {...inputProps} />\n <div className={listClassName}>\n <Group>{this._renderItems()}</Group>\n </div>\n </div>\n </div>\n </CommonWrapper>\n );\n }\n\n private selectItem = (value: string) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private _extractPropsFromItem = (item: string | SwitcherItem): SwitcherItem => {\n return typeof item === 'object' ? item : { label: item, value: item };\n };\n\n private _extractValuesFromItems = (): string[] => {\n return this.props.items.map((item) => {\n const { value } = this._extractPropsFromItem(item);\n return value;\n });\n };\n\n private _focus = (index: number) => {\n this.setState({ focusedIndex: index });\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLInputElement>) => {\n const focusedIndex = this.state.focusedIndex;\n if (typeof focusedIndex !== 'number') {\n return;\n }\n\n if (isKeyEnter(e)) {\n if (this.props.onValueChange) {\n const { value, buttonProps } = this._extractPropsFromItem(this.props.items[focusedIndex]);\n if (!buttonProps?.disabled) {\n this.selectItem(value);\n }\n }\n return;\n }\n\n if (isKeyArrowHorizontal(e)) {\n e.preventDefault();\n this.move(isKeyArrowLeft(e));\n }\n };\n\n private move = (left: boolean) => {\n const selectedIndex = this.state.focusedIndex;\n\n if (typeof selectedIndex !== 'number') {\n return;\n }\n const newFocusedIndex = this._getNextFocusedIndex(left, selectedIndex);\n this._focus(newFocusedIndex);\n };\n\n private _getNextFocusedIndex = (left: boolean, focusedIndex: number): number => {\n const { items, disabled } = this.props;\n if (disabled) {\n return focusedIndex;\n }\n\n for (let i = 1; i < items.length; i++) {\n const index = mod(focusedIndex + (left ? -i : i), items.length);\n const { buttonProps } = this._extractPropsFromItem(items[index]);\n if (!buttonProps?.disabled) {\n return index;\n }\n }\n return focusedIndex;\n };\n\n private _handleFocus = () => {\n const { value } = this.props;\n\n const items = this._extractValuesFromItems();\n const currentIndex = [...items].indexOf(value as string);\n const index = currentIndex > -1 ? currentIndex : 0;\n\n this.setState({ focusedIndex: index });\n };\n\n private _handleBlur = () => {\n this.setState({ focusedIndex: null });\n };\n\n private _renderItems = () => {\n const { items, value, size, disabled, role, renderItem } = this.props;\n return items.map((item, i) => {\n const {\n 'aria-label': ariaLabel,\n label,\n value: itemValue,\n buttonProps: customButtonProps,\n } = this._extractPropsFromItem(item);\n\n const isChecked = value === itemValue;\n const commonButtonProps = {\n 'aria-checked': isChecked,\n role,\n checked: isChecked,\n visuallyFocused: this.state.focusedIndex === i,\n onClick: () => {\n this.selectItem(itemValue);\n },\n disableFocus: true,\n size,\n disabled,\n corners: getButtonCorners(i === 0, i === items.length - 1),\n };\n\n const buttonProps = {\n ...commonButtonProps,\n ...customButtonProps,\n };\n\n const renderDefault = () => this.renderDefaultItem(label, itemValue, buttonProps, ariaLabel);\n\n return renderItem ? renderItem(label, itemValue, buttonProps, renderDefault, ariaLabel) : renderDefault();\n });\n };\n\n private renderDefaultItem = (label: string, value: string, buttonProps: ButtonProps, ariaLabel?: string) => (\n <Button aria-label={ariaLabel} key={value} {...buttonProps}>\n {label}\n </Button>\n );\n\n private getLabelSizeClassName = (): string => {\n switch (this.props.size) {\n case 'large':\n return styles.captionLarge(this.theme);\n case 'medium':\n return styles.captionMedium(this.theme);\n case 'small':\n default:\n return styles.captionSmall(this.theme);\n }\n };\n}\n"]}
@@ -140,6 +140,7 @@ export declare class Textarea extends React.Component<TextareaProps, TextareaSta
140
140
  };
141
141
  static defaultProps: DefaultProps;
142
142
  private getProps;
143
+ private featureFlags;
143
144
  private getRootSizeClassName;
144
145
  private getTextareaSizeClassName;
145
146
  state: {
@@ -20,10 +20,16 @@ var _Emotion = require("../../lib/theming/Emotion");
20
20
  var _rootNode = require("../../lib/rootNode");
21
21
  var _createPropsGetter = require("../../lib/createPropsGetter");
22
22
 
23
+ var _featureFlagsContext = require("../../lib/featureFlagsContext");
24
+
25
+
26
+
27
+
23
28
 
24
29
  var _TextareaHelpers = require("./TextareaHelpers");
25
30
  var _Textarea = require("./Textarea.styles");
26
- var _TextareaCounter = require("./TextareaCounter");var _excluded = ["width", "error", "warning", "size", "autoResize", "resize", "onCut", "onPaste", "maxRows", "onFocus", "selectAllOnFocus", "placeholder", "onValueChange", "showLengthCounter", "lengthCounter", "counterHelp", "extraRow", "disableAnimations", "disabled"];var _class, _class2, _temp;function _getRequireWildcardCache(nodeInterop) {if (typeof WeakMap !== "function") return null;var cacheBabelInterop = new WeakMap();var cacheNodeInterop = new WeakMap();return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {return nodeInterop ? cacheNodeInterop : cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj, nodeInterop) {if (!nodeInterop && obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache(nodeInterop);if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;}
31
+ var _TextareaCounter = require("./TextareaCounter");
32
+ var _TextareaWithSafari17Workaround = require("./TextareaWithSafari17Workaround");var _excluded = ["width", "error", "warning", "size", "autoResize", "resize", "onCut", "onPaste", "maxRows", "onFocus", "selectAllOnFocus", "placeholder", "onValueChange", "showLengthCounter", "lengthCounter", "counterHelp", "extraRow", "disableAnimations", "disabled"];var _class, _class2, _temp;function _getRequireWildcardCache(nodeInterop) {if (typeof WeakMap !== "function") return null;var cacheBabelInterop = new WeakMap();var cacheNodeInterop = new WeakMap();return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {return nodeInterop ? cacheNodeInterop : cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj, nodeInterop) {if (!nodeInterop && obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache(nodeInterop);if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;}
27
33
 
28
34
 
29
35
 
@@ -227,6 +233,7 @@ Textarea = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
227
233
 
228
234
 
229
235
 
236
+
230
237
 
231
238
 
232
239
  state = {
@@ -323,6 +330,13 @@ Textarea = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
323
330
 
324
331
 
325
332
 
333
+
334
+
335
+
336
+
337
+
338
+
339
+
326
340
 
327
341
 
328
342
 
@@ -436,6 +450,9 @@ Textarea = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
436
450
 
437
451
 
438
452
 
453
+ var Component =
454
+ _this.featureFlags.textareaUseSafari17Workaround && _client.isSafari17 ? _TextareaWithSafari17Workaround.TextareaWithSafari17Workaround : 'textarea';
455
+
439
456
  return /*#__PURE__*/(
440
457
  _react.default.createElement(_RenderLayer.RenderLayer, {
441
458
  onFocusOutside: _this.handleCloseCounterHelp,
@@ -451,7 +468,7 @@ Textarea = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
451
468
 
452
469
  placeholderPolyfill, /*#__PURE__*/
453
470
  _react.default.createElement(_ResizeDetector.ResizeDetector, { onResize: _this.reflowCounter }, /*#__PURE__*/
454
- _react.default.createElement("textarea", (0, _extends2.default)({},
471
+ _react.default.createElement(Component, (0, _extends2.default)({},
455
472
  textareaProps, {
456
473
  className: textareaClassNames,
457
474
  style: textareaStyle,
@@ -601,7 +618,7 @@ Textarea = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/func
601
618
  }
602
619
  };return _this;}var _proto = Textarea.prototype;_proto.getRootSizeClassName = function getRootSizeClassName() {switch (this.getProps().size) {case 'large':return _Textarea.styles.rootLarge(this.theme);case 'medium':return _Textarea.styles.rootMedium(this.theme);case 'small':default:return _Textarea.styles.rootSmall(this.theme);}};_proto.getTextareaSizeClassName = function getTextareaSizeClassName() {switch (this.getProps().size) {case 'large':return _Textarea.styles.textareaLarge(this.theme);case 'medium':return _Textarea.styles.textareaMedium(this.theme);case 'small':default:return _Textarea.styles.textareaSmall(this.theme);}};_proto.getAutoResizeThrottleWait = function getAutoResizeThrottleWait(props) {if (props === void 0) {props = this.props;} // NOTE: При отключении анимации остается эффект дергания при авто-ресайзе из-за троттлинга расчета высоты
603
620
  // Поэтому выставляем таймаут троттла в ноль. Подробности - https://github.com/skbkontur/retail-ui/issues/2120
604
- return this.isAnimationsDisabled(props) ? 0 : AUTORESIZE_THROTTLE_DEFAULT_WAIT;};_proto.isAnimationsDisabled = function isAnimationsDisabled(_temp2) {var _ref3 = _temp2 === void 0 ? this.props : _temp2,disableAnimations = _ref3.disableAnimations,extraRow = _ref3.extraRow;return disableAnimations || !extraRow;};_proto.componentDidMount = function componentDidMount() {if (this.props.autoResize) {this.autoResize();this.layoutEvents = LayoutEvents.addListener(this.autoResize);}if (this.node && this.props.showLengthCounter && this.textareaObserver) {this.textareaObserver.observe(this.node, { attributes: true });}};_proto.componentWillUnmount = function componentWillUnmount() {if (this.layoutEvents) {this.layoutEvents.remove();}if (this.props.showLengthCounter && this.textareaObserver) {this.textareaObserver.disconnect();}this.cancelDelayedSelectAll();};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {if (this.getAutoResizeThrottleWait() !== this.getAutoResizeThrottleWait(prevProps)) {this.autoResize.cancel();this.autoResize = (0, _lodash.default)(this.autoResizeHandler, this.getAutoResizeThrottleWait());}var _this$getProps2 = this.getProps(),rows = _this$getProps2.rows,maxRows = _this$getProps2.maxRows;if (this.props.autoResize && (rows !== prevProps.rows || maxRows !== prevProps.maxRows || this.props.value !== prevProps.value)) {this.autoResize();}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: _this2.setRootNode }, _this2.props), _this2.renderMain);});} /**
621
+ return this.isAnimationsDisabled(props) ? 0 : AUTORESIZE_THROTTLE_DEFAULT_WAIT;};_proto.isAnimationsDisabled = function isAnimationsDisabled(_temp2) {var _ref3 = _temp2 === void 0 ? this.props : _temp2,disableAnimations = _ref3.disableAnimations,extraRow = _ref3.extraRow;return disableAnimations || !extraRow;};_proto.componentDidMount = function componentDidMount() {if (this.props.autoResize) {this.autoResize();this.layoutEvents = LayoutEvents.addListener(this.autoResize);}if (this.node && this.props.showLengthCounter && this.textareaObserver) {this.textareaObserver.observe(this.node, { attributes: true });}};_proto.componentWillUnmount = function componentWillUnmount() {if (this.layoutEvents) {this.layoutEvents.remove();}if (this.props.showLengthCounter && this.textareaObserver) {this.textareaObserver.disconnect();}this.cancelDelayedSelectAll();};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {if (this.getAutoResizeThrottleWait() !== this.getAutoResizeThrottleWait(prevProps)) {this.autoResize.cancel();this.autoResize = (0, _lodash.default)(this.autoResizeHandler, this.getAutoResizeThrottleWait());}var _this$getProps2 = this.getProps(),rows = _this$getProps2.rows,maxRows = _this$getProps2.maxRows;if (this.props.autoResize && (rows !== prevProps.rows || maxRows !== prevProps.maxRows || this.props.value !== prevProps.value)) {this.autoResize();}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_featureFlagsContext.ReactUIFeatureFlagsContext.Consumer, null, function (flags) {_this2.featureFlags = (0, _featureFlagsContext.getFullReactUIFlagsContext)(flags);return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: _this2.setRootNode }, _this2.props), _this2.renderMain);});});} /**
605
622
  * @public
606
623
  */;_proto.focus = function focus() {if (this.node) {this.node.focus();}} /**
607
624
  * @public
@@ -1 +1 @@
1
- {"version":3,"sources":["Textarea.tsx"],"names":["DEFAULT_WIDTH","AUTORESIZE_THROTTLE_DEFAULT_WAIT","TextareaDataTids","root","counter","helpIcon","Textarea","rootNode","getProps","defaultProps","state","needsPolyfillPlaceholder","isCounterVisible","reflowCounter","reflow","selectAllId","textareaObserver","globalObject","MutationObserver","setSelectionRange","start","end","node","Error","document","activeElement","focus","selectAll","value","length","delaySelectAll","requestAnimationFrame","cancelDelayedSelectAll","cancelAnimationFrame","renderMain","props","width","error","warning","size","autoResize","resize","onCut","onPaste","maxRows","onFocus","selectAllOnFocus","placeholder","onValueChange","showLengthCounter","lengthCounter","counterHelp","extraRow","disableAnimations","disabled","textareaProps","rootProps","style","textareaClassNames","getTextareaSizeClassName","styles","textarea","theme","hovering","isAnimationsDisabled","textareaStyle","placeholderPolyfill","defaultValue","fakeTextarea","fakeProps","className","fake","readOnly","refFake","maxLength","handleCloseCounterHelp","refCounter","getRootSizeClassName","undefined","ref","handleChange","handleCut","handlePaste","handleFocus","handleKeyDown","children","setState","e","toString","isBlockEnter","preventDefault","onKeyDown","fieldIsEmpty","target","onChange","element","fakeNode","autoResizeHandler","rows","minRows","parseInt","height","exceededMaxHeight","overflowY","getAutoResizeThrottleWait","event","isIE11","rootLarge","rootMedium","rootSmall","textareaLarge","textareaMedium","textareaSmall","componentDidMount","layoutEvents","LayoutEvents","addListener","observe","attributes","componentWillUnmount","remove","disconnect","componentDidUpdate","prevProps","cancel","render","setRootNode","blur","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","oneOfType","string","number","id","name","title","spellCheck","role","tabIndex","func","onMouseEnter","onMouseLeave","onMouseOver","onMouseMove","onMouseOut","onMouseUp","onMouseDown","onClick","onDoubleClick","onKeyPress","onKeyUp","onInput","onBlur","onScroll","onWheel","onCopy","isTestEnv"],"mappings":";;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA,oD;;;;;;;AAOA,IAAMA,aAAa,GAAG,GAAtB;AACA,IAAMC,gCAAgC,GAAG,GAAzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2FO,IAAMC,gBAAgB,GAAG;AAC9BC,EAAAA,IAAI,EAAE,gBADwB;AAE9BC,EAAAA,OAAO,EAAE,uBAFqB;AAG9BC,EAAAA,QAAQ,EAAE,2BAHoB,EAAzB,C;;;;;AAQP;AACA;AACA;AACA;AACA;AACA;AACA,G;;AAEaC,Q,OADZC,kB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkESC,IAAAA,Q,GAAW,0CAAkBF,QAAQ,CAACG,YAA3B,C;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BZC,IAAAA,K,GAAQ;AACbC,MAAAA,wBAAwB,EAAxBA,kDADa;AAEbC,MAAAA,gBAAgB,EAAE,KAFL,E;;AAIPC,IAAAA,a,GAAgB,YAAM;AAC5B,UAAI,MAAKT,OAAT,EAAkB;AAChB,cAAKA,OAAL,CAAaU,MAAb;AACD;AACF,K;;;AAGOC,IAAAA,W,GAA6B,I;;;;;AAK7BC,IAAAA,gB,GAAmBC,2BAAaC,gBAAb;AACvB,QAAID,2BAAaC,gBAAjB,CAAkC,MAAKL,aAAvC,CADuB;AAEvB,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoFGM,IAAAA,iB,GAAoB,UAACC,KAAD,EAAgBC,GAAhB,EAAgC;AACzD,UAAI,CAAC,MAAKC,IAAV,EAAgB;AACd,cAAM,IAAIC,KAAJ,CAAU,oDAAV,CAAN;AACD;;AAED,UAAI,qDAAaC,QAAb,2CAAuBC,aAAvB,MAAyC,MAAKH,IAAlD,EAAwD;AACtD,cAAKI,KAAL;AACD;;AAED,YAAKJ,IAAL,CAAUH,iBAAV,CAA4BC,KAA5B,EAAmCC,GAAnC;AACD,K;;;;;AAKMM,IAAAA,S,GAAY,YAAM;AACvB,UAAI,MAAKL,IAAT,EAAe;AACb,cAAKH,iBAAL,CAAuB,CAAvB,EAA0B,MAAKG,IAAL,CAAUM,KAAV,CAAgBC,MAA1C;AACD;AACF,K;;AAEOC,IAAAA,c,GAAiB;AACtB,cAAKf,WAAL,4BAAmBE,2BAAac,qBAAhC,oBAAmBd,2BAAac,qBAAb,CAAqC,MAAKJ,SAA1C,CAAnB,oCAA2E,IADrD,G;;AAGjBK,IAAAA,sB,GAAyB,YAAY;AAC3C,UAAI,MAAKjB,WAAT,EAAsB;AACpBE,mCAAagB,oBAAb,+CAAaA,oBAAb,CAAoC,MAAKlB,WAAzC;AACA,cAAKA,WAAL,GAAmB,IAAnB;AACD;AACF,K;;AAEOmB,IAAAA,U,GAAa,UAACC,KAAD,EAAkD;AACrE;;;;;;;;;;;;;;;;;;;;;AAqBIA,MAAAA,KArBJ,CACEC,KADF,CACEA,KADF,6BACUpC,aADV,gBAEEqC,KAFF,GAqBIF,KArBJ,CAEEE,KAFF,CAGEC,OAHF,GAqBIH,KArBJ,CAGEG,OAHF,CAIEC,IAJF,GAqBIJ,KArBJ,CAIEI,IAJF,CAKEC,UALF,GAqBIL,KArBJ,CAKEK,UALF,CAMEC,MANF,GAqBIN,KArBJ,CAMEM,MANF,CAOEC,KAPF,GAqBIP,KArBJ,CAOEO,KAPF,CAQEC,OARF,GAqBIR,KArBJ,CAQEQ,OARF,CASEC,OATF,GAqBIT,KArBJ,CASES,OATF,CAUEC,OAVF,GAqBIV,KArBJ,CAUEU,OAVF,CAWEC,gBAXF,GAqBIX,KArBJ,CAWEW,gBAXF,CAYEC,WAZF,GAqBIZ,KArBJ,CAYEY,WAZF,CAaEC,aAbF,GAqBIb,KArBJ,CAaEa,aAbF,CAcEC,iBAdF,GAqBId,KArBJ,CAcEc,iBAdF,CAeEC,aAfF,GAqBIf,KArBJ,CAeEe,aAfF,CAgBEC,WAhBF,GAqBIhB,KArBJ,CAgBEgB,WAhBF,CAiBEC,QAjBF,GAqBIjB,KArBJ,CAiBEiB,QAjBF,CAkBEC,iBAlBF,GAqBIlB,KArBJ,CAkBEkB,iBAlBF,CAmBEC,QAnBF,GAqBInB,KArBJ,CAmBEmB,QAnBF,CAoBKC,aApBL,+CAqBIpB,KArBJ;;AAuBA,UAAQvB,gBAAR,GAA6B,MAAKF,KAAlC,CAAQE,gBAAR;;AAEA,UAAM4C,SAAS,GAAG;AAChBC,QAAAA,KAAK,EAAE;AACLrB,UAAAA,KAAK,EAALA,KADK,EADS,EAAlB;;;;AAMA,UAAMsB,kBAAkB,GAAG,iBAAG,MAAKC,wBAAL,EAAH;AACxBC,uBAAOC,QAAP,CAAgB,MAAKC,KAArB,CADwB,IACM,IADN;AAExBF,uBAAOG,QAAP,CAAgB,MAAKD,KAArB,CAFwB,IAEM,CAACzB,KAAD,IAAU,CAACC,OAFjB;AAGxBsB,uBAAON,QAAP,CAAgB,MAAKQ,KAArB,CAHwB,IAGMR,QAHN;AAIxBM,uBAAOvB,KAAP,CAAa,MAAKyB,KAAlB,CAJwB,IAIG,CAAC,CAACzB,KAJL;AAKxBuB,uBAAOtB,OAAP,CAAe,MAAKwB,KAApB,CALwB,IAKK,CAAC,CAACxB,OALP;AAMxBsB,uBAAOP,iBAAP,EANwB,IAMK,MAAKW,oBAAL,EANL,OAA3B;;;AASA,UAAMC,aAAa,GAAG;AACpBxB,QAAAA,MAAM,EAAED,UAAU,GAAG,MAAH,GAAYC,MADV,EAAtB;;;AAIA,UAAIyB,mBAAmB,GAAG,IAA1B;;AAEA,UAAI,MAAKxD,KAAL,CAAWC,wBAAX,IAAuC,CAAC4C,aAAa,CAAC3B,KAAtD,IAA+D,CAAC2B,aAAa,CAACY,YAAlF,EAAgG;AAC9FD,QAAAA,mBAAmB,gBAAG,uCAAM,SAAS,EAAEN,iBAAOb,WAAP,EAAjB,IAAwCA,WAAxC,CAAtB;AACD;;AAED,UAAIqB,YAAY,GAAG,IAAnB;AACA,UAAI5B,UAAJ,EAAgB;AACd,YAAM6B,SAAS,GAAG;AAChBzC,UAAAA,KAAK,EAAE,MAAKO,KAAL,CAAWP,KADF;AAEhBuC,UAAAA,YAAY,EAAE,MAAKhC,KAAL,CAAWgC,YAFT;AAGhBG,UAAAA,SAAS,EAAE,iBAAGZ,kBAAH,EAAuBE,iBAAOW,IAAP,EAAvB,CAHK;AAIhBC,UAAAA,QAAQ,EAAE,IAJM,EAAlB;;AAMAJ,QAAAA,YAAY,gBAAG,oEAAcC,SAAd,IAAyB,GAAG,EAAE,MAAKI,OAAnC,IAAf;AACD;;AAED,UAAMrE,OAAO,GAAG6C,iBAAiB,IAAIrC,gBAArB,IAAyC,MAAKU,IAA9C;AACd,mCAAC,gCAAD;AACE,QAAA,QAAQ,EAAE,MAAKA,IADjB;AAEE,QAAA,IAAI,EAAE,MAAKd,QAAL,GAAgB+B,IAFxB;AAGE,QAAA,IAAI,EAAEY,WAHR;AAIE,QAAA,KAAK,EAAEI,aAAa,CAAC3B,KAJvB;AAKE,QAAA,MAAM,mCAAE2B,aAAa,CAACmB,SAAhB,oCAA6BxB,aAA7B,mBAA8C,CALtD;AAME,QAAA,WAAW,EAAE,MAAKyB,sBANpB;AAOE,QAAA,GAAG,EAAE,MAAKC,UAPZ,GADF;;;;AAYA;AACE,qCAAC,wBAAD;AACE,UAAA,cAAc,EAAE,MAAKD,sBADvB;AAEE,UAAA,cAAc,EAAE,MAAKA,sBAFvB;AAGE,UAAA,MAAM,EAAE,MAAKjE,KAAL,CAAWE,gBAHrB;;AAKE;AACE,sBAAUV,gBAAgB,CAACC,IAD7B;AAEMqD,QAAAA,SAFN;AAGE,UAAA,SAAS,EAAE,iBAAG,MAAKqB,oBAAL,EAAH;AACRjB,2BAAOzD,IAAP,EADQ,IACQ,IADR,QAHb;;;AAOG+D,QAAAA,mBAPH;AAQE,qCAAC,8BAAD,IAAgB,QAAQ,EAAE,MAAKrD,aAA/B;AACE;AACM0C,QAAAA,aADN;AAEE,UAAA,SAAS,EAAEG,kBAFb;AAGE,UAAA,KAAK,EAAEO,aAHT;AAIE,UAAA,WAAW,EAAE,CAACC,mBAAD,GAAuBnB,WAAvB,GAAqC+B,SAJpD;AAKE,UAAA,GAAG,EAAE,MAAKC,GALZ;AAME,UAAA,QAAQ,EAAE,MAAKC,YANjB;AAOE,UAAA,KAAK,EAAE,MAAKC,SAPd;AAQE,UAAA,OAAO,EAAE,MAAKC,WARhB;AASE,UAAA,OAAO,EAAE,MAAKC,WAThB;AAUE,UAAA,SAAS,EAAE,MAAKC,aAVlB;AAWE,UAAA,QAAQ,EAAE9B,QAXZ;;AAaG,cAAKnB,KAAL,CAAWkD,QAbd,CADF,CARF;;;AAyBGjB,QAAAA,YAzBH;AA0BGhE,QAAAA,OA1BH,CALF,CADF;;;;AAoCD,K;;AAEOuE,IAAAA,sB,GAAyB,oBAAM,MAAKW,QAAL,CAAc,EAAE1E,gBAAgB,EAAE,KAApB,EAAd,CAAN,E;;AAEzBwE,IAAAA,a,GAAgB,UAACG,CAAD,EAAiD;AACvE;AACA;AACA,UAAM3D,KAAK,GAAG,MAAKO,KAAL,CAAWP,KAAX,KAAqBkD,SAArB,GAAiC,MAAK3C,KAAL,CAAWP,KAAX,CAAiB4D,QAAjB,EAAjC,GAA+D,IAA7E;AACA,UAAMC,YAAY,GAAG,6BAAWF,CAAX,KAAiB3D,KAAK,KAAK,IAA3B,IAAmCA,KAAK,CAACC,MAAN,KAAiB,MAAKM,KAAL,CAAWuC,SAApF;;AAEA,UAAIe,YAAJ,EAAkB;AAChBF,QAAAA,CAAC,CAACG,cAAF;AACD;;AAED,UAAI,MAAKvD,KAAL,CAAWwD,SAAf,EAA0B;AACxB,cAAKxD,KAAL,CAAWwD,SAAX,CAAqBJ,CAArB;AACD;AACF,K;;AAEOP,IAAAA,Y,GAAe,UAACO,CAAD,EAA+C;AACpE,UAAI5E,kDAAJ,EAA8B;AAC5B,YAAMiF,YAAY,GAAGL,CAAC,CAACM,MAAF,CAASjE,KAAT,KAAmB,EAAxC;;AAEA,YAAI,MAAKlB,KAAL,CAAWC,wBAAX,KAAwCiF,YAA5C,EAA0D;AACxD,gBAAKN,QAAL,CAAc,EAAE3E,wBAAwB,EAAEiF,YAA5B,EAAd;AACD;AACF;;AAED,UAAI,MAAKzD,KAAL,CAAWa,aAAf,EAA8B;AAC5B,cAAKb,KAAL,CAAWa,aAAX,CAAyBuC,CAAC,CAACM,MAAF,CAASjE,KAAlC;AACD;;AAED,UAAI,MAAKO,KAAL,CAAWK,UAAf,EAA2B;AACzB,cAAKA,UAAL;AACD;;AAED,UAAI,MAAKL,KAAL,CAAW2D,QAAf,EAAyB;AACvB,cAAK3D,KAAL,CAAW2D,QAAX,CAAoBP,CAApB;AACD;;AAED,YAAK1E,aAAL;AACD,K;;AAEOkE,IAAAA,G,GAAM,UAACgB,OAAD,EAAkC;AAC9C,YAAKzE,IAAL,GAAYyE,OAAZ;AACD,K;;AAEOtB,IAAAA,O,GAAU,UAACsB,OAAD,EAAkC;AAClD,YAAKC,QAAL,GAAgBD,OAAhB;AACD,K;;AAEOnB,IAAAA,U,GAAa,UAACG,GAAD,EAAoC;AACvD,YAAK3E,OAAL,GAAe2E,GAAf;AACD,K;;AAEOkB,IAAAA,iB,GAAoB,YAAM;AAChC,UAAMD,QAAQ,GAAG,MAAKA,QAAtB;AACA,UAAI,CAACA,QAAL,EAAe;AACb;AACD;AACD,UAAM1E,IAAI,GAAG,MAAKA,IAAlB;AACA,UAAI,CAACA,IAAL,EAAW;AACT;AACD;AACD,UAAI,MAAKa,KAAL,CAAWP,KAAX,KAAqBkD,SAAzB,EAAoC;AAClCkB,QAAAA,QAAQ,CAACpE,KAAT,GAAiBN,IAAI,CAACM,KAAtB;AACD;;AAED,2BAA0B,MAAKpB,QAAL,EAA1B,CAAQ0F,IAAR,kBAAQA,IAAR,CAActD,OAAd,kBAAcA,OAAd;AACA,UAAIsD,IAAI,KAAKpB,SAAT,IAAsBlC,OAAO,KAAKkC,SAAtC,EAAiD;AAC/C;AACD;;AAED;AACE,8CAAkB;AAChBxD,QAAAA,IAAI,EAAE0E,QADU;AAEhBG,QAAAA,OAAO,EAAE,OAAOD,IAAP,KAAgB,QAAhB,GAA2BA,IAA3B,GAAkCE,QAAQ,CAACF,IAAD,EAAO,EAAP,CAFnC;AAGhBtD,QAAAA,OAAO,EAAE,OAAOA,OAAP,KAAmB,QAAnB,GAA8BA,OAA9B,GAAwCwD,QAAQ,CAACxD,OAAD,EAAU,EAAV,CAHzC;AAIhBQ,QAAAA,QAAQ,EAAE,MAAK5C,QAAL,GAAgB4C,QAJV,EAAlB;AAKM,QANR,CAAQiD,MAAR,SAAQA,MAAR,CAAgBC,iBAAhB,SAAgBA,iBAAhB;;AAQA,UAAID,MAAM,KAAKvB,SAAX,IAAwBwB,iBAAiB,KAAKxB,SAAlD,EAA6D;AAC3D;AACD;;AAEDxD,MAAAA,IAAI,CAACmC,KAAL,CAAW4C,MAAX,GAAoBA,MAAM,GAAG,IAA7B;AACA/E,MAAAA,IAAI,CAACmC,KAAL,CAAW8C,SAAX,GAAuBD,iBAAiB,GAAG,QAAH,GAAc,QAAtD;AACAN,MAAAA,QAAQ,CAACvC,KAAT,CAAe8C,SAAf,GAA2BD,iBAAiB,GAAG,QAAH,GAAc,QAA1D;AACD,K;;AAEO9D,IAAAA,U,GAAa,qBAAS,MAAKyD,iBAAd,EAAiC,MAAKO,yBAAL,EAAjC,C;;AAEbvB,IAAAA,S,GAAY,UAACwB,KAAD,EAAsD;AACxE,UAAI,MAAKtE,KAAL,CAAWK,UAAf,EAA2B;AACzB,cAAKA,UAAL;AACD;;AAED,UAAI,MAAKL,KAAL,CAAWO,KAAf,EAAsB;AACpB,cAAKP,KAAL,CAAWO,KAAX,CAAiB+D,KAAjB;AACD;;AAED,YAAK5F,aAAL;AACD,K;;AAEOqE,IAAAA,W,GAAc,UAACuB,KAAD,EAAsD;AAC1E,UAAI,MAAKtE,KAAL,CAAWK,UAAf,EAA2B;AACzB,cAAKA,UAAL;AACD;;AAED,UAAI,MAAKL,KAAL,CAAWQ,OAAf,EAAwB;AACtB,cAAKR,KAAL,CAAWQ,OAAX,CAAmB8D,KAAnB;AACD;;AAED,YAAK5F,aAAL;AACD,K;;AAEOsE,IAAAA,W,GAAc,UAACsB,KAAD,EAAkD;AACtE,YAAKnB,QAAL,CAAc,EAAE1E,gBAAgB,EAAE,IAApB,EAAd;;AAEA,UAAI,MAAKuB,KAAL,CAAWW,gBAAf,EAAiC;AAC/B;AACA,cAAKxB,IAAL,IAAa,CAACoF,cAAd,GAAuB,MAAK/E,SAAL,EAAvB,GAA0C,MAAKG,cAAL,EAA1C;AACD;;AAED,UAAI,MAAKK,KAAL,CAAWU,OAAf,EAAwB;AACtB,cAAKV,KAAL,CAAWU,OAAX,CAAmB4D,KAAnB;AACD;AACF,K,sDA1YO5B,oB,GAAR,gCAA+B,CAC7B,QAAQ,KAAKrE,QAAL,GAAgB+B,IAAxB,GACE,KAAK,OAAL,CACE,OAAOqB,iBAAO+C,SAAP,CAAiB,KAAK7C,KAAtB,CAAP,CACF,KAAK,QAAL,CACE,OAAOF,iBAAOgD,UAAP,CAAkB,KAAK9C,KAAvB,CAAP,CACF,KAAK,OAAL,CACA,QACE,OAAOF,iBAAOiD,SAAP,CAAiB,KAAK/C,KAAtB,CAAP,CAPJ,CASD,C,QAEOH,wB,GAAR,oCAAmC,CACjC,QAAQ,KAAKnD,QAAL,GAAgB+B,IAAxB,GACE,KAAK,OAAL,CACE,OAAOqB,iBAAOkD,aAAP,CAAqB,KAAKhD,KAA1B,CAAP,CACF,KAAK,QAAL,CACE,OAAOF,iBAAOmD,cAAP,CAAsB,KAAKjD,KAA3B,CAAP,CACF,KAAK,OAAL,CACA,QACE,OAAOF,iBAAOoD,aAAP,CAAqB,KAAKlD,KAA1B,CAAP,CAPJ,CASD,C,QAsBO0C,yB,GAAR,mCAAkCrE,KAAlC,EAA6E,KAA3CA,KAA2C,cAA3CA,KAA2C,GAApB,KAAKA,KAAe,GAC3E;AACA;AACA,WAAO,KAAK6B,oBAAL,CAA0B7B,KAA1B,IAAmC,CAAnC,GAAuClC,gCAA9C,CACD,C,QACO+D,oB,GAAR,sCAAmG,iCAArB,KAAK7B,KAAgB,UAApEkB,iBAAoE,SAApEA,iBAAoE,CAAjDD,QAAiD,SAAjDA,QAAiD,CACjG,OAAOC,iBAAiB,IAAI,CAACD,QAA7B,CACD,C,QAEM6D,iB,GAAP,6BAA2B,CACzB,IAAI,KAAK9E,KAAL,CAAWK,UAAf,EAA2B,CACzB,KAAKA,UAAL,GACA,KAAK0E,YAAL,GAAoBC,YAAY,CAACC,WAAb,CAAyB,KAAK5E,UAA9B,CAApB,CACD,CAED,IAAI,KAAKlB,IAAL,IAAa,KAAKa,KAAL,CAAWc,iBAAxB,IAA6C,KAAKjC,gBAAtD,EAAwE,CACtE,KAAKA,gBAAL,CAAsBqG,OAAtB,CAA8B,KAAK/F,IAAnC,EAAyC,EAAEgG,UAAU,EAAE,IAAd,EAAzC,EACD,CACF,C,QAEMC,oB,GAAP,gCAA8B,CAC5B,IAAI,KAAKL,YAAT,EAAuB,CACrB,KAAKA,YAAL,CAAkBM,MAAlB,GACD,CACD,IAAI,KAAKrF,KAAL,CAAWc,iBAAX,IAAgC,KAAKjC,gBAAzC,EAA2D,CACzD,KAAKA,gBAAL,CAAsByG,UAAtB,GACD,CACD,KAAKzF,sBAAL,GACD,C,QAEM0F,kB,GAAP,4BAA0BC,SAA1B,EAAoD,CAClD,IAAI,KAAKnB,yBAAL,OAAqC,KAAKA,yBAAL,CAA+BmB,SAA/B,CAAzC,EAAoF,CAClF,KAAKnF,UAAL,CAAgBoF,MAAhB,GACA,KAAKpF,UAAL,GAAkB,qBAAS,KAAKyD,iBAAd,EAAiC,KAAKO,yBAAL,EAAjC,CAAlB,CACD,CACD,sBAA0B,KAAKhG,QAAL,EAA1B,CAAQ0F,IAAR,mBAAQA,IAAR,CAActD,OAAd,mBAAcA,OAAd,CACA,IACE,KAAKT,KAAL,CAAWK,UAAX,KACC0D,IAAI,KAAKyB,SAAS,CAACzB,IAAnB,IAA2BtD,OAAO,KAAK+E,SAAS,CAAC/E,OAAjD,IAA4D,KAAKT,KAAL,CAAWP,KAAX,KAAqB+F,SAAS,CAAC/F,KAD5F,CADF,EAGE,CACA,KAAKY,UAAL,GACD,CACF,C,QAEMqF,M,GAAP,kBAAgB,mBACd,oBACE,6BAAC,0BAAD,CAAc,QAAd,QACG,UAAC/D,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,oBACE,6BAAC,4BAAD,2BAAe,WAAW,EAAE,MAAI,CAACgE,WAAjC,IAAkD,MAAI,CAAC3F,KAAvD,GACG,MAAI,CAACD,UADR,CADF,CAKD,CARH,CADF,CAYD,C,CAED;AACF;AACA,K,QACSR,K,GAAP,iBAAe,CACb,IAAI,KAAKJ,IAAT,EAAe,CACb,KAAKA,IAAL,CAAUI,KAAV,GACD,CACF,C,CAED;AACF;AACA,K,QACSqG,I,GAAP,gBAAc,CACZ,IAAI,KAAKzG,IAAT,EAAe,CACb,KAAKA,IAAL,CAAUyG,IAAV,GACD,CACF,C,CAED;AACF;AACA;AACA;AACA,K,mBAhM8BC,eAAMC,S,WACpBC,mB,GAAsB,U,UAEtBC,S,GAAY,EACxB9F,KAAK,EAAE+F,mBAAUC,IADO,EAExB/F,OAAO,EAAE8F,mBAAUC,IAFK,EAGxB/E,QAAQ,EAAE8E,mBAAUC,IAHI,EAKxB7F,UAAU,EAAE4F,mBAAUC,IALE,EAMxBjF,QAAQ,EAAEgF,mBAAUC,IANI,EAOxBhF,iBAAiB,EAAE+E,mBAAUC,IAPL,EAQxBzF,OAAO,EAAEwF,mBAAUE,SAAV,CAAoB,CAACF,mBAAUG,MAAX,EAAmBH,mBAAUI,MAA7B,CAApB,CARe,EAUxB/F,MAAM,EAAE2F,mBAAUE,SAAV,CAAoB,CAACF,mBAAUG,MAAX,EAAmBH,mBAAUI,MAA7B,CAApB,CAVgB,EAWxBpG,KAAK,EAAEgG,mBAAUE,SAAV,CAAoB,CAACF,mBAAUG,MAAX,EAAmBH,mBAAUI,MAA7B,CAApB,CAXiB,EAaxBC,EAAE,EAAEL,mBAAUG,MAbU,EAcxBG,IAAI,EAAEN,mBAAUG,MAdQ,EAexBI,KAAK,EAAEP,mBAAUG,MAfO,EAgBxBK,UAAU,EAAER,mBAAUC,IAhBE,EAiBxBQ,IAAI,EAAET,mBAAUG,MAjBQ,EAkBxB7D,SAAS,EAAE0D,mBAAUI,MAlBG,EAmBxBM,QAAQ,EAAEV,mBAAUI,MAnBI,EAoBxBtC,IAAI,EAAEkC,mBAAUI,MApBQ,EAqBxBzF,WAAW,EAAEqF,mBAAUG,MArBC,EAuBxB3G,KAAK,EAAEwG,mBAAUG,MAvBO,EAwBxBpE,YAAY,EAAEiE,mBAAUG,MAxBA,EAyBxBvF,aAAa,EAAEoF,mBAAUW,IAzBD,EA2BxBC,YAAY,EAAEZ,mBAAUW,IA3BA,EA4BxBE,YAAY,EAAEb,mBAAUW,IA5BA,EA6BxBG,WAAW,EAAEd,mBAAUW,IA7BC,EA8BxBI,WAAW,EAAEf,mBAAUW,IA9BC,EA+BxBK,UAAU,EAAEhB,mBAAUW,IA/BE,EAiCxBM,SAAS,EAAEjB,mBAAUW,IAjCG,EAkCxBO,WAAW,EAAElB,mBAAUW,IAlCC,EAmCxBQ,OAAO,EAAEnB,mBAAUW,IAnCK,EAoCxBS,aAAa,EAAEpB,mBAAUW,IApCD,EAsCxBpD,SAAS,EAAEyC,mBAAUW,IAtCG,EAuCxBU,UAAU,EAAErB,mBAAUW,IAvCE,EAwCxBW,OAAO,EAAEtB,mBAAUW,IAxCK,EAyCxBY,OAAO,EAAEvB,mBAAUW,IAzCK,EA2CxBlG,OAAO,EAAEuF,mBAAUW,IA3CK,EA4CxBa,MAAM,EAAExB,mBAAUW,IA5CM,EA8CxBc,QAAQ,EAAEzB,mBAAUW,IA9CI,EA+CxBe,OAAO,EAAE1B,mBAAUW,IA/CK,EAiDxBrG,KAAK,EAAE0F,mBAAUW,IAjDO,EAkDxBpG,OAAO,EAAEyF,mBAAUW,IAlDK,EAmDxBgB,MAAM,EAAE3B,mBAAUW,IAnDM,E,UAsDZtI,Y,GAA6B,EACzCyF,IAAI,EAAE,CADmC,EAEzCtD,OAAO,EAAE,EAFgC,EAGzCQ,QAAQ,EAAE,IAH+B,EAIzCb,IAAI,EAAE,OAJmC,EAKzCc,iBAAiB,EAAE2G,6BALsB,E","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes, ReactNode } from 'react';\nimport PropTypes from 'prop-types';\nimport throttle from 'lodash.throttle';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { needsPolyfillPlaceholder } from '../../lib/needsPolyfillPlaceholder';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ResizeDetector } from '../../internal/ResizeDetector';\nimport { isIE11 } from '../../lib/client';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { SizeProp } from '../../lib/types/props';\n\nimport { getTextAreaHeight } from './TextareaHelpers';\nimport { styles } from './Textarea.styles';\nimport { TextareaCounter, TextareaCounterRef } from './TextareaCounter';\n\n/**\n * @deprecated use SizeProp\n */\nexport type TextareaSize = SizeProp;\n\nconst DEFAULT_WIDTH = 250;\nconst AUTORESIZE_THROTTLE_DEFAULT_WAIT = 100;\n\nexport interface TextareaProps\n extends Pick<AriaAttributes, 'aria-label'>,\n CommonProps,\n Override<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n {\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n /** Не активное состояние */\n disabled?: boolean;\n /** Размер */\n size?: SizeProp;\n /**\n * Автоматический ресайз\n * в зависимости от содержимого\n */\n autoResize?: boolean;\n /**\n * Число строк\n */\n rows?: number;\n /**\n * Максимальное число строк при\n * автоматическом ресайзе\n */\n maxRows?: string | number;\n\n /**\n * Стандартный ресайз\n * Попадает в `style`\n */\n resize?: React.CSSProperties['resize'];\n\n /**\n * Ширина\n */\n width?: React.CSSProperties['width'];\n\n /**\n * Вызывается при изменении `value`\n */\n onValueChange?: (value: string) => void;\n\n /** Выделение значения при фокусе */\n selectAllOnFocus?: boolean;\n\n /** Показывать счетчик символов */\n showLengthCounter?: boolean;\n\n /** Допустимое количество символов в поле. Отображается в счетчике.\n * Если не указано, равно `maxLength`\n */\n lengthCounter?: number;\n\n /** Подсказка к счетчику символов.\n *\n * По умолчанию - тултип с содержимым из пропа, если передан`ReactNode`.\n *\n * Передав функцию, можно переопределить подсказку целиком, вместе с иконкой. Например,\n *\n * ```\n * counterHelp={() => <Tooltip render={...}><HelpIcon /></Tooltip>}\n * ```\n * */\n counterHelp?: ReactNode | (() => ReactNode);\n\n /** Добавлять дополнительную свободную строку при авто-ресайзе.\n * @see https://guides.kontur.ru/components/textarea/#04\n * */\n extraRow?: boolean;\n\n /** Отключать анимацию при авто-ресайзе.\n * Автоматически отключается когда в `extraRow` передан `false`.\n */\n disableAnimations?: boolean;\n }\n > {}\n\nexport interface TextareaState {\n needsPolyfillPlaceholder: boolean;\n isCounterVisible: boolean;\n}\n\nexport const TextareaDataTids = {\n root: 'Textarea__root',\n counter: 'TextareaCounter__root',\n helpIcon: 'TextareaCounter__helpIcon',\n} as const;\n\ntype DefaultProps = Required<Pick<TextareaProps, 'rows' | 'maxRows' | 'extraRow' | 'disableAnimations' | 'size'>>;\n\n/**\n * Компонент для ввода многострочного текста.\n *\n * Принимает все атрибуты `React.TextareaHTMLAttributes<HTMLTextAreaElement>`\n *\n * ** `className` и `style` игнорируются**\n */\n@rootNode\nexport class Textarea extends React.Component<TextareaProps, TextareaState> {\n public static __KONTUR_REACT_UI__ = 'Textarea';\n\n public static propTypes = {\n error: PropTypes.bool,\n warning: PropTypes.bool,\n disabled: PropTypes.bool,\n\n autoResize: PropTypes.bool,\n extraRow: PropTypes.bool,\n disableAnimations: PropTypes.bool,\n maxRows: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n resize: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n id: PropTypes.string,\n name: PropTypes.string,\n title: PropTypes.string,\n spellCheck: PropTypes.bool,\n role: PropTypes.string,\n maxLength: PropTypes.number,\n tabIndex: PropTypes.number,\n rows: PropTypes.number,\n placeholder: PropTypes.string,\n\n value: PropTypes.string,\n defaultValue: PropTypes.string,\n onValueChange: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onMouseMove: PropTypes.func,\n onMouseOut: PropTypes.func,\n\n onMouseUp: PropTypes.func,\n onMouseDown: PropTypes.func,\n onClick: PropTypes.func,\n onDoubleClick: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n onKeyPress: PropTypes.func,\n onKeyUp: PropTypes.func,\n onInput: PropTypes.func,\n\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n\n onScroll: PropTypes.func,\n onWheel: PropTypes.func,\n\n onCut: PropTypes.func,\n onPaste: PropTypes.func,\n onCopy: PropTypes.func,\n };\n\n public static defaultProps: DefaultProps = {\n rows: 3,\n maxRows: 15,\n extraRow: true,\n size: 'small',\n disableAnimations: isTestEnv,\n };\n\n private getProps = createPropsGetter(Textarea.defaultProps);\n\n private getRootSizeClassName() {\n switch (this.getProps().size) {\n case 'large':\n return styles.rootLarge(this.theme);\n case 'medium':\n return styles.rootMedium(this.theme);\n case 'small':\n default:\n return styles.rootSmall(this.theme);\n }\n }\n\n private getTextareaSizeClassName() {\n switch (this.getProps().size) {\n case 'large':\n return styles.textareaLarge(this.theme);\n case 'medium':\n return styles.textareaMedium(this.theme);\n case 'small':\n default:\n return styles.textareaSmall(this.theme);\n }\n }\n\n public state = {\n needsPolyfillPlaceholder,\n isCounterVisible: false,\n };\n private reflowCounter = () => {\n if (this.counter) {\n this.counter.reflow();\n }\n };\n\n private theme!: Theme;\n private selectAllId: number | null = null;\n private node: Nullable<HTMLTextAreaElement>;\n private fakeNode: Nullable<HTMLTextAreaElement>;\n private counter: Nullable<TextareaCounterRef>;\n private layoutEvents: Nullable<{ remove: () => void }>;\n private textareaObserver = globalObject.MutationObserver\n ? new globalObject.MutationObserver(this.reflowCounter)\n : null;\n private setRootNode!: TSetRootNode;\n private getAutoResizeThrottleWait(props: TextareaProps = this.props): number {\n // NOTE: При отключении анимации остается эффект дергания при авто-ресайзе из-за троттлинга расчета высоты\n // Поэтому выставляем таймаут троттла в ноль. Подробности - https://github.com/skbkontur/retail-ui/issues/2120\n return this.isAnimationsDisabled(props) ? 0 : AUTORESIZE_THROTTLE_DEFAULT_WAIT;\n }\n private isAnimationsDisabled({ disableAnimations, extraRow }: TextareaProps = this.props): boolean {\n return disableAnimations || !extraRow;\n }\n\n public componentDidMount() {\n if (this.props.autoResize) {\n this.autoResize();\n this.layoutEvents = LayoutEvents.addListener(this.autoResize);\n }\n\n if (this.node && this.props.showLengthCounter && this.textareaObserver) {\n this.textareaObserver.observe(this.node, { attributes: true });\n }\n }\n\n public componentWillUnmount() {\n if (this.layoutEvents) {\n this.layoutEvents.remove();\n }\n if (this.props.showLengthCounter && this.textareaObserver) {\n this.textareaObserver.disconnect();\n }\n this.cancelDelayedSelectAll();\n }\n\n public componentDidUpdate(prevProps: TextareaProps) {\n if (this.getAutoResizeThrottleWait() !== this.getAutoResizeThrottleWait(prevProps)) {\n this.autoResize.cancel();\n this.autoResize = throttle(this.autoResizeHandler, this.getAutoResizeThrottleWait());\n }\n const { rows, maxRows } = this.getProps();\n if (\n this.props.autoResize &&\n (rows !== prevProps.rows || maxRows !== prevProps.maxRows || this.props.value !== prevProps.value)\n ) {\n this.autoResize();\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.node) {\n this.node.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.node) {\n this.node.blur();\n }\n }\n\n /**\n * @public\n * @param {number} start\n * @param {number} end\n */\n public setSelectionRange = (start: number, end: number) => {\n if (!this.node) {\n throw new Error('Cannot call \"setSelectionRange\" on unmounted Input');\n }\n\n if (globalObject.document?.activeElement !== this.node) {\n this.focus();\n }\n\n this.node.setSelectionRange(start, end);\n };\n\n /**\n * @public\n */\n public selectAll = () => {\n if (this.node) {\n this.setSelectionRange(0, this.node.value.length);\n }\n };\n\n private delaySelectAll = (): number | null =>\n (this.selectAllId = globalObject.requestAnimationFrame?.(this.selectAll) ?? null);\n\n private cancelDelayedSelectAll = (): void => {\n if (this.selectAllId) {\n globalObject.cancelAnimationFrame?.(this.selectAllId);\n this.selectAllId = null;\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<TextareaProps>) => {\n const {\n width = DEFAULT_WIDTH,\n error,\n warning,\n size,\n autoResize,\n resize,\n onCut,\n onPaste,\n maxRows,\n onFocus,\n selectAllOnFocus,\n placeholder,\n onValueChange,\n showLengthCounter,\n lengthCounter,\n counterHelp,\n extraRow,\n disableAnimations,\n disabled,\n ...textareaProps\n } = props;\n\n const { isCounterVisible } = this.state;\n\n const rootProps = {\n style: {\n width,\n },\n };\n\n const textareaClassNames = cx(this.getTextareaSizeClassName(), {\n [styles.textarea(this.theme)]: true,\n [styles.hovering(this.theme)]: !error && !warning,\n [styles.disabled(this.theme)]: disabled,\n [styles.error(this.theme)]: !!error,\n [styles.warning(this.theme)]: !!warning,\n [styles.disableAnimations()]: this.isAnimationsDisabled(),\n });\n\n const textareaStyle = {\n resize: autoResize ? 'none' : resize,\n };\n\n let placeholderPolyfill = null;\n\n if (this.state.needsPolyfillPlaceholder && !textareaProps.value && !textareaProps.defaultValue) {\n placeholderPolyfill = <span className={styles.placeholder()}>{placeholder}</span>;\n }\n\n let fakeTextarea = null;\n if (autoResize) {\n const fakeProps = {\n value: this.props.value,\n defaultValue: this.props.defaultValue,\n className: cx(textareaClassNames, styles.fake()),\n readOnly: true,\n };\n fakeTextarea = <textarea {...fakeProps} ref={this.refFake} />;\n }\n\n const counter = showLengthCounter && isCounterVisible && this.node && (\n <TextareaCounter\n textarea={this.node}\n size={this.getProps().size}\n help={counterHelp}\n value={textareaProps.value}\n length={textareaProps.maxLength ?? lengthCounter ?? 0}\n onCloseHelp={this.handleCloseCounterHelp}\n ref={this.refCounter}\n />\n );\n\n return (\n <RenderLayer\n onFocusOutside={this.handleCloseCounterHelp}\n onClickOutside={this.handleCloseCounterHelp}\n active={this.state.isCounterVisible}\n >\n <label\n data-tid={TextareaDataTids.root}\n {...rootProps}\n className={cx(this.getRootSizeClassName(), {\n [styles.root()]: true,\n })}\n >\n {placeholderPolyfill}\n <ResizeDetector onResize={this.reflowCounter}>\n <textarea\n {...textareaProps}\n className={textareaClassNames}\n style={textareaStyle}\n placeholder={!placeholderPolyfill ? placeholder : undefined}\n ref={this.ref}\n onChange={this.handleChange}\n onCut={this.handleCut}\n onPaste={this.handlePaste}\n onFocus={this.handleFocus}\n onKeyDown={this.handleKeyDown}\n disabled={disabled}\n >\n {this.props.children}\n </textarea>\n </ResizeDetector>\n {fakeTextarea}\n {counter}\n </label>\n </RenderLayer>\n );\n };\n\n private handleCloseCounterHelp = () => this.setState({ isCounterVisible: false });\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Edge bug: textarea maxlength doesn't work after new line\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/18833616/\n const value = this.props.value !== undefined ? this.props.value.toString() : null;\n const isBlockEnter = isKeyEnter(e) && value !== null && value.length === this.props.maxLength;\n\n if (isBlockEnter) {\n e.preventDefault();\n }\n\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (needsPolyfillPlaceholder) {\n const fieldIsEmpty = e.target.value === '';\n\n if (this.state.needsPolyfillPlaceholder !== fieldIsEmpty) {\n this.setState({ needsPolyfillPlaceholder: fieldIsEmpty });\n }\n }\n\n if (this.props.onValueChange) {\n this.props.onValueChange(e.target.value);\n }\n\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onChange) {\n this.props.onChange(e);\n }\n\n this.reflowCounter();\n };\n\n private ref = (element: HTMLTextAreaElement) => {\n this.node = element;\n };\n\n private refFake = (element: HTMLTextAreaElement) => {\n this.fakeNode = element;\n };\n\n private refCounter = (ref: TextareaCounterRef | null) => {\n this.counter = ref;\n };\n\n private autoResizeHandler = () => {\n const fakeNode = this.fakeNode;\n if (!fakeNode) {\n return;\n }\n const node = this.node;\n if (!node) {\n return;\n }\n if (this.props.value === undefined) {\n fakeNode.value = node.value;\n }\n\n const { rows, maxRows } = this.getProps();\n if (rows === undefined || maxRows === undefined) {\n return;\n }\n\n const { height, exceededMaxHeight } =\n getTextAreaHeight({\n node: fakeNode,\n minRows: typeof rows === 'number' ? rows : parseInt(rows, 10),\n maxRows: typeof maxRows === 'number' ? maxRows : parseInt(maxRows, 10),\n extraRow: this.getProps().extraRow,\n }) || {};\n\n if (height === undefined || exceededMaxHeight === undefined) {\n return;\n }\n\n node.style.height = height + 'px';\n node.style.overflowY = exceededMaxHeight ? 'scroll' : 'hidden';\n fakeNode.style.overflowY = exceededMaxHeight ? 'scroll' : 'hidden';\n };\n\n private autoResize = throttle(this.autoResizeHandler, this.getAutoResizeThrottleWait());\n\n private handleCut = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onCut) {\n this.props.onCut(event);\n }\n\n this.reflowCounter();\n };\n\n private handlePaste = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onPaste) {\n this.props.onPaste(event);\n }\n\n this.reflowCounter();\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLTextAreaElement>) => {\n this.setState({ isCounterVisible: true });\n\n if (this.props.selectAllOnFocus) {\n // https://github.com/facebook/react/issues/7769\n this.node && !isIE11 ? this.selectAll() : this.delaySelectAll();\n }\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n}\n"]}
1
+ {"version":3,"sources":["Textarea.tsx"],"names":["DEFAULT_WIDTH","AUTORESIZE_THROTTLE_DEFAULT_WAIT","TextareaDataTids","root","counter","helpIcon","Textarea","rootNode","getProps","defaultProps","state","needsPolyfillPlaceholder","isCounterVisible","reflowCounter","reflow","selectAllId","textareaObserver","globalObject","MutationObserver","setSelectionRange","start","end","node","Error","document","activeElement","focus","selectAll","value","length","delaySelectAll","requestAnimationFrame","cancelDelayedSelectAll","cancelAnimationFrame","renderMain","props","width","error","warning","size","autoResize","resize","onCut","onPaste","maxRows","onFocus","selectAllOnFocus","placeholder","onValueChange","showLengthCounter","lengthCounter","counterHelp","extraRow","disableAnimations","disabled","textareaProps","rootProps","style","textareaClassNames","getTextareaSizeClassName","styles","textarea","theme","hovering","isAnimationsDisabled","textareaStyle","placeholderPolyfill","defaultValue","fakeTextarea","fakeProps","className","fake","readOnly","refFake","maxLength","handleCloseCounterHelp","refCounter","Component","featureFlags","textareaUseSafari17Workaround","isSafari17","TextareaWithSafari17Workaround","getRootSizeClassName","undefined","ref","handleChange","handleCut","handlePaste","handleFocus","handleKeyDown","children","setState","e","toString","isBlockEnter","preventDefault","onKeyDown","fieldIsEmpty","target","onChange","element","fakeNode","autoResizeHandler","rows","minRows","parseInt","height","exceededMaxHeight","overflowY","getAutoResizeThrottleWait","event","isIE11","rootLarge","rootMedium","rootSmall","textareaLarge","textareaMedium","textareaSmall","componentDidMount","layoutEvents","LayoutEvents","addListener","observe","attributes","componentWillUnmount","remove","disconnect","componentDidUpdate","prevProps","cancel","render","flags","setRootNode","blur","React","__KONTUR_REACT_UI__","propTypes","PropTypes","bool","oneOfType","string","number","id","name","title","spellCheck","role","tabIndex","func","onMouseEnter","onMouseLeave","onMouseOver","onMouseMove","onMouseOut","onMouseUp","onMouseDown","onClick","onDoubleClick","onKeyPress","onKeyUp","onInput","onBlur","onScroll","onWheel","onCopy","isTestEnv"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes, ReactNode } from 'react';\nimport PropTypes from 'prop-types';\nimport throttle from 'lodash.throttle';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { needsPolyfillPlaceholder } from '../../lib/needsPolyfillPlaceholder';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ResizeDetector } from '../../internal/ResizeDetector';\nimport { isIE11, isSafari17 } from '../../lib/client';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { SizeProp } from '../../lib/types/props';\nimport {\n getFullReactUIFlagsContext,\n ReactUIFeatureFlags,\n ReactUIFeatureFlagsContext,\n} from '../../lib/featureFlagsContext';\n\nimport { getTextAreaHeight } from './TextareaHelpers';\nimport { styles } from './Textarea.styles';\nimport { TextareaCounter, TextareaCounterRef } from './TextareaCounter';\nimport { TextareaWithSafari17Workaround } from './TextareaWithSafari17Workaround';\n\n/**\n * @deprecated use SizeProp\n */\nexport type TextareaSize = SizeProp;\n\nconst DEFAULT_WIDTH = 250;\nconst AUTORESIZE_THROTTLE_DEFAULT_WAIT = 100;\n\nexport interface TextareaProps\n extends Pick<AriaAttributes, 'aria-label'>,\n CommonProps,\n Override<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n {\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n /** Не активное состояние */\n disabled?: boolean;\n /** Размер */\n size?: SizeProp;\n /**\n * Автоматический ресайз\n * в зависимости от содержимого\n */\n autoResize?: boolean;\n /**\n * Число строк\n */\n rows?: number;\n /**\n * Максимальное число строк при\n * автоматическом ресайзе\n */\n maxRows?: string | number;\n\n /**\n * Стандартный ресайз\n * Попадает в `style`\n */\n resize?: React.CSSProperties['resize'];\n\n /**\n * Ширина\n */\n width?: React.CSSProperties['width'];\n\n /**\n * Вызывается при изменении `value`\n */\n onValueChange?: (value: string) => void;\n\n /** Выделение значения при фокусе */\n selectAllOnFocus?: boolean;\n\n /** Показывать счетчик символов */\n showLengthCounter?: boolean;\n\n /** Допустимое количество символов в поле. Отображается в счетчике.\n * Если не указано, равно `maxLength`\n */\n lengthCounter?: number;\n\n /** Подсказка к счетчику символов.\n *\n * По умолчанию - тултип с содержимым из пропа, если передан`ReactNode`.\n *\n * Передав функцию, можно переопределить подсказку целиком, вместе с иконкой. Например,\n *\n * ```\n * counterHelp={() => <Tooltip render={...}><HelpIcon /></Tooltip>}\n * ```\n * */\n counterHelp?: ReactNode | (() => ReactNode);\n\n /** Добавлять дополнительную свободную строку при авто-ресайзе.\n * @see https://guides.kontur.ru/components/textarea/#04\n * */\n extraRow?: boolean;\n\n /** Отключать анимацию при авто-ресайзе.\n * Автоматически отключается когда в `extraRow` передан `false`.\n */\n disableAnimations?: boolean;\n }\n > {}\n\nexport interface TextareaState {\n needsPolyfillPlaceholder: boolean;\n isCounterVisible: boolean;\n}\n\nexport const TextareaDataTids = {\n root: 'Textarea__root',\n counter: 'TextareaCounter__root',\n helpIcon: 'TextareaCounter__helpIcon',\n} as const;\n\ntype DefaultProps = Required<Pick<TextareaProps, 'rows' | 'maxRows' | 'extraRow' | 'disableAnimations' | 'size'>>;\n\n/**\n * Компонент для ввода многострочного текста.\n *\n * Принимает все атрибуты `React.TextareaHTMLAttributes<HTMLTextAreaElement>`\n *\n * ** `className` и `style` игнорируются**\n */\n@rootNode\nexport class Textarea extends React.Component<TextareaProps, TextareaState> {\n public static __KONTUR_REACT_UI__ = 'Textarea';\n\n public static propTypes = {\n error: PropTypes.bool,\n warning: PropTypes.bool,\n disabled: PropTypes.bool,\n\n autoResize: PropTypes.bool,\n extraRow: PropTypes.bool,\n disableAnimations: PropTypes.bool,\n maxRows: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n resize: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n id: PropTypes.string,\n name: PropTypes.string,\n title: PropTypes.string,\n spellCheck: PropTypes.bool,\n role: PropTypes.string,\n maxLength: PropTypes.number,\n tabIndex: PropTypes.number,\n rows: PropTypes.number,\n placeholder: PropTypes.string,\n\n value: PropTypes.string,\n defaultValue: PropTypes.string,\n onValueChange: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onMouseOver: PropTypes.func,\n onMouseMove: PropTypes.func,\n onMouseOut: PropTypes.func,\n\n onMouseUp: PropTypes.func,\n onMouseDown: PropTypes.func,\n onClick: PropTypes.func,\n onDoubleClick: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n onKeyPress: PropTypes.func,\n onKeyUp: PropTypes.func,\n onInput: PropTypes.func,\n\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n\n onScroll: PropTypes.func,\n onWheel: PropTypes.func,\n\n onCut: PropTypes.func,\n onPaste: PropTypes.func,\n onCopy: PropTypes.func,\n };\n\n public static defaultProps: DefaultProps = {\n rows: 3,\n maxRows: 15,\n extraRow: true,\n size: 'small',\n disableAnimations: isTestEnv,\n };\n\n private getProps = createPropsGetter(Textarea.defaultProps);\n private featureFlags!: ReactUIFeatureFlags;\n\n private getRootSizeClassName() {\n switch (this.getProps().size) {\n case 'large':\n return styles.rootLarge(this.theme);\n case 'medium':\n return styles.rootMedium(this.theme);\n case 'small':\n default:\n return styles.rootSmall(this.theme);\n }\n }\n\n private getTextareaSizeClassName() {\n switch (this.getProps().size) {\n case 'large':\n return styles.textareaLarge(this.theme);\n case 'medium':\n return styles.textareaMedium(this.theme);\n case 'small':\n default:\n return styles.textareaSmall(this.theme);\n }\n }\n\n public state = {\n needsPolyfillPlaceholder,\n isCounterVisible: false,\n };\n private reflowCounter = () => {\n if (this.counter) {\n this.counter.reflow();\n }\n };\n\n private theme!: Theme;\n private selectAllId: number | null = null;\n private node: Nullable<HTMLTextAreaElement>;\n private fakeNode: Nullable<HTMLTextAreaElement>;\n private counter: Nullable<TextareaCounterRef>;\n private layoutEvents: Nullable<{ remove: () => void }>;\n private textareaObserver = globalObject.MutationObserver\n ? new globalObject.MutationObserver(this.reflowCounter)\n : null;\n private setRootNode!: TSetRootNode;\n private getAutoResizeThrottleWait(props: TextareaProps = this.props): number {\n // NOTE: При отключении анимации остается эффект дергания при авто-ресайзе из-за троттлинга расчета высоты\n // Поэтому выставляем таймаут троттла в ноль. Подробности - https://github.com/skbkontur/retail-ui/issues/2120\n return this.isAnimationsDisabled(props) ? 0 : AUTORESIZE_THROTTLE_DEFAULT_WAIT;\n }\n private isAnimationsDisabled({ disableAnimations, extraRow }: TextareaProps = this.props): boolean {\n return disableAnimations || !extraRow;\n }\n\n public componentDidMount() {\n if (this.props.autoResize) {\n this.autoResize();\n this.layoutEvents = LayoutEvents.addListener(this.autoResize);\n }\n\n if (this.node && this.props.showLengthCounter && this.textareaObserver) {\n this.textareaObserver.observe(this.node, { attributes: true });\n }\n }\n\n public componentWillUnmount() {\n if (this.layoutEvents) {\n this.layoutEvents.remove();\n }\n if (this.props.showLengthCounter && this.textareaObserver) {\n this.textareaObserver.disconnect();\n }\n this.cancelDelayedSelectAll();\n }\n\n public componentDidUpdate(prevProps: TextareaProps) {\n if (this.getAutoResizeThrottleWait() !== this.getAutoResizeThrottleWait(prevProps)) {\n this.autoResize.cancel();\n this.autoResize = throttle(this.autoResizeHandler, this.getAutoResizeThrottleWait());\n }\n const { rows, maxRows } = this.getProps();\n if (\n this.props.autoResize &&\n (rows !== prevProps.rows || maxRows !== prevProps.maxRows || this.props.value !== prevProps.value)\n ) {\n this.autoResize();\n }\n }\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.featureFlags = getFullReactUIFlagsContext(flags);\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.node) {\n this.node.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.node) {\n this.node.blur();\n }\n }\n\n /**\n * @public\n * @param {number} start\n * @param {number} end\n */\n public setSelectionRange = (start: number, end: number) => {\n if (!this.node) {\n throw new Error('Cannot call \"setSelectionRange\" on unmounted Input');\n }\n\n if (globalObject.document?.activeElement !== this.node) {\n this.focus();\n }\n\n this.node.setSelectionRange(start, end);\n };\n\n /**\n * @public\n */\n public selectAll = () => {\n if (this.node) {\n this.setSelectionRange(0, this.node.value.length);\n }\n };\n\n private delaySelectAll = (): number | null =>\n (this.selectAllId = globalObject.requestAnimationFrame?.(this.selectAll) ?? null);\n\n private cancelDelayedSelectAll = (): void => {\n if (this.selectAllId) {\n globalObject.cancelAnimationFrame?.(this.selectAllId);\n this.selectAllId = null;\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<TextareaProps>) => {\n const {\n width = DEFAULT_WIDTH,\n error,\n warning,\n size,\n autoResize,\n resize,\n onCut,\n onPaste,\n maxRows,\n onFocus,\n selectAllOnFocus,\n placeholder,\n onValueChange,\n showLengthCounter,\n lengthCounter,\n counterHelp,\n extraRow,\n disableAnimations,\n disabled,\n ...textareaProps\n } = props;\n\n const { isCounterVisible } = this.state;\n\n const rootProps = {\n style: {\n width,\n },\n };\n\n const textareaClassNames = cx(this.getTextareaSizeClassName(), {\n [styles.textarea(this.theme)]: true,\n [styles.hovering(this.theme)]: !error && !warning,\n [styles.disabled(this.theme)]: disabled,\n [styles.error(this.theme)]: !!error,\n [styles.warning(this.theme)]: !!warning,\n [styles.disableAnimations()]: this.isAnimationsDisabled(),\n });\n\n const textareaStyle = {\n resize: autoResize ? 'none' : resize,\n };\n\n let placeholderPolyfill = null;\n\n if (this.state.needsPolyfillPlaceholder && !textareaProps.value && !textareaProps.defaultValue) {\n placeholderPolyfill = <span className={styles.placeholder()}>{placeholder}</span>;\n }\n\n let fakeTextarea = null;\n if (autoResize) {\n const fakeProps = {\n value: this.props.value,\n defaultValue: this.props.defaultValue,\n className: cx(textareaClassNames, styles.fake()),\n readOnly: true,\n };\n fakeTextarea = <textarea {...fakeProps} ref={this.refFake} />;\n }\n\n const counter = showLengthCounter && isCounterVisible && this.node && (\n <TextareaCounter\n textarea={this.node}\n size={this.getProps().size}\n help={counterHelp}\n value={textareaProps.value}\n length={textareaProps.maxLength ?? lengthCounter ?? 0}\n onCloseHelp={this.handleCloseCounterHelp}\n ref={this.refCounter}\n />\n );\n\n const Component =\n this.featureFlags.textareaUseSafari17Workaround && isSafari17 ? TextareaWithSafari17Workaround : 'textarea';\n\n return (\n <RenderLayer\n onFocusOutside={this.handleCloseCounterHelp}\n onClickOutside={this.handleCloseCounterHelp}\n active={this.state.isCounterVisible}\n >\n <label\n data-tid={TextareaDataTids.root}\n {...rootProps}\n className={cx(this.getRootSizeClassName(), {\n [styles.root()]: true,\n })}\n >\n {placeholderPolyfill}\n <ResizeDetector onResize={this.reflowCounter}>\n <Component\n {...textareaProps}\n className={textareaClassNames}\n style={textareaStyle}\n placeholder={!placeholderPolyfill ? placeholder : undefined}\n ref={this.ref}\n onChange={this.handleChange}\n onCut={this.handleCut}\n onPaste={this.handlePaste}\n onFocus={this.handleFocus}\n onKeyDown={this.handleKeyDown}\n disabled={disabled}\n >\n {this.props.children}\n </Component>\n </ResizeDetector>\n {fakeTextarea}\n {counter}\n </label>\n </RenderLayer>\n );\n };\n\n private handleCloseCounterHelp = () => this.setState({ isCounterVisible: false });\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Edge bug: textarea maxlength doesn't work after new line\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/18833616/\n const value = this.props.value !== undefined ? this.props.value.toString() : null;\n const isBlockEnter = isKeyEnter(e) && value !== null && value.length === this.props.maxLength;\n\n if (isBlockEnter) {\n e.preventDefault();\n }\n\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (needsPolyfillPlaceholder) {\n const fieldIsEmpty = e.target.value === '';\n\n if (this.state.needsPolyfillPlaceholder !== fieldIsEmpty) {\n this.setState({ needsPolyfillPlaceholder: fieldIsEmpty });\n }\n }\n\n if (this.props.onValueChange) {\n this.props.onValueChange(e.target.value);\n }\n\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onChange) {\n this.props.onChange(e);\n }\n\n this.reflowCounter();\n };\n\n private ref = (element: HTMLTextAreaElement) => {\n this.node = element;\n };\n\n private refFake = (element: HTMLTextAreaElement) => {\n this.fakeNode = element;\n };\n\n private refCounter = (ref: TextareaCounterRef | null) => {\n this.counter = ref;\n };\n\n private autoResizeHandler = () => {\n const fakeNode = this.fakeNode;\n if (!fakeNode) {\n return;\n }\n const node = this.node;\n if (!node) {\n return;\n }\n if (this.props.value === undefined) {\n fakeNode.value = node.value;\n }\n\n const { rows, maxRows } = this.getProps();\n if (rows === undefined || maxRows === undefined) {\n return;\n }\n\n const { height, exceededMaxHeight } =\n getTextAreaHeight({\n node: fakeNode,\n minRows: typeof rows === 'number' ? rows : parseInt(rows, 10),\n maxRows: typeof maxRows === 'number' ? maxRows : parseInt(maxRows, 10),\n extraRow: this.getProps().extraRow,\n }) || {};\n\n if (height === undefined || exceededMaxHeight === undefined) {\n return;\n }\n\n node.style.height = height + 'px';\n node.style.overflowY = exceededMaxHeight ? 'scroll' : 'hidden';\n fakeNode.style.overflowY = exceededMaxHeight ? 'scroll' : 'hidden';\n };\n\n private autoResize = throttle(this.autoResizeHandler, this.getAutoResizeThrottleWait());\n\n private handleCut = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onCut) {\n this.props.onCut(event);\n }\n\n this.reflowCounter();\n };\n\n private handlePaste = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onPaste) {\n this.props.onPaste(event);\n }\n\n this.reflowCounter();\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLTextAreaElement>) => {\n this.setState({ isCounterVisible: true });\n\n if (this.props.selectAllOnFocus) {\n // https://github.com/facebook/react/issues/7769\n this.node && !isIE11 ? this.selectAll() : this.delaySelectAll();\n }\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ /**
3
+ * React textarea behaves incorrectly on first rendered in Safari version 17.*
4
+ * Reproduce: https://codesandbox.io/p/sandbox/textarea-and-textarea-safari-bug-9v95vz
5
+ */
6
+ export declare const TextareaWithSafari17Workaround: import("../../lib/forwardRefAndName").ReactUIComponentWithRef<HTMLTextAreaElement, React.TextareaHTMLAttributes<HTMLTextAreaElement>> & Record<never, never>;
@@ -0,0 +1,20 @@
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.TextareaWithSafari17Workaround = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _react = _interopRequireDefault(require("react"));
2
+
3
+ var _forwardRefAndName = require("../../lib/forwardRefAndName");
4
+
5
+ /**
6
+ * React textarea behaves incorrectly on first rendered in Safari version 17.*
7
+ * Reproduce: https://codesandbox.io/p/sandbox/textarea-and-textarea-safari-bug-9v95vz
8
+ */
9
+ var TextareaWithSafari17Workaround = (0, _forwardRefAndName.forwardRefAndName)(
10
+
11
+
12
+ 'TextareaWithSafari17Workaround', function (props, ref) {
13
+ var _React$useState = _react.default.useState(true),firstRender = _React$useState[0],setFirstRender = _React$useState[1];
14
+
15
+ _react.default.useEffect(function () {
16
+ firstRender && setFirstRender(false);
17
+ }, []);
18
+
19
+ return /*#__PURE__*/_react.default.createElement("textarea", (0, _extends2.default)({}, props, { value: firstRender ? '' : props.value, ref: ref }));
20
+ });exports.TextareaWithSafari17Workaround = TextareaWithSafari17Workaround;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["TextareaWithSafari17Workaround.tsx"],"names":["TextareaWithSafari17Workaround","props","ref","React","useState","firstRender","setFirstRender","useEffect","value"],"mappings":"8PAAA;;AAEA;;AAEA;AACA;AACA;AACA;AACO,IAAMA,8BAA8B,GAAG;;;AAG5C,gCAH4C,EAGV,UAACC,KAAD,EAAQC,GAAR,EAAgB;AAClD,wBAAsCC,eAAMC,QAAN,CAAe,IAAf,CAAtC,CAAOC,WAAP,sBAAoBC,cAApB;;AAEAH,iBAAMI,SAAN,CAAgB,YAAM;AACpBF,IAAAA,WAAW,IAAIC,cAAc,CAAC,KAAD,CAA7B;AACD,GAFD,EAEG,EAFH;;AAIA,sBAAO,oEAAcL,KAAd,IAAqB,KAAK,EAAEI,WAAW,GAAG,EAAH,GAAQJ,KAAK,CAACO,KAArD,EAA4D,GAAG,EAAEN,GAAjE,IAAP;AACD,CAX6C,CAAvC,C","sourcesContent":["import React from 'react';\n\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\n\n/**\n * React textarea behaves incorrectly on first rendered in Safari version 17.*\n * Reproduce: https://codesandbox.io/p/sandbox/textarea-and-textarea-safari-bug-9v95vz\n */\nexport const TextareaWithSafari17Workaround = forwardRefAndName<\n HTMLTextAreaElement,\n React.TextareaHTMLAttributes<HTMLTextAreaElement>\n>('TextareaWithSafari17Workaround', (props, ref) => {\n const [firstRender, setFirstRender] = React.useState(true);\n\n React.useEffect(() => {\n firstRender && setFirstRender(false);\n }, []);\n\n return <textarea {...props} value={firstRender ? '' : props.value} ref={ref} />;\n});\n"]}
@@ -8,3 +8,4 @@ export declare const isEdge: boolean;
8
8
  export declare const isIE11: boolean;
9
9
  export declare const isMobile: boolean | undefined;
10
10
  export declare const isIOS: boolean;
11
+ export declare const isSafari17: boolean;
package/cjs/lib/client.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";exports.__esModule = true;exports.isWindows = exports.isSafari = exports.isOpera = exports.isMobile = exports.isMac = exports.isIOS = exports.isIE11 = exports.isFirefox = exports.isEdge = exports.isChrome = void 0;var _globalObject = require("@skbkontur/global-object");var _globalObject$navigat, _globalObject$navigat2, _globalObject$navigat3;
1
+ "use strict";exports.__esModule = true;exports.isWindows = exports.isSafari17 = exports.isSafari = exports.isOpera = exports.isMobile = exports.isMac = exports.isIOS = exports.isIE11 = exports.isFirefox = exports.isEdge = exports.isChrome = void 0;var _globalObject = require("@skbkontur/global-object");var _globalObject$navigat, _globalObject$navigat2, _globalObject$navigat3;
2
2
 
3
3
  // NOTE Some checks are used from https://github.com/arasatasaygin/is.js
4
4
  var platform = (((_globalObject$navigat = _globalObject.globalObject.navigator) == null ? void 0 : _globalObject$navigat.platform) || '').toLowerCase();
@@ -20,4 +20,6 @@ var isMobile =
20
20
  _globalObject.globalObject.document &&
21
21
  'ontouchstart' in _globalObject.globalObject.document.documentElement;exports.isMobile = isMobile;
22
22
 
23
- var isIOS = /(ip[ao]d|iphone)/gi.test(userAgent);exports.isIOS = isIOS;
23
+ var isIOS = /(ip[ao]d|iphone)/gi.test(userAgent);exports.isIOS = isIOS;
24
+
25
+ var isSafari17 = isSafari && userAgent.includes('version/17');exports.isSafari17 = isSafari17;
@@ -1 +1 @@
1
- {"version":3,"sources":["client.ts"],"names":["platform","navigator","toLowerCase","userAgent","vendor","isMac","includes","isWindows","isSafari","test","isFirefox","isOpera","isChrome","isEdge","isIE11","isMobile","globalObject","document","documentElement","isIOS"],"mappings":"mOAAA,wD;;AAEA;AACA,IAAMA,QAAQ,GAAG,CAAC,qDAAaC,SAAb,2CAAwBD,QAAxB,KAAoC,EAArC,EAAyCE,WAAzC,EAAjB;AACA,IAAMC,SAAS,GAAG,CAAC,sDAAaF,SAAb,4CAAwBE,SAAxB,KAAqC,EAAtC,EAA0CD,WAA1C,EAAlB;AACA,IAAME,MAAM,GAAG,CAAC,sDAAaH,SAAb,4CAAwBG,MAAxB,KAAkC,EAAnC,EAAuCF,WAAvC,EAAf;;AAEO,IAAMG,KAAK,GAAGL,QAAQ,CAACM,QAAT,CAAkB,KAAlB,CAAd,C;AACA,IAAMC,SAAS,GAAGP,QAAQ,CAACM,QAAT,CAAkB,KAAlB,CAAlB,C;;AAEA,IAAME,QAAQ,GAAG,0BAA0BC,IAA1B,CAA+BN,SAA/B,CAAjB,C;AACA,IAAMO,SAAS,GAAG,2BAA2BD,IAA3B,CAAgCN,SAAhC,CAAlB,C;AACA,IAAMQ,OAAO,GAAG,kCAAkCF,IAAlC,CAAuCN,SAAvC,CAAhB,C;AACA,IAAMS,QAAQ,GAAGR,MAAM,CAACE,QAAP,CAAgB,YAAhB,KAAiC,0BAA0BG,IAA1B,CAA+BN,SAA/B,CAAjC,IAA8E,CAACQ,OAAhG,C;AACA,IAAME,MAAM,GAAGV,SAAS,CAACG,QAAV,CAAmB,OAAnB,CAAf,C;AACA,IAAMQ,MAAM,GAAGX,SAAS,CAACG,QAAV,CAAmB,UAAnB,CAAf,C;;AAEA,IAAMS,QAAQ;AACnB,iEAAiEN,IAAjE,CAAsEN,SAAtE;AACAa,2BAAaC,QADb;AAEA,kBAAkBD,2BAAaC,QAAb,CAAsBC,eAHnC,C;;AAKA,IAAMC,KAAK,GAAG,qBAAqBV,IAArB,CAA0BN,SAA1B,CAAd,C","sourcesContent":["import { globalObject } from '@skbkontur/global-object';\n\n// NOTE Some checks are used from https://github.com/arasatasaygin/is.js\nconst platform = (globalObject.navigator?.platform || '').toLowerCase();\nconst userAgent = (globalObject.navigator?.userAgent || '').toLowerCase();\nconst vendor = (globalObject.navigator?.vendor || '').toLowerCase();\n\nexport const isMac = platform.includes('mac');\nexport const isWindows = platform.includes('win');\n\nexport const isSafari = /version\\/(\\d+).+?safari/.test(userAgent);\nexport const isFirefox = /(?:firefox|fxios)\\/(\\d+)/.test(userAgent);\nexport const isOpera = /(?:^opera.+?version|opr)\\/(\\d+)/.test(userAgent);\nexport const isChrome = vendor.includes('google inc') && /(?:chrome|crios)\\/(\\d+)/.test(userAgent) && !isOpera;\nexport const isEdge = userAgent.includes('edge/');\nexport const isIE11 = userAgent.includes('trident/');\n\nexport const isMobile =\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent) &&\n globalObject.document &&\n 'ontouchstart' in globalObject.document.documentElement;\n\nexport const isIOS = /(ip[ao]d|iphone)/gi.test(userAgent);\n"]}
1
+ {"version":3,"sources":["client.ts"],"names":["platform","navigator","toLowerCase","userAgent","vendor","isMac","includes","isWindows","isSafari","test","isFirefox","isOpera","isChrome","isEdge","isIE11","isMobile","globalObject","document","documentElement","isIOS","isSafari17"],"mappings":"wPAAA,wD;;AAEA;AACA,IAAMA,QAAQ,GAAG,CAAC,qDAAaC,SAAb,2CAAwBD,QAAxB,KAAoC,EAArC,EAAyCE,WAAzC,EAAjB;AACA,IAAMC,SAAS,GAAG,CAAC,sDAAaF,SAAb,4CAAwBE,SAAxB,KAAqC,EAAtC,EAA0CD,WAA1C,EAAlB;AACA,IAAME,MAAM,GAAG,CAAC,sDAAaH,SAAb,4CAAwBG,MAAxB,KAAkC,EAAnC,EAAuCF,WAAvC,EAAf;;AAEO,IAAMG,KAAK,GAAGL,QAAQ,CAACM,QAAT,CAAkB,KAAlB,CAAd,C;AACA,IAAMC,SAAS,GAAGP,QAAQ,CAACM,QAAT,CAAkB,KAAlB,CAAlB,C;;AAEA,IAAME,QAAQ,GAAG,0BAA0BC,IAA1B,CAA+BN,SAA/B,CAAjB,C;AACA,IAAMO,SAAS,GAAG,2BAA2BD,IAA3B,CAAgCN,SAAhC,CAAlB,C;AACA,IAAMQ,OAAO,GAAG,kCAAkCF,IAAlC,CAAuCN,SAAvC,CAAhB,C;AACA,IAAMS,QAAQ,GAAGR,MAAM,CAACE,QAAP,CAAgB,YAAhB,KAAiC,0BAA0BG,IAA1B,CAA+BN,SAA/B,CAAjC,IAA8E,CAACQ,OAAhG,C;AACA,IAAME,MAAM,GAAGV,SAAS,CAACG,QAAV,CAAmB,OAAnB,CAAf,C;AACA,IAAMQ,MAAM,GAAGX,SAAS,CAACG,QAAV,CAAmB,UAAnB,CAAf,C;;AAEA,IAAMS,QAAQ;AACnB,iEAAiEN,IAAjE,CAAsEN,SAAtE;AACAa,2BAAaC,QADb;AAEA,kBAAkBD,2BAAaC,QAAb,CAAsBC,eAHnC,C;;AAKA,IAAMC,KAAK,GAAG,qBAAqBV,IAArB,CAA0BN,SAA1B,CAAd,C;;AAEA,IAAMiB,UAAU,GAAGZ,QAAQ,IAAIL,SAAS,CAACG,QAAV,CAAmB,YAAnB,CAA/B,C","sourcesContent":["import { globalObject } from '@skbkontur/global-object';\n\n// NOTE Some checks are used from https://github.com/arasatasaygin/is.js\nconst platform = (globalObject.navigator?.platform || '').toLowerCase();\nconst userAgent = (globalObject.navigator?.userAgent || '').toLowerCase();\nconst vendor = (globalObject.navigator?.vendor || '').toLowerCase();\n\nexport const isMac = platform.includes('mac');\nexport const isWindows = platform.includes('win');\n\nexport const isSafari = /version\\/(\\d+).+?safari/.test(userAgent);\nexport const isFirefox = /(?:firefox|fxios)\\/(\\d+)/.test(userAgent);\nexport const isOpera = /(?:^opera.+?version|opr)\\/(\\d+)/.test(userAgent);\nexport const isChrome = vendor.includes('google inc') && /(?:chrome|crios)\\/(\\d+)/.test(userAgent) && !isOpera;\nexport const isEdge = userAgent.includes('edge/');\nexport const isIE11 = userAgent.includes('trident/');\n\nexport const isMobile =\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent) &&\n globalObject.document &&\n 'ontouchstart' in globalObject.document.documentElement;\n\nexport const isIOS = /(ip[ao]d|iphone)/gi.test(userAgent);\n\nexport const isSafari17 = isSafari && userAgent.includes('version/17');\n"]}
@@ -41,6 +41,32 @@ const getItems = () => {};
41
41
  </ReactUIFeatureFlagsContext.Provider>
42
42
  ```
43
43
 
44
+ ### textareaUseSafari17Workaround
45
+
46
+ В браузере Safari версии 17.* возник баг в реактовом элементе `<textarea />`. Баг не позволяет нормально вводить текст в пустые строки.
47
+ Но только если эти пустые строки были при монтировании элемента.
48
+ Если пустые строки добавить сразу после монтирования, то проблема не наблюдается.
49
+
50
+ Мы можем купировать этот баг на своей стороне, но только в рамках контрола `Textarea`.
51
+ Также баг могут поправить на стороне Safari или React, из-за чего уже наше обходное решение может вызвать другой баг.
52
+ Поэтому лучше добавить возможность выключить в любой момент наше обходное решение.
53
+
54
+ Обходное решение само отслеживает Safari версии 17.*, и применяется только для него.
55
+
56
+ ```jsx harmony
57
+ import { Textarea, ReactUIFeatureFlagsContext } from '@skbkontur/react-ui';
58
+
59
+ const [value, setValue] = React.useState('1\n\n\n\n2');
60
+
61
+ <ReactUIFeatureFlagsContext.Provider value={{ textareaUseSafari17Workaround: true }}>
62
+ <Textarea
63
+ value={value}
64
+ onValueChange={setValue}
65
+ rows={5}
66
+ />
67
+ </ReactUIFeatureFlagsContext.Provider>
68
+ ```
69
+
44
70
  ## Объект со всеми флагами
45
71
 
46
72
  Чтобы получить объект со всеми флагами, необходимо применить вспомогательную функцию getFullValidationsFlagsContext к объекту заданных флагов:
@@ -1,4 +1,5 @@
1
1
  import { ReactUIFeatureFlags } from './ReactUIFeatureFlagsContext';
2
2
  export declare const getFullReactUIFlagsContext: (flags: ReactUIFeatureFlags) => {
3
3
  tokenInputRemoveWhitespaceFromDefaultDelimiters?: boolean | undefined;
4
+ textareaUseSafari17Workaround?: boolean | undefined;
4
5
  };