@snack-uikit/status 0.7.2-preview-7eeb1bc1.0 → 0.8.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
@@ -3,6 +3,26 @@
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.0 (2024-12-17)
7
+
8
+
9
+ ### Features
10
+
11
+ * **PDS-77:** added Spinner to Status ([12ed8bc](https://github.com/cloud-ru-tech/snack-uikit/commit/12ed8bcb0568aeb33c48b21751ac0e9bdd09d687))
12
+
13
+
14
+
15
+
16
+
17
+ ## 0.7.2 (2024-12-12)
18
+
19
+ ### Only dependencies have been changed
20
+ * [@snack-uikit/utils@3.6.0](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/utils/CHANGELOG.md)
21
+
22
+
23
+
24
+
25
+
6
26
  ## 0.7.1 (2024-11-14)
7
27
 
8
28
 
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-preview-7eeb1bc1.0",
7
+ "version": "0.8.0",
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.5.1-preview-7eeb1bc1.0",
39
+ "@snack-uikit/loaders": "0.9.0",
40
+ "@snack-uikit/utils": "3.6.0",
40
41
  "classnames": "2.5.1"
41
42
  },
42
- "gitHead": "0d9e8006b8465b19a5b96b418ee2edbe536f1e58"
43
+ "gitHead": "33a6d8bc270bd11dec3e4834f2ba8e97c57d5c15"
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}'] {