@sima-land/ui-nucleons 45.0.0-alpha.6 → 45.0.0-alpha.7
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/avatar/avatar.d.ts +8 -0
- package/avatar/avatar.js +26 -0
- package/avatar/avatar.js.map +1 -0
- package/avatar/avatar.module.scss +13 -36
- package/avatar/index.d.ts +3 -30
- package/avatar/index.js +8 -41
- package/avatar/index.js.map +1 -1
- package/avatar/types.d.ts +18 -0
- package/avatar/types.js +3 -0
- package/avatar/types.js.map +1 -0
- package/avatar/utils.d.ts +28 -4
- package/avatar/utils.js +76 -13
- package/avatar/utils.js.map +1 -1
- package/avatar/utils.module.scss +9 -0
- package/button/button-util.scss +46 -0
- package/button/button.module.scss +17 -26
- package/button/index.d.ts +12 -2
- package/button/index.js +1 -1
- package/button/index.js.map +1 -1
- package/colors/index.d.ts +6 -4
- package/colors/index.js +6 -3
- package/colors/index.js.map +1 -1
- package/colors.scss +2 -0
- package/expandable/expandable-group.module.scss +1 -5
- package/expandable/index.d.ts +4 -34
- package/expandable/index.js +77 -30
- package/expandable/index.js.map +1 -1
- package/expandable/types.d.ts +39 -0
- package/expandable/types.js +3 -0
- package/expandable/types.js.map +1 -0
- package/expandable/utils.d.ts +22 -23
- package/expandable/utils.js +65 -80
- package/expandable/utils.js.map +1 -1
- package/package.json +1 -1
- package/styling/colors.d.ts +5 -5
- package/avatar/user.d.ts +0 -10
- package/avatar/user.js +0 -41
- package/avatar/user.js.map +0 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { AvatarProps } from '.';
|
|
3
|
+
/**
|
|
4
|
+
* Компонент аватара.
|
|
5
|
+
* @param props Свойства компонента.
|
|
6
|
+
* @return Элемент.
|
|
7
|
+
*/
|
|
8
|
+
export declare function Avatar({ src, className, style, children, 'data-testid': testId, }: AvatarProps): JSX.Element;
|
package/avatar/avatar.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Avatar = void 0;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const react_1 = require("react");
|
|
9
|
+
const bind_1 = __importDefault(require("classnames/bind"));
|
|
10
|
+
const avatar_module_scss_1 = __importDefault(require("./avatar.module.scss"));
|
|
11
|
+
const cx = bind_1.default.bind(avatar_module_scss_1.default);
|
|
12
|
+
/**
|
|
13
|
+
* Компонент аватара.
|
|
14
|
+
* @param props Свойства компонента.
|
|
15
|
+
* @return Элемент.
|
|
16
|
+
*/
|
|
17
|
+
function Avatar({ src, className, style, children, 'data-testid': testId = 'avatar', }) {
|
|
18
|
+
const [needImage, toggleNeedImage] = (0, react_1.useState)(() => Boolean(src));
|
|
19
|
+
(0, react_1.useEffect)(() => {
|
|
20
|
+
toggleNeedImage(Boolean(src));
|
|
21
|
+
}, [src]);
|
|
22
|
+
const rootClassName = cx('root', needImage && 'image-overlay', className);
|
|
23
|
+
return ((0, jsx_runtime_1.jsxs)("span", { className: rootClassName, style: style, "data-testid": testId, children: [needImage && ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)("img", { src: src, alt: '', className: cx('layer', 'image'), onError: () => toggleNeedImage(false) }) })), !needImage && (0, jsx_runtime_1.jsx)("span", { className: cx('content'), children: children })] }));
|
|
24
|
+
}
|
|
25
|
+
exports.Avatar = Avatar;
|
|
26
|
+
//# sourceMappingURL=avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../src/avatar/avatar.tsx"],"names":[],"mappings":";;;;;;;AAAA,iCAA4C;AAC5C,2DAAyC;AACzC,8EAA0C;AAG1C,MAAM,EAAE,GAAG,cAAU,CAAC,IAAI,CAAC,4BAAM,CAAC,CAAC;AAEnC;;;;GAIG;AACH,SAAgB,MAAM,CAAC,EACrB,GAAG,EACH,SAAS,EACT,KAAK,EACL,QAAQ,EACR,aAAa,EAAE,MAAM,GAAG,QAAQ,GACpB;IACZ,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAElE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,EAAE,SAAS,IAAI,eAAe,EAAE,SAAS,CAAC,CAAC;IAE1E,OAAO,CACL,kCAAM,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,iBAAe,MAAM,aAE9D,SAAS,IAAI,CACZ,2DACE,gCACE,GAAG,EAAE,GAAG,EACR,GAAG,EAAC,EAAE,EACN,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,GACrC,GACD,CACJ,EAGA,CAAC,SAAS,IAAI,iCAAM,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,YAAG,QAAQ,GAAQ,IAC3D,CACR,CAAC;AACJ,CAAC;AAjCD,wBAiCC"}
|
|
@@ -1,16 +1,4 @@
|
|
|
1
|
-
@use '
|
|
2
|
-
|
|
3
|
-
$sizes: 40, 48, 56, 64, 72, 80, 104;
|
|
4
|
-
|
|
5
|
-
$textSizes: (
|
|
6
|
-
40: 12,
|
|
7
|
-
48: 16,
|
|
8
|
-
56: 16,
|
|
9
|
-
64: 16,
|
|
10
|
-
72: 16,
|
|
11
|
-
80: 16,
|
|
12
|
-
104: 24,
|
|
13
|
-
);
|
|
1
|
+
@use '../colors';
|
|
14
2
|
|
|
15
3
|
@mixin layer {
|
|
16
4
|
position: absolute;
|
|
@@ -29,49 +17,38 @@ $textSizes: (
|
|
|
29
17
|
flex-shrink: 0;
|
|
30
18
|
border-radius: 50%;
|
|
31
19
|
overflow: hidden;
|
|
20
|
+
width: var(--avatar-size, 72px);
|
|
21
|
+
height: var(--avatar-size, 72px);
|
|
22
|
+
color: var(--avatar-text-color, #{colors.$basic-gray87});
|
|
32
23
|
&::before {
|
|
33
24
|
@include layer;
|
|
34
25
|
content: '';
|
|
35
26
|
display: block;
|
|
36
|
-
background: var(--avatar-color,
|
|
27
|
+
background: var(--avatar-color, #{colors.$basic-gray4});
|
|
37
28
|
opacity: var(--avatar-color-opacity, 1);
|
|
38
29
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
.monogram {
|
|
46
|
-
font-size: #{map.get($textSizes, $size)}px;
|
|
47
|
-
}
|
|
30
|
+
&.image-overlay::after {
|
|
31
|
+
@include layer;
|
|
32
|
+
content: '';
|
|
33
|
+
pointer-events: none;
|
|
34
|
+
background: #000;
|
|
35
|
+
opacity: 0.04;
|
|
48
36
|
}
|
|
49
37
|
}
|
|
50
38
|
|
|
51
|
-
.
|
|
39
|
+
.content {
|
|
40
|
+
font-size: calc(var(--avatar-size, 72px) / 3);
|
|
52
41
|
position: relative;
|
|
53
|
-
padding: 0 8px;
|
|
54
42
|
font-weight: 600;
|
|
55
43
|
white-space: nowrap;
|
|
56
|
-
overflow: hidden;
|
|
57
|
-
text-overflow: ellipsis;
|
|
58
44
|
|
|
59
45
|
// ВАЖНО: чтобы например обертка в виде ссылки не накидывала text-decoration: underline
|
|
60
46
|
text-decoration: none;
|
|
61
47
|
}
|
|
62
48
|
|
|
63
|
-
.icon {
|
|
64
|
-
position: relative;
|
|
65
|
-
fill: currentColor;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
49
|
.layer {
|
|
69
50
|
@include layer;
|
|
70
51
|
&.image {
|
|
71
52
|
object-fit: cover;
|
|
72
53
|
}
|
|
73
|
-
&.image-overlay {
|
|
74
|
-
background: #000;
|
|
75
|
-
opacity: 0.04;
|
|
76
|
-
}
|
|
77
54
|
}
|
package/avatar/index.d.ts
CHANGED
|
@@ -1,30 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
/** Цвет аватара без картинки. */
|
|
5
|
-
bgColor?: Token;
|
|
6
|
-
/** Цвет аватара без картинки. */
|
|
7
|
-
bgOpacity?: number;
|
|
8
|
-
/** Класс. */
|
|
9
|
-
className?: string;
|
|
10
|
-
/** Ссылка на картинку. */
|
|
11
|
-
imageUrl?: string;
|
|
12
|
-
/** Монограмма без картинки. */
|
|
13
|
-
monogram?: string;
|
|
14
|
-
/** Размер аватара. */
|
|
15
|
-
size?: number;
|
|
16
|
-
/** Стиль элементов rect/image, формирующего маску "super ellipse". */
|
|
17
|
-
style?: CSSProperties;
|
|
18
|
-
/** Цвет текста без картинки. */
|
|
19
|
-
textColor?: Token;
|
|
20
|
-
/** Текст без картинки. */
|
|
21
|
-
title?: string;
|
|
22
|
-
/** Идентификатор для систем автоматизированного тестирования. */
|
|
23
|
-
'data-testid'?: string;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Компонент аватара.
|
|
27
|
-
* @param props Свойства компонента.
|
|
28
|
-
* @return Элемент.
|
|
29
|
-
*/
|
|
30
|
-
export declare function Avatar({ size: sizeProp, imageUrl, bgColor, bgOpacity, textColor, title, monogram, className, style, 'data-testid': testId, }: AvatarProps): JSX.Element;
|
|
1
|
+
export type { AvatarProps, AvatarStyle } from './types';
|
|
2
|
+
export { Avatar } from './avatar';
|
|
3
|
+
export { getNameInitials, getAvatarIconProps, getUserAvatarProps, getUserAvatarColor, } from './utils';
|
package/avatar/index.js
CHANGED
|
@@ -1,44 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Avatar = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const avatar_module_scss_1 = __importDefault(require("./avatar.module.scss"));
|
|
15
|
-
const SIZES = [40, 48, 56, 64, 72, 80, 104];
|
|
16
|
-
const ICON_SIZES = {
|
|
17
|
-
40: 16,
|
|
18
|
-
48: 24,
|
|
19
|
-
56: 24,
|
|
20
|
-
64: 24,
|
|
21
|
-
72: 24,
|
|
22
|
-
80: 24,
|
|
23
|
-
104: 24,
|
|
24
|
-
};
|
|
25
|
-
const cx = bind_1.default.bind(avatar_module_scss_1.default);
|
|
26
|
-
/**
|
|
27
|
-
* Компонент аватара.
|
|
28
|
-
* @param props Свойства компонента.
|
|
29
|
-
* @return Элемент.
|
|
30
|
-
*/
|
|
31
|
-
function Avatar({ size: sizeProp = 72, imageUrl, bgColor = 'basic-gray4', bgOpacity = 1, textColor = 'basic-gray87', title, monogram = (0, utils_1.getMonogram)(title), className, style, 'data-testid': testId = 'avatar', }) {
|
|
32
|
-
const [needImage, toggleImage] = (0, react_1.useState)(() => Boolean(imageUrl));
|
|
33
|
-
(0, react_1.useEffect)(() => {
|
|
34
|
-
toggleImage(Boolean(imageUrl));
|
|
35
|
-
}, [imageUrl]);
|
|
36
|
-
const size = SIZES.includes(sizeProp) ? sizeProp : 72;
|
|
37
|
-
return ((0, jsx_runtime_1.jsxs)("div", { "data-testid": testId, className: cx('root', `size-${size}`, (0, colors_2.color)(textColor), className), style: {
|
|
38
|
-
...style,
|
|
39
|
-
'--avatar-color': !needImage ? colors_1.COLORS.get(bgColor) : undefined,
|
|
40
|
-
'--avatar-color-opacity': bgOpacity,
|
|
41
|
-
}, children: [!needImage && ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: monogram ? ((0, jsx_runtime_1.jsx)("span", { className: cx('monogram'), children: monogram.slice(0, 2).toUpperCase() })) : ((0, jsx_runtime_1.jsx)(Person_1.default, { fill: colors_1.COLORS.get(textColor), width: ICON_SIZES[size], height: ICON_SIZES[size], className: cx('icon') })) })), needImage && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("img", { src: imageUrl, alt: '', className: cx('layer', 'image'), onError: () => toggleImage(false) }), (0, jsx_runtime_1.jsx)("div", { className: cx('layer', 'image-overlay') })] }))] }));
|
|
42
|
-
}
|
|
43
|
-
exports.Avatar = Avatar;
|
|
3
|
+
exports.getUserAvatarColor = exports.getUserAvatarProps = exports.getAvatarIconProps = exports.getNameInitials = exports.Avatar = void 0;
|
|
4
|
+
var avatar_1 = require("./avatar");
|
|
5
|
+
Object.defineProperty(exports, "Avatar", { enumerable: true, get: function () { return avatar_1.Avatar; } });
|
|
6
|
+
var utils_1 = require("./utils");
|
|
7
|
+
Object.defineProperty(exports, "getNameInitials", { enumerable: true, get: function () { return utils_1.getNameInitials; } });
|
|
8
|
+
Object.defineProperty(exports, "getAvatarIconProps", { enumerable: true, get: function () { return utils_1.getAvatarIconProps; } });
|
|
9
|
+
Object.defineProperty(exports, "getUserAvatarProps", { enumerable: true, get: function () { return utils_1.getUserAvatarProps; } });
|
|
10
|
+
Object.defineProperty(exports, "getUserAvatarColor", { enumerable: true, get: function () { return utils_1.getUserAvatarColor; } });
|
|
44
11
|
//# sourceMappingURL=index.js.map
|
package/avatar/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/avatar/index.
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/avatar/index.ts"],"names":[],"mappings":";;;AACA,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,iCAKiB;AAJf,wGAAA,eAAe,OAAA;AACf,2GAAA,kBAAkB,OAAA;AAClB,2GAAA,kBAAkB,OAAA;AAClB,2GAAA,kBAAkB,OAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CSSProperties, ReactNode } from 'react';
|
|
2
|
+
import type { WithTestId } from '../types';
|
|
3
|
+
export interface AvatarStyle extends CSSProperties {
|
|
4
|
+
'--avatar-size'?: string;
|
|
5
|
+
'--avatar-color'?: string;
|
|
6
|
+
'--avatar-color-opacity'?: number | string;
|
|
7
|
+
'--avatar-text-color'?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AvatarProps extends WithTestId {
|
|
10
|
+
/** Класс. */
|
|
11
|
+
className?: string;
|
|
12
|
+
/** Изображение. */
|
|
13
|
+
src?: string;
|
|
14
|
+
/** Стили. */
|
|
15
|
+
style?: AvatarStyle;
|
|
16
|
+
/** Содержимое. */
|
|
17
|
+
children?: ReactNode;
|
|
18
|
+
}
|
package/avatar/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/avatar/types.ts"],"names":[],"mappings":""}
|
package/avatar/utils.d.ts
CHANGED
|
@@ -1,6 +1,30 @@
|
|
|
1
|
+
import type { SVGAttributes } from 'react';
|
|
2
|
+
import type { AvatarProps } from './types';
|
|
1
3
|
/**
|
|
2
|
-
*
|
|
3
|
-
* @param
|
|
4
|
-
* @
|
|
4
|
+
* Возвращает свойства для аватара пользователя.
|
|
5
|
+
* @param payload Данные пользователя.
|
|
6
|
+
* @param customProps Дополнительные свойства аватара.
|
|
7
|
+
* @return Свойства.
|
|
5
8
|
*/
|
|
6
|
-
export declare function
|
|
9
|
+
export declare function getUserAvatarProps({ id, name, image, }: {
|
|
10
|
+
id?: number;
|
|
11
|
+
name?: string;
|
|
12
|
+
image?: string;
|
|
13
|
+
}, customProps?: AvatarProps): AvatarProps;
|
|
14
|
+
/**
|
|
15
|
+
* Возвращает цвет аватара текущего пользователя.
|
|
16
|
+
* @param identity Срока, идентифицирующая пользователя.
|
|
17
|
+
* @return Цвет.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getUserAvatarColor(identity: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Формирует инициалы имени.
|
|
22
|
+
* @param value Строка.
|
|
23
|
+
* @return Инициалы.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getNameInitials(value: any): string;
|
|
26
|
+
/**
|
|
27
|
+
* Возвращает свойства для иконки внутри аватара.
|
|
28
|
+
* @return Свойства.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getAvatarIconProps(): SVGAttributes<SVGSVGElement>;
|
package/avatar/utils.js
CHANGED
|
@@ -1,22 +1,85 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
6
|
+
exports.getAvatarIconProps = exports.getNameInitials = exports.getUserAvatarColor = exports.getUserAvatarProps = void 0;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const Person_1 = __importDefault(require("@sima-land/ui-quarks/icons/24x24/Stroked/Person"));
|
|
9
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
10
|
+
const utils_module_scss_1 = __importDefault(require("./utils.module.scss"));
|
|
11
|
+
const USER_AVATAR_COLOR_TOKENS = [
|
|
12
|
+
'#eb8585',
|
|
13
|
+
'#fda09b',
|
|
14
|
+
'#f49bb1',
|
|
15
|
+
'#ffd785',
|
|
16
|
+
'#ffbb85',
|
|
17
|
+
'#89d7c7',
|
|
18
|
+
'#85e5ac',
|
|
19
|
+
'#b5ef90',
|
|
20
|
+
'#93c4ee',
|
|
21
|
+
'#85caf5',
|
|
22
|
+
'#85ddea',
|
|
23
|
+
'#b3c1c7',
|
|
24
|
+
'#dc9bd5',
|
|
25
|
+
'#b4a8f0',
|
|
26
|
+
'#c999e9',
|
|
27
|
+
];
|
|
4
28
|
/**
|
|
5
|
-
*
|
|
6
|
-
* @param
|
|
7
|
-
* @
|
|
29
|
+
* Возвращает свойства для аватара пользователя.
|
|
30
|
+
* @param payload Данные пользователя.
|
|
31
|
+
* @param customProps Дополнительные свойства аватара.
|
|
32
|
+
* @return Свойства.
|
|
8
33
|
*/
|
|
9
|
-
function
|
|
34
|
+
function getUserAvatarProps({ id, name, image, }, customProps) {
|
|
35
|
+
return {
|
|
36
|
+
src: image,
|
|
37
|
+
children: getNameInitials(name) || (0, jsx_runtime_1.jsx)(Person_1.default, { ...getAvatarIconProps() }),
|
|
38
|
+
...customProps,
|
|
39
|
+
className: (0, classnames_1.default)(utils_module_scss_1.default.user, customProps === null || customProps === void 0 ? void 0 : customProps.className),
|
|
40
|
+
style: {
|
|
41
|
+
'--avatar-color': id ? getUserAvatarColor(`${id}`) : undefined,
|
|
42
|
+
...customProps === null || customProps === void 0 ? void 0 : customProps.style,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
exports.getUserAvatarProps = getUserAvatarProps;
|
|
47
|
+
/**
|
|
48
|
+
* Возвращает цвет аватара текущего пользователя.
|
|
49
|
+
* @param identity Срока, идентифицирующая пользователя.
|
|
50
|
+
* @return Цвет.
|
|
51
|
+
*/
|
|
52
|
+
function getUserAvatarColor(identity) {
|
|
53
|
+
let total = 0;
|
|
54
|
+
for (let i = 0; i < identity.length; i++) {
|
|
55
|
+
total += identity.charCodeAt(i);
|
|
56
|
+
}
|
|
57
|
+
const list = USER_AVATAR_COLOR_TOKENS;
|
|
58
|
+
const hash = total % list.length;
|
|
59
|
+
return list[hash];
|
|
60
|
+
}
|
|
61
|
+
exports.getUserAvatarColor = getUserAvatarColor;
|
|
62
|
+
/**
|
|
63
|
+
* Формирует инициалы имени.
|
|
64
|
+
* @param value Строка.
|
|
65
|
+
* @return Инициалы.
|
|
66
|
+
*/
|
|
67
|
+
function getNameInitials(value) {
|
|
68
|
+
var _a;
|
|
10
69
|
if (typeof value === 'string') {
|
|
11
|
-
return value
|
|
12
|
-
.split(/\s+/g)
|
|
13
|
-
.slice(0, 2)
|
|
14
|
-
.map(s => s[0])
|
|
15
|
-
.reverse()
|
|
16
|
-
.join('')
|
|
17
|
-
.toUpperCase();
|
|
70
|
+
return ((_a = value[0]) !== null && _a !== void 0 ? _a : '').toUpperCase();
|
|
18
71
|
}
|
|
19
72
|
return '';
|
|
20
73
|
}
|
|
21
|
-
exports.
|
|
74
|
+
exports.getNameInitials = getNameInitials;
|
|
75
|
+
/**
|
|
76
|
+
* Возвращает свойства для иконки внутри аватара.
|
|
77
|
+
* @return Свойства.
|
|
78
|
+
*/
|
|
79
|
+
function getAvatarIconProps() {
|
|
80
|
+
return {
|
|
81
|
+
className: utils_module_scss_1.default.icon,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
exports.getAvatarIconProps = getAvatarIconProps;
|
|
22
85
|
//# sourceMappingURL=utils.js.map
|
package/avatar/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/avatar/utils.
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/avatar/utils.tsx"],"names":[],"mappings":";;;;;;;AAEA,6FAAwE;AACxE,4DAAoC;AACpC,4EAAyC;AAEzC,MAAM,wBAAwB,GAA0B;IACtD,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,kBAAkB,CAChC,EACE,EAAE,EACF,IAAI,EACJ,KAAK,GAKN,EACD,WAAyB;IAEzB,OAAO;QACL,GAAG,EAAE,KAAK;QACV,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,uBAAC,gBAAS,OAAK,kBAAkB,EAAE,GAAI;QAC1E,GAAG,WAAW;QACd,SAAS,EAAE,IAAA,oBAAU,EAAC,2BAAM,CAAC,IAAI,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,SAAS,CAAC;QAC1D,KAAK,EAAE;YACL,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YAC9D,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,KAAK;SACtB;KACF,CAAC;AACJ,CAAC;AAtBD,gDAsBC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,QAAgB;IACjD,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,KAAK,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KACjC;IAED,MAAM,IAAI,GAAG,wBAAwB,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IAEjC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAXD,gDAWC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,KAAU;;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,CAAC,MAAA,KAAK,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;KACvC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAND,0CAMC;AAED;;;GAGG;AACH,SAAgB,kBAAkB;IAChC,OAAO;QACL,SAAS,EAAE,2BAAM,CAAC,IAAI;KACvB,CAAC;AACJ,CAAC;AAJD,gDAIC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
@use '../colors';
|
|
2
|
+
|
|
3
|
+
@mixin size-xs {
|
|
4
|
+
--button-min-size: 32px;
|
|
5
|
+
--button-font-size: 14px;
|
|
6
|
+
--button-line-height: 20px;
|
|
7
|
+
--button-gutter: 12px;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@mixin size-s {
|
|
11
|
+
--button-min-size: 40px;
|
|
12
|
+
--button-font-size: 16px;
|
|
13
|
+
--button-line-height: 24px;
|
|
14
|
+
--button-gutter: 20px;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@mixin size-m {
|
|
18
|
+
--button-min-size: 48px;
|
|
19
|
+
--button-font-size: 16px;
|
|
20
|
+
--button-line-height: 24px;
|
|
21
|
+
--button-gutter: 24px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@mixin color-primary {
|
|
25
|
+
--button-color: #fff;
|
|
26
|
+
--button-background: #{colors.$basic-blue};
|
|
27
|
+
--button-hover-background: #{colors.$additional-unlit-blue};
|
|
28
|
+
--button-disabled-color: #{colors.$basic-gray24};
|
|
29
|
+
--button-disabled-background: #{colors.$basic-gray8};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@mixin color-secondary {
|
|
33
|
+
--button-color: #{colors.$basic-gray87};
|
|
34
|
+
--button-background: #{colors.$basic-gray8};
|
|
35
|
+
--button-hover-background: #{colors.$basic-gray12};
|
|
36
|
+
--button-disabled-color: #{colors.$basic-gray24};
|
|
37
|
+
--button-disabled-background: #{colors.$basic-gray8};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@mixin color-success {
|
|
41
|
+
--button-color: #fff;
|
|
42
|
+
--button-background: #{colors.$additional-teal};
|
|
43
|
+
--button-hover-background: #{colors.$additional-dark-teal};
|
|
44
|
+
--button-disabled-color: #{colors.$basic-gray24};
|
|
45
|
+
--button-disabled-background: #{colors.$basic-gray8};
|
|
46
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
@use '../colors';
|
|
2
|
+
@use './button-util';
|
|
2
3
|
|
|
3
4
|
.root {
|
|
4
5
|
position: relative;
|
|
@@ -31,8 +32,8 @@
|
|
|
31
32
|
&:disabled,
|
|
32
33
|
&.disabled {
|
|
33
34
|
pointer-events: none;
|
|
34
|
-
color:
|
|
35
|
-
background
|
|
35
|
+
color: var(--button-disabled-color, var(--button-color));
|
|
36
|
+
background: var(--button-disabled-background, var(--button-background));
|
|
36
37
|
}
|
|
37
38
|
&.loading {
|
|
38
39
|
color: transparent;
|
|
@@ -41,28 +42,24 @@
|
|
|
41
42
|
pointer-events: 0;
|
|
42
43
|
}
|
|
43
44
|
}
|
|
45
|
+
&:not(:disabled):hover {
|
|
46
|
+
cursor: pointer;
|
|
47
|
+
color: var(--button-hover-color, var(--button-color));
|
|
48
|
+
background: var(--button-hover-background, var(--button-background));
|
|
49
|
+
}
|
|
44
50
|
}
|
|
45
51
|
|
|
46
52
|
// sizes
|
|
47
53
|
.size-xs {
|
|
48
|
-
|
|
49
|
-
--button-font-size: 14px;
|
|
50
|
-
--button-line-height: 20px;
|
|
51
|
-
--button-gutter: 12px;
|
|
54
|
+
@include button-util.size-xs;
|
|
52
55
|
}
|
|
53
56
|
|
|
54
57
|
.size-s {
|
|
55
|
-
|
|
56
|
-
--button-font-size: 16px;
|
|
57
|
-
--button-line-height: 24px;
|
|
58
|
-
--button-gutter: 20px;
|
|
58
|
+
@include button-util.size-s;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
.size-m {
|
|
62
|
-
|
|
63
|
-
--button-font-size: 16px;
|
|
64
|
-
--button-line-height: 24px;
|
|
65
|
-
--button-gutter: 24px;
|
|
62
|
+
@include button-util.size-m;
|
|
66
63
|
}
|
|
67
64
|
|
|
68
65
|
// content
|
|
@@ -82,21 +79,15 @@
|
|
|
82
79
|
|
|
83
80
|
// view variants
|
|
84
81
|
.view-primary {
|
|
85
|
-
|
|
86
|
-
--button-color: #fff;
|
|
87
|
-
&:hover:not(:disabled) {
|
|
88
|
-
cursor: pointer;
|
|
89
|
-
--button-background: #1b74c1;
|
|
90
|
-
}
|
|
82
|
+
@include button-util.color-primary;
|
|
91
83
|
}
|
|
92
84
|
|
|
93
85
|
.view-secondary {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
86
|
+
@include button-util.color-secondary;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.view-success {
|
|
90
|
+
@include button-util.color-success;
|
|
100
91
|
}
|
|
101
92
|
|
|
102
93
|
// icons
|
package/button/index.d.ts
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
|
-
import { AnchorHTMLAttributes, ButtonHTMLAttributes, ComponentType, HTMLAttributes, SVGAttributes } from 'react';
|
|
1
|
+
import { AnchorHTMLAttributes, ButtonHTMLAttributes, ComponentType, CSSProperties, HTMLAttributes, SVGAttributes } from 'react';
|
|
2
2
|
export type ButtonSize = 'xs' | 's' | 'm';
|
|
3
|
-
export type ButtonViewType = 'primary' | 'secondary';
|
|
3
|
+
export type ButtonViewType = 'primary' | 'secondary' | 'success' | 'unset';
|
|
4
4
|
export type ButtonAppearance = 'button' | 'link' | 'container';
|
|
5
5
|
export type ButtonIconPosition = 'start' | 'end';
|
|
6
|
+
export interface ButtonStyle extends CSSProperties {
|
|
7
|
+
'--button-color'?: string;
|
|
8
|
+
'--button-background'?: string;
|
|
9
|
+
'--button-hover-color'?: string;
|
|
10
|
+
'--button-hover-background'?: string;
|
|
11
|
+
'--button-disabled-color'?: string;
|
|
12
|
+
'--button-disabled-background'?: string;
|
|
13
|
+
}
|
|
6
14
|
interface CommonProps<T extends ButtonAppearance = ButtonAppearance> {
|
|
7
15
|
/** Определяет внешний вид кнопки. */
|
|
8
16
|
viewType?: ButtonViewType;
|
|
@@ -20,6 +28,8 @@ interface CommonProps<T extends ButtonAppearance = ButtonAppearance> {
|
|
|
20
28
|
disabled?: boolean;
|
|
21
29
|
/** Идентификатор для систем автоматизированного тестирования. */
|
|
22
30
|
'data-testid'?: string;
|
|
31
|
+
/** Стили. */
|
|
32
|
+
style?: ButtonStyle;
|
|
23
33
|
}
|
|
24
34
|
type AsButtonProps = CommonProps & Omit<ButtonHTMLAttributes<HTMLButtonElement>, keyof CommonProps> & {
|
|
25
35
|
appearance?: 'button';
|
package/button/index.js
CHANGED
|
@@ -18,7 +18,7 @@ const cx = bind_1.default.bind(button_module_scss_1.default);
|
|
|
18
18
|
exports.Button = (0, react_1.forwardRef)(function Button({ viewType = 'primary', icon: Icon, iconPosition = 'start', size = 'm', loading, disabled, className, children, 'data-testid': testId = 'button', ...restProps }, ref) {
|
|
19
19
|
const hasIcon = Boolean(Icon);
|
|
20
20
|
const hasText = Boolean(children);
|
|
21
|
-
const rootClassName = cx('root', `size-${size}`, `view-${viewType}`, loading && 'loading', disabled && 'disabled', hasIcon && !hasText && 'icon-only', hasText && hasIcon && iconPosition === 'start' && 'icon-start', hasText && hasIcon && iconPosition === 'end' && 'icon-end', className);
|
|
21
|
+
const rootClassName = cx('root', `size-${size}`, viewType !== 'unset' && `view-${viewType}`, loading && 'loading', disabled && 'disabled', hasIcon && !hasText && 'icon-only', hasText && hasIcon && iconPosition === 'start' && 'icon-start', hasText && hasIcon && iconPosition === 'end' && 'icon-end', className);
|
|
22
22
|
const content = ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [Icon && iconPosition === 'start' && (0, jsx_runtime_1.jsx)(Icon, { className: cx('icon') }), children, Icon && iconPosition === 'end' && (0, jsx_runtime_1.jsx)(Icon, { className: cx('icon') }), loading && ((0, jsx_runtime_1.jsx)(spinner_1.SpinnerSVG, { size: 's', color: disabled || viewType === 'secondary' ? 'basic-gray38' : 'basic-white', className: cx('spinner') }))] }));
|
|
23
23
|
let result = null;
|
|
24
24
|
if (restProps.appearance === 'container') {
|
package/button/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/button/index.tsx"],"names":[],"mappings":";;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/button/index.tsx"],"names":[],"mappings":";;;;;;;AAAA,iCASe;AACf,wCAAwC;AACxC,2DAAyC;AACzC,8EAA0C;AA4D1C,MAAM,EAAE,GAAG,cAAU,CAAC,IAAI,CAAC,4BAAM,CAAC,CAAC;AAEnC;;;;GAIG;AACU,QAAA,MAAM,GAAG,IAAA,kBAAU,EAAmB,SAAS,MAAM,CAChE,EACE,QAAQ,GAAG,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,YAAY,GAAG,OAAO,EACtB,IAAI,GAAG,GAAG,EACV,OAAO,EACP,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,aAAa,EAAE,MAAM,GAAG,QAAQ,EAChC,GAAG,SAAS,EACb,EACD,GAAG;IAEH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAElC,MAAM,aAAa,GAAG,EAAE,CACtB,MAAM,EACN,QAAQ,IAAI,EAAE,EACd,QAAQ,KAAK,OAAO,IAAI,QAAQ,QAAQ,EAAE,EAC1C,OAAO,IAAI,SAAS,EACpB,QAAQ,IAAI,UAAU,EACtB,OAAO,IAAI,CAAC,OAAO,IAAI,WAAW,EAClC,OAAO,IAAI,OAAO,IAAI,YAAY,KAAK,OAAO,IAAI,YAAY,EAC9D,OAAO,IAAI,OAAO,IAAI,YAAY,KAAK,KAAK,IAAI,UAAU,EAC1D,SAAS,CACV,CAAC;IAEF,MAAM,OAAO,GAAG,CACd,6DAEG,IAAI,IAAI,YAAY,KAAK,OAAO,IAAI,uBAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,GAAI,EACnE,QAAQ,EACR,IAAI,IAAI,YAAY,KAAK,KAAK,IAAI,uBAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,GAAI,EAEjE,OAAO,IAAI,CACV,uBAAC,oBAAU,IACT,IAAI,EAAC,GAAG,EACR,KAAK,EAAE,QAAQ,IAAI,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,EAC5E,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GACxB,CACH,IACA,CACJ,CAAC;IAEF,IAAI,MAAM,GAAwB,IAAI,CAAC;IAEvC,IAAI,SAAS,CAAC,UAAU,KAAK,WAAW,EAAE;QACxC,MAAM,GAAG,CACP,mCAAS,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAC,QAAQ,iBAAc,MAAM,YACtF,OAAO,GACJ,CACP,CAAC;KACH;SAAM,IAAI,SAAS,CAAC,UAAU,KAAK,MAAM,EAAE;QAC1C,MAAM,GAAG,CACP,iCAAO,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,iBAAe,MAAM,YACtE,OAAO,GACN,CACL,CAAC;KACH;SAAM;QACL,MAAM,GAAG,CACP,sCACM,SAAS,EACb,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,QAAQ,iBACL,MAAM,YAElB,OAAO,GACD,CACV,CAAC;KACH;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC,CAAC"}
|
package/colors/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
/** Цвета дизайн-системы. */
|
|
2
|
+
export declare const COLOR: {
|
|
2
3
|
readonly 'basic-blue': "#1f84db";
|
|
3
4
|
readonly 'basic-gray87': "#212121";
|
|
4
5
|
readonly 'basic-gray76': "#3a3a3b";
|
|
@@ -14,6 +15,7 @@ declare const collection: {
|
|
|
14
15
|
readonly 'additional-deep-red': "#d50000";
|
|
15
16
|
readonly 'additional-red': "#fb3a2f";
|
|
16
17
|
readonly 'additional-light-red': "#feebea";
|
|
18
|
+
readonly 'additional-dark-teal': "#089176";
|
|
17
19
|
readonly 'additional-teal': "#09ab8b";
|
|
18
20
|
readonly 'additional-green': "#00c853";
|
|
19
21
|
readonly 'additional-light-green': "#64dd17";
|
|
@@ -35,7 +37,7 @@ declare const collection: {
|
|
|
35
37
|
readonly 'additional-blue-gray': "#607d8b";
|
|
36
38
|
readonly 'additional-deep-blue': "#00599d";
|
|
37
39
|
readonly 'additional-dark-blue': "#002b41";
|
|
40
|
+
readonly 'additional-unlit-blue': "#1b75c2";
|
|
38
41
|
};
|
|
39
|
-
export type Token = keyof typeof
|
|
40
|
-
export declare const COLORS: Map<"basic-blue" | "basic-gray87" | "basic-gray76" | "basic-gray66" | "basic-gray54" | "basic-gray38" | "basic-gray24" | "basic-gray12" | "basic-gray8" | "basic-gray4" | "basic-gray2" | "basic-white" | "additional-deep-red" | "additional-red" | "additional-light-red" | "additional-teal" | "additional-green" | "additional-light-green" | "additional-lime" | "additional-faded-green" | "additional-pink" | "additional-purple" | "additional-violet" | "additional-deep-purple" | "additional-electric-blue" | "additional-light-blue" | "additional-cyan" | "additional-sky" | "additional-deep-orange" | "additional-amber" | "additional-yellow" | "additional-gold" | "additional-brown" | "additional-blue-gray" | "additional-deep-blue" | "additional-dark-blue", string>;
|
|
41
|
-
export {};
|
|
42
|
+
export type Token = keyof typeof COLOR;
|
|
43
|
+
export declare const COLORS: Map<"basic-blue" | "basic-gray87" | "basic-gray76" | "basic-gray66" | "basic-gray54" | "basic-gray38" | "basic-gray24" | "basic-gray12" | "basic-gray8" | "basic-gray4" | "basic-gray2" | "basic-white" | "additional-deep-red" | "additional-red" | "additional-light-red" | "additional-dark-teal" | "additional-teal" | "additional-green" | "additional-light-green" | "additional-lime" | "additional-faded-green" | "additional-pink" | "additional-purple" | "additional-violet" | "additional-deep-purple" | "additional-electric-blue" | "additional-light-blue" | "additional-cyan" | "additional-sky" | "additional-deep-orange" | "additional-amber" | "additional-yellow" | "additional-gold" | "additional-brown" | "additional-blue-gray" | "additional-deep-blue" | "additional-dark-blue" | "additional-unlit-blue", string>;
|
package/colors/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// GENERATED FILE - DO NOT CHANGE IT MANUALLY
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.COLORS = void 0;
|
|
5
|
-
|
|
4
|
+
exports.COLORS = exports.COLOR = void 0;
|
|
5
|
+
/** Цвета дизайн-системы. */
|
|
6
|
+
exports.COLOR = {
|
|
6
7
|
// basic
|
|
7
8
|
'basic-blue': '#1f84db',
|
|
8
9
|
'basic-gray87': '#212121',
|
|
@@ -20,6 +21,7 @@ const collection = {
|
|
|
20
21
|
'additional-deep-red': '#d50000',
|
|
21
22
|
'additional-red': '#fb3a2f',
|
|
22
23
|
'additional-light-red': '#feebea',
|
|
24
|
+
'additional-dark-teal': '#089176',
|
|
23
25
|
'additional-teal': '#09ab8b',
|
|
24
26
|
'additional-green': '#00c853',
|
|
25
27
|
'additional-light-green': '#64dd17',
|
|
@@ -41,6 +43,7 @@ const collection = {
|
|
|
41
43
|
'additional-blue-gray': '#607d8b',
|
|
42
44
|
'additional-deep-blue': '#00599d',
|
|
43
45
|
'additional-dark-blue': '#002b41',
|
|
46
|
+
'additional-unlit-blue': '#1b75c2',
|
|
44
47
|
};
|
|
45
|
-
exports.COLORS = new Map(Object.entries(
|
|
48
|
+
exports.COLORS = new Map(Object.entries(exports.COLOR));
|
|
46
49
|
//# sourceMappingURL=index.js.map
|
package/colors/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/colors/index.ts"],"names":[],"mappings":";AAAA,6CAA6C;;;AAE7C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/colors/index.ts"],"names":[],"mappings":";AAAA,6CAA6C;;;AAE7C,4BAA4B;AACf,QAAA,KAAK,GAAG;IACnB,QAAQ;IACR,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,SAAS;IACzB,cAAc,EAAE,SAAS;IACzB,cAAc,EAAE,SAAS;IACzB,cAAc,EAAE,SAAS;IACzB,cAAc,EAAE,SAAS;IACzB,cAAc,EAAE,SAAS;IACzB,cAAc,EAAE,SAAS;IACzB,aAAa,EAAE,SAAS;IACxB,aAAa,EAAE,SAAS;IACxB,aAAa,EAAE,SAAS;IACxB,aAAa,EAAE,MAAM;IAErB,aAAa;IACb,qBAAqB,EAAE,SAAS;IAChC,gBAAgB,EAAE,SAAS;IAC3B,sBAAsB,EAAE,SAAS;IACjC,sBAAsB,EAAE,SAAS;IACjC,iBAAiB,EAAE,SAAS;IAC5B,kBAAkB,EAAE,SAAS;IAC7B,wBAAwB,EAAE,SAAS;IACnC,iBAAiB,EAAE,SAAS;IAC5B,wBAAwB,EAAE,SAAS;IACnC,iBAAiB,EAAE,SAAS;IAC5B,mBAAmB,EAAE,SAAS;IAC9B,mBAAmB,EAAE,SAAS;IAC9B,wBAAwB,EAAE,SAAS;IACnC,0BAA0B,EAAE,SAAS;IACrC,uBAAuB,EAAE,SAAS;IAClC,iBAAiB,EAAE,SAAS;IAC5B,gBAAgB,EAAE,SAAS;IAC3B,wBAAwB,EAAE,SAAS;IACnC,kBAAkB,EAAE,SAAS;IAC7B,mBAAmB,EAAE,SAAS;IAC9B,iBAAiB,EAAE,SAAS;IAC5B,kBAAkB,EAAE,SAAS;IAC7B,sBAAsB,EAAE,SAAS;IACjC,sBAAsB,EAAE,SAAS;IACjC,sBAAsB,EAAE,SAAS;IACjC,uBAAuB,EAAE,SAAS;CAC1B,CAAC;AAGE,QAAA,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,aAAK,CAAC,CAAuB,CAAC"}
|