@skbkontur/react-ui 4.15.1 → 4.15.2
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 +13 -0
- package/cjs/components/Button/getInnerLinkTheme.js +2 -0
- package/cjs/components/Button/getInnerLinkTheme.js.map +1 -1
- package/cjs/components/CurrencyInput/CurrencyHelper.d.ts +2 -0
- package/cjs/components/CurrencyInput/CurrencyHelper.js +21 -6
- package/cjs/components/CurrencyInput/CurrencyHelper.js.map +1 -1
- package/cjs/components/Link/Link.js +1 -1
- package/cjs/components/Link/Link.js.map +1 -1
- package/cjs/components/Link/Link.mixins.d.ts +1 -1
- package/cjs/components/Link/Link.mixins.js +5 -4
- package/cjs/components/Link/Link.mixins.js.map +1 -1
- package/cjs/components/Link/Link.styles.d.ts +1 -1
- package/cjs/components/Link/Link.styles.js +14 -12
- package/cjs/components/Link/Link.styles.js.map +1 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.js +4 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
- package/cjs/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
- package/cjs/internal/themes/DefaultTheme.d.ts +4 -0
- package/cjs/internal/themes/DefaultTheme.js +13 -3
- package/cjs/internal/themes/DefaultTheme.js.map +1 -1
- package/components/Button/getInnerLinkTheme/getInnerLinkTheme.js +2 -0
- package/components/Button/getInnerLinkTheme/getInnerLinkTheme.js.map +1 -1
- package/components/CurrencyInput/CurrencyHelper/CurrencyHelper.js +32 -4
- package/components/CurrencyInput/CurrencyHelper/CurrencyHelper.js.map +1 -1
- package/components/CurrencyInput/CurrencyHelper.d.ts +2 -0
- package/components/Link/Link/Link.js +1 -1
- package/components/Link/Link/Link.js.map +1 -1
- package/components/Link/Link.mixins/Link.mixins.js +2 -2
- package/components/Link/Link.mixins/Link.mixins.js.map +1 -1
- package/components/Link/Link.mixins.d.ts +1 -1
- package/components/Link/Link.styles/Link.styles.js +13 -12
- package/components/Link/Link.styles/Link.styles.js.map +1 -1
- package/components/Link/Link.styles.d.ts +1 -1
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +6 -2
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
- package/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
- package/internal/themes/DefaultTheme/DefaultTheme.js +16 -0
- package/internal/themes/DefaultTheme/DefaultTheme.js.map +1 -1
- package/internal/themes/DefaultTheme.d.ts +4 -0
- package/package.json +2 -2
|
@@ -2,6 +2,8 @@ import { ThemeFactory } from "../../../lib/theming/ThemeFactory";
|
|
|
2
2
|
export var getInnerLinkTheme = function getInnerLinkTheme(theme) {
|
|
3
3
|
return ThemeFactory.create({
|
|
4
4
|
linkLineBorderBottomStyle: theme.btnLinkLineBorderBottomStyle,
|
|
5
|
+
linkLineHoverBorderBottomStyle: theme.btnLinkHoverLineBorderBottomStyle,
|
|
6
|
+
linkLineBorderBottomOpacity: theme.btnLinkLineBorderBottomOpacity,
|
|
5
7
|
linkLineBorderBottomWidth: theme.btnLinkLineBorderBottomWidth,
|
|
6
8
|
linkDisabledColor: theme.btnLinkDisabledColor
|
|
7
9
|
}, theme);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["getInnerLinkTheme.ts"],"names":["ThemeFactory","getInnerLinkTheme","theme","create","linkLineBorderBottomStyle","btnLinkLineBorderBottomStyle","linkLineBorderBottomWidth","btnLinkLineBorderBottomWidth","linkDisabledColor","btnLinkDisabledColor"],"mappings":"AAAA,SAASA,YAAT,QAA6B,gCAA7B;;;AAGA,OAAO,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,KAAD,EAAyB;AACxD,SAAOF,YAAY,CAACG,MAAb;AACL;AACEC,IAAAA,yBAAyB,EAAEF,KAAK,CAACG,4BADnC;AAEEC,IAAAA,
|
|
1
|
+
{"version":3,"sources":["getInnerLinkTheme.ts"],"names":["ThemeFactory","getInnerLinkTheme","theme","create","linkLineBorderBottomStyle","btnLinkLineBorderBottomStyle","linkLineHoverBorderBottomStyle","btnLinkHoverLineBorderBottomStyle","linkLineBorderBottomOpacity","btnLinkLineBorderBottomOpacity","linkLineBorderBottomWidth","btnLinkLineBorderBottomWidth","linkDisabledColor","btnLinkDisabledColor"],"mappings":"AAAA,SAASA,YAAT,QAA6B,gCAA7B;;;AAGA,OAAO,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,KAAD,EAAyB;AACxD,SAAOF,YAAY,CAACG,MAAb;AACL;AACEC,IAAAA,yBAAyB,EAAEF,KAAK,CAACG,4BADnC;AAEEC,IAAAA,8BAA8B,EAAEJ,KAAK,CAACK,iCAFxC;AAGEC,IAAAA,2BAA2B,EAAEN,KAAK,CAACO,8BAHrC;AAIEC,IAAAA,yBAAyB,EAAER,KAAK,CAACS,4BAJnC;AAKEC,IAAAA,iBAAiB,EAAEV,KAAK,CAACW,oBAL3B,EADK;;AAQLX,EAAAA,KARK,CAAP;;AAUD,CAXM","sourcesContent":["import { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const getInnerLinkTheme = (theme: Theme): Theme => {\n return ThemeFactory.create(\n {\n linkLineBorderBottomStyle: theme.btnLinkLineBorderBottomStyle,\n linkLineHoverBorderBottomStyle: theme.btnLinkHoverLineBorderBottomStyle,\n linkLineBorderBottomOpacity: theme.btnLinkLineBorderBottomOpacity,\n linkLineBorderBottomWidth: theme.btnLinkLineBorderBottomWidth,\n linkDisabledColor: theme.btnLinkDisabledColor,\n },\n theme,\n );\n};\n"]}
|
|
@@ -50,7 +50,7 @@ export var CurrencyHelper = /*#__PURE__*/function () {
|
|
|
50
50
|
return '';
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
return CurrencyHelper.formatString(
|
|
53
|
+
return CurrencyHelper.formatString(this.toDecimalString(value), options);
|
|
54
54
|
};
|
|
55
55
|
|
|
56
56
|
CurrencyHelper.parse = function parse(value) {
|
|
@@ -183,7 +183,7 @@ export var CurrencyHelper = /*#__PURE__*/function () {
|
|
|
183
183
|
};
|
|
184
184
|
|
|
185
185
|
CurrencyHelper.destructString = function destructString(value) {
|
|
186
|
-
var match = /^(-)?(\d*)?(\.)?(\d*)?$/.exec(value);
|
|
186
|
+
var match = /^(-)?(\d*)?(\.)?(\d*)?(e)?([-+]?\d+)?$/.exec(value);
|
|
187
187
|
|
|
188
188
|
if (!match) {
|
|
189
189
|
return null;
|
|
@@ -196,12 +196,15 @@ export var CurrencyHelper = /*#__PURE__*/function () {
|
|
|
196
196
|
_match$3 = match[3],
|
|
197
197
|
delimiter = _match$3 === void 0 ? '' : _match$3,
|
|
198
198
|
_match$4 = match[4],
|
|
199
|
-
fraction = _match$4 === void 0 ? '' : _match$4
|
|
199
|
+
fraction = _match$4 === void 0 ? '' : _match$4,
|
|
200
|
+
_match$5 = match[6],
|
|
201
|
+
exponent = _match$5 === void 0 ? '' : _match$5;
|
|
200
202
|
return {
|
|
201
203
|
sign: sign,
|
|
202
204
|
integer: integer,
|
|
203
205
|
delimiter: delimiter,
|
|
204
|
-
fraction: fraction
|
|
206
|
+
fraction: fraction,
|
|
207
|
+
exponent: exponent
|
|
205
208
|
};
|
|
206
209
|
};
|
|
207
210
|
|
|
@@ -212,4 +215,29 @@ CurrencyHelper.defaultOptions = {
|
|
|
212
215
|
hideTrailingZeros: false,
|
|
213
216
|
thousandsDelimiter: isSafari ? SPACE : THIN_SPACE,
|
|
214
217
|
minusSign: MINUS_SIGN
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
CurrencyHelper.toDecimalString = function (number) {
|
|
221
|
+
if (!number.toString().includes('e')) {
|
|
222
|
+
return number.toString();
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
var destructed = CurrencyHelper.destructString(number.toExponential());
|
|
226
|
+
|
|
227
|
+
if (destructed === null) {
|
|
228
|
+
return '';
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
var _destructed$sign = destructed.sign,
|
|
232
|
+
sign = _destructed$sign === void 0 ? '' : _destructed$sign,
|
|
233
|
+
integer = destructed.integer,
|
|
234
|
+
fraction = destructed.fraction,
|
|
235
|
+
exponent = destructed.exponent;
|
|
236
|
+
var intExponent = parseInt(exponent || '0');
|
|
237
|
+
|
|
238
|
+
if (intExponent > 0) {
|
|
239
|
+
return [sign, integer, fraction, '0'.repeat(intExponent - fraction.length)].join('');
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return [sign, '0.', ' 0'.repeat(-intExponent - 1), integer, fraction].join('');
|
|
215
243
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["CurrencyHelper.tsx"],"names":["isNonNullable","isNullable","isSafari","MAX_ALLOWED_CHARS","MAX_SAFE_DIGITS","MINUS_SIGN","SPACE","THIN_SPACE","CurrencyHelper","getOptions","options","defaultOptions","getInfo","value","raw","unformatString","formatted","formatString","cursorMap","getCursorMap","formattingOptions","regexp","RegExp","thousandsDelimiter","index","length","cursor","skip","ignoredSymbol","exec","format","toString","parse","cleaned","destructed","destructString","result","sign","integer","delimiter","fraction","parseFloat","replace","formatForClipboard","unformattedValue","fractionDigits","hideTrailingZeros","parts","blockSize","start","i","push","substring","Math","max","join","padEnd","min","minusSign","isValidString","unsigned","integerDigits","extractValid","match","token","substr"],"mappings":"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","sourcesContent":["import { isNonNullable, isNullable } from '../../lib/utils';\nimport { Nullable } from '../../typings/utility-types';\nimport { isSafari } from '../../lib/client';\n\nimport { DecimalOptions } from './CurrencyInputHelper';\nimport { CursorMap } from './CursorHelper';\nimport { MAX_ALLOWED_CHARS, MAX_SAFE_DIGITS, MINUS_SIGN, SPACE, THIN_SPACE } from './constants';\n\nexport interface DecimalFormattingOptions {\n fractionDigits?: Nullable<number>;\n hideTrailingZeros?: boolean;\n thousandsDelimiter?: string;\n minusSign?: string;\n}\n\ntype DecimalFormattingOptionsInternal = Required<DecimalFormattingOptions>;\n\nexport interface FormattingInfo {\n raw: string;\n formatted: string;\n cursorMap: CursorMap;\n}\n\nexport class CurrencyHelper {\n public static defaultOptions: DecimalFormattingOptionsInternal = {\n fractionDigits: null,\n hideTrailingZeros: false,\n thousandsDelimiter: isSafari ? SPACE : THIN_SPACE,\n minusSign: MINUS_SIGN,\n };\n\n public static getOptions(options?: Nullable<DecimalFormattingOptions>): DecimalFormattingOptionsInternal {\n return { ...CurrencyHelper.defaultOptions, ...options };\n }\n\n public static getInfo(value: string, options?: Nullable<DecimalFormattingOptions>): FormattingInfo {\n const raw = CurrencyHelper.unformatString(value);\n const formatted = CurrencyHelper.formatString(value, options);\n const cursorMap = CurrencyHelper.getCursorMap(formatted, options);\n\n return { raw, formatted, cursorMap };\n }\n\n public static getCursorMap(formatted: string, formattingOptions?: Nullable<DecimalFormattingOptions>): CursorMap {\n const options = CurrencyHelper.getOptions(formattingOptions);\n const regexp = new RegExp(options.thousandsDelimiter);\n const cursorMap: CursorMap = [];\n\n let index = formatted.length;\n let cursor = formatted.length;\n let skip = 0;\n\n while (index >= 0) {\n cursorMap[index] = cursor;\n\n const ignoredSymbol = regexp.exec(formatted[index - 1]);\n if (ignoredSymbol) {\n ++skip;\n } else {\n cursor = cursor - skip - 1;\n skip = 0;\n }\n --index;\n }\n return cursorMap;\n }\n\n public static format(value: Nullable<number>, options?: Nullable<DecimalFormattingOptions>): string {\n if (isNullable(value)) {\n return '';\n }\n\n return CurrencyHelper.formatString(value.toString(), options);\n }\n\n public static parse(value: string): Nullable<number> {\n const cleaned = CurrencyHelper.unformatString(value);\n if (!cleaned) {\n return null;\n }\n\n const destructed = CurrencyHelper.destructString(cleaned);\n if (!destructed) {\n return null;\n }\n\n const result =\n destructed.sign + (destructed.integer || '0') + (destructed.delimiter || '.') + (destructed.fraction || '0');\n\n return parseFloat(result);\n }\n\n public static unformatString(value: string): string {\n return value\n .replace(/\\s/g, '')\n .replace(',', '.')\n .replace(/[\\u2212\\u002D\\uFE63\\uFF0D\\u2012\\u2013\\u2014\\u2015]/g, '-');\n }\n\n public static formatForClipboard(value: string): string {\n return CurrencyHelper.unformatString(value).replace('.', ',');\n }\n\n public static formatString(value: string, formattingOptions?: Nullable<DecimalFormattingOptions>): string {\n const unformattedValue = CurrencyHelper.unformatString(value);\n const destructed = CurrencyHelper.destructString(unformattedValue) || {\n sign: '',\n integer: '',\n delimiter: '',\n fraction: '',\n };\n\n const { sign, integer, delimiter } = destructed;\n let fraction = destructed.fraction;\n let fractionDigits = fraction.length;\n\n const options = CurrencyHelper.getOptions(formattingOptions);\n if (options.hideTrailingZeros) {\n fraction = fraction.replace(/0+$/, '');\n fractionDigits = fraction.length;\n } else if (options.fractionDigits !== null) {\n fractionDigits = options.fractionDigits;\n }\n\n const parts = [];\n\n const blockSize = 3;\n const start = ((integer.length - 1) % blockSize) - blockSize + 1;\n for (let i = start; i < integer.length; i += blockSize) {\n parts.push(integer.substring(Math.max(i, 0), i + blockSize));\n }\n\n let result = parts.join(options.thousandsDelimiter);\n\n if (delimiter || fractionDigits) {\n result += ',';\n result += fraction.padEnd(Math.min(fractionDigits, MAX_SAFE_DIGITS), '0');\n }\n\n if (sign) {\n result = options.minusSign + result;\n }\n\n return result;\n }\n\n public static isValidString(value: string, options: DecimalOptions) {\n const unformattedValue = CurrencyHelper.unformatString(value);\n const destructed = CurrencyHelper.destructString(unformattedValue);\n\n if (!destructed) {\n return false;\n }\n\n const { sign, integer, delimiter, fraction } = destructed;\n\n if (options.unsigned && sign) {\n return false;\n }\n\n if (options.fractionDigits === 0 && delimiter) {\n return false;\n }\n\n const integerDigits = integer === '0' ? 0 : integer.length;\n const fractionDigits = fraction.length;\n\n if (isNonNullable(options.integerDigits) && integerDigits > options.integerDigits) {\n return false;\n }\n\n if (isNullable(options.integerDigits) && integerDigits > MAX_SAFE_DIGITS - (options.fractionDigits || 0)) {\n return false;\n }\n\n if (isNonNullable(options.fractionDigits) && fractionDigits > options.fractionDigits) {\n return false;\n }\n\n return integerDigits + fractionDigits <= MAX_SAFE_DIGITS;\n }\n\n public static extractValid(value: string, options: DecimalOptions): string {\n const unformattedValue = CurrencyHelper.unformatString(value);\n\n const match = /[-.\\d]+/.exec(unformattedValue);\n\n if (!match) {\n return '';\n }\n\n const token = match[0].substr(0, MAX_ALLOWED_CHARS);\n\n for (let i = token.length; i >= 0; --i) {\n const result = token.substr(0, i);\n if (CurrencyHelper.isValidString(result, options)) {\n return result;\n }\n }\n\n return '';\n }\n\n public static destructString(value: string) {\n const match = /^(-)?(\\d*)?(\\.)?(\\d*)?$/.exec(value);\n if (!match) {\n return null;\n }\n const [, sign = '', integer = '', delimiter = '', fraction = ''] = match;\n return { sign, integer, delimiter, fraction };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["CurrencyHelper.tsx"],"names":["isNonNullable","isNullable","isSafari","MAX_ALLOWED_CHARS","MAX_SAFE_DIGITS","MINUS_SIGN","SPACE","THIN_SPACE","CurrencyHelper","getOptions","options","defaultOptions","getInfo","value","raw","unformatString","formatted","formatString","cursorMap","getCursorMap","formattingOptions","regexp","RegExp","thousandsDelimiter","index","length","cursor","skip","ignoredSymbol","exec","format","toDecimalString","parse","cleaned","destructed","destructString","result","sign","integer","delimiter","fraction","parseFloat","replace","formatForClipboard","unformattedValue","fractionDigits","hideTrailingZeros","parts","blockSize","start","i","push","substring","Math","max","join","padEnd","min","minusSign","isValidString","unsigned","integerDigits","extractValid","match","token","substr","exponent","number","toString","includes","toExponential","intExponent","parseInt","repeat"],"mappings":"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","sourcesContent":["import { isNonNullable, isNullable } from '../../lib/utils';\nimport { Nullable } from '../../typings/utility-types';\nimport { isSafari } from '../../lib/client';\n\nimport { DecimalOptions } from './CurrencyInputHelper';\nimport { CursorMap } from './CursorHelper';\nimport { MAX_ALLOWED_CHARS, MAX_SAFE_DIGITS, MINUS_SIGN, SPACE, THIN_SPACE } from './constants';\n\nexport interface DecimalFormattingOptions {\n fractionDigits?: Nullable<number>;\n hideTrailingZeros?: boolean;\n thousandsDelimiter?: string;\n minusSign?: string;\n}\n\ntype DecimalFormattingOptionsInternal = Required<DecimalFormattingOptions>;\n\nexport interface FormattingInfo {\n raw: string;\n formatted: string;\n cursorMap: CursorMap;\n}\n\nexport class CurrencyHelper {\n public static defaultOptions: DecimalFormattingOptionsInternal = {\n fractionDigits: null,\n hideTrailingZeros: false,\n thousandsDelimiter: isSafari ? SPACE : THIN_SPACE,\n minusSign: MINUS_SIGN,\n };\n\n public static getOptions(options?: Nullable<DecimalFormattingOptions>): DecimalFormattingOptionsInternal {\n return { ...CurrencyHelper.defaultOptions, ...options };\n }\n\n public static getInfo(value: string, options?: Nullable<DecimalFormattingOptions>): FormattingInfo {\n const raw = CurrencyHelper.unformatString(value);\n const formatted = CurrencyHelper.formatString(value, options);\n const cursorMap = CurrencyHelper.getCursorMap(formatted, options);\n\n return { raw, formatted, cursorMap };\n }\n\n public static getCursorMap(formatted: string, formattingOptions?: Nullable<DecimalFormattingOptions>): CursorMap {\n const options = CurrencyHelper.getOptions(formattingOptions);\n const regexp = new RegExp(options.thousandsDelimiter);\n const cursorMap: CursorMap = [];\n\n let index = formatted.length;\n let cursor = formatted.length;\n let skip = 0;\n\n while (index >= 0) {\n cursorMap[index] = cursor;\n\n const ignoredSymbol = regexp.exec(formatted[index - 1]);\n if (ignoredSymbol) {\n ++skip;\n } else {\n cursor = cursor - skip - 1;\n skip = 0;\n }\n --index;\n }\n return cursorMap;\n }\n\n public static format(value: Nullable<number>, options?: Nullable<DecimalFormattingOptions>): string {\n if (isNullable(value)) {\n return '';\n }\n return CurrencyHelper.formatString(this.toDecimalString(value), options);\n }\n\n public static parse(value: string): Nullable<number> {\n const cleaned = CurrencyHelper.unformatString(value);\n if (!cleaned) {\n return null;\n }\n\n const destructed = CurrencyHelper.destructString(cleaned);\n if (!destructed) {\n return null;\n }\n\n const result =\n destructed.sign + (destructed.integer || '0') + (destructed.delimiter || '.') + (destructed.fraction || '0');\n\n return parseFloat(result);\n }\n\n public static unformatString(value: string): string {\n return value\n .replace(/\\s/g, '')\n .replace(',', '.')\n .replace(/[\\u2212\\u002D\\uFE63\\uFF0D\\u2012\\u2013\\u2014\\u2015]/g, '-');\n }\n\n public static formatForClipboard(value: string): string {\n return CurrencyHelper.unformatString(value).replace('.', ',');\n }\n\n public static formatString(value: string, formattingOptions?: Nullable<DecimalFormattingOptions>): string {\n const unformattedValue = CurrencyHelper.unformatString(value);\n const destructed = CurrencyHelper.destructString(unformattedValue) || {\n sign: '',\n integer: '',\n delimiter: '',\n fraction: '',\n };\n\n const { sign, integer, delimiter } = destructed;\n let fraction = destructed.fraction;\n let fractionDigits = fraction.length;\n\n const options = CurrencyHelper.getOptions(formattingOptions);\n if (options.hideTrailingZeros) {\n fraction = fraction.replace(/0+$/, '');\n fractionDigits = fraction.length;\n } else if (options.fractionDigits !== null) {\n fractionDigits = options.fractionDigits;\n }\n\n const parts = [];\n\n const blockSize = 3;\n const start = ((integer.length - 1) % blockSize) - blockSize + 1;\n for (let i = start; i < integer.length; i += blockSize) {\n parts.push(integer.substring(Math.max(i, 0), i + blockSize));\n }\n\n let result = parts.join(options.thousandsDelimiter);\n\n if (delimiter || fractionDigits) {\n result += ',';\n result += fraction.padEnd(Math.min(fractionDigits, MAX_SAFE_DIGITS), '0');\n }\n\n if (sign) {\n result = options.minusSign + result;\n }\n\n return result;\n }\n\n public static isValidString(value: string, options: DecimalOptions) {\n const unformattedValue = CurrencyHelper.unformatString(value);\n const destructed = CurrencyHelper.destructString(unformattedValue);\n\n if (!destructed) {\n return false;\n }\n\n const { sign, integer, delimiter, fraction } = destructed;\n\n if (options.unsigned && sign) {\n return false;\n }\n\n if (options.fractionDigits === 0 && delimiter) {\n return false;\n }\n\n const integerDigits = integer === '0' ? 0 : integer.length;\n const fractionDigits = fraction.length;\n\n if (isNonNullable(options.integerDigits) && integerDigits > options.integerDigits) {\n return false;\n }\n\n if (isNullable(options.integerDigits) && integerDigits > MAX_SAFE_DIGITS - (options.fractionDigits || 0)) {\n return false;\n }\n\n if (isNonNullable(options.fractionDigits) && fractionDigits > options.fractionDigits) {\n return false;\n }\n\n return integerDigits + fractionDigits <= MAX_SAFE_DIGITS;\n }\n\n public static extractValid(value: string, options: DecimalOptions): string {\n const unformattedValue = CurrencyHelper.unformatString(value);\n\n const match = /[-.\\d]+/.exec(unformattedValue);\n\n if (!match) {\n return '';\n }\n\n const token = match[0].substr(0, MAX_ALLOWED_CHARS);\n\n for (let i = token.length; i >= 0; --i) {\n const result = token.substr(0, i);\n if (CurrencyHelper.isValidString(result, options)) {\n return result;\n }\n }\n\n return '';\n }\n\n public static destructString(value: string) {\n const match = /^(-)?(\\d*)?(\\.)?(\\d*)?(e)?([-+]?\\d+)?$/.exec(value);\n if (!match) {\n return null;\n }\n const [, sign = '', integer = '', delimiter = '', fraction = '', , exponent = ''] = match;\n return { sign, integer, delimiter, fraction, exponent };\n }\n\n private static toDecimalString = (number: number) => {\n if (!number.toString().includes('e')) {\n return number.toString();\n }\n const destructed = this.destructString(number.toExponential());\n if (destructed === null) {\n return '';\n }\n const { sign = '', integer, fraction, exponent } = destructed;\n const intExponent = parseInt(exponent || '0');\n if (intExponent > 0) {\n return [sign, integer, fraction, '0'.repeat(intExponent - fraction.length)].join('');\n }\n return [sign, '0.', ' 0'.repeat(-intExponent - 1), integer, fraction].join('');\n };\n}\n"]}
|
|
@@ -165,7 +165,7 @@ var Link = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Co
|
|
|
165
165
|
|
|
166
166
|
var isBorderBottom = parseInt(this.theme.linkLineBorderBottomWidth) > 0;
|
|
167
167
|
var isFocused = focused && !disabled;
|
|
168
|
-
return !isBorderBottom ? cx(styles.root(this.theme), isFocused && styles.focus(this.theme), disabled && styles.disabled(this.theme), use === 'grayed' && focused && styles.useGrayedFocus(this.theme)) : cx(styles.lineRoot(), disabled && styles.disabled(this.theme), disabled && _isTheme2022 && isDarkTheme(this.theme) && styles.disabledDark22Theme(), isFocused && use === 'default' && styles.lineFocus(this.theme), isFocused && use === 'success' && styles.lineFocusSuccess(this.theme), isFocused && use === 'danger' && styles.lineFocusDanger(this.theme), isFocused && use === 'grayed' && styles.lineFocusGrayed(this.theme));
|
|
168
|
+
return !isBorderBottom ? cx(styles.root(this.theme), isFocused && styles.focus(this.theme), disabled && styles.disabled(this.theme), use === 'grayed' && focused && styles.useGrayedFocus(this.theme)) : cx(styles.lineRoot(), disabled && styles.disabled(this.theme), disabled && _isTheme2022 && isDarkTheme(this.theme) && styles.disabledDark22Theme(this.theme), isFocused && use === 'default' && styles.lineFocus(this.theme), isFocused && use === 'success' && styles.lineFocusSuccess(this.theme), isFocused && use === 'danger' && styles.lineFocusDanger(this.theme), isFocused && use === 'grayed' && styles.lineFocusGrayed(this.theme));
|
|
169
169
|
};
|
|
170
170
|
|
|
171
171
|
return Link;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Link.tsx"],"names":["React","PropTypes","keyListener","ThemeContext","isExternalLink","Spinner","CommonWrapper","cx","rootNode","createPropsGetter","ThemeFactory","isDarkTheme","isTheme2022","globalClasses","styles","LinkDataTids","root","Link","getProps","defaultProps","state","focusedByTab","renderMain","props","disabled","href","icon","use","loading","_button","_buttonOpened","relOrigin","rel","Component","as","focused","rest","_isTheme2022","theme","iconElement","arrow","isFocused","linkProps","className","useRoot","useDefault","useSuccess","useDanger","useGrayed","button","buttonOpened","getLinkClassName","Boolean","onClick","handleClick","onFocus","handleFocus","onBlur","handleBlur","tabIndex","child","children","text","lineText","requestAnimationFrame","isTabPressed","setState","event","preventDefault","render","create","setRootNode","isBorderBottom","parseInt","linkLineBorderBottomWidth","focus","useGrayedFocus","lineRoot","disabledDark22Theme","lineFocus","lineFocusSuccess","lineFocusDanger","lineFocusGrayed","__KONTUR_REACT_UI__","propTypes","bool","string","node","oneOf"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Override } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme, ThemeIn } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { isExternalLink } from '../../lib/utils';\nimport { Spinner } from '../Spinner';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter, DefaultizedProps } from '../../lib/createPropsGetter';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { isDarkTheme, isTheme2022 } from '../../lib/theming/ThemeHelpers';\n\nimport { globalClasses, styles } from './Link.styles';\n\nexport interface LinkProps\n extends CommonProps,\n Override<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n {\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * HTML-атрибут `href`.\n */\n href?: string;\n /**\n * Добавляет ссылке иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Тема ссылки.\n */\n use?: 'default' | 'success' | 'danger' | 'grayed';\n /**\n * @ignore\n */\n _button?: boolean;\n /**\n * @ignore\n */\n _buttonOpened?: boolean;\n /**\n * HTML-атрибут `tabindex`.\n */\n tabIndex?: number;\n /**\n * Переводит ссылку в состояние загрузки.\n */\n loading?: boolean;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n\n /**\n * Обычный объект с переменными темы.\n * Он будет объединён с темой из контекста.\n */\n theme?: ThemeIn;\n /**\n * Компонент, используемый в качестве корневого узла.\n * @ignore\n */\n as?: React.ElementType | keyof React.ReactHTML;\n /**\n * @ignore\n */\n focused?: boolean;\n }\n > {}\n\nexport interface LinkState {\n focusedByTab: boolean;\n}\n\nexport const LinkDataTids = {\n root: 'Link__root',\n} as const;\n\ntype DefaultProps = Required<Pick<LinkProps, 'href' | 'use' | 'as'>>;\ntype DefaultizedLinkProps = DefaultizedProps<LinkProps, DefaultProps>;\n\n/**\n * Элемент ссылки из HTML.\n */\n@rootNode\nexport class Link extends React.Component<LinkProps, LinkState> {\n public static __KONTUR_REACT_UI__ = 'Link';\n\n public static propTypes = {\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n use: PropTypes.oneOf(['default', 'success', 'danger', 'grayed']),\n };\n\n public static defaultProps: DefaultProps = {\n href: '',\n use: 'default',\n as: 'a',\n };\n\n private getProps = createPropsGetter(Link.defaultProps);\n\n public state: LinkState = {\n focusedByTab: false,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = this.props.theme ? ThemeFactory.create(this.props.theme as Theme, theme) : theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.getProps()}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain = (props: CommonWrapperRestProps<DefaultizedLinkProps>) => {\n const {\n disabled,\n href,\n icon,\n use,\n loading,\n _button,\n _buttonOpened,\n rel: relOrigin,\n as: Component,\n focused = false,\n ...rest\n } = props;\n const _isTheme2022 = isTheme2022(this.theme);\n\n let iconElement = null;\n if (icon) {\n iconElement = (\n <span className={styles.icon(this.theme)}>{loading ? <Spinner caption={null} dimmed inline /> : icon}</span>\n );\n }\n\n let arrow = null;\n if (_button) {\n arrow = <span className={styles.arrow()} />;\n }\n\n let rel = relOrigin;\n if (typeof rel === 'undefined' && href) {\n rel = `noopener${isExternalLink(href) ? ' noreferrer' : ''}`;\n }\n\n const isFocused = !disabled && (this.state.focusedByTab || focused);\n\n const linkProps = {\n className: cx(\n styles.useRoot(),\n use === 'default' && styles.useDefault(this.theme),\n use === 'success' && styles.useSuccess(this.theme),\n use === 'danger' && styles.useDanger(this.theme),\n use === 'grayed' && styles.useGrayed(this.theme),\n !!_button && styles.button(this.theme),\n !!_buttonOpened && styles.buttonOpened(this.theme),\n this.getLinkClassName(isFocused, Boolean(disabled || loading), _isTheme2022),\n ),\n href,\n rel,\n onClick: this.handleClick,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n tabIndex: disabled || loading ? -1 : this.props.tabIndex,\n };\n\n let child = this.props.children;\n if (_isTheme2022) {\n child = <span className={cx(globalClasses.text, styles.lineText(this.theme))}>{this.props.children}</span>;\n }\n\n return (\n <Component data-tid={LinkDataTids.root} {...rest} {...linkProps}>\n {iconElement}\n {child}\n {arrow}\n </Component>\n );\n };\n\n private handleFocus = () => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n }\n };\n\n private handleBlur = () => {\n this.setState({ focusedByTab: false });\n };\n\n private handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n const { onClick, disabled, loading } = this.props;\n const href = this.getProps().href;\n if (!href) {\n event.preventDefault();\n }\n if (onClick && !disabled && !loading) {\n onClick(event);\n }\n };\n\n private getLinkClassName(focused: boolean, disabled: boolean, _isTheme2022: boolean): string {\n const { use } = this.getProps();\n const isBorderBottom = parseInt(this.theme.linkLineBorderBottomWidth) > 0;\n const isFocused = focused && !disabled;\n\n return !isBorderBottom\n ? cx(\n styles.root(this.theme),\n isFocused && styles.focus(this.theme),\n disabled && styles.disabled(this.theme),\n use === 'grayed' && focused && styles.useGrayedFocus(this.theme),\n )\n : cx(\n styles.lineRoot(),\n disabled && styles.disabled(this.theme),\n disabled && _isTheme2022 && isDarkTheme(this.theme) && styles.disabledDark22Theme(),\n isFocused && use === 'default' && styles.lineFocus(this.theme),\n isFocused && use === 'success' && styles.lineFocusSuccess(this.theme),\n isFocused && use === 'danger' && styles.lineFocusDanger(this.theme),\n isFocused && use === 'grayed' && styles.lineFocusGrayed(this.theme),\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Link.tsx"],"names":["React","PropTypes","keyListener","ThemeContext","isExternalLink","Spinner","CommonWrapper","cx","rootNode","createPropsGetter","ThemeFactory","isDarkTheme","isTheme2022","globalClasses","styles","LinkDataTids","root","Link","getProps","defaultProps","state","focusedByTab","renderMain","props","disabled","href","icon","use","loading","_button","_buttonOpened","relOrigin","rel","Component","as","focused","rest","_isTheme2022","theme","iconElement","arrow","isFocused","linkProps","className","useRoot","useDefault","useSuccess","useDanger","useGrayed","button","buttonOpened","getLinkClassName","Boolean","onClick","handleClick","onFocus","handleFocus","onBlur","handleBlur","tabIndex","child","children","text","lineText","requestAnimationFrame","isTabPressed","setState","event","preventDefault","render","create","setRootNode","isBorderBottom","parseInt","linkLineBorderBottomWidth","focus","useGrayedFocus","lineRoot","disabledDark22Theme","lineFocus","lineFocusSuccess","lineFocusDanger","lineFocusGrayed","__KONTUR_REACT_UI__","propTypes","bool","string","node","oneOf"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Override } from '../../typings/utility-types';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { Theme, ThemeIn } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { isExternalLink } from '../../lib/utils';\nimport { Spinner } from '../Spinner';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter, DefaultizedProps } from '../../lib/createPropsGetter';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { isDarkTheme, isTheme2022 } from '../../lib/theming/ThemeHelpers';\n\nimport { globalClasses, styles } from './Link.styles';\n\nexport interface LinkProps\n extends CommonProps,\n Override<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n {\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * HTML-атрибут `href`.\n */\n href?: string;\n /**\n * Добавляет ссылке иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Тема ссылки.\n */\n use?: 'default' | 'success' | 'danger' | 'grayed';\n /**\n * @ignore\n */\n _button?: boolean;\n /**\n * @ignore\n */\n _buttonOpened?: boolean;\n /**\n * HTML-атрибут `tabindex`.\n */\n tabIndex?: number;\n /**\n * Переводит ссылку в состояние загрузки.\n */\n loading?: boolean;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n\n /**\n * Обычный объект с переменными темы.\n * Он будет объединён с темой из контекста.\n */\n theme?: ThemeIn;\n /**\n * Компонент, используемый в качестве корневого узла.\n * @ignore\n */\n as?: React.ElementType | keyof React.ReactHTML;\n /**\n * @ignore\n */\n focused?: boolean;\n }\n > {}\n\nexport interface LinkState {\n focusedByTab: boolean;\n}\n\nexport const LinkDataTids = {\n root: 'Link__root',\n} as const;\n\ntype DefaultProps = Required<Pick<LinkProps, 'href' | 'use' | 'as'>>;\ntype DefaultizedLinkProps = DefaultizedProps<LinkProps, DefaultProps>;\n\n/**\n * Элемент ссылки из HTML.\n */\n@rootNode\nexport class Link extends React.Component<LinkProps, LinkState> {\n public static __KONTUR_REACT_UI__ = 'Link';\n\n public static propTypes = {\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n use: PropTypes.oneOf(['default', 'success', 'danger', 'grayed']),\n };\n\n public static defaultProps: DefaultProps = {\n href: '',\n use: 'default',\n as: 'a',\n };\n\n private getProps = createPropsGetter(Link.defaultProps);\n\n public state: LinkState = {\n focusedByTab: false,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = this.props.theme ? ThemeFactory.create(this.props.theme as Theme, theme) : theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.getProps()}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain = (props: CommonWrapperRestProps<DefaultizedLinkProps>) => {\n const {\n disabled,\n href,\n icon,\n use,\n loading,\n _button,\n _buttonOpened,\n rel: relOrigin,\n as: Component,\n focused = false,\n ...rest\n } = props;\n const _isTheme2022 = isTheme2022(this.theme);\n\n let iconElement = null;\n if (icon) {\n iconElement = (\n <span className={styles.icon(this.theme)}>{loading ? <Spinner caption={null} dimmed inline /> : icon}</span>\n );\n }\n\n let arrow = null;\n if (_button) {\n arrow = <span className={styles.arrow()} />;\n }\n\n let rel = relOrigin;\n if (typeof rel === 'undefined' && href) {\n rel = `noopener${isExternalLink(href) ? ' noreferrer' : ''}`;\n }\n\n const isFocused = !disabled && (this.state.focusedByTab || focused);\n\n const linkProps = {\n className: cx(\n styles.useRoot(),\n use === 'default' && styles.useDefault(this.theme),\n use === 'success' && styles.useSuccess(this.theme),\n use === 'danger' && styles.useDanger(this.theme),\n use === 'grayed' && styles.useGrayed(this.theme),\n !!_button && styles.button(this.theme),\n !!_buttonOpened && styles.buttonOpened(this.theme),\n this.getLinkClassName(isFocused, Boolean(disabled || loading), _isTheme2022),\n ),\n href,\n rel,\n onClick: this.handleClick,\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n tabIndex: disabled || loading ? -1 : this.props.tabIndex,\n };\n\n let child = this.props.children;\n if (_isTheme2022) {\n child = <span className={cx(globalClasses.text, styles.lineText(this.theme))}>{this.props.children}</span>;\n }\n\n return (\n <Component data-tid={LinkDataTids.root} {...rest} {...linkProps}>\n {iconElement}\n {child}\n {arrow}\n </Component>\n );\n };\n\n private handleFocus = () => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n }\n };\n\n private handleBlur = () => {\n this.setState({ focusedByTab: false });\n };\n\n private handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n const { onClick, disabled, loading } = this.props;\n const href = this.getProps().href;\n if (!href) {\n event.preventDefault();\n }\n if (onClick && !disabled && !loading) {\n onClick(event);\n }\n };\n\n private getLinkClassName(focused: boolean, disabled: boolean, _isTheme2022: boolean): string {\n const { use } = this.getProps();\n const isBorderBottom = parseInt(this.theme.linkLineBorderBottomWidth) > 0;\n const isFocused = focused && !disabled;\n\n return !isBorderBottom\n ? cx(\n styles.root(this.theme),\n isFocused && styles.focus(this.theme),\n disabled && styles.disabled(this.theme),\n use === 'grayed' && focused && styles.useGrayedFocus(this.theme),\n )\n : cx(\n styles.lineRoot(),\n disabled && styles.disabled(this.theme),\n disabled && _isTheme2022 && isDarkTheme(this.theme) && styles.disabledDark22Theme(this.theme),\n isFocused && use === 'default' && styles.lineFocus(this.theme),\n isFocused && use === 'success' && styles.lineFocusSuccess(this.theme),\n isFocused && use === 'danger' && styles.lineFocusDanger(this.theme),\n isFocused && use === 'grayed' && styles.lineFocusGrayed(this.theme),\n );\n }\n}\n"]}
|
|
@@ -7,6 +7,6 @@ export var linkDisabledMixin = function linkDisabledMixin() {
|
|
|
7
7
|
export var linkUseColorsMixin = function linkUseColorsMixin(mainColor, hoverColor, activeColor) {
|
|
8
8
|
return "\n color: " + mainColor + ";\n\n &:hover {\n color: " + hoverColor + ";\n }\n\n &:active {\n color: " + activeColor + ";\n }\n ";
|
|
9
9
|
};
|
|
10
|
-
export var
|
|
11
|
-
return "\n animation: none !important;\n ";
|
|
10
|
+
export var linkUseLineHovered = function linkUseLineHovered(linkLineHoverBorderBottomStyle) {
|
|
11
|
+
return "\n animation: none !important;\n border-bottom-style: " + linkLineHoverBorderBottomStyle + ";\n ";
|
|
12
12
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Link.mixins.ts"],"names":["linkMixin","hoverTextDecoration","linkDisabledMixin","linkUseColorsMixin","mainColor","hoverColor","activeColor","
|
|
1
|
+
{"version":3,"sources":["Link.mixins.ts"],"names":["linkMixin","hoverTextDecoration","linkDisabledMixin","linkUseColorsMixin","mainColor","hoverColor","activeColor","linkUseLineHovered","linkLineHoverBorderBottomStyle"],"mappings":"AAAA,OAAO,IAAMA,SAAS,GAAG,SAAZA,SAAY,CAACC,mBAAD,EAAiC;AACxD;;;;;;AAMuBA,EAAAA,mBANvB;;;AASD,CAVM;;AAYP,OAAO,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,GAAM;AACrC;;;;;;;;;;AAUD,CAXM;;AAaP,OAAO,IAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,SAAD,EAAoBC,UAApB,EAAwCC,WAAxC,EAAgE;AAChG;AACWF,EAAAA,SADX;;;AAIaC,EAAAA,UAJb;;;;AAQaC,EAAAA,WARb;;;AAWD,CAZM;;AAcP,OAAO,IAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,8BAAD,EAA4C;AAC5E;;AAEyBA,EAAAA,8BAFzB;;AAID,CALM","sourcesContent":["export const linkMixin = (hoverTextDecoration: string) => {\n return `\n border-radius: 1px;\n outline: none;\n text-decoration: none;\n\n &:hover {\n text-decoration: ${hoverTextDecoration};\n }\n `;\n};\n\nexport const linkDisabledMixin = () => {\n return `\n box-shadow: none;\n cursor: default;\n pointer-events: none;\n text-decoration: none;\n\n &:hover {\n text-decoration: none;\n }\n `;\n};\n\nexport const linkUseColorsMixin = (mainColor: string, hoverColor: string, activeColor: string) => {\n return `\n color: ${mainColor};\n\n &:hover {\n color: ${hoverColor};\n }\n\n &:active {\n color: ${activeColor};\n }\n `;\n};\n\nexport const linkUseLineHovered = (linkLineHoverBorderBottomStyle: string) => {\n return `\n animation: none !important;\n border-bottom-style: ${linkLineHoverBorderBottomStyle};\n `;\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export declare const linkMixin: (hoverTextDecoration: string) => string;
|
|
2
2
|
export declare const linkDisabledMixin: () => string;
|
|
3
3
|
export declare const linkUseColorsMixin: (mainColor: string, hoverColor: string, activeColor: string) => string;
|
|
4
|
-
export declare const
|
|
4
|
+
export declare const linkUseLineHovered: (linkLineHoverBorderBottomStyle: string) => string;
|
|
@@ -3,7 +3,7 @@ import _taggedTemplateLiteralLoose from "@babel/runtime/helpers/esm/taggedTempla
|
|
|
3
3
|
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20, _templateObject21;
|
|
4
4
|
|
|
5
5
|
import { css, keyframes, memoizeStyle, prefix } from "../../../lib/theming/Emotion";
|
|
6
|
-
import { linkMixin, linkDisabledMixin, linkUseColorsMixin,
|
|
6
|
+
import { linkMixin, linkDisabledMixin, linkUseColorsMixin, linkUseLineHovered } from "../Link.mixins";
|
|
7
7
|
export var globalClasses = prefix('link')({
|
|
8
8
|
text: 'text'
|
|
9
9
|
});
|
|
@@ -16,19 +16,20 @@ export var styles = memoizeStyle({
|
|
|
16
16
|
return css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n border-radius: 1px;\n outline: none;\n text-decoration: none;\n "])));
|
|
17
17
|
},
|
|
18
18
|
lineText: function lineText(t) {
|
|
19
|
-
|
|
19
|
+
var delay = parseFloat(t.linkLineBorderBottomOpacity) - 1;
|
|
20
|
+
return css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n border-bottom-style: ", ";\n border-bottom-width: ", ";\n animation: ", " 1s linear !important; // override creevey\n animation-play-state: paused !important;\n animation-delay: ", "s !important;\n animation-fill-mode: forwards !important;\n "])), t.linkLineBorderBottomStyle, t.linkLineBorderBottomWidth, line, delay);
|
|
20
21
|
},
|
|
21
22
|
lineFocus: function lineFocus(t) {
|
|
22
|
-
return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n color: ", ";\n .", " {\n ", "\n }\n "])), t.linkHoverColor, globalClasses.text,
|
|
23
|
+
return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n color: ", ";\n .", " {\n ", "\n }\n "])), t.linkHoverColor, globalClasses.text, linkUseLineHovered(t.linkLineHoverBorderBottomStyle));
|
|
23
24
|
},
|
|
24
25
|
lineFocusSuccess: function lineFocusSuccess(t) {
|
|
25
|
-
return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n color: ", " !important;\n .", " {\n ", "\n }\n "])), t.linkSuccessHoverColor, globalClasses.text,
|
|
26
|
+
return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n color: ", " !important;\n .", " {\n ", "\n }\n "])), t.linkSuccessHoverColor, globalClasses.text, linkUseLineHovered(t.linkLineHoverBorderBottomStyle));
|
|
26
27
|
},
|
|
27
28
|
lineFocusDanger: function lineFocusDanger(t) {
|
|
28
|
-
return css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteralLoose(["\n color: ", " !important;\n .", " {\n ", "\n }\n "])), t.linkDangerHoverColor, globalClasses.text,
|
|
29
|
+
return css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteralLoose(["\n color: ", " !important;\n .", " {\n ", "\n }\n "])), t.linkDangerHoverColor, globalClasses.text, linkUseLineHovered(t.linkLineHoverBorderBottomStyle));
|
|
29
30
|
},
|
|
30
31
|
lineFocusGrayed: function lineFocusGrayed(t) {
|
|
31
|
-
return css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteralLoose(["\n color: ", " !important;\n .", " {\n ", "\n }\n "])), t.linkGrayedHoverColor, globalClasses.text,
|
|
32
|
+
return css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteralLoose(["\n color: ", " !important;\n .", " {\n ", "\n }\n "])), t.linkGrayedHoverColor, globalClasses.text, linkUseLineHovered(t.linkLineHoverBorderBottomStyle));
|
|
32
33
|
},
|
|
33
34
|
button: function button(t) {
|
|
34
35
|
return css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteralLoose(["\n display: inline-block;\n line-height: ", ";\n padding-left: ", ";\n padding-right: ", ";\n "])), t.linkButtonLineHeight, t.linkButtonPaddingX, t.linkButtonPaddingX);
|
|
@@ -43,16 +44,16 @@ export var styles = memoizeStyle({
|
|
|
43
44
|
return css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteralLoose(["\n border-bottom-color: currentColor;\n "])));
|
|
44
45
|
},
|
|
45
46
|
useDefault: function useDefault(t) {
|
|
46
|
-
return css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteralLoose(["\n ", ";\n .", " {\n :hover {\n ", "\n }\n }\n "])), linkUseColorsMixin(t.linkColor, t.linkHoverColor, t.linkActiveColor), globalClasses.text,
|
|
47
|
+
return css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteralLoose(["\n ", ";\n .", " {\n :hover {\n ", "\n }\n }\n "])), linkUseColorsMixin(t.linkColor, t.linkHoverColor, t.linkActiveColor), globalClasses.text, linkUseLineHovered(t.linkLineHoverBorderBottomStyle));
|
|
47
48
|
},
|
|
48
49
|
useSuccess: function useSuccess(t) {
|
|
49
|
-
return css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteralLoose(["\n ", ";\n .", " {\n :hover {\n ", "\n }\n }\n "])), linkUseColorsMixin(t.linkSuccessColor, t.linkSuccessHoverColor, t.linkSuccessActiveColor), globalClasses.text,
|
|
50
|
+
return css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteralLoose(["\n ", ";\n .", " {\n :hover {\n ", "\n }\n }\n "])), linkUseColorsMixin(t.linkSuccessColor, t.linkSuccessHoverColor, t.linkSuccessActiveColor), globalClasses.text, linkUseLineHovered(t.linkLineHoverBorderBottomStyle));
|
|
50
51
|
},
|
|
51
52
|
useDanger: function useDanger(t) {
|
|
52
|
-
return css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteralLoose(["\n ", ";\n .", " {\n :hover {\n ", "\n }\n }\n "])), linkUseColorsMixin(t.linkDangerColor, t.linkDangerHoverColor, t.linkDangerActiveColor), globalClasses.text,
|
|
53
|
+
return css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteralLoose(["\n ", ";\n .", " {\n :hover {\n ", "\n }\n }\n "])), linkUseColorsMixin(t.linkDangerColor, t.linkDangerHoverColor, t.linkDangerActiveColor), globalClasses.text, linkUseLineHovered(t.linkLineHoverBorderBottomStyle));
|
|
53
54
|
},
|
|
54
55
|
useGrayed: function useGrayed(t) {
|
|
55
|
-
return css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteralLoose(["\n ", ";\n .", " {\n :hover {\n ", "\n }\n }\n "])), linkUseColorsMixin(t.linkGrayedColor, t.linkGrayedHoverColor, t.linkGrayedActiveColor), globalClasses.text,
|
|
56
|
+
return css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteralLoose(["\n ", ";\n .", " {\n :hover {\n ", "\n }\n }\n "])), linkUseColorsMixin(t.linkGrayedColor, t.linkGrayedHoverColor, t.linkGrayedActiveColor), globalClasses.text, linkUseLineHovered(t.linkLineHoverBorderBottomStyle));
|
|
56
57
|
},
|
|
57
58
|
useGrayedFocus: function useGrayedFocus(t) {
|
|
58
59
|
return css(_templateObject17 || (_templateObject17 = _taggedTemplateLiteralLoose(["\n color: ", ";\n "])), t.linkDisabledColor);
|
|
@@ -63,8 +64,8 @@ export var styles = memoizeStyle({
|
|
|
63
64
|
disabled: function disabled(t) {
|
|
64
65
|
return css(_templateObject19 || (_templateObject19 = _taggedTemplateLiteralLoose(["\n ", ";\n\n color: ", " !important; // override root color\n\n &:hover {\n color: ", ";\n }\n "])), linkDisabledMixin(), t.linkDisabledColor, t.linkDisabledColor);
|
|
65
66
|
},
|
|
66
|
-
disabledDark22Theme: function disabledDark22Theme() {
|
|
67
|
-
return css(_templateObject20 || (_templateObject20 = _taggedTemplateLiteralLoose(["\n .", " {\n ", "\n }\n "])), globalClasses.text,
|
|
67
|
+
disabledDark22Theme: function disabledDark22Theme(t) {
|
|
68
|
+
return css(_templateObject20 || (_templateObject20 = _taggedTemplateLiteralLoose(["\n .", " {\n ", "\n }\n "])), globalClasses.text, linkUseLineHovered(t.linkLineHoverBorderBottomStyle));
|
|
68
69
|
},
|
|
69
70
|
icon: function icon(t) {
|
|
70
71
|
return css(_templateObject21 || (_templateObject21 = _taggedTemplateLiteralLoose(["\n display: inline-block;\n margin-right: ", ";\n "])), t.linkIconMarginRight);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Link.styles.ts"],"names":["css","keyframes","memoizeStyle","prefix","linkMixin","linkDisabledMixin","linkUseColorsMixin","
|
|
1
|
+
{"version":3,"sources":["Link.styles.ts"],"names":["css","keyframes","memoizeStyle","prefix","linkMixin","linkDisabledMixin","linkUseColorsMixin","linkUseLineHovered","globalClasses","text","line","styles","root","t","linkHoverTextDecoration","lineRoot","lineText","delay","parseFloat","linkLineBorderBottomOpacity","linkLineBorderBottomStyle","linkLineBorderBottomWidth","lineFocus","linkHoverColor","linkLineHoverBorderBottomStyle","lineFocusSuccess","linkSuccessHoverColor","lineFocusDanger","linkDangerHoverColor","lineFocusGrayed","linkGrayedHoverColor","button","linkButtonLineHeight","linkButtonPaddingX","buttonOpened","btnDefaultActiveBg","arrow","useRoot","useDefault","linkColor","linkActiveColor","useSuccess","linkSuccessColor","linkSuccessActiveColor","useDanger","linkDangerColor","linkDangerActiveColor","useGrayed","linkGrayedColor","linkGrayedActiveColor","useGrayedFocus","linkDisabledColor","focus","disabled","disabledDark22Theme","icon","linkIconMarginRight"],"mappings":"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","sourcesContent":["import { css, keyframes, memoizeStyle, prefix } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nimport { linkMixin, linkDisabledMixin, linkUseColorsMixin, linkUseLineHovered } from './Link.mixins';\n\nexport const globalClasses = prefix('link')({\n text: 'text',\n});\n\nconst line = keyframes`\n 0% {\n border-bottom-color: inherit;\n }\n 100% {\n border-bottom-color: transparent;\n }\n`;\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n return css`\n ${linkMixin(t.linkHoverTextDecoration)};\n position: relative;\n `;\n },\n\n lineRoot() {\n return css`\n border-radius: 1px;\n outline: none;\n text-decoration: none;\n `;\n },\n\n lineText(t: Theme) {\n const delay = parseFloat(t.linkLineBorderBottomOpacity) - 1;\n return css`\n border-bottom-style: ${t.linkLineBorderBottomStyle};\n border-bottom-width: ${t.linkLineBorderBottomWidth};\n animation: ${line} 1s linear !important; // override creevey\n animation-play-state: paused !important;\n animation-delay: ${delay}s !important;\n animation-fill-mode: forwards !important;\n `;\n },\n\n lineFocus(t: Theme) {\n return css`\n color: ${t.linkHoverColor};\n .${globalClasses.text} {\n ${linkUseLineHovered(t.linkLineHoverBorderBottomStyle)}\n }\n `;\n },\n\n lineFocusSuccess(t: Theme) {\n return css`\n color: ${t.linkSuccessHoverColor} !important;\n .${globalClasses.text} {\n ${linkUseLineHovered(t.linkLineHoverBorderBottomStyle)}\n }\n `;\n },\n\n lineFocusDanger(t: Theme) {\n return css`\n color: ${t.linkDangerHoverColor} !important;\n .${globalClasses.text} {\n ${linkUseLineHovered(t.linkLineHoverBorderBottomStyle)}\n }\n `;\n },\n\n lineFocusGrayed(t: Theme) {\n return css`\n color: ${t.linkGrayedHoverColor} !important;\n .${globalClasses.text} {\n ${linkUseLineHovered(t.linkLineHoverBorderBottomStyle)}\n }\n `;\n },\n\n button(t: Theme) {\n return css`\n display: inline-block;\n line-height: ${t.linkButtonLineHeight};\n padding-left: ${t.linkButtonPaddingX};\n padding-right: ${t.linkButtonPaddingX};\n `;\n },\n\n buttonOpened(t: Theme) {\n return css`\n background: ${t.btnDefaultActiveBg};\n `;\n },\n\n arrow() {\n return css`\n border: 4px solid transparent;\n border-bottom-width: 0;\n border-top-color: #a0a0a0;\n display: inline-block;\n margin-bottom: 3px;\n margin-left: 3px;\n vertical-align: middle;\n `;\n },\n\n useRoot() {\n return css`\n border-bottom-color: currentColor;\n `;\n },\n useDefault(t: Theme) {\n return css`\n ${linkUseColorsMixin(t.linkColor, t.linkHoverColor, t.linkActiveColor)};\n .${globalClasses.text} {\n :hover {\n ${linkUseLineHovered(t.linkLineHoverBorderBottomStyle)}\n }\n }\n `;\n },\n\n useSuccess(t: Theme) {\n return css`\n ${linkUseColorsMixin(t.linkSuccessColor, t.linkSuccessHoverColor, t.linkSuccessActiveColor)};\n .${globalClasses.text} {\n :hover {\n ${linkUseLineHovered(t.linkLineHoverBorderBottomStyle)}\n }\n }\n `;\n },\n\n useDanger(t: Theme) {\n return css`\n ${linkUseColorsMixin(t.linkDangerColor, t.linkDangerHoverColor, t.linkDangerActiveColor)};\n .${globalClasses.text} {\n :hover {\n ${linkUseLineHovered(t.linkLineHoverBorderBottomStyle)}\n }\n }\n `;\n },\n\n useGrayed(t: Theme) {\n return css`\n ${linkUseColorsMixin(t.linkGrayedColor, t.linkGrayedHoverColor, t.linkGrayedActiveColor)};\n .${globalClasses.text} {\n :hover {\n ${linkUseLineHovered(t.linkLineHoverBorderBottomStyle)}\n }\n }\n `;\n },\n\n useGrayedFocus(t: Theme) {\n return css`\n color: ${t.linkDisabledColor};\n `;\n },\n\n focus(t: Theme) {\n return css`\n text-decoration: ${t.linkHoverTextDecoration};\n `;\n },\n\n disabled(t: Theme) {\n return css`\n ${linkDisabledMixin()};\n\n color: ${t.linkDisabledColor} !important; // override root color\n\n &:hover {\n color: ${t.linkDisabledColor};\n }\n `;\n },\n\n disabledDark22Theme(t: Theme) {\n return css`\n .${globalClasses.text} {\n ${linkUseLineHovered(t.linkLineHoverBorderBottomStyle)}\n }\n `;\n },\n\n icon(t: Theme) {\n return css`\n display: inline-block;\n margin-right: ${t.linkIconMarginRight};\n `;\n },\n});\n"]}
|
|
@@ -105,9 +105,13 @@ export var CustomComboBox = responsiveLayout(_class = rootNode(_class = (_temp =
|
|
|
105
105
|
}, function () {
|
|
106
106
|
effects.forEach(_this.handleEffect);
|
|
107
107
|
});
|
|
108
|
-
};
|
|
108
|
+
}; // Auto-batching React@18 creates problems that are fixed with flushSync
|
|
109
|
+
// https://github.com/skbkontur/retail-ui/pull/3144#issuecomment-1535235366
|
|
109
110
|
|
|
110
|
-
|
|
111
|
+
|
|
112
|
+
var isReact18 = React.version.search('18') === 0;
|
|
113
|
+
|
|
114
|
+
if (sync && isReact18) {
|
|
111
115
|
return ReactDOM.flushSync(function () {
|
|
112
116
|
updateState(action);
|
|
113
117
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["CustomComboBox.tsx"],"names":["React","ReactDOM","CancelationError","taskWithDelay","fixClickFocusIE","CommonWrapper","responsiveLayout","rootNode","ComboBoxRequestStatus","reducer","ComboBoxView","DELAY_BEFORE_SHOW_LOADER","LOADER_SHOW_TIME","DefaultState","inputChanged","editing","items","loading","opened","focused","textValue","repeatRequest","undefined","requestStatus","Unknown","CustomComboBoxDataTids","comboBoxView","CustomComboBox","state","requestId","cancelationToken","cancelLoaderDelay","focus","props","disabled","input","inputLikeText","selectInputText","selectAll","blur","handleBlur","dispatch","action","sync","updateState","effects","nextState","setState","stateAndEffect","Array","forEach","handleEffect","flushSync","effect","getState","getProps","handleValueChange","value","type","keepFocus","isMobileLayout","handleFocus","handleClickOutside","e","close","setTimeout","handleInputBlur","handleInputClick","search","query","getItems","cancelPromise","Promise","_","reject","expectingId","loaderShowDelay","resolve","cancelLoader","race","code","cancelSearch","open","render","viewProps","align","borderless","disablePortal","error","menuAlign","drawArrow","menuPos","placeholder","size","totalCount","warning","width","maxLength","maxMenuHeight","leftIcon","rightIcon","inputMode","onValueChange","onClickOutside","onFocus","onFocusOutside","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","event","persist","onMouseEnter","onMouseOver","onMouseLeave","renderItem","renderNotFound","itemWrapper","renderValue","renderTotalCount","renderAddButton","refInput","refMenu","menu","refInputLikeText","setRootNode","componentDidMount","autoFocus","componentDidUpdate","prevProps","prevState","reset","PureComponent","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { Input, InputIconType } from '../../components/Input';\nimport { Menu } from '../Menu';\nimport { InputLikeText } from '../InputLikeText';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { CancelationError, taskWithDelay } from '../../lib/utils';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { DropdownContainerProps } from '../DropdownContainer';\n\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { CustomComboBoxAction, CustomComboBoxEffect, reducer } from './CustomComboBoxReducer';\nimport { ComboBoxView } from './ComboBoxView';\n\nexport interface CustomComboBoxProps<T> extends Pick<DropdownContainerProps, 'menuPos'>, CommonProps {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n maxLength?: number;\n menuAlign?: 'left' | 'right';\n drawArrow?: boolean;\n leftIcon?: InputIconType;\n rightIcon?: InputIconType;\n searchOnFocus?: boolean;\n onValueChange?: (value: T) => void;\n onInputValueChange?: (value: string) => Nullable<string> | void;\n onUnexpectedInput?: (value: string) => void | null | T;\n onFocus?: () => void;\n onBlur?: () => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseOver?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n onInputKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n totalCount?: number;\n value?: Nullable<T>;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n width?: string | number;\n maxMenuHeight?: number | string;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderItem: (item: T, state?: MenuItemState) => React.ReactNode;\n itemWrapper?: (item?: T) => React.ComponentType<unknown>;\n renderValue: (value: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n valueToString: (value: T) => string;\n itemToValue: (item: T) => string | number;\n getItems: (query: string) => Promise<T[]>;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n}\n\nexport interface CustomComboBoxState<T> {\n editing: boolean;\n loading: boolean;\n opened: boolean;\n textValue: string;\n items: Nullable<T[]>;\n inputChanged: boolean;\n focused: boolean;\n repeatRequest: () => void;\n requestStatus: ComboBoxRequestStatus;\n}\n\nexport const DELAY_BEFORE_SHOW_LOADER = 300;\nexport const LOADER_SHOW_TIME = 1000;\n\nexport const DefaultState = {\n inputChanged: false,\n editing: false,\n items: null,\n loading: false,\n opened: false,\n focused: false,\n textValue: '',\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n};\n\nexport const CustomComboBoxDataTids = {\n comboBoxView: 'ComboBoxView__root',\n} as const;\n\n@responsiveLayout\n@rootNode\nexport class CustomComboBox<T> extends React.PureComponent<CustomComboBoxProps<T>, CustomComboBoxState<T>> {\n public static __KONTUR_REACT_UI__ = 'CustomComboBox';\n\n public state: CustomComboBoxState<T> = DefaultState;\n public input: Nullable<Input>;\n public menu: Nullable<Menu>;\n public inputLikeText: Nullable<InputLikeText>;\n public requestId = 0;\n public loaderShowDelay: Nullable<Promise<void>>;\n private focused = false;\n private cancelationToken: Nullable<(reason?: Error) => void> = null;\n private isMobileLayout!: boolean;\n\n private reducer = reducer;\n public cancelLoaderDelay: () => void = () => null;\n\n /**\n * @public\n */\n public focus = () => {\n if (this.props.disabled) {\n return;\n }\n\n if (this.input) {\n this.input.focus();\n } else if (this.inputLikeText) {\n this.inputLikeText.focus();\n }\n };\n\n /**\n * @public\n */\n public selectInputText = () => {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.selectAll();\n }\n };\n\n /**\n * @public\n */\n public blur = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.handleBlur();\n };\n private setRootNode!: TSetRootNode;\n\n /**\n * @public\n */\n public async search(query: string = this.state.textValue) {\n const { getItems } = this.props;\n\n const cancelPromise: Promise<never> = new Promise((_, reject) => (this.cancelationToken = reject));\n this.requestId += 1;\n const expectingId = this.requestId;\n\n if (!this.loaderShowDelay) {\n this.loaderShowDelay = new Promise<void>((resolve) => {\n const cancelLoader = taskWithDelay(() => {\n this.dispatch({ type: 'RequestItems' });\n setTimeout(resolve, LOADER_SHOW_TIME);\n }, DELAY_BEFORE_SHOW_LOADER);\n\n cancelPromise.catch(() => cancelLoader());\n\n this.cancelLoaderDelay = () => {\n cancelLoader();\n resolve();\n };\n });\n }\n\n try {\n const items = await Promise.race([getItems(query), cancelPromise]);\n if (this.state.loading) {\n await Promise.race([this.loaderShowDelay, cancelPromise]);\n }\n if (expectingId === this.requestId) {\n this.dispatch({\n type: 'ReceiveItems',\n items,\n });\n }\n } catch (error) {\n if (error && error.code === 'CancelationError') {\n this.dispatch({ type: 'CancelRequest' });\n } else if (expectingId === this.requestId) {\n this.dispatch({\n type: 'RequestFailure',\n repeatRequest: () => {\n this.search(query);\n if (this.input) {\n this.input.focus();\n }\n },\n });\n }\n } finally {\n if (expectingId === this.requestId) {\n if (!this.state.loading) {\n this.cancelLoaderDelay();\n }\n this.cancelationToken = null;\n this.loaderShowDelay = null;\n }\n }\n }\n\n /**\n * @public\n */\n public cancelSearch() {\n if (this.cancelationToken) {\n this.cancelationToken(new CancelationError());\n }\n }\n\n /**\n * @public\n */\n public open() {\n this.dispatch({ type: 'Open' });\n }\n\n /**\n * @public\n */\n public close() {\n this.dispatch({ type: 'Close' });\n }\n\n public render() {\n const viewProps = {\n align: this.props.align,\n borderless: this.props.borderless,\n disabled: this.props.disabled,\n disablePortal: this.props.disablePortal,\n editing: this.state.editing,\n error: this.props.error,\n items: this.state.items,\n loading: this.state.loading,\n menuAlign: this.props.menuAlign,\n opened: this.state.opened,\n drawArrow: this.props.drawArrow,\n menuPos: this.props.menuPos,\n placeholder: this.props.placeholder,\n size: this.props.size,\n textValue: this.state.textValue,\n totalCount: this.props.totalCount,\n value: this.props.value,\n warning: this.props.warning,\n 'aria-describedby': this.props['aria-describedby'],\n width: this.props.width,\n maxLength: this.props.maxLength,\n maxMenuHeight: this.props.maxMenuHeight,\n leftIcon: this.props.leftIcon,\n rightIcon: this.props.rightIcon,\n inputMode: this.props.inputMode,\n\n onValueChange: this.handleValueChange,\n onClickOutside: this.handleClickOutside,\n onFocus: this.handleFocus,\n onFocusOutside: this.handleBlur,\n onInputBlur: this.handleInputBlur,\n onInputValueChange: (value: string) => this.dispatch({ type: 'TextChange', value }),\n onInputFocus: this.handleFocus,\n onInputClick: this.handleInputClick,\n onInputKeyDown: (event: React.KeyboardEvent) => {\n event.persist();\n this.dispatch({ type: 'KeyPress', event });\n },\n onMouseEnter: this.props.onMouseEnter,\n onMouseOver: this.props.onMouseOver,\n onMouseLeave: this.props.onMouseLeave,\n renderItem: this.props.renderItem,\n renderNotFound: this.props.renderNotFound,\n itemWrapper: this.props.itemWrapper,\n renderValue: this.props.renderValue,\n renderTotalCount: this.props.renderTotalCount,\n renderAddButton: this.props.renderAddButton,\n repeatRequest: this.state.repeatRequest,\n requestStatus: this.state.requestStatus,\n\n refInput: (input: Nullable<Input>) => {\n this.input = input;\n },\n refMenu: (menu: Nullable<Menu>) => {\n this.menu = menu;\n },\n refInputLikeText: (inputLikeText: Nullable<InputLikeText>) => {\n this.inputLikeText = inputLikeText;\n },\n };\n\n return (\n <CommonWrapper {...this.props}>\n <ComboBoxView {...viewProps} ref={this.setRootNode} />\n </CommonWrapper>\n );\n }\n\n public componentDidMount() {\n this.dispatch({ type: 'Mount' }, false);\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate(prevProps: CustomComboBoxProps<T>, prevState: CustomComboBoxState<T>) {\n if (prevState.editing && !this.state.editing) {\n this.handleBlur();\n }\n this.dispatch({ type: 'DidUpdate', prevProps, prevState }, false);\n }\n\n /**\n * @public\n */\n public reset() {\n this.dispatch({ type: 'Reset' });\n }\n\n private dispatch = (action: CustomComboBoxAction<T>, sync = true) => {\n const updateState = (action: CustomComboBoxAction<T>) => {\n let effects: Array<CustomComboBoxEffect<T>>;\n let nextState: Pick<CustomComboBoxState<T>, never>;\n\n this.setState(\n (state) => {\n const stateAndEffect = this.reducer(state, this.props, action);\n [nextState, effects] = stateAndEffect instanceof Array ? stateAndEffect : [stateAndEffect, []];\n return nextState;\n },\n () => {\n effects.forEach(this.handleEffect);\n },\n );\n };\n\n if (sync) {\n return ReactDOM.flushSync(() => {\n updateState(action);\n });\n }\n\n return updateState(action);\n };\n\n private handleEffect = (effect: CustomComboBoxEffect<T>) => {\n effect(this.dispatch, this.getState, this.getProps, () => this);\n };\n\n private getProps = () => this.props;\n\n private getState = () => this.state;\n\n private handleValueChange = (value: T) => {\n this.dispatch({\n type: 'ValueChange',\n value,\n keepFocus: !this.isMobileLayout,\n });\n };\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n this.focused = true;\n this.dispatch({ type: 'Focus' });\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\n this.handleBlur();\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n if (this.state.opened) {\n this.close();\n }\n return;\n }\n\n this.focused = false;\n // workaround for the similar bug with focusout\n // in Firefox, Chrome and IE\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1363964\n setTimeout(() => {\n this.dispatch({ type: 'Blur' });\n });\n };\n\n private handleInputBlur = () => {\n // If menu opened, RenderLayer is active and\n // it would call handleFocusOutside\n // In that way handleBlur would be called\n\n // TODO: add check for mobile layout, to call `handleBlur`\n\n if (this.state.opened) {\n return;\n }\n this.handleBlur();\n };\n\n private handleInputClick = () => {\n if (!this.cancelationToken) {\n this.dispatch({ type: 'InputClick' });\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["CustomComboBox.tsx"],"names":["React","ReactDOM","CancelationError","taskWithDelay","fixClickFocusIE","CommonWrapper","responsiveLayout","rootNode","ComboBoxRequestStatus","reducer","ComboBoxView","DELAY_BEFORE_SHOW_LOADER","LOADER_SHOW_TIME","DefaultState","inputChanged","editing","items","loading","opened","focused","textValue","repeatRequest","undefined","requestStatus","Unknown","CustomComboBoxDataTids","comboBoxView","CustomComboBox","state","requestId","cancelationToken","cancelLoaderDelay","focus","props","disabled","input","inputLikeText","selectInputText","selectAll","blur","handleBlur","dispatch","action","sync","updateState","effects","nextState","setState","stateAndEffect","Array","forEach","handleEffect","isReact18","version","search","flushSync","effect","getState","getProps","handleValueChange","value","type","keepFocus","isMobileLayout","handleFocus","handleClickOutside","e","close","setTimeout","handleInputBlur","handleInputClick","query","getItems","cancelPromise","Promise","_","reject","expectingId","loaderShowDelay","resolve","cancelLoader","race","code","cancelSearch","open","render","viewProps","align","borderless","disablePortal","error","menuAlign","drawArrow","menuPos","placeholder","size","totalCount","warning","width","maxLength","maxMenuHeight","leftIcon","rightIcon","inputMode","onValueChange","onClickOutside","onFocus","onFocusOutside","onInputBlur","onInputValueChange","onInputFocus","onInputClick","onInputKeyDown","event","persist","onMouseEnter","onMouseOver","onMouseLeave","renderItem","renderNotFound","itemWrapper","renderValue","renderTotalCount","renderAddButton","refInput","refMenu","menu","refInputLikeText","setRootNode","componentDidMount","autoFocus","componentDidUpdate","prevProps","prevState","reset","PureComponent","__KONTUR_REACT_UI__"],"mappings":"0XAAA,OAAOA,KAAP,MAAsC,OAAtC;AACA,OAAOC,QAAP,MAAqB,WAArB;;;;;;;AAOA,SAASC,gBAAT,EAA2BC,aAA3B,QAAgD,iBAAhD;AACA,SAASC,eAAT,QAAgC,kCAAhC;AACA,SAAsBC,aAAtB,QAA2C,8BAA3C;AACA,SAASC,gBAAT,QAAiC,6CAAjC;AACA,SAASC,QAAT,QAAuC,oBAAvC;;;AAGA,SAASC,qBAAT,QAAsC,uBAAtC;AACA,SAAqDC,OAArD,QAAoE,yBAApE;AACA,SAASC,YAAT,QAA6B,gBAA7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DA,OAAO,IAAMC,wBAAwB,GAAG,GAAjC;AACP,OAAO,IAAMC,gBAAgB,GAAG,IAAzB;;AAEP,OAAO,IAAMC,YAAY,GAAG;AAC1BC,EAAAA,YAAY,EAAE,KADY;AAE1BC,EAAAA,OAAO,EAAE,KAFiB;AAG1BC,EAAAA,KAAK,EAAE,IAHmB;AAI1BC,EAAAA,OAAO,EAAE,KAJiB;AAK1BC,EAAAA,MAAM,EAAE,KALkB;AAM1BC,EAAAA,OAAO,EAAE,KANiB;AAO1BC,EAAAA,SAAS,EAAE,EAPe;AAQ1BC,EAAAA,aAAa,EAAE,iCAAMC,SAAN,EARW;AAS1BC,EAAAA,aAAa,EAAEf,qBAAqB,CAACgB,OATX,EAArB;;;AAYP,OAAO,IAAMC,sBAAsB,GAAG;AACpCC,EAAAA,YAAY,EAAE,oBADsB,EAA/B;;;;;AAMP,WAAaC,cAAb,GAFCrB,gBAED,UADCC,QACD;;;AAGSqB,IAAAA,KAHT,GAGyCf,YAHzC;;;;AAOSgB,IAAAA,SAPT,GAOqB,CAPrB;;AASUV,IAAAA,OATV,GASoB,KATpB;AAUUW,IAAAA,gBAVV,GAUiE,IAVjE;;;AAaUrB,IAAAA,OAbV,GAaoBA,OAbpB;AAcSsB,IAAAA,iBAdT,GAcyC,oBAAM,IAAN,EAdzC;;;;;AAmBSC,IAAAA,KAnBT,GAmBiB,YAAM;AACnB,UAAI,MAAKC,KAAL,CAAWC,QAAf,EAAyB;AACvB;AACD;;AAED,UAAI,MAAKC,KAAT,EAAgB;AACd,cAAKA,KAAL,CAAWH,KAAX;AACD,OAFD,MAEO,IAAI,MAAKI,aAAT,EAAwB;AAC7B,cAAKA,aAAL,CAAmBJ,KAAnB;AACD;AACF,KA7BH;;;;;AAkCSK,IAAAA,eAlCT,GAkC2B,YAAM;AAC7B,UAAI,MAAKJ,KAAL,CAAWC,QAAf,EAAyB;AACvB;AACD;AACD,UAAI,MAAKC,KAAT,EAAgB;AACd,cAAKA,KAAL,CAAWG,SAAX;AACD;AACF,KAzCH;;;;;AA8CSC,IAAAA,IA9CT,GA8CgB,YAAM;AAClB,UAAI,MAAKN,KAAL,CAAWC,QAAf,EAAyB;AACvB;AACD;;AAED,YAAKM,UAAL;AACD,KApDH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuOUC,IAAAA,QAvOV,GAuOqB,UAACC,MAAD,EAAkCC,IAAlC,EAAkD,KAAhBA,IAAgB,cAAhBA,IAAgB,GAAT,IAAS;AACnE,UAAMC,WAAW,GAAG,SAAdA,WAAc,CAACF,MAAD,EAAqC;AACvD,YAAIG,OAAJ;AACA,YAAIC,SAAJ;;AAEA,cAAKC,QAAL;AACE,kBAACnB,KAAD,EAAW;AACT,cAAMoB,cAAc,GAAG,MAAKvC,OAAL,CAAamB,KAAb,EAAoB,MAAKK,KAAzB,EAAgCS,MAAhC,CAAvB,CADS;AAEcM,UAAAA,cAAc,YAAYC,KAA1B,GAAkCD,cAAlC,GAAmD,CAACA,cAAD,EAAiB,EAAjB,CAFjE,CAERF,SAFQ,WAEGD,OAFH;AAGT,iBAAOC,SAAP;AACD,SALH;AAME,oBAAM;AACJD,UAAAA,OAAO,CAACK,OAAR,CAAgB,MAAKC,YAArB;AACD,SARH;;AAUD,OAdD;;AAgBA;AACA;AACA,UAAMC,SAAS,GAAGpD,KAAK,CAACqD,OAAN,CAAcC,MAAd,CAAqB,IAArB,MAA+B,CAAjD;AACA,UAAIX,IAAI,IAAIS,SAAZ,EAAuB;AACrB,eAAOnD,QAAQ,CAACsD,SAAT,CAAmB,YAAM;AAC9BX,UAAAA,WAAW,CAACF,MAAD,CAAX;AACD,SAFM,CAAP;AAGD;;AAED,aAAOE,WAAW,CAACF,MAAD,CAAlB;AACD,KAlQH;;AAoQUS,IAAAA,YApQV,GAoQyB,UAACK,MAAD,EAAqC;AAC1DA,MAAAA,MAAM,CAAC,MAAKf,QAAN,EAAgB,MAAKgB,QAArB,EAA+B,MAAKC,QAApC,EAA8C,mDAA9C,CAAN;AACD,KAtQH;;AAwQUA,IAAAA,QAxQV,GAwQqB,oBAAM,MAAKzB,KAAX,EAxQrB;;AA0QUwB,IAAAA,QA1QV,GA0QqB,oBAAM,MAAK7B,KAAX,EA1QrB;;AA4QU+B,IAAAA,iBA5QV,GA4Q8B,UAACC,KAAD,EAAc;AACxC,YAAKnB,QAAL,CAAc;AACZoB,QAAAA,IAAI,EAAE,aADM;AAEZD,QAAAA,KAAK,EAALA,KAFY;AAGZE,QAAAA,SAAS,EAAE,CAAC,MAAKC,cAHL,EAAd;;AAKD,KAlRH;;AAoRUC,IAAAA,WApRV,GAoRwB,YAAM;AAC1B,UAAI,MAAK7C,OAAT,EAAkB;AAChB;AACD;AACD,YAAKA,OAAL,GAAe,IAAf;AACA,YAAKsB,QAAL,CAAc,EAAEoB,IAAI,EAAE,OAAR,EAAd;AACD,KA1RH;;AA4RUI,IAAAA,kBA5RV,GA4R+B,UAACC,CAAD,EAAc;AACzC9D,MAAAA,eAAe,CAAC8D,CAAD,CAAf;AACA,YAAK1B,UAAL;AACD,KA/RH;;AAiSUA,IAAAA,UAjSV,GAiSuB,YAAM;AACzB,UAAI,CAAC,MAAKrB,OAAV,EAAmB;AACjB,YAAI,MAAKS,KAAL,CAAWV,MAAf,EAAuB;AACrB,gBAAKiD,KAAL;AACD;AACD;AACD;;AAED,YAAKhD,OAAL,GAAe,KAAf;AACA;AACA;AACA;AACAiD,MAAAA,UAAU,CAAC,YAAM;AACf,cAAK3B,QAAL,CAAc,EAAEoB,IAAI,EAAE,MAAR,EAAd;AACD,OAFS,CAAV;AAGD,KAhTH;;AAkTUQ,IAAAA,eAlTV,GAkT4B,YAAM;AAC9B;AACA;AACA;;AAEA;;AAEA,UAAI,MAAKzC,KAAL,CAAWV,MAAf,EAAuB;AACrB;AACD;AACD,YAAKsB,UAAL;AACD,KA7TH;;AA+TU8B,IAAAA,gBA/TV,GA+T6B,YAAM;AAC/B,UAAI,CAAC,MAAKxC,gBAAV,EAA4B;AAC1B,cAAKW,QAAL,CAAc,EAAEoB,IAAI,EAAE,YAAR,EAAd;AACD;AACF,KAnUH,sDAuDE;AACF;AACA,KAzDA,OA0DeP,MA1Df,oGA0DE,iBAAoBiB,KAApB,gMAAoBA,KAApB,cAAoBA,KAApB,GAAoC,KAAK3C,KAAL,CAAWR,SAA/C,EACUoD,QADV,GACuB,KAAKvC,KAD5B,CACUuC,QADV,CAGQC,aAHR,GAGwC,IAAIC,OAAJ,CAAY,UAACC,CAAD,EAAIC,MAAJ,UAAgB,MAAI,CAAC9C,gBAAL,GAAwB8C,MAAxC,EAAZ,CAHxC,CAIE,KAAK/C,SAAL,IAAkB,CAAlB,CACMgD,WALR,GAKsB,KAAKhD,SAL3B,CAOE,IAAI,CAAC,KAAKiD,eAAV,EAA2B,CACzB,KAAKA,eAAL,GAAuB,IAAIJ,OAAJ,CAAkB,UAACK,OAAD,EAAa,CACpD,IAAMC,YAAY,GAAG7E,aAAa,CAAC,YAAM,CACvC,MAAI,CAACsC,QAAL,CAAc,EAAEoB,IAAI,EAAE,cAAR,EAAd,EACAO,UAAU,CAACW,OAAD,EAAUnE,gBAAV,CAAV,CACD,CAHiC,EAG/BD,wBAH+B,CAAlC,CAKA8D,aAAa,SAAb,CAAoB,oBAAMO,YAAY,EAAlB,EAApB,EAEA,MAAI,CAACjD,iBAAL,GAAyB,YAAM,CAC7BiD,YAAY,GACZD,OAAO,GACR,CAHD,CAID,CAZsB,CAAvB,CAaD,CArBH,2CAwBwBL,OAAO,CAACO,IAAR,CAAa,CAACT,QAAQ,CAACD,KAAD,CAAT,EAAkBE,aAAlB,CAAb,CAxBxB,QAwBUzD,KAxBV,sBAyBQ,KAAKY,KAAL,CAAWX,OAzBnB,uDA0BYyD,OAAO,CAACO,IAAR,CAAa,CAAC,KAAKH,eAAN,EAAuBL,aAAvB,CAAb,CA1BZ,SA4BI,IAAII,WAAW,KAAK,KAAKhD,SAAzB,EAAoC,CAClC,KAAKY,QAAL,CAAc,EACZoB,IAAI,EAAE,cADM,EAEZ7C,KAAK,EAALA,KAFY,EAAd,EAID,CAjCL,uFAmCI,IAAI,eAAS,YAAMkE,IAAN,KAAe,kBAA5B,EAAgD,CAC9C,KAAKzC,QAAL,CAAc,EAAEoB,IAAI,EAAE,eAAR,EAAd,EACD,CAFD,MAEO,IAAIgB,WAAW,KAAK,KAAKhD,SAAzB,EAAoC,CACzC,KAAKY,QAAL,CAAc,EACZoB,IAAI,EAAE,gBADM,EAEZxC,aAAa,EAAE,yBAAM,CACnB,MAAI,CAACiC,MAAL,CAAYiB,KAAZ,EACA,IAAI,MAAI,CAACpC,KAAT,EAAgB,CACd,MAAI,CAACA,KAAL,CAAWH,KAAX,GACD,CACF,CAPW,EAAd,EASD,CA/CL,2BAiDI,IAAI6C,WAAW,KAAK,KAAKhD,SAAzB,EAAoC,CAClC,IAAI,CAAC,KAAKD,KAAL,CAAWX,OAAhB,EAAyB,CACvB,KAAKc,iBAAL,GACD,CACD,KAAKD,gBAAL,GAAwB,IAAxB,CACA,KAAKgD,eAAL,GAAuB,IAAvB,CACD,CAvDL,6GA1DF,iFAqHE;AACF;AACA,KAvHA,QAwHSK,YAxHT,GAwHE,wBAAsB,CACpB,IAAI,KAAKrD,gBAAT,EAA2B,CACzB,KAAKA,gBAAL,CAAsB,IAAI5B,gBAAJ,EAAtB,EACD,CACF,CA5HH,CA8HE;AACF;AACA,KAhIA,QAiISkF,IAjIT,GAiIE,gBAAc,CACZ,KAAK3C,QAAL,CAAc,EAAEoB,IAAI,EAAE,MAAR,EAAd,EACD,CAnIH,CAqIE;AACF;AACA,KAvIA,QAwISM,KAxIT,GAwIE,iBAAe,CACb,KAAK1B,QAAL,CAAc,EAAEoB,IAAI,EAAE,OAAR,EAAd,EACD,CA1IH,QA4ISwB,MA5IT,GA4IE,kBAAgB,mBACd,IAAMC,SAAS,GAAG,EAChBC,KAAK,EAAE,KAAKtD,KAAL,CAAWsD,KADF,EAEhBC,UAAU,EAAE,KAAKvD,KAAL,CAAWuD,UAFP,EAGhBtD,QAAQ,EAAE,KAAKD,KAAL,CAAWC,QAHL,EAIhBuD,aAAa,EAAE,KAAKxD,KAAL,CAAWwD,aAJV,EAKhB1E,OAAO,EAAE,KAAKa,KAAL,CAAWb,OALJ,EAMhB2E,KAAK,EAAE,KAAKzD,KAAL,CAAWyD,KANF,EAOhB1E,KAAK,EAAE,KAAKY,KAAL,CAAWZ,KAPF,EAQhBC,OAAO,EAAE,KAAKW,KAAL,CAAWX,OARJ,EAShB0E,SAAS,EAAE,KAAK1D,KAAL,CAAW0D,SATN,EAUhBzE,MAAM,EAAE,KAAKU,KAAL,CAAWV,MAVH,EAWhB0E,SAAS,EAAE,KAAK3D,KAAL,CAAW2D,SAXN,EAYhBC,OAAO,EAAE,KAAK5D,KAAL,CAAW4D,OAZJ,EAahBC,WAAW,EAAE,KAAK7D,KAAL,CAAW6D,WAbR,EAchBC,IAAI,EAAE,KAAK9D,KAAL,CAAW8D,IAdD,EAehB3E,SAAS,EAAE,KAAKQ,KAAL,CAAWR,SAfN,EAgBhB4E,UAAU,EAAE,KAAK/D,KAAL,CAAW+D,UAhBP,EAiBhBpC,KAAK,EAAE,KAAK3B,KAAL,CAAW2B,KAjBF,EAkBhBqC,OAAO,EAAE,KAAKhE,KAAL,CAAWgE,OAlBJ,EAmBhB,oBAAoB,KAAKhE,KAAL,CAAW,kBAAX,CAnBJ,EAoBhBiE,KAAK,EAAE,KAAKjE,KAAL,CAAWiE,KApBF,EAqBhBC,SAAS,EAAE,KAAKlE,KAAL,CAAWkE,SArBN,EAsBhBC,aAAa,EAAE,KAAKnE,KAAL,CAAWmE,aAtBV,EAuBhBC,QAAQ,EAAE,KAAKpE,KAAL,CAAWoE,QAvBL,EAwBhBC,SAAS,EAAE,KAAKrE,KAAL,CAAWqE,SAxBN,EAyBhBC,SAAS,EAAE,KAAKtE,KAAL,CAAWsE,SAzBN,EA2BhBC,aAAa,EAAE,KAAK7C,iBA3BJ,EA4BhB8C,cAAc,EAAE,KAAKxC,kBA5BL,EA6BhByC,OAAO,EAAE,KAAK1C,WA7BE,EA8BhB2C,cAAc,EAAE,KAAKnE,UA9BL,EA+BhBoE,WAAW,EAAE,KAAKvC,eA/BF,EAgChBwC,kBAAkB,EAAE,4BAACjD,KAAD,UAAmB,MAAI,CAACnB,QAAL,CAAc,EAAEoB,IAAI,EAAE,YAAR,EAAsBD,KAAK,EAALA,KAAtB,EAAd,CAAnB,EAhCJ,EAiChBkD,YAAY,EAAE,KAAK9C,WAjCH,EAkChB+C,YAAY,EAAE,KAAKzC,gBAlCH,EAmChB0C,cAAc,EAAE,wBAACC,KAAD,EAAgC,CAC9CA,KAAK,CAACC,OAAN,GACA,MAAI,CAACzE,QAAL,CAAc,EAAEoB,IAAI,EAAE,UAAR,EAAoBoD,KAAK,EAALA,KAApB,EAAd,EACD,CAtCe,EAuChBE,YAAY,EAAE,KAAKlF,KAAL,CAAWkF,YAvCT,EAwChBC,WAAW,EAAE,KAAKnF,KAAL,CAAWmF,WAxCR,EAyChBC,YAAY,EAAE,KAAKpF,KAAL,CAAWoF,YAzCT,EA0ChBC,UAAU,EAAE,KAAKrF,KAAL,CAAWqF,UA1CP,EA2ChBC,cAAc,EAAE,KAAKtF,KAAL,CAAWsF,cA3CX,EA4ChBC,WAAW,EAAE,KAAKvF,KAAL,CAAWuF,WA5CR,EA6ChBC,WAAW,EAAE,KAAKxF,KAAL,CAAWwF,WA7CR,EA8ChBC,gBAAgB,EAAE,KAAKzF,KAAL,CAAWyF,gBA9Cb,EA+ChBC,eAAe,EAAE,KAAK1F,KAAL,CAAW0F,eA/CZ,EAgDhBtG,aAAa,EAAE,KAAKO,KAAL,CAAWP,aAhDV,EAiDhBE,aAAa,EAAE,KAAKK,KAAL,CAAWL,aAjDV,EAmDhBqG,QAAQ,EAAE,kBAACzF,KAAD,EAA4B,CACpC,MAAI,CAACA,KAAL,GAAaA,KAAb,CACD,CArDe,EAsDhB0F,OAAO,EAAE,iBAACC,IAAD,EAA0B,CACjC,MAAI,CAACA,IAAL,GAAYA,IAAZ,CACD,CAxDe,EAyDhBC,gBAAgB,EAAE,0BAAC3F,aAAD,EAA4C,CAC5D,MAAI,CAACA,aAAL,GAAqBA,aAArB,CACD,CA3De,EAAlB,CA8DA,oBACE,oBAAC,aAAD,EAAmB,KAAKH,KAAxB,eACE,oBAAC,YAAD,eAAkBqD,SAAlB,IAA6B,GAAG,EAAE,KAAK0C,WAAvC,IADF,CADF,CAKD,CAhNH,QAkNSC,iBAlNT,GAkNE,6BAA2B,CACzB,KAAKxF,QAAL,CAAc,EAAEoB,IAAI,EAAE,OAAR,EAAd,EAAiC,KAAjC,EACA,IAAI,KAAK5B,KAAL,CAAWiG,SAAf,EAA0B,CACxB,KAAKlG,KAAL,GACD,CACF,CAvNH,QAyNSmG,kBAzNT,GAyNE,4BAA0BC,SAA1B,EAA6DC,SAA7D,EAAgG,CAC9F,IAAIA,SAAS,CAACtH,OAAV,IAAqB,CAAC,KAAKa,KAAL,CAAWb,OAArC,EAA8C,CAC5C,KAAKyB,UAAL,GACD,CACD,KAAKC,QAAL,CAAc,EAAEoB,IAAI,EAAE,WAAR,EAAqBuE,SAAS,EAATA,SAArB,EAAgCC,SAAS,EAATA,SAAhC,EAAd,EAA2D,KAA3D,EACD,CA9NH,CAgOE;AACF;AACA,KAlOA,QAmOSC,KAnOT,GAmOE,iBAAe,CACb,KAAK7F,QAAL,CAAc,EAAEoB,IAAI,EAAE,OAAR,EAAd,EACD,CArOH,yBAAuC7D,KAAK,CAACuI,aAA7C,WACgBC,mBADhB,GACsC,gBADtC","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { Input, InputIconType } from '../../components/Input';\nimport { Menu } from '../Menu';\nimport { InputLikeText } from '../InputLikeText';\nimport { MenuItemState } from '../../components/MenuItem';\nimport { CancelationError, taskWithDelay } from '../../lib/utils';\nimport { fixClickFocusIE } from '../../lib/events/fixClickFocusIE';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { DropdownContainerProps } from '../DropdownContainer';\n\nimport { ComboBoxRequestStatus } from './CustomComboBoxTypes';\nimport { CustomComboBoxAction, CustomComboBoxEffect, reducer } from './CustomComboBoxReducer';\nimport { ComboBoxView } from './ComboBoxView';\n\nexport interface CustomComboBoxProps<T> extends Pick<DropdownContainerProps, 'menuPos'>, CommonProps {\n align?: 'left' | 'center' | 'right';\n autoFocus?: boolean;\n borderless?: boolean;\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n maxLength?: number;\n menuAlign?: 'left' | 'right';\n drawArrow?: boolean;\n leftIcon?: InputIconType;\n rightIcon?: InputIconType;\n searchOnFocus?: boolean;\n onValueChange?: (value: T) => void;\n onInputValueChange?: (value: string) => Nullable<string> | void;\n onUnexpectedInput?: (value: string) => void | null | T;\n onFocus?: () => void;\n onBlur?: () => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseOver?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n onInputKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n placeholder?: string;\n size?: 'small' | 'medium' | 'large';\n totalCount?: number;\n value?: Nullable<T>;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n width?: string | number;\n maxMenuHeight?: number | string;\n renderNotFound?: () => React.ReactNode;\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n renderItem: (item: T, state?: MenuItemState) => React.ReactNode;\n itemWrapper?: (item?: T) => React.ComponentType<unknown>;\n renderValue: (value: T) => React.ReactNode;\n renderAddButton?: (query?: string) => React.ReactNode;\n valueToString: (value: T) => string;\n itemToValue: (item: T) => string | number;\n getItems: (query: string) => Promise<T[]>;\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n}\n\nexport interface CustomComboBoxState<T> {\n editing: boolean;\n loading: boolean;\n opened: boolean;\n textValue: string;\n items: Nullable<T[]>;\n inputChanged: boolean;\n focused: boolean;\n repeatRequest: () => void;\n requestStatus: ComboBoxRequestStatus;\n}\n\nexport const DELAY_BEFORE_SHOW_LOADER = 300;\nexport const LOADER_SHOW_TIME = 1000;\n\nexport const DefaultState = {\n inputChanged: false,\n editing: false,\n items: null,\n loading: false,\n opened: false,\n focused: false,\n textValue: '',\n repeatRequest: () => undefined,\n requestStatus: ComboBoxRequestStatus.Unknown,\n};\n\nexport const CustomComboBoxDataTids = {\n comboBoxView: 'ComboBoxView__root',\n} as const;\n\n@responsiveLayout\n@rootNode\nexport class CustomComboBox<T> extends React.PureComponent<CustomComboBoxProps<T>, CustomComboBoxState<T>> {\n public static __KONTUR_REACT_UI__ = 'CustomComboBox';\n\n public state: CustomComboBoxState<T> = DefaultState;\n public input: Nullable<Input>;\n public menu: Nullable<Menu>;\n public inputLikeText: Nullable<InputLikeText>;\n public requestId = 0;\n public loaderShowDelay: Nullable<Promise<void>>;\n private focused = false;\n private cancelationToken: Nullable<(reason?: Error) => void> = null;\n private isMobileLayout!: boolean;\n\n private reducer = reducer;\n public cancelLoaderDelay: () => void = () => null;\n\n /**\n * @public\n */\n public focus = () => {\n if (this.props.disabled) {\n return;\n }\n\n if (this.input) {\n this.input.focus();\n } else if (this.inputLikeText) {\n this.inputLikeText.focus();\n }\n };\n\n /**\n * @public\n */\n public selectInputText = () => {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.selectAll();\n }\n };\n\n /**\n * @public\n */\n public blur = () => {\n if (this.props.disabled) {\n return;\n }\n\n this.handleBlur();\n };\n private setRootNode!: TSetRootNode;\n\n /**\n * @public\n */\n public async search(query: string = this.state.textValue) {\n const { getItems } = this.props;\n\n const cancelPromise: Promise<never> = new Promise((_, reject) => (this.cancelationToken = reject));\n this.requestId += 1;\n const expectingId = this.requestId;\n\n if (!this.loaderShowDelay) {\n this.loaderShowDelay = new Promise<void>((resolve) => {\n const cancelLoader = taskWithDelay(() => {\n this.dispatch({ type: 'RequestItems' });\n setTimeout(resolve, LOADER_SHOW_TIME);\n }, DELAY_BEFORE_SHOW_LOADER);\n\n cancelPromise.catch(() => cancelLoader());\n\n this.cancelLoaderDelay = () => {\n cancelLoader();\n resolve();\n };\n });\n }\n\n try {\n const items = await Promise.race([getItems(query), cancelPromise]);\n if (this.state.loading) {\n await Promise.race([this.loaderShowDelay, cancelPromise]);\n }\n if (expectingId === this.requestId) {\n this.dispatch({\n type: 'ReceiveItems',\n items,\n });\n }\n } catch (error) {\n if (error && error.code === 'CancelationError') {\n this.dispatch({ type: 'CancelRequest' });\n } else if (expectingId === this.requestId) {\n this.dispatch({\n type: 'RequestFailure',\n repeatRequest: () => {\n this.search(query);\n if (this.input) {\n this.input.focus();\n }\n },\n });\n }\n } finally {\n if (expectingId === this.requestId) {\n if (!this.state.loading) {\n this.cancelLoaderDelay();\n }\n this.cancelationToken = null;\n this.loaderShowDelay = null;\n }\n }\n }\n\n /**\n * @public\n */\n public cancelSearch() {\n if (this.cancelationToken) {\n this.cancelationToken(new CancelationError());\n }\n }\n\n /**\n * @public\n */\n public open() {\n this.dispatch({ type: 'Open' });\n }\n\n /**\n * @public\n */\n public close() {\n this.dispatch({ type: 'Close' });\n }\n\n public render() {\n const viewProps = {\n align: this.props.align,\n borderless: this.props.borderless,\n disabled: this.props.disabled,\n disablePortal: this.props.disablePortal,\n editing: this.state.editing,\n error: this.props.error,\n items: this.state.items,\n loading: this.state.loading,\n menuAlign: this.props.menuAlign,\n opened: this.state.opened,\n drawArrow: this.props.drawArrow,\n menuPos: this.props.menuPos,\n placeholder: this.props.placeholder,\n size: this.props.size,\n textValue: this.state.textValue,\n totalCount: this.props.totalCount,\n value: this.props.value,\n warning: this.props.warning,\n 'aria-describedby': this.props['aria-describedby'],\n width: this.props.width,\n maxLength: this.props.maxLength,\n maxMenuHeight: this.props.maxMenuHeight,\n leftIcon: this.props.leftIcon,\n rightIcon: this.props.rightIcon,\n inputMode: this.props.inputMode,\n\n onValueChange: this.handleValueChange,\n onClickOutside: this.handleClickOutside,\n onFocus: this.handleFocus,\n onFocusOutside: this.handleBlur,\n onInputBlur: this.handleInputBlur,\n onInputValueChange: (value: string) => this.dispatch({ type: 'TextChange', value }),\n onInputFocus: this.handleFocus,\n onInputClick: this.handleInputClick,\n onInputKeyDown: (event: React.KeyboardEvent) => {\n event.persist();\n this.dispatch({ type: 'KeyPress', event });\n },\n onMouseEnter: this.props.onMouseEnter,\n onMouseOver: this.props.onMouseOver,\n onMouseLeave: this.props.onMouseLeave,\n renderItem: this.props.renderItem,\n renderNotFound: this.props.renderNotFound,\n itemWrapper: this.props.itemWrapper,\n renderValue: this.props.renderValue,\n renderTotalCount: this.props.renderTotalCount,\n renderAddButton: this.props.renderAddButton,\n repeatRequest: this.state.repeatRequest,\n requestStatus: this.state.requestStatus,\n\n refInput: (input: Nullable<Input>) => {\n this.input = input;\n },\n refMenu: (menu: Nullable<Menu>) => {\n this.menu = menu;\n },\n refInputLikeText: (inputLikeText: Nullable<InputLikeText>) => {\n this.inputLikeText = inputLikeText;\n },\n };\n\n return (\n <CommonWrapper {...this.props}>\n <ComboBoxView {...viewProps} ref={this.setRootNode} />\n </CommonWrapper>\n );\n }\n\n public componentDidMount() {\n this.dispatch({ type: 'Mount' }, false);\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate(prevProps: CustomComboBoxProps<T>, prevState: CustomComboBoxState<T>) {\n if (prevState.editing && !this.state.editing) {\n this.handleBlur();\n }\n this.dispatch({ type: 'DidUpdate', prevProps, prevState }, false);\n }\n\n /**\n * @public\n */\n public reset() {\n this.dispatch({ type: 'Reset' });\n }\n\n private dispatch = (action: CustomComboBoxAction<T>, sync = true) => {\n const updateState = (action: CustomComboBoxAction<T>) => {\n let effects: Array<CustomComboBoxEffect<T>>;\n let nextState: Pick<CustomComboBoxState<T>, never>;\n\n this.setState(\n (state) => {\n const stateAndEffect = this.reducer(state, this.props, action);\n [nextState, effects] = stateAndEffect instanceof Array ? stateAndEffect : [stateAndEffect, []];\n return nextState;\n },\n () => {\n effects.forEach(this.handleEffect);\n },\n );\n };\n\n // Auto-batching React@18 creates problems that are fixed with flushSync\n // https://github.com/skbkontur/retail-ui/pull/3144#issuecomment-1535235366\n const isReact18 = React.version.search('18') === 0;\n if (sync && isReact18) {\n return ReactDOM.flushSync(() => {\n updateState(action);\n });\n }\n\n return updateState(action);\n };\n\n private handleEffect = (effect: CustomComboBoxEffect<T>) => {\n effect(this.dispatch, this.getState, this.getProps, () => this);\n };\n\n private getProps = () => this.props;\n\n private getState = () => this.state;\n\n private handleValueChange = (value: T) => {\n this.dispatch({\n type: 'ValueChange',\n value,\n keepFocus: !this.isMobileLayout,\n });\n };\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n this.focused = true;\n this.dispatch({ type: 'Focus' });\n };\n\n private handleClickOutside = (e: Event) => {\n fixClickFocusIE(e);\n this.handleBlur();\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n if (this.state.opened) {\n this.close();\n }\n return;\n }\n\n this.focused = false;\n // workaround for the similar bug with focusout\n // in Firefox, Chrome and IE\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1363964\n setTimeout(() => {\n this.dispatch({ type: 'Blur' });\n });\n };\n\n private handleInputBlur = () => {\n // If menu opened, RenderLayer is active and\n // it would call handleFocusOutside\n // In that way handleBlur would be called\n\n // TODO: add check for mobile layout, to call `handleBlur`\n\n if (this.state.opened) {\n return;\n }\n this.handleBlur();\n };\n\n private handleInputClick = () => {\n if (!this.cancelationToken) {\n this.dispatch({ type: 'InputClick' });\n }\n };\n}\n"]}
|