@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
@@ -1,66 +1,73 @@
1
- /* rt-checkbox — чекбокс в common/ui. ViewEncapsulation.None.
2
- Хост адресуется по имени элемента, а не по классу блока: класс `.rt-checkbox` висит
3
- и на `<rt-checkbox>`, и на корне шаблона, поэтому правила блока вложены в хост —
4
- так они достаются только корню шаблона. */
1
+ @layer rt-kit.components {
2
+ /* rt-checkbox — чекбокс в common/ui. ViewEncapsulation.None.
3
+ Хост адресуется по имени элемента, а не по классу блока: класс `.rt-checkbox` висит
4
+ и на `<rt-checkbox>`, и на корне шаблона, поэтому правила блока вложены в хост —
5
+ так они достаются только корню шаблона. */
5
6
 
6
- rt-checkbox {
7
- display: inline-block;
8
- }
9
-
10
- rt-checkbox .rt-checkbox {
11
- display: inline-flex;
12
- align-items: center;
13
- padding: 0;
14
- border: none;
15
- background: none;
16
- cursor: pointer;
17
- gap: var(--rt-space-sm);
18
- text-align: start;
19
-
20
- &:focus-visible {
21
- border-radius: var(--rt-radius-sm);
22
- box-shadow: var(--rt-shadow-focus-ring);
23
- outline: 2px solid transparent;
24
- outline-offset: 2px;
7
+ rt-checkbox {
8
+ display: inline-block;
25
9
  }
26
10
 
27
- &--disabled {
28
- cursor: not-allowed;
29
- opacity: 0.5;
30
- }
11
+ rt-checkbox .rt-checkbox {
12
+ --rt-checkbox-focus-radius: var(--rt-radius-sm);
13
+ --rt-checkbox-focus-shadow: var(--rt-shadow-focus-ring);
14
+ --rt-checkbox-box-radius: var(--rt-radius-sm);
15
+ --rt-checkbox-transition-duration: var(--rt-duration-fast);
31
16
 
32
- &__box {
33
17
  display: inline-flex;
34
- width: 18px;
35
- height: 18px;
36
- flex-shrink: 0;
37
18
  align-items: center;
38
- justify-content: center;
39
- border: var(--rt-input-border-width) solid var(--rt-color-border-strong);
40
- border-radius: var(--rt-radius-sm);
41
- background: var(--rt-color-bg-surface);
42
- transition:
43
- background var(--rt-duration-fast) ease,
44
- border-color var(--rt-duration-fast) ease;
45
- }
19
+ padding: 0;
20
+ border: none;
21
+ background: none;
22
+ cursor: pointer;
23
+ gap: var(--rt-space-sm);
24
+ text-align: start;
46
25
 
47
- /* Элемент адресуется классом, а не вторым `&`: родитель здесь составной
48
- (`rt-checkbox .rt-checkbox`), и второй `&` развернулся бы в него целиком —
49
- `… .rt-checkbox--checked rt-checkbox .rt-checkbox__box`, то есть в селектор,
50
- требующий вложенного чекбокса. Заливка отмеченного из-за этого не применялась. */
51
- &--checked .rt-checkbox__box,
52
- &--indeterminate .rt-checkbox__box {
53
- border-color: var(--rt-color-action-primary);
54
- background: var(--rt-color-action-primary);
55
- }
26
+ &:focus-visible {
27
+ border-radius: var(--rt-checkbox-focus-radius);
28
+ box-shadow: var(--rt-checkbox-focus-shadow);
29
+ outline: 2px solid transparent;
30
+ outline-offset: 2px;
31
+ }
32
+
33
+ &--disabled {
34
+ cursor: not-allowed;
35
+ opacity: 0.5;
36
+ }
37
+
38
+ &__box {
39
+ display: inline-flex;
40
+ width: 18px;
41
+ height: 18px;
42
+ flex-shrink: 0;
43
+ align-items: center;
44
+ justify-content: center;
45
+ border: var(--rt-input-border-width) solid var(--rt-color-border-strong);
46
+ border-radius: var(--rt-checkbox-box-radius);
47
+ background: var(--rt-color-bg-surface);
48
+ transition:
49
+ background var(--rt-checkbox-transition-duration) ease,
50
+ border-color var(--rt-checkbox-transition-duration) ease;
51
+ }
52
+
53
+ /* Элемент адресуется классом, а не вторым `&`: родитель здесь составной
54
+ (`rt-checkbox .rt-checkbox`), и второй `&` развернулся бы в него целиком —
55
+ `… .rt-checkbox--checked rt-checkbox .rt-checkbox__box`, то есть в селектор,
56
+ требующий вложенного чекбокса. Заливка отмеченного из-за этого не применялась. */
57
+ &--checked .rt-checkbox__box,
58
+ &--indeterminate .rt-checkbox__box {
59
+ border-color: var(--rt-color-action-primary);
60
+ background: var(--rt-color-action-primary);
61
+ }
56
62
 
57
- &__label {
58
- color: var(--rt-color-text-primary);
59
- font-size: var(--rt-text-sm);
60
- user-select: none;
63
+ &__label {
64
+ color: var(--rt-color-text-primary);
65
+ font-size: var(--rt-text-sm);
66
+ user-select: none;
61
67
 
62
- &:empty {
63
- display: none;
68
+ &:empty {
69
+ display: none;
70
+ }
64
71
  }
65
72
  }
66
73
  }
@@ -1,43 +1,45 @@
1
- .rt-collapsible-text {
2
- display: flex;
3
- flex-direction: column;
4
- gap: var(--rt-space-sm);
1
+ @layer rt-kit.components {
2
+ .rt-collapsible-text {
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: var(--rt-space-sm);
5
6
 
6
- &__text {
7
- display: block;
7
+ &__text {
8
+ display: block;
8
9
 
9
- &--clamped {
10
- display: -webkit-box;
11
- overflow: hidden;
12
- -webkit-box-orient: vertical;
10
+ &--clamped {
11
+ display: -webkit-box;
12
+ overflow: hidden;
13
+ -webkit-box-orient: vertical;
14
+ }
13
15
  }
14
- }
15
16
 
16
- &__paragraph {
17
- margin: 0;
18
- color: var(--rt-color-text-primary);
19
- font-family: var(--rt-font-family-sans);
20
- font-size: var(--rt-text-xs);
21
- font-weight: var(--rt-font-weight-regular);
22
- letter-spacing: var(--rt-letter-spacing-wide);
23
- line-height: var(--rt-leading-snug);
17
+ &__paragraph {
18
+ margin: 0;
19
+ color: var(--rt-color-text-primary);
20
+ font-family: var(--rt-font-family-sans);
21
+ font-size: var(--rt-text-xs);
22
+ font-weight: var(--rt-font-weight-regular);
23
+ letter-spacing: var(--rt-letter-spacing-wide);
24
+ line-height: var(--rt-leading-snug);
24
25
 
25
- & + & {
26
- margin-top: var(--rt-space-sm);
26
+ & + & {
27
+ margin-top: var(--rt-space-sm);
28
+ }
27
29
  }
28
- }
29
30
 
30
- &__toggle {
31
- align-self: flex-start;
32
- padding: 0;
33
- border: 0;
34
- background: transparent;
35
- color: var(--rt-color-text-link);
36
- cursor: pointer;
37
- font-family: var(--rt-font-family-sans);
38
- font-size: var(--rt-text-xs);
39
- font-weight: var(--rt-font-weight-medium);
40
- letter-spacing: var(--rt-letter-spacing-wide);
41
- line-height: var(--rt-leading-snug);
31
+ &__toggle {
32
+ align-self: flex-start;
33
+ padding: 0;
34
+ border: 0;
35
+ background: transparent;
36
+ color: var(--rt-color-text-link);
37
+ cursor: pointer;
38
+ font-family: var(--rt-font-family-sans);
39
+ font-size: var(--rt-text-xs);
40
+ font-weight: var(--rt-font-weight-medium);
41
+ letter-spacing: var(--rt-letter-spacing-wide);
42
+ line-height: var(--rt-leading-snug);
43
+ }
42
44
  }
43
45
  }
@@ -1,36 +1,42 @@
1
- /* rt-confirm-popover — панель подтверждения в CDK Overlay. ViewEncapsulation.None.
2
- Селекторы префиксованы `.rt-confirm-popover`. */
1
+ @layer rt-kit.components {
2
+ /* rt-confirm-popover — панель подтверждения в CDK Overlay. ViewEncapsulation.None.
3
+ Селекторы префиксованы `.rt-confirm-popover`. */
3
4
 
4
- .rt-confirm-popover {
5
- display: flex;
6
- width: 280px;
7
- max-width: 280px;
8
- flex-direction: column;
9
- padding: var(--rt-space-md);
10
- border: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);
11
- border-radius: var(--rt-radius-md);
12
- background: var(--rt-color-bg-surface);
13
- box-shadow: var(--rt-shadow-lg);
14
- gap: var(--rt-space-sm);
5
+ .rt-confirm-popover {
6
+ --rt-confirm-popover-radius: var(--rt-radius-md);
7
+ --rt-confirm-popover-border-width: var(--rt-border-width-thin);
8
+ --rt-confirm-popover-shadow: var(--rt-shadow-lg);
15
9
 
16
- &__title {
17
- margin: 0;
18
- color: var(--rt-color-text-primary);
19
- font-size: var(--rt-text-sm);
20
- font-weight: var(--rt-font-weight-semibold);
21
- }
22
-
23
- &__message {
24
- margin: 0;
25
- color: var(--rt-color-text-primary);
26
- font-size: var(--rt-text-sm);
27
- line-height: var(--rt-leading-normal);
28
- }
29
-
30
- &__actions {
31
10
  display: flex;
32
- justify-content: space-between;
11
+ width: 280px;
12
+ max-width: 280px;
13
+ flex-direction: column;
14
+ padding: var(--rt-space-md);
15
+ border: var(--rt-confirm-popover-border-width) solid var(--rt-color-border-subtle);
16
+ border-radius: var(--rt-confirm-popover-radius);
17
+ background: var(--rt-color-bg-surface);
18
+ box-shadow: var(--rt-confirm-popover-shadow);
33
19
  gap: var(--rt-space-sm);
34
- margin-block-start: var(--rt-space-xs);
20
+
21
+ &__title {
22
+ margin: 0;
23
+ color: var(--rt-color-text-primary);
24
+ font-size: var(--rt-text-sm);
25
+ font-weight: var(--rt-font-weight-semibold);
26
+ }
27
+
28
+ &__message {
29
+ margin: 0;
30
+ color: var(--rt-color-text-primary);
31
+ font-size: var(--rt-text-sm);
32
+ line-height: var(--rt-leading-normal);
33
+ }
34
+
35
+ &__actions {
36
+ display: flex;
37
+ justify-content: space-between;
38
+ gap: var(--rt-space-sm);
39
+ margin-block-start: var(--rt-space-xs);
40
+ }
35
41
  }
36
42
  }
@@ -3,109 +3,113 @@
3
3
  взял ни один маршрут, а панель контейнер держит в persistent-режиме. */
4
4
  @use '../aside/rt-aside-overlay';
5
5
 
6
- .rt-container {
7
- display: grid;
8
- min-height: 100%;
9
- flex: 1 1 auto;
10
- background-color: var(--rt-color-bg-page, #f5f5f5);
11
- color: var(--rt-color-text-primary, #222);
12
- grid-template: 'header header' auto 'left-sidenav toolbar' auto 'left-sidenav content' 1fr / auto 1fr;
6
+ @layer rt-kit.components {
7
+ .rt-container {
8
+ --rt-container-border-width: var(--rt-border-width-thin);
13
9
 
14
- &__header {
15
- // Хедер закреплён вверху: при скролле документа (высота контейнера не
16
- // ограничена вьюпортом) grid-строка header уезжала бы вверх. sticky top:0
17
- // держит её на месте. z-index:1 — выше later-DOM контента, но ниже CDK
18
- // overlay асайдов (1000). Работает благодаря `html { overflow-x: clip }`
19
- // (clip, в отличие от hidden, не создаёт scroll-контейнер и не ломает sticky).
20
- position: sticky;
21
- z-index: 1;
22
- top: 0;
23
- display: block;
24
- grid-area: header;
10
+ display: grid;
11
+ min-height: 100%;
12
+ flex: 1 1 auto;
13
+ background-color: var(--rt-color-bg-page);
14
+ color: var(--rt-color-text-primary);
15
+ grid-template: 'header header' auto 'left-sidenav toolbar' auto 'left-sidenav content' 1fr / auto 1fr;
25
16
 
26
- // Обёртка прозрачна: спроецированный хедер даёт собственный фон. Свой
27
- // bg-surface здесь протекал бы за скруглёнными нижними углами хедера —
28
- // в тёмной теме это давало серые «уголки» (surface ≠ фон хедера).
29
- }
30
-
31
- &__left-sidenav {
32
- display: block;
33
- padding: var(--rt-space-md);
34
- border-right: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);
35
- background-color: var(--rt-color-bg-surface, #fff);
36
- grid-area: left-sidenav;
37
- }
38
-
39
- &__toolbar {
40
- display: flex;
41
- align-items: center;
42
- padding: var(--rt-space-sm) var(--rt-space-md);
43
- border-bottom: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);
44
- background-color: var(--rt-color-bg-surface, #fff);
45
- grid-area: toolbar;
17
+ &__header {
18
+ // Хедер закреплён вверху: при скролле документа (высота контейнера не
19
+ // ограничена вьюпортом) grid-строка header уезжала бы вверх. sticky top:0
20
+ // держит её на месте. z-index:1 — выше later-DOM контента, но ниже CDK
21
+ // overlay асайдов (1000). Работает благодаря `html { overflow-x: clip }`
22
+ // (clip, в отличие от hidden, не создаёт scroll-контейнер и не ломает sticky).
23
+ position: sticky;
24
+ z-index: 1;
25
+ top: 0;
26
+ display: block;
27
+ grid-area: header;
46
28
 
47
- &--slot--left {
48
- justify-content: flex-start;
29
+ // Обёртка прозрачна: спроецированный хедер даёт собственный фон. Свой
30
+ // bg-surface здесь протекал бы за скруглёнными нижними углами хедера —
31
+ // в тёмной теме это давало серые «уголки» (surface ≠ фон хедера).
49
32
  }
50
33
 
51
- &--slot--center {
52
- justify-content: center;
34
+ &__left-sidenav {
35
+ display: block;
36
+ padding: var(--rt-space-md);
37
+ border-right: var(--rt-container-border-width) solid var(--rt-color-border-subtle);
38
+ background-color: var(--rt-color-bg-surface);
39
+ grid-area: left-sidenav;
53
40
  }
54
41
 
55
- &--slot--right {
56
- justify-content: flex-end;
42
+ &__toolbar {
43
+ display: flex;
44
+ align-items: center;
45
+ padding: var(--rt-space-sm) var(--rt-space-md);
46
+ border-bottom: var(--rt-container-border-width) solid var(--rt-color-border-subtle);
47
+ background-color: var(--rt-color-bg-surface);
48
+ grid-area: toolbar;
49
+
50
+ &--slot--left {
51
+ justify-content: flex-start;
52
+ }
53
+
54
+ &--slot--center {
55
+ justify-content: center;
56
+ }
57
+
58
+ &--slot--right {
59
+ justify-content: flex-end;
60
+ }
57
61
  }
58
- }
59
62
 
60
- &__content {
61
- display: flex;
62
- overflow: auto;
63
- min-height: 0;
64
- flex-direction: column;
65
- grid-area: content;
63
+ &__content {
64
+ display: flex;
65
+ overflow: auto;
66
+ min-height: 0;
67
+ flex-direction: column;
68
+ grid-area: content;
69
+ }
66
70
  }
67
- }
68
71
 
69
- /* App-shell раскладка (opt-in `height="viewport"`): контейнер жёстко равен
70
- вьюпорту, документ не скроллится вовсе — скроллятся зоны внутри, каждая сама.
71
- В дефолтном `auto` контейнер не ограничен вьюпортом (растёт под контент), из-за
72
- чего `&__content { overflow: auto }` никогда не переполняется: скролл забирает
73
- документ и утаскивает нав-рейл вместе со списком и лентой чата одним движением.
74
- `min-block-size` сбрасываем — иначе `min-height: 100%` спорит с фиксированной
75
- высотой, если родитель окажется выше вьюпорта. */
76
- .rt-container--viewport {
77
- block-size: 100dvh;
78
- min-block-size: 0;
72
+ /* App-shell раскладка (opt-in `height="viewport"`): контейнер жёстко равен
73
+ вьюпорту, документ не скроллится вовсе — скроллятся зоны внутри, каждая сама.
74
+ В дефолтном `auto` контейнер не ограничен вьюпортом (растёт под контент), из-за
75
+ чего `&__content { overflow: auto }` никогда не переполняется: скролл забирает
76
+ документ и утаскивает нав-рейл вместе со списком и лентой чата одним движением.
77
+ `min-block-size` сбрасываем — иначе `min-height: 100%` спорит с фиксированной
78
+ высотой, если родитель окажется выше вьюпорта. */
79
+ .rt-container--viewport {
80
+ block-size: 100dvh;
81
+ min-block-size: 0;
79
82
 
80
- /* Content перестаёт быть скролл-владельцем: он клипает, а скроллит то, что
81
- внутри (список диалогов, лента чата) — у каждой зоны свой overflow. */
82
- .rt-container__content {
83
- overflow: hidden;
84
- }
83
+ /* Content перестаёт быть скролл-владельцем: он клипает, а скроллит то, что
84
+ внутри (список диалогов, лента чата) — у каждой зоны свой overflow. */
85
+ .rt-container__content {
86
+ overflow: hidden;
87
+ }
85
88
 
86
- /* Нав-рейлу высоты вьюпорта хватает, скролла на нём быть не должно. `auto`,
87
- а не `hidden`: в низком окне пункты меню иначе стали бы недостижимы. */
88
- .rt-container__left-sidenav {
89
- overflow: auto;
89
+ /* Нав-рейлу высоты вьюпорта хватает, скролла на нём быть не должно. `auto`,
90
+ а не `hidden`: в низком окне пункты меню иначе стали бы недостижимы. */
91
+ .rt-container__left-sidenav {
92
+ overflow: auto;
93
+ }
90
94
  }
91
- }
92
95
 
93
- @media (width <= 768px) {
94
- // Opt-in: левый sidenav сворачивается в нижний ряд grid'а (таб-бар).
95
- // Контент занимает всю ширину и скроллится в своём `1fr` над баром —
96
- // бар остаётся видимым без position:fixed и без привязки к его высоте.
97
- .rt-container--mobile-left-bottom {
98
- grid-template:
99
- 'header' auto
100
- 'toolbar' auto
101
- 'content' 1fr
102
- 'left-sidenav' auto
103
- / 1fr;
96
+ @media (width <= 768px) {
97
+ // Opt-in: левый sidenav сворачивается в нижний ряд grid'а (таб-бар).
98
+ // Контент занимает всю ширину и скроллится в своём `1fr` над баром —
99
+ // бар остаётся видимым без position:fixed и без привязки к его высоте.
100
+ .rt-container--mobile-left-bottom {
101
+ grid-template:
102
+ 'header' auto
103
+ 'toolbar' auto
104
+ 'content' 1fr
105
+ 'left-sidenav' auto
106
+ / 1fr;
104
107
 
105
- .rt-container__left-sidenav {
106
- padding: 0;
107
- border-top: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);
108
- border-right: none;
108
+ .rt-container__left-sidenav {
109
+ padding: 0;
110
+ border-top: var(--rt-container-border-width) solid var(--rt-color-border-subtle);
111
+ border-right: none;
112
+ }
109
113
  }
110
114
  }
111
115
  }
@@ -1,16 +1,18 @@
1
- /* rt-counter — ViewEncapsulation.None: правила таргетируют BEM-класс блока.
2
- `.rt-counter` — сам хост (шаблон начинается с ng-container, класс ставит host). */
1
+ @layer rt-kit.components {
2
+ /* rt-counter — ViewEncapsulation.None: правила таргетируют BEM-класс блока.
3
+ `.rt-counter` — сам хост (шаблон начинается с ng-container, класс ставит host). */
3
4
 
4
- .rt-counter {
5
- display: inline-flex;
6
- align-items: center;
7
- gap: var(--rt-counter-gap);
5
+ .rt-counter {
6
+ display: inline-flex;
7
+ align-items: center;
8
+ gap: var(--rt-counter-gap);
8
9
 
9
- &__value {
10
- min-width: var(--rt-counter-value-min-width);
11
- color: var(--rt-counter-value-color);
12
- font-size: var(--rt-counter-value-font-size);
13
- font-variant-numeric: tabular-nums;
14
- text-align: center;
10
+ &__value {
11
+ min-width: var(--rt-counter-value-min-width);
12
+ color: var(--rt-counter-value-color);
13
+ font-size: var(--rt-counter-value-font-size);
14
+ font-variant-numeric: tabular-nums;
15
+ text-align: center;
16
+ }
15
17
  }
16
18
  }
@@ -1,34 +1,38 @@
1
- /* rt-counter-row — ViewEncapsulation.None: правила таргетируют BEM-класс блока.
2
- `.rt-counter-row` — сам хост (шаблон начинается с ng-container, класс ставит host). */
1
+ @layer rt-kit.components {
2
+ /* rt-counter-row — ViewEncapsulation.None: правила таргетируют BEM-класс блока.
3
+ `.rt-counter-row` — сам хост (шаблон начинается с ng-container, класс ставит host). */
3
4
 
4
- .rt-counter-row {
5
- display: flex;
6
- align-items: center;
7
- justify-content: space-between;
8
- padding: var(--rt-counter-row-padding-y) 0;
9
- gap: var(--rt-counter-row-gap);
5
+ .rt-counter-row {
6
+ --rt-counter-row-border-width: var(--rt-border-width-thin);
10
7
 
11
- // Линия разделяет соседние строки, а не обводит каждую: рамка на всех дала бы
12
- // лишние границы сверху у первой и снизу у последней
13
- &:not(:first-of-type) {
14
- border-top: var(--rt-border-width-thin) solid var(--rt-counter-row-color-border);
15
- }
16
-
17
- &__text {
18
8
  display: flex;
19
- flex-direction: column;
20
- gap: var(--rt-space-2xs);
21
- text-align: start;
22
- }
9
+ align-items: center;
10
+ justify-content: space-between;
11
+ padding: var(--rt-counter-row-padding-y) 0;
12
+ gap: var(--rt-counter-row-gap);
23
13
 
24
- &__label {
25
- color: var(--rt-counter-row-label-color);
26
- font-size: var(--rt-counter-row-label-font-size);
27
- font-weight: var(--rt-font-weight-medium);
28
- }
14
+ // Линия разделяет соседние строки, а не обводит каждую: рамка на всех дала бы
15
+ // лишние границы сверху у первой и снизу у последней
16
+ &:not(:first-of-type) {
17
+ border-top: var(--rt-counter-row-border-width) solid var(--rt-counter-row-color-border);
18
+ }
19
+
20
+ &__text {
21
+ display: flex;
22
+ flex-direction: column;
23
+ gap: var(--rt-space-2xs);
24
+ text-align: start;
25
+ }
26
+
27
+ &__label {
28
+ color: var(--rt-counter-row-label-color);
29
+ font-size: var(--rt-counter-row-label-font-size);
30
+ font-weight: var(--rt-font-weight-medium);
31
+ }
29
32
 
30
- &__hint {
31
- color: var(--rt-counter-row-hint-color);
32
- font-size: var(--rt-counter-row-hint-font-size);
33
+ &__hint {
34
+ color: var(--rt-counter-row-hint-color);
35
+ font-size: var(--rt-counter-row-hint-font-size);
36
+ }
33
37
  }
34
38
  }