@rt-tools/ui-kit 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/rt-tools-ui-kit.mjs +4394 -3750
  3. package/fesm2022/rt-tools-ui-kit.mjs.map +1 -1
  4. package/package.json +3 -4
  5. package/rt-tools-ui-kit-0.5.0.tgz +0 -0
  6. package/src/lib/ui-kit/action-bar/components/bar/rtui-action-bar.component.scss +14 -0
  7. package/src/lib/ui-kit/action-bar/components/container/rtui-action-bar-container.component.scss +47 -0
  8. package/src/lib/ui-kit/action-bar/stories/component/test-action-bar.component.scss +15 -0
  9. package/src/lib/ui-kit/aside/components/container/aside-container.component.scss +4 -1
  10. package/src/lib/ui-kit/aside/components/error-notification/aside-error-box.component.scss +1 -1
  11. package/src/lib/ui-kit/aside/components/panel/aside-panel.component.scss +24 -0
  12. package/src/lib/ui-kit/buttons/unified-button/rtui-button.component.scss +210 -206
  13. package/src/lib/ui-kit/buttons/unified-button/stories/component/test-button-matrix.component.scss +38 -0
  14. package/src/lib/ui-kit/icon/rtui-icon.component.scss +43 -24
  15. package/src/lib/ui-kit/info-badge/info-badge.component.scss +23 -23
  16. package/src/lib/ui-kit/popover/stories/component/test-popover.component.scss +32 -0
  17. package/src/lib/ui-kit/scrollable/scrollable-container.component.scss +57 -0
  18. package/src/lib/ui-kit/scrollable/stories/component/test-scrollable.component.scss +17 -0
  19. package/src/lib/ui-kit/side-menu/menu/rtui-side-menu.component.scss +185 -4
  20. package/src/lib/ui-kit/side-menu/menu-sub-item/rtui-side-menu-sub-item.component.scss +45 -4
  21. package/src/lib/ui-kit/snack-bar/snack-bar.component.scss +20 -0
  22. package/src/lib/ui-kit/spinner/spinner.component.scss +1 -1
  23. package/src/lib/ui-kit/table/components/pagination-view/rtui-pagination.component.scss +20 -17
  24. package/src/lib/ui-kit/table/components/table-base-cell/table-base-cell.component.scss +21 -0
  25. package/src/lib/ui-kit/table/components/table-container/table-container.component.scss +26 -0
  26. package/src/lib/ui-kit/table/stories/dynamic-list/test-dynamic-list.component.scss +18 -0
  27. package/src/lib/ui-kit/toolbar/stories/component/test-toolbar.component.scss +22 -0
  28. package/src/styles/TOKENS.md +25 -16
  29. package/src/styles/base/_base.scss +6 -3
  30. package/src/styles/base/_tokens.scss +24 -0
  31. package/src/styles/color-scheme.spec.ts +4 -1
  32. package/src/styles/components/_rtui_button.scss +13 -547
  33. package/src/styles/components/button/_base.scss +64 -0
  34. package/src/styles/components/button/_map.scss +184 -0
  35. package/src/styles/components/button/_palettes.scss +218 -0
  36. package/src/styles/components/button/_sizes.scss +29 -0
  37. package/src/styles/components/button/_text.scss +68 -0
  38. package/src/styles/main.scss +0 -1
  39. package/styles/tokens.css +11 -0
  40. package/types/rt-tools-ui-kit.d.ts +614 -361
  41. package/rt-tools-ui-kit-0.3.1.tgz +0 -0
  42. package/src/styles/components/_button.scss +0 -372
