@skbkontur/react-ui 4.19.0-next.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 +38 -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 +3 -3
@@ -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
  };
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  export interface ReactUIFeatureFlags {
3
3
  tokenInputRemoveWhitespaceFromDefaultDelimiters?: boolean;
4
+ textareaUseSafari17Workaround?: boolean;
4
5
  }
5
6
  export declare const reactUIFeatureFlagsDefault: ReactUIFeatureFlags;
6
7
  export declare const ReactUIFeatureFlagsContext: React.Context<ReactUIFeatureFlags>;
@@ -4,8 +4,10 @@
4
4
 
5
5
 
6
6
 
7
+
7
8
  var reactUIFeatureFlagsDefault = {
8
- tokenInputRemoveWhitespaceFromDefaultDelimiters: false };exports.reactUIFeatureFlagsDefault = reactUIFeatureFlagsDefault;
9
+ tokenInputRemoveWhitespaceFromDefaultDelimiters: false,
10
+ textareaUseSafari17Workaround: false };exports.reactUIFeatureFlagsDefault = reactUIFeatureFlagsDefault;
9
11
 
10
12
 
11
13
  var ReactUIFeatureFlagsContext = /*#__PURE__*/_react.default.createContext(reactUIFeatureFlagsDefault);exports.ReactUIFeatureFlagsContext = ReactUIFeatureFlagsContext;
@@ -1 +1 @@
1
- {"version":3,"sources":["ReactUIFeatureFlagsContext.tsx"],"names":["reactUIFeatureFlagsDefault","tokenInputRemoveWhitespaceFromDefaultDelimiters","ReactUIFeatureFlagsContext","React","createContext","displayName"],"mappings":"6MAAA;;;;;;AAMO,IAAMA,0BAA+C,GAAG;AAC7DC,EAAAA,+CAA+C,EAAE,KADY,EAAxD,C;;;AAIA,IAAMC,0BAA0B,gBAAGC,eAAMC,aAAN,CAAyCJ,0BAAzC,CAAnC,C;AACPE,0BAA0B,CAACG,WAA3B,GAAyC,4BAAzC","sourcesContent":["import React from 'react';\n\nexport interface ReactUIFeatureFlags {\n tokenInputRemoveWhitespaceFromDefaultDelimiters?: boolean;\n}\n\nexport const reactUIFeatureFlagsDefault: ReactUIFeatureFlags = {\n tokenInputRemoveWhitespaceFromDefaultDelimiters: false,\n};\n\nexport const ReactUIFeatureFlagsContext = React.createContext<ReactUIFeatureFlags>(reactUIFeatureFlagsDefault);\nReactUIFeatureFlagsContext.displayName = 'ReactUIFeatureFlagsContext';\n"]}
1
+ {"version":3,"sources":["ReactUIFeatureFlagsContext.tsx"],"names":["reactUIFeatureFlagsDefault","tokenInputRemoveWhitespaceFromDefaultDelimiters","textareaUseSafari17Workaround","ReactUIFeatureFlagsContext","React","createContext","displayName"],"mappings":"6MAAA;;;;;;;AAOO,IAAMA,0BAA+C,GAAG;AAC7DC,EAAAA,+CAA+C,EAAE,KADY;AAE7DC,EAAAA,6BAA6B,EAAE,KAF8B,EAAxD,C;;;AAKA,IAAMC,0BAA0B,gBAAGC,eAAMC,aAAN,CAAyCL,0BAAzC,CAAnC,C;AACPG,0BAA0B,CAACG,WAA3B,GAAyC,4BAAzC","sourcesContent":["import React from 'react';\n\nexport interface ReactUIFeatureFlags {\n tokenInputRemoveWhitespaceFromDefaultDelimiters?: boolean;\n textareaUseSafari17Workaround?: boolean;\n}\n\nexport const reactUIFeatureFlagsDefault: ReactUIFeatureFlags = {\n tokenInputRemoveWhitespaceFromDefaultDelimiters: false,\n textareaUseSafari17Workaround: false,\n};\n\nexport const ReactUIFeatureFlagsContext = React.createContext<ReactUIFeatureFlags>(reactUIFeatureFlagsDefault);\nReactUIFeatureFlagsContext.displayName = 'ReactUIFeatureFlagsContext';\n"]}
@@ -1,5 +1,4 @@
1
1
  import _extends from "@babel/runtime/helpers/esm/extends";
2
- import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized";
3
2
  import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
4
3
 
5
4
  var _class, _class2, _temp;
