@finam/web-ui-kit-components 3.27.3 → 3.28.0

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 CHANGED
@@ -1,3 +1,5 @@
1
+ ## 3.28.0
2
+ * Добавлен компонент `SecurityIcon`
1
3
  ## 3.27.3
2
4
  * Исправлено зацикливание рендера в DraggablePopover
3
5
  ## 3.27.2
@@ -0,0 +1,20 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ import { Root } from './SecurityIcon.styles.js';
3
+ import type { IconTypeProps } from './types.js';
4
+ export interface Props extends ComponentPropsWithoutRef<typeof Root>, IconTypeProps {
5
+ /** Шаблон URL сервиса иконок, например `https://host/$type/$size/$id$mult.png` */
6
+ urlTemplate?: string;
7
+ /** Готовый URL картинки, имеет приоритет над urlTemplate */
8
+ imgSrc?: string;
9
+ /** Название, используется для alt/title и буквы-заглушки */
10
+ name?: string;
11
+ /** Размер иконки в пикселях */
12
+ size?: number;
13
+ /** Показывать заглушку, если картинка не загрузилась */
14
+ withPlaceholder?: boolean;
15
+ /** Дополнительное содержимое поверх иконки, например бейдж */
16
+ children?: ReactNode;
17
+ }
18
+ declare const _default: import("react").MemoExoticComponent<({ className, urlTemplate, imgSrc, name, size, withPlaceholder, children, type, iconId, style, ...props }: Props) => import("react/jsx-runtime").JSX.Element | null>;
19
+ export default _default;
20
+ //# sourceMappingURL=SecurityIcon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityIcon.d.ts","sourceRoot":"","sources":["../../src/SecurityIcon/SecurityIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAC;AAG5E,OAAO,EAAO,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,WAAW,KAAM,SAAQ,wBAAwB,CAAC,OAAO,IAAI,CAAC,EAAE,aAAa;IACjF,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;uKAcE,KAAK;AA+CR,wBAAkC"}
@@ -0,0 +1,30 @@
1
+ import { __rest } from "tslib";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { memo, useState } from 'react';
4
+ import classNames from 'clsx';
5
+ import Typography from '../Typography/index.js';
6
+ import { Img, Root } from './SecurityIcon.styles.js';
7
+ import { DEFAULT_SIZE, LARGE_PLACEHOLDER_SIZE } from './constants.js';
8
+ import { buildIconUrl, resolveIconSize } from './utils.js';
9
+ const SecurityIcon = (_a) => {
10
+ var { className, urlTemplate, imgSrc, name, size = DEFAULT_SIZE, withPlaceholder = true, children, type, iconId, style } = _a, props = __rest(_a, ["className", "urlTemplate", "imgSrc", "name", "size", "withPlaceholder", "children", "type", "iconId", "style"]);
11
+ const [imageLoaded, setImageLoaded] = useState(false);
12
+ const [imageLoadError, setImageLoadError] = useState(false);
13
+ const handleImgLoad = () => {
14
+ setImageLoaded(true);
15
+ };
16
+ const handleImgError = () => {
17
+ setImageLoadError(true);
18
+ };
19
+ if (!withPlaceholder && imageLoadError) {
20
+ return null;
21
+ }
22
+ const src = imgSrc ||
23
+ (urlTemplate && type && iconId != null
24
+ ? buildIconUrl(urlTemplate, type, iconId, resolveIconSize(size))
25
+ : undefined);
26
+ const imageAvailable = Boolean(src) && !imageLoadError;
27
+ return (_jsxs(Root, Object.assign({}, props, { style: Object.assign({ width: `${size}px`, height: `${size}px` }, style), className: classNames(className, { imageLoaded: imageAvailable && imageLoaded }), children: [children, imageAvailable ? (_jsx(Img, { className: classNames({ imageLoaded, fromImage: Boolean(imgSrc) }), src: src, alt: name, title: name, onLoad: handleImgLoad, onError: handleImgError })) : (_jsx(Typography, { variant: size < LARGE_PLACEHOLDER_SIZE ? 'caption12' : 'body16', children: name === null || name === void 0 ? void 0 : name.charAt(0) }))] })));
28
+ };
29
+ export default memo(SecurityIcon);
30
+ //# sourceMappingURL=SecurityIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityIcon.js","sourceRoot":"","sources":["../../src/SecurityIcon/SecurityIcon.tsx"],"names":[],"mappings":";;AAAA,OAAO,EAAuC,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5E,OAAO,UAAU,MAAM,MAAM,CAAC;AAC9B,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAiB3D,MAAM,YAAY,GAAG,CAAC,EAYd,EAAE,EAAE;QAZU,EACpB,SAAS,EACT,WAAW,EACX,MAAM,EACN,IAAI,EACJ,IAAI,GAAG,YAAY,EACnB,eAAe,GAAG,IAAI,EACtB,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,KAAK,OAEC,EADH,KAAK,cAXY,gHAYrB,CADS;IAER,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5D,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,cAAc,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,IAAI,CAAC,eAAe,IAAI,cAAc,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,MAAM;QAChB,CAAC,WAAW,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;YACpC,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;YAChE,CAAC,CAAC,SAAS,CAAC,CAAC;IACjB,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;IAEvD,OAAO,CACL,MAAC,IAAI,oBACC,KAAK,IACT,KAAK,kBAAI,KAAK,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI,IAAK,KAAK,GAC1D,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,cAAc,IAAI,WAAW,EAAE,CAAC,aAE/E,QAAQ,EACR,cAAc,CAAC,CAAC,CAAC,CAChB,KAAC,GAAG,IACF,SAAS,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAClE,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,IAAI,EACT,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,cAAc,GACvB,CACH,CAAC,CAAC,CAAC,CACF,KAAC,UAAU,IAAC,OAAO,EAAE,IAAI,GAAG,sBAAsB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,YACxE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAC,CAAC,CAAC,GACL,CACd,KACI,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC,YAAY,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ .ui_components_r1fjyzu5{flex-shrink:0;display:flex;justify-content:center;align-items:center;position:relative;background:var(--ui-colors-bg-base);background-size:cover;background-repeat:no-repeat;overflow:visible;}.ui_components_r1fjyzu5.imageLoaded{background:transparent;border-radius:0;}
2
+ .ui_components_i11iqzt2{width:100%;height:100%;visibility:hidden;}.ui_components_i11iqzt2.imageLoaded{visibility:visible;}.ui_components_i11iqzt2.fromImage{border-radius:50%;object-fit:cover;}
@@ -0,0 +1,5 @@
1
+ export declare const Root: {
2
+ __wyw_meta: unknown;
3
+ } & import("react").ForwardRefExoticComponent<import("../Avatar/Avatar.js").Props & import("react").RefAttributes<HTMLDivElement>>;
4
+ export declare const Img: import("@linaria/react").StyledComponent<import("react").ClassAttributes<HTMLImageElement> & import("react").ImgHTMLAttributes<HTMLImageElement> & Record<never, unknown>>;
5
+ //# sourceMappingURL=SecurityIcon.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityIcon.styles.d.ts","sourceRoot":"","sources":["../../src/SecurityIcon/SecurityIcon.styles.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,IAAI;;kIAehB,CAAC;AAEF,eAAO,MAAM,GAAG,4KAaf,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { styled } from '@linaria/react';
2
+ import Avatar from '../Avatar/index.js';
3
+ const _exp = () => (Avatar);
4
+ export const Root = /*#__PURE__*/styled(_exp())({
5
+ name: "Root",
6
+ class: "ui_components_r1fjyzu5",
7
+ propsAsIs: true
8
+ });
9
+ export const Img = /*#__PURE__*/styled('img')({
10
+ name: "Img",
11
+ class: "ui_components_i11iqzt2",
12
+ propsAsIs: false
13
+ });
14
+ //# sourceMappingURL=SecurityIcon.styles.js.map
15
+
16
+ import "./SecurityIcon.styles.css";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityIcon.styles.js","sourceRoot":"","sources":["../../src/SecurityIcon/SecurityIcon.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC/D,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;;;;;;gBAMlB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;;;;;;;;;CASpD,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;CAa5B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const AVAILABLE_SIZES: number[];
2
+ export declare const DEFAULT_SIZE: number;
3
+ export declare const MAX_PIXEL_RATIO = 3;
4
+ export declare const LARGE_PLACEHOLDER_SIZE = 32;
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/SecurityIcon/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,UAAuB,CAAC;AAEpD,eAAO,MAAM,YAAY,QAAqB,CAAC;AAE/C,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,eAAO,MAAM,sBAAsB,KAAK,CAAC"}
@@ -0,0 +1,5 @@
1
+ export const AVAILABLE_SIZES = [24, 32, 40, 48, 64];
2
+ export const DEFAULT_SIZE = AVAILABLE_SIZES[1];
3
+ export const MAX_PIXEL_RATIO = 3;
4
+ export const LARGE_PLACEHOLDER_SIZE = 32;
5
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/SecurityIcon/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AAEjC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { default } from './SecurityIcon.js';
2
+ export type { SecurityIconType, IconTypeProps } from './types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/SecurityIcon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default } from './SecurityIcon.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/SecurityIcon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type SecurityIconType = 'security' | 'country' | 'currency' | 'issuer';
2
+ export interface IconTypeProps {
3
+ /** Тип иконки */
4
+ type?: SecurityIconType;
5
+ /** Идентификатор сущности */
6
+ iconId?: string | number;
7
+ }
8
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/SecurityIcon/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE9E,MAAM,WAAW,aAAa;IAC5B,iBAAiB;IACjB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/SecurityIcon/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { SecurityIconType } from './types.js';
2
+ export declare const resolveIconSize: (size: number) => number;
3
+ export declare const buildIconUrl: (urlTemplate: string, type: SecurityIconType, id: string | number, size: number) => string;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +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;AAenD,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,WAG3C,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,aAAa,MAAM,EACnB,MAAM,gBAAgB,EACtB,IAAI,MAAM,GAAG,MAAM,EACnB,MAAM,MAAM,WAOb,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { AVAILABLE_SIZES, MAX_PIXEL_RATIO } from './constants.js';
2
+ const getPixelRatioSuffix = () => {
3
+ var _a;
4
+ if (typeof window === 'undefined') {
5
+ return '';
6
+ }
7
+ const pixelRatio = Math.min(MAX_PIXEL_RATIO, Math.ceil(Math.max(1, (_a = window.devicePixelRatio) !== null && _a !== void 0 ? _a : 1)));
8
+ return pixelRatio > 1 ? `@${pixelRatio}x` : '';
9
+ };
10
+ export const resolveIconSize = (size) => {
11
+ var _a;
12
+ return ((_a = AVAILABLE_SIZES.find(availableSize => availableSize >= size)) !== null && _a !== void 0 ? _a : AVAILABLE_SIZES[AVAILABLE_SIZES.length - 1]);
13
+ };
14
+ export const buildIconUrl = (urlTemplate, type, id, size) => (urlTemplate
15
+ .replace('$type', type)
16
+ .replace('$size', size.toString())
17
+ .replace('$id', typeof id === 'number' ? id.toString() : id)
18
+ .replace('$mult', getPixelRatioSuffix()));
19
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/SecurityIcon/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGlE,MAAM,mBAAmB,GAAG,GAAG,EAAE;;IAC/B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,eAAe,EACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAA,MAAM,CAAC,gBAAgB,mCAAI,CAAC,CAAC,CAAC,CACrD,CAAC;IAEF,OAAO,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE;;IAAC,OAAA,CAC/C,MAAA,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,aAAa,IAAI,IAAI,CAAC,mCAC5D,eAAe,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAC5C,CAAA;CAAA,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,WAAmB,EACnB,IAAsB,EACtB,EAAmB,EACnB,IAAY,EACZ,EAAE,CAAC,CACH,WAAW;KACR,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;KACtB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3D,OAAO,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAC3C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finam/web-ui-kit-components",
3
- "version": "3.27.3",
3
+ "version": "3.28.0",
4
4
  "description": "Components library for web-ui-kit",
5
5
  "author": "",
6
6
  "license": "ISC",