@cloud-ru/ds-toggles 1.0.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 (106) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +201 -0
  3. package/README.md +492 -0
  4. package/dist/cjs/components/Checkbox/Checkbox.d.ts +8 -0
  5. package/dist/cjs/components/Checkbox/Checkbox.js +61 -0
  6. package/dist/cjs/components/Checkbox/index.d.ts +1 -0
  7. package/dist/cjs/components/Checkbox/index.js +17 -0
  8. package/dist/cjs/components/Checkbox/styles.module.css +223 -0
  9. package/dist/cjs/components/Favourite/Favourite.d.ts +9 -0
  10. package/dist/cjs/components/Favourite/Favourite.js +42 -0
  11. package/dist/cjs/components/Favourite/index.d.ts +1 -0
  12. package/dist/cjs/components/Favourite/index.js +17 -0
  13. package/dist/cjs/components/Favourite/styles.module.css +138 -0
  14. package/dist/cjs/components/Radio/Radio.d.ts +3 -0
  15. package/dist/cjs/components/Radio/Radio.js +34 -0
  16. package/dist/cjs/components/Radio/index.d.ts +1 -0
  17. package/dist/cjs/components/Radio/index.js +17 -0
  18. package/dist/cjs/components/Radio/styles.module.css +219 -0
  19. package/dist/cjs/components/Switch/Switch.d.ts +3 -0
  20. package/dist/cjs/components/Switch/Switch.js +42 -0
  21. package/dist/cjs/components/Switch/index.d.ts +1 -0
  22. package/dist/cjs/components/Switch/index.js +17 -0
  23. package/dist/cjs/components/Switch/styles.module.css +269 -0
  24. package/dist/cjs/components/ToggleGroup/ToggleGroup.d.ts +22 -0
  25. package/dist/cjs/components/ToggleGroup/ToggleGroup.js +33 -0
  26. package/dist/cjs/components/ToggleGroup/hooks.d.ts +9 -0
  27. package/dist/cjs/components/ToggleGroup/hooks.js +26 -0
  28. package/dist/cjs/components/ToggleGroup/index.d.ts +2 -0
  29. package/dist/cjs/components/ToggleGroup/index.js +18 -0
  30. package/dist/cjs/components/index.d.ts +5 -0
  31. package/dist/cjs/components/index.js +21 -0
  32. package/dist/cjs/constants.d.ts +23 -0
  33. package/dist/cjs/constants.js +26 -0
  34. package/dist/cjs/context.d.ts +9 -0
  35. package/dist/cjs/context.js +12 -0
  36. package/dist/cjs/index.d.ts +4 -0
  37. package/dist/cjs/index.js +20 -0
  38. package/dist/cjs/package.json +3 -0
  39. package/dist/cjs/style.css +849 -0
  40. package/dist/cjs/types.d.ts +57 -0
  41. package/dist/cjs/types.js +2 -0
  42. package/dist/cjs/utils.d.ts +3 -0
  43. package/dist/cjs/utils.js +22 -0
  44. package/dist/esm/components/Checkbox/Checkbox.d.ts +8 -0
  45. package/dist/esm/components/Checkbox/Checkbox.js +55 -0
  46. package/dist/esm/components/Checkbox/index.d.ts +1 -0
  47. package/dist/esm/components/Checkbox/index.js +1 -0
  48. package/dist/esm/components/Checkbox/styles.module.css +223 -0
  49. package/dist/esm/components/Favourite/Favourite.d.ts +9 -0
  50. package/dist/esm/components/Favourite/Favourite.js +36 -0
  51. package/dist/esm/components/Favourite/index.d.ts +1 -0
  52. package/dist/esm/components/Favourite/index.js +1 -0
  53. package/dist/esm/components/Favourite/styles.module.css +138 -0
  54. package/dist/esm/components/Radio/Radio.d.ts +3 -0
  55. package/dist/esm/components/Radio/Radio.js +28 -0
  56. package/dist/esm/components/Radio/index.d.ts +1 -0
  57. package/dist/esm/components/Radio/index.js +1 -0
  58. package/dist/esm/components/Radio/styles.module.css +219 -0
  59. package/dist/esm/components/Switch/Switch.d.ts +3 -0
  60. package/dist/esm/components/Switch/Switch.js +36 -0
  61. package/dist/esm/components/Switch/index.d.ts +1 -0
  62. package/dist/esm/components/Switch/index.js +1 -0
  63. package/dist/esm/components/Switch/styles.module.css +269 -0
  64. package/dist/esm/components/ToggleGroup/ToggleGroup.d.ts +22 -0
  65. package/dist/esm/components/ToggleGroup/ToggleGroup.js +30 -0
  66. package/dist/esm/components/ToggleGroup/hooks.d.ts +9 -0
  67. package/dist/esm/components/ToggleGroup/hooks.js +23 -0
  68. package/dist/esm/components/ToggleGroup/index.d.ts +2 -0
  69. package/dist/esm/components/ToggleGroup/index.js +2 -0
  70. package/dist/esm/components/index.d.ts +5 -0
  71. package/dist/esm/components/index.js +5 -0
  72. package/dist/esm/constants.d.ts +23 -0
  73. package/dist/esm/constants.js +23 -0
  74. package/dist/esm/context.d.ts +9 -0
  75. package/dist/esm/context.js +8 -0
  76. package/dist/esm/index.d.ts +4 -0
  77. package/dist/esm/index.js +4 -0
  78. package/dist/esm/style.css +849 -0
  79. package/dist/esm/types.d.ts +57 -0
  80. package/dist/esm/types.js +1 -0
  81. package/dist/esm/utils.d.ts +3 -0
  82. package/dist/esm/utils.js +18 -0
  83. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  84. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  85. package/package.json +46 -0
  86. package/src/components/Checkbox/Checkbox.tsx +140 -0
  87. package/src/components/Checkbox/index.ts +1 -0
  88. package/src/components/Checkbox/styles.module.scss +162 -0
  89. package/src/components/Favourite/Favourite.tsx +116 -0
  90. package/src/components/Favourite/index.ts +1 -0
  91. package/src/components/Favourite/styles.module.scss +138 -0
  92. package/src/components/Radio/Radio.tsx +84 -0
  93. package/src/components/Radio/index.ts +1 -0
  94. package/src/components/Radio/styles.module.scss +159 -0
  95. package/src/components/Switch/Switch.tsx +94 -0
  96. package/src/components/Switch/index.ts +1 -0
  97. package/src/components/Switch/styles.module.scss +250 -0
  98. package/src/components/ToggleGroup/ToggleGroup.tsx +71 -0
  99. package/src/components/ToggleGroup/hooks.ts +34 -0
  100. package/src/components/ToggleGroup/index.ts +2 -0
  101. package/src/components/index.ts +5 -0
  102. package/src/constants.ts +27 -0
  103. package/src/context.ts +18 -0
  104. package/src/index.ts +4 -0
  105. package/src/types.ts +80 -0
  106. package/src/utils.ts +21 -0