@@ -19,8 +18,6 @@ export var GlobalLoader = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
19
18
  _inheritsLoose(GlobalLoader, _React$Component);
20
19
 
21
20
  function GlobalLoader(props) {
22
- var _currentGlobalLoader;
23
-
24
21
  var _this;
25
22
 
26
23
  _this = _React$Component.call(this, props) || this;
@@ -134,14 +131,17 @@ export var GlobalLoader = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
134
131
  successAnimationInProgress: false,
135
132
  expectedResponseTime: _this.getProps().expectedResponseTime
136
133
  };
137
- (_currentGlobalLoader = currentGlobalLoader) == null ? void 0 : _currentGlobalLoader.kill();
138
- currentGlobalLoader = _assertThisInitialized(_this);
139
134
  return _this;
140
135
  }
141
136
 
142
137
  var _proto = GlobalLoader.prototype;
143
138
 
144
139
  _proto.componentDidMount = function componentDidMount() {
140
+ var _currentGlobalLoader;
141
+
142
+ (_currentGlobalLoader = currentGlobalLoader) == null ? void 0 : _currentGlobalLoader.kill();
143
+ currentGlobalLoader = this;
144
+
145
145
  var _this$getProps = this.getProps(),
146
146
  active = _this$getProps.active,
147
147
  rejected = _this$getProps.rejected;
@@ -1 +1 @@
1
- {"version":3,"sources":["GlobalLoader.tsx"],"names":["React","debounce","isTestEnv","CommonWrapper","rootNode","createPropsGetter","GlobalLoaderView","GlobalLoaderDataTids","root","currentGlobalLoader","GlobalLoader","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","Component","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":["React","debounce","isTestEnv","CommonWrapper","rootNode","createPropsGetter","GlobalLoaderView","GlobalLoaderDataTids","root","currentGlobalLoader","GlobalLoader","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","Component","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 }\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"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["Switcher.tsx"],"names":["React","PropTypes","isKeyArrowHorizontal","isKeyArrowLeft","isKeyEnter","getButtonCorners","Group","Button","ThemeContext","CommonWrapper","cx","rootNode","styles","getSwitcherTheme","mod","SwitcherDataTids","root","Switcher","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","captionLarge","theme","captionMedium","captionSmall","render","renderMain","listClassName","error","inputProps","type","onKeyDown","onFocus","onBlur","className","input","captionClassName","caption","setRootNode","wrap","Component","__KONTUR_REACT_UI__","defaultProps","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":["React","PropTypes","isKeyArrowHorizontal","isKeyArrowLeft","isKeyEnter","getButtonCorners","Group","Button","ThemeContext","CommonWrapper","cx","rootNode","styles","getSwitcherTheme","mod","SwitcherDataTids","root","Switcher","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","captionLarge","theme","captionMedium","captionSmall","render","renderMain","listClassName","error","inputProps","type","onKeyDown","onFocus","onBlur","className","input","captionClassName","caption","setRootNode","wrap","Component","__KONTUR_REACT_UI__","defaultProps","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"]}
@@ -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
  };
@@ -18,15 +18,17 @@ import * as LayoutEvents from "../../../lib/LayoutEvents";
18
18
  import { ThemeContext } from "../../../lib/theming/ThemeContext";
19
19
  import { RenderLayer } from "../../../internal/RenderLayer";
20
20
  import { ResizeDetector } from "../../../internal/ResizeDetector";
21
- import { isIE11 } from "../../../lib/client";
21
+ import { isIE11, isSafari17 } from "../../../lib/client";
22
22
  import { CommonWrapper } from "../../../internal/CommonWrapper";
23
23
  import { isTestEnv } from "../../../lib/currentEnvironment";
24
24
  import { cx } from "../../../lib/theming/Emotion";
25
25
  import { rootNode } from "../../../lib/rootNode";
26
26
  import { createPropsGetter } from "../../../lib/createPropsGetter";
27
+ import { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from "../../../lib/featureFlagsContext";
27
28
  import { getTextAreaHeight } from "../TextareaHelpers";
28
29
  import { styles } from "../Textarea.styles";
29
30
  import { TextareaCounter } from "../TextareaCounter";
31
+ import { TextareaWithSafari17Workaround } from "../TextareaWithSafari17Workaround";
30
32
  /**
31
33
  * @deprecated use SizeProp
32
34
  */
@@ -171,6 +173,7 @@ var Textarea = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_Reac
171
173
  onCloseHelp: _this.handleCloseCounterHelp,
172
174
  ref: _this.refCounter
173
175
  });
176
+ var Component = _this.featureFlags.textareaUseSafari17Workaround && isSafari17 ? TextareaWithSafari17Workaround : 'textarea';
174
177
  return /*#__PURE__*/React.createElement(RenderLayer, {
175
178
  onFocusOutside: _this.handleCloseCounterHelp,
176
179
  onClickOutside: _this.handleCloseCounterHelp,
@@ -181,7 +184,7 @@ var Textarea = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_Reac
181
184
  className: cx(_this.getRootSizeClassName(), (_cx2 = {}, _cx2[styles.root()] = true, _cx2))
182
185
  }), placeholderPolyfill, /*#__PURE__*/React.createElement(ResizeDetector, {
183
186
  onResize: _this.reflowCounter
184
- }, /*#__PURE__*/React.createElement("textarea", _extends({}, textareaProps, {
187
+ }, /*#__PURE__*/React.createElement(Component, _extends({}, textareaProps, {
185
188
  className: textareaClassNames,
186
189
  style: textareaStyle,
187
190
  placeholder: !placeholderPolyfill ? placeholder : undefined,
@@ -433,11 +436,14 @@ var Textarea = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_Reac
433
436
  _proto.render = function render() {
434
437
  var _this2 = this;
435
438
 
436
- return /*#__PURE__*/React.createElement(ThemeContext.Consumer, null, function (theme) {
437
- _this2.theme = theme;
438
- return /*#__PURE__*/React.createElement(CommonWrapper, _extends({
439
- rootNodeRef: _this2.setRootNode
440
- }, _this2.props), _this2.renderMain);
439
+ return /*#__PURE__*/React.createElement(ReactUIFeatureFlagsContext.Consumer, null, function (flags) {
440
+ _this2.featureFlags = getFullReactUIFlagsContext(flags);
441
+ return /*#__PURE__*/React.createElement(ThemeContext.Consumer, null, function (theme) {
442
+ _this2.theme = theme;
443
+ return /*#__PURE__*/React.createElement(CommonWrapper, _extends({
444
+ rootNodeRef: _this2.setRootNode
445
+ }, _this2.props), _this2.renderMain);
446
+ });
441
447
  });
442
448
  }
443
449
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["Textarea.tsx"],"names":["React","PropTypes","throttle","globalObject","isKeyEnter","needsPolyfillPlaceholder","LayoutEvents","ThemeContext","RenderLayer","ResizeDetector","isIE11","CommonWrapper","isTestEnv","cx","rootNode","createPropsGetter","getTextAreaHeight","styles","TextareaCounter","DEFAULT_WIDTH","AUTORESIZE_THROTTLE_DEFAULT_WAIT","TextareaDataTids","root","counter","helpIcon","Textarea","getProps","defaultProps","state","isCounterVisible","reflowCounter","reflow","selectAllId","textareaObserver","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","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","rootLarge","rootMedium","rootSmall","textareaLarge","textareaMedium","textareaSmall","componentDidMount","layoutEvents","addListener","observe","attributes","componentWillUnmount","remove","disconnect","componentDidUpdate","prevProps","cancel","render","setRootNode","blur","Component","__KONTUR_REACT_UI__","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"],"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 } 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":["React","PropTypes","throttle","globalObject","isKeyEnter","needsPolyfillPlaceholder","LayoutEvents","ThemeContext","RenderLayer","ResizeDetector","isIE11","isSafari17","CommonWrapper","isTestEnv","cx","rootNode","createPropsGetter","getFullReactUIFlagsContext","ReactUIFeatureFlagsContext","getTextAreaHeight","styles","TextareaCounter","TextareaWithSafari17Workaround","DEFAULT_WIDTH","AUTORESIZE_THROTTLE_DEFAULT_WAIT","TextareaDataTids","root","counter","helpIcon","Textarea","getProps","defaultProps","state","isCounterVisible","reflowCounter","reflow","selectAllId","textareaObserver","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","textarea","theme","hovering","isAnimationsDisabled","textareaStyle","placeholderPolyfill","defaultValue","fakeTextarea","fakeProps","className","fake","readOnly","refFake","maxLength","handleCloseCounterHelp","refCounter","Component","featureFlags","textareaUseSafari17Workaround","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","rootLarge","rootMedium","rootSmall","textareaLarge","textareaMedium","textareaSmall","componentDidMount","layoutEvents","addListener","observe","attributes","componentWillUnmount","remove","disconnect","componentDidUpdate","prevProps","cancel","render","flags","setRootNode","blur","__KONTUR_REACT_UI__","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"],"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"]}
@@ -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: {
@@ -0,0 +1,21 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import React from 'react';
3
+ import { forwardRefAndName } from "../../../lib/forwardRefAndName";
4
+ /**
5
+ * React textarea behaves incorrectly on first rendered in Safari version 17.*
6
+ * Reproduce: https://codesandbox.io/p/sandbox/textarea-and-textarea-safari-bug-9v95vz
7
+ */
8
+
9
+ export var TextareaWithSafari17Workaround = forwardRefAndName('TextareaWithSafari17Workaround', function (props, ref) {
10
+ var _React$useState = React.useState(true),
11
+ firstRender = _React$useState[0],
12
+ setFirstRender = _React$useState[1];
13
+
14
+ React.useEffect(function () {
15
+ firstRender && setFirstRender(false);
16
+ }, []);
17
+ return /*#__PURE__*/React.createElement("textarea", _extends({}, props, {
18
+ value: firstRender ? '' : props.value,
19
+ ref: ref
20
+ }));
21
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["TextareaWithSafari17Workaround.tsx"],"names":["React","forwardRefAndName","TextareaWithSafari17Workaround","props","ref","useState","firstRender","setFirstRender","useEffect","value"],"mappings":"0DAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA,SAASC,iBAAT,QAAkC,6BAAlC;;AAEA;AACA;AACA;AACA;AACA,OAAO,IAAMC,8BAA8B,GAAGD,iBAAiB;;;AAG7D,gCAH6D,EAG3B,UAACE,KAAD,EAAQC,GAAR,EAAgB;AAClD,wBAAsCJ,KAAK,CAACK,QAAN,CAAe,IAAf,CAAtC,CAAOC,WAAP,sBAAoBC,cAApB;;AAEAP,EAAAA,KAAK,CAACQ,SAAN,CAAgB,YAAM;AACpBF,IAAAA,WAAW,IAAIC,cAAc,CAAC,KAAD,CAA7B;AACD,GAFD,EAEG,EAFH;;AAIA,sBAAO,6CAAcJ,KAAd,IAAqB,KAAK,EAAEG,WAAW,GAAG,EAAH,GAAQH,KAAK,CAACM,KAArD,EAA4D,GAAG,EAAEL,GAAjE,IAAP;AACD,CAX8D,CAAxD","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"]}
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../cjs/components/Textarea/TextareaWithSafari17Workaround.js",
3
+ "module": "TextareaWithSafari17Workaround",
4
+ "types": "../TextareaWithSafari17Workaround.d.ts",
5
+ "sideEffects": false
6
+ }
@@ -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>;
@@ -14,4 +14,5 @@ export var isChrome = vendor.includes('google inc') && /(?:chrome|crios)\/(\d+)/
14
14
  export var isEdge = userAgent.includes('edge/');
15
15
  export var isIE11 = userAgent.includes('trident/');
16
16
  export var isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent) && globalObject.document && 'ontouchstart' in globalObject.document.documentElement;
17
- export var isIOS = /(ip[ao]d|iphone)/gi.test(userAgent);
17
+ export var isIOS = /(ip[ao]d|iphone)/gi.test(userAgent);
18
+ export var isSafari17 = isSafari && userAgent.includes('version/17');
@@ -1 +1 @@
1
- {"version":3,"sources":["client.ts"],"names":["globalObject","platform","navigator","toLowerCase","userAgent","vendor","isMac","includes","isWindows","isSafari","test","isFirefox","isOpera","isChrome","isEdge","isIE11","isMobile","document","documentElement","isIOS"],"mappings":"0EAAA,SAASA,YAAT,QAA6B,0BAA7B;;AAEA;AACA,IAAMC,QAAQ,GAAG,CAAC,0BAAAD,YAAY,CAACE,SAAb,2CAAwBD,QAAxB,KAAoC,EAArC,EAAyCE,WAAzC,EAAjB;AACA,IAAMC,SAAS,GAAG,CAAC,2BAAAJ,YAAY,CAACE,SAAb,4CAAwBE,SAAxB,KAAqC,EAAtC,EAA0CD,WAA1C,EAAlB;AACA,IAAME,MAAM,GAAG,CAAC,2BAAAL,YAAY,CAACE,SAAb,4CAAwBG,MAAxB,KAAkC,EAAnC,EAAuCF,WAAvC,EAAf;;AAEA,OAAO,IAAMG,KAAK,GAAGL,QAAQ,CAACM,QAAT,CAAkB,KAAlB,CAAd;AACP,OAAO,IAAMC,SAAS,GAAGP,QAAQ,CAACM,QAAT,CAAkB,KAAlB,CAAlB;;AAEP,OAAO,IAAME,QAAQ,GAAG,0BAA0BC,IAA1B,CAA+BN,SAA/B,CAAjB;AACP,OAAO,IAAMO,SAAS,GAAG,2BAA2BD,IAA3B,CAAgCN,SAAhC,CAAlB;AACP,OAAO,IAAMQ,OAAO,GAAG,kCAAkCF,IAAlC,CAAuCN,SAAvC,CAAhB;AACP,OAAO,IAAMS,QAAQ,GAAGR,MAAM,CAACE,QAAP,CAAgB,YAAhB,KAAiC,0BAA0BG,IAA1B,CAA+BN,SAA/B,CAAjC,IAA8E,CAACQ,OAAhG;AACP,OAAO,IAAME,MAAM,GAAGV,SAAS,CAACG,QAAV,CAAmB,OAAnB,CAAf;AACP,OAAO,IAAMQ,MAAM,GAAGX,SAAS,CAACG,QAAV,CAAmB,UAAnB,CAAf;;AAEP,OAAO,IAAMS,QAAQ;AACnB,iEAAiEN,IAAjE,CAAsEN,SAAtE;AACAJ,YAAY,CAACiB,QADb;AAEA,kBAAkBjB,YAAY,CAACiB,QAAb,CAAsBC,eAHnC;;AAKP,OAAO,IAAMC,KAAK,GAAG,qBAAqBT,IAArB,CAA0BN,SAA1B,CAAd","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":["globalObject","platform","navigator","toLowerCase","userAgent","vendor","isMac","includes","isWindows","isSafari","test","isFirefox","isOpera","isChrome","isEdge","isIE11","isMobile","document","documentElement","isIOS","isSafari17"],"mappings":"0EAAA,SAASA,YAAT,QAA6B,0BAA7B;;AAEA;AACA,IAAMC,QAAQ,GAAG,CAAC,0BAAAD,YAAY,CAACE,SAAb,2CAAwBD,QAAxB,KAAoC,EAArC,EAAyCE,WAAzC,EAAjB;AACA,IAAMC,SAAS,GAAG,CAAC,2BAAAJ,YAAY,CAACE,SAAb,4CAAwBE,SAAxB,KAAqC,EAAtC,EAA0CD,WAA1C,EAAlB;AACA,IAAME,MAAM,GAAG,CAAC,2BAAAL,YAAY,CAACE,SAAb,4CAAwBG,MAAxB,KAAkC,EAAnC,EAAuCF,WAAvC,EAAf;;AAEA,OAAO,IAAMG,KAAK,GAAGL,QAAQ,CAACM,QAAT,CAAkB,KAAlB,CAAd;AACP,OAAO,IAAMC,SAAS,GAAGP,QAAQ,CAACM,QAAT,CAAkB,KAAlB,CAAlB;;AAEP,OAAO,IAAME,QAAQ,GAAG,0BAA0BC,IAA1B,CAA+BN,SAA/B,CAAjB;AACP,OAAO,IAAMO,SAAS,GAAG,2BAA2BD,IAA3B,CAAgCN,SAAhC,CAAlB;AACP,OAAO,IAAMQ,OAAO,GAAG,kCAAkCF,IAAlC,CAAuCN,SAAvC,CAAhB;AACP,OAAO,IAAMS,QAAQ,GAAGR,MAAM,CAACE,QAAP,CAAgB,YAAhB,KAAiC,0BAA0BG,IAA1B,CAA+BN,SAA/B,CAAjC,IAA8E,CAACQ,OAAhG;AACP,OAAO,IAAME,MAAM,GAAGV,SAAS,CAACG,QAAV,CAAmB,OAAnB,CAAf;AACP,OAAO,IAAMQ,MAAM,GAAGX,SAAS,CAACG,QAAV,CAAmB,UAAnB,CAAf;;AAEP,OAAO,IAAMS,QAAQ;AACnB,iEAAiEN,IAAjE,CAAsEN,SAAtE;AACAJ,YAAY,CAACiB,QADb;AAEA,kBAAkBjB,YAAY,CAACiB,QAAb,CAAsBC,eAHnC;;AAKP,OAAO,IAAMC,KAAK,GAAG,qBAAqBT,IAArB,CAA0BN,SAA1B,CAAd;;AAEP,OAAO,IAAMgB,UAAU,GAAGX,QAAQ,IAAIL,SAAS,CAACG,QAAV,CAAmB,YAAnB,CAA/B","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"]}
package/lib/client.d.ts CHANGED
@@ -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;