@sima-land/moleculas 15.4.0 → 15.6.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/common/components/intractive-image/index.d.ts +4 -18
- package/common/components/intractive-image/index.js +3 -49
- package/common/components/intractive-image/interactive-image-util.scss +10 -0
- package/common/components/intractive-image/interactive-image.d.ts +10 -0
- package/common/components/intractive-image/interactive-image.js +73 -0
- package/common/components/intractive-image/interactive-image.module.scss +9 -12
- package/common/components/intractive-image/types.d.ts +23 -0
- package/common/components/intractive-image/types.js +2 -0
- package/package.json +1 -2
|
@@ -1,18 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
export interface InteractiveImageImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {
|
|
7
|
-
'data-testid'?: string;
|
|
8
|
-
}
|
|
9
|
-
export interface InteractiveImagePointProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
10
|
-
x: number;
|
|
11
|
-
y: number;
|
|
12
|
-
'data-testid'?: string;
|
|
13
|
-
}
|
|
14
|
-
export declare const InteractiveImage: React.ForwardRefExoticComponent<InteractiveImageProps & React.RefAttributes<HTMLDivElement>>;
|
|
15
|
-
export declare const Parts: {
|
|
16
|
-
readonly Image: React.ForwardRefExoticComponent<InteractiveImageImageProps & React.RefAttributes<HTMLImageElement>>;
|
|
17
|
-
readonly Point: React.ForwardRefExoticComponent<InteractiveImagePointProps & React.RefAttributes<HTMLAnchorElement>>;
|
|
18
|
-
};
|
|
1
|
+
import type { InteractiveImageStyle, InteractiveImageProps, InteractiveImageImageProps, InteractiveImagePointProps } from './types';
|
|
2
|
+
import { InteractiveImage, Parts } from './interactive-image';
|
|
3
|
+
export type { InteractiveImageStyle, InteractiveImageProps, InteractiveImageImageProps, InteractiveImagePointProps, };
|
|
4
|
+
export { InteractiveImage, Parts };
|
|
@@ -1,52 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
22
|
-
var t = {};
|
|
23
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
24
|
-
t[p] = s[p];
|
|
25
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
26
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
27
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
28
|
-
t[p[i]] = s[p[i]];
|
|
29
|
-
}
|
|
30
|
-
return t;
|
|
31
|
-
};
|
|
32
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
33
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
34
|
-
};
|
|
35
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
3
|
exports.Parts = exports.InteractiveImage = void 0;
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
exports.InteractiveImage = (0, react_1.forwardRef)((_a, ref) => {
|
|
41
|
-
var { children, 'data-testid': testId, className } = _a, rest = __rest(_a, ["children", 'data-testid', "className"]);
|
|
42
|
-
return (react_1.default.createElement("div", Object.assign({ ref: ref, className: (0, classnames_1.default)(interactive_image_module_scss_1.default.root, className) }, rest, { "data-testid": testId }), react_1.Children.toArray(children).filter(child => (0, react_1.isValidElement)(child) && (child.type === Image || child.type === Point))));
|
|
43
|
-
});
|
|
44
|
-
const Image = (0, react_1.forwardRef)((_a, ref) => {
|
|
45
|
-
var { className, 'data-testid': testId = 'interactive-image:image' } = _a, rest = __rest(_a, ["className", 'data-testid']);
|
|
46
|
-
return (react_1.default.createElement("img", Object.assign({ ref: ref, className: (0, classnames_1.default)(interactive_image_module_scss_1.default.image, className), "data-testid": testId }, rest)));
|
|
47
|
-
});
|
|
48
|
-
const Point = (0, react_1.forwardRef)((_a, ref) => {
|
|
49
|
-
var { x, y, className, style, 'data-testid': testId = 'interactive-image:point' } = _a, rest = __rest(_a, ["x", "y", "className", "style", 'data-testid']);
|
|
50
|
-
return (react_1.default.createElement("a", Object.assign({ ref: ref, "aria-label": '\u0422\u043E\u0447\u043A\u0430 \u043D\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0438', "data-testid": testId, className: (0, classnames_1.default)(interactive_image_module_scss_1.default.point, className), style: Object.assign(Object.assign({}, style), { top: `${y}%`, left: `${x}%` }) }, rest)));
|
|
51
|
-
});
|
|
52
|
-
exports.Parts = { Image, Point };
|
|
4
|
+
const interactive_image_1 = require("./interactive-image");
|
|
5
|
+
Object.defineProperty(exports, "InteractiveImage", { enumerable: true, get: function () { return interactive_image_1.InteractiveImage; } });
|
|
6
|
+
Object.defineProperty(exports, "Parts", { enumerable: true, get: function () { return interactive_image_1.Parts; } });
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React, { AnchorHTMLAttributes } from 'react';
|
|
2
|
+
import { InteractiveImageProps, InteractiveImageImageProps, InteractiveImagePointProps } from './types';
|
|
3
|
+
export declare const InteractiveImage: React.ForwardRefExoticComponent<InteractiveImageProps & React.RefAttributes<HTMLDivElement>>;
|
|
4
|
+
declare function ImageAnchor({ children, className, ...rest }: AnchorHTMLAttributes<HTMLAnchorElement>): JSX.Element;
|
|
5
|
+
export declare const Parts: {
|
|
6
|
+
readonly ImageAnchor: typeof ImageAnchor;
|
|
7
|
+
readonly Image: React.ForwardRefExoticComponent<InteractiveImageImageProps & React.RefAttributes<HTMLImageElement>>;
|
|
8
|
+
readonly Point: React.ForwardRefExoticComponent<InteractiveImagePointProps & React.RefAttributes<HTMLAnchorElement>>;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
22
|
+
var t = {};
|
|
23
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
24
|
+
t[p] = s[p];
|
|
25
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
26
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
27
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
28
|
+
t[p[i]] = s[p[i]];
|
|
29
|
+
}
|
|
30
|
+
return t;
|
|
31
|
+
};
|
|
32
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
33
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
34
|
+
};
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Parts = exports.InteractiveImage = void 0;
|
|
37
|
+
const react_1 = __importStar(require("react"));
|
|
38
|
+
const bind_1 = __importDefault(require("classnames/bind"));
|
|
39
|
+
const interactive_image_module_scss_1 = __importDefault(require("./interactive-image.module.scss"));
|
|
40
|
+
const cx = bind_1.default.bind(interactive_image_module_scss_1.default);
|
|
41
|
+
exports.InteractiveImage = (0, react_1.forwardRef)((_a, ref) => {
|
|
42
|
+
var { children, 'data-testid': testId, className, dotSize } = _a, rest = __rest(_a, ["children", 'data-testid', "className", "dotSize"]);
|
|
43
|
+
const rootClassName = cx('root', {
|
|
44
|
+
'dot-size-unset': dotSize === 'unset',
|
|
45
|
+
}, className);
|
|
46
|
+
validateChildren(children);
|
|
47
|
+
return (react_1.default.createElement("div", Object.assign({ ref: ref, className: rootClassName }, rest, { "data-testid": testId }), react_1.Children.toArray(children).filter(child => (0, react_1.isValidElement)(child) &&
|
|
48
|
+
(child.type === ImageAnchor || child.type === Image || child.type === Point))));
|
|
49
|
+
});
|
|
50
|
+
function validateChildren(children) {
|
|
51
|
+
let counter = 0;
|
|
52
|
+
for (const child of react_1.Children.toArray(children)) {
|
|
53
|
+
if ((0, react_1.isValidElement)(child) && (child.type === ImageAnchor || child.type === Image)) {
|
|
54
|
+
counter++;
|
|
55
|
+
}
|
|
56
|
+
if (counter > 1) {
|
|
57
|
+
throw new Error('[InteractiveImage] Either Image or ImageAnchor allowed. Not both.');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function ImageAnchor(_a) {
|
|
62
|
+
var { children, className } = _a, rest = __rest(_a, ["children", "className"]);
|
|
63
|
+
return (react_1.default.createElement("a", Object.assign({}, rest, { className: cx('image-anchor', className), "data-testid": 'interactive-image:image-anchor' }), react_1.Children.toArray(children).filter(child => (0, react_1.isValidElement)(child) && child.type === Image)));
|
|
64
|
+
}
|
|
65
|
+
const Image = (0, react_1.forwardRef)((_a, ref) => {
|
|
66
|
+
var { className, 'data-testid': testId = 'interactive-image:image' } = _a, rest = __rest(_a, ["className", 'data-testid']);
|
|
67
|
+
return (react_1.default.createElement("img", Object.assign({ ref: ref, className: cx('image', className), "data-testid": testId }, rest)));
|
|
68
|
+
});
|
|
69
|
+
const Point = (0, react_1.forwardRef)((_a, ref) => {
|
|
70
|
+
var { x, y, className, style, 'data-testid': testId = 'interactive-image:point' } = _a, rest = __rest(_a, ["x", "y", "className", "style", 'data-testid']);
|
|
71
|
+
return (react_1.default.createElement("a", Object.assign({ ref: ref, "aria-label": '\u0422\u043E\u0447\u043A\u0430 \u043D\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0438', "data-testid": testId, className: cx('point', className), style: Object.assign(Object.assign({}, style), { top: `${y}%`, left: `${x}%` }) }, rest)));
|
|
72
|
+
});
|
|
73
|
+
exports.Parts = { ImageAnchor, Image, Point };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
@use 'node_modules/@sima-land/ui-nucleons/colors';
|
|
2
2
|
@use 'node_modules/@sima-land/ui-nucleons/breakpoints';
|
|
3
|
+
@use './interactive-image-util';
|
|
3
4
|
|
|
4
5
|
.root {
|
|
5
6
|
display: inline-block;
|
|
@@ -7,8 +8,12 @@
|
|
|
7
8
|
position: relative;
|
|
8
9
|
overflow: hidden;
|
|
9
10
|
background: colors.$basic-gray4;
|
|
11
|
+
&:not(.dot-size-unset) {
|
|
12
|
+
@include interactive-image-util.dot-size-default;
|
|
13
|
+
}
|
|
10
14
|
}
|
|
11
15
|
|
|
16
|
+
.image-anchor,
|
|
12
17
|
.image {
|
|
13
18
|
display: block;
|
|
14
19
|
max-width: 100%;
|
|
@@ -22,8 +27,8 @@
|
|
|
22
27
|
display: flex;
|
|
23
28
|
justify-content: center;
|
|
24
29
|
align-items: center;
|
|
25
|
-
width:
|
|
26
|
-
height:
|
|
30
|
+
width: var(--dot-size, 32px);
|
|
31
|
+
height: var(--dot-size, 32px);
|
|
27
32
|
background: rgba(colors.$basic-gray87, 0.4);
|
|
28
33
|
border-radius: 50%;
|
|
29
34
|
transform: translate(-50%, -50%);
|
|
@@ -34,17 +39,9 @@
|
|
|
34
39
|
&::after {
|
|
35
40
|
content: '';
|
|
36
41
|
display: block;
|
|
37
|
-
width:
|
|
38
|
-
height:
|
|
42
|
+
width: var(--dot-size-core, 12px);
|
|
43
|
+
height: var(--dot-size-core, 12px);
|
|
39
44
|
background: #fff;
|
|
40
45
|
border-radius: 50%;
|
|
41
46
|
}
|
|
42
|
-
@include breakpoints.down('xs') {
|
|
43
|
-
width: 40px;
|
|
44
|
-
height: 40px;
|
|
45
|
-
&::after {
|
|
46
|
-
width: 16px;
|
|
47
|
-
height: 16px;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
47
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CSSProperties } from 'react';
|
|
2
|
+
export interface InteractiveImageStyle extends CSSProperties {
|
|
3
|
+
'--dot-size'?: string;
|
|
4
|
+
'--dot-size-core'?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface InteractiveImageProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
7
|
+
/** Размер точек. При указании "unset" можно задать css-переменные через className или style. */
|
|
8
|
+
dotSize?: 'unset';
|
|
9
|
+
/** Стили с возможностью указания размера точек через css-переменные. */
|
|
10
|
+
style?: InteractiveImageStyle;
|
|
11
|
+
/** Идентификатор для систем автоматизированного тестирования. */
|
|
12
|
+
'data-testid'?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface InteractiveImageImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {
|
|
15
|
+
/** Идентификатор для систем автоматизированного тестирования. */
|
|
16
|
+
'data-testid'?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface InteractiveImagePointProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
/** Идентификатор для систем автоматизированного тестирования. */
|
|
22
|
+
'data-testid'?: string;
|
|
23
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sima-land/moleculas",
|
|
3
|
-
"version": "15.
|
|
3
|
+
"version": "15.6.0",
|
|
4
4
|
"repository": "ssh://git@github.com:sima-land/moleculas.git",
|
|
5
5
|
"author": "www.sima-land.ru team",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
"node": ">=14.16.0"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
|
-
"prepare": "",
|
|
13
12
|
"build:before": "rimraf build",
|
|
14
13
|
"build:main": "tsc --project tsconfig.build.json",
|
|
15
14
|
"build:after": "node .build/dist.js",
|