@snack-uikit/toggles 0.11.0 → 0.12.1-preview-d1a63029.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.
Files changed (30) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +2 -1
  3. package/dist/cjs/components/Favorite/Favorite.d.ts +4 -1
  4. package/dist/cjs/components/Favorite/Favorite.js +8 -4
  5. package/dist/cjs/components/Favorite/styles.module.css +6 -0
  6. package/dist/cjs/components/TogglePrivate/TogglePrivate.d.ts +1 -0
  7. package/dist/cjs/components/TogglePrivate/TogglePrivate.js +5 -2
  8. package/dist/cjs/constants.d.ts +1 -0
  9. package/dist/cjs/constants.js +2 -1
  10. package/dist/cjs/types.d.ts +3 -1
  11. package/dist/esm/components/Favorite/Favorite.d.ts +4 -1
  12. package/dist/esm/components/Favorite/Favorite.js +5 -3
  13. package/dist/esm/components/Favorite/styles.module.css +6 -0
  14. package/dist/esm/components/TogglePrivate/TogglePrivate.d.ts +1 -0
  15. package/dist/esm/components/TogglePrivate/TogglePrivate.js +2 -2
  16. package/dist/esm/constants.d.ts +1 -0
  17. package/dist/esm/constants.js +1 -0
  18. package/dist/esm/types.d.ts +3 -1
  19. package/package.json +3 -3
  20. package/src/components/Checkbox/styles.module.scss +24 -26
  21. package/src/components/Favorite/Favorite.tsx +8 -2
  22. package/src/components/Favorite/styles.module.scss +11 -12
  23. package/src/components/Radio/styles.module.scss +19 -22
  24. package/src/components/Switch/styles.module.scss +25 -27
  25. package/src/components/TogglePrivate/TogglePrivate.tsx +3 -0
  26. package/src/components/TogglePrivate/styles.module.scss +5 -7
  27. package/src/components/styles.module.scss +5 -5
  28. package/src/constants.ts +1 -0
  29. package/src/helperComponents/Spinner/styles.module.scss +3 -4
  30. package/src/types.ts +3 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
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.12.0 (2024-10-28)
7
+
8
+
9
+ ### Features
10
+
11
+ * **FF-5782:** sass use/forward approach ([3e53869](https://github.com/cloud-ru-tech/snack-uikit/commit/3e53869ace864a7718e434b7f410c15dbd911cd5))
12
+
13
+
14
+
15
+
16
+
6
17
  # 0.11.0 (2024-10-28)
7
18
 
8
19
 
package/README.md CHANGED
@@ -151,7 +151,8 @@ return (
151
151
  | className | `string` | - | CSS-класс |
152
152
  | size | enum Size: `"s"`, `"m"` | m | Размер |
153
153
  | inputRef | `RefObject<HTMLInputElement>` | - | |
154
- | icon | enum FavoriteIcon: `"star"`, `"heart"` | heart | Иконка |
154
+ | icon | enum FavoriteIcon: `"star"`, `"heart"`, `"pin"` | heart | Иконка |
155
+ | onKeyDown | `KeyboardEventHandler<HTMLDivElement>` | - | Колбек нажатия клавиши клавиатуры |
155
156
  ## ToggleGroup
156
157
  ### Props
157
158
  | name | type | default value | description |
@@ -1,6 +1,9 @@
1
+ import { KeyboardEventHandler } from 'react';
1
2
  import { FavoriteIcon, ToggleProps } from '../../types';
2
3
  export type FavoriteProps = ToggleProps & {
3
4
  /** Иконка */
4
5
  icon?: FavoriteIcon;
6
+ /** Колбек нажатия клавиши клавиатуры */
7
+ onKeyDown?: KeyboardEventHandler<HTMLDivElement>;
5
8
  };
6
- export declare function Favorite({ inputRef, 'data-test-id': dataTestId, size, icon, ...restProps }: FavoriteProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function Favorite({ inputRef, 'data-test-id': dataTestId, size, icon, onKeyDown, ...restProps }: FavoriteProps): import("react/jsx-runtime").JSX.Element;
@@ -26,25 +26,29 @@ const TogglePrivate_1 = require("../TogglePrivate");
26
26
  const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
27
27
  const CHECKED_ICONS = {
28
28
  [constants_1.FAVORITE_ICON.Star]: icons_1.StarFilledSVG,
29
- [constants_1.FAVORITE_ICON.Heart]: icons_1.HeartFilledSVG
29
+ [constants_1.FAVORITE_ICON.Heart]: icons_1.HeartFilledSVG,
30
+ [constants_1.FAVORITE_ICON.Pin]: icons_1.PinnedSVG
30
31
  };
31
32
  const UNCHECKED_ICONS = {
32
33
  [constants_1.FAVORITE_ICON.Star]: icons_1.StarSVG,
33
- [constants_1.FAVORITE_ICON.Heart]: icons_1.HeartSVG
34
+ [constants_1.FAVORITE_ICON.Heart]: icons_1.HeartSVG,
35
+ [constants_1.FAVORITE_ICON.Pin]: icons_1.UnPinnedSVG
34
36
  };
35
37
  function Favorite(_a) {
36
38
  var {
37
39
  inputRef,
38
40
  'data-test-id': dataTestId,
39
41
  size = constants_1.SIZE.M,
40
- icon = constants_1.FAVORITE_ICON.Heart
42
+ icon = constants_1.FAVORITE_ICON.Heart,
43
+ onKeyDown
41
44
  } = _a,
42
- restProps = __rest(_a, ["inputRef", 'data-test-id', "size", "icon"]);
45
+ restProps = __rest(_a, ["inputRef", 'data-test-id', "size", "icon", "onKeyDown"]);
43
46
  const iconSize = (0, react_1.useMemo)(() => (0, utils_1.getIconSize)(size), [size]);
44
47
  return (0, jsx_runtime_1.jsx)(TogglePrivate_1.TogglePrivate, Object.assign({}, restProps, {
45
48
  "data-test-id": dataTestId,
46
49
  ref: inputRef,
47
50
  size: size,
51
+ onKeyDown: onKeyDown,
48
52
  render: function Favorite(visualState) {
49
53
  const Icon = visualState.checked ? CHECKED_ICONS[icon] : UNCHECKED_ICONS[icon];
50
54
  const data = (0, utils_1.getVisualStateAttributes)(Object.assign(Object.assign({}, visualState), {
@@ -45,6 +45,12 @@
45
45
  .icon:not([data-disabled=true])[data-icon=heart][data-checked=true][data-focusvisible=true], .icon:not([data-disabled=true])[data-icon=heart][data-checked=true][data-hover=true]{
46
46
  color:var(--sys-red-accent-hovered, #bd4844);
47
47
  }
48
+ .icon:not([data-disabled=true])[data-icon=pin][data-checked=true]{
49
+ color:var(--sys-primary-accent-default, #794ed3);
50
+ }
51
+ .icon:not([data-disabled=true])[data-icon=pin][data-checked=true][data-focusvisible=true], .icon:not([data-disabled=true])[data-icon=pin][data-checked=true][data-hover=true]{
52
+ color:var(--sys-primary-accent-hovered, #6851a6);
53
+ }
48
54
  .icon[data-disabled=true]{
49
55
  color:var(--sys-neutral-text-disabled, #aaaebd);
50
56
  }
@@ -17,4 +17,5 @@ export declare const TogglePrivate: import("react").ForwardRefExoticComponent<{
17
17
  onClick?: import("react").MouseEventHandler<HTMLInputElement>;
18
18
  onBlur?: import("react").FocusEventHandler<HTMLInputElement>;
19
19
  onFocus?: import("react").FocusEventHandler<HTMLInputElement>;
20
+ onKeyDown?: import("react").KeyboardEventHandler<HTMLDivElement>;
20
21
  } & import("react").RefAttributes<HTMLInputElement>>;
@@ -36,9 +36,10 @@ exports.TogglePrivate = (0, react_1.forwardRef)(function TogglePrivate(_a, ref)
36
36
  className,
37
37
  size = constants_1.SIZE.M,
38
38
  mode = constants_1.MODE.Checkbox,
39
+ onKeyDown,
39
40
  'data-test-id': testId
40
41
  } = _a,
41
- otherProps = __rest(_a, ["render", "checked", "defaultChecked", "onChange", "onBlur", "onFocus", "disabled", "className", "size", "mode", 'data-test-id']);
42
+ otherProps = __rest(_a, ["render", "checked", "defaultChecked", "onChange", "onBlur", "onFocus", "disabled", "className", "size", "mode", "onKeyDown", 'data-test-id']);
42
43
  const [checked, setChecked] = (0, uncontrollable_1.useUncontrolledProp)(checkedProp, Boolean(defaultChecked), onChange);
43
44
  const [focusVisible, setFocusVisible] = (0, react_1.useState)(false);
44
45
  const [hover, setHover] = (0, react_1.useState)(false);
@@ -50,11 +51,13 @@ exports.TogglePrivate = (0, react_1.forwardRef)(function TogglePrivate(_a, ref)
50
51
  size
51
52
  };
52
53
  return (0, jsx_runtime_1.jsxs)("span", Object.assign({
54
+ role: mode,
53
55
  className: (0, classnames_1.default)(className, styles_module_scss_1.default.toggleLayout),
54
56
  "data-size": size,
55
57
  "data-test-id": testId,
56
58
  onMouseEnter: () => setHover(true),
57
- onMouseLeave: () => setHover(false)
59
+ onMouseLeave: () => setHover(false),
60
+ onKeyDown: onKeyDown
58
61
  }, (0, utils_1.getVisualStateAttributes)(visualState), {
59
62
  children: [render(visualState), (0, jsx_runtime_1.jsx)("input", Object.assign({}, otherProps, {
60
63
  "data-test-id": `${testId}-native-input`,
@@ -9,6 +9,7 @@ export declare const SIZE: {
9
9
  export declare const FAVORITE_ICON: {
10
10
  readonly Star: "star";
11
11
  readonly Heart: "heart";
12
+ readonly Pin: "pin";
12
13
  };
13
14
  export declare const SELECTION_MODE: {
14
15
  readonly Single: "single";
@@ -14,7 +14,8 @@ exports.SIZE = {
14
14
  };
15
15
  exports.FAVORITE_ICON = {
16
16
  Star: 'star',
17
- Heart: 'heart'
17
+ Heart: 'heart',
18
+ Pin: 'pin'
18
19
  };
19
20
  exports.SELECTION_MODE = {
20
21
  Single: 'single',
@@ -1,4 +1,4 @@
1
- import { FocusEventHandler, MouseEventHandler, ReactNode, RefObject } from 'react';
1
+ import { FocusEventHandler, KeyboardEventHandler, MouseEventHandler, ReactNode, RefObject } from 'react';
2
2
  import { ValueOf, WithSupportProps } from '@snack-uikit/utils';
3
3
  import { FAVORITE_ICON, MODE, SELECTION_MODE, SIZE } from './constants';
4
4
  export type Size = ValueOf<typeof SIZE>;
@@ -45,6 +45,8 @@ export type TogglePrivateProps = WithSupportProps<{
45
45
  onBlur?: FocusEventHandler<HTMLInputElement>;
46
46
  /** Колбек приобретения фокуса */
47
47
  onFocus?: FocusEventHandler<HTMLInputElement>;
48
+ /** Колбек нажатия клавиши клавиатуры */
49
+ onKeyDown?: KeyboardEventHandler<HTMLDivElement>;
48
50
  }>;
49
51
  export type ToggleProps = WithSupportProps<Pick<TogglePrivateProps, 'id' | 'name' | 'value' | 'tabIndex' | 'autofocus' | 'checked' | 'defaultChecked' | 'disabled' | 'onChange' | 'onClick' | 'onBlur' | 'onFocus' | 'className' | 'size'> & {
50
52
  inputRef?: RefObject<HTMLInputElement>;
@@ -1,6 +1,9 @@
1
+ import { KeyboardEventHandler } from 'react';
1
2
  import { FavoriteIcon, ToggleProps } from '../../types';
2
3
  export type FavoriteProps = ToggleProps & {
3
4
  /** Иконка */
4
5
  icon?: FavoriteIcon;
6
+ /** Колбек нажатия клавиши клавиатуры */
7
+ onKeyDown?: KeyboardEventHandler<HTMLDivElement>;
5
8
  };
6
- export declare function Favorite({ inputRef, 'data-test-id': dataTestId, size, icon, ...restProps }: FavoriteProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function Favorite({ inputRef, 'data-test-id': dataTestId, size, icon, onKeyDown, ...restProps }: FavoriteProps): import("react/jsx-runtime").JSX.Element;
@@ -11,7 +11,7 @@ var __rest = (this && this.__rest) || function (s, e) {
11
11
  };
12
12
  import { jsx as _jsx } from "react/jsx-runtime";
13
13
  import { useMemo } from 'react';
14
- import { HeartFilledSVG, HeartSVG, StarFilledSVG, StarSVG } from '@snack-uikit/icons';
14
+ import { HeartFilledSVG, HeartSVG, PinnedSVG, StarFilledSVG, StarSVG, UnPinnedSVG } from '@snack-uikit/icons';
15
15
  import { FAVORITE_ICON, SIZE } from '../../constants';
16
16
  import { getIconSize, getVisualStateAttributes } from '../../utils';
17
17
  import { TogglePrivate } from '../TogglePrivate';
@@ -19,15 +19,17 @@ import styles from './styles.module.css';
19
19
  const CHECKED_ICONS = {
20
20
  [FAVORITE_ICON.Star]: StarFilledSVG,
21
21
  [FAVORITE_ICON.Heart]: HeartFilledSVG,
22
+ [FAVORITE_ICON.Pin]: PinnedSVG,
22
23
  };
23
24
  const UNCHECKED_ICONS = {
24
25
  [FAVORITE_ICON.Star]: StarSVG,
25
26
  [FAVORITE_ICON.Heart]: HeartSVG,
27
+ [FAVORITE_ICON.Pin]: UnPinnedSVG,
26
28
  };
27
29
  export function Favorite(_a) {
28
- var { inputRef, 'data-test-id': dataTestId, size = SIZE.M, icon = FAVORITE_ICON.Heart } = _a, restProps = __rest(_a, ["inputRef", 'data-test-id', "size", "icon"]);
30
+ var { inputRef, 'data-test-id': dataTestId, size = SIZE.M, icon = FAVORITE_ICON.Heart, onKeyDown } = _a, restProps = __rest(_a, ["inputRef", 'data-test-id', "size", "icon", "onKeyDown"]);
29
31
  const iconSize = useMemo(() => getIconSize(size), [size]);
30
- return (_jsx(TogglePrivate, Object.assign({}, restProps, { "data-test-id": dataTestId, ref: inputRef, size: size, render: function Favorite(visualState) {
32
+ return (_jsx(TogglePrivate, Object.assign({}, restProps, { "data-test-id": dataTestId, ref: inputRef, size: size, onKeyDown: onKeyDown, render: function Favorite(visualState) {
31
33
  const Icon = visualState.checked ? CHECKED_ICONS[icon] : UNCHECKED_ICONS[icon];
32
34
  const data = getVisualStateAttributes(Object.assign(Object.assign({}, visualState), { icon }));
33
35
  return (_jsx("div", Object.assign({ className: styles.container }, data, { children: _jsx(Icon, Object.assign({ className: styles.icon }, data, { size: iconSize })) })));
@@ -45,6 +45,12 @@
45
45
  .icon:not([data-disabled=true])[data-icon=heart][data-checked=true][data-focusvisible=true], .icon:not([data-disabled=true])[data-icon=heart][data-checked=true][data-hover=true]{
46
46
  color:var(--sys-red-accent-hovered, #bd4844);
47
47
  }
48
+ .icon:not([data-disabled=true])[data-icon=pin][data-checked=true]{
49
+ color:var(--sys-primary-accent-default, #794ed3);
50
+ }
51
+ .icon:not([data-disabled=true])[data-icon=pin][data-checked=true][data-focusvisible=true], .icon:not([data-disabled=true])[data-icon=pin][data-checked=true][data-hover=true]{
52
+ color:var(--sys-primary-accent-hovered, #6851a6);
53
+ }
48
54
  .icon[data-disabled=true]{
49
55
  color:var(--sys-neutral-text-disabled, #aaaebd);
50
56
  }
@@ -17,4 +17,5 @@ export declare const TogglePrivate: import("react").ForwardRefExoticComponent<{
17
17
  onClick?: import("react").MouseEventHandler<HTMLInputElement>;
18
18
  onBlur?: import("react").FocusEventHandler<HTMLInputElement>;
19
19
  onFocus?: import("react").FocusEventHandler<HTMLInputElement>;
20
+ onKeyDown?: import("react").KeyboardEventHandler<HTMLDivElement>;
20
21
  } & import("react").RefAttributes<HTMLInputElement>>;
@@ -17,7 +17,7 @@ import { MODE, SIZE } from '../../constants';
17
17
  import { getVisualStateAttributes } from '../../utils';
18
18
  import styles from './styles.module.css';
19
19
  export const TogglePrivate = forwardRef(function TogglePrivate(_a, ref) {
20
- var { render, checked: checkedProp, defaultChecked, onChange, onBlur, onFocus, disabled, className, size = SIZE.M, mode = MODE.Checkbox, 'data-test-id': testId } = _a, otherProps = __rest(_a, ["render", "checked", "defaultChecked", "onChange", "onBlur", "onFocus", "disabled", "className", "size", "mode", 'data-test-id']);
20
+ var { render, checked: checkedProp, defaultChecked, onChange, onBlur, onFocus, disabled, className, size = SIZE.M, mode = MODE.Checkbox, onKeyDown, 'data-test-id': testId } = _a, otherProps = __rest(_a, ["render", "checked", "defaultChecked", "onChange", "onBlur", "onFocus", "disabled", "className", "size", "mode", "onKeyDown", 'data-test-id']);
21
21
  const [checked, setChecked] = useUncontrolledProp(checkedProp, Boolean(defaultChecked), onChange);
22
22
  const [focusVisible, setFocusVisible] = useState(false);
23
23
  const [hover, setHover] = useState(false);
@@ -28,7 +28,7 @@ export const TogglePrivate = forwardRef(function TogglePrivate(_a, ref) {
28
28
  hover,
29
29
  size,
30
30
  };
31
- return (_jsxs("span", Object.assign({ className: cn(className, styles.toggleLayout), "data-size": size, "data-test-id": testId, onMouseEnter: () => setHover(true), onMouseLeave: () => setHover(false) }, getVisualStateAttributes(visualState), { children: [render(visualState), _jsx("input", Object.assign({}, otherProps, { "data-test-id": `${testId}-native-input`, ref: ref, type: mode, className: styles.togglePrivate, checked: checked, disabled: disabled, onChange: e => setChecked(e.target.checked), onFocus: event => {
31
+ return (_jsxs("span", Object.assign({ role: mode, className: cn(className, styles.toggleLayout), "data-size": size, "data-test-id": testId, onMouseEnter: () => setHover(true), onMouseLeave: () => setHover(false), onKeyDown: onKeyDown }, getVisualStateAttributes(visualState), { children: [render(visualState), _jsx("input", Object.assign({}, otherProps, { "data-test-id": `${testId}-native-input`, ref: ref, type: mode, className: styles.togglePrivate, checked: checked, disabled: disabled, onChange: e => setChecked(e.target.checked), onFocus: event => {
32
32
  setFocusVisible(event.target.matches(':focus-visible'));
33
33
  onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
34
34
  }, onBlur: event => {
@@ -9,6 +9,7 @@ export declare const SIZE: {
9
9
  export declare const FAVORITE_ICON: {
10
10
  readonly Star: "star";
11
11
  readonly Heart: "heart";
12
+ readonly Pin: "pin";
12
13
  };
13
14
  export declare const SELECTION_MODE: {
14
15
  readonly Single: "single";
@@ -9,6 +9,7 @@ export const SIZE = {
9
9
  export const FAVORITE_ICON = {
10
10
  Star: 'star',
11
11
  Heart: 'heart',
12
+ Pin: 'pin',
12
13
  };
13
14
  export const SELECTION_MODE = {
14
15
  Single: 'single',
@@ -1,4 +1,4 @@
1
- import { FocusEventHandler, MouseEventHandler, ReactNode, RefObject } from 'react';
1
+ import { FocusEventHandler, KeyboardEventHandler, MouseEventHandler, ReactNode, RefObject } from 'react';
2
2
  import { ValueOf, WithSupportProps } from '@snack-uikit/utils';
3
3
  import { FAVORITE_ICON, MODE, SELECTION_MODE, SIZE } from './constants';
4
4
  export type Size = ValueOf<typeof SIZE>;
@@ -45,6 +45,8 @@ export type TogglePrivateProps = WithSupportProps<{
45
45
  onBlur?: FocusEventHandler<HTMLInputElement>;
46
46
  /** Колбек приобретения фокуса */
47
47
  onFocus?: FocusEventHandler<HTMLInputElement>;
48
+ /** Колбек нажатия клавиши клавиатуры */
49
+ onKeyDown?: KeyboardEventHandler<HTMLDivElement>;
48
50
  }>;
49
51
  export type ToggleProps = WithSupportProps<Pick<TogglePrivateProps, 'id' | 'name' | 'value' | 'tabIndex' | 'autofocus' | 'checked' | 'defaultChecked' | 'disabled' | 'onChange' | 'onClick' | 'onBlur' | 'onFocus' | 'className' | 'size'> & {
50
52
  inputRef?: RefObject<HTMLInputElement>;
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "title": "Toggles",
7
- "version": "0.11.0",
7
+ "version": "0.12.1-preview-d1a63029.0",
8
8
  "sideEffects": [
9
9
  "*.css",
10
10
  "*.woff",
@@ -36,11 +36,11 @@
36
36
  "license": "Apache-2.0",
37
37
  "scripts": {},
38
38
  "dependencies": {
39
- "@snack-uikit/icons": "0.23.0",
39
+ "@snack-uikit/icons": "0.24.0",
40
40
  "@snack-uikit/utils": "3.5.0",
41
41
  "classnames": "2.3.2",
42
42
  "merge-refs": "1.2.1",
43
43
  "uncontrollable": "8.0.0"
44
44
  },
45
- "gitHead": "62cc21d8606a61a78f80e3a7455b20d6f38474fa"
45
+ "gitHead": "167f0c505b9958dc320111f7ee9e8ed2ebc58796"
46
46
  }
@@ -1,61 +1,59 @@
1
- @import '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-toggles';
2
- @import '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-element';
3
- @import '../styles.module';
4
-
5
- $sizes: 's', 'm';
1
+ @use '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-toggles';
2
+ @use '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-element';
3
+ @use '../styles.module';
6
4
 
7
5
  $icon-sizes: (
8
- 's': $icon-xs,
9
- 'm': $icon-s,
6
+ 's': styles-tokens-element.$icon-xs,
7
+ 'm': styles-tokens-element.$icon-s,
10
8
  );
11
9
 
12
10
  .container {
13
- @include container('checkbox');
11
+ @include styles.container('checkbox');
14
12
  }
15
13
 
16
14
  .box {
17
15
  box-sizing: border-box;
18
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'background2-level');
19
- border-color: simple-var($theme-variables, 'sys', 'neutral', 'decor-activated');
16
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'background2-level');
17
+ border-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'decor-activated');
20
18
  border-style: solid; // это наверное должно быть в композитном токене box
21
19
 
22
20
  &[data-checked=false] {
23
21
  &[data-focusvisible=true],
24
22
  &[data-hover=true] {
25
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'background2-level');
26
- border-color: simple-var($theme-variables, 'sys', 'neutral', 'accent-hovered');
23
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'background2-level');
24
+ border-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'accent-hovered');
27
25
  }
28
26
 
29
27
  &[data-disabled=true] {
30
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'decor-disabled');
31
- border-color: simple-var($theme-variables, 'sys', 'neutral', 'decor-default');
28
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'decor-disabled');
29
+ border-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'decor-default');
32
30
  }
33
31
  }
34
32
 
35
33
  &[data-indeterminate=true],
36
34
  &[data-checked=true] {
37
- background-color: simple-var($theme-variables, 'sys', 'primary', 'accent-default');
38
- border-color: simple-var($theme-variables, 'sys', 'primary', 'accent-default');
35
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'primary', 'accent-default');
36
+ border-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'primary', 'accent-default');
39
37
 
40
38
  &[data-focusvisible=true],
41
39
  &[data-hover=true] {
42
- background-color: simple-var($theme-variables, 'sys', 'primary', 'accent-hovered');
43
- border-color: simple-var($theme-variables, 'sys', 'primary', 'accent-hovered');
40
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'primary', 'accent-hovered');
41
+ border-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'primary', 'accent-hovered');
44
42
  }
45
43
 
46
44
  &[data-disabled=true] {
47
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'text-disabled');
48
- border-color: simple-var($theme-variables, 'sys', 'neutral', 'text-disabled');
45
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'text-disabled');
46
+ border-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'text-disabled');
49
47
  }
50
48
  }
51
49
 
52
- @each $size in $sizes {
50
+ @each $size in styles.$sizes {
53
51
  &[data-size='#{$size}'] {
54
- @include composite-var($toggles, $size, 'checkbox', 'box');
52
+ @include styles-tokens-toggles.composite-var(styles-tokens-toggles.$toggles, $size, 'checkbox', 'box');
55
53
 
56
54
  svg {
57
- width: simple-var($icon-sizes, $size) !important; /* stylelint-disable-line declaration-no-important */
58
- height: simple-var($icon-sizes, $size) !important; /* stylelint-disable-line declaration-no-important */
55
+ width: styles-tokens-toggles.simple-var($icon-sizes, $size) !important; /* stylelint-disable-line declaration-no-important */
56
+ height: styles-tokens-toggles.simple-var($icon-sizes, $size) !important; /* stylelint-disable-line declaration-no-important */
59
57
  }
60
58
  }
61
59
  }
@@ -71,7 +69,7 @@ $icon-sizes: (
71
69
  width: 100%;
72
70
  height: 100%;
73
71
 
74
- color: simple-var($theme-variables, 'sys', 'primary', 'on-accent');
72
+ color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'primary', 'on-accent');
75
73
 
76
74
  &[data-indeterminate=true],
77
75
  &[data-checked=true] {
@@ -79,6 +77,6 @@ $icon-sizes: (
79
77
  }
80
78
 
81
79
  &[data-disabled=true] {
82
- color: simple-var($theme-variables, 'sys', 'neutral', 'decor-disabled');
80
+ color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'decor-disabled');
83
81
  }
84
82
  }
@@ -1,6 +1,6 @@
1
- import { useMemo } from 'react';
1
+ import { KeyboardEventHandler, useMemo } from 'react';
2
2
 
3
- import { HeartFilledSVG, HeartSVG, StarFilledSVG, StarSVG } from '@snack-uikit/icons';
3
+ import { HeartFilledSVG, HeartSVG, PinnedSVG, StarFilledSVG, StarSVG, UnPinnedSVG } from '@snack-uikit/icons';
4
4
 
5
5
  import { FAVORITE_ICON, SIZE } from '../../constants';
6
6
  import { FavoriteIcon, ToggleProps } from '../../types';
@@ -11,16 +11,20 @@ import styles from './styles.module.scss';
11
11
  const CHECKED_ICONS = {
12
12
  [FAVORITE_ICON.Star]: StarFilledSVG,
13
13
  [FAVORITE_ICON.Heart]: HeartFilledSVG,
14
+ [FAVORITE_ICON.Pin]: PinnedSVG,
14
15
  };
15
16
 
16
17
  const UNCHECKED_ICONS = {
17
18
  [FAVORITE_ICON.Star]: StarSVG,
18
19
  [FAVORITE_ICON.Heart]: HeartSVG,
20
+ [FAVORITE_ICON.Pin]: UnPinnedSVG,
19
21
  };
20
22
 
21
23
  export type FavoriteProps = ToggleProps & {
22
24
  /** Иконка */
23
25
  icon?: FavoriteIcon;
26
+ /** Колбек нажатия клавиши клавиатуры */
27
+ onKeyDown?: KeyboardEventHandler<HTMLDivElement>;
24
28
  };
25
29
 
26
30
  export function Favorite({
@@ -28,6 +32,7 @@ export function Favorite({
28
32
  'data-test-id': dataTestId,
29
33
  size = SIZE.M,
30
34
  icon = FAVORITE_ICON.Heart,
35
+ onKeyDown,
31
36
  ...restProps
32
37
  }: FavoriteProps) {
33
38
  const iconSize = useMemo(() => getIconSize(size), [size]);
@@ -38,6 +43,7 @@ export function Favorite({
38
43
  data-test-id={dataTestId}
39
44
  ref={inputRef}
40
45
  size={size}
46
+ onKeyDown={onKeyDown}
41
47
  render={function Favorite(visualState) {
42
48
  const Icon = visualState.checked ? CHECKED_ICONS[icon] : UNCHECKED_ICONS[icon];
43
49
  const data = getVisualStateAttributes({ ...visualState, icon });
@@ -1,39 +1,38 @@
1
- @import '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-toggles';
2
- @import '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-element';
3
- @import '../styles.module';
1
+ @use '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-toggles';
2
+ @use '../styles.module';
4
3
 
5
- $sizes: 's', 'm';
6
4
  $icons: (
7
5
  'star': 'yellow',
8
6
  'heart': 'red',
7
+ 'pin': 'primary',
9
8
  );
10
9
 
11
10
  .container {
12
- @include container('favourite');
11
+ @include styles.container('favourite');
13
12
 
14
- outline-color: simple-var($theme-variables, 'sys', 'available', 'complementary');
13
+ outline-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'available', 'complementary');
15
14
 
16
15
  &[data-checked='true'] {
17
- outline-color: simple-var($theme-variables, 'sys', 'available', 'complementary');
16
+ outline-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'available', 'complementary');
18
17
  }
19
18
  }
20
19
 
21
20
  .icon {
22
- color: simple-var($theme-variables, 'sys', 'neutral', 'text-light');
21
+ color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'text-light');
23
22
 
24
23
  &:not([data-disabled='true']) {
25
24
  &[data-hover='true'] {
26
- color: simple-var($theme-variables, 'sys', 'neutral', 'text-support');
25
+ color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'text-support');
27
26
  }
28
27
 
29
28
  @each $icon, $color in $icons {
30
29
  &[data-icon='#{$icon}'] {
31
30
  &[data-checked='true'] {
32
- color: simple-var($theme-variables, 'sys', $color, 'accent-default');
31
+ color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', $color, 'accent-default');
33
32
 
34
33
  &[data-focusvisible='true'],
35
34
  &[data-hover='true'] {
36
- color: simple-var($theme-variables, 'sys', $color, 'accent-hovered');
35
+ color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', $color, 'accent-hovered');
37
36
  }
38
37
  }
39
38
  }
@@ -41,6 +40,6 @@ $icons: (
41
40
  }
42
41
 
43
42
  &[data-disabled='true'] {
44
- color: $sys-neutral-text-disabled;
43
+ color: styles-tokens-toggles.$sys-neutral-text-disabled;
45
44
  }
46
45
  }
@@ -1,11 +1,8 @@
1
- @import '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-toggles';
2
- @import '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-element';
3
- @import '../styles.module';
4
-
5
- $sizes: 's', 'm';
1
+ @use '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-toggles';
2
+ @use '../styles.module';
6
3
 
7
4
  .container {
8
- @include container('radio');
5
+ @include styles.container('radio');
9
6
  }
10
7
 
11
8
  .box {
@@ -13,37 +10,37 @@ $sizes: 's', 'm';
13
10
 
14
11
  box-sizing: border-box;
15
12
 
16
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'background2-level');
17
- border-color: simple-var($theme-variables, 'sys', 'neutral', 'decor-activated');
13
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'background2-level');
14
+ border-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'decor-activated');
18
15
  border-style: solid; // это наверное должно быть в композитном токене box
19
16
 
20
- @each $size in $sizes {
17
+ @each $size in styles.$sizes {
21
18
  &[data-size='#{$size}'] {
22
- @include composite-var($toggles, $size, 'radio', 'box');
19
+ @include styles-tokens-toggles.composite-var(styles-tokens-toggles.$toggles, $size, 'radio', 'box');
23
20
  }
24
21
  }
25
22
 
26
23
  &[data-focusvisible=true],
27
24
  &[data-hover=true] {
28
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'background2-level');
29
- border-color: simple-var($theme-variables, 'sys', 'neutral', 'accent-hovered');
25
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'background2-level');
26
+ border-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'accent-hovered');
30
27
  }
31
28
 
32
29
  &[data-disabled=true] {
33
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'decor-disabled');
34
- border-color: simple-var($theme-variables, 'sys', 'neutral', 'decor-default');
30
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'decor-disabled');
31
+ border-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'decor-default');
35
32
  }
36
33
 
37
34
  &[data-checked=true] {
38
- border-color: simple-var($theme-variables, 'sys', 'primary', 'accent-default');
35
+ border-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'primary', 'accent-default');
39
36
 
40
37
  &[data-focusvisible=true],
41
38
  &[data-hover=true] {
42
- border-color: simple-var($theme-variables, 'sys', 'primary', 'accent-hovered');
39
+ border-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'primary', 'accent-hovered');
43
40
  }
44
41
 
45
42
  &[data-disabled=true] {
46
- border-color: simple-var($theme-variables, 'sys', 'neutral', 'decor-default');
43
+ border-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'decor-default');
47
44
  }
48
45
  }
49
46
  }
@@ -54,23 +51,23 @@ $sizes: 's', 'm';
54
51
  left: 50%;
55
52
  transform: translate(-50%, -50%);
56
53
 
57
- background-color: simple-var($theme-variables, 'sys', 'primary', 'accent-default');
54
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'primary', 'accent-default');
58
55
 
59
56
  &[data-hover=true] {
60
- background-color: simple-var($theme-variables, 'sys', 'primary', 'accent-hovered');
57
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'primary', 'accent-hovered');
61
58
  }
62
59
 
63
60
  &[data-disabled=true] {
64
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'text-disabled');
61
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'text-disabled');
65
62
  }
66
63
 
67
64
  &[data-checked=false] {
68
65
  display: none;
69
66
  }
70
67
 
71
- @each $size in $sizes {
68
+ @each $size in styles.$sizes {
72
69
  &[data-size='#{$size}'] {
73
- @include composite-var($toggles, $size, 'radio', 'flag');
70
+ @include styles-tokens-toggles.composite-var(styles-tokens-toggles.$toggles, $size, 'radio', 'flag');
74
71
  }
75
72
  }
76
73
  }
@@ -1,41 +1,39 @@
1
- @import '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-toggles';
2
- @import '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-element';
3
- @import '../styles.module';
1
+ @use '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-toggles';
2
+ @use '../styles.module';
4
3
 
5
- $sizes: 's', 'm';
6
4
  $switchAnimationDuration: 0.1s;
7
5
 
8
6
  .container {
9
- @include container('switch');
7
+ @include styles.container('switch');
10
8
  }
11
9
 
12
10
  .box {
13
11
  position: relative;
14
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'decor-activated');
12
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'decor-activated');
15
13
 
16
- @each $size in $sizes {
14
+ @each $size in styles.$sizes {
17
15
  &[data-size='#{$size}'] {
18
- @include composite-var($toggles, $size, 'switch', 'box');
16
+ @include styles-tokens-toggles.composite-var(styles-tokens-toggles.$toggles, $size, 'switch', 'box');
19
17
  }
20
18
  }
21
19
 
22
20
  &[data-hover='true'] {
23
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'accent-hovered');
21
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'accent-hovered');
24
22
  }
25
23
 
26
24
  &[data-disabled='true'] {
27
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'decor-default');
25
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'decor-default');
28
26
  }
29
27
 
30
28
  &[data-checked='true'] {
31
- background-color: simple-var($theme-variables, 'sys', 'primary', 'accent-default');
29
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'primary', 'accent-default');
32
30
 
33
31
  &[data-hover='true'] {
34
- background-color: simple-var($theme-variables, 'sys', 'primary', 'accent-hovered');
32
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'primary', 'accent-hovered');
35
33
  }
36
34
 
37
35
  &[data-disabled='true'] {
38
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'decor-default');
36
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'decor-default');
39
37
  }
40
38
  }
41
39
  }
@@ -52,32 +50,32 @@ $switchAnimationDuration: 0.1s;
52
50
  transition-duration: $switchAnimationDuration;
53
51
  transition-property: left;
54
52
 
55
- @each $size in $sizes {
53
+ @each $size in styles.$sizes {
56
54
  &[data-size='#{$size}'] {
57
- @include composite-var($toggles, $size, 'switch', 'container-flag');
55
+ @include styles-tokens-toggles.composite-var(styles-tokens-toggles.$toggles, $size, 'switch', 'container-flag');
58
56
  &[data-checked='true'] {
59
- left: calc(100% - #{simple-var($toggles, $size, 'switch', 'container-flag', 'width')});
57
+ left: calc(100% - #{styles-tokens-toggles.simple-var(styles-tokens-toggles.$toggles, $size, 'switch', 'container-flag', 'width')});
60
58
  }
61
59
  }
62
60
  }
63
61
  }
64
62
 
65
63
  .flag {
66
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'background2-level');
64
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'background2-level');
67
65
 
68
- @each $size in $sizes {
66
+ @each $size in styles.$sizes {
69
67
  &[data-size='#{$size}'] {
70
- @include composite-var($toggles, $size, 'switch', 'flag');
68
+ @include styles-tokens-toggles.composite-var(styles-tokens-toggles.$toggles, $size, 'switch', 'flag');
71
69
  }
72
70
  }
73
71
 
74
72
  &[data-focusvisible=true],
75
73
  &[data-hover=true] {
76
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'on-accent');
74
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'on-accent');
77
75
  }
78
76
 
79
77
  &[data-disabled='true'] {
80
- background-color: simple-var($theme-variables, 'sys', 'neutral', 'background2-level');
78
+ background-color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'background2-level');
81
79
  }
82
80
  }
83
81
 
@@ -89,29 +87,29 @@ $switchAnimationDuration: 0.1s;
89
87
 
90
88
  display: flex;
91
89
 
92
- color: simple-var($theme-variables, 'sys', 'neutral', 'text-disabled');
90
+ color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'text-disabled');
93
91
 
94
92
  fill: transparent;
95
93
 
96
94
  transition: opacity $switchAnimationDuration linear;
97
95
 
98
96
  &[data-hover='true'] {
99
- color: simple-var($theme-variables, 'sys', 'neutral', 'accent-hovered');
97
+ color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'accent-hovered');
100
98
  }
101
99
 
102
100
  &[data-checked='true'] {
103
- color: simple-var($theme-variables, 'sys', 'primary', 'accent-default');
101
+ color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'primary', 'accent-default');
104
102
 
105
103
  &[data-hover='true'] {
106
- color: simple-var($theme-variables, 'sys', 'primary', 'accent-hovered');
104
+ color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'primary', 'accent-hovered');
107
105
  }
108
106
  }
109
107
 
110
108
  &[data-disabled='true'] {
111
- color: simple-var($theme-variables, 'sys', 'neutral', 'text-disabled');
109
+ color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'text-disabled');
112
110
 
113
111
  &[data-hover='true'] {
114
- color: simple-var($theme-variables, 'sys', 'neutral', 'text-disabled');
112
+ color: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'sys', 'neutral', 'text-disabled');
115
113
  }
116
114
  }
117
115
  }
@@ -19,6 +19,7 @@ export const TogglePrivate = forwardRef<HTMLInputElement, TogglePrivateProps>(fu
19
19
  className,
20
20
  size = SIZE.M,
21
21
  mode = MODE.Checkbox,
22
+ onKeyDown,
22
23
  'data-test-id': testId,
23
24
  ...otherProps
24
25
  },
@@ -38,11 +39,13 @@ export const TogglePrivate = forwardRef<HTMLInputElement, TogglePrivateProps>(fu
38
39
 
39
40
  return (
40
41
  <span
42
+ role={mode}
41
43
  className={cn(className, styles.toggleLayout)}
42
44
  data-size={size}
43
45
  data-test-id={testId}
44
46
  onMouseEnter={() => setHover(true)}
45
47
  onMouseLeave={() => setHover(false)}
48
+ onKeyDown={onKeyDown}
46
49
  {...getVisualStateAttributes(visualState)}
47
50
  >
48
51
  {render(visualState)}
@@ -1,11 +1,9 @@
1
- @import '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-toggles';
2
- @import '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-element';
3
-
4
- $sizes: 's', 'm';
1
+ @use '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-toggles';
2
+ @use '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-element';
5
3
 
6
4
  $icon-sizes: (
7
- 's': $icon-xs,
8
- 'm': $icon-s,
5
+ 's': styles-tokens-element.$icon-xs,
6
+ 'm': styles-tokens-element.$icon-s,
9
7
  );
10
8
 
11
9
  .toggleLayout {
@@ -21,7 +19,7 @@ $icon-sizes: (
21
19
 
22
20
  &[data-disabled=true] {
23
21
  cursor: not-allowed;
24
- color: $sys-neutral-text-disabled;
22
+ color: styles-tokens-toggles.$sys-neutral-text-disabled;
25
23
  }
26
24
  }
27
25
 
@@ -1,5 +1,5 @@
1
- @import '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-element';
2
- @import '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-toggles';
1
+ @use '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-element';
2
+ @use '@snack-uikit/figma-tokens/build/scss/components/styles-tokens-toggles';
3
3
 
4
4
  $sizes: 's', 'm';
5
5
 
@@ -11,14 +11,14 @@ $sizes: 's', 'm';
11
11
 
12
12
  @each $size in $sizes {
13
13
  &[data-size='#{$size}'] {
14
- @include composite-var($toggles, $size, $component, 'container');
14
+ @include styles-tokens-toggles.composite-var(styles-tokens-toggles.$toggles, $size, $component, 'container');
15
15
  }
16
16
  }
17
17
 
18
18
  &[data-focusvisible=true] {
19
- @include outline-var($container-focused-s);
19
+ @include styles-tokens-toggles.outline-var(styles-tokens-element.$container-focused-s);
20
20
  &[data-size='s'] {
21
- outline-offset: simple-var($theme-variables, 'border-width', 'state-focus', 's');
21
+ outline-offset: styles-tokens-toggles.simple-var(styles-tokens-toggles.$theme-variables, 'border-width', 'state-focus', 's');
22
22
  }
23
23
  }
24
24
  }
package/src/constants.ts CHANGED
@@ -11,6 +11,7 @@ export const SIZE = {
11
11
  export const FAVORITE_ICON = {
12
12
  Star: 'star',
13
13
  Heart: 'heart',
14
+ Pin: 'pin',
14
15
  } as const;
15
16
 
16
17
  export const SELECTION_MODE = {
@@ -1,10 +1,9 @@
1
- @import '@snack-uikit/figma-tokens/build/scss/styles-theme-variables';
2
-
1
+ @use '@snack-uikit/figma-tokens/build/scss/styles-theme-variables';
3
2
 
4
3
  .spinner {
5
4
  pointer-events: none;
6
- width: $dimension-2m;
7
- height: $dimension-2m;
5
+ width: styles-theme-variables.$dimension-2m;
6
+ height: styles-theme-variables.$dimension-2m;
8
7
  animation: spin 1s ease-in-out infinite;
9
8
 
10
9
  & > path {
package/src/types.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { FocusEventHandler, MouseEventHandler, ReactNode, RefObject } from 'react';
1
+ import { FocusEventHandler, KeyboardEventHandler, MouseEventHandler, ReactNode, RefObject } from 'react';
2
2
 
3
3
  import { ValueOf, WithSupportProps } from '@snack-uikit/utils';
4
4
 
@@ -51,6 +51,8 @@ export type TogglePrivateProps = WithSupportProps<{
51
51
  onBlur?: FocusEventHandler<HTMLInputElement>;
52
52
  /** Колбек приобретения фокуса */
53
53
  onFocus?: FocusEventHandler<HTMLInputElement>;
54
+ /** Колбек нажатия клавиши клавиатуры */
55
+ onKeyDown?: KeyboardEventHandler<HTMLDivElement>;
54
56
  }>;
55
57
 
56
58
  export type ToggleProps = WithSupportProps<