@snack-uikit/status 0.7.2 → 0.8.1

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
@@ -3,6 +3,27 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 0.8.1 (2025-01-23)
7
+
8
+ ### Only dependencies have been changed
9
+ * [@snack-uikit/loaders@0.9.1](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/loaders/CHANGELOG.md)
10
+ * [@snack-uikit/utils@3.7.0](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/utils/CHANGELOG.md)
11
+
12
+
13
+
14
+
15
+
16
+ # 0.8.0 (2024-12-17)
17
+
18
+
19
+ ### Features
20
+
21
+ * **PDS-77:** added Spinner to Status ([12ed8bc](https://github.com/cloud-ru-tech/snack-uikit/commit/12ed8bcb0568aeb33c48b21751ac0e9bdd09d687))
22
+
23
+
24
+
25
+
26
+
6
27
  ## 0.7.2 (2024-12-12)
7
28
 
8
29
  ### Only dependencies have been changed
package/README.md CHANGED
@@ -33,6 +33,7 @@ import { Status, StatusIndicator } from '@snack-uikit/status';
33
33
  | size | enum Size: `"xs"`, `"s"` | xs | Размер |
34
34
  | appearance | enum Appearance: `"primary"`, `"neutral"`, `"red"`, `"orange"`, `"yellow"`, `"green"`, `"blue"`, `"violet"`, `"pink"` | primary | Внешний вид |
35
35
  | hasBackground | `boolean` | - | Наличие фона |
36
+ | loading | `boolean` | - | |
36
37
  | className | `string` | - | CSS-класс |
37
38
  ## StatusIndicator
38
39
  ### Props
@@ -10,6 +10,7 @@ export type StatusProps = WithSupportProps<{
10
10
  appearance?: Appearance;
11
11
  /** Наличие фона */
12
12
  hasBackground?: boolean;
13
+ loading?: boolean;
13
14
  className?: string;
14
15
  }>;
15
- export declare function Status({ label, size, appearance, hasBackground, className, ...rest }: StatusProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function Status({ label, size, appearance, hasBackground, loading, className, ...rest }: StatusProps): import("react/jsx-runtime").JSX.Element;
@@ -19,6 +19,7 @@ Object.defineProperty(exports, "__esModule", {
19
19
  exports.Status = Status;
20
20
  const jsx_runtime_1 = require("react/jsx-runtime");
21
21
  const classnames_1 = __importDefault(require("classnames"));
22
+ const loaders_1 = require("@snack-uikit/loaders");
22
23
  const utils_1 = require("@snack-uikit/utils");
23
24
  const constants_1 = require("../../constants");
24
25
  const StatusIndicator_1 = require("../StatusIndicator");
@@ -30,15 +31,19 @@ function Status(_a) {
30
31
  size = constants_2.SIZE.Xs,
31
32
  appearance = constants_1.APPEARANCE.Primary,
32
33
  hasBackground,
34
+ loading,
33
35
  className
34
36
  } = _a,
35
- rest = __rest(_a, ["label", "size", "appearance", "hasBackground", "className"]);
37
+ rest = __rest(_a, ["label", "size", "appearance", "hasBackground", "loading", "className"]);
36
38
  return (0, jsx_runtime_1.jsxs)("div", Object.assign({
37
39
  className: (0, classnames_1.default)(styles_module_scss_1.default.container, className)
38
40
  }, (0, utils_1.extractSupportProps)(rest), {
39
41
  "data-size": size,
40
42
  "data-has-background": hasBackground || undefined,
41
- children: [(0, jsx_runtime_1.jsx)(StatusIndicator_1.StatusIndicator, {
43
+ "data-appearance": loading ? constants_1.APPEARANCE.Neutral : appearance,
44
+ children: [loading ? (0, jsx_runtime_1.jsx)(loaders_1.Spinner, {
45
+ size: constants_2.LOADER_SIZE_MAP[size]
46
+ }) : (0, jsx_runtime_1.jsx)(StatusIndicator_1.StatusIndicator, {
42
47
  appearance: appearance,
43
48
  size: constants_2.STATUS_INDICATOR_SIZE_MAP[size]
44
49
  }), (0, jsx_runtime_1.jsx)("span", {
@@ -6,3 +6,7 @@ export declare const STATUS_INDICATOR_SIZE_MAP: {
6
6
  xs: "xs";
7
7
  s: "s";
8
8
  };
9
+ export declare const LOADER_SIZE_MAP: {
10
+ readonly xs: "xxs";
11
+ readonly s: "xs";
12
+ };
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.STATUS_INDICATOR_SIZE_MAP = exports.SIZE = void 0;
6
+ exports.LOADER_SIZE_MAP = exports.STATUS_INDICATOR_SIZE_MAP = exports.SIZE = void 0;
7
7
  const constants_1 = require("../StatusIndicator/constants");
8
8
  exports.SIZE = {
9
9
  Xs: 'xs',
@@ -12,4 +12,8 @@ exports.SIZE = {
12
12
  exports.STATUS_INDICATOR_SIZE_MAP = {
13
13
  [exports.SIZE.Xs]: constants_1.SIZE.Xs,
14
14
  [exports.SIZE.S]: constants_1.SIZE.S
15
+ };
16
+ exports.LOADER_SIZE_MAP = {
17
+ [exports.SIZE.Xs]: 'xxs',
18
+ [exports.SIZE.S]: 'xs'
15
19
  };
@@ -2,9 +2,60 @@
2
2
  display:inline-flex;
3
3
  align-items:center;
4
4
  }
5
- .container[data-has-background]{
5
+ .container[data-has-background][data-appearance=primary]{
6
+ background-color:var(--sys-primary-decor-default, #ebdefd);
7
+ }
8
+ .container[data-has-background][data-appearance=primary] .label{
9
+ color:var(--sys-primary-text-support, #5b4796);
10
+ }
11
+ .container[data-has-background][data-appearance=neutral]{
6
12
  background-color:var(--sys-neutral-decor-default, #dde0ea);
7
13
  }
14
+ .container[data-has-background][data-appearance=neutral] .label{
15
+ color:var(--sys-neutral-text-support, #6d707f);
16
+ }
17
+ .container[data-has-background][data-appearance=red]{
18
+ background-color:var(--sys-red-decor-default, #fdd6cd);
19
+ }
20
+ .container[data-has-background][data-appearance=red] .label{
21
+ color:var(--sys-red-text-support, #ae514c);
22
+ }
23
+ .container[data-has-background][data-appearance=orange]{
24
+ background-color:var(--sys-orange-decor-default, #fed8b8);
25
+ }
26
+ .container[data-has-background][data-appearance=orange] .label{
27
+ color:var(--sys-orange-text-support, #bb733e);
28
+ }
29
+ .container[data-has-background][data-appearance=blue]{
30
+ background-color:var(--sys-blue-decor-default, #d6e2f4);
31
+ }
32
+ .container[data-has-background][data-appearance=blue] .label{
33
+ color:var(--sys-blue-text-support, #4877b0);
34
+ }
35
+ .container[data-has-background][data-appearance=violet]{
36
+ background-color:var(--sys-violet-decor-default, #e6dcf3);
37
+ }
38
+ .container[data-has-background][data-appearance=violet] .label{
39
+ color:var(--sys-violet-text-support, #8c639b);
40
+ }
41
+ .container[data-has-background][data-appearance=pink]{
42
+ background-color:var(--sys-pink-decor-default, #f5d9e1);
43
+ }
44
+ .container[data-has-background][data-appearance=pink] .label{
45
+ color:var(--sys-pink-text-support, #ae5e80);
46
+ }
47
+ .container[data-has-background][data-appearance=yellow]{
48
+ background-color:var(--sys-yellow-decor-default, #f0dfb1);
49
+ }
50
+ .container[data-has-background][data-appearance=yellow] .label{
51
+ color:var(--sys-yellow-text-support, #b78c32);
52
+ }
53
+ .container[data-has-background][data-appearance=green]{
54
+ background-color:var(--sys-green-decor-default, #d2ead0);
55
+ }
56
+ .container[data-has-background][data-appearance=green] .label{
57
+ color:var(--sys-green-text-support, #55915a);
58
+ }
8
59
  .container[data-has-background][data-size=xs]{
9
60
  height:var(--size-status-background-container-xs, 16px);
10
61
  padding-right:var(--spacing-status-background-container-padding-right-xs, 4px);
@@ -10,6 +10,7 @@ export type StatusProps = WithSupportProps<{
10
10
  appearance?: Appearance;
11
11
  /** Наличие фона */
12
12
  hasBackground?: boolean;
13
+ loading?: boolean;
13
14
  className?: string;
14
15
  }>;
15
- export declare function Status({ label, size, appearance, hasBackground, className, ...rest }: StatusProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function Status({ label, size, appearance, hasBackground, loading, className, ...rest }: StatusProps): import("react/jsx-runtime").JSX.Element;
@@ -11,12 +11,13 @@ var __rest = (this && this.__rest) || function (s, e) {
11
11
  };
12
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
13
  import cn from 'classnames';
14
+ import { Spinner } from '@snack-uikit/loaders';
14
15
  import { extractSupportProps } from '@snack-uikit/utils';
15
16
  import { APPEARANCE } from '../../constants';
16
17
  import { StatusIndicator } from '../StatusIndicator';
17
- import { SIZE, STATUS_INDICATOR_SIZE_MAP } from './constants';
18
+ import { LOADER_SIZE_MAP, SIZE, STATUS_INDICATOR_SIZE_MAP } from './constants';
18
19
  import styles from './styles.module.css';
19
20
  export function Status(_a) {
20
- var { label, size = SIZE.Xs, appearance = APPEARANCE.Primary, hasBackground, className } = _a, rest = __rest(_a, ["label", "size", "appearance", "hasBackground", "className"]);
21
- return (_jsxs("div", Object.assign({ className: cn(styles.container, className) }, extractSupportProps(rest), { "data-size": size, "data-has-background": hasBackground || undefined, children: [_jsx(StatusIndicator, { appearance: appearance, size: STATUS_INDICATOR_SIZE_MAP[size] }), _jsx("span", { className: styles.label, children: label })] })));
21
+ var { label, size = SIZE.Xs, appearance = APPEARANCE.Primary, hasBackground, loading, className } = _a, rest = __rest(_a, ["label", "size", "appearance", "hasBackground", "loading", "className"]);
22
+ return (_jsxs("div", Object.assign({ className: cn(styles.container, className) }, extractSupportProps(rest), { "data-size": size, "data-has-background": hasBackground || undefined, "data-appearance": loading ? APPEARANCE.Neutral : appearance, children: [loading ? (_jsx(Spinner, { size: LOADER_SIZE_MAP[size] })) : (_jsx(StatusIndicator, { appearance: appearance, size: STATUS_INDICATOR_SIZE_MAP[size] })), _jsx("span", { className: styles.label, children: label })] })));
22
23
  }
@@ -6,3 +6,7 @@ export declare const STATUS_INDICATOR_SIZE_MAP: {
6
6
  xs: "xs";
7
7
  s: "s";
8
8
  };
9
+ export declare const LOADER_SIZE_MAP: {
10
+ readonly xs: "xxs";
11
+ readonly s: "xs";
12
+ };
@@ -7,3 +7,7 @@ export const STATUS_INDICATOR_SIZE_MAP = {
7
7
  [SIZE.Xs]: StatusIndicatorSize.Xs,
8
8
  [SIZE.S]: StatusIndicatorSize.S,
9
9
  };
10
+ export const LOADER_SIZE_MAP = {
11
+ [SIZE.Xs]: 'xxs',
12
+ [SIZE.S]: 'xs',
13
+ };
@@ -2,9 +2,60 @@
2
2
  display:inline-flex;
3
3
  align-items:center;
4
4
  }
5
- .container[data-has-background]{
5
+ .container[data-has-background][data-appearance=primary]{
6
+ background-color:var(--sys-primary-decor-default, #ebdefd);
7
+ }
8
+ .container[data-has-background][data-appearance=primary] .label{
9
+ color:var(--sys-primary-text-support, #5b4796);
10
+ }
11
+ .container[data-has-background][data-appearance=neutral]{
6
12
  background-color:var(--sys-neutral-decor-default, #dde0ea);
7
13
  }
14
+ .container[data-has-background][data-appearance=neutral] .label{
15
+ color:var(--sys-neutral-text-support, #6d707f);
16
+ }
17
+ .container[data-has-background][data-appearance=red]{
18
+ background-color:var(--sys-red-decor-default, #fdd6cd);
19
+ }
20
+ .container[data-has-background][data-appearance=red] .label{
21
+ color:var(--sys-red-text-support, #ae514c);
22
+ }
23
+ .container[data-has-background][data-appearance=orange]{
24
+ background-color:var(--sys-orange-decor-default, #fed8b8);
25
+ }
26
+ .container[data-has-background][data-appearance=orange] .label{
27
+ color:var(--sys-orange-text-support, #bb733e);
28
+ }
29
+ .container[data-has-background][data-appearance=blue]{
30
+ background-color:var(--sys-blue-decor-default, #d6e2f4);
31
+ }
32
+ .container[data-has-background][data-appearance=blue] .label{
33
+ color:var(--sys-blue-text-support, #4877b0);
34
+ }
35
+ .container[data-has-background][data-appearance=violet]{
36
+ background-color:var(--sys-violet-decor-default, #e6dcf3);
37
+ }
38
+ .container[data-has-background][data-appearance=violet] .label{
39
+ color:var(--sys-violet-text-support, #8c639b);
40
+ }
41
+ .container[data-has-background][data-appearance=pink]{
42
+ background-color:var(--sys-pink-decor-default, #f5d9e1);
43
+ }
44
+ .container[data-has-background][data-appearance=pink] .label{
45
+ color:var(--sys-pink-text-support, #ae5e80);
46
+ }
47
+ .container[data-has-background][data-appearance=yellow]{
48
+ background-color:var(--sys-yellow-decor-default, #f0dfb1);
49
+ }
50
+ .container[data-has-background][data-appearance=yellow] .label{
51
+ color:var(--sys-yellow-text-support, #b78c32);
52
+ }
53
+ .container[data-has-background][data-appearance=green]{
54
+ background-color:var(--sys-green-decor-default, #d2ead0);
55
+ }
56
+ .container[data-has-background][data-appearance=green] .label{
57
+ color:var(--sys-green-text-support, #55915a);
58
+ }
8
59
  .container[data-has-background][data-size=xs]{
9
60
  height:var(--size-status-background-container-xs, 16px);
10
61
  padding-right:var(--spacing-status-background-container-padding-right-xs, 4px);
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "title": "Status",
7
- "version": "0.7.2",
7
+ "version": "0.8.1",
8
8
  "sideEffects": [
9
9
  "*.css",
10
10
  "*.woff",
@@ -36,8 +36,9 @@
36
36
  "license": "Apache-2.0",
37
37
  "scripts": {},
38
38
  "dependencies": {
39
- "@snack-uikit/utils": "3.6.0",
39
+ "@snack-uikit/loaders": "0.9.1",
40
+ "@snack-uikit/utils": "3.7.0",
40
41
  "classnames": "2.5.1"
41
42
  },
42
- "gitHead": "ac8fa414e1a84f72594d9c509b0daca04b5e48be"
43
+ "gitHead": "3528e78aec23804dca44d311947c1dcd4ed3792b"
43
44
  }
@@ -1,11 +1,12 @@
1
1
  import cn from 'classnames';
2
2
 
3
+ import { Spinner } from '@snack-uikit/loaders';
3
4
  import { extractSupportProps, WithSupportProps } from '@snack-uikit/utils';
4
5
 
5
6
  import { APPEARANCE } from '../../constants';
6
7
  import { Appearance } from '../../types';
7
8
  import { StatusIndicator } from '../StatusIndicator';
8
- import { SIZE, STATUS_INDICATOR_SIZE_MAP } from './constants';
9
+ import { LOADER_SIZE_MAP, SIZE, STATUS_INDICATOR_SIZE_MAP } from './constants';
9
10
  import styles from './styles.module.scss';
10
11
  import { Size } from './types';
11
12
 
@@ -18,6 +19,7 @@ export type StatusProps = WithSupportProps<{
18
19
  appearance?: Appearance;
19
20
  /** Наличие фона */
20
21
  hasBackground?: boolean;
22
+ loading?: boolean;
21
23
  className?: string;
22
24
  }>;
23
25
 
@@ -26,6 +28,7 @@ export function Status({
26
28
  size = SIZE.Xs,
27
29
  appearance = APPEARANCE.Primary,
28
30
  hasBackground,
31
+ loading,
29
32
  className,
30
33
  ...rest
31
34
  }: StatusProps) {
@@ -35,8 +38,13 @@ export function Status({
35
38
  {...extractSupportProps(rest)}
36
39
  data-size={size}
37
40
  data-has-background={hasBackground || undefined}
41
+ data-appearance={loading ? APPEARANCE.Neutral : appearance}
38
42
  >
39
- <StatusIndicator appearance={appearance} size={STATUS_INDICATOR_SIZE_MAP[size]} />
43
+ {loading ? (
44
+ <Spinner size={LOADER_SIZE_MAP[size]} />
45
+ ) : (
46
+ <StatusIndicator appearance={appearance} size={STATUS_INDICATOR_SIZE_MAP[size]} />
47
+ )}
40
48
  <span className={styles.label}>{label}</span>
41
49
  </div>
42
50
  );
@@ -9,3 +9,8 @@ export const STATUS_INDICATOR_SIZE_MAP = {
9
9
  [SIZE.Xs]: StatusIndicatorSize.Xs,
10
10
  [SIZE.S]: StatusIndicatorSize.S,
11
11
  };
12
+
13
+ export const LOADER_SIZE_MAP = {
14
+ [SIZE.Xs]: 'xxs',
15
+ [SIZE.S]: 'xs',
16
+ } as const;
@@ -5,13 +5,22 @@ $label-typography: (
5
5
  's': styles-tokens-status.$sans-label-m
6
6
  );
7
7
  $sizes: 'xs', 's';
8
+ $appearances: 'primary', 'neutral', 'red', 'orange', 'blue', 'violet', 'pink', 'yellow', 'green';
8
9
 
9
10
  .container {
10
11
  display: inline-flex;
11
12
  align-items: center;
12
13
 
13
14
  &[data-has-background] {
14
- background-color: styles-tokens-status.$sys-neutral-decor-default;
15
+ @each $appearance in $appearances {
16
+ &[data-appearance='#{$appearance}'] {
17
+ background-color: styles-tokens-status.simple-var(styles-tokens-status.$theme-variables, 'sys', $appearance, 'decor-default');
18
+
19
+ .label {
20
+ color: styles-tokens-status.simple-var(styles-tokens-status.$theme-variables, 'sys', $appearance, 'text-support')
21
+ }
22
+ }
23
+ }
15
24
 
16
25
  @each $size in $sizes {
17
26
  &[data-size='#{$size}'] {