@sima-land/moleculas 15.3.1 → 15.5.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.
@@ -1,18 +1,4 @@
1
- import React from 'react';
2
- export interface InteractiveImageProps extends React.HTMLAttributes<HTMLDivElement> {
3
- children?: React.ReactNode;
4
- 'data-testid'?: string;
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 react_1 = __importStar(require("react"));
38
- const classnames_1 = __importDefault(require("classnames"));
39
- const interactive_image_module_scss_1 = __importDefault(require("./interactive-image.module.scss"));
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
+ @use 'node_modules/@sima-land/ui-nucleons/breakpoints';
2
+
3
+ @mixin dot-size-default {
4
+ --dot-size: 32px;
5
+ --dot-size-core: 12px;
6
+ @include breakpoints.down('xs') {
7
+ --dot-size: 40px;
8
+ --dot-size-core: 16px;
9
+ }
10
+ }
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import { InteractiveImageProps, InteractiveImageImageProps, InteractiveImagePointProps } from './types';
3
+ export declare const InteractiveImage: React.ForwardRefExoticComponent<InteractiveImageProps & React.RefAttributes<HTMLDivElement>>;
4
+ export declare const Parts: {
5
+ readonly Image: React.ForwardRefExoticComponent<InteractiveImageImageProps & React.RefAttributes<HTMLImageElement>>;
6
+ readonly Point: React.ForwardRefExoticComponent<InteractiveImagePointProps & React.RefAttributes<HTMLAnchorElement>>;
7
+ };
@@ -0,0 +1,56 @@
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
+ 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) && (child.type === Image || child.type === Point))));
47
+ });
48
+ const Image = (0, react_1.forwardRef)((_a, ref) => {
49
+ var { className, 'data-testid': testId = 'interactive-image:image' } = _a, rest = __rest(_a, ["className", 'data-testid']);
50
+ return (react_1.default.createElement("img", Object.assign({ ref: ref, className: cx('image', className), "data-testid": testId }, rest)));
51
+ });
52
+ const Point = (0, react_1.forwardRef)((_a, ref) => {
53
+ var { x, y, className, style, 'data-testid': testId = 'interactive-image:point' } = _a, rest = __rest(_a, ["x", "y", "className", "style", 'data-testid']);
54
+ 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)));
55
+ });
56
+ exports.Parts = { 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,6 +8,9 @@
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
 
12
16
  .image {
@@ -22,8 +26,8 @@
22
26
  display: flex;
23
27
  justify-content: center;
24
28
  align-items: center;
25
- width: 64px;
26
- height: 64px;
29
+ width: var(--dot-size, 32px);
30
+ height: var(--dot-size, 32px);
27
31
  background: rgba(colors.$basic-gray87, 0.4);
28
32
  border-radius: 50%;
29
33
  transform: translate(-50%, -50%);
@@ -34,17 +38,9 @@
34
38
  &::after {
35
39
  content: '';
36
40
  display: block;
37
- width: 24px;
38
- height: 24px;
41
+ width: var(--dot-size-core, 12px);
42
+ height: var(--dot-size-core, 12px);
39
43
  background: #fff;
40
44
  border-radius: 50%;
41
45
  }
42
- @include breakpoints.down('xs') {
43
- width: 40px;
44
- height: 40px;
45
- &::after {
46
- width: 16px;
47
- height: 16px;
48
- }
49
- }
50
46
  }
@@ -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
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -15,7 +15,7 @@ exports.UNAVAILABLE_REASON = {
15
15
  onlyForLegalEntities: 'Товар доступен только для юридических лиц',
16
16
  };
17
17
  const ProductInfo = ({ restriction, children }) => {
18
- const { image, badges, prices, title, trademark, footer, secondaryInfo } = (0, define_slots_1.defineSlots)(children, {
18
+ const { image, badges, prices, title, trademark, footer, secondaryInfo, ratingCounter } = (0, define_slots_1.defineSlots)(children, {
19
19
  image: parts_1.Parts.Image,
20
20
  badges: parts_1.Parts.Badges,
21
21
  prices: parts_1.Parts.Prices,
@@ -23,6 +23,7 @@ const ProductInfo = ({ restriction, children }) => {
23
23
  trademark: parts_1.Parts.TrademarkLink,
24
24
  footer: parts_1.Parts.Footer,
25
25
  secondaryInfo: parts_1.Parts.SecondaryInfo,
26
+ ratingCounter: parts_1.Parts.RatingCounter,
26
27
  });
27
28
  return (react_1.default.createElement(utils_1.ProductInfoContext.Provider, { value: { restriction } },
28
29
  image,
@@ -31,6 +32,7 @@ const ProductInfo = ({ restriction, children }) => {
31
32
  title,
32
33
  restriction !== 'adult' && secondaryInfo,
33
34
  !restriction && trademark,
35
+ restriction !== 'adult' && ratingCounter,
34
36
  footer));
35
37
  };
36
38
  exports.ProductInfo = ProductInfo;
@@ -3,6 +3,7 @@ import { LinkProps } from '@sima-land/ui-nucleons/link';
3
3
  import { HintProps } from '@sima-land/ui-nucleons/hint';
4
4
  import { StrokedSVGProps } from '@sima-land/ui-nucleons/stroked-svg';
5
5
  import { BadgeListProps } from '../badge-list';
6
+ import { RatingCounterProps } from '../rating-counter';
6
7
  export interface ImageProps {
7
8
  src?: string;
8
9
  alt?: string;
@@ -14,6 +15,7 @@ export interface ImageProps {
14
15
  declare function SecondaryInfo({ children }: {
15
16
  children: ReactNode;
16
17
  }): JSX.Element;
18
+ declare function CustomRatingCounter({ className, ...rest }: RatingCounterProps): JSX.Element;
17
19
  export declare const Parts: {
18
20
  readonly Image: ({ src, alt, href, onClick, children, opacity }: ImageProps) => JSX.Element;
19
21
  readonly ImageButton: ({ icon, fill, onClick, hint, hintDirection, "data-testid": testId, position, }: {
@@ -38,6 +40,7 @@ export declare const Parts: {
38
40
  readonly Title: ({ children, href, onClick }: Pick<LinkProps, 'children' | 'href' | 'onClick'>) => JSX.Element;
39
41
  readonly TrademarkLink: ({ href, children, onClick, }: Pick<LinkProps, 'href' | 'children' | 'onClick'>) => JSX.Element;
40
42
  readonly SecondaryInfo: typeof SecondaryInfo;
43
+ readonly RatingCounter: typeof CustomRatingCounter;
41
44
  readonly Footer: React.FC<{}>;
42
45
  readonly FooterContext: React.Context<{
43
46
  className?: string | undefined;
@@ -42,6 +42,7 @@ const with_hint_1 = require("@sima-land/ui-nucleons/with-hint");
42
42
  const image_overlay_1 = require("../../../desktop/components/gallery-modal/components/image-overlay");
43
43
  const badge_list_1 = require("../badge-list");
44
44
  const utils_1 = require("./utils");
45
+ const rating_counter_1 = require("../rating-counter");
45
46
  const eighteen_plus_svg_1 = __importDefault(require("../../icons/eighteen-plus.svg"));
46
47
  const bind_1 = __importDefault(require("classnames/bind"));
47
48
  const product_info_module_scss_1 = __importDefault(require("./product-info.module.scss"));
@@ -168,6 +169,10 @@ const WaitListAddedLink = (_a) => {
168
169
  function SecondaryInfo({ children }) {
169
170
  return react_1.default.createElement("div", { className: cx('secondary-info') }, children);
170
171
  }
172
+ function CustomRatingCounter(_a) {
173
+ var { className } = _a, rest = __rest(_a, ["className"]);
174
+ return react_1.default.createElement(rating_counter_1.RatingCounter, Object.assign({ size: 'unset', className: cx('rating', className), hoverDisabled: true }, rest));
175
+ }
171
176
  exports.Parts = {
172
177
  // основные компоненты-слоты и компоненты-запчасти
173
178
  Image,
@@ -177,6 +182,7 @@ exports.Parts = {
177
182
  Title,
178
183
  TrademarkLink,
179
184
  SecondaryInfo,
185
+ RatingCounter: CustomRatingCounter,
180
186
  // компоненты-слоты и компоненты-запчасти, предназначенные для вывода футера (dcе что ниже ссылки на торговую марку)
181
187
  Footer,
182
188
  FooterContext,
@@ -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 '../rating-counter/rating-counter-util';
3
4
 
4
5
  .image-overlay {
5
6
  position: relative;
@@ -188,6 +189,16 @@
188
189
  text-overflow: ellipsis;
189
190
  }
190
191
 
192
+ .rating {
193
+ margin-top: 8px;
194
+ @include breakpoints.down('mm') {
195
+ @include rating-counter-util.size-s;
196
+ }
197
+ @include breakpoints.up('mm') {
198
+ @include rating-counter-util.size-m;
199
+ }
200
+ }
201
+
191
202
  // футер
192
203
  .footer {
193
204
  margin-top: 16px;
@@ -1,5 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  export interface ProductInfoProps {
3
+ /** Ограничение товара. Влияет на отображение информации. */
3
4
  restriction?: 'adult' | 'unavailable';
5
+ /** Содержимое. */
4
6
  children?: React.ReactNode;
5
7
  }
@@ -0,0 +1,25 @@
1
+ import { HTMLAttributes } from 'react';
2
+ export declare type RatingCounterSize = 's' | 'm' | 'unset';
3
+ interface CustomProps {
4
+ /**
5
+ * Размер.
6
+ * При указании "unset" необходимо определить стили самостоятельно с помощью миксина из rating-counter-util.scss.
7
+ */
8
+ size?: RatingCounterSize;
9
+ /** Значение рейтинга. */
10
+ value: number;
11
+ /** Количество отзывов. */
12
+ reviewCount: number;
13
+ /** Нужно ли отключить эффект при наведении. */
14
+ hoverDisabled?: boolean;
15
+ /** Идентификатор для систем автоматизированного тестирования. */
16
+ 'data-testid'?: string;
17
+ }
18
+ export declare type RatingCounterProps = CustomProps & Omit<HTMLAttributes<HTMLDivElement>, keyof CustomProps>;
19
+ /**
20
+ * Счетчик рейтинга.
21
+ * @param props Свойства.
22
+ * @return Элемент.
23
+ */
24
+ export declare function RatingCounter({ size, value, reviewCount, className, hoverDisabled, 'data-testid': testId, ...restProps }: RatingCounterProps): JSX.Element;
25
+ export {};
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.RatingCounter = void 0;
18
+ const react_1 = __importDefault(require("react"));
19
+ const star_svg_1 = __importDefault(require("./star.svg"));
20
+ const get_declination_1 = __importDefault(require("@sima-land/ui-nucleons/helpers/get-declination"));
21
+ const bind_1 = __importDefault(require("classnames/bind"));
22
+ const rating_counter_module_scss_1 = __importDefault(require("./rating-counter.module.scss"));
23
+ const cx = bind_1.default.bind(rating_counter_module_scss_1.default);
24
+ /**
25
+ * Счетчик рейтинга.
26
+ * @param props Свойства.
27
+ * @return Элемент.
28
+ */
29
+ function RatingCounter(_a) {
30
+ var { size = 's', value, reviewCount, className, hoverDisabled, 'data-testid': testId = 'rating-counter' } = _a, restProps = __rest(_a, ["size", "value", "reviewCount", "className", "hoverDisabled", 'data-testid']);
31
+ return (react_1.default.createElement("div", Object.assign({ className: cx('root', `size-${size}`, !(value > 0) && 'empty', hoverDisabled && 'hover-disabled', className), "data-testid": testId }, restProps),
32
+ react_1.default.createElement(star_svg_1.default, { className: cx('star') }),
33
+ value > 0 && react_1.default.createElement("span", { className: cx('value') }, String(value).replace('.', ',')),
34
+ react_1.default.createElement("span", { className: cx('count') }, reviewCount > 0
35
+ ? `${reviewCount} ${(0, get_declination_1.default)(reviewCount, ['отзыв', 'отзыва', 'отзывов'])}`
36
+ : 'Нет отзывов')));
37
+ }
38
+ exports.RatingCounter = RatingCounter;
@@ -0,0 +1,17 @@
1
+ @mixin size-s {
2
+ --rating-icon-size: 16px;
3
+ --rating-value-size: 12px;
4
+ --rating-value-height: 16px;
5
+ --rating-count-gutter: 8px;
6
+ --rating-count-size: 12px;
7
+ --rating-count-height: 16px;
8
+ }
9
+
10
+ @mixin size-m {
11
+ --rating-icon-size: 24px;
12
+ --rating-value-size: 16px;
13
+ --rating-value-height: 24px;
14
+ --rating-count-gutter: 8px;
15
+ --rating-count-size: 14px;
16
+ --rating-count-height: 20px;
17
+ }
@@ -0,0 +1,66 @@
1
+ @use 'node_modules/@sima-land/ui-nucleons/colors';
2
+ @use 'node_modules/@sima-land/ui-nucleons/breakpoints';
3
+ @use './rating-counter-util';
4
+
5
+ .root {
6
+ display: inline-flex;
7
+ flex-wrap: nowrap;
8
+ align-items: center;
9
+ white-space: nowrap;
10
+ --rating-icon-color: #{colors.$additional-amber};
11
+ --rating-count-color: #{colors.$basic-gray38};
12
+ &:hover:not(.hover-disabled) {
13
+ cursor: pointer;
14
+ --rating-count-color: #{colors.$basic-gray54};
15
+ }
16
+ }
17
+
18
+ // модификаторы
19
+ .empty {
20
+ --rating-icon-color: #{colors.$basic-gray12};
21
+ }
22
+
23
+ .size-s {
24
+ @include rating-counter-util.size-s;
25
+ }
26
+
27
+ .size-m {
28
+ @include rating-counter-util.size-m;
29
+ }
30
+
31
+ // составляющие
32
+ .star {
33
+ flex-shrink: 0;
34
+ display: block;
35
+ width: var(--rating-icon-size);
36
+ height: var(--rating-icon-size);
37
+ fill: var(--rating-icon-color);
38
+ }
39
+
40
+ .value {
41
+ font-weight: 700;
42
+ color: #{colors.$additional-amber};
43
+ font-size: var(--rating-value-size);
44
+ line-height: var(--rating-value-height);
45
+ }
46
+
47
+ .count {
48
+ overflow: hidden;
49
+ color: var(--rating-count-color);
50
+ font-size: var(--rating-count-size);
51
+ line-height: var(--rating-count-height);
52
+ text-overflow: ellipsis;
53
+ }
54
+
55
+ // отступы
56
+ .star + .value {
57
+ margin-left: 4px;
58
+ }
59
+
60
+ .star + .count {
61
+ margin-left: var(--rating-count-gutter);
62
+ }
63
+
64
+ .value + .count {
65
+ margin-left: var(--rating-count-gutter);
66
+ }
@@ -0,0 +1,5 @@
1
+ <svg width="16" height="16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
2
+ <path
3
+ d="M7.53601 1.54543C7.70396 1.12719 8.29603 1.12719 8.46398 1.54543L10.1755 5.80741L14.7577 6.11811C15.2074 6.1486 15.3904 6.71169 15.0445 7.00066L11.52 9.94542L12.6405 14.3994C12.7505 14.8365 12.2715 15.1845 11.8897 14.9449L7.99999 12.5028L4.11024 14.9449C3.72853 15.1845 3.24953 14.8365 3.35949 14.3994L4.47999 9.94542L0.955488 7.00067C0.609623 6.71169 0.792582 6.1486 1.24225 6.11811L5.82451 5.80741L7.53601 1.54543Z"
4
+ fill="#000" />
5
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sima-land/moleculas",
3
- "version": "15.3.1",
3
+ "version": "15.5.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",