@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.
- package/CHANGELOG.md +38 -0
- package/cjs/components/GlobalLoader/GlobalLoader.js +3 -3
- package/cjs/components/GlobalLoader/GlobalLoader.js.map +1 -1
- package/cjs/components/Switcher/Switcher.d.ts +1 -1
- package/cjs/components/Switcher/Switcher.js.map +1 -1
- package/cjs/components/Textarea/Textarea.d.ts +1 -0
- package/cjs/components/Textarea/Textarea.js +20 -3
- package/cjs/components/Textarea/Textarea.js.map +1 -1
- package/cjs/components/Textarea/TextareaWithSafari17Workaround.d.ts +6 -0
- package/cjs/components/Textarea/TextareaWithSafari17Workaround.js +20 -0
- package/cjs/components/Textarea/TextareaWithSafari17Workaround.js.map +1 -0
- package/cjs/lib/client.d.ts +1 -0
- package/cjs/lib/client.js +4 -2
- package/cjs/lib/client.js.map +1 -1
- package/cjs/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +26 -0
- package/cjs/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +1 -0
- package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
- package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +3 -1
- package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
- package/components/GlobalLoader/GlobalLoader/GlobalLoader.js +5 -5
- package/components/GlobalLoader/GlobalLoader/GlobalLoader.js.map +1 -1
- package/components/Switcher/Switcher/Switcher.js.map +1 -1
- package/components/Switcher/Switcher.d.ts +1 -1
- package/components/Textarea/Textarea/Textarea.js +13 -7
- package/components/Textarea/Textarea/Textarea.js.map +1 -1
- package/components/Textarea/Textarea.d.ts +1 -0
- package/components/Textarea/TextareaWithSafari17Workaround/TextareaWithSafari17Workaround.js +21 -0
- package/components/Textarea/TextareaWithSafari17Workaround/TextareaWithSafari17Workaround.js.map +1 -0
- package/components/Textarea/TextareaWithSafari17Workaround/package.json +6 -0
- package/components/Textarea/TextareaWithSafari17Workaround.d.ts +6 -0
- package/lib/client/client.js +2 -1
- package/lib/client/client.js.map +1 -1
- package/lib/client.d.ts +1 -0
- package/lib/featureFlagsContext/FEATUREFLAGSCONTEXT.md +26 -0
- package/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +1 -0
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js +2 -1
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
- package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
- 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
|
|
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
|
|
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(
|
|
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(
|
|
437
|
-
_this2.
|
|
438
|
-
return /*#__PURE__*/React.createElement(
|
|
439
|
-
|
|
440
|
-
|
|
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
|
+
});
|
package/components/Textarea/TextareaWithSafari17Workaround/TextareaWithSafari17Workaround.js.map
ADDED
|
@@ -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
|
+
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>;
|
package/lib/client/client.js
CHANGED
|
@@ -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');
|
package/lib/client/client.js.map
CHANGED
|
@@ -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