@@ -0,0 +1,219 @@
1
+ @charset "UTF-8";
2
+ .inputPrivate{
3
+ cursor:pointer;
4
+ position:absolute;
5
+ inset:0;
6
+ width:100%;
7
+ height:100%;
8
+ margin:0;
9
+ padding:0;
10
+ opacity:0;
11
+ }
12
+ .inputPrivate:disabled{
13
+ cursor:not-allowed;
14
+ }
15
+
16
+ .backgroundStateLayer{
17
+ visibility:initial;
18
+ }
19
+
20
+ .framing{
21
+ position:relative;
22
+ display:flex;
23
+ align-items:center;
24
+ justify-content:center;
25
+ box-sizing:border-box;
26
+ }
27
+ .framing[data-loading=false]{
28
+ border-color:var(--sn-theme-color-neutral-accent, var(--sn-brand-color-neutral-55, var(--sn-primitive-color-gray-55, #8b8fa7)));
29
+ border-style:solid;
30
+ background-color:var(--sn-theme-color-neutral-background1Level, var(--sn-brand-color-neutral-95, var(--sn-primitive-color-gray-95, #fdfdfd)));
31
+ }
32
+ .framing[data-loading=false][data-disabled=true]{
33
+ opacity:var(--sn-theme-effect-opacity-disabled, 0.4);
34
+ }
35
+ .framing[data-loading=false][data-disabled=false][data-checked=false]{
36
+ border-color:var(--sn-theme-color-neutral-accent, var(--sn-brand-color-neutral-55, var(--sn-primitive-color-gray-55, #8b8fa7)));
37
+ }
38
+ .framing[data-loading=false][data-disabled=false][data-checked=true]{
39
+ border-color:var(--sn-theme-color-primary-accent, var(--sn-brand-color-primary-55, var(--sn-brandRole-color-brandA-55, var(--sn-primitive-color-brandA-55, #389f74))));
40
+ }
41
+ .framing[data-loading=false][data-disabled=false][data-focusvisible=true]{
42
+ outline:var(--sn-primitive-strokeWeight-strokeSemiBold, 2px) solid var(--sn-theme-color-available-complementary, #000000);
43
+ outline-offset:var(--sn-primitive-strokeWeight-strokeSemiBold, 2px);
44
+ }
45
+
46
+ .flag{
47
+ display:flex;
48
+ align-items:center;
49
+ justify-content:center;
50
+ }
51
+
52
+ .surface{
53
+ position:relative;
54
+ display:flex;
55
+ align-items:center;
56
+ justify-content:center;
57
+ }
58
+ .surface[data-loading=false][data-checked=true][data-disabled=false]{
59
+ background:var(--sn-theme-color-primary-accent, var(--sn-brand-color-primary-55, var(--sn-brandRole-color-brandA-55, var(--sn-primitive-color-brandA-55, #389f74))));
60
+ }
61
+ .surface[data-loading=false][data-checked=true][data-disabled=true]{
62
+ background:var(--sn-theme-color-neutral-accent, var(--sn-brand-color-neutral-55, var(--sn-primitive-color-gray-55, #8b8fa7)));
63
+ }
64
+
65
+ .container{
66
+ position:relative;
67
+ display:flex;
68
+ align-items:center;
69
+ justify-content:center;
70
+ }
71
+
72
+ .root{
73
+ position:relative;
74
+ display:inline-flex;
75
+ flex-direction:row;
76
+ flex-grow:0;
77
+ flex-shrink:0;
78
+ align-items:center;
79
+ vertical-align:middle;
80
+ }
81
+ .root[data-size=xs] .container{
82
+ min-width:var(--sn-toggles-anatomy-size-xs-radio-container-minWidth, var(--sn-primitive-dimension-16, 16px));
83
+ min-height:var(--sn-toggles-anatomy-size-xs-radio-container-minHeight, var(--sn-primitive-dimension-16, 16px));
84
+ }
85
+ .root[data-size=xs] .framing{
86
+ width:var(--sn-toggles-anatomy-size-xs-radio-framing-minWidth, var(--sn-primitive-dimension-16, 16px));
87
+ height:var(--sn-toggles-anatomy-size-xs-radio-framing-minHeight, var(--sn-primitive-dimension-16, 16px));
88
+ min-width:var(--sn-toggles-anatomy-size-xs-radio-framing-minWidth, var(--sn-primitive-dimension-16, 16px));
89
+ min-height:var(--sn-toggles-anatomy-size-xs-radio-framing-minHeight, var(--sn-primitive-dimension-16, 16px));
90
+ border-radius:var(--sn-toggles-anatomy-size-xs-radio-framing-borderRadius, var(--sn-primitive-dimension-full, 10000px));
91
+ border-width:var(--sn-toggles-anatomy-size-xs-radio-framing-borderWidth, var(--sn-brand-anatomy-line-toggles-xs-strokeWeight, var(--sn-primitive-strokeWeight-strokeMedium, 1.5px)));
92
+ }
93
+ .root[data-size=xs] .flag{
94
+ min-width:var(--sn-toggles-anatomy-size-xs-radio-framing-flag-minWidth, var(--sn-toggles-anatomy-size-xs-radio-framing-minWidth, var(--sn-primitive-dimension-16, 16px)));
95
+ min-height:var(--sn-toggles-anatomy-size-xs-radio-framing-flag-minHeight, var(--sn-toggles-anatomy-size-xs-radio-framing-minHeight, var(--sn-primitive-dimension-16, 16px)));
96
+ }
97
+ .root[data-size=xs] .surface{
98
+ width:var(--sn-toggles-anatomy-size-xs-radio-framing-flag-surface-width, var(--sn-primitive-dimension-8, 8px));
99
+ height:var(--sn-toggles-anatomy-size-xs-radio-framing-flag-surface-height, var(--sn-primitive-dimension-8, 8px));
100
+ border-radius:var(--sn-toggles-anatomy-size-xs-radio-framing-flag-surface-borderRadius, var(--sn-primitive-dimension-full, 10000px));
101
+ border-width:var(--sn-toggles-anatomy-size-xs-radio-framing-flag-surface-borderWidth, var(--sn-brand-anatomy-line-toggles-xs-strokeWeight, var(--sn-primitive-strokeWeight-strokeMedium, 1.5px)));
102
+ }
103
+ .root[data-size=s] .container{
104
+ min-width:var(--sn-toggles-anatomy-size-s-radio-container-minWidth, var(--sn-primitive-dimension-24, 24px));
105
+ min-height:var(--sn-toggles-anatomy-size-s-radio-container-minHeight, var(--sn-primitive-dimension-24, 24px));
106
+ }
107
+ .root[data-size=s] .framing{
108
+ width:var(--sn-toggles-anatomy-size-s-radio-framing-minWidth, var(--sn-primitive-dimension-20, 20px));
109
+ height:var(--sn-toggles-anatomy-size-s-radio-framing-minHeight, var(--sn-primitive-dimension-20, 20px));
110
+ min-width:var(--sn-toggles-anatomy-size-s-radio-framing-minWidth, var(--sn-primitive-dimension-20, 20px));
111
+ min-height:var(--sn-toggles-anatomy-size-s-radio-framing-minHeight, var(--sn-primitive-dimension-20, 20px));
112
+ border-radius:var(--sn-toggles-anatomy-size-s-radio-framing-borderRadius, var(--sn-primitive-dimension-full, 10000px));
113
+ border-width:var(--sn-toggles-anatomy-size-s-radio-framing-borderWidth, var(--sn-brand-anatomy-line-toggles-s-strokeWeight, var(--sn-primitive-strokeWeight-strokeSemiBold, 2px)));
114
+ }
115
+ .root[data-size=s] .flag{
116
+ min-width:var(--sn-toggles-anatomy-size-s-radio-framing-flag-minWidth, var(--sn-toggles-anatomy-size-s-checkbox-framing-minWidth, var(--sn-primitive-dimension-20, 20px)));
117
+ min-height:var(--sn-toggles-anatomy-size-s-radio-framing-flag-minHeight, var(--sn-toggles-anatomy-size-s-checkbox-framing-minHeight, var(--sn-primitive-dimension-20, 20px)));
118
+ }
119
+ .root[data-size=s] .surface{
120
+ width:var(--sn-toggles-anatomy-size-s-radio-framing-flag-surface-width, var(--sn-primitive-dimension-10, 10px));
121
+ height:var(--sn-toggles-anatomy-size-s-radio-framing-flag-surface-height, var(--sn-primitive-dimension-10, 10px));
122
+ border-radius:var(--sn-toggles-anatomy-size-s-radio-framing-flag-surface-borderRadius, var(--sn-primitive-dimension-full, 10000px));
123
+ border-width:var(--sn-toggles-anatomy-size-s-radio-framing-flag-surface-borderWidth, var(--sn-brand-anatomy-line-toggles-s-strokeWeight, var(--sn-primitive-strokeWeight-strokeSemiBold, 2px)));
124
+ }
125
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer{
126
+ position:absolute;
127
+ inset:0;
128
+ border-radius:inherit;
129
+ }
130
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=borderOnBackground]{
131
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-default-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-default-borderColor, rgba(159, 166, 198, 0.3019607843)));
132
+ border-style:solid;
133
+ border-width:var(--sn-primitive-strokeWeight-strokeRegular, 1px);
134
+ }
135
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=emptyNeutralOnBackground]{
136
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-defaultEmpty-filled, var(--sn-brand-color-state-neutral-forLightMode-default-background, rgba(120, 123, 138, 0)));
137
+ }
138
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=activatedOnBackground]{
139
+ background:var(--sn-theme-color-material-stateLayer-activated-default-filled, var(--sn-brand-color-state-activated-default-background, var(--sn-brandRole-color-brandA-backgroundActivatedDefault, rgba(56, 159, 116, 0.1490196078))));
140
+ }
141
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=versionOnColor]{
142
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-default-filled, rgba(0, 0, 0, 0.0509803922));
143
+ }
144
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=emptyVersionOnColor]{
145
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-defaultEmpty-filled, rgba(0, 0, 0, 0));
146
+ }
147
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=inversionOnColor]{
148
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-default-filled, rgba(255, 255, 255, 0.1019607843));
149
+ }
150
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=emptyInversionOnColor]{
151
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-defaultEmpty-filled, rgba(255, 255, 255, 0));
152
+ }
153
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=emptyDarkOnAccent]{
154
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-defaultEmpty-filled, rgba(0, 0, 0, 0));
155
+ }
156
+ @media (hover: hover){
157
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=borderOnBackground]{
158
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-hovered-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-hovered-borderColor, rgba(159, 166, 198, 0.6509803922)));
159
+ }
160
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyNeutralOnBackground]{
161
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-hovered-filled, var(--sn-brand-color-state-neutral-forLightMode-hovered-background, rgba(188, 195, 220, 0.1490196078)));
162
+ }
163
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=activatedOnBackground]{
164
+ background:var(--sn-theme-color-material-stateLayer-activated-hovered-filled, var(--sn-brand-color-state-activated-hovered-background, var(--sn-brandRole-color-brandA-backgroundActivatedHovered, rgba(56, 159, 116, 0.3490196078))));
165
+ }
166
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=versionOnColor]{
167
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-hovered-filled, rgba(0, 0, 0, 0.1019607843));
168
+ }
169
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyVersionOnColor]{
170
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-hovered-filled, rgba(0, 0, 0, 0.1019607843));
171
+ }
172
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=inversionOnColor]{
173
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-hovered-filled, rgba(255, 255, 255, 0.1490196078));
174
+ }
175
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyInversionOnColor]{
176
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-hovered-filled, rgba(255, 255, 255, 0.1490196078));
177
+ }
178
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyDarkOnAccent]{
179
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-hovered-filled, rgba(0, 0, 0, 0.0588235294));
180
+ }
181
+ }
182
+ .root[data-loading=false][data-disabled=false] .container{
183
+ }
184
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=borderOnBackground], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=borderOnBackground], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=borderOnBackground]{
185
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-pressed-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-pressed-borderColor, rgba(159, 166, 198, 0.8)));
186
+ }
187
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=emptyNeutralOnBackground], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyNeutralOnBackground], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyNeutralOnBackground]{
188
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-pressed-filled, var(--sn-brand-color-state-neutral-forLightMode-pressed-background, rgba(188, 195, 220, 0.3019607843)));
189
+ }
190
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=activatedOnBackground], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=activatedOnBackground], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=activatedOnBackground]{
191
+ background:var(--sn-theme-color-material-stateLayer-activated-pressed-filled, var(--sn-brand-color-state-activated-pressed-background, var(--sn-brandRole-color-brandA-backgroundActivatedPressed, rgba(56, 159, 116, 0.4509803922))));
192
+ }
193
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=versionOnColor], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=versionOnColor], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=versionOnColor]{
194
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-pressed-filled, rgba(0, 0, 0, 0.1490196078));
195
+ }
196
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=emptyVersionOnColor], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyVersionOnColor], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyVersionOnColor]{
197
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-pressed-filled, rgba(0, 0, 0, 0.1490196078));
198
+ }
199
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=inversionOnColor], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=inversionOnColor], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=inversionOnColor]{
200
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-pressed-filled, rgba(255, 255, 255, 0.0509803922));
201
+ }
202
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=emptyInversionOnColor], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyInversionOnColor], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyInversionOnColor]{
203
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-pressed-filled, rgba(255, 255, 255, 0.0509803922));
204
+ }
205
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=emptyDarkOnAccent], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyDarkOnAccent], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyDarkOnAccent]{
206
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-pressed-filled, rgba(0, 0, 0, 0.1215686275));
207
+ }
208
+ .root[data-loading=false][data-disabled=false][data-size=xs] .backgroundStateLayer{
209
+ inset:calc(-1 * var(--sn-toggles-anatomy-size-xs-radio-framing-borderWidth, var(--sn-brand-anatomy-line-toggles-xs-strokeWeight, var(--sn-primitive-strokeWeight-strokeMedium, 1.5px))));
210
+ }
211
+ .root[data-loading=false][data-disabled=false][data-size=s] .backgroundStateLayer{
212
+ inset:calc(-1 * var(--sn-toggles-anatomy-size-s-radio-framing-borderWidth, var(--sn-brand-anatomy-line-toggles-s-strokeWeight, var(--sn-primitive-strokeWeight-strokeSemiBold, 2px))));
213
+ }
214
+ .root[data-loading=true] .flag{
215
+ color:var(--sn-theme-color-neutral-accent, var(--sn-brand-color-neutral-55, var(--sn-primitive-color-gray-55, #8b8fa7)));
216
+ }
217
+ .root[data-loading=true] .backgroundStateLayer, .root[data-disabled=true] .backgroundStateLayer{
218
+ visibility:hidden;
219
+ }
@@ -0,0 +1,3 @@
1
+ import { ToggleProps } from '../../types';
2
+ export type SwitchProps = ToggleProps;
3
+ export declare function Switch({ inputRef, checked: checkedProp, defaultChecked, onChange, onBlur, onFocus, disabled, loading, size, className, 'data-test-id': dataTestId, ...otherProps }: SwitchProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Switch = Switch;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const system_1 = require("@cloud-ru/ds-icons/interface/system");
9
+ const loader_1 = require("@cloud-ru/ds-loader");
10
+ const utils_1 = require("@cloud-ru/ds-utils");
11
+ const classnames_1 = __importDefault(require("classnames"));
12
+ const react_1 = require("react");
13
+ const constants_1 = require("../../constants");
14
+ const utils_2 = require("../../utils");
15
+ const styles_module_scss_1 = __importDefault(require('./styles.module.css'));
16
+ const SPINNER_SIZE_MAP = {
17
+ [constants_1.SIZE.XS]: loader_1.LOADER_SIZE.XS,
18
+ [constants_1.SIZE.S]: loader_1.LOADER_SIZE.S,
19
+ };
20
+ function Icon({ size, loading }) {
21
+ if (loading) {
22
+ return (0, jsx_runtime_1.jsx)(loader_1.Spinner, { size: SPINNER_SIZE_MAP[size], className: styles_module_scss_1.default.spinner });
23
+ }
24
+ const iconSize = (0, utils_2.getIconSize)(size);
25
+ return (0, jsx_runtime_1.jsx)(system_1.CheckSVG, { "aria-hidden": true, className: styles_module_scss_1.default.icon, size: iconSize });
26
+ }
27
+ function Switch({ inputRef, checked: checkedProp, defaultChecked, onChange, onBlur, onFocus, disabled = false, loading = false, size = constants_1.SIZE.S, className, 'data-test-id': dataTestId, ...otherProps }) {
28
+ const [checked, setChecked] = (0, utils_1.useUncontrolledProp)(checkedProp, Boolean(defaultChecked), onChange);
29
+ const [focusVisible, setFocusVisible] = (0, react_1.useState)(false);
30
+ const stateDataAttributes = (0, utils_2.getVisualStateAttributes)({
31
+ loading,
32
+ disabled,
33
+ checked,
34
+ });
35
+ return ((0, jsx_runtime_1.jsx)("span", { className: (0, classnames_1.default)(styles_module_scss_1.default.root, className), role: constants_1.MODE.Checkbox, "data-size": size, ...stateDataAttributes, "data-focusvisible": focusVisible || undefined, "data-test-id": dataTestId || undefined, children: (0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.container, children: [(0, jsx_runtime_1.jsxs)("div", { className: styles_module_scss_1.default.framing, ...stateDataAttributes, children: [(0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.backgroundStateLayer, "data-state": 'emptyDarkOnAccent' }), (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.flag, children: (0, jsx_runtime_1.jsx)("div", { className: styles_module_scss_1.default.surface, ...stateDataAttributes, children: (0, jsx_runtime_1.jsx)(Icon, { size: size, loading: Boolean(loading) }) }) })] }), !loading && ((0, jsx_runtime_1.jsx)("input", { ...otherProps, "data-test-id": dataTestId ? `${dataTestId}${constants_1.NATIVE_INPUT_SUFFIX}` : undefined, ref: inputRef, type: constants_1.MODE.Checkbox, className: styles_module_scss_1.default.inputPrivate, checked: checked, disabled: disabled, onChange: e => setChecked(e.target.checked), onFocus: event => {
36
+ setFocusVisible(event.target.matches(':focus-visible'));
37
+ onFocus?.(event);
38
+ }, onBlur: event => {
39
+ setFocusVisible(false);
40
+ onBlur?.(event);
41
+ } }))] }) }));
42
+ }
@@ -0,0 +1 @@
1
+ export * from './Switch';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./Switch"), exports);
@@ -0,0 +1,269 @@
1
+ @charset "UTF-8";
2
+ .spinner{
3
+ flex-shrink:0;
4
+ }
5
+
6
+ .icon{
7
+ pointer-events:none;
8
+ position:absolute;
9
+ transform:scale(0.72);
10
+ opacity:0;
11
+ transition:opacity 0.1s cubic-bezier(0.33, 1, 0.68, 1), transform 0.1s cubic-bezier(0.33, 1, 0.68, 1), color 0.1s linear;
12
+ }
13
+
14
+ .surface[data-checked=true]:not([data-loading=true]) .icon{
15
+ transform:scale(1);
16
+ opacity:1;
17
+ }
18
+
19
+ .inputPrivate{
20
+ cursor:pointer;
21
+ position:absolute;
22
+ inset:0;
23
+ width:100%;
24
+ height:100%;
25
+ margin:0;
26
+ padding:0;
27
+ opacity:0;
28
+ }
29
+ .inputPrivate:disabled{
30
+ cursor:not-allowed;
31
+ }
32
+
33
+ .backgroundStateLayer{
34
+ visibility:initial;
35
+ }
36
+
37
+ .flag{
38
+ position:absolute;
39
+ top:50%;
40
+ left:0;
41
+ transform:translateY(-50%);
42
+ display:flex;
43
+ align-items:center;
44
+ justify-content:center;
45
+ transition:left 0.1s linear;
46
+ }
47
+
48
+ .framing{
49
+ position:relative;
50
+ display:flex;
51
+ align-items:center;
52
+ box-sizing:border-box;
53
+ outline-style:solid;
54
+ transition:background-color 0.1s linear, outline-color 0.1s linear;
55
+ }
56
+ .framing[data-checked=false]{
57
+ background-color:var(--sn-theme-color-neutral-accent, var(--sn-brand-color-neutral-55, var(--sn-primitive-color-gray-55, #8b8fa7)));
58
+ outline-color:var(--sn-theme-color-neutral-accent, var(--sn-brand-color-neutral-55, var(--sn-primitive-color-gray-55, #8b8fa7)));
59
+ }
60
+ .framing[data-checked=true][data-disabled=false]{
61
+ background-color:var(--sn-theme-color-primary-accent, var(--sn-brand-color-primary-55, var(--sn-brandRole-color-brandA-55, var(--sn-primitive-color-brandA-55, #389f74))));
62
+ outline-color:var(--sn-theme-color-primary-accent, var(--sn-brand-color-primary-55, var(--sn-brandRole-color-brandA-55, var(--sn-primitive-color-brandA-55, #389f74))));
63
+ }
64
+ .framing[data-checked=true][data-disabled=true]{
65
+ background-color:var(--sn-theme-color-neutral-accent, var(--sn-brand-color-neutral-55, var(--sn-primitive-color-gray-55, #8b8fa7)));
66
+ outline-color:var(--sn-theme-color-neutral-accent, var(--sn-brand-color-neutral-55, var(--sn-primitive-color-gray-55, #8b8fa7)));
67
+ }
68
+ .framing[data-disabled=true]{
69
+ opacity:var(--sn-theme-effect-opacity-disabled, 0.4);
70
+ }
71
+
72
+ .container{
73
+ position:relative;
74
+ display:flex;
75
+ align-items:center;
76
+ justify-content:center;
77
+ }
78
+
79
+ .surface{
80
+ position:relative;
81
+ display:flex;
82
+ align-items:center;
83
+ justify-content:center;
84
+ box-sizing:border-box;
85
+ transition:width 0.1s linear, height 0.1s linear, background-color 0.1s linear, color 0.1s linear;
86
+ }
87
+ .surface[data-checked=false][data-loading=false]{
88
+ background-color:var(--sn-theme-color-neutral-onAccent, var(--sn-brand-color-neutral-99, var(--sn-primitive-color-gray-99, #ffffff)));
89
+ }
90
+ .surface[data-checked=false][data-disabled=false][data-loading=true]{
91
+ color:var(--sn-theme-color-neutral-onAccent, var(--sn-brand-color-neutral-99, var(--sn-primitive-color-gray-99, #ffffff)));
92
+ }
93
+ .surface[data-checked=true][data-loading=false]{
94
+ background-color:var(--sn-theme-color-primary-onAccent, var(--sn-brand-color-primary-onAccentLight, var(--sn-brandRole-color-brandA-onAccentLight, var(--sn-primitive-color-brandA-99, #fbfffc))));
95
+ }
96
+ .surface[data-checked=true][data-loading=false][data-disabled=false]{
97
+ color:var(--sn-theme-color-primary-accent, var(--sn-brand-color-primary-55, var(--sn-brandRole-color-brandA-55, var(--sn-primitive-color-brandA-55, #389f74))));
98
+ }
99
+ .surface[data-checked=true][data-loading=false][data-disabled=true]{
100
+ color:var(--sn-theme-color-neutral-accent, var(--sn-brand-color-neutral-55, var(--sn-primitive-color-gray-55, #8b8fa7)));
101
+ }
102
+ .surface[data-checked=true][data-loading=true]{
103
+ color:var(--sn-theme-color-primary-onAccent, var(--sn-brand-color-primary-onAccentLight, var(--sn-brandRole-color-brandA-onAccentLight, var(--sn-primitive-color-brandA-99, #fbfffc))));
104
+ }
105
+
106
+ .root{
107
+ position:relative;
108
+ display:inline-flex;
109
+ flex-direction:row;
110
+ flex-grow:0;
111
+ flex-shrink:0;
112
+ align-items:center;
113
+ vertical-align:middle;
114
+ }
115
+ .root[data-size=xs] .container{
116
+ min-width:var(--sn-toggles-anatomy-size-xs-switch-container-minWidth, var(--sn-primitive-dimension-24, 24px));
117
+ min-height:var(--sn-toggles-anatomy-size-xs-switch-container-minHeight, var(--sn-primitive-dimension-16, 16px));
118
+ }
119
+ .root[data-size=xs] .framing{
120
+ width:var(--sn-toggles-anatomy-size-xs-switch-framing-minWidth, var(--sn-primitive-dimension-24, 24px));
121
+ height:var(--sn-toggles-anatomy-size-xs-switch-framing-minHeight, var(--sn-primitive-dimension-16, 16px));
122
+ border-radius:var(--sn-toggles-anatomy-size-xs-switch-framing-borderRadius, var(--sn-brand-anatomy-radius-toggles-switch-xs, var(--sn-primitive-dimension-full, 10000px)));
123
+ outline-width:var(--sn-toggles-anatomy-size-xs-switch-framing-borderWidth, var(--sn-brand-anatomy-line-toggles-xs-strokeWeight, var(--sn-primitive-strokeWeight-strokeMedium, 1.5px)));
124
+ outline-offset:calc(0px - var(--sn-toggles-anatomy-size-xs-switch-framing-borderWidth, var(--sn-brand-anatomy-line-toggles-xs-strokeWeight, var(--sn-primitive-strokeWeight-strokeMedium, 1.5px))));
125
+ }
126
+ .root[data-size=xs] .flag{
127
+ min-width:var(--sn-toggles-anatomy-size-xs-switch-framing-flag-minWidth, var(--sn-primitive-dimension-16, 16px));
128
+ min-height:var(--sn-toggles-anatomy-size-xs-switch-framing-flag-minHeight, var(--sn-primitive-dimension-16, 16px));
129
+ }
130
+ .root[data-size=xs] .framing[data-checked=true] .flag{
131
+ left:calc(100% - var(--sn-toggles-anatomy-size-xs-switch-framing-flag-minWidth, var(--sn-primitive-dimension-16, 16px)));
132
+ }
133
+ .root[data-size=xs][data-focusvisible=true] .container{
134
+ outline-offset:var(--sn-primitive-strokeWeight-strokeSemiBold, 2px);
135
+ border-radius:var(--sn-toggles-anatomy-size-xs-switch-framing-borderRadius, var(--sn-brand-anatomy-radius-toggles-switch-xs, var(--sn-primitive-dimension-full, 10000px)));
136
+ outline:var(--sn-primitive-strokeWeight-strokeSemiBold, 2px) solid var(--sn-theme-color-available-complementary, #000000);
137
+ }
138
+ .root[data-size=xs][data-checked=false] .surface{
139
+ width:var(--sn-toggles-anatomy-size-xs-switch-framing-flag-surface-checkedFalse-width, var(--sn-primitive-dimension-12, 12px));
140
+ height:var(--sn-toggles-anatomy-size-xs-switch-framing-flag-surface-checkedFalse-height, var(--sn-primitive-dimension-12, 12px));
141
+ border-radius:var(--sn-toggles-anatomy-size-xs-switch-framing-flag-surface-checkedFalse-borderRadius, var(--sn-brand-anatomy-radius-toggles-switch-xs, var(--sn-primitive-dimension-full, 10000px)));
142
+ border-width:var(--sn-toggles-anatomy-size-xs-switch-framing-flag-surface-checkedFalse-borderWidth, var(--sn-brand-anatomy-line-toggles-xs-strokeWeight, var(--sn-primitive-strokeWeight-strokeMedium, 1.5px)));
143
+ }
144
+ .root[data-size=xs][data-checked=true] .surface{
145
+ width:var(--sn-toggles-anatomy-size-xs-switch-framing-flag-surface-checkedTrue-width, var(--sn-primitive-dimension-12, 12px));
146
+ height:var(--sn-toggles-anatomy-size-xs-switch-framing-flag-surface-checkedTrue-height, var(--sn-primitive-dimension-12, 12px));
147
+ border-radius:var(--sn-toggles-anatomy-size-xs-switch-framing-flag-surface-checkedTrue-borderRadius, var(--sn-brand-anatomy-radius-toggles-switch-xs, var(--sn-primitive-dimension-full, 10000px)));
148
+ border-width:var(--sn-toggles-anatomy-size-xs-switch-framing-flag-surface-checkedTrue-borderWidth, var(--sn-brand-anatomy-line-toggles-xs-strokeWeight, var(--sn-primitive-strokeWeight-strokeMedium, 1.5px)));
149
+ }
150
+ .root[data-size=s] .container{
151
+ min-width:var(--sn-toggles-anatomy-size-s-switch-container-minWidth, var(--sn-primitive-dimension-36, 36px));
152
+ min-height:var(--sn-toggles-anatomy-size-s-switch-container-minHeight, var(--sn-primitive-dimension-24, 24px));
153
+ }
154
+ .root[data-size=s] .framing{
155
+ width:var(--sn-toggles-anatomy-size-s-switch-framing-minWidth, var(--sn-primitive-dimension-32, 32px));
156
+ height:var(--sn-toggles-anatomy-size-s-switch-framing-minHeight, var(--sn-primitive-dimension-20, 20px));
157
+ border-radius:var(--sn-toggles-anatomy-size-s-switch-framing-borderRadius, var(--sn-brand-anatomy-radius-toggles-switch-s, var(--sn-primitive-dimension-full, 10000px)));
158
+ outline-width:var(--sn-toggles-anatomy-size-s-switch-framing-borderWidth, var(--sn-brand-anatomy-line-toggles-s-strokeWeight, var(--sn-primitive-strokeWeight-strokeSemiBold, 2px)));
159
+ outline-offset:calc(0px - var(--sn-toggles-anatomy-size-s-switch-framing-borderWidth, var(--sn-brand-anatomy-line-toggles-s-strokeWeight, var(--sn-primitive-strokeWeight-strokeSemiBold, 2px))));
160
+ }
161
+ .root[data-size=s] .flag{
162
+ min-width:var(--sn-toggles-anatomy-size-s-switch-framing-flag-minWidth, var(--sn-toggles-anatomy-size-s-switch-framing-minHeight, var(--sn-primitive-dimension-20, 20px)));
163
+ min-height:var(--sn-toggles-anatomy-size-s-switch-framing-flag-minHeight, var(--sn-toggles-anatomy-size-s-switch-framing-minHeight, var(--sn-primitive-dimension-20, 20px)));
164
+ }
165
+ .root[data-size=s] .framing[data-checked=true] .flag{
166
+ left:calc(100% - var(--sn-toggles-anatomy-size-s-switch-framing-flag-minWidth, var(--sn-toggles-anatomy-size-s-switch-framing-minHeight, var(--sn-primitive-dimension-20, 20px))));
167
+ }
168
+ .root[data-size=s][data-focusvisible=true] .container{
169
+ border-radius:var(--sn-toggles-anatomy-size-s-switch-framing-borderRadius, var(--sn-brand-anatomy-radius-toggles-switch-s, var(--sn-primitive-dimension-full, 10000px)));
170
+ outline:var(--sn-primitive-strokeWeight-strokeSemiBold, 2px) solid var(--sn-theme-color-available-complementary, #000000);
171
+ }
172
+ .root[data-size=s][data-checked=false] .surface{
173
+ width:var(--sn-toggles-anatomy-size-s-switch-framing-flag-surface-checkedFalse-width, var(--sn-primitive-dimension-16, 16px));
174
+ height:var(--sn-toggles-anatomy-size-s-switch-framing-flag-surface-checkedFalse-height, var(--sn-primitive-dimension-16, 16px));
175
+ border-radius:var(--sn-toggles-anatomy-size-s-switch-framing-flag-surface-checkedFalse-borderRadius, var(--sn-brand-anatomy-radius-toggles-switch-s, var(--sn-primitive-dimension-full, 10000px)));
176
+ border-width:var(--sn-toggles-anatomy-size-s-switch-framing-flag-surface-checkedFalse-borderWidth, var(--sn-brand-anatomy-line-toggles-s-strokeWeight, var(--sn-primitive-strokeWeight-strokeSemiBold, 2px)));
177
+ }
178
+ .root[data-size=s][data-checked=true] .surface{
179
+ width:var(--sn-toggles-anatomy-size-s-switch-framing-flag-surface-checkedTrue-width, var(--sn-primitive-dimension-16, 16px));
180
+ height:var(--sn-toggles-anatomy-size-s-switch-framing-flag-surface-checkedTrue-height, var(--sn-primitive-dimension-16, 16px));
181
+ border-radius:var(--sn-toggles-anatomy-size-s-switch-framing-flag-surface-checkedTrue-borderRadius, var(--sn-primitive-dimension-full, 10000px));
182
+ border-width:var(--sn-toggles-anatomy-size-s-switch-framing-flag-surface-checkedTrue-borderWidth, var(--sn-brand-anatomy-line-toggles-s-strokeWeight, var(--sn-primitive-strokeWeight-strokeSemiBold, 2px)));
183
+ }
184
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer{
185
+ position:absolute;
186
+ inset:0;
187
+ border-radius:inherit;
188
+ }
189
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=borderOnBackground]{
190
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-default-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-default-borderColor, rgba(159, 166, 198, 0.3019607843)));
191
+ border-style:solid;
192
+ border-width:var(--sn-primitive-strokeWeight-strokeRegular, 1px);
193
+ }
194
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=emptyNeutralOnBackground]{
195
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-defaultEmpty-filled, var(--sn-brand-color-state-neutral-forLightMode-default-background, rgba(120, 123, 138, 0)));
196
+ }
197
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=activatedOnBackground]{
198
+ background:var(--sn-theme-color-material-stateLayer-activated-default-filled, var(--sn-brand-color-state-activated-default-background, var(--sn-brandRole-color-brandA-backgroundActivatedDefault, rgba(56, 159, 116, 0.1490196078))));
199
+ }
200
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=versionOnColor]{
201
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-default-filled, rgba(0, 0, 0, 0.0509803922));
202
+ }
203
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=emptyVersionOnColor]{
204
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-defaultEmpty-filled, rgba(0, 0, 0, 0));
205
+ }
206
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=inversionOnColor]{
207
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-default-filled, rgba(255, 255, 255, 0.1019607843));
208
+ }
209
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=emptyInversionOnColor]{
210
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-defaultEmpty-filled, rgba(255, 255, 255, 0));
211
+ }
212
+ .root[data-loading=false][data-disabled=false] .container .backgroundStateLayer[data-state=emptyDarkOnAccent]{
213
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-defaultEmpty-filled, rgba(0, 0, 0, 0));
214
+ }
215
+ @media (hover: hover){
216
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=borderOnBackground]{
217
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-hovered-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-hovered-borderColor, rgba(159, 166, 198, 0.6509803922)));
218
+ }
219
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyNeutralOnBackground]{
220
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-hovered-filled, var(--sn-brand-color-state-neutral-forLightMode-hovered-background, rgba(188, 195, 220, 0.1490196078)));
221
+ }
222
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=activatedOnBackground]{
223
+ background:var(--sn-theme-color-material-stateLayer-activated-hovered-filled, var(--sn-brand-color-state-activated-hovered-background, var(--sn-brandRole-color-brandA-backgroundActivatedHovered, rgba(56, 159, 116, 0.3490196078))));
224
+ }
225
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=versionOnColor]{
226
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-hovered-filled, rgba(0, 0, 0, 0.1019607843));
227
+ }
228
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyVersionOnColor]{
229
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-hovered-filled, rgba(0, 0, 0, 0.1019607843));
230
+ }
231
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=inversionOnColor]{
232
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-hovered-filled, rgba(255, 255, 255, 0.1490196078));
233
+ }
234
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyInversionOnColor]{
235
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-hovered-filled, rgba(255, 255, 255, 0.1490196078));
236
+ }
237
+ .root[data-loading=false][data-disabled=false] .container:hover:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyDarkOnAccent]{
238
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-hovered-filled, rgba(0, 0, 0, 0.0588235294));
239
+ }
240
+ }
241
+ .root[data-loading=false][data-disabled=false] .container{
242
+ }
243
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=borderOnBackground], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=borderOnBackground], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=borderOnBackground]{
244
+ border-color:var(--sn-theme-color-material-stateLayer-neutral-border-pressed-borderColor, var(--sn-brand-color-state-neutralBorder-forLightMode-pressed-borderColor, rgba(159, 166, 198, 0.8)));
245
+ }
246
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=emptyNeutralOnBackground], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyNeutralOnBackground], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyNeutralOnBackground]{
247
+ background:var(--sn-theme-color-material-stateLayer-neutral-onBackground-pressed-filled, var(--sn-brand-color-state-neutral-forLightMode-pressed-background, rgba(188, 195, 220, 0.3019607843)));
248
+ }
249
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=activatedOnBackground], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=activatedOnBackground], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=activatedOnBackground]{
250
+ background:var(--sn-theme-color-material-stateLayer-activated-pressed-filled, var(--sn-brand-color-state-activated-pressed-background, var(--sn-brandRole-color-brandA-backgroundActivatedPressed, rgba(56, 159, 116, 0.4509803922))));
251
+ }
252
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=versionOnColor], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=versionOnColor], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=versionOnColor]{
253
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-pressed-filled, rgba(0, 0, 0, 0.1490196078));
254
+ }
255
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=emptyVersionOnColor], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyVersionOnColor], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyVersionOnColor]{
256
+ background:var(--sn-theme-color-material-stateLayer-versionOnColor-pressed-filled, rgba(0, 0, 0, 0.1490196078));
257
+ }
258
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=inversionOnColor], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=inversionOnColor], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=inversionOnColor]{
259
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-pressed-filled, rgba(255, 255, 255, 0.0509803922));
260
+ }
261
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=emptyInversionOnColor], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyInversionOnColor], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyInversionOnColor]{
262
+ background:var(--sn-theme-color-material-stateLayer-inversionOnColor-pressed-filled, rgba(255, 255, 255, 0.0509803922));
263
+ }
264
+ .root[data-loading=false][data-disabled=false] .container[data-loading] .backgroundStateLayer[data-state=emptyDarkOnAccent], .root[data-loading=false][data-disabled=false] .container:active:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyDarkOnAccent], .root[data-loading=false][data-disabled=false] .container[data-pressed=true]:not([data-disabled], [data-loading]) .backgroundStateLayer[data-state=emptyDarkOnAccent]{
265
+ background:var(--sn-theme-color-material-stateLayer-darkOnAccent-pressed-filled, rgba(0, 0, 0, 0.1215686275));
266
+ }
267
+ .root[data-loading=true] .backgroundStateLayer, .root[data-disabled=true] .backgroundStateLayer{
268
+ visibility:hidden;
269
+ }
@@ -0,0 +1,22 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { SELECTION_MODE } from '../../constants';
3
+ export type ToggleGroupProps = PropsWithChildren<{
4
+ /** Начальное состояние */
5
+ defaultValue?: string;
6
+ /** Controlled состояние */
7
+ value?: string;
8
+ /** Controlled обработчик измения состояния */
9
+ onChange?(value: (string | undefined) | string): void;
10
+ /** Режим выбора */
11
+ selectionMode?: typeof SELECTION_MODE.Single;
12
+ } | {
13
+ /** Начальное состояние */
14
+ defaultValue?: string[];
15
+ /** Controlled состояние */
16
+ value?: string[];
17
+ /** Controlled обработчик измения состояния */
18
+ onChange?(value: (string[] | undefined) | string[]): void;
19
+ /** Режим выбора */
20
+ selectionMode?: typeof SELECTION_MODE.Multiple;
21
+ }>;
22
+ export declare function ToggleGroup({ children, value: valueProp, onChange: onChangeProp, selectionMode, defaultValue, }: ToggleGroupProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToggleGroup = ToggleGroup;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const utils_1 = require("@cloud-ru/ds-utils");
6
+ const react_1 = require("react");
7
+ const constants_1 = require("../../constants");
8
+ const context_1 = require("../../context");
9
+ function ToggleGroup({ children, value: valueProp, onChange: onChangeProp, selectionMode = constants_1.SELECTION_MODE.Single, defaultValue, }) {
10
+ const [value, setValue] = (0, utils_1.useUncontrolledProp)(valueProp, defaultValue, cb => {
11
+ onChangeProp?.(cb(value));
12
+ });
13
+ const onChange = (0, react_1.useCallback)((newValue) => {
14
+ if (selectionMode === constants_1.SELECTION_MODE.Single) {
15
+ return setValue((oldValue) => {
16
+ if (newValue !== oldValue) {
17
+ return newValue;
18
+ }
19
+ return undefined;
20
+ });
21
+ }
22
+ return setValue((oldValues = []) => {
23
+ if (Array.isArray(oldValues)) {
24
+ if (oldValues.includes(newValue)) {
25
+ return oldValues.filter(oldValue => oldValue !== newValue);
26
+ }
27
+ return oldValues.concat(newValue);
28
+ }
29
+ return undefined;
30
+ });
31
+ }, [selectionMode, setValue]);
32
+ return ((0, jsx_runtime_1.jsx)(context_1.ToggleGroupContext.Provider, { value: { value, onChange, selectionMode }, children: children }));
33
+ }
@@ -0,0 +1,9 @@
1
+ type UseToggleGroupProps = {
2
+ value: string;
3
+ };
4
+ export declare function useToggleGroup({ value: itemValue }: UseToggleGroupProps): {
5
+ isChecked: boolean;
6
+ handleClick: () => void;
7
+ multipleSelection: boolean;
8
+ };
9
+ export {};