@finam/web-ui-kit-components 3.34.1 → 3.34.3
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 +4 -0
- package/dist/Breadcrumbs/utils/getRenderOnPageItems.d.ts.map +1 -1
- package/dist/Breadcrumbs/utils/getRenderOnPageItems.js +6 -3
- package/dist/Breadcrumbs/utils/getRenderOnPageItems.js.map +1 -1
- package/dist/Breadcrumbs/utils/intersperseWithKeys.d.ts.map +1 -1
- package/dist/Breadcrumbs/utils/intersperseWithKeys.js +6 -3
- package/dist/Breadcrumbs/utils/intersperseWithKeys.js.map +1 -1
- package/dist/CodeInput/CodeInput.js +4 -1
- package/dist/CodeInput/CodeInput.js.map +1 -1
- package/dist/DraggablePopover/layersManager.d.ts.map +1 -1
- package/dist/DraggablePopover/layersManager.js +1 -0
- package/dist/DraggablePopover/layersManager.js.map +1 -1
- package/dist/MultiSelectField/MultiSelectField.d.ts.map +1 -1
- package/dist/MultiSelectField/MultiSelectField.js +1 -0
- package/dist/MultiSelectField/MultiSelectField.js.map +1 -1
- package/dist/NumberTextField/NumberTextField.js +4 -2
- package/dist/NumberTextField/NumberTextField.js.map +1 -1
- package/dist/NumberTextField/utils.js +5 -1
- package/dist/NumberTextField/utils.js.map +1 -1
- package/dist/Paper/Paper.styles.d.ts.map +1 -1
- package/dist/Paper/Paper.styles.js +3 -1
- package/dist/Paper/Paper.styles.js.map +1 -1
- package/dist/PickersUtilsProvider/defaultDateFormatUtils.js +4 -3
- package/dist/PickersUtilsProvider/defaultDateFormatUtils.js.map +1 -1
- package/dist/PickersUtilsProvider/defaultTimeFormatUtils.js +5 -4
- package/dist/PickersUtilsProvider/defaultTimeFormatUtils.js.map +1 -1
- package/dist/ProductCard/badges/utils.js +2 -1
- package/dist/ProductCard/badges/utils.js.map +1 -1
- package/dist/ProductCard/layouts/common/Content.d.ts.map +1 -1
- package/dist/ProductCard/layouts/common/Content.js +6 -2
- package/dist/ProductCard/layouts/common/Content.js.map +1 -1
- package/dist/ProductCard/layouts/common/chartUtils.d.ts.map +1 -1
- package/dist/ProductCard/layouts/common/chartUtils.js +1 -0
- package/dist/ProductCard/layouts/common/chartUtils.js.map +1 -1
- package/dist/ProductCard/utils.js +1 -1
- package/dist/ProductCard/utils.js.map +1 -1
- package/dist/SecurityIcon/constants.d.ts +2 -2
- package/dist/SecurityIcon/constants.d.ts.map +1 -1
- package/dist/SecurityIcon/constants.js.map +1 -1
- package/dist/SecurityIcon/utils.d.ts.map +1 -1
- package/dist/SecurityIcon/utils.js +2 -1
- package/dist/SecurityIcon/utils.js.map +1 -1
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +4 -2
- package/dist/Slider/Slider.js.map +1 -1
- package/dist/Slider/utils.js +1 -1
- package/dist/Slider/utils.js.map +1 -1
- package/dist/Snackbar/Snackbar.js +4 -4
- package/dist/Snackbar/Snackbar.js.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberTextField/utils.js","sources":["../../src/NumberTextField/utils.ts"],"sourcesContent":["export const lastCharIsFloatingSymbol = (value: string) => /[.,]$/.test(value);\n\nexport const calculateFloatPrecision = (value: number) => {\n const splitNumber = value.toString().split('.');\n if (splitNumber.length > 1) {\n return splitNumber[1]
|
|
1
|
+
{"version":3,"file":"NumberTextField/utils.js","sources":["../../src/NumberTextField/utils.ts"],"sourcesContent":["export const lastCharIsFloatingSymbol = (value: string) => /[.,]$/.test(value);\n\nexport const calculateFloatPrecision = (value: number) => {\n const splitNumber = value.toString().split('.');\n if (splitNumber.length > 1) {\n return splitNumber[1]?.length ?? 0;\n }\n\n return 0;\n};\n\nexport const getIntLength = (value: number, defaultLength: number) => {\n if (Number.isFinite(value)) {\n const intValue = parseInt(value.toString(), 10);\n return intValue.toString().length + (intValue === 0 && value < 0 ? 1 : 0);\n }\n return defaultLength;\n};\n\nexport const normalizeValueByStep = (\n value: number,\n step: number,\n dcpl: number,\n roundDirection: 'up' | 'down',\n) => {\n if (!step) {\n return value;\n }\n\n const intifiedValue = Math.round(value * (10 ** dcpl));\n const intifiedStep = step * (10 ** dcpl);\n\n if (intifiedValue % intifiedStep !== 0) {\n const n = roundDirection === 'up'\n ? Math.ceil(intifiedValue / intifiedStep)\n : Math.floor(intifiedValue / intifiedStep);\n return (n * intifiedStep) / (10 ** dcpl);\n }\n\n return value;\n};\n"],"names":["lastCharIsFloatingSymbol","value","calculateFloatPrecision","splitNumber","_splitNumber_","getIntLength","defaultLength","Number","intValue","parseInt","normalizeValueByStep","step","dcpl","roundDirection","intifiedValue","Math","intifiedStep","n"],"mappings":"AAAO,MAAMA,2BAA2B,CAACC,QAAkB,QAAQ,IAAI,CAACA;AAEjE,MAAMC,0BAA0B,CAACD;IACtC,MAAME,cAAcF,MAAM,QAAQ,GAAG,KAAK,CAAC;IAC3C,IAAIE,YAAY,MAAM,GAAG,GAAG;;YACnBC;QAAP,OAAO,QAAP,gBAAOA,CAAAA,gBAAAA,WAAW,CAAC,EAAE,AAAD,IAAbA,KAAAA,IAAAA,cAAgB,MAAM,AAAD,IAAC,OAAI;IACnC;IAEA,OAAO;AACT;AAEO,MAAMC,eAAe,CAACJ,OAAeK;IAC1C,IAAIC,OAAO,QAAQ,CAACN,QAAQ;QAC1B,MAAMO,WAAWC,SAASR,MAAM,QAAQ,IAAI;QAC5C,OAAOO,SAAS,QAAQ,GAAG,MAAM,GAAIA,CAAAA,AAAa,MAAbA,YAAkBP,QAAQ,IAAI,IAAI;IACzE;IACA,OAAOK;AACT;AAEO,MAAMI,uBAAuB,CAClCT,OACAU,MACAC,MACAC;IAEA,IAAI,CAACF,MACH,OAAOV;IAGT,MAAMa,gBAAgBC,KAAK,KAAK,CAACd,QAAQ,KAARA,GAAAA,CAAS,IAAMW;IAChD,MAAMI,eAAeL,OAAO,KAAPA,GAAAA,CAAQ,IAAMC;IAEnC,IAAIE,gBAAgBE,iBAAiB,GAAG;QACtC,MAAMC,IAAIJ,AAAmB,SAAnBA,iBACNE,KAAK,IAAI,CAACD,gBAAgBE,gBAC1BD,KAAK,KAAK,CAACD,gBAAgBE;QAC/B,OAAQC,IAAID,eAAAA,KAAAA,GAAAA,CAAiB,IAAMJ;IACrC;IAEA,OAAOX;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Paper.styles.d.ts","sourceRoot":"","sources":["../../src/Paper/Paper.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKvD,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACrF,cAAc,CAAC,EACf,iBAAiB,MAAM,EACvB,aAAa,MAAM,aAAa,EAChC,kBAAkB,MAAM,
|
|
1
|
+
{"version":3,"file":"Paper.styles.d.ts","sourceRoot":"","sources":["../../src/Paper/Paper.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKvD,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACrF,cAAc,CAAC,EACf,iBAAiB,MAAM,EACvB,aAAa,MAAM,aAAa,EAChC,kBAAkB,MAAM,kBAezB,CAAC;AAqBF,eAAO,MAAM,IAAI,qKAIhB,CAAC"}
|
|
@@ -2,8 +2,10 @@ import { styled } from "@linaria/react";
|
|
|
2
2
|
import { mapPropClassName } from "../utils/className.js";
|
|
3
3
|
const mapPropStyles = (tokensObject, classNamePrefix, cssProperty, nestedObjectKey)=>Object.keys(tokensObject).reduce((acc, tokenKey)=>{
|
|
4
4
|
const token = tokensObject[tokenKey];
|
|
5
|
+
const value = 'object' == typeof token && nestedObjectKey ? token[nestedObjectKey] : token;
|
|
6
|
+
if (null == value) return acc;
|
|
5
7
|
acc[`&.${mapPropClassName(classNamePrefix, tokenKey)}`] = {
|
|
6
|
-
[cssProperty]:
|
|
8
|
+
[cssProperty]: value
|
|
7
9
|
};
|
|
8
10
|
return acc;
|
|
9
11
|
}, {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Paper/Paper.styles.js","sources":["../../src/Paper/Paper.styles.ts"],"sourcesContent":["import { styled, CSSProperties } from '@linaria/react';\nimport { tokens } from '@finam/web-ui-kit-core/theme/contract';\nimport { PREFIX_SHADOW, PREFIX_BACKGROUND, PREFIX_BORDER_RADIUS } from './utils.js';\nimport { mapPropClassName } from '../utils/className.js';\n\nexport const mapPropStyles = <T extends Record<string, string | Record<string, string>>>(\n tokensObject: T,\n classNamePrefix: string,\n cssProperty: keyof CSSProperties,\n nestedObjectKey?: string,\n) => (\n Object.keys(tokensObject).reduce<CSSProperties>((acc, tokenKey) => {\n const token = tokensObject[tokenKey];\n
|
|
1
|
+
{"version":3,"file":"Paper/Paper.styles.js","sources":["../../src/Paper/Paper.styles.ts"],"sourcesContent":["import { styled, CSSProperties } from '@linaria/react';\nimport { tokens } from '@finam/web-ui-kit-core/theme/contract';\nimport { PREFIX_SHADOW, PREFIX_BACKGROUND, PREFIX_BORDER_RADIUS } from './utils.js';\nimport { mapPropClassName } from '../utils/className.js';\n\nexport const mapPropStyles = <T extends Record<string, string | Record<string, string>>>(\n tokensObject: T,\n classNamePrefix: string,\n cssProperty: keyof CSSProperties,\n nestedObjectKey?: string,\n) => (\n Object.keys(tokensObject).reduce<CSSProperties>((acc, tokenKey) => {\n const token = tokensObject[tokenKey];\n const value = typeof token === 'object' && nestedObjectKey ? token[nestedObjectKey] : token;\n\n if (value == null) {\n return acc;\n }\n\n acc[`&.${mapPropClassName(classNamePrefix, tokenKey)}`] = {\n [cssProperty]: value,\n };\n return acc;\n }, {})\n);\n\nconst backgroundStyles = mapPropStyles(\n tokens.colors.bg.base,\n PREFIX_BACKGROUND,\n 'backgroundColor',\n 'default',\n);\nconst shadowStyles = mapPropStyles(\n tokens.shadow,\n PREFIX_SHADOW,\n 'boxShadow',\n 'front',\n);\nconst borderRadiusStyles = mapPropStyles(\n tokens.radius,\n PREFIX_BORDER_RADIUS,\n 'borderRadius',\n 'default',\n);\n\nexport const Root = styled.div`\n ${backgroundStyles}\n ${shadowStyles}\n ${borderRadiusStyles}\n`;\n"],"names":["mapPropStyles","tokensObject","classNamePrefix","cssProperty","nestedObjectKey","Object","acc","tokenKey","token","value","mapPropClassName","backgroundStyles","tokens","PREFIX_BACKGROUND","shadowStyles","PREFIX_SHADOW","borderRadiusStyles","PREFIX_BORDER_RADIUS","Root","styled"],"mappings":";;;;AAKO,MAAMA,gBAAgB,CAC3BC,cACAC,iBACAC,aACAC,kBAEAC,OAAO,IAAI,CAACJ,cAAc,MAAM,CAAgB,CAACK,KAAKC;QACpD,MAAMC,QAAQP,YAAY,CAACM,SAAS;QACpC,MAAME,QAAQ,AAAiB,YAAjB,OAAOD,SAAsBJ,kBAAkBI,KAAK,CAACJ,gBAAgB,GAAGI;QAEtF,IAAIC,AAAS,QAATA,OACF,OAAOH;QAGTA,GAAG,CAAC,CAAC,EAAE,EAAEI,iBAAiBR,iBAAiBK,WAAW,CAAC,GAAG;YACxD,CAACJ,YAAY,EAAEM;QACjB;QACA,OAAOH;IACT,GAAG,CAAC;AAGN,MAAMK,mBAAmBX,cACvBY,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,EACrBC,mBACA,mBACA;AAEF,MAAMC,eAAed,cACnBY,OAAO,MAAM,EACbG,eACA,aACA;AAEF,MAAMC,qBAAqBhB,cACzBY,OAAO,MAAM,EACbK,sBACA,gBACA;AAGK,MAAMC,OAAOC,OAAO,GAAG,CAAC;EAC7B,EAAER,iBAAiB;EACnB,EAAEG,aAAa;EACf,EAAEE,mBAAmB;AACvB,CAAC"}
|
|
@@ -12,11 +12,12 @@ const formatInputValue = (value, locale = 'ru')=>{
|
|
|
12
12
|
return value.replace(/[^\d]/g, '').split('').reduce((r, v, index)=>2 === index || 4 === index ? `${r}${delimiter}${v}` : `${r}${v}`, '').slice(0, 10);
|
|
13
13
|
};
|
|
14
14
|
const parseInputDate = (value, locale = 'ru')=>{
|
|
15
|
+
var _parseResult_, _parseResult_1, _parseResult_2;
|
|
15
16
|
const parseResult = 'ru' === locale ? /^(\d{2})\.(\d{2})\.(\d{4})$/.exec(value.trim()) : /^(\d{2})\/(\d{2})\/(\d{4})$/.exec(value.trim());
|
|
16
17
|
if (!parseResult || parseResult.length < 4) return;
|
|
17
|
-
const years = parseInt(parseResult[3], 10);
|
|
18
|
-
const months = parseInt(parseResult['ru' === locale ? 2 : 1], 10);
|
|
19
|
-
const days = parseInt(parseResult['ru' === locale ? 1 : 2], 10);
|
|
18
|
+
const years = parseInt(null != (_parseResult_ = parseResult[3]) ? _parseResult_ : '', 10);
|
|
19
|
+
const months = parseInt(null != (_parseResult_1 = parseResult['ru' === locale ? 2 : 1]) ? _parseResult_1 : '', 10);
|
|
20
|
+
const days = parseInt(null != (_parseResult_2 = parseResult['ru' === locale ? 1 : 2]) ? _parseResult_2 : '', 10);
|
|
20
21
|
if (months > 12 || days > 31) return;
|
|
21
22
|
return new Date(years, months - 1, days);
|
|
22
23
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PickersUtilsProvider/defaultDateFormatUtils.js","sources":["../../src/PickersUtilsProvider/defaultDateFormatUtils.ts"],"sourcesContent":["import type { DateFormatUtils } from '../types.js';\nimport { dateNumeric } from '../utils/dateFormatter.js';\nimport { padNumber } from './utils.js';\n\nconst formatInputDate = (value: Date | number, locale: string = 'ru') => {\n const date = typeof value === 'number' ? new Date(value) : value;\n const days = padNumber(date.getDate());\n const months = padNumber(date.getMonth() + 1);\n const years = date.getFullYear();\n return locale === 'ru' ? `${days}.${months}.${years}` : `${months}/${days}/${years}`;\n};\n\nconst formatInputValue = (value: string, locale: string = 'ru') => {\n const delimiter = locale === 'ru' ? '.' : '/';\n return value\n .replace(/[^\\d]/g, '')\n .split('')\n .reduce(\n (r, v, index) => (index === 2 || index === 4 ? `${r}${delimiter}${v}` : `${r}${v}`),\n '',\n )\n .slice(0, 10);\n};\n\nconst parseInputDate = (value: string, locale: string = 'ru') => {\n const parseResult = locale === 'ru'\n ? /^(\\d{2})\\.(\\d{2})\\.(\\d{4})$/.exec(value.trim())\n : /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/.exec(value.trim());\n if (!parseResult || parseResult.length < 4) {\n return undefined;\n }\n const years = parseInt(parseResult[3], 10);\n const months = parseInt(parseResult[locale === 'ru' ? 2 : 1], 10);\n const days = parseInt(parseResult[locale === 'ru' ? 1 : 2], 10);\n if (months > 12 || days > 31) {\n return undefined;\n }\n return new Date(years, months - 1, days);\n};\n\nconst defaultDateFormatUtils: DateFormatUtils = {\n formatDate: dateNumeric,\n formatInputDate,\n formatInputValue,\n parseInputDate,\n charsFilter: /\\d/g,\n maskLength: 10,\n};\n\nexport default defaultDateFormatUtils;\n"],"names":["formatInputDate","value","locale","date","Date","days","padNumber","months","years","formatInputValue","delimiter","r","v","index","parseInputDate","parseResult","parseInt","defaultDateFormatUtils","dateNumeric"],"mappings":";;AAIA,MAAMA,kBAAkB,CAACC,OAAsBC,SAAiB,IAAI;IAClE,MAAMC,OAAO,AAAiB,YAAjB,OAAOF,QAAqB,IAAIG,KAAKH,SAASA;IAC3D,MAAMI,OAAOC,UAAUH,KAAK,OAAO;IACnC,MAAMI,SAASD,UAAUH,KAAK,QAAQ,KAAK;IAC3C,MAAMK,QAAQL,KAAK,WAAW;IAC9B,OAAOD,AAAW,SAAXA,SAAkB,GAAGG,KAAK,CAAC,EAAEE,OAAO,CAAC,EAAEC,OAAO,GAAG,GAAGD,OAAO,CAAC,EAAEF,KAAK,CAAC,EAAEG,OAAO;AACtF;AAEA,MAAMC,mBAAmB,CAACR,OAAeC,SAAiB,IAAI;IAC5D,MAAMQ,YAAYR,AAAW,SAAXA,SAAkB,MAAM;IAC1C,OAAOD,MACJ,OAAO,CAAC,UAAU,IAClB,KAAK,CAAC,IACN,MAAM,CACL,CAACU,GAAGC,GAAGC,QAAWA,AAAU,MAAVA,SAAeA,AAAU,MAAVA,QAAc,GAAGF,IAAID,YAAYE,GAAG,GAAG,GAAGD,IAAIC,GAAG,EAClF,IAED,KAAK,CAAC,GAAG;AACd;AAEA,MAAME,iBAAiB,CAACb,OAAeC,SAAiB,IAAI;
|
|
1
|
+
{"version":3,"file":"PickersUtilsProvider/defaultDateFormatUtils.js","sources":["../../src/PickersUtilsProvider/defaultDateFormatUtils.ts"],"sourcesContent":["import type { DateFormatUtils } from '../types.js';\nimport { dateNumeric } from '../utils/dateFormatter.js';\nimport { padNumber } from './utils.js';\n\nconst formatInputDate = (value: Date | number, locale: string = 'ru') => {\n const date = typeof value === 'number' ? new Date(value) : value;\n const days = padNumber(date.getDate());\n const months = padNumber(date.getMonth() + 1);\n const years = date.getFullYear();\n return locale === 'ru' ? `${days}.${months}.${years}` : `${months}/${days}/${years}`;\n};\n\nconst formatInputValue = (value: string, locale: string = 'ru') => {\n const delimiter = locale === 'ru' ? '.' : '/';\n return value\n .replace(/[^\\d]/g, '')\n .split('')\n .reduce(\n (r, v, index) => (index === 2 || index === 4 ? `${r}${delimiter}${v}` : `${r}${v}`),\n '',\n )\n .slice(0, 10);\n};\n\nconst parseInputDate = (value: string, locale: string = 'ru') => {\n const parseResult = locale === 'ru'\n ? /^(\\d{2})\\.(\\d{2})\\.(\\d{4})$/.exec(value.trim())\n : /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/.exec(value.trim());\n if (!parseResult || parseResult.length < 4) {\n return undefined;\n }\n const years = parseInt(parseResult[3] ?? '', 10);\n const months = parseInt(parseResult[locale === 'ru' ? 2 : 1] ?? '', 10);\n const days = parseInt(parseResult[locale === 'ru' ? 1 : 2] ?? '', 10);\n if (months > 12 || days > 31) {\n return undefined;\n }\n return new Date(years, months - 1, days);\n};\n\nconst defaultDateFormatUtils: DateFormatUtils = {\n formatDate: dateNumeric,\n formatInputDate,\n formatInputValue,\n parseInputDate,\n charsFilter: /\\d/g,\n maskLength: 10,\n};\n\nexport default defaultDateFormatUtils;\n"],"names":["formatInputDate","value","locale","date","Date","days","padNumber","months","years","formatInputValue","delimiter","r","v","index","parseInputDate","_parseResult_","_parseResult_1","_parseResult_2","parseResult","parseInt","defaultDateFormatUtils","dateNumeric"],"mappings":";;AAIA,MAAMA,kBAAkB,CAACC,OAAsBC,SAAiB,IAAI;IAClE,MAAMC,OAAO,AAAiB,YAAjB,OAAOF,QAAqB,IAAIG,KAAKH,SAASA;IAC3D,MAAMI,OAAOC,UAAUH,KAAK,OAAO;IACnC,MAAMI,SAASD,UAAUH,KAAK,QAAQ,KAAK;IAC3C,MAAMK,QAAQL,KAAK,WAAW;IAC9B,OAAOD,AAAW,SAAXA,SAAkB,GAAGG,KAAK,CAAC,EAAEE,OAAO,CAAC,EAAEC,OAAO,GAAG,GAAGD,OAAO,CAAC,EAAEF,KAAK,CAAC,EAAEG,OAAO;AACtF;AAEA,MAAMC,mBAAmB,CAACR,OAAeC,SAAiB,IAAI;IAC5D,MAAMQ,YAAYR,AAAW,SAAXA,SAAkB,MAAM;IAC1C,OAAOD,MACJ,OAAO,CAAC,UAAU,IAClB,KAAK,CAAC,IACN,MAAM,CACL,CAACU,GAAGC,GAAGC,QAAWA,AAAU,MAAVA,SAAeA,AAAU,MAAVA,QAAc,GAAGF,IAAID,YAAYE,GAAG,GAAG,GAAGD,IAAIC,GAAG,EAClF,IAED,KAAK,CAAC,GAAG;AACd;AAEA,MAAME,iBAAiB,CAACb,OAAeC,SAAiB,IAAI;QAOnCa,eACCC,gBACFC;IARtB,MAAMC,cAAchB,AAAW,SAAXA,SAChB,8BAA8B,IAAI,CAACD,MAAM,IAAI,MAC7C,8BAA8B,IAAI,CAACA,MAAM,IAAI;IACjD,IAAI,CAACiB,eAAeA,YAAY,MAAM,GAAG,GACvC;IAEF,MAAMV,QAAQW,SAAS,QAAAJ,CAAAA,gBAAAA,WAAW,CAAC,EAAE,AAAD,IAAbA,gBAAkB,IAAI;IAC7C,MAAMR,SAASY,SAAS,QAAAH,CAAAA,iBAAAA,WAAW,CAACd,AAAW,SAAXA,SAAkB,IAAI,EAAE,AAAD,IAAnCc,iBAAwC,IAAI;IACpE,MAAMX,OAAOc,SAAS,QAAAF,CAAAA,iBAAAA,WAAW,CAACf,AAAW,SAAXA,SAAkB,IAAI,EAAE,AAAD,IAAnCe,iBAAwC,IAAI;IAClE,IAAIV,SAAS,MAAMF,OAAO,IACxB;IAEF,OAAO,IAAID,KAAKI,OAAOD,SAAS,GAAGF;AACrC;AAEA,MAAMe,yBAA0C;IAC9C,YAAYC;IACZrB,iBAAAA;IACAS,kBAAAA;IACAK,gBAAAA;IACA,aAAa;IACb,YAAY;AACd;AAEA,oDAAeM"}
|
|
@@ -24,15 +24,16 @@ const formatInputValue = (value, { withSeconds, withMilliseconds })=>{
|
|
|
24
24
|
return value.replace(/[^\d]/g, '').split('').reduce((r, v, i)=>2 === i || 4 === i || 6 === i ? `${r}${delimiter}${v}` : `${r}${v}`, '').slice(0, withMilliseconds ? 12 : withSeconds ? 8 : 5);
|
|
25
25
|
};
|
|
26
26
|
const parseInputTime = (value, { withSeconds, withMilliseconds, eventType })=>{
|
|
27
|
+
var _parseResult_, _parseResult_1, _parseResult_2, _parseResult_3;
|
|
27
28
|
const secPart = withSeconds || withMilliseconds ? 'change' === eventType ? String.raw`:(\d{2})` : String.raw`:?(\d{2})?` : '';
|
|
28
29
|
const mlsecPart = withMilliseconds ? 'change' === eventType ? String.raw`:(\d{3})` : String.raw`:?(\d{3})?` : '';
|
|
29
30
|
const parseResult = new RegExp(String.raw`^(\d{2}):(\d{2})${secPart}${mlsecPart}$`).exec(value.trim());
|
|
30
31
|
const partsCount = withMilliseconds ? 4 : withSeconds ? 3 : 2;
|
|
31
32
|
if (!parseResult || parseResult.length <= partsCount) return;
|
|
32
|
-
const hours = parseInt(parseResult[1], 10);
|
|
33
|
-
const minutes = parseInt(parseResult[2], 10);
|
|
34
|
-
const seconds = parseInt(parseResult[3], 10) || 0;
|
|
35
|
-
const milliseconds = parseInt(parseResult[4], 10) || 0;
|
|
33
|
+
const hours = parseInt(null != (_parseResult_ = parseResult[1]) ? _parseResult_ : '', 10);
|
|
34
|
+
const minutes = parseInt(null != (_parseResult_1 = parseResult[2]) ? _parseResult_1 : '', 10);
|
|
35
|
+
const seconds = parseInt(null != (_parseResult_2 = parseResult[3]) ? _parseResult_2 : '', 10) || 0;
|
|
36
|
+
const milliseconds = parseInt(null != (_parseResult_3 = parseResult[4]) ? _parseResult_3 : '', 10) || 0;
|
|
36
37
|
const timeValue = hours * HOUR_IN_MILLISECONDS + minutes * MINUTE_IN_MILLISECONDS + seconds * SECOND_IN_MILLISECONDS + milliseconds;
|
|
37
38
|
if (minutes >= 60 || seconds >= 60 || timeValue >= 24 * HOUR_IN_MILLISECONDS) return;
|
|
38
39
|
return timeValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PickersUtilsProvider/defaultTimeFormatUtils.js","sources":["../../src/PickersUtilsProvider/defaultTimeFormatUtils.ts"],"sourcesContent":["import type { TimeFormatUtils, TimeFormatOptions } from '../types.js';\nimport { padNumber } from './utils.js';\n\nconst SECOND_IN_MILLISECONDS = 1000;\nconst MINUTE_IN_MILLISECONDS = 60 * SECOND_IN_MILLISECONDS;\nconst HOUR_IN_MILLISECONDS = 60 * MINUTE_IN_MILLISECONDS;\n\nconst formatTime = (value: number, { withSeconds, withMilliseconds }: TimeFormatOptions) => {\n const dateTime = new Date(value);\n const hours = padNumber(dateTime.getUTCHours());\n const minutes = padNumber(dateTime.getUTCMinutes());\n const seconds = (withSeconds || withMilliseconds) ? padNumber(dateTime.getUTCSeconds()) : '';\n const mlsec = withMilliseconds ? padNumber(dateTime.getUTCMilliseconds(), 3) : '';\n return `${hours}:${minutes}${seconds ? ':' : ''}${seconds}${mlsec ? ':' : ''}${mlsec}`;\n};\n\nconst formatTimeLocal = (\n value: number | Date,\n { withSeconds, withMilliseconds }: TimeFormatOptions,\n) => {\n const dateTime = new Date(value);\n const hours = padNumber(dateTime.getHours());\n const minutes = padNumber(dateTime.getMinutes());\n const seconds = (withSeconds || withMilliseconds) ? padNumber(dateTime.getSeconds()) : '';\n const mlsec = withMilliseconds ? padNumber(dateTime.getMilliseconds(), 3) : '';\n return `${hours}:${minutes}${seconds ? ':' : ''}${seconds}${mlsec ? ':' : ''}${mlsec}`;\n};\n\nconst maskLength = (\n { withSeconds, withMilliseconds }: TimeFormatOptions,\n) => (withMilliseconds ? 12 : withSeconds ? 8 : 5);\n\nconst formatInputValue = (value: string, { withSeconds, withMilliseconds }: TimeFormatOptions) => {\n const delimiter = ':';\n return value\n .replace(/[^\\d]/g, '')\n .split('')\n .reduce((r, v, i) => ((i === 2 || i === 4 || i === 6) ? `${r}${delimiter}${v}` : `${r}${v}`), '')\n .slice(0, withMilliseconds ? 12 : (withSeconds ? 8 : 5));\n};\n\nconst parseInputTime = (\n value: string,\n { withSeconds, withMilliseconds, eventType }: TimeFormatOptions,\n) => {\n const secPart = (withSeconds || withMilliseconds)\n ? (eventType === 'change'\n ? String.raw`:(\\d{2})`\n : String.raw`:?(\\d{2})?`)\n : '';\n const mlsecPart = withMilliseconds\n ? (eventType === 'change'\n ? String.raw`:(\\d{3})`\n : String.raw`:?(\\d{3})?`)\n : '';\n const parseResult = new RegExp(String.raw`^(\\d{2}):(\\d{2})${secPart}${mlsecPart}$`).exec(value.trim());\n const partsCount = withMilliseconds ? 4 : (withSeconds ? 3 : 2);\n if (!parseResult || parseResult.length <= partsCount) {\n return undefined;\n }\n const hours = parseInt(parseResult[1], 10);\n const minutes = parseInt(parseResult[2], 10);\n const seconds = parseInt(parseResult[3], 10) || 0;\n const milliseconds = parseInt(parseResult[4], 10) || 0;\n const timeValue =\n hours * HOUR_IN_MILLISECONDS +\n minutes * MINUTE_IN_MILLISECONDS +\n seconds * SECOND_IN_MILLISECONDS +\n milliseconds;\n if (minutes >= 60 || seconds >= 60 || timeValue >= 24 * HOUR_IN_MILLISECONDS) {\n return undefined;\n }\n return timeValue;\n};\n\nconst defaultTimeFormatUtils: TimeFormatUtils = {\n formatTime,\n formatTimeLocal,\n formatInputTime: formatTime,\n formatInputValue,\n parseInputTime,\n charsFilter: /\\d/g,\n maskLength,\n};\n\nexport default defaultTimeFormatUtils;\n"],"names":["SECOND_IN_MILLISECONDS","MINUTE_IN_MILLISECONDS","HOUR_IN_MILLISECONDS","formatTime","value","withSeconds","withMilliseconds","dateTime","Date","hours","padNumber","minutes","seconds","mlsec","formatTimeLocal","maskLength","formatInputValue","delimiter","r","v","i","parseInputTime","eventType","secPart","String","mlsecPart","parseResult","RegExp","partsCount","parseInt","milliseconds","timeValue","defaultTimeFormatUtils"],"mappings":";AAGA,MAAMA,yBAAyB;AAC/B,MAAMC,yBAAyB,KAAKD;AACpC,MAAME,uBAAuB,KAAKD;AAElC,MAAME,aAAa,CAACC,OAAe,EAAEC,WAAW,EAAEC,gBAAgB,EAAqB;IACrF,MAAMC,WAAW,IAAIC,KAAKJ;IAC1B,MAAMK,QAAQC,UAAUH,SAAS,WAAW;IAC5C,MAAMI,UAAUD,UAAUH,SAAS,aAAa;IAChD,MAAMK,UAAWP,eAAeC,mBAAoBI,UAAUH,SAAS,aAAa,MAAM;IAC1F,MAAMM,QAAQP,mBAAmBI,UAAUH,SAAS,kBAAkB,IAAI,KAAK;IAC/E,OAAO,GAAGE,MAAM,CAAC,EAAEE,UAAUC,UAAU,MAAM,KAAKA,UAAUC,QAAQ,MAAM,KAAKA,OAAO;AACxF;AAEA,MAAMC,kBAAkB,CACtBV,OACA,EAAEC,WAAW,EAAEC,gBAAgB,EAAqB;IAEpD,MAAMC,WAAW,IAAIC,KAAKJ;IAC1B,MAAMK,QAAQC,UAAUH,SAAS,QAAQ;IACzC,MAAMI,UAAUD,UAAUH,SAAS,UAAU;IAC7C,MAAMK,UAAWP,eAAeC,mBAAoBI,UAAUH,SAAS,UAAU,MAAM;IACvF,MAAMM,QAAQP,mBAAmBI,UAAUH,SAAS,eAAe,IAAI,KAAK;IAC5E,OAAO,GAAGE,MAAM,CAAC,EAAEE,UAAUC,UAAU,MAAM,KAAKA,UAAUC,QAAQ,MAAM,KAAKA,OAAO;AACxF;AAEA,MAAME,aAAa,CACjB,EAAEV,WAAW,EAAEC,gBAAgB,EAAqB,GAChDA,mBAAmB,KAAKD,cAAc,IAAI;AAEhD,MAAMW,mBAAmB,CAACZ,OAAe,EAAEC,WAAW,EAAEC,gBAAgB,EAAqB;IAC3F,MAAMW,YAAY;IAClB,OAAOb,MACJ,OAAO,CAAC,UAAU,IAClB,KAAK,CAAC,IACN,MAAM,CAAC,CAACc,GAAGC,GAAGC,IAAQA,AAAM,MAANA,KAAWA,AAAM,MAANA,KAAWA,AAAM,MAANA,IAAW,GAAGF,IAAID,YAAYE,GAAG,GAAG,GAAGD,IAAIC,GAAG,EAAG,IAC7F,KAAK,CAAC,GAAGb,mBAAmB,KAAMD,cAAc,IAAI;AACzD;AAEA,MAAMgB,iBAAiB,CACrBjB,OACA,EAAEC,WAAW,EAAEC,gBAAgB,EAAEgB,SAAS,EAAqB;
|
|
1
|
+
{"version":3,"file":"PickersUtilsProvider/defaultTimeFormatUtils.js","sources":["../../src/PickersUtilsProvider/defaultTimeFormatUtils.ts"],"sourcesContent":["import type { TimeFormatUtils, TimeFormatOptions } from '../types.js';\nimport { padNumber } from './utils.js';\n\nconst SECOND_IN_MILLISECONDS = 1000;\nconst MINUTE_IN_MILLISECONDS = 60 * SECOND_IN_MILLISECONDS;\nconst HOUR_IN_MILLISECONDS = 60 * MINUTE_IN_MILLISECONDS;\n\nconst formatTime = (value: number, { withSeconds, withMilliseconds }: TimeFormatOptions) => {\n const dateTime = new Date(value);\n const hours = padNumber(dateTime.getUTCHours());\n const minutes = padNumber(dateTime.getUTCMinutes());\n const seconds = (withSeconds || withMilliseconds) ? padNumber(dateTime.getUTCSeconds()) : '';\n const mlsec = withMilliseconds ? padNumber(dateTime.getUTCMilliseconds(), 3) : '';\n return `${hours}:${minutes}${seconds ? ':' : ''}${seconds}${mlsec ? ':' : ''}${mlsec}`;\n};\n\nconst formatTimeLocal = (\n value: number | Date,\n { withSeconds, withMilliseconds }: TimeFormatOptions,\n) => {\n const dateTime = new Date(value);\n const hours = padNumber(dateTime.getHours());\n const minutes = padNumber(dateTime.getMinutes());\n const seconds = (withSeconds || withMilliseconds) ? padNumber(dateTime.getSeconds()) : '';\n const mlsec = withMilliseconds ? padNumber(dateTime.getMilliseconds(), 3) : '';\n return `${hours}:${minutes}${seconds ? ':' : ''}${seconds}${mlsec ? ':' : ''}${mlsec}`;\n};\n\nconst maskLength = (\n { withSeconds, withMilliseconds }: TimeFormatOptions,\n) => (withMilliseconds ? 12 : withSeconds ? 8 : 5);\n\nconst formatInputValue = (value: string, { withSeconds, withMilliseconds }: TimeFormatOptions) => {\n const delimiter = ':';\n return value\n .replace(/[^\\d]/g, '')\n .split('')\n .reduce((r, v, i) => ((i === 2 || i === 4 || i === 6) ? `${r}${delimiter}${v}` : `${r}${v}`), '')\n .slice(0, withMilliseconds ? 12 : (withSeconds ? 8 : 5));\n};\n\nconst parseInputTime = (\n value: string,\n { withSeconds, withMilliseconds, eventType }: TimeFormatOptions,\n) => {\n const secPart = (withSeconds || withMilliseconds)\n ? (eventType === 'change'\n ? String.raw`:(\\d{2})`\n : String.raw`:?(\\d{2})?`)\n : '';\n const mlsecPart = withMilliseconds\n ? (eventType === 'change'\n ? String.raw`:(\\d{3})`\n : String.raw`:?(\\d{3})?`)\n : '';\n const parseResult = new RegExp(String.raw`^(\\d{2}):(\\d{2})${secPart}${mlsecPart}$`).exec(value.trim());\n const partsCount = withMilliseconds ? 4 : (withSeconds ? 3 : 2);\n if (!parseResult || parseResult.length <= partsCount) {\n return undefined;\n }\n const hours = parseInt(parseResult[1] ?? '', 10);\n const minutes = parseInt(parseResult[2] ?? '', 10);\n const seconds = parseInt(parseResult[3] ?? '', 10) || 0;\n const milliseconds = parseInt(parseResult[4] ?? '', 10) || 0;\n const timeValue =\n hours * HOUR_IN_MILLISECONDS +\n minutes * MINUTE_IN_MILLISECONDS +\n seconds * SECOND_IN_MILLISECONDS +\n milliseconds;\n if (minutes >= 60 || seconds >= 60 || timeValue >= 24 * HOUR_IN_MILLISECONDS) {\n return undefined;\n }\n return timeValue;\n};\n\nconst defaultTimeFormatUtils: TimeFormatUtils = {\n formatTime,\n formatTimeLocal,\n formatInputTime: formatTime,\n formatInputValue,\n parseInputTime,\n charsFilter: /\\d/g,\n maskLength,\n};\n\nexport default defaultTimeFormatUtils;\n"],"names":["SECOND_IN_MILLISECONDS","MINUTE_IN_MILLISECONDS","HOUR_IN_MILLISECONDS","formatTime","value","withSeconds","withMilliseconds","dateTime","Date","hours","padNumber","minutes","seconds","mlsec","formatTimeLocal","maskLength","formatInputValue","delimiter","r","v","i","parseInputTime","eventType","_parseResult_","_parseResult_1","_parseResult_2","_parseResult_3","secPart","String","mlsecPart","parseResult","RegExp","partsCount","parseInt","milliseconds","timeValue","defaultTimeFormatUtils"],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { ProductCardLayoutId, ProductCardView } from "../types.js";
|
|
2
|
+
var _IPO_BADGE_SIZE_BY_VIEW_desktop;
|
|
2
3
|
const IPO_BADGE_SIZE_BY_VIEW = {
|
|
3
4
|
desktop: 's',
|
|
4
5
|
mobile: 's'
|
|
5
6
|
};
|
|
6
|
-
const IPO_BADGE_TAG_SIZE = IPO_BADGE_SIZE_BY_VIEW.desktop;
|
|
7
|
+
const IPO_BADGE_TAG_SIZE = null != (_IPO_BADGE_SIZE_BY_VIEW_desktop = IPO_BADGE_SIZE_BY_VIEW.desktop) ? _IPO_BADGE_SIZE_BY_VIEW_desktop : 's';
|
|
7
8
|
const getIpoBadgeSizeByView = (view)=>{
|
|
8
9
|
var _IPO_BADGE_SIZE_BY_VIEW_view;
|
|
9
10
|
return null != (_IPO_BADGE_SIZE_BY_VIEW_view = IPO_BADGE_SIZE_BY_VIEW[view]) ? _IPO_BADGE_SIZE_BY_VIEW_view : IPO_BADGE_TAG_SIZE;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductCard/badges/utils.js","sources":["../../../src/ProductCard/badges/utils.ts"],"sourcesContent":["import { css } from '@linaria/core';\nimport { tokens } from '@finam/web-ui-kit-core/theme/contract';\nimport { ProductCardLayoutId, ProductCardView } from '../types.js';\nimport type { Size } from '../../Tag/types.js';\n\nconst IPO_BADGE_SIZE_BY_VIEW: Record<string, Size> = {\n desktop: 's',\n mobile: 's',\n};\n\nconst IPO_BADGE_TAG_SIZE: Size = IPO_BADGE_SIZE_BY_VIEW.desktop;\n\nexport const getIpoBadgeSizeByView = (view: string): Size => IPO_BADGE_SIZE_BY_VIEW[view] ?? IPO_BADGE_TAG_SIZE;\n\nconst HEADER_BADGE_SIZE: Record<\n ProductCardLayoutId,\n Record<ProductCardView, Size>\n> = {\n [ProductCardLayoutId.COMMON]: {\n [ProductCardView.DESKTOP]: 's',\n [ProductCardView.MOBILE]: 'xs',\n },\n [ProductCardLayoutId.IIP]: {\n [ProductCardView.DESKTOP]: 's',\n [ProductCardView.MOBILE]: 'xs',\n },\n [ProductCardLayoutId.ZHEK]: {\n [ProductCardView.DESKTOP]: 's',\n [ProductCardView.MOBILE]: 'xs',\n },\n [ProductCardLayoutId.IPO]: {\n [ProductCardView.DESKTOP]: 'xs',\n [ProductCardView.MOBILE]: 'xs',\n },\n};\n\n/** Размер `Tag` для бейджей в шапке ProductCard (слоты, risk, placeholder). */\nexport const getHeaderBadgeSize = (\n layoutId: ProductCardLayoutId,\n view: ProductCardView,\n): Size => HEADER_BADGE_SIZE[layoutId][view];\n\nexport const accentBadge = css`\n border-radius: ${tokens.radius.badgeS};\n background: linear-gradient(\n 303deg,\n #feda3b -16.34%,\n #ef5541 27.28%,\n #801fdb 68.81%,\n #7e2a89 98.5%\n );\n color: ${tokens.colors.text.ondark.default.default};\n padding: ${tokens.spacing.micro} ${tokens.spacing['2xs']};\n`;\n\nexport const centeredTag = css`\n align-items: center;\n justify-content: center;\n`;\n\nexport const centeredIcon = css`\n display: block;\n`;\n"],"names":["IPO_BADGE_SIZE_BY_VIEW","IPO_BADGE_TAG_SIZE","getIpoBadgeSizeByView","view","_IPO_BADGE_SIZE_BY_VIEW_view","HEADER_BADGE_SIZE","ProductCardLayoutId","ProductCardView","getHeaderBadgeSize","layoutId","accentBadge","css","tokens","centeredTag","centeredIcon"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ProductCard/badges/utils.js","sources":["../../../src/ProductCard/badges/utils.ts"],"sourcesContent":["import { css } from '@linaria/core';\nimport { tokens } from '@finam/web-ui-kit-core/theme/contract';\nimport { ProductCardLayoutId, ProductCardView } from '../types.js';\nimport type { Size } from '../../Tag/types.js';\n\nconst IPO_BADGE_SIZE_BY_VIEW: Record<string, Size> = {\n desktop: 's',\n mobile: 's',\n};\n\nconst IPO_BADGE_TAG_SIZE: Size = IPO_BADGE_SIZE_BY_VIEW.desktop ?? 's';\n\nexport const getIpoBadgeSizeByView = (view: string): Size => IPO_BADGE_SIZE_BY_VIEW[view] ?? IPO_BADGE_TAG_SIZE;\n\nconst HEADER_BADGE_SIZE: Record<\n ProductCardLayoutId,\n Record<ProductCardView, Size>\n> = {\n [ProductCardLayoutId.COMMON]: {\n [ProductCardView.DESKTOP]: 's',\n [ProductCardView.MOBILE]: 'xs',\n },\n [ProductCardLayoutId.IIP]: {\n [ProductCardView.DESKTOP]: 's',\n [ProductCardView.MOBILE]: 'xs',\n },\n [ProductCardLayoutId.ZHEK]: {\n [ProductCardView.DESKTOP]: 's',\n [ProductCardView.MOBILE]: 'xs',\n },\n [ProductCardLayoutId.IPO]: {\n [ProductCardView.DESKTOP]: 'xs',\n [ProductCardView.MOBILE]: 'xs',\n },\n};\n\n/** Размер `Tag` для бейджей в шапке ProductCard (слоты, risk, placeholder). */\nexport const getHeaderBadgeSize = (\n layoutId: ProductCardLayoutId,\n view: ProductCardView,\n): Size => HEADER_BADGE_SIZE[layoutId][view];\n\nexport const accentBadge = css`\n border-radius: ${tokens.radius.badgeS};\n background: linear-gradient(\n 303deg,\n #feda3b -16.34%,\n #ef5541 27.28%,\n #801fdb 68.81%,\n #7e2a89 98.5%\n );\n color: ${tokens.colors.text.ondark.default.default};\n padding: ${tokens.spacing.micro} ${tokens.spacing['2xs']};\n`;\n\nexport const centeredTag = css`\n align-items: center;\n justify-content: center;\n`;\n\nexport const centeredIcon = css`\n display: block;\n`;\n"],"names":["_IPO_BADGE_SIZE_BY_VIEW_desktop","IPO_BADGE_SIZE_BY_VIEW","IPO_BADGE_TAG_SIZE","getIpoBadgeSizeByView","view","_IPO_BADGE_SIZE_BY_VIEW_view","HEADER_BADGE_SIZE","ProductCardLayoutId","ProductCardView","getHeaderBadgeSize","layoutId","accentBadge","css","tokens","centeredTag","centeredIcon"],"mappings":";;;IAUiCA;AALjC,MAAMC,yBAA+C;IACnD,SAAS;IACT,QAAQ;AACV;AAEA,MAAMC,qBAAkBA,QAASF,CAAAA,kCAAAA,uBAAuB,OAAO,AAAD,IAA7BA,kCAAkC;AAE5D,MAAMG,wBAAwB,CAACC;QAAuBC;mBAAAA,CAAAA,+BAAAA,sBAAsB,CAACD,KAAK,AAAD,IAA3BC,+BAAgCH;;AAE7F,MAAMI,oBAGF;IACF,CAACC,oBAAoB,MAAM,CAAC,EAAE;QAC5B,CAACC,gBAAgB,OAAO,CAAC,EAAE;QAC3B,CAACA,gBAAgB,MAAM,CAAC,EAAE;IAC5B;IACA,CAACD,oBAAoB,GAAG,CAAC,EAAE;QACzB,CAACC,gBAAgB,OAAO,CAAC,EAAE;QAC3B,CAACA,gBAAgB,MAAM,CAAC,EAAE;IAC5B;IACA,CAACD,oBAAoB,IAAI,CAAC,EAAE;QAC1B,CAACC,gBAAgB,OAAO,CAAC,EAAE;QAC3B,CAACA,gBAAgB,MAAM,CAAC,EAAE;IAC5B;IACA,CAACD,oBAAoB,GAAG,CAAC,EAAE;QACzB,CAACC,gBAAgB,OAAO,CAAC,EAAE;QAC3B,CAACA,gBAAgB,MAAM,CAAC,EAAE;IAC5B;AACF;AAGO,MAAMC,qBAAqB,CAChCC,UACAN,OACSE,iBAAiB,CAACI,SAAS,CAACN,KAAK;AAErC,MAAMO,cAAcC,GAAG,CAAC;mBACZ,EAAEC,OAAO,MAAM,CAAC,MAAM,CAAC;;;;;;;;WAQ/B,EAAEA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAzBA,UAAAA,CAAAA,UAAyC,CAAC;aAC1C,EAAEA,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAEA,OAAO,OAAO,CAAC,MAAM,CAAC;AAC7D,CAAC;AAEM,MAAMC,cAAcF,GAAG,CAAC;;;AAG/B,CAAC;AAEM,MAAMG,eAAeH,GAAG,CAAC;;AAEhC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../../../../src/ProductCard/layouts/common/Content.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAcvD,MAAM,WAAW,6BAA6B;IAC5C,gCAAgC;IAChC,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC5B;
|
|
1
|
+
{"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../../../../src/ProductCard/layouts/common/Content.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAcvD,MAAM,WAAW,6BAA6B;IAC5C,gCAAgC;IAChC,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAmDD,QAAA,MAAM,gCAAgC,kDA/CO,6BAA6B,6CA+CH,CAAC;AAGxE,eAAe,gCAAgC,CAAC"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { memo,
|
|
2
|
+
import { memo, useState } from "react";
|
|
3
3
|
import ProductCardContent from "../../ProductCardContent/index.js";
|
|
4
4
|
import { useProductCardContext } from "../../ProductCardContext.js";
|
|
5
5
|
import { PRODUCT_CARD_CHART_VIEWBOX_HEIGHT, PRODUCT_CARD_CHART_VIEWBOX_WIDTH, buildChartPolyline, getProductCardChartColors, getProductCardChartTrend, normalizeChartPoints } from "./chartUtils.js";
|
|
6
6
|
import { ChartSvg, ChartWrap } from "./Content.styles.js";
|
|
7
|
+
let chartGradientId = 0;
|
|
7
8
|
const ProductCardCommonContent = ({ chart })=>{
|
|
8
9
|
const { view } = useProductCardContext();
|
|
9
|
-
const gradientId =
|
|
10
|
+
const [gradientId] = useState(()=>{
|
|
11
|
+
chartGradientId += 1;
|
|
12
|
+
return `product-card-chart-gradient-${chartGradientId}`;
|
|
13
|
+
});
|
|
10
14
|
const points = normalizeChartPoints(chart);
|
|
11
15
|
const hasChart = points.length >= 2;
|
|
12
16
|
if (!hasChart) return /*#__PURE__*/ jsx(ProductCardContent, {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductCard/layouts/common/Content.js","sources":["../../../../src/ProductCard/layouts/common/Content.tsx"],"sourcesContent":["import { memo,
|
|
1
|
+
{"version":3,"file":"ProductCard/layouts/common/Content.js","sources":["../../../../src/ProductCard/layouts/common/Content.tsx"],"sourcesContent":["import { memo, useState } from 'react';\nimport ProductCardContent from '../../ProductCardContent/index.js';\nimport { useProductCardContext } from '../../ProductCardContext.js';\nimport type { ProductCardPoint } from '../../types.js';\nimport {\n PRODUCT_CARD_CHART_VIEWBOX_HEIGHT,\n PRODUCT_CARD_CHART_VIEWBOX_WIDTH,\n buildChartPolyline,\n getProductCardChartColors,\n getProductCardChartTrend,\n normalizeChartPoints,\n} from './chartUtils.js';\nimport {\n ChartSvg,\n ChartWrap,\n} from './Content.styles.js';\n\nexport interface ProductCardCommonContentProps {\n /** Точки графика доходности. */\n chart?: ProductCardPoint[];\n}\n\nlet chartGradientId = 0;\n\nconst ProductCardCommonContent = ({ chart }: ProductCardCommonContentProps) => {\n const { view } = useProductCardContext();\n const [gradientId] = useState(() => {\n chartGradientId += 1;\n return `product-card-chart-gradient-${chartGradientId}`;\n });\n const points = normalizeChartPoints(chart);\n const hasChart = points.length >= 2;\n\n if (!hasChart) {\n return <ProductCardContent />;\n }\n\n const trend = getProductCardChartTrend(points);\n const colors = getProductCardChartColors(trend);\n const chartPolyline = buildChartPolyline(points);\n\n return (\n <ProductCardContent>\n <ChartWrap className={view}>\n <ChartSvg\n viewBox={`0 0 ${PRODUCT_CARD_CHART_VIEWBOX_WIDTH} ${PRODUCT_CARD_CHART_VIEWBOX_HEIGHT}`}\n preserveAspectRatio=\"none\"\n >\n <defs>\n <linearGradient id={gradientId} x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor={colors.fillStart} />\n <stop offset=\"100%\" stopColor={colors.fillEnd} />\n </linearGradient>\n </defs>\n <polygon\n points={`${chartPolyline} ${PRODUCT_CARD_CHART_VIEWBOX_WIDTH},${PRODUCT_CARD_CHART_VIEWBOX_HEIGHT} 0,${PRODUCT_CARD_CHART_VIEWBOX_HEIGHT}`}\n fill={`url(#${gradientId})`}\n />\n <polyline\n points={chartPolyline}\n fill=\"none\"\n stroke={colors.stroke}\n strokeWidth=\"0.8\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </ChartSvg>\n </ChartWrap>\n </ProductCardContent>\n );\n};\n\nconst MemoizedProductCardCommonContent = memo(ProductCardCommonContent);\nMemoizedProductCardCommonContent.displayName = 'ProductCardCommonContent';\n\nexport default MemoizedProductCardCommonContent;\n"],"names":["chartGradientId","ProductCardCommonContent","chart","view","useProductCardContext","gradientId","useState","points","normalizeChartPoints","hasChart","ProductCardContent","trend","getProductCardChartTrend","colors","getProductCardChartColors","chartPolyline","buildChartPolyline","ChartWrap","ChartSvg","PRODUCT_CARD_CHART_VIEWBOX_WIDTH","PRODUCT_CARD_CHART_VIEWBOX_HEIGHT","MemoizedProductCardCommonContent","memo"],"mappings":";;;;;;AAsBA,IAAIA,kBAAkB;AAEtB,MAAMC,2BAA2B,CAAC,EAAEC,KAAK,EAAiC;IACxE,MAAM,EAAEC,IAAI,EAAE,GAAGC;IACjB,MAAM,CAACC,WAAW,GAAGC,SAAS;QAC5BN,mBAAmB;QACnB,OAAO,CAAC,4BAA4B,EAAEA,iBAAiB;IACzD;IACA,MAAMO,SAASC,qBAAqBN;IACpC,MAAMO,WAAWF,OAAO,MAAM,IAAI;IAElC,IAAI,CAACE,UACH,OAAO,WAAP,GAAO,IAACC,oBAAkBA,CAAAA;IAG5B,MAAMC,QAAQC,yBAAyBL;IACvC,MAAMM,SAASC,0BAA0BH;IACzC,MAAMI,gBAAgBC,mBAAmBT;IAEzC,OAAO,WAAP,GACE,IAACG,oBAAkBA;kBACjB,kBAACO,WAASA;YAAC,WAAWd;sBACpB,mBAACe,UAAQA;gBACP,SAAS,CAAC,IAAI,EAAEC,iCAAiC,CAAC,EAAEC,mCAAmC;gBACvF,qBAAoB;;kCAEpB,IAAC;kCACC,mBAAC;4BAAe,IAAIf;4BAAY,IAAG;4BAAK,IAAG;4BAAK,IAAG;4BAAK,IAAG;;8CACzD,IAAC;oCAAK,QAAO;oCAAK,WAAWQ,OAAO,SAAS;;8CAC7C,IAAC;oCAAK,QAAO;oCAAO,WAAWA,OAAO,OAAO;;;;;kCAGjD,IAAC;wBACC,QAAQ,GAAGE,cAAc,CAAC,EAAEI,iCAAiC,CAAC,EAAEC,kCAAkC,GAAG,EAAEA,mCAAmC;wBAC1I,MAAM,CAAC,KAAK,EAAEf,WAAW,CAAC,CAAC;;kCAE7B,IAAC;wBACC,QAAQU;wBACR,MAAK;wBACL,QAAQF,OAAO,MAAM;wBACrB,aAAY;wBACZ,cAAa;;;;;;AAMzB;AAEA,MAAMQ,mCAAmC,WAAHA,GAAGC,KAAKrB;AAC9CoB,iCAAiC,WAAW,GAAG;AAE/C,gBAAeA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chartUtils.d.ts","sourceRoot":"","sources":["../../../../src/ProductCard/layouts/common/chartUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAExE,kDAAkD;AAClD,eAAO,MAAM,gCAAgC,MAAM,CAAC;AACpD,kDAAkD;AAClD,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAEpD,wEAAwE;AACxE,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,WAA0C,CAAC;AAEhF,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,EAejD,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,EAG/C,CAAC;AAEJ,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EAG9C,CAAC;AAEJ,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,uBAAuB,CAAC;AAE1E,eAAO,MAAM,oBAAoB,GAAI,QAAQ,gBAAgB,EAAE,uBAK9D,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,gBAAgB,EAAE,KAAG,
|
|
1
|
+
{"version":3,"file":"chartUtils.d.ts","sourceRoot":"","sources":["../../../../src/ProductCard/layouts/common/chartUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAExE,kDAAkD;AAClD,eAAO,MAAM,gCAAgC,MAAM,CAAC;AACpD,kDAAkD;AAClD,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAEpD,wEAAwE;AACxE,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,WAA0C,CAAC;AAEhF,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,EAejD,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,EAG/C,CAAC;AAEJ,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,EAG9C,CAAC;AAEJ,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,uBAAuB,CAAC;AAE1E,eAAO,MAAM,oBAAoB,GAAI,QAAQ,gBAAgB,EAAE,uBAK9D,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,gBAAgB,EAAE,KAAG,qBAgBrE,CAAC;AAEF,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,yBAAyB,GACpC,OAAO,qBAAqB,KAC3B,sBAqBF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,gBAAgB,EAAE,WAE5D,CAAC"}
|
|
@@ -83,6 +83,7 @@ const getProductCardChartTrend = (points)=>{
|
|
|
83
83
|
].sort((a, b)=>a.x - b.x);
|
|
84
84
|
const first = sorted[0];
|
|
85
85
|
const last = sorted[sorted.length - 1];
|
|
86
|
+
if (null == first || null == last) return 'neutral';
|
|
86
87
|
if (last.y > first.y) return 'positive';
|
|
87
88
|
if (last.y < first.y) return 'negative';
|
|
88
89
|
return 'neutral';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductCard/layouts/common/chartUtils.js","sources":["../../../../src/ProductCard/layouts/common/chartUtils.ts"],"sourcesContent":["import { tokens } from '@finam/web-ui-kit-core/theme/contract';\nimport type { ProductCardPoint } from '../../types.js';\n\nexport type ProductCardChartTrend = 'positive' | 'negative' | 'neutral';\n\n/** Ширина SVG viewBox графика common-карточки. */\nexport const PRODUCT_CARD_CHART_VIEWBOX_WIDTH = 100;\n/** Высота SVG viewBox графика common-карточки. */\nexport const PRODUCT_CARD_CHART_VIEWBOX_HEIGHT = 32;\n\n/** Переводит значение Y (больше = выше) в SVG-координату (0 сверху). */\nexport const toChartSvgY = (y: number) => PRODUCT_CARD_CHART_VIEWBOX_HEIGHT - y;\n\nexport const positiveChartPreset: ProductCardPoint[] = [\n { x: 0, y: 10 },\n { x: 6, y: 15 },\n { x: 11, y: 13 },\n { x: 18, y: 18 },\n { x: 26, y: 16 },\n { x: 31, y: 20 },\n { x: 38, y: 22 },\n { x: 48, y: 24 },\n { x: 56, y: 23 },\n { x: 64, y: 27 },\n { x: 70, y: 25 },\n { x: 79, y: 28 },\n { x: 86, y: 24 },\n { x: 100, y: 26 },\n];\n\nexport const negativeChartPreset: ProductCardPoint[] = positiveChartPreset.map(({ x, y }) => ({\n x,\n y: PRODUCT_CARD_CHART_VIEWBOX_HEIGHT - y,\n}));\n\nexport const neutralChartPreset: ProductCardPoint[] = positiveChartPreset.map(({ x }) => ({\n x,\n y: 16,\n}));\n\nexport const productCardChartPresets = {\n positive: positiveChartPreset,\n negative: negativeChartPreset,\n neutral: neutralChartPreset,\n} as const;\n\nexport type ProductCardChartPreset = keyof typeof productCardChartPresets;\n\nexport const normalizeChartPoints = (chart?: ProductCardPoint[]) => {\n if (chart == null || chart.length < 2) {\n return [];\n }\n return chart;\n};\n\nexport const getProductCardChartTrend = (points: ProductCardPoint[]): ProductCardChartTrend => {\n const sorted = [...points].sort((a, b) => a.x - b.x);\n const first = sorted[0];\n const last = sorted[sorted.length - 1];\n\n if (last.y > first.y) {\n return 'positive';\n }\n if (last.y < first.y) {\n return 'negative';\n }\n return 'neutral';\n};\n\ninterface ProductCardChartColors {\n stroke: string;\n fillStart: string;\n fillEnd: string;\n}\n\nexport const getProductCardChartColors = (\n trend: ProductCardChartTrend,\n): ProductCardChartColors => {\n switch (trend) {\n case 'negative':\n return {\n stroke: tokens.colors.data.graph.fall.default,\n fillStart: tokens.colors.opacity.negative['24'],\n fillEnd: tokens.colors.opacity.negative['0'],\n };\n case 'neutral':\n return {\n stroke: tokens.colors.data.graph.neutral.default,\n fillStart: tokens.colors.data.graph.opacity.start,\n fillEnd: tokens.colors.data.graph.opacity.end,\n };\n default:\n return {\n stroke: tokens.colors.data.graph.grow.default,\n fillStart: tokens.colors.opacity.positive['24'],\n fillEnd: tokens.colors.opacity.positive['0'],\n };\n }\n};\n\nexport const buildChartPolyline = (points: ProductCardPoint[]) => (\n points.map(({ x, y }) => `${x},${toChartSvgY(y)}`).join(' ')\n);\n"],"names":["PRODUCT_CARD_CHART_VIEWBOX_WIDTH","PRODUCT_CARD_CHART_VIEWBOX_HEIGHT","toChartSvgY","y","positiveChartPreset","negativeChartPreset","x","neutralChartPreset","productCardChartPresets","normalizeChartPoints","chart","getProductCardChartTrend","points","sorted","a","b","first","last","getProductCardChartColors","trend","tokens","buildChartPolyline"],"mappings":";AAMO,MAAMA,mCAAmC;AAEzC,MAAMC,oCAAoC;AAG1C,MAAMC,cAAc,CAACC,IAAcF,oCAAoCE;AAEvE,MAAMC,sBAA0C;IACrD;QAAE,GAAG;QAAG,GAAG;IAAG;IACd;QAAE,GAAG;QAAG,GAAG;IAAG;IACd;QAAE,GAAG;QAAI,GAAG;IAAG;IACf;QAAE,GAAG;QAAI,GAAG;IAAG;IACf;QAAE,GAAG;QAAI,GAAG;IAAG;IACf;QAAE,GAAG;QAAI,GAAG;IAAG;IACf;QAAE,GAAG;QAAI,GAAG;IAAG;IACf;QAAE,GAAG;QAAI,GAAG;IAAG;IACf;QAAE,GAAG;QAAI,GAAG;IAAG;IACf;QAAE,GAAG;QAAI,GAAG;IAAG;IACf;QAAE,GAAG;QAAI,GAAG;IAAG;IACf;QAAE,GAAG;QAAI,GAAG;IAAG;IACf;QAAE,GAAG;QAAI,GAAG;IAAG;IACf;QAAE,GAAG;QAAK,GAAG;IAAG;CACjB;AAEM,MAAMC,sBAA0CD,oBAAoB,GAAG,CAAC,CAAC,EAAEE,CAAC,EAAEH,CAAC,EAAE,GAAM;QAC5FG;QACA,GAAGL,oCAAoCE;IACzC;AAEO,MAAMI,qBAAyCH,oBAAoB,GAAG,CAAC,CAAC,EAAEE,CAAC,EAAE,GAAM;QACxFA;QACA,GAAG;IACL;AAEO,MAAME,0BAA0B;IACrC,UAAUJ;IACV,UAAUC;IACV,SAASE;AACX;AAIO,MAAME,uBAAuB,CAACC;IACnC,IAAIA,AAAS,QAATA,SAAiBA,MAAM,MAAM,GAAG,GAClC,OAAO,EAAE;IAEX,OAAOA;AACT;AAEO,MAAMC,2BAA2B,CAACC;IACvC,MAAMC,SAAS;WAAID;KAAO,CAAC,IAAI,CAAC,CAACE,GAAGC,IAAMD,EAAE,CAAC,GAAGC,EAAE,CAAC;IACnD,MAAMC,QAAQH,MAAM,CAAC,EAAE;IACvB,MAAMI,OAAOJ,MAAM,CAACA,OAAO,MAAM,GAAG,EAAE;IAEtC,
|
|
1
|
+
{"version":3,"file":"ProductCard/layouts/common/chartUtils.js","sources":["../../../../src/ProductCard/layouts/common/chartUtils.ts"],"sourcesContent":["import { tokens } from '@finam/web-ui-kit-core/theme/contract';\nimport type { ProductCardPoint } from '../../types.js';\n\nexport type ProductCardChartTrend = 'positive' | 'negative' | 'neutral';\n\n/** Ширина SVG viewBox графика common-карточки. */\nexport const PRODUCT_CARD_CHART_VIEWBOX_WIDTH = 100;\n/** Высота SVG viewBox графика common-карточки. */\nexport const PRODUCT_CARD_CHART_VIEWBOX_HEIGHT = 32;\n\n/** Переводит значение Y (больше = выше) в SVG-координату (0 сверху). */\nexport const toChartSvgY = (y: number) => PRODUCT_CARD_CHART_VIEWBOX_HEIGHT - y;\n\nexport const positiveChartPreset: ProductCardPoint[] = [\n { x: 0, y: 10 },\n { x: 6, y: 15 },\n { x: 11, y: 13 },\n { x: 18, y: 18 },\n { x: 26, y: 16 },\n { x: 31, y: 20 },\n { x: 38, y: 22 },\n { x: 48, y: 24 },\n { x: 56, y: 23 },\n { x: 64, y: 27 },\n { x: 70, y: 25 },\n { x: 79, y: 28 },\n { x: 86, y: 24 },\n { x: 100, y: 26 },\n];\n\nexport const negativeChartPreset: ProductCardPoint[] = positiveChartPreset.map(({ x, y }) => ({\n x,\n y: PRODUCT_CARD_CHART_VIEWBOX_HEIGHT - y,\n}));\n\nexport const neutralChartPreset: ProductCardPoint[] = positiveChartPreset.map(({ x }) => ({\n x,\n y: 16,\n}));\n\nexport const productCardChartPresets = {\n positive: positiveChartPreset,\n negative: negativeChartPreset,\n neutral: neutralChartPreset,\n} as const;\n\nexport type ProductCardChartPreset = keyof typeof productCardChartPresets;\n\nexport const normalizeChartPoints = (chart?: ProductCardPoint[]) => {\n if (chart == null || chart.length < 2) {\n return [];\n }\n return chart;\n};\n\nexport const getProductCardChartTrend = (points: ProductCardPoint[]): ProductCardChartTrend => {\n const sorted = [...points].sort((a, b) => a.x - b.x);\n const first = sorted[0];\n const last = sorted[sorted.length - 1];\n\n if (first == null || last == null) {\n return 'neutral';\n }\n\n if (last.y > first.y) {\n return 'positive';\n }\n if (last.y < first.y) {\n return 'negative';\n }\n return 'neutral';\n};\n\ninterface ProductCardChartColors {\n stroke: string;\n fillStart: string;\n fillEnd: string;\n}\n\nexport const getProductCardChartColors = (\n trend: ProductCardChartTrend,\n): ProductCardChartColors => {\n switch (trend) {\n case 'negative':\n return {\n stroke: tokens.colors.data.graph.fall.default,\n fillStart: tokens.colors.opacity.negative['24'],\n fillEnd: tokens.colors.opacity.negative['0'],\n };\n case 'neutral':\n return {\n stroke: tokens.colors.data.graph.neutral.default,\n fillStart: tokens.colors.data.graph.opacity.start,\n fillEnd: tokens.colors.data.graph.opacity.end,\n };\n default:\n return {\n stroke: tokens.colors.data.graph.grow.default,\n fillStart: tokens.colors.opacity.positive['24'],\n fillEnd: tokens.colors.opacity.positive['0'],\n };\n }\n};\n\nexport const buildChartPolyline = (points: ProductCardPoint[]) => (\n points.map(({ x, y }) => `${x},${toChartSvgY(y)}`).join(' ')\n);\n"],"names":["PRODUCT_CARD_CHART_VIEWBOX_WIDTH","PRODUCT_CARD_CHART_VIEWBOX_HEIGHT","toChartSvgY","y","positiveChartPreset","negativeChartPreset","x","neutralChartPreset","productCardChartPresets","normalizeChartPoints","chart","getProductCardChartTrend","points","sorted","a","b","first","last","getProductCardChartColors","trend","tokens","buildChartPolyline"],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ const getProductCardSizeClassName = (layoutId, view, size)=>{
|
|
|
14
14
|
const hexToRgba = (color, alpha)=>{
|
|
15
15
|
const normalized = color.trim().replace('#', '');
|
|
16
16
|
if (3 === normalized.length) {
|
|
17
|
-
const [r, g, b] = normalized.split('');
|
|
17
|
+
const [r = '', g = '', b = ''] = normalized.split('');
|
|
18
18
|
const red = parseInt(r + r, 16);
|
|
19
19
|
const green = parseInt(g + g, 16);
|
|
20
20
|
const blue = parseInt(b + b, 16);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductCard/utils.js","sources":["../../src/ProductCard/utils.ts"],"sourcesContent":["import { getProductCardLayoutConfig } from './layoutConfig.js';\nimport {\n ProductCardLayoutId,\n ProductCardView,\n type ProductCardDesktopSize,\n} from './types.js';\n\nconst classNameSizeMap: Record<ProductCardDesktopSize, string> = {\n l: 'sizeL',\n m: 'sizeM',\n};\n\nexport const classNameSize = (size: ProductCardDesktopSize) => classNameSizeMap[size];\n\nexport const getProductCardSizeClassName = (\n layoutId: ProductCardLayoutId,\n view: ProductCardView,\n size?: ProductCardDesktopSize,\n) => {\n if (size != null) {\n return classNameSize(size);\n }\n\n const { desktopSize, mobileSize } = getProductCardLayoutConfig(layoutId);\n const layoutSize = view === ProductCardView.DESKTOP ? desktopSize : mobileSize;\n\n return classNameSize(layoutSize);\n};\n\nexport const hexToRgba = (color: string, alpha: number) => {\n const normalized = color.trim().replace('#', '');\n if (normalized.length === 3) {\n const [r, g, b] = normalized.split('');\n const red = parseInt(r + r, 16);\n const green = parseInt(g + g, 16);\n const blue = parseInt(b + b, 16);\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\n }\n if (normalized.length === 6) {\n return `rgba(${parseInt(normalized.slice(0, 2), 16)}, ${parseInt(normalized.slice(2, 4), 16)}, ${parseInt(normalized.slice(4, 6), 16)}, ${alpha})`;\n }\n return `rgba(255, 255, 255, ${alpha})`;\n};\n"],"names":["classNameSizeMap","classNameSize","size","getProductCardSizeClassName","layoutId","view","desktopSize","mobileSize","getProductCardLayoutConfig","layoutSize","ProductCardView","hexToRgba","color","alpha","normalized","r","g","b","red","parseInt","green","blue"],"mappings":";;AAOA,MAAMA,mBAA2D;IAC/D,GAAG;IACH,GAAG;AACL;AAEO,MAAMC,gBAAgB,CAACC,OAAiCF,gBAAgB,CAACE,KAAK;AAE9E,MAAMC,8BAA8B,CACzCC,UACAC,MACAH;IAEA,IAAIA,AAAQ,QAARA,MACF,OAAOD,cAAcC;IAGvB,MAAM,EAAEI,WAAW,EAAEC,UAAU,EAAE,GAAGC,2BAA2BJ;IAC/D,MAAMK,aAAaJ,SAASK,gBAAgB,OAAO,GAAGJ,cAAcC;IAEpE,OAAON,cAAcQ;AACvB;AAEO,MAAME,YAAY,CAACC,OAAeC;IACvC,MAAMC,aAAaF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK;IAC7C,IAAIE,AAAsB,MAAtBA,WAAW,MAAM,EAAQ;QAC3B,MAAM,CAACC,
|
|
1
|
+
{"version":3,"file":"ProductCard/utils.js","sources":["../../src/ProductCard/utils.ts"],"sourcesContent":["import { getProductCardLayoutConfig } from './layoutConfig.js';\nimport {\n ProductCardLayoutId,\n ProductCardView,\n type ProductCardDesktopSize,\n} from './types.js';\n\nconst classNameSizeMap: Record<ProductCardDesktopSize, string> = {\n l: 'sizeL',\n m: 'sizeM',\n};\n\nexport const classNameSize = (size: ProductCardDesktopSize) => classNameSizeMap[size];\n\nexport const getProductCardSizeClassName = (\n layoutId: ProductCardLayoutId,\n view: ProductCardView,\n size?: ProductCardDesktopSize,\n) => {\n if (size != null) {\n return classNameSize(size);\n }\n\n const { desktopSize, mobileSize } = getProductCardLayoutConfig(layoutId);\n const layoutSize = view === ProductCardView.DESKTOP ? desktopSize : mobileSize;\n\n return classNameSize(layoutSize);\n};\n\nexport const hexToRgba = (color: string, alpha: number) => {\n const normalized = color.trim().replace('#', '');\n if (normalized.length === 3) {\n const [r = '', g = '', b = ''] = normalized.split('');\n const red = parseInt(r + r, 16);\n const green = parseInt(g + g, 16);\n const blue = parseInt(b + b, 16);\n return `rgba(${red}, ${green}, ${blue}, ${alpha})`;\n }\n if (normalized.length === 6) {\n return `rgba(${parseInt(normalized.slice(0, 2), 16)}, ${parseInt(normalized.slice(2, 4), 16)}, ${parseInt(normalized.slice(4, 6), 16)}, ${alpha})`;\n }\n return `rgba(255, 255, 255, ${alpha})`;\n};\n"],"names":["classNameSizeMap","classNameSize","size","getProductCardSizeClassName","layoutId","view","desktopSize","mobileSize","getProductCardLayoutConfig","layoutSize","ProductCardView","hexToRgba","color","alpha","normalized","r","g","b","red","parseInt","green","blue"],"mappings":";;AAOA,MAAMA,mBAA2D;IAC/D,GAAG;IACH,GAAG;AACL;AAEO,MAAMC,gBAAgB,CAACC,OAAiCF,gBAAgB,CAACE,KAAK;AAE9E,MAAMC,8BAA8B,CACzCC,UACAC,MACAH;IAEA,IAAIA,AAAQ,QAARA,MACF,OAAOD,cAAcC;IAGvB,MAAM,EAAEI,WAAW,EAAEC,UAAU,EAAE,GAAGC,2BAA2BJ;IAC/D,MAAMK,aAAaJ,SAASK,gBAAgB,OAAO,GAAGJ,cAAcC;IAEpE,OAAON,cAAcQ;AACvB;AAEO,MAAME,YAAY,CAACC,OAAeC;IACvC,MAAMC,aAAaF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK;IAC7C,IAAIE,AAAsB,MAAtBA,WAAW,MAAM,EAAQ;QAC3B,MAAM,CAACC,IAAI,EAAE,EAAEC,IAAI,EAAE,EAAEC,IAAI,EAAE,CAAC,GAAGH,WAAW,KAAK,CAAC;QAClD,MAAMI,MAAMC,SAASJ,IAAIA,GAAG;QAC5B,MAAMK,QAAQD,SAASH,IAAIA,GAAG;QAC9B,MAAMK,OAAOF,SAASF,IAAIA,GAAG;QAC7B,OAAO,CAAC,KAAK,EAAEC,IAAI,EAAE,EAAEE,MAAM,EAAE,EAAEC,KAAK,EAAE,EAAER,MAAM,CAAC,CAAC;IACpD;IACA,IAAIC,AAAsB,MAAtBA,WAAW,MAAM,EACnB,OAAO,CAAC,KAAK,EAAEK,SAASL,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,EAAEK,SAASL,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,EAAEK,SAASL,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,EAAED,MAAM,CAAC,CAAC;IAEpJ,OAAO,CAAC,oBAAoB,EAAEA,MAAM,CAAC,CAAC;AACxC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export declare const AVAILABLE_SIZES:
|
|
2
|
-
export declare const DEFAULT_SIZE:
|
|
1
|
+
export declare const AVAILABLE_SIZES: readonly [24, 32, 40, 48, 64];
|
|
2
|
+
export declare const DEFAULT_SIZE: 32;
|
|
3
3
|
export declare const MAX_PIXEL_RATIO = 3;
|
|
4
4
|
export declare const LARGE_PLACEHOLDER_SIZE = 32;
|
|
5
5
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/SecurityIcon/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/SecurityIcon/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,+BAAgC,CAAC;AAE7D,eAAO,MAAM,YAAY,IAAqB,CAAC;AAE/C,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,eAAO,MAAM,sBAAsB,KAAK,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecurityIcon/constants.js","sources":["../../src/SecurityIcon/constants.ts"],"sourcesContent":["export const AVAILABLE_SIZES = [24, 32, 40, 48, 64];\n\nexport const DEFAULT_SIZE = AVAILABLE_SIZES[1];\n\nexport const MAX_PIXEL_RATIO = 3;\n\nexport const LARGE_PLACEHOLDER_SIZE = 32;\n"],"names":["AVAILABLE_SIZES","DEFAULT_SIZE","MAX_PIXEL_RATIO","LARGE_PLACEHOLDER_SIZE"],"mappings":"AAAO,MAAMA,kBAAkB;IAAC;IAAI;IAAI;IAAI;IAAI;CAAG;AAE5C,MAAMC,eAAeD,eAAe,CAAC,EAAE;AAEvC,MAAME,kBAAkB;AAExB,MAAMC,yBAAyB"}
|
|
1
|
+
{"version":3,"file":"SecurityIcon/constants.js","sources":["../../src/SecurityIcon/constants.ts"],"sourcesContent":["export const AVAILABLE_SIZES = [24, 32, 40, 48, 64] as const;\n\nexport const DEFAULT_SIZE = AVAILABLE_SIZES[1];\n\nexport const MAX_PIXEL_RATIO = 3;\n\nexport const LARGE_PLACEHOLDER_SIZE = 32;\n"],"names":["AVAILABLE_SIZES","DEFAULT_SIZE","MAX_PIXEL_RATIO","LARGE_PLACEHOLDER_SIZE"],"mappings":"AAAO,MAAMA,kBAAkB;IAAC;IAAI;IAAI;IAAI;IAAI;CAAG;AAE5C,MAAMC,eAAeD,eAAe,CAAC,EAAE;AAEvC,MAAME,kBAAkB;AAExB,MAAMC,yBAAyB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/SecurityIcon/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/SecurityIcon/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAiBnD,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,WAE3C,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,aAAa,MAAM,EACnB,MAAM,gBAAgB,EACtB,IAAI,MAAM,GAAG,MAAM,EACnB,MAAM,MAAM,WAOb,CAAC"}
|
|
@@ -5,9 +5,10 @@ const getPixelRatioSuffix = ()=>{
|
|
|
5
5
|
const pixelRatio = Math.min(MAX_PIXEL_RATIO, Math.ceil(Math.max(1, null != (_window_devicePixelRatio = window.devicePixelRatio) ? _window_devicePixelRatio : 1)));
|
|
6
6
|
return pixelRatio > 1 ? `@${pixelRatio}x` : '';
|
|
7
7
|
};
|
|
8
|
+
const MAX_AVAILABLE_SIZE = Math.max(...AVAILABLE_SIZES);
|
|
8
9
|
const resolveIconSize = (size)=>{
|
|
9
10
|
var _AVAILABLE_SIZES_find;
|
|
10
|
-
return null != (_AVAILABLE_SIZES_find = AVAILABLE_SIZES.find((availableSize)=>availableSize >= size)) ? _AVAILABLE_SIZES_find :
|
|
11
|
+
return null != (_AVAILABLE_SIZES_find = AVAILABLE_SIZES.find((availableSize)=>availableSize >= size)) ? _AVAILABLE_SIZES_find : MAX_AVAILABLE_SIZE;
|
|
11
12
|
};
|
|
12
13
|
const buildIconUrl = (urlTemplate, type, id, size)=>urlTemplate.replace('$type', type).replace('$size', size.toString()).replace('$id', 'number' == typeof id ? id.toString() : id).replace('$mult', getPixelRatioSuffix());
|
|
13
14
|
export { buildIconUrl, resolveIconSize };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecurityIcon/utils.js","sources":["../../src/SecurityIcon/utils.ts"],"sourcesContent":["import { AVAILABLE_SIZES, MAX_PIXEL_RATIO } from './constants.js';\nimport type { SecurityIconType } from './types.js';\n\nconst getPixelRatioSuffix = () => {\n if (typeof window === 'undefined') {\n return '';\n }\n\n const pixelRatio = Math.min(\n MAX_PIXEL_RATIO,\n Math.ceil(Math.max(1, window.devicePixelRatio ?? 1)),\n );\n\n return pixelRatio > 1 ? `@${pixelRatio}x` : '';\n};\n\nexport const resolveIconSize = (size: number) => (\n AVAILABLE_SIZES.find(availableSize => availableSize >= size)
|
|
1
|
+
{"version":3,"file":"SecurityIcon/utils.js","sources":["../../src/SecurityIcon/utils.ts"],"sourcesContent":["import { AVAILABLE_SIZES, MAX_PIXEL_RATIO } from './constants.js';\nimport type { SecurityIconType } from './types.js';\n\nconst getPixelRatioSuffix = () => {\n if (typeof window === 'undefined') {\n return '';\n }\n\n const pixelRatio = Math.min(\n MAX_PIXEL_RATIO,\n Math.ceil(Math.max(1, window.devicePixelRatio ?? 1)),\n );\n\n return pixelRatio > 1 ? `@${pixelRatio}x` : '';\n};\n\nconst MAX_AVAILABLE_SIZE = Math.max(...AVAILABLE_SIZES);\n\nexport const resolveIconSize = (size: number) => (\n AVAILABLE_SIZES.find(availableSize => availableSize >= size) ?? MAX_AVAILABLE_SIZE\n);\n\nexport const buildIconUrl = (\n urlTemplate: string,\n type: SecurityIconType,\n id: string | number,\n size: number,\n) => (\n urlTemplate\n .replace('$type', type)\n .replace('$size', size.toString())\n .replace('$id', typeof id === 'number' ? id.toString() : id)\n .replace('$mult', getPixelRatioSuffix())\n);\n"],"names":["getPixelRatioSuffix","_window_devicePixelRatio","window","pixelRatio","Math","MAX_PIXEL_RATIO","MAX_AVAILABLE_SIZE","AVAILABLE_SIZES","resolveIconSize","size","_AVAILABLE_SIZES_find","availableSize","buildIconUrl","urlTemplate","type","id"],"mappings":";AAGA,MAAMA,sBAAsB;QAOFC;IANxB,IAAI,AAAkB,MAAlB,OAAOC,QACT,OAAO;IAGT,MAAMC,aAAaC,KAAK,GAAG,CACzBC,iBACAD,KAAK,IAAI,CAACA,KAAK,GAAG,CAAC,GAAG,QAAAH,CAAAA,2BAAAA,OAAO,gBAAgB,AAAD,IAAtBA,2BAA2B;IAGnD,OAAOE,aAAa,IAAI,CAAC,CAAC,EAAEA,WAAW,CAAC,CAAC,GAAG;AAC9C;AAEA,MAAMG,qBAAqBF,KAAK,GAAG,IAAIG;AAEhC,MAAMC,kBAAkB,CAACC;QAC9BC;mBAAAA,CAAAA,wBAAAA,gBAAgB,IAAI,CAACC,CAAAA,gBAAiBA,iBAAiBF,KAAI,IAA3DC,wBAAgEJ;;AAG3D,MAAMM,eAAe,CAC1BC,aACAC,MACAC,IACAN,OAEAI,YACG,OAAO,CAAC,SAASC,MACjB,OAAO,CAAC,SAASL,KAAK,QAAQ,IAC9B,OAAO,CAAC,OAAO,AAAc,YAAd,OAAOM,KAAkBA,GAAG,QAAQ,KAAKA,IACxD,OAAO,CAAC,SAASf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slider.d.ts","sourceRoot":"","sources":["../../src/Slider/Slider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAGpC,OAAO,EACL,IAAI,EAQL,MAAM,oBAAoB,CAAC;AAW5B,UAAU,UAAW,SAAQ,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,WAAW,CAAC;IACtH,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;IAClC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/E,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7E,6CAA6C;IAC7C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yDAAyD;IACzD,YAAY,CAAC,EAAE,CACb,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,aAAa,KAC3C,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,UAAU,eAAgB,SAAQ,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,CAAC;IACtE,0BAA0B;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAClF;AAED,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,eAAe,CAAC;AAIjD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,iBAYxE;;
|
|
1
|
+
{"version":3,"file":"Slider.d.ts","sourceRoot":"","sources":["../../src/Slider/Slider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAGpC,OAAO,EACL,IAAI,EAQL,MAAM,oBAAoB,CAAC;AAW5B,UAAU,UAAW,SAAQ,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,OAAO,IAAI,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,WAAW,CAAC;IACtH,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6BAA6B;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;IAClC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/E,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7E,6CAA6C;IAC7C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3E,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yDAAyD;IACzD,YAAY,CAAC,EAAE,CACb,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,aAAa,KAC3C,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,UAAU,eAAgB,SAAQ,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,CAAC;IACtE,0BAA0B;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAClF;AAED,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,eAAe,CAAC;AAIjD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,iBAYxE;;AAmcD,wBAA4B"}
|
package/dist/Slider/Slider.js
CHANGED
|
@@ -15,6 +15,7 @@ function defaultValueReducer(rawValue, props) {
|
|
|
15
15
|
return Number(rawValue.toFixed(3));
|
|
16
16
|
}
|
|
17
17
|
const Slider = /*#__PURE__*/ forwardRef((props, ref)=>{
|
|
18
|
+
var _valueProp_, _values_;
|
|
18
19
|
const { className, disabled, value: valueProp, min = 0, max = 100, step: stepProp, marks, onChange, onDragStart, onDragEnd, vertical, valueReducer = defaultValueReducer, name, color = 'default' } = props, otherProps = _object_without_properties__(props, [
|
|
19
20
|
"className",
|
|
20
21
|
"disabled",
|
|
@@ -196,6 +197,7 @@ const Slider = /*#__PURE__*/ forwardRef((props, ref)=>{
|
|
|
196
197
|
var _event_currentTarget_getAttribute;
|
|
197
198
|
const index = parseFloat(null != (_event_currentTarget_getAttribute = event.currentTarget.getAttribute(INDEX_ATTR)) ? _event_currentTarget_getAttribute : '');
|
|
198
199
|
const currentValue = Array.isArray(valueProp) ? valueProp[index] : valueProp;
|
|
200
|
+
if (null == currentValue) return;
|
|
199
201
|
const onePercent = Math.abs((max - min) / 100);
|
|
200
202
|
const step = stepProp || onePercent;
|
|
201
203
|
let value;
|
|
@@ -287,8 +289,8 @@ const Slider = /*#__PURE__*/ forwardRef((props, ref)=>{
|
|
|
287
289
|
const values = Array.isArray(valueProp) ? valueProp : [
|
|
288
290
|
null == valueProp ? min : valueProp
|
|
289
291
|
];
|
|
290
|
-
const startValue = Array.isArray(valueProp) ? valueProp[0] : min;
|
|
291
|
-
const endValue = values[values.length - 1];
|
|
292
|
+
const startValue = Array.isArray(valueProp) ? null != (_valueProp_ = valueProp[0]) ? _valueProp_ : min : min;
|
|
293
|
+
const endValue = null != (_values_ = values[values.length - 1]) ? _values_ : min;
|
|
292
294
|
const tracksCount = marks && stepProp ? (max - min) / stepProp : void 0;
|
|
293
295
|
const rootClassName = clsx(className, {
|
|
294
296
|
vertical,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slider/Slider.js","sources":["../../src/Slider/Slider.tsx"],"sourcesContent":["import { forwardRef, useCallback, useEffect, useRef, useState, memo } from 'react';\nimport type * as React from 'react';\nimport classnames from 'clsx';\nimport { triggerChangeEvent } from '../utils/event.js';\nimport {\n Root,\n Container,\n ThumbWrapper,\n Thumb,\n HiddenNumberInput,\n TrackSvg,\n RailLine,\n TrackLine,\n} from './Slider.styles.js';\nimport {\n clamp,\n percentToValue,\n valueToPercent,\n roundToStep,\n getTouch,\n calculatePercent,\n preventPageScrolling,\n} from './utils.js';\n\ninterface OuterProps extends Omit<React.ComponentPropsWithoutRef<typeof Root>, 'onChange' | 'onDragStart' | 'onDragEnd'> {\n /** Флаг неактивного состояния компонента */\n disabled?: boolean;\n /** from HTMLInputElement */\n name?: string;\n /** Состояние значения компонента */\n value: number;\n /** Минимально возможное значение компонента */\n min?: number;\n /** Максимально возможное значение компонента */\n max?: number;\n /** Шаг изменения значения компонента */\n step?: number;\n /** Отображение меток шага */\n marks?: boolean;\n /** Вариант цветовой схемы */\n color?: 'default' | 'alternative';\n /** Обработчик изменения значения */\n onChange?: (event: React.ChangeEvent<HTMLInputElement>, value: number) => void;\n /** Обработчик начала захвата ползунка */\n onDragStart?: (event: MouseEvent | TouchEvent, value: number | null) => void;\n /** Обработчик завершения захвата ползунка */\n onDragEnd?: (event: MouseEvent | TouchEvent, value: number | null) => void;\n /** Переключение на вертикальный вид слайдера */\n vertical?: boolean;\n /** Кастомный обработчик значения перед его изменением */\n valueReducer?: (\n rawValue: number | null,\n props: Props,\n event: MouseEvent | TouchEvent | KeyboardEvent,\n ) => number | null;\n}\n\ninterface OuterPropsRange extends Omit<OuterProps, 'value' | 'onChange'> {\n /** или массив значений */\n value: number[];\n onChange?: (event: React.ChangeEvent<HTMLInputElement>, value: number[]) => void;\n}\n\nexport type Props = OuterProps | OuterPropsRange;\n\nconst INDEX_ATTR = 'data-index';\n\nexport function defaultValueReducer(rawValue: number | null, props: Props) {\n const { disabled, step } = props;\n\n if (disabled || rawValue === null) {\n return null;\n }\n\n if (step) {\n return roundToStep(rawValue, step);\n }\n\n return Number(rawValue.toFixed(3));\n}\n\nconst Slider = forwardRef<HTMLDivElement, Props>((props, ref) => {\n const {\n className,\n disabled,\n value: valueProp,\n min = 0,\n max = 100,\n step: stepProp,\n marks,\n onChange,\n onDragStart,\n onDragEnd,\n vertical,\n valueReducer = defaultValueReducer,\n name,\n color = 'default',\n ...otherProps\n } = props;\n\n const touchIdRef = useRef<number | undefined>(undefined);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const hiddenInputsRef = useRef<(HTMLInputElement | null)[]>([]);\n const removeListenersRef = useRef<VoidFunction | undefined>(undefined);\n const [activeIndex, setActiveIndex] = useState<number>();\n const activeIndexRef = useRef(activeIndex);\n\n if (disabled && activeIndex !== undefined) {\n setActiveIndex(undefined);\n }\n if (activeIndex !== activeIndexRef.current) {\n activeIndexRef.current = activeIndex;\n }\n\n useEffect(() => () => {\n if (removeListenersRef.current) {\n removeListenersRef.current();\n }\n }, []);\n\n const focusThumb = (index: number) => {\n if (\n !containerRef.current?.contains(document.activeElement) ||\n Number(document.activeElement?.getAttribute('data-index')) !== index\n ) {\n containerRef.current\n ?.querySelector<HTMLElement>(`[role=\"slider\"][data-index=\"${index}\"]`)\n ?.focus();\n }\n\n setActiveIndex(prevIndex => (\n prevIndex !== undefined && index !== prevIndex ? index : prevIndex\n ));\n };\n\n const emitChange = useCallback((\n event: MouseEvent | TouchEvent | KeyboardEvent,\n rawValue: number | null,\n index?: number,\n ) => {\n const currentIndex = index === undefined ? activeIndexRef.current : index;\n if (currentIndex === undefined) {\n return;\n }\n\n const newValue = valueReducer(rawValue, props, event);\n const hiddenInput = hiddenInputsRef.current[currentIndex];\n const previousValue = hiddenInput?.value;\n\n if (\n hiddenInput &&\n newValue !== null &&\n newValue !== parseFloat(previousValue ?? '') &&\n typeof onChange === 'function'\n ) {\n triggerChangeEvent(hiddenInput, newValue);\n }\n }, [props, valueReducer, onChange]);\n\n const calculateValueFromPercent = useCallback((event: MouseEvent | TouchEvent): number | null => {\n const percent = containerRef.current && calculatePercent(\n containerRef.current,\n event,\n touchIdRef.current,\n vertical,\n );\n\n return percent != null ? percentToValue(percent, min, max) : null;\n }, [vertical, min, max]);\n\n const handleClick = useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n const value = calculateValueFromPercent(event.nativeEvent);\n\n if (value == null) {\n return;\n }\n\n if (Array.isArray(valueProp)) {\n let index;\n let prevDiff: number | undefined;\n\n valueProp.forEach((val, i) => {\n const diff = Math.abs(val - value);\n\n if (prevDiff === undefined || diff < prevDiff) {\n index = i;\n prevDiff = diff;\n }\n });\n\n emitChange(event.nativeEvent, value, index);\n } else {\n emitChange(event.nativeEvent, value, 0);\n }\n }, [calculateValueFromPercent, emitChange, valueProp]);\n\n const handleDragEnd = useCallback((event: MouseEvent | TouchEvent) => {\n const value = calculateValueFromPercent(event);\n const newValue = valueReducer(value, props, event);\n\n setActiveIndex(undefined);\n\n if (removeListenersRef.current) {\n removeListenersRef.current();\n removeListenersRef.current = undefined;\n }\n\n if (typeof onDragEnd === 'function') {\n onDragEnd(event, newValue);\n }\n }, [calculateValueFromPercent, valueReducer, props, onDragEnd]);\n\n const handleMouseEnter = useCallback((event: MouseEvent) => {\n // If the slider was being interacted with but the mouse went off the window\n // and then re-entered while unclicked then end the interaction.\n if (event.buttons === 0) {\n handleDragEnd(event);\n }\n }, [handleDragEnd]);\n\n const handleMouseMove = useCallback((event: MouseEvent | TouchEvent) => {\n const value = calculateValueFromPercent(event);\n\n emitChange(event, value);\n }, [calculateValueFromPercent, emitChange]);\n\n const handleMouseLeave = useCallback((event: MouseEvent) => {\n // The mouse will have moved between the last mouse move event\n // this mouse leave event\n handleMouseMove(event);\n }, [handleMouseMove]);\n\n const handleMouseUp = useCallback((event: MouseEvent | TouchEvent) => {\n handleDragEnd(event);\n }, [handleDragEnd]);\n\n const handleMouseDown = useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n event.preventDefault();\n\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR) ?? '');\n setActiveIndex(index);\n\n const value = calculateValueFromPercent(event.nativeEvent);\n const newValue = valueReducer(value, props, event.nativeEvent);\n\n document.body.addEventListener('mouseenter', handleMouseEnter);\n document.body.addEventListener('mouseleave', handleMouseLeave);\n document.body.addEventListener('mousemove', handleMouseMove);\n document.body.addEventListener('mouseup', handleMouseUp);\n\n removeListenersRef.current = () => {\n document.body.removeEventListener('mouseenter', handleMouseEnter);\n document.body.removeEventListener('mouseleave', handleMouseLeave);\n document.body.removeEventListener('mousemove', handleMouseMove);\n document.body.removeEventListener('mouseup', handleMouseUp);\n };\n\n if (typeof onDragStart === 'function') {\n onDragStart(event.nativeEvent, newValue);\n }\n }, [\n calculateValueFromPercent, valueReducer, props,\n handleMouseEnter, handleMouseLeave, handleMouseMove, handleMouseUp, onDragStart,\n ]);\n\n const handleTouchEnd = useCallback((event: TouchEvent) => {\n if (touchIdRef.current === undefined) {\n handleMouseUp(event);\n return;\n }\n const touch = getTouch(event, touchIdRef.current);\n if (touch) {\n handleMouseUp(event);\n }\n }, [handleMouseUp]);\n\n const handleTouchStart = useCallback((event: React.TouchEvent) => {\n event.preventDefault();\n const touch = event.changedTouches.item(0);\n if (touch != null) {\n touchIdRef.current = touch.identifier;\n }\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR) ?? '');\n setActiveIndex(index);\n\n const value = calculateValueFromPercent(event.nativeEvent);\n const newValue = valueReducer(value, props, event.nativeEvent);\n emitChange(event.nativeEvent, value);\n\n document.body.addEventListener('touchend', handleTouchEnd);\n\n removeListenersRef.current = () => {\n document.body.removeEventListener('touchend', handleTouchEnd);\n };\n\n if (typeof onDragStart === 'function') {\n onDragStart(event.nativeEvent, newValue);\n }\n }, [calculateValueFromPercent, emitChange, handleTouchEnd, onDragStart, props, valueReducer]);\n\n const handleTouchMove = useCallback(({ nativeEvent }: React.TouchEvent) => {\n if (touchIdRef.current === undefined) {\n handleMouseMove(nativeEvent);\n return;\n }\n\n const touch = getTouch(nativeEvent, touchIdRef.current);\n if (touch) {\n handleMouseMove(nativeEvent);\n }\n }, [handleMouseMove]);\n\n const handleKeyDown = useCallback((event: React.KeyboardEvent) => {\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR) ?? '');\n\n const currentValue = Array.isArray(valueProp) ? valueProp[index] : valueProp;\n\n const onePercent = Math.abs((max - min) / 100);\n const step = stepProp || onePercent;\n let value;\n\n switch (event.key) {\n case 'Home':\n value = min;\n break;\n case 'End':\n value = max;\n break;\n case 'PageUp':\n value = currentValue + onePercent * 10;\n break;\n case 'PageDown':\n value = currentValue - onePercent * 10;\n break;\n case 'ArrowRight':\n case 'ArrowUp':\n value = currentValue + step;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n value = currentValue - step;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n\n value = clamp(value, min, max);\n\n emitChange(event.nativeEvent, value, index);\n }, [emitChange, max, min, stepProp, valueProp]);\n\n const handleChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange) {\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR) ?? '');\n\n let newValue;\n\n if (Array.isArray(valueProp)) {\n newValue = [...valueProp];\n const eventValue = parseFloat(event.target.value);\n newValue[index] = eventValue;\n\n newValue.sort((a, b) => a - b);\n\n focusThumb(newValue.indexOf(eventValue));\n } else {\n newValue = parseFloat(event.target.value);\n }\n\n onChange(event, newValue as number & number[]);\n }\n }, [onChange, valueProp]);\n\n const handleRef = (node: HTMLDivElement | null) => {\n const nextContainer = node;\n const prevContainer = containerRef.current;\n\n if (prevContainer !== nextContainer) {\n if (prevContainer) {\n prevContainer.removeEventListener('touchstart', preventPageScrolling);\n }\n if (nextContainer) {\n nextContainer.addEventListener('touchstart', preventPageScrolling, { passive: false });\n }\n }\n\n containerRef.current = nextContainer;\n };\n\n const handleInputRef = useCallback((node: HTMLInputElement | null) => {\n if (node) {\n const index = node.getAttribute(INDEX_ATTR);\n\n if (index != null) {\n hiddenInputsRef.current[parseInt(index, 10)] = node;\n }\n }\n }, []);\n\n const calculateTrackPoints = (offset: number, leap: number) => {\n if (vertical) {\n return {\n x1: 1,\n y1: 100 - offset,\n x2: 1,\n y2: 100 - leap,\n };\n }\n\n return {\n x1: offset,\n y1: 1,\n x2: leap,\n y2: 1,\n };\n };\n\n const values = Array.isArray(valueProp) ? valueProp : [valueProp == null ? min : valueProp];\n\n const startValue = Array.isArray(valueProp) ? valueProp[0] : min;\n const endValue = values[values.length - 1];\n\n const tracksCount = marks && stepProp ? (((max - min) / stepProp)) : undefined;\n\n const rootClassName = classnames(\n className,\n {\n vertical,\n disabled,\n activated: activeIndex !== undefined,\n discrete: tracksCount && stepProp != null ? 'discrete' : undefined,\n alternative: color === 'alternative',\n },\n );\n\n return (\n <Root\n className={rootClassName}\n onClick={handleClick}\n {...otherProps}\n ref={ref}\n >\n <Container ref={handleRef} className=\"ui-slider__container\">\n <TrackSvg viewBox={vertical ? '0 0 2 100' : '0 0 100 2'} preserveAspectRatio=\"none\" className=\"ui-slider__track\">\n {\n tracksCount && stepProp != null\n ? Array.from({ length: tracksCount }).map((_, i) => {\n const trackStart = min + i * stepProp;\n const trackEnd = trackStart + stepProp;\n const trackOffset = valueToPercent(trackStart, min, max) + (i === 0 ? 0 : 0.2);\n const trackLeap = valueToPercent(trackEnd, min, max) -\n (i === tracksCount - 1 ? 0 : 0.2);\n const active = trackStart >= startValue && trackEnd <= endValue;\n return (\n <TrackLine\n // eslint-disable-next-line react/no-array-index-key\n key={i}\n className={classnames({ active })}\n {...calculateTrackPoints(trackOffset, trackLeap)}\n />\n );\n })\n : (\n <>\n <RailLine\n {...calculateTrackPoints(0, 100)}\n />\n <TrackLine\n className=\"active\"\n {...calculateTrackPoints(\n valueToPercent(startValue, min, max),\n valueToPercent(endValue, min, max),\n )}\n />\n </>\n )\n }\n </TrackSvg>\n {\n values.map((val, i) => {\n const percent = clamp(valueToPercent(val, min, max));\n\n const stylesThumbWrapper = {\n [vertical ? 'bottom' : 'left']: `${percent}%`,\n };\n\n return (\n <ThumbWrapper\n // eslint-disable-next-line react/no-array-index-key\n key={i}\n className={classnames({ activated: activeIndex === i })}\n style={stylesThumbWrapper}\n onMouseDown={handleMouseDown}\n onTouchStartCapture={handleTouchStart}\n onTouchMove={handleTouchMove}\n data-index={i}\n >\n <Thumb\n disabled={disabled}\n onKeyDown={handleKeyDown}\n onTouchStartCapture={handleTouchStart}\n onTouchMove={handleTouchMove}\n type=\"button\"\n role=\"slider\"\n data-index={i}\n className=\"ui-slider__thumb\"\n />\n <HiddenNumberInput\n type=\"number\"\n name={name}\n data-index={i}\n value={val}\n onChange={handleChange}\n ref={handleInputRef}\n />\n </ThumbWrapper>\n );\n })\n }\n </Container>\n </Root>\n );\n});\n\nexport default memo(Slider);\n"],"names":["INDEX_ATTR","defaultValueReducer","rawValue","props","disabled","step","roundToStep","Number","Slider","forwardRef","ref","className","valueProp","min","max","stepProp","marks","onChange","onDragStart","onDragEnd","vertical","valueReducer","name","color","otherProps","touchIdRef","useRef","undefined","containerRef","hiddenInputsRef","removeListenersRef","activeIndex","setActiveIndex","useState","activeIndexRef","useEffect","focusThumb","index","_containerRef_current","_document_activeElement","document","_containerRef_current_querySelector","prevIndex","emitChange","useCallback","event","currentIndex","newValue","hiddenInput","previousValue","parseFloat","triggerChangeEvent","calculateValueFromPercent","percent","calculatePercent","percentToValue","handleClick","value","Array","prevDiff","val","i","diff","Math","handleDragEnd","handleMouseEnter","handleMouseMove","handleMouseLeave","handleMouseUp","handleMouseDown","_event_currentTarget_getAttribute","handleTouchEnd","touch","getTouch","handleTouchStart","handleTouchMove","nativeEvent","handleKeyDown","currentValue","onePercent","clamp","handleChange","eventValue","a","b","handleRef","node","nextContainer","prevContainer","preventPageScrolling","handleInputRef","parseInt","calculateTrackPoints","offset","leap","values","startValue","endValue","tracksCount","rootClassName","classnames","Root","Container","TrackSvg","_","trackStart","trackEnd","trackOffset","valueToPercent","trackLeap","active","TrackLine","RailLine","stylesThumbWrapper","ThumbWrapper","Thumb","HiddenNumberInput","memo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Slider/Slider.js","sources":["../../src/Slider/Slider.tsx"],"sourcesContent":["import { forwardRef, useCallback, useEffect, useRef, useState, memo } from 'react';\nimport type * as React from 'react';\nimport classnames from 'clsx';\nimport { triggerChangeEvent } from '../utils/event.js';\nimport {\n Root,\n Container,\n ThumbWrapper,\n Thumb,\n HiddenNumberInput,\n TrackSvg,\n RailLine,\n TrackLine,\n} from './Slider.styles.js';\nimport {\n clamp,\n percentToValue,\n valueToPercent,\n roundToStep,\n getTouch,\n calculatePercent,\n preventPageScrolling,\n} from './utils.js';\n\ninterface OuterProps extends Omit<React.ComponentPropsWithoutRef<typeof Root>, 'onChange' | 'onDragStart' | 'onDragEnd'> {\n /** Флаг неактивного состояния компонента */\n disabled?: boolean;\n /** from HTMLInputElement */\n name?: string;\n /** Состояние значения компонента */\n value: number;\n /** Минимально возможное значение компонента */\n min?: number;\n /** Максимально возможное значение компонента */\n max?: number;\n /** Шаг изменения значения компонента */\n step?: number;\n /** Отображение меток шага */\n marks?: boolean;\n /** Вариант цветовой схемы */\n color?: 'default' | 'alternative';\n /** Обработчик изменения значения */\n onChange?: (event: React.ChangeEvent<HTMLInputElement>, value: number) => void;\n /** Обработчик начала захвата ползунка */\n onDragStart?: (event: MouseEvent | TouchEvent, value: number | null) => void;\n /** Обработчик завершения захвата ползунка */\n onDragEnd?: (event: MouseEvent | TouchEvent, value: number | null) => void;\n /** Переключение на вертикальный вид слайдера */\n vertical?: boolean;\n /** Кастомный обработчик значения перед его изменением */\n valueReducer?: (\n rawValue: number | null,\n props: Props,\n event: MouseEvent | TouchEvent | KeyboardEvent,\n ) => number | null;\n}\n\ninterface OuterPropsRange extends Omit<OuterProps, 'value' | 'onChange'> {\n /** или массив значений */\n value: number[];\n onChange?: (event: React.ChangeEvent<HTMLInputElement>, value: number[]) => void;\n}\n\nexport type Props = OuterProps | OuterPropsRange;\n\nconst INDEX_ATTR = 'data-index';\n\nexport function defaultValueReducer(rawValue: number | null, props: Props) {\n const { disabled, step } = props;\n\n if (disabled || rawValue === null) {\n return null;\n }\n\n if (step) {\n return roundToStep(rawValue, step);\n }\n\n return Number(rawValue.toFixed(3));\n}\n\nconst Slider = forwardRef<HTMLDivElement, Props>((props, ref) => {\n const {\n className,\n disabled,\n value: valueProp,\n min = 0,\n max = 100,\n step: stepProp,\n marks,\n onChange,\n onDragStart,\n onDragEnd,\n vertical,\n valueReducer = defaultValueReducer,\n name,\n color = 'default',\n ...otherProps\n } = props;\n\n const touchIdRef = useRef<number | undefined>(undefined);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const hiddenInputsRef = useRef<(HTMLInputElement | null)[]>([]);\n const removeListenersRef = useRef<VoidFunction | undefined>(undefined);\n const [activeIndex, setActiveIndex] = useState<number>();\n const activeIndexRef = useRef(activeIndex);\n\n if (disabled && activeIndex !== undefined) {\n setActiveIndex(undefined);\n }\n if (activeIndex !== activeIndexRef.current) {\n activeIndexRef.current = activeIndex;\n }\n\n useEffect(() => () => {\n if (removeListenersRef.current) {\n removeListenersRef.current();\n }\n }, []);\n\n const focusThumb = (index: number) => {\n if (\n !containerRef.current?.contains(document.activeElement) ||\n Number(document.activeElement?.getAttribute('data-index')) !== index\n ) {\n containerRef.current\n ?.querySelector<HTMLElement>(`[role=\"slider\"][data-index=\"${index}\"]`)\n ?.focus();\n }\n\n setActiveIndex(prevIndex => (\n prevIndex !== undefined && index !== prevIndex ? index : prevIndex\n ));\n };\n\n const emitChange = useCallback((\n event: MouseEvent | TouchEvent | KeyboardEvent,\n rawValue: number | null,\n index?: number,\n ) => {\n const currentIndex = index === undefined ? activeIndexRef.current : index;\n if (currentIndex === undefined) {\n return;\n }\n\n const newValue = valueReducer(rawValue, props, event);\n const hiddenInput = hiddenInputsRef.current[currentIndex];\n const previousValue = hiddenInput?.value;\n\n if (\n hiddenInput &&\n newValue !== null &&\n newValue !== parseFloat(previousValue ?? '') &&\n typeof onChange === 'function'\n ) {\n triggerChangeEvent(hiddenInput, newValue);\n }\n }, [props, valueReducer, onChange]);\n\n const calculateValueFromPercent = useCallback((event: MouseEvent | TouchEvent): number | null => {\n const percent = containerRef.current && calculatePercent(\n containerRef.current,\n event,\n touchIdRef.current,\n vertical,\n );\n\n return percent != null ? percentToValue(percent, min, max) : null;\n }, [vertical, min, max]);\n\n const handleClick = useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n const value = calculateValueFromPercent(event.nativeEvent);\n\n if (value == null) {\n return;\n }\n\n if (Array.isArray(valueProp)) {\n let index;\n let prevDiff: number | undefined;\n\n valueProp.forEach((val, i) => {\n const diff = Math.abs(val - value);\n\n if (prevDiff === undefined || diff < prevDiff) {\n index = i;\n prevDiff = diff;\n }\n });\n\n emitChange(event.nativeEvent, value, index);\n } else {\n emitChange(event.nativeEvent, value, 0);\n }\n }, [calculateValueFromPercent, emitChange, valueProp]);\n\n const handleDragEnd = useCallback((event: MouseEvent | TouchEvent) => {\n const value = calculateValueFromPercent(event);\n const newValue = valueReducer(value, props, event);\n\n setActiveIndex(undefined);\n\n if (removeListenersRef.current) {\n removeListenersRef.current();\n removeListenersRef.current = undefined;\n }\n\n if (typeof onDragEnd === 'function') {\n onDragEnd(event, newValue);\n }\n }, [calculateValueFromPercent, valueReducer, props, onDragEnd]);\n\n const handleMouseEnter = useCallback((event: MouseEvent) => {\n // If the slider was being interacted with but the mouse went off the window\n // and then re-entered while unclicked then end the interaction.\n if (event.buttons === 0) {\n handleDragEnd(event);\n }\n }, [handleDragEnd]);\n\n const handleMouseMove = useCallback((event: MouseEvent | TouchEvent) => {\n const value = calculateValueFromPercent(event);\n\n emitChange(event, value);\n }, [calculateValueFromPercent, emitChange]);\n\n const handleMouseLeave = useCallback((event: MouseEvent) => {\n // The mouse will have moved between the last mouse move event\n // this mouse leave event\n handleMouseMove(event);\n }, [handleMouseMove]);\n\n const handleMouseUp = useCallback((event: MouseEvent | TouchEvent) => {\n handleDragEnd(event);\n }, [handleDragEnd]);\n\n const handleMouseDown = useCallback((event: React.MouseEvent<HTMLDivElement>) => {\n event.preventDefault();\n\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR) ?? '');\n setActiveIndex(index);\n\n const value = calculateValueFromPercent(event.nativeEvent);\n const newValue = valueReducer(value, props, event.nativeEvent);\n\n document.body.addEventListener('mouseenter', handleMouseEnter);\n document.body.addEventListener('mouseleave', handleMouseLeave);\n document.body.addEventListener('mousemove', handleMouseMove);\n document.body.addEventListener('mouseup', handleMouseUp);\n\n removeListenersRef.current = () => {\n document.body.removeEventListener('mouseenter', handleMouseEnter);\n document.body.removeEventListener('mouseleave', handleMouseLeave);\n document.body.removeEventListener('mousemove', handleMouseMove);\n document.body.removeEventListener('mouseup', handleMouseUp);\n };\n\n if (typeof onDragStart === 'function') {\n onDragStart(event.nativeEvent, newValue);\n }\n }, [\n calculateValueFromPercent, valueReducer, props,\n handleMouseEnter, handleMouseLeave, handleMouseMove, handleMouseUp, onDragStart,\n ]);\n\n const handleTouchEnd = useCallback((event: TouchEvent) => {\n if (touchIdRef.current === undefined) {\n handleMouseUp(event);\n return;\n }\n const touch = getTouch(event, touchIdRef.current);\n if (touch) {\n handleMouseUp(event);\n }\n }, [handleMouseUp]);\n\n const handleTouchStart = useCallback((event: React.TouchEvent) => {\n event.preventDefault();\n const touch = event.changedTouches.item(0);\n if (touch != null) {\n touchIdRef.current = touch.identifier;\n }\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR) ?? '');\n setActiveIndex(index);\n\n const value = calculateValueFromPercent(event.nativeEvent);\n const newValue = valueReducer(value, props, event.nativeEvent);\n emitChange(event.nativeEvent, value);\n\n document.body.addEventListener('touchend', handleTouchEnd);\n\n removeListenersRef.current = () => {\n document.body.removeEventListener('touchend', handleTouchEnd);\n };\n\n if (typeof onDragStart === 'function') {\n onDragStart(event.nativeEvent, newValue);\n }\n }, [calculateValueFromPercent, emitChange, handleTouchEnd, onDragStart, props, valueReducer]);\n\n const handleTouchMove = useCallback(({ nativeEvent }: React.TouchEvent) => {\n if (touchIdRef.current === undefined) {\n handleMouseMove(nativeEvent);\n return;\n }\n\n const touch = getTouch(nativeEvent, touchIdRef.current);\n if (touch) {\n handleMouseMove(nativeEvent);\n }\n }, [handleMouseMove]);\n\n const handleKeyDown = useCallback((event: React.KeyboardEvent) => {\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR) ?? '');\n\n const currentValue = Array.isArray(valueProp) ? valueProp[index] : valueProp;\n\n if (currentValue == null) {\n return;\n }\n\n const onePercent = Math.abs((max - min) / 100);\n const step = stepProp || onePercent;\n let value;\n\n switch (event.key) {\n case 'Home':\n value = min;\n break;\n case 'End':\n value = max;\n break;\n case 'PageUp':\n value = currentValue + onePercent * 10;\n break;\n case 'PageDown':\n value = currentValue - onePercent * 10;\n break;\n case 'ArrowRight':\n case 'ArrowUp':\n value = currentValue + step;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n value = currentValue - step;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n\n value = clamp(value, min, max);\n\n emitChange(event.nativeEvent, value, index);\n }, [emitChange, max, min, stepProp, valueProp]);\n\n const handleChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange) {\n const index = parseFloat(event.currentTarget.getAttribute(INDEX_ATTR) ?? '');\n\n let newValue;\n\n if (Array.isArray(valueProp)) {\n newValue = [...valueProp];\n const eventValue = parseFloat(event.target.value);\n newValue[index] = eventValue;\n\n newValue.sort((a, b) => a - b);\n\n focusThumb(newValue.indexOf(eventValue));\n } else {\n newValue = parseFloat(event.target.value);\n }\n\n onChange(event, newValue as number & number[]);\n }\n }, [onChange, valueProp]);\n\n const handleRef = (node: HTMLDivElement | null) => {\n const nextContainer = node;\n const prevContainer = containerRef.current;\n\n if (prevContainer !== nextContainer) {\n if (prevContainer) {\n prevContainer.removeEventListener('touchstart', preventPageScrolling);\n }\n if (nextContainer) {\n nextContainer.addEventListener('touchstart', preventPageScrolling, { passive: false });\n }\n }\n\n containerRef.current = nextContainer;\n };\n\n const handleInputRef = useCallback((node: HTMLInputElement | null) => {\n if (node) {\n const index = node.getAttribute(INDEX_ATTR);\n\n if (index != null) {\n hiddenInputsRef.current[parseInt(index, 10)] = node;\n }\n }\n }, []);\n\n const calculateTrackPoints = (offset: number, leap: number) => {\n if (vertical) {\n return {\n x1: 1,\n y1: 100 - offset,\n x2: 1,\n y2: 100 - leap,\n };\n }\n\n return {\n x1: offset,\n y1: 1,\n x2: leap,\n y2: 1,\n };\n };\n\n const values = Array.isArray(valueProp) ? valueProp : [valueProp == null ? min : valueProp];\n\n const startValue = Array.isArray(valueProp) ? valueProp[0] ?? min : min;\n const endValue = values[values.length - 1] ?? min;\n\n const tracksCount = marks && stepProp ? (((max - min) / stepProp)) : undefined;\n\n const rootClassName = classnames(\n className,\n {\n vertical,\n disabled,\n activated: activeIndex !== undefined,\n discrete: tracksCount && stepProp != null ? 'discrete' : undefined,\n alternative: color === 'alternative',\n },\n );\n\n return (\n <Root\n className={rootClassName}\n onClick={handleClick}\n {...otherProps}\n ref={ref}\n >\n <Container ref={handleRef} className=\"ui-slider__container\">\n <TrackSvg viewBox={vertical ? '0 0 2 100' : '0 0 100 2'} preserveAspectRatio=\"none\" className=\"ui-slider__track\">\n {\n tracksCount && stepProp != null\n ? Array.from({ length: tracksCount }).map((_, i) => {\n const trackStart = min + i * stepProp;\n const trackEnd = trackStart + stepProp;\n const trackOffset = valueToPercent(trackStart, min, max) + (i === 0 ? 0 : 0.2);\n const trackLeap = valueToPercent(trackEnd, min, max) -\n (i === tracksCount - 1 ? 0 : 0.2);\n const active = trackStart >= startValue && trackEnd <= endValue;\n return (\n <TrackLine\n // eslint-disable-next-line react/no-array-index-key\n key={i}\n className={classnames({ active })}\n {...calculateTrackPoints(trackOffset, trackLeap)}\n />\n );\n })\n : (\n <>\n <RailLine\n {...calculateTrackPoints(0, 100)}\n />\n <TrackLine\n className=\"active\"\n {...calculateTrackPoints(\n valueToPercent(startValue, min, max),\n valueToPercent(endValue, min, max),\n )}\n />\n </>\n )\n }\n </TrackSvg>\n {\n values.map((val, i) => {\n const percent = clamp(valueToPercent(val, min, max));\n\n const stylesThumbWrapper = {\n [vertical ? 'bottom' : 'left']: `${percent}%`,\n };\n\n return (\n <ThumbWrapper\n // eslint-disable-next-line react/no-array-index-key\n key={i}\n className={classnames({ activated: activeIndex === i })}\n style={stylesThumbWrapper}\n onMouseDown={handleMouseDown}\n onTouchStartCapture={handleTouchStart}\n onTouchMove={handleTouchMove}\n data-index={i}\n >\n <Thumb\n disabled={disabled}\n onKeyDown={handleKeyDown}\n onTouchStartCapture={handleTouchStart}\n onTouchMove={handleTouchMove}\n type=\"button\"\n role=\"slider\"\n data-index={i}\n className=\"ui-slider__thumb\"\n />\n <HiddenNumberInput\n type=\"number\"\n name={name}\n data-index={i}\n value={val}\n onChange={handleChange}\n ref={handleInputRef}\n />\n </ThumbWrapper>\n );\n })\n }\n </Container>\n </Root>\n );\n});\n\nexport default memo(Slider);\n"],"names":["INDEX_ATTR","defaultValueReducer","rawValue","props","disabled","step","roundToStep","Number","Slider","forwardRef","ref","_valueProp_","_values_","className","valueProp","min","max","stepProp","marks","onChange","onDragStart","onDragEnd","vertical","valueReducer","name","color","otherProps","touchIdRef","useRef","undefined","containerRef","hiddenInputsRef","removeListenersRef","activeIndex","setActiveIndex","useState","activeIndexRef","useEffect","focusThumb","index","_containerRef_current","_document_activeElement","document","_containerRef_current_querySelector","prevIndex","emitChange","useCallback","event","currentIndex","newValue","hiddenInput","previousValue","parseFloat","triggerChangeEvent","calculateValueFromPercent","percent","calculatePercent","percentToValue","handleClick","value","Array","prevDiff","val","i","diff","Math","handleDragEnd","handleMouseEnter","handleMouseMove","handleMouseLeave","handleMouseUp","handleMouseDown","_event_currentTarget_getAttribute","handleTouchEnd","touch","getTouch","handleTouchStart","handleTouchMove","nativeEvent","handleKeyDown","currentValue","onePercent","clamp","handleChange","eventValue","a","b","handleRef","node","nextContainer","prevContainer","preventPageScrolling","handleInputRef","parseInt","calculateTrackPoints","offset","leap","values","startValue","endValue","tracksCount","rootClassName","classnames","Root","Container","TrackSvg","_","trackStart","trackEnd","trackOffset","valueToPercent","trackLeap","active","TrackLine","RailLine","stylesThumbWrapper","ThumbWrapper","Thumb","HiddenNumberInput","memo"],"mappings":"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"}
|
package/dist/Slider/utils.js
CHANGED
|
@@ -22,7 +22,7 @@ function getOffset(node) {
|
|
|
22
22
|
function getTouch(event, touchId) {
|
|
23
23
|
for(let i = 0; i < event.changedTouches.length; i += 1){
|
|
24
24
|
const touch = event.changedTouches[i];
|
|
25
|
-
if (touch.identifier === touchId) return touch;
|
|
25
|
+
if ((null == touch ? void 0 : touch.identifier) === touchId) return touch;
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
const isTouchEvent = (event)=>Boolean(event.changedTouches);
|
package/dist/Slider/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slider/utils.js","sources":["../../src/Slider/utils.ts"],"sourcesContent":["export function clamp(value: number, min: number = 0, max: number = 100): number {\n return Math.min(Math.max(value, min), max);\n}\n\nexport function percentToValue(percent: number, min: number, max: number): number {\n return ((max - min) * percent) / 100 + min;\n}\n\nexport function valueToPercent(value: number, min: number, max: number) {\n const clampedValue = clamp(value, min, max);\n return ((clampedValue - min) * 100) / (max - min);\n}\n\nexport function roundToStep(value: number, step: number) {\n return Math.round(value / step) * step;\n}\n\nexport function getOffset(node: Element) {\n const { pageYOffset, pageXOffset } = window;\n const { left, bottom } = node.getBoundingClientRect();\n\n return {\n bottom: bottom + pageYOffset,\n left: left + pageXOffset,\n };\n}\n\nexport function getTouch(event: TouchEvent, touchId: number): Touch | undefined {\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < event.changedTouches.length; i += 1) {\n const touch = event.changedTouches[i];\n if (touch
|
|
1
|
+
{"version":3,"file":"Slider/utils.js","sources":["../../src/Slider/utils.ts"],"sourcesContent":["export function clamp(value: number, min: number = 0, max: number = 100): number {\n return Math.min(Math.max(value, min), max);\n}\n\nexport function percentToValue(percent: number, min: number, max: number): number {\n return ((max - min) * percent) / 100 + min;\n}\n\nexport function valueToPercent(value: number, min: number, max: number) {\n const clampedValue = clamp(value, min, max);\n return ((clampedValue - min) * 100) / (max - min);\n}\n\nexport function roundToStep(value: number, step: number) {\n return Math.round(value / step) * step;\n}\n\nexport function getOffset(node: Element) {\n const { pageYOffset, pageXOffset } = window;\n const { left, bottom } = node.getBoundingClientRect();\n\n return {\n bottom: bottom + pageYOffset,\n left: left + pageXOffset,\n };\n}\n\nexport function getTouch(event: TouchEvent, touchId: number): Touch | undefined {\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < event.changedTouches.length; i += 1) {\n const touch = event.changedTouches[i];\n if (touch?.identifier === touchId) {\n return touch;\n }\n }\n return undefined;\n}\n\nconst isTouchEvent = (event: TouchEvent | MouseEvent): event is TouchEvent => (\n Boolean((event as TouchEvent).changedTouches)\n);\n\ninterface IPosition {\n x: number;\n y: number;\n}\nexport function getMousePosition(\n event: TouchEvent | MouseEvent,\n touchId: number | undefined,\n): IPosition | null {\n if (isTouchEvent(event)) {\n const touch = touchId !== undefined ? getTouch(event, touchId) : undefined;\n\n if (touch) {\n return {\n x: touch.pageX,\n y: touch.pageY,\n };\n }\n } else {\n return {\n x: event.pageX,\n y: event.pageY,\n };\n }\n return null;\n}\n\nexport function calculatePercent(\n node: Element,\n event: TouchEvent | MouseEvent,\n touchId: number | undefined,\n isVertical: boolean = false,\n isRtl: boolean = false,\n): number | null {\n const { width, height } = node.getBoundingClientRect();\n const { bottom, left } = getOffset(node);\n const pos = getMousePosition(event, touchId);\n if (!pos) return null;\n\n const value = isVertical ? bottom - pos.y : pos.x - left;\n const onePercent = (isVertical ? height : width) / 100;\n\n return isRtl && !isVertical ? 100 - clamp(value / onePercent) : clamp(value / onePercent);\n}\n\nexport function preventPageScrolling(event: Event) {\n event.preventDefault();\n}\n"],"names":["clamp","value","min","max","Math","percentToValue","percent","valueToPercent","clampedValue","roundToStep","step","getOffset","node","pageYOffset","pageXOffset","window","left","bottom","getTouch","event","touchId","i","touch","isTouchEvent","Boolean","getMousePosition","undefined","calculatePercent","isVertical","isRtl","width","height","pos","onePercent","preventPageScrolling"],"mappings":"AAAO,SAASA,MAAMC,KAAa,EAAEC,MAAc,CAAC,EAAEC,MAAc,GAAG;IACrE,OAAOC,KAAK,GAAG,CAACA,KAAK,GAAG,CAACH,OAAOC,MAAMC;AACxC;AAEO,SAASE,eAAeC,OAAe,EAAEJ,GAAW,EAAEC,GAAW;IACtE,OAASA,AAAAA,CAAAA,MAAMD,GAAE,IAAKI,UAAW,MAAMJ;AACzC;AAEO,SAASK,eAAeN,KAAa,EAAEC,GAAW,EAAEC,GAAW;IACpE,MAAMK,eAAeR,MAAMC,OAAOC,KAAKC;IACvC,OAASK,AAAAA,CAAAA,eAAeN,GAAE,IAAK,MAAQC,CAAAA,MAAMD,GAAE;AACjD;AAEO,SAASO,YAAYR,KAAa,EAAES,IAAY;IACrD,OAAON,KAAK,KAAK,CAACH,QAAQS,QAAQA;AACpC;AAEO,SAASC,UAAUC,IAAa;IACrC,MAAM,EAAEC,WAAW,EAAEC,WAAW,EAAE,GAAGC;IACrC,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAE,GAAGL,KAAK,qBAAqB;IAEnD,OAAO;QACL,QAAQK,SAASJ;QACjB,MAAMG,OAAOF;IACf;AACF;AAEO,SAASI,SAASC,KAAiB,EAAEC,OAAe;IAEzD,IAAK,IAAIC,IAAI,GAAGA,IAAIF,MAAM,cAAc,CAAC,MAAM,EAAEE,KAAK,EAAG;QACvD,MAAMC,QAAQH,MAAM,cAAc,CAACE,EAAE;QACrC,IAAIC,AAAAA,CAAAA,QAAAA,QAAAA,KAAAA,IAAAA,MAAO,UAAU,AAAD,MAAMF,SACxB,OAAOE;IAEX;AAEF;AAEA,MAAMC,eAAe,CAACJ,QACpBK,QAASL,MAAqB,cAAc;AAOvC,SAASM,iBACdN,KAA8B,EAC9BC,OAA2B;IAE3B,KAAIG,aAAaJ,QAUf,OAAO;QACL,GAAGA,MAAM,KAAK;QACd,GAAGA,MAAM,KAAK;IAChB;IAbuB;QACvB,MAAMG,QAAQF,AAAYM,WAAZN,UAAwBF,SAASC,OAAOC,WAAWM;QAEjE,IAAIJ,OACF,OAAO;YACL,GAAGA,MAAM,KAAK;YACd,GAAGA,MAAM,KAAK;QAChB;IAEJ;IAMA,OAAO;AACT;AAEO,SAASK,iBACdf,IAAa,EACbO,KAA8B,EAC9BC,OAA2B,EAC3BQ,aAAsB,KAAK,EAC3BC,QAAiB,KAAK;IAEtB,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAE,GAAGnB,KAAK,qBAAqB;IACpD,MAAM,EAAEK,MAAM,EAAED,IAAI,EAAE,GAAGL,UAAUC;IACnC,MAAMoB,MAAMP,iBAAiBN,OAAOC;IACpC,IAAI,CAACY,KAAK,OAAO;IAEjB,MAAM/B,QAAQ2B,aAAaX,SAASe,IAAI,CAAC,GAAGA,IAAI,CAAC,GAAGhB;IACpD,MAAMiB,aAAcL,AAAAA,CAAAA,aAAaG,SAASD,KAAI,IAAK;IAEnD,OAAOD,SAAS,CAACD,aAAa,MAAM5B,MAAMC,QAAQgC,cAAcjC,MAAMC,QAAQgC;AAChF;AAEO,SAASC,qBAAqBf,KAAY;IAC/CA,MAAM,cAAc;AACtB"}
|