@rt-tools/ui-kit-v2 0.5.0 → 0.7.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 (111) hide show
  1. package/README.md +87 -7
  2. package/fesm2022/rt-tools-ui-kit-v2.mjs +1929 -994
  3. package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
  4. package/package.json +1 -1
  5. package/rt-tools-ui-kit-v2-0.7.0.tgz +0 -0
  6. package/src/lib/components/aside/_rt-aside-overlay.scss +73 -71
  7. package/src/lib/components/aside/footer/rt-aside-footer.component.scss +20 -16
  8. package/src/lib/components/aside/header/rt-aside-header.component.scss +72 -70
  9. package/src/lib/components/aside/rt-aside.component.scss +107 -105
  10. package/src/lib/components/aside/unsaved-dialog/rt-aside-unsaved-dialog.component.scss +33 -31
  11. package/src/lib/components/aside-section/rt-aside-section.component.scss +27 -23
  12. package/src/lib/components/autocomplete/rt-autocomplete.component.scss +124 -118
  13. package/src/lib/components/bar-list/rt-bar-list.component.scss +85 -81
  14. package/src/lib/components/bottom-sheet/rt-bottom-sheet.component.scss +64 -57
  15. package/src/lib/components/button/rt-button.directive.scss +319 -280
  16. package/src/lib/components/calendar/rt-calendar.component.scss +106 -102
  17. package/src/lib/components/card/rt-card.component.scss +53 -45
  18. package/src/lib/components/chat/rt-chat.component.scss +312 -306
  19. package/src/lib/components/checkbox/rt-checkbox.component.scss +61 -54
  20. package/src/lib/components/collapsible-text/rt-collapsible-text.component.scss +36 -34
  21. package/src/lib/components/confirm-popover/rt-confirm-popover.component.scss +36 -30
  22. package/src/lib/components/container/rt-container.component.scss +91 -87
  23. package/src/lib/components/counter/rt-counter.component.scss +14 -12
  24. package/src/lib/components/counter-row/rt-counter-row.component.scss +31 -27
  25. package/src/lib/components/date-picker/rt-date-picker.component.scss +73 -71
  26. package/src/lib/components/delta-view/rt-delta-view.component.scss +27 -25
  27. package/src/lib/components/detail-list/rt-detail-list.component.scss +8 -6
  28. package/src/lib/components/detail-list/rt-detail-row.component.scss +18 -16
  29. package/src/lib/components/dialog/footer/rt-dialog-footer.component.scss +19 -17
  30. package/src/lib/components/dialog/header/rt-dialog-header.component.scss +27 -25
  31. package/src/lib/components/dialog/rt-dialog.component.scss +59 -56
  32. package/src/lib/components/download-link/rt-download-link.component.scss +32 -27
  33. package/src/lib/components/empty-state/rt-empty-state.component.scss +50 -46
  34. package/src/lib/components/field/rt-field.component.scss +63 -61
  35. package/src/lib/components/file-card/rt-file-card.component.scss +84 -78
  36. package/src/lib/components/file-drop/rt-file-drop.component.scss +83 -77
  37. package/src/lib/components/file-input/rt-file-input.component.scss +20 -18
  38. package/src/lib/components/file-list/rt-file-list.component.scss +9 -7
  39. package/src/lib/components/filter-control/rt-filter-control.component.scss +16 -14
  40. package/src/lib/components/header/rt-header.component.scss +61 -55
  41. package/src/lib/components/icon/CONTEXT.md +16 -10
  42. package/src/lib/components/icon/rt-icon.component.scss +14 -12
  43. package/src/lib/components/icon-button/CONTEXT.md +4 -2
  44. package/src/lib/components/icon-button/rt-icon-button.component.scss +128 -112
  45. package/src/lib/components/info-item/rt-info-item.component.scss +38 -36
  46. package/src/lib/components/input/CONTEXT.md +9 -7
  47. package/src/lib/components/input/rt-input.component.scss +102 -98
  48. package/src/lib/components/input-number/rt-input-number.component.scss +84 -82
  49. package/src/lib/components/live-badge/rt-live-badge.component.scss +27 -23
  50. package/src/lib/components/logo/rt-logo.component.scss +54 -52
  51. package/src/lib/components/markdown-text/CONTEXT.md +40 -0
  52. package/src/lib/components/markdown-text/rt-markdown-text.component.scss +130 -0
  53. package/src/lib/components/menu/rt-menu-confirm-dialog.component.scss +30 -28
  54. package/src/lib/components/menu/rt-menu-item.component.scss +47 -42
  55. package/src/lib/components/menu/rt-menu.component.scss +23 -15
  56. package/src/lib/components/message/rt-message.component.scss +53 -49
  57. package/src/lib/components/message-composer/CONTEXT.md +1 -1
  58. package/src/lib/components/message-composer/rt-message-composer.component.scss +55 -49
  59. package/src/lib/components/money-list/rt-money-list.component.scss +13 -9
  60. package/src/lib/components/money-list/rt-money-row.component.scss +23 -19
  61. package/src/lib/components/multiselect/rt-multiselect.component.scss +169 -161
  62. package/src/lib/components/night-grid/rt-night-grid.component.scss +47 -42
  63. package/src/lib/components/note/rt-note.component.scss +15 -11
  64. package/src/lib/components/notifications-bell/rt-notifications-bell.component.scss +34 -27
  65. package/src/lib/components/page-header/rt-page-header-mobile.scss +142 -134
  66. package/src/lib/components/page-header/rt-page-header-submenu.scss +130 -123
  67. package/src/lib/components/page-header/rt-page-header.component.scss +221 -210
  68. package/src/lib/components/pagination/rt-pagination.component.scss +88 -81
  69. package/src/lib/components/photo-viewer/rt-photo-viewer.component.scss +109 -105
  70. package/src/lib/components/rich-editor/CONTEXT.md +1 -1
  71. package/src/lib/components/rich-editor/rt-rich-editor.component.scss +63 -59
  72. package/src/lib/components/section-nav/rt-section-nav.component.scss +53 -47
  73. package/src/lib/components/select/rt-select.component.scss +146 -138
  74. package/src/lib/components/skeleton/rt-skeleton.component.scss +50 -41
  75. package/src/lib/components/skeleton-wrapper/rt-skeleton-wrapper.component.scss +8 -6
  76. package/src/lib/components/spinner/rt-spinner.component.scss +35 -32
  77. package/src/lib/components/split-button/rt-split-button.component.scss +74 -62
  78. package/src/lib/components/stat-tile/rt-stat-tile.component.scss +95 -91
  79. package/src/lib/components/stepper/rt-stepper.component.scss +107 -101
  80. package/src/lib/components/table/copy-cell/rt-copy-cell.component.scss +39 -30
  81. package/src/lib/components/table/rt-table.component.scss +260 -252
  82. package/src/lib/components/table/settings-aside/rt-table-settings-aside.component.scss +7 -5
  83. package/src/lib/components/table/settings-panel/rt-table-settings-panel.component.scss +71 -61
  84. package/src/lib/components/table/sort-header/rt-table-sort-header.component.scss +31 -29
  85. package/src/lib/components/tabs/rt-tabs.component.scss +184 -175
  86. package/src/lib/components/tag/rt-tag.component.scss +97 -92
  87. package/src/lib/components/textarea/rt-textarea.component.scss +62 -60
  88. package/src/lib/components/theme-toggle/rt-theme-toggle.component.scss +7 -5
  89. package/src/lib/components/thread-list/rt-thread-list.component.scss +221 -212
  90. package/src/lib/components/timeline/rt-timeline.component.scss +82 -76
  91. package/src/lib/components/toast/rt-toast.component.scss +169 -160
  92. package/src/lib/components/toast/rt-toaster.component.scss +37 -35
  93. package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +129 -122
  94. package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +97 -91
  95. package/src/lib/components/toolbar/rt-toolbar.component.scss +63 -54
  96. package/src/lib/components/tooltip/rt-tooltip.component.scss +24 -15
  97. package/src/lib/components/welcome-dialog/rt-welcome-dialog.component.scss +46 -44
  98. package/src/lib/components/workspace/rt-workspace.component.scss +139 -131
  99. package/src/lib/components/workspace-details/rt-workspace-details.component.scss +105 -101
  100. package/src/styles/_index.scss +11 -0
  101. package/src/styles/_layers.scss +22 -0
  102. package/src/styles/_login.scss +87 -85
  103. package/src/styles/_mixins.scss +1 -1
  104. package/src/styles/_primitives.scss +138 -66
  105. package/src/styles/_scrollbar.scss +21 -19
  106. package/src/styles/_semantic.scss +155 -62
  107. package/src/styles/_theme-dark-rules.scss +23 -0
  108. package/src/styles/_theme-dark.scss +61 -42
  109. package/styles/tokens.css +754 -418
  110. package/types/rt-tools-ui-kit-v2.d.ts +292 -103
  111. package/rt-tools-ui-kit-v2-0.5.0.tgz +0 -0
@@ -11,13 +11,13 @@
11
11
  Свои входы поверх общих из [`RtFormControlBase`](../form-control/CONTEXT.md)
12
12
  (`size`, `disabled`, `controlId`, `ariaLabel`, `clearable`, `bordered`):
13
13
 
14
- | вход | тип | умолчание |
15
- | ------------------------ | ------------------------------------------- | --------- |
16
- | `type` | `'text' \| 'password' \| 'email' \| 'time'` | `'text'` |
17
- | `placeholder` | `string` | `''` |
18
- | `iconLeft` / `iconRight` | `IRtIcon.Name \| null` | `null` |
19
- | `passwordToggle` | `boolean` | `false` |
20
- | `autocomplete` | `string \| null` | `null` |
14
+ | вход | тип | умолчание |
15
+ | ------------------------ | ---------------------------------------------------- | --------- |
16
+ | `type` | `'text' \| 'password' \| 'email' \| 'time' \| 'url'` | `'text'` |
17
+ | `placeholder` | `string` | `''` |
18
+ | `iconLeft` / `iconRight` | `IRtIcon.Name \| null` | `null` |
19
+ | `passwordToggle` | `boolean` | `false` |
20
+ | `autocomplete` | `string \| null` | `null` |
21
21
 
22
22
  Значение — `string`.