@@ -1,547 +1,13 @@
1
- @use '../base/mixin' as mixins;
2
-
3
- $rtui-button: (
4
- base: (
5
- width: auto,
6
- bg: transparent,
7
- border: 0,
8
- color: var(--rt-text-base-soft),
9
- display: inline-flex,
10
- font-size: 0,
11
- gap: 0,
12
- padding: 0,
13
- shadow: 0,
14
- shadow-blur: 8px,
15
- ),
16
- accent: (
17
- border: 1px solid var(--rt-color-blue-100),
18
- color: var(--rt-text-static-light),
19
- bg: var(--rt-color-blue-60),
20
- hover-bg: var(--rt-color-blue-40),
21
- active-shadow: var(--rt-color-blue-40),
22
- ),
23
- accent-outline: (
24
- border: 1px solid var(--rt-color-blue-100),
25
- bg: var(--rt-color-blue-20),
26
- color: var(--rt-text-accent-info),
27
- hover-border: 1px solid var(--rt-color-blue-80),
28
- hover-bg: var(--rt-bg-base-base),
29
- active-shadow: var(--rt-color-blue-40),
30
- ),
31
- accent-light: (
32
- color: var(--rt-text-accent-info),
33
- bg: var(--rt-color-blue-40),
34
- hover-color: var(--rt-text-accent-info-soft),
35
- hover-bg: var(--rt-color-blue-20),
36
- active-shadow: var(--rt-color-blue-40),
37
- ),
38
- success: (
39
- border: 1px solid var(--rt-color-green-100),
40
- color: var(--rt-text-static-light),
41
- bg: var(--rt-bg-accent-success-solid),
42
- hover-bg: var(--rt-color-green-60),
43
- active-shadow: var(--rt-color-green-40),
44
- ),
45
- success-outline: (
46
- border: 1px solid var(--rt-color-green-100),
47
- bg: var(--rt-color-green-20),
48
- color: var(--rt-text-accent-success),
49
- hover-border: 1px solid var(--rt-color-green-80),
50
- hover-bg: var(--rt-bg-base-base),
51
- active-shadow: var(--rt-color-green-40),
52
- ),
53
- success-light: (
54
- color: var(--rt-text-accent-success),
55
- bg: var(--rt-color-green-20),
56
- hover-color: var(--rt-text-accent-success-soft),
57
- hover-bg: var(--rt-bg-accent-success-subtle),
58
- active-shadow: var(--rt-color-green-40),
59
- ),
60
- secondary: (
61
- border: 1px solid var(--rt-border-neutral-emphasis),
62
- color: var(--rt-text-static-light),
63
- bg: var(--rt-bg-base-emphasis),
64
- hover-bg: var(--rt-bg-base-emphasis-soft),
65
- active-shadow: var(--rt-bg-base-emphasis-soft),
66
- ),
67
- secondary-outline: (
68
- border: 1px solid var(--rt-border-neutral-emphasis),
69
- bg: var(--rt-bg-base-strong),
70
- color: var(--rt-text-base-secondary),
71
- hover-bg: var(--rt-bg-base-base),
72
- active-shadow: var(--rt-bg-base-emphasis-soft),
73
- ),
74
- secondary-light: (
75
- color: var(--rt-text-base-soft),
76
- bg: var(--rt-bg-base-emphasis-soft),
77
- hover-color: var(--rt-text-base-secondary),
78
- hover-bg: var(--rt-bg-base-strong),
79
- active-shadow: var(--rt-bg-base-emphasis-soft),
80
- ),
81
- error: (
82
- border: 1px solid var(--rt-border-accent-danger),
83
- color: var(--rt-text-static-light),
84
- bg: var(--rt-color-red-80),
85
- hover-bg: var(--rt-color-red-60),
86
- active-shadow: var(--rt-color-red-40),
87
- ),
88
- error-outline: (
89
- border: 1px solid var(--rt-border-accent-danger),
90
- bg: var(--rt-bg-accent-danger-subtle),
91
- color: var(--rt-text-accent-danger),
92
- hover-bg: var(--rt-bg-base-base),
93
- active-shadow: var(--rt-color-red-40),
94
- ),
95
- error-light: (
96
- color: var(--rt-text-accent-danger),
97
- bg: var(--rt-color-red-40),
98
- hover-bg: var(--rt-bg-accent-danger-subtle),
99
- active-shadow: var(--rt-color-red-40),
100
- ),
101
- warning: (
102
- border: 1px solid var(--rt-color-orange-100),
103
- color: var(--rt-text-static-light),
104
- bg: var(--rt-bg-accent-warning-solid),
105
- hover-bg: var(--rt-color-orange-60),
106
- active-shadow: var(--rt-color-orange-40),
107
- ),
108
- warning-outline: (
109
- border: 1px solid var(--rt-color-orange-100),
110
- bg: var(--rt-color-orange-10),
111
- color: var(--rt-text-accent-warning),
112
- hover-bg: var(--rt-bg-base-base),
113
- active-shadow: var(--rt-color-orange-40),
114
- ),
115
- warning-light: (
116
- color: var(--rt-text-accent-warning),
117
- bg: var(--rt-color-orange-10),
118
- hover-bg: var(--rt-color-orange-5),
119
- active-shadow: var(--rt-color-orange-40),
120
- ),
121
- accent-text: (
122
- border: 0,
123
- bg: transparent,
124
- color: var(--rt-text-accent-info),
125
- hover-bg: var(--rt-bg-base-hover),
126
- ),
127
- success-text: (
128
- border: 0,
129
- bg: transparent,
130
- color: var(--rt-text-accent-success),
131
- hover-bg: var(--rt-bg-base-hover),
132
- ),
133
- secondary-text: (
134
- border: 0,
135
- bg: transparent,
136
- color: var(--rt-text-base-secondary),
137
- hover-bg: var(--rt-bg-base-hover),
138
- ),
139
- error-text: (
140
- border: 0,
141
- bg: transparent,
142
- color: var(--rt-text-accent-danger),
143
- hover-bg: var(--rt-bg-base-hover),
144
- ),
145
- warning-text: (
146
- border: 0,
147
- bg: transparent,
148
- color: var(--rt-text-accent-warning),
149
- hover-bg: var(--rt-bg-base-hover),
150
- ),
151
- size-sm: (
152
- gap: 4px,
153
- padding: 4px 8px,
154
- font-size: 12px,
155
- width: auto,
156
- display: inline-flex,
157
- ),
158
-
159
- size-md: (
160
- gap: 8px,
161
- padding: 8px 16px,
162
- font-size: 14px,
163
- width: auto,
164
- display: inline-flex,
165
- ),
166
-
167
- size-lg: (
168
- gap: 12px,
169
- padding: 12px 24px,
170
- font-size: 18px,
171
- width: auto,
172
- display: inline-flex,
173
- ),
174
-
175
- size-full: (
176
- width: 100%,
177
- display: flex,
178
- gap: 8px,
179
- padding: 8px 16px,
180
- font-size: 14px,
181
- ),
182
- );
183
-
184
- :root {
185
- @each $element, $elements in $rtui-button {
186
- @each $style-token, $value in $elements {
187
- #{mixins.generateCssVar('rtui-btn', #{$element}, #{$style-token})}: #{$value};
188
- }
189
- }
190
- }
191
-
192
- .rtui-btn {
193
- --width: var(--rt-rtui-btn-base-width);
194
- --bg: var(--rt-rtui-btn-base-bg);
195
- --border: var(--rt-rtui-btn-base-border);
196
- --color: var(--rt-rtui-btn-base-color);
197
- --display: var(--rt-rtui-btn-base-display);
198
- --font-size: var(--rt-rtui-btn-base-font-size);
199
- --gap: var(--rt-rtui-btn-base-gap);
200
- --padding: var(--rt-rtui-btn-base-padding);
201
- --shadow: var(--rt-rtui-btn-base-shadow);
202
- --shadow-blur: var(--rt-rtui-btn-base-shadow-blur);
203
-
204
- display: var(--display);
205
- width: var(--width);
206
- align-items: center;
207
- justify-content: center;
208
- padding: var(--padding);
209
- border: var(--border);
210
- border-radius: 6px;
211
- background-color: var(--bg);
212
- box-shadow: var(--shadow);
213
- color: var(--color);
214
- cursor: pointer;
215
- font-size: var(--font-size);
216
- font-weight: 600;
217
- gap: var(--gap);
218
- line-height: 1;
219
- text-decoration: none;
220
- transition:
221
- background-color 0.15s linear,
222
- color 0.15s linear,
223
- box-shadow 0.15s linear,
224
- border-color 0.15s linear;
225
-
226
- &:focus {
227
- outline: none;
228
- }
229
-
230
- &:focus-visible {
231
- outline: 2px dashed var(--rt-border-focus);
232
- outline-offset: 2px;
233
- }
234
-
235
- &:disabled {
236
- cursor: default;
237
- opacity: 0.75;
238
- pointer-events: none;
239
- }
240
- }
241
-
242
- /* accent */
243
- .rtui-btn-accent {
244
- --border: var(--rt-rtui-btn-accent-border);
245
- --color: var(--rt-rtui-btn-accent-color);
246
- --bg: var(--rt-rtui-btn-accent-bg);
247
-
248
- &:hover {
249
- --bg: var(--rt-rtui-btn-accent-hover-bg);
250
- }
251
-
252
- &:active {
253
- --shadow: var(--rt-rtui-btn-accent-active-shadow);
254
- }
255
- }
256
-
257
- .rtui-btn-accent-outline {
258
- --border: var(--rt-rtui-btn-accent-outline-border);
259
- --bg: var(--rt-rtui-btn-accent-outline-bg);
260
- --color: var(--rt-rtui-btn-accent-outline-color);
261
-
262
- &:hover {
263
- --border: var(--rt-rtui-btn-accent-outline-hover-border);
264
- --bg: var(--rt-rtui-btn-accent-outline-hover-bg);
265
- }
266
-
267
- &:active {
268
- --shadow: var(--rt-rtui-btn-accent-outline-active-shadow);
269
- }
270
- }
271
-
272
- .rtui-btn-accent-light {
273
- --color: var(--rt-rtui-btn-accent-light-color);
274
- --bg: var(--rt-rtui-btn-accent-light-bg);
275
-
276
- &:hover {
277
- --color: var(--rt-rtui-btn-accent-light-hover-color);
278
- --bg: var(--rt-rtui-btn-accent-light-hover-bg);
279
- }
280
-
281
- &:active {
282
- --shadow: var(--rt-rtui-btn-accent-light-active-shadow);
283
- }
284
- }
285
-
286
- /* success */
287
- .rtui-btn-success {
288
- --border: var(--rt-rtui-btn-success-border);
289
- --color: var(--rt-rtui-btn-success-color);
290
- --bg: var(--rt-rtui-btn-success-bg);
291
-
292
- &:hover {
293
- --bg: var(--rt-rtui-btn-success-hover-bg);
294
- }
295
-
296
- &:active {
297
- --shadow: var(--rt-rtui-btn-success-active-shadow);
298
- }
299
- }
300
-
301
- .rtui-btn-success-outline {
302
- --border: var(--rt-rtui-btn-success-outline-border);
303
- --bg: var(--rt-rtui-btn-success-outline-bg);
304
- --color: var(--rt-rtui-btn-success-outline-color);
305
-
306
- &:hover {
307
- --border: var(--rt-rtui-btn-success-outline-hover-border);
308
- --bg: var(--rt-rtui-btn-success-outline-hover-bg);
309
- }
310
-
311
- &:active {
312
- --shadow: var(--rt-rtui-btn-success-outline-active-shadow);
313
- }
314
- }
315
-
316
- .rtui-btn-success-light {
317
- --color: var(--rt-rtui-btn-success-light-color);
318
- --bg: var(--rt-rtui-btn-success-light-bg);
319
-
320
- &:hover {
321
- --color: var(--rt-rtui-btn-success-light-hover-color);
322
- --bg: var(--rt-rtui-btn-success-light-hover-bg);
323
- }
324
-
325
- &:active {
326
- --shadow: var(--rt-rtui-btn-success-light-active-shadow);
327
- }
328
- }
329
-
330
- /* secondary */
331
- .rtui-btn-secondary {
332
- --border: var(--rt-rtui-btn-secondary-border);
333
- --color: var(--rt-rtui-btn-secondary-color);
334
- --bg: var(--rt-rtui-btn-secondary-bg);
335
-
336
- &:hover {
337
- --bg: var(--rt-rtui-btn-secondary-hover-bg);
338
- }
339
-
340
- &:active {
341
- --shadow: var(--rt-rtui-btn-secondary-active-shadow);
342
- }
343
- }
344
-
345
- .rtui-btn-secondary-outline {
346
- --border: var(--rt-rtui-btn-secondary-outline-border);
347
- --bg: var(--rt-rtui-btn-secondary-outline-bg);
348
- --color: var(--rt-rtui-btn-secondary-outline-color);
349
-
350
- &:hover {
351
- --bg: var(--rt-rtui-btn-secondary-outline-hover-bg);
352
- }
353
-
354
- &:active {
355
- --shadow: var(--rt-rtui-btn-secondary-outline-active-shadow);
356
- }
357
- }
358
-
359
- .rtui-btn-secondary-light {
360
- --color: var(--rt-rtui-btn-secondary-light-color);
361
- --bg: var(--rt-rtui-btn-secondary-light-bg);
362
-
363
- &:hover {
364
- --color: var(--rt-rtui-btn-secondary-light-hover-color);
365
- --bg: var(--rt-rtui-btn-secondary-light-hover-bg);
366
- }
367
-
368
- &:active {
369
- --shadow: var(--rt-rtui-btn-secondary-light-active-shadow);
370
- }
371
- }
372
-
373
- /* error */
374
- .rtui-btn-error {
375
- --border: var(--rt-rtui-btn-error-border);
376
- --color: var(--rt-rtui-btn-error-color);
377
- --bg: var(--rt-rtui-btn-error-bg);
378
-
379
- &:hover {
380
- --bg: var(--rt-rtui-btn-error-hover-bg);
381
- }
382
-
383
- &:active {
384
- --shadow: var(--rt-rtui-btn-error-active-shadow);
385
- }
386
- }
387
-
388
- .rtui-btn-error-outline {
389
- --border: var(--rt-rtui-btn-error-outline-border);
390
- --bg: var(--rt-rtui-btn-error-outline-bg);
391
- --color: var(--rt-rtui-btn-error-outline-color);
392
-
393
- &:hover {
394
- --bg: var(--rt-rtui-btn-error-outline-hover-bg);
395
- }
396
-
397
- &:active {
398
- --shadow: var(--rt-rtui-btn-error-outline-active-shadow);
399
- }
400
- }
401
-
402
- .rtui-btn-error-light {
403
- --color: var(--rt-rtui-btn-error-light-color);
404
- --bg: var(--rt-rtui-btn-error-light-bg);
405
-
406
- &:hover {
407
- --bg: var(--rt-rtui-btn-error-light-hover-bg);
408
- }
409
-
410
- &:active {
411
- --shadow: var(--rt-rtui-btn-error-light-active-shadow);
412
- }
413
- }
414
-
415
- /* warning */
416
- .rtui-btn-warning {
417
- --border: var(--rt-rtui-btn-warning-border);
418
- --color: var(--rt-rtui-btn-warning-color);
419
- --bg: var(--rt-rtui-btn-warning-bg);
420
-
421
- &:hover {
422
- --bg: var(--rt-rtui-btn-warning-hover-bg);
423
- }
424
-
425
- &:active {
426
- --shadow: var(--rt-rtui-btn-warning-active-shadow);
427
- }
428
- }
429
-
430
- .rtui-btn-warning-outline {
431
- --border: var(--rt-rtui-btn-warning-outline-border);
432
- --bg: var(--rt-rtui-btn-warning-outline-bg);
433
- --color: var(--rt-rtui-btn-warning-outline-color);
434
-
435
- &:hover {
436
- --bg: var(--rt-rtui-btn-warning-outline-hover-bg);
437
- }
438
-
439
- &:active {
440
- --shadow: var(--rt-rtui-btn-warning-outline-active-shadow);
441
- }
442
- }
443
-
444
- .rtui-btn-warning-light {
445
- --color: var(--rt-rtui-btn-warning-light-color);
446
- --bg: var(--rt-rtui-btn-warning-light-bg);
447
-
448
- &:hover {
449
- --bg: var(--rt-rtui-btn-warning-light-hover-bg);
450
- }
451
-
452
- &:active {
453
- --shadow: var(--rt-rtui-btn-warning-light-active-shadow);
454
- }
455
- }
456
-
457
- /* text — transparent, borderless label with a subtle hover wash.
458
- Shared box matches the legacy text-button (inline-text look). Compound
459
- `.rtui-btn[...-text]` (0,2,0) outranks the size tokens (0,1,0) regardless of order. */
460
- .rtui-btn[class*='-text'] {
461
- --font-size: 16px;
462
- --gap: 8px;
463
- --padding: 0 10px;
464
-
465
- min-height: 30px;
466
- border-radius: 5px;
467
- font-weight: 400;
468
- }
469
-
470
- .rtui-btn-accent-text {
471
- --border: var(--rt-rtui-btn-accent-text-border);
472
- --bg: var(--rt-rtui-btn-accent-text-bg);
473
- --color: var(--rt-rtui-btn-accent-text-color);
474
-
475
- &:hover {
476
- --bg: var(--rt-rtui-btn-accent-text-hover-bg);
477
- }
478
- }
479
-
480
- .rtui-btn-success-text {
481
- --border: var(--rt-rtui-btn-success-text-border);
482
- --bg: var(--rt-rtui-btn-success-text-bg);
483
- --color: var(--rt-rtui-btn-success-text-color);
484
-
485
- &:hover {
486
- --bg: var(--rt-rtui-btn-success-text-hover-bg);
487
- }
488
- }
489
-
490
- /* secondary-text resolves its colour ON the element so the `--rt-text-base-secondary`
491
- semantic (`--mat-sys-on-surface-variant` hybrid) lands where Material is in scope. */
492
- .rtui-btn-secondary-text {
493
- --border: var(--rt-rtui-btn-secondary-text-border);
494
- --bg: var(--rt-rtui-btn-secondary-text-bg);
495
- --color: var(--mat-sys-on-surface-variant, var(--rt-rtui-btn-secondary-text-color));
496
-
497
- &:hover {
498
- --bg: var(--rt-rtui-btn-secondary-text-hover-bg);
499
- }
500
- }
501
-
502
- .rtui-btn-error-text {
503
- --border: var(--rt-rtui-btn-error-text-border);
504
- --bg: var(--rt-rtui-btn-error-text-bg);
505
- --color: var(--rt-rtui-btn-error-text-color);
506
-
507
- &:hover {
508
- --bg: var(--rt-rtui-btn-error-text-hover-bg);
509
- }
510
- }
511
-
512
- .rtui-btn-warning-text {
513
- --border: var(--rt-rtui-btn-warning-text-border);
514
- --bg: var(--rt-rtui-btn-warning-text-bg);
515
- --color: var(--rt-rtui-btn-warning-text-color);
516
-
517
- &:hover {
518
- --bg: var(--rt-rtui-btn-warning-text-hover-bg);
519
- }
520
- }
521
-
522
- /* size */
523
- .rtui-btn-sm {
524
- --gap: var(--rt-rtui-btn-size-sm-gap);
525
- --padding: var(--rt-rtui-btn-size-sm-padding);
526
- --font-size: var(--rt-rtui-btn-size-sm-font-size);
527
- }
528
-
529
- .rtui-btn-md {
530
- --gap: var(--rt-rtui-btn-size-md-gap);
531
- --padding: var(--rt-rtui-btn-size-md-padding);
532
- --font-size: var(--rt-rtui-btn-size-md-font-size);
533
- }
534
-
535
- .rtui-btn-lg {
536
- --gap: var(--rt-rtui-btn-size-lg-gap);
537
- --padding: var(--rt-rtui-btn-size-lg-padding);
538
- --font-size: var(--rt-rtui-btn-size-lg-font-size);
539
- }
540
-
541
- .rtui-btn-full {
542
- --width: var(--rt-rtui-btn-size-full-width);
543
- --display: var(--rt-rtui-btn-size-full-display);
544
- --gap: var(--rt-rtui-btn-size-full-gap);
545
- --padding: var(--rt-rtui-btn-size-full-padding);
546
- --font-size: var(--rt-rtui-btn-size-full-font-size);
547
- }
1
+ // Кнопка кита: вид, размер и состояние. Файл остался входом, а сами правила лежат частями
2
+ // рядом, по предмету: таблица видов — `button/_map.scss`, основа блока — `button/_base.scss`,
3
+ // пятнадцать палитр — `button/_palettes.scss`, виды без фона — `button/_text.scss`, размеры —
4
+ // `button/_sizes.scss`.
5
+ // Порядок подключения — это порядок каскада: правила одного блока равны по силе, и текстовые
6
+ // виды перебивают палитры только потому, что стоят после них.
7
+
8
+ @forward 'button/map';
9
+
10
+ @use 'button/base';
11
+ @use 'button/palettes';
12
+ @use 'button/text';
13
+ @use 'button/sizes';
@@ -0,0 +1,64 @@
1
+ // Основа кнопки: объявление свойств вида на корне страницы и сам блок `.rtui-btn` — раскладка,
2
+ // рамка, тень, состояния наведения, фокуса и отключённости.
3
+ // Часть стилей кнопки — входом остаётся `_rtui_button.scss`.
4
+
5
+ @use '../../base/mixin' as mixins;
6
+ @use 'map' as button;
7
+
8
+ :root {
9
+ @each $element, $elements in button.$rtui-button {
10
+ @each $style-token, $value in $elements {
11
+ #{mixins.generateCssVar('rtui-btn', #{$element}, #{$style-token})}: #{$value};
12
+ }
13
+ }
14
+ }
15
+
16
+ .rtui-btn {
17
+ --width: var(--rt-rtui-btn-base-width);
18
+ --bg: var(--rt-rtui-btn-base-bg);
19
+ --border: var(--rt-rtui-btn-base-border);
20
+ --color: var(--rt-rtui-btn-base-color);
21
+ --display: var(--rt-rtui-btn-base-display);
22
+ --font-size: var(--rt-rtui-btn-base-font-size);
23
+ --gap: var(--rt-rtui-btn-base-gap);
24
+ --padding: var(--rt-rtui-btn-base-padding);
25
+ --shadow: var(--rt-rtui-btn-base-shadow);
26
+ --shadow-blur: var(--rt-rtui-btn-base-shadow-blur);
27
+
28
+ display: var(--display);
29
+ width: var(--width);
30
+ align-items: center;
31
+ justify-content: center;
32
+ padding: var(--padding);
33
+ border: var(--border);
34
+ border-radius: 6px;
35
+ background-color: var(--bg);
36
+ box-shadow: var(--shadow);
37
+ color: var(--color);
38
+ cursor: pointer;
39
+ font-size: var(--font-size);
40
+ font-weight: 600;
41
+ gap: var(--gap);
42
+ line-height: 1;
43
+ text-decoration: none;
44
+ transition:
45
+ background-color 0.15s linear,
46
+ color 0.15s linear,
47
+ box-shadow 0.15s linear,
48
+ border-color 0.15s linear;
49
+
50
+ &:focus {
51
+ outline: none;
52
+ }
53
+
54
+ &:focus-visible {
55
+ outline: 2px dashed var(--rt-border-focus);
56
+ outline-offset: 2px;
57
+ }
58
+
59
+ &:disabled {
60
+ cursor: default;
61
+ opacity: 0.75;
62
+ pointer-events: none;
63
+ }
64
+ }