23
23
 
@@ -32,6 +32,8 @@
32
32
 
33
33
  ## Как этим пользоваться
34
34
 
35
+ - `type="url"` объявляет браузеру род значения, а не требование к нему: на телефоне он даёт
36
+ клавиатуру для адреса и разбор вставленного, а проверка введённого остаётся за приложением.
35
37
  - `type="time"` заведён намеренно: браузер сам отдаёт `HH:MM` и раскладку под локаль, а разбор
36
38
  строки руками означал бы своё поле ввода времени рядом с китом.
37
39
  - Клик по рамке (падинги принадлежат host-у, а не `<input>`) переводит фокус в поле — кроме
@@ -1,120 +1,124 @@
1
- .rt-input {
2
- position: relative;
3
- display: inline-flex;
4
- width: 100%;
5
- min-height: var(--rt-input-height);
6
- box-sizing: border-box;
7
- align-items: center;
8
- padding: var(--rt-input-padding-y) var(--rt-input-padding-x);
9
- border: var(--rt-input-border-width) solid var(--rt-input-color-border);
10
- border-radius: var(--rt-input-radius);
11
- background-color: var(--rt-input-color-bg);
12
- color: var(--rt-input-color-text);
13
- cursor: text;
14
- font-size: var(--rt-input-font-size);
15
- gap: var(--rt-space-sm);
16
- line-height: var(--rt-input-line-height);
17
- transition: var(--rt-input-transition);
18
-
19
- &:focus-within {
20
- border-color: var(--rt-input-color-border-focus);
21
- box-shadow: var(--rt-input-focus-shadow);
22
- outline: 2px solid transparent;
23
- outline-offset: var(--rt-input-focus-outline-offset);
24
- }
25
-
26
- /* bordered=false: снимаем только resting-рамку; invalid/focus/readonly идут
27
- ниже по source-order и перекрывают её своей рамкой. */
28
- &--borderless {
29
- border-color: transparent;
30
- }
1
+ @layer rt-kit.components {
2
+ .rt-input {
3
+ --rt-input-toggle-radius: var(--rt-radius-sm);
31
4
 
32
- &--invalid {
33
- border-color: var(--rt-input-color-border-error);
5
+ position: relative;
6
+ display: inline-flex;
7
+ width: 100%;
8
+ min-height: var(--rt-input-height);
9
+ box-sizing: border-box;
10
+ align-items: center;
11
+ padding: var(--rt-input-padding-y) var(--rt-input-padding-x);
12
+ border: var(--rt-input-border-width) solid var(--rt-input-color-border);
13
+ border-radius: var(--rt-input-radius);
14
+ background-color: var(--rt-input-color-bg);
15
+ color: var(--rt-input-color-text);
16
+ cursor: text;
17
+ font-size: var(--rt-input-font-size);
18
+ gap: var(--rt-space-sm);
19
+ line-height: var(--rt-input-line-height);
20
+ transition: var(--rt-input-transition);
34
21
 
35
22
  &:focus-within {
36
- box-shadow: var(--rt-input-focus-shadow-error);
23
+ border-color: var(--rt-input-color-border-focus);
24
+ box-shadow: var(--rt-input-focus-shadow);
25
+ outline: 2px solid transparent;
26
+ outline-offset: var(--rt-input-focus-outline-offset);
37
27
  }
38
- }
39
28
 
40
- &--disabled {
41
- cursor: not-allowed;
42
- opacity: var(--rt-input-disabled-opacity);
43
- }
29
+ /* bordered=false: снимаем только resting-рамку; invalid/focus/readonly идут
30
+ ниже по source-order и перекрывают её своей рамкой. */
31
+ &--borderless {
32
+ border-color: transparent;
33
+ }
44
34
 
45
- &--size--sm {
46
- min-height: var(--rt-input-height-sm);
47
- }
35
+ &--invalid {
36
+ border-color: var(--rt-input-color-border-error);
48
37
 
49
- &--size--lg {
50
- min-height: var(--rt-input-height-lg);
51
- }
38
+ &:focus-within {
39
+ box-shadow: var(--rt-input-focus-shadow-error);
40
+ }
41
+ }
52
42
 
53
- /* Read-only: контрол превращается в плоский текст — снимаем рамку/фон/паддинги,
54
- чтобы значение читалось как обычный текст под label'ом rt-field. */
55
- &--readonly {
56
- padding-right: 0;
57
- padding-left: 0;
58
- border-color: transparent;
59
- background-color: transparent;
60
- cursor: default;
61
- }
43
+ &--disabled {
44
+ cursor: not-allowed;
45
+ opacity: var(--rt-input-disabled-opacity);
46
+ }
62
47
 
63
- &__readonly {
64
- color: var(--rt-field-value-color);
65
- font-size: var(--rt-field-value-font-size);
48
+ &--size--sm {
49
+ min-height: var(--rt-input-height-sm);
50
+ }
66
51
 
67
- &--empty {
68
- color: var(--rt-field-value-empty-color);
52
+ &--size--lg {
53
+ min-height: var(--rt-input-height-lg);
69
54
  }
70
- }
71
55
 
72
- &__field {
73
- min-width: 0;
74
- flex: 1 1 auto;
75
- padding: 0;
76
- border: none;
77
- background: transparent;
78
- color: inherit;
79
- font: inherit;
80
- outline: none;
81
-
82
- &::placeholder {
83
- color: var(--rt-input-color-text-placeholder);
84
- opacity: 1;
56
+ /* Read-only: контрол превращается в плоский текст — снимаем рамку/фон/паддинги,
57
+ чтобы значение читалось как обычный текст под label'ом rt-field. */
58
+ &--readonly {
59
+ padding-right: 0;
60
+ padding-left: 0;
61
+ border-color: transparent;
62
+ background-color: transparent;
63
+ cursor: default;
85
64
  }
86
65
 
87
- &:disabled {
88
- cursor: not-allowed;
66
+ &__readonly {
67
+ color: var(--rt-field-value-color);
68
+ font-size: var(--rt-field-value-font-size);
69
+
70
+ &--empty {
71
+ color: var(--rt-field-value-empty-color);
72
+ }
89
73
  }
90
- }
91
74
 
92
- &__icon-left,
93
- &__icon-right,
94
- &__clear {
95
- flex-shrink: 0;
96
- }
75
+ &__field {
76
+ min-width: 0;
77
+ flex: 1 1 auto;
78
+ padding: 0;
79
+ border: none;
80
+ background: transparent;
81
+ color: inherit;
82
+ font: inherit;
83
+ outline: none;
84
+
85
+ &::placeholder {
86
+ color: var(--rt-input-color-text-placeholder);
87
+ opacity: 1;
88
+ }
89
+
90
+ &:disabled {
91
+ cursor: not-allowed;
92
+ }
93
+ }
97
94
 
98
- &__toggle {
99
- display: inline-flex;
100
- flex-shrink: 0;
101
- align-items: center;
102
- justify-content: center;
103
- padding: var(--rt-space-1);
104
- border: none;
105
- border-radius: var(--rt-radius-sm);
106
- margin: 0;
107
- background: transparent;
108
- color: inherit;
109
- cursor: pointer;
110
-
111
- &:hover {
112
- background-color: var(--rt-input-color-bg-hover);
95
+ &__icon-left,
96
+ &__icon-right,
97
+ &__clear {
98
+ flex-shrink: 0;
113
99
  }
114
100
 
115
- &:focus-visible {
116
- outline: var(--rt-input-border-width) solid var(--rt-input-color-border-focus);
117
- outline-offset: var(--rt-input-focus-outline-offset);
101
+ &__toggle {
102
+ display: inline-flex;
103
+ flex-shrink: 0;
104
+ align-items: center;
105
+ justify-content: center;
106
+ padding: var(--rt-space-1);
107
+ border: none;
108
+ border-radius: var(--rt-input-toggle-radius);
109
+ margin: 0;
110
+ background: transparent;
111
+ color: inherit;
112
+ cursor: pointer;
113
+
114
+ &:hover {
115
+ background-color: var(--rt-input-color-bg-hover);
116
+ }
117
+
118
+ &:focus-visible {
119
+ outline: var(--rt-input-border-width) solid var(--rt-input-color-border-focus);
120
+ outline-offset: var(--rt-input-focus-outline-offset);
121
+ }
118
122
  }
119
123
  }
120
124
  }
@@ -1,102 +1,104 @@
1
- .rt-input-number {
2
- position: relative;
3
- display: inline-flex;
4
- width: 100%;
5
- min-height: var(--rt-input-height);
6
- box-sizing: border-box;
7
- align-items: center;
8
- padding: var(--rt-input-padding-y) var(--rt-input-padding-x);
9
- border: var(--rt-input-border-width) solid var(--rt-input-color-border);
10
- border-radius: var(--rt-input-radius);
11
- background-color: var(--rt-input-color-bg);
12
- color: var(--rt-input-color-text);
13
- cursor: text;
14
- font-size: var(--rt-input-font-size);
15
- gap: var(--rt-space-sm);
16
- line-height: var(--rt-input-line-height);
17
- transition: var(--rt-input-transition);
1
+ @layer rt-kit.components {
2
+ .rt-input-number {
3
+ position: relative;
4
+ display: inline-flex;
5
+ width: 100%;
6
+ min-height: var(--rt-input-height);
7
+ box-sizing: border-box;
8
+ align-items: center;
9
+ padding: var(--rt-input-padding-y) var(--rt-input-padding-x);
10
+ border: var(--rt-input-border-width) solid var(--rt-input-color-border);
11
+ border-radius: var(--rt-input-radius);
12
+ background-color: var(--rt-input-color-bg);
13
+ color: var(--rt-input-color-text);
14
+ cursor: text;
15
+ font-size: var(--rt-input-font-size);
16
+ gap: var(--rt-space-sm);
17
+ line-height: var(--rt-input-line-height);
18
+ transition: var(--rt-input-transition);
18
19
 
19
- &:focus-within {
20
- border-color: var(--rt-input-color-border-focus);
21
- box-shadow: var(--rt-input-focus-shadow);
22
- outline: 2px solid transparent;
23
- outline-offset: var(--rt-input-focus-outline-offset);
24
- }
20
+ &:focus-within {
21
+ border-color: var(--rt-input-color-border-focus);
22
+ box-shadow: var(--rt-input-focus-shadow);
23
+ outline: 2px solid transparent;
24
+ outline-offset: var(--rt-input-focus-outline-offset);
25
+ }
25
26
 
26
- /* bordered=false: снимаем только resting-рамку; invalid/focus/readonly идут
27
- ниже по source-order и перекрывают её своей рамкой. */
28
- &--borderless {
29
- border-color: transparent;
30
- }
27
+ /* bordered=false: снимаем только resting-рамку; invalid/focus/readonly идут
28
+ ниже по source-order и перекрывают её своей рамкой. */
29
+ &--borderless {
30
+ border-color: transparent;
31
+ }
31
32
 
32
- &--invalid {
33
- border-color: var(--rt-input-color-border-error);
33
+ &--invalid {
34
+ border-color: var(--rt-input-color-border-error);
34
35
 
35
- &:focus-within {
36
- box-shadow: var(--rt-input-focus-shadow-error);
36
+ &:focus-within {
37
+ box-shadow: var(--rt-input-focus-shadow-error);
38
+ }
37
39
  }
38
- }
39
40
 
40
- &--disabled {
41
- cursor: not-allowed;
42
- opacity: var(--rt-input-disabled-opacity);
43
- }
41
+ &--disabled {
42
+ cursor: not-allowed;
43
+ opacity: var(--rt-input-disabled-opacity);
44
+ }
44
45
 
45
- &--size--sm {
46
- min-height: var(--rt-input-height-sm);
47
- }
46
+ &--size--sm {
47
+ min-height: var(--rt-input-height-sm);
48
+ }
48
49
 
49
- &--size--lg {
50
- min-height: var(--rt-input-height-lg);
51
- }
50
+ &--size--lg {
51
+ min-height: var(--rt-input-height-lg);
52
+ }
52
53
 
53
- /* Read-only: плоский текст вместо input — снимаем рамку/фон/паддинги. */
54
- &--readonly {
55
- padding-right: 0;
56
- padding-left: 0;
57
- border-color: transparent;
58
- background-color: transparent;
59
- cursor: default;
60
- }
54
+ /* Read-only: плоский текст вместо input — снимаем рамку/фон/паддинги. */
55
+ &--readonly {
56
+ padding-right: 0;
57
+ padding-left: 0;
58
+ border-color: transparent;
59
+ background-color: transparent;
60
+ cursor: default;
61
+ }
61
62
 
62
- &__readonly {
63
- color: var(--rt-field-value-color);
64
- font-size: var(--rt-field-value-font-size);
63
+ &__readonly {
64
+ color: var(--rt-field-value-color);
65
+ font-size: var(--rt-field-value-font-size);
65
66
 
66
- &--empty {
67
- color: var(--rt-field-value-empty-color);
67
+ &--empty {
68
+ color: var(--rt-field-value-empty-color);
69
+ }
68
70
  }
69
- }
70
71
 
71
- &__field {
72
- min-width: 0;
73
- flex: 1 1 auto;
74
- padding: 0;
75
- border: none;
76
- background: transparent;
77
- color: inherit;
78
- font: inherit;
79
- outline: none;
72
+ &__field {
73
+ min-width: 0;
74
+ flex: 1 1 auto;
75
+ padding: 0;
76
+ border: none;
77
+ background: transparent;
78
+ color: inherit;
79
+ font: inherit;
80
+ outline: none;
80
81
 
81
- &::placeholder {
82
- color: var(--rt-input-color-text-placeholder);
83
- opacity: 1;
84
- }
82
+ &::placeholder {
83
+ color: var(--rt-input-color-text-placeholder);
84
+ opacity: 1;
85
+ }
85
86
 
86
- &:disabled {
87
- cursor: not-allowed;
87
+ &:disabled {
88
+ cursor: not-allowed;
89
+ }
88
90
  }
89
- }
90
91
 
91
- &__icon-left,
92
- &__prefix,
93
- &__clear {
94
- flex-shrink: 0;
95
- }
92
+ &__icon-left,
93
+ &__prefix,
94
+ &__clear {
95
+ flex-shrink: 0;
96
+ }
96
97
 
97
- /* Текстовый префикс (напр. «₽»): приглушён, неинтерактивен. */
98
- &__prefix {
99
- color: var(--rt-color-text-muted);
100
- user-select: none;
98
+ /* Текстовый префикс (напр. «₽»): приглушён, неинтерактивен. */
99
+ &__prefix {
100
+ color: var(--rt-color-text-muted);
101
+ user-select: none;
102
+ }
101
103
  }
102
104
  }
@@ -1,31 +1,35 @@
1
- /* rt-live-badge — пилюля живого счётчика в common/ui. ViewEncapsulation.None.
2
- Хост адресуется по имени элемента, а не по классу блока: класс `.rt-live-badge` висит
3
- и на `<rt-live-badge>`, и на корне шаблона, поэтому правила блока вложены в хост —
4
- так они достаются только корню шаблона. */
1
+ @layer rt-kit.components {
2
+ /* rt-live-badge — пилюля живого счётчика в common/ui. ViewEncapsulation.None.
3
+ Хост адресуется по имени элемента, а не по классу блока: класс `.rt-live-badge` висит
4
+ и на `<rt-live-badge>`, и на корне шаблона, поэтому правила блока вложены в хост —
5
+ так они достаются только корню шаблона. */
5
6
 
6
- rt-live-badge {
7
- display: inline-flex;
8
-
9
- .rt-live-badge {
7
+ rt-live-badge {
10
8
  display: inline-flex;
11
- align-items: center;
12
- color: var(--rt-color-text-muted);
13
- font-size: var(--rt-text-sm);
14
- gap: var(--rt-space-1);
15
9
 
16
- &--active .rt-live-badge__dot {
17
- background: var(--rt-color-state-success);
18
- }
10
+ .rt-live-badge {
11
+ --rt-live-badge-dot-radius: var(--rt-radius-full);
19
12
 
20
- &__dot {
21
- width: 8px;
22
- height: 8px;
23
- border-radius: var(--rt-radius-full);
24
- background: var(--rt-color-border-subtle);
25
- }
13
+ display: inline-flex;
14
+ align-items: center;
15
+ color: var(--rt-color-text-muted);
16
+ font-size: var(--rt-text-sm);
17
+ gap: var(--rt-space-1);
18
+
19
+ &--active .rt-live-badge__dot {
20
+ background: var(--rt-color-state-success);
21
+ }
22
+
23
+ &__dot {
24
+ width: 8px;
25
+ height: 8px;
26
+ border-radius: var(--rt-live-badge-dot-radius);
27
+ background: var(--rt-color-border-subtle);
28
+ }
26
29
 
27
- &__count {
28
- color: var(--rt-color-text-primary);
30
+ &__count {
31
+ color: var(--rt-color-text-primary);
32
+ }
29
33
  }
30
34
  }
31
35
  }
@@ -1,62 +1,64 @@
1
- /* rt-logo — логотип приложения.
2
- *
3
- * Размеры host'а задаются inline через style.height/width (см. rt-logo.component.ts),
4
- * а сами начертания приходят свойствами оформления от приложения: кит своего
5
- * логотипа не имеет и умолчаний тут не ставит.
6
- *
7
- * Внутри host'а начертание сверху, слоган под ним ужат по ширине. Начертания
8
- * лежат фоном, а не в <img>: у тёмной темы своя пара файлов, и подмена
9
- * background-image — единственный способ переключить их одним правилом.
10
- */
11
- .rt-logo {
12
- display: inline-block;
13
- line-height: 0;
14
-
15
- &__wordmark,
16
- &__tagline {
17
- display: block;
18
- width: 100%;
19
- background-position: left center;
20
- background-repeat: no-repeat;
21
- background-size: contain;
22
- }
1
+ @layer rt-kit.components {
2
+ /* rt-logo — логотип приложения.
3
+ *
4
+ * Размеры host'а задаются inline через style.height/width (см. rt-logo.component.ts),
5
+ * а сами начертания приходят свойствами оформления от приложения: кит своего
6
+ * логотипа не имеет и умолчаний тут не ставит.
7
+ *
8
+ * Внутри host'а начертание сверху, слоган под ним ужат по ширине. Начертания
9
+ * лежат фоном, а не в <img>: у тёмной темы своя пара файлов, и подмена
10
+ * background-image — единственный способ переключить их одним правилом.
11
+ */
12
+ .rt-logo {
13
+ display: inline-block;
14
+ line-height: 0;
23
15
 
24
- &__wordmark {
25
- height: 100%;
26
- background-image: var(--rt-logo-wordmark, none);
27
- }
16
+ &__wordmark,
17
+ &__tagline {
18
+ display: block;
19
+ width: 100%;
20
+ background-position: left center;
21
+ background-repeat: no-repeat;
22
+ background-size: contain;
23
+ }
28
24
 
29
- &__tagline {
30
- background-image: var(--rt-logo-tagline, none);
31
- }
32
- }
25
+ &__wordmark {
26
+ height: 100%;
27
+ background-image: var(--rt-logo-wordmark, none);
28
+ }
33
29
 
34
- /* Тёмная тема: тёмная надпись на тёмной поверхности не читается, поэтому берётся
35
- вариант со светлым ink. Не задали пару — остаётся то же начертание. */
36
- [data-theme='dark'] .rt-logo {
37
- &__wordmark {
38
- background-image: var(--rt-logo-wordmark-dark, var(--rt-logo-wordmark, none));
30
+ &__tagline {
31
+ background-image: var(--rt-logo-tagline, none);
32
+ }
39
33
  }
40
34
 
41
- &__tagline {
42
- background-image: var(--rt-logo-tagline-dark, var(--rt-logo-tagline, none));
35
+ /* Тёмная тема: тёмная надпись на тёмной поверхности не читается, поэтому берётся
36
+ вариант со светлым ink. Не задали пару — остаётся то же начертание. */
37
+ [data-theme='dark'] .rt-logo {
38
+ &__wordmark {
39
+ background-image: var(--rt-logo-wordmark-dark, var(--rt-logo-wordmark, none));
40
+ }
41
+
42
+ &__tagline {
43
+ background-image: var(--rt-logo-tagline-dark, var(--rt-logo-tagline, none));
44
+ }
43
45
  }
44
- }
45
46
 
46
- /* Композиция lockup: начертание и слоган стоят колонкой и делят высоту host'а.
47
- Пропорция та же, что у пары в макете: ~66.7% начертанию, ~22.1% слогану,
48
- остальное — зазор между ними. */
49
- .rt-logo:has(.rt-logo__tagline) {
50
- display: flex;
51
- flex-direction: column;
52
- align-items: stretch;
53
- justify-content: space-between;
54
- }
47
+ /* Композиция lockup: начертание и слоган стоят колонкой и делят высоту host'а.
48
+ Пропорция та же, что у пары в макете: ~66.7% начертанию, ~22.1% слогану,
49
+ остальное — зазор между ними. */
50
+ .rt-logo:has(.rt-logo__tagline) {
51
+ display: flex;
52
+ flex-direction: column;
53
+ align-items: stretch;
54
+ justify-content: space-between;
55
+ }
55
56
 
56
- .rt-logo:has(.rt-logo__tagline) .rt-logo__wordmark {
57
- height: 66.7%;
58
- }
57
+ .rt-logo:has(.rt-logo__tagline) .rt-logo__wordmark {
58
+ height: 66.7%;
59
+ }
59
60
 
60
- .rt-logo:has(.rt-logo__tagline) .rt-logo__tagline {
61
- height: 22.1%;
61
+ .rt-logo:has(.rt-logo__tagline) .rt-logo__tagline {
62
+ height: 22.1%;
63
+ }
62
64
  }