@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,102 +1,109 @@
1
- .rt-pagination {
2
- display: flex;
3
- align-items: center;
4
- justify-content: space-between;
5
- padding: var(--rt-space-3) var(--rt-space-xs);
6
-
7
- // Адаптив завязан на собственную ширину компонента, а не на viewport:
8
- // в узком контейнере (зажатая таблица / aside) числовая полоса прячется,
9
- // показывается compact-форма «‹ Стр. N из M ›».
10
- container-type: inline-size;
11
- gap: var(--rt-space-md);
12
-
13
- &__range {
14
- color: var(--rt-color-text-muted);
15
- font-size: var(--rt-text-sm);
16
- white-space: nowrap;
17
- }
1
+ @layer rt-kit.components {
2
+ .rt-pagination {
3
+ --rt-pagination-page-radius: var(--rt-radius-md);
4
+ --rt-pagination-page-border-width: var(--rt-border-width-thin);
5
+ --rt-pagination-focus-shadow: var(--rt-shadow-focus-ring);
6
+ --rt-pagination-transition-duration: var(--rt-duration-fast);
18
7
 
19
- &__nav {
20
8
  display: flex;
21
9
  align-items: center;
22
- gap: var(--rt-space-xs);
23
- }
10
+ justify-content: space-between;
11
+ padding: var(--rt-space-4) var(--rt-space-xs);
24
12
 
25
- // Compact-форма по умолчанию скрыта — показывается только в узком контейнере.
26
- &__compact {
27
- display: none;
28
- align-items: center;
29
- gap: var(--rt-space-xs);
30
- }
13
+ // Адаптив завязан на собственную ширину компонента, а не на viewport:
14
+ // в узком контейнере (зажатая таблица / aside) числовая полоса прячется,
15
+ // показывается compact-форма «‹ Стр. N из M ›».
16
+ container-type: inline-size;
17
+ gap: var(--rt-space-md);
31
18
 
32
- &__compact-label {
33
- color: var(--rt-color-text-primary);
34
- font-size: var(--rt-text-sm);
35
- white-space: nowrap;
36
- }
19
+ &__range {
20
+ color: var(--rt-color-text-muted);
21
+ font-size: var(--rt-text-sm);
22
+ white-space: nowrap;
23
+ }
37
24
 
38
- &__page {
39
- min-width: var(--rt-space-xl);
40
- height: var(--rt-space-xl);
41
- padding: 0 var(--rt-space-sm);
42
- border: var(--rt-border-width-thin) solid var(--rt-color-border-default);
43
- border-radius: var(--rt-radius-md);
44
- background: transparent;
45
- color: var(--rt-color-text-primary);
46
- cursor: pointer;
47
- transition:
48
- background-color var(--rt-duration-fast) ease,
49
- border-color var(--rt-duration-fast) ease,
50
- color var(--rt-duration-fast) ease;
51
-
52
- &:hover:not(:disabled, &--current) {
53
- border-color: var(--rt-color-border-strong);
54
- background: var(--rt-color-bg-surface-subtle);
25
+ &__nav {
26
+ display: flex;
27
+ align-items: center;
28
+ gap: var(--rt-space-xs);
55
29
  }
56
30
 
57
- &:focus-visible {
58
- box-shadow: var(--rt-shadow-focus-ring);
59
- outline: 2px solid transparent;
60
- outline-offset: 2px;
31
+ // Compact-форма по умолчанию скрыта — показывается только в узком контейнере.
32
+ &__compact {
33
+ display: none;
34
+ align-items: center;
35
+ gap: var(--rt-space-xs);
61
36
  }
62
37
 
63
- &--current {
64
- border-color: var(--rt-color-border-strong);
65
- background: var(--rt-color-bg-surface-subtle);
66
- font-weight: var(--rt-font-weight-semibold);
38
+ &__compact-label {
39
+ color: var(--rt-color-text-primary);
40
+ font-size: var(--rt-text-sm);
41
+ white-space: nowrap;
67
42
  }
68
43
 
69
- &:disabled {
70
- cursor: default;
71
- opacity: 0.6;
44
+ &__page {
45
+ min-width: var(--rt-space-xl);
46
+ height: var(--rt-space-xl);
47
+ padding: 0 var(--rt-space-sm);
48
+ border: var(--rt-pagination-page-border-width) solid var(--rt-color-border-default);
49
+ border-radius: var(--rt-pagination-page-radius);
50
+ background: transparent;
51
+ color: var(--rt-color-text-primary);
52
+ cursor: pointer;
53
+ transition:
54
+ background-color var(--rt-pagination-transition-duration) ease,
55
+ border-color var(--rt-pagination-transition-duration) ease,
56
+ color var(--rt-pagination-transition-duration) ease;
57
+
58
+ &:hover:not(:disabled, &--current) {
59
+ border-color: var(--rt-color-border-strong);
60
+ background: var(--rt-color-bg-surface-subtle);
61
+ }
62
+
63
+ &:focus-visible {
64
+ box-shadow: var(--rt-pagination-focus-shadow);
65
+ outline: 2px solid transparent;
66
+ outline-offset: 2px;
67
+ }
68
+
69
+ &--current {
70
+ border-color: var(--rt-color-border-strong);
71
+ background: var(--rt-color-bg-surface-subtle);
72
+ font-weight: var(--rt-font-weight-semibold);
73
+ }
74
+
75
+ &:disabled {
76
+ cursor: default;
77
+ opacity: 0.6;
78
+ }
72
79
  }
73
- }
74
80
 
75
- &__gap {
76
- padding: 0 var(--rt-space-xs);
77
- color: var(--rt-color-text-muted);
78
- }
81
+ &__gap {
82
+ padding: 0 var(--rt-space-xs);
83
+ color: var(--rt-color-text-muted);
84
+ }
79
85
 
80
- &__per-page {
81
- display: flex;
82
- align-items: center;
83
- gap: var(--rt-space-sm);
84
- }
86
+ &__per-page {
87
+ display: flex;
88
+ align-items: center;
89
+ gap: var(--rt-space-sm);
90
+ }
85
91
 
86
- &__per-page-label {
87
- color: var(--rt-color-text-muted);
88
- font-size: var(--rt-text-sm);
92
+ &__per-page-label {
93
+ color: var(--rt-color-text-muted);
94
+ font-size: var(--rt-text-sm);
95
+ }
89
96
  }
90
- }
91
97
 
92
- // Узкий контейнер: прячем числовую полосу и диапазон, показываем compact-форму.
93
- @container (max-width: 460px) {
94
- .rt-pagination__nav,
95
- .rt-pagination__range {
96
- display: none;
97
- }
98
+ // Узкий контейнер: прячем числовую полосу и диапазон, показываем compact-форму.
99
+ @container (max-width: 460px) {
100
+ .rt-pagination__nav,
101
+ .rt-pagination__range {
102
+ display: none;
103
+ }
98
104
 
99
- .rt-pagination__compact {
100
- display: flex;
105
+ .rt-pagination__compact {
106
+ display: flex;
107
+ }
101
108
  }
102
109
  }
@@ -1,130 +1,134 @@
1
- /* rt-photo-viewer — ViewEncapsulation.None: правила таргетируют BEM-класс блока.
2
- `.rt-photo-viewer` — сам хост (шаблон начинается с ng-container, класс ставит host). */
3
-
4
- .rt-photo-viewer {
5
- display: block;
6
- width: 100vw;
7
- height: 100vh;
8
- height: 100dvh;
9
- background: var(--rt-color-bg-inverse);
10
-
11
- // Обёртка существует ради ловушки фокуса и повторяет размеры хоста:
12
- // display: contents ломает ловушку — ей нужен настоящий бокс
13
- &__surface {
14
- position: absolute;
15
- inset: 0;
16
- }
1
+ @layer rt-kit.components {
2
+ /* rt-photo-viewer — ViewEncapsulation.None: правила таргетируют BEM-класс блока.
3
+ `.rt-photo-viewer` — сам хост (шаблон начинается с ng-container, класс ставит host). */
17
4
 
18
- &__bar {
19
- position: absolute;
20
- z-index: 1;
21
- top: 0;
22
- right: 0;
23
- left: 0;
24
- display: flex;
25
- align-items: center;
26
- justify-content: space-between;
27
- padding: var(--rt-space-4) var(--rt-space-5);
28
- color: var(--rt-color-text-inverse);
29
- gap: var(--rt-space-4);
30
- }
5
+ .rt-photo-viewer {
6
+ --rt-photo-viewer-control-radius: var(--rt-radius-md);
31
7
 
32
- &__counter {
33
- font-size: var(--rt-text-sm);
34
- font-variant-numeric: tabular-nums;
35
- }
36
-
37
- &__track {
38
- display: flex;
39
- overflow: auto hidden;
40
- width: 100%;
41
- height: 100%;
8
+ display: block;
9
+ width: 100vw;
10
+ height: 100vh;
11
+ height: 100dvh;
12
+ background: var(--rt-color-bg-inverse);
13
+
14
+ // Обёртка существует ради ловушки фокуса и повторяет размеры хоста:
15
+ // display: contents ломает ловушку — ей нужен настоящий бокс
16
+ &__surface {
17
+ position: absolute;
18
+ inset: 0;
19
+ }
42
20
 
43
- // Свайп, инерцию и прилипание кадра даёт браузер
44
- scroll-snap-type: x mandatory;
45
- scrollbar-width: none;
46
- }
21
+ &__bar {
22
+ position: absolute;
23
+ z-index: 1;
24
+ top: 0;
25
+ right: 0;
26
+ left: 0;
27
+ display: flex;
28
+ align-items: center;
29
+ justify-content: space-between;
30
+ padding: var(--rt-space-4) var(--rt-space-5);
31
+ color: var(--rt-color-text-inverse);
32
+ gap: var(--rt-space-4);
33
+ }
47
34
 
48
- &__slide {
49
- display: flex;
50
- flex: 0 0 100%;
51
- align-items: center;
52
- justify-content: center;
53
- padding: var(--rt-space-10) var(--rt-space-4);
54
- margin: 0;
55
- scroll-snap-align: center;
35
+ &__counter {
36
+ font-size: var(--rt-text-sm);
37
+ font-variant-numeric: tabular-nums;
38
+ }
56
39
 
57
- picture {
40
+ &__track {
58
41
  display: flex;
42
+ overflow: auto hidden;
59
43
  width: 100%;
60
44
  height: 100%;
45
+
46
+ // Свайп, инерцию и прилипание кадра даёт браузер
47
+ scroll-snap-type: x mandatory;
48
+ scrollbar-width: none;
49
+ }
50
+
51
+ &__slide {
52
+ display: flex;
53
+ flex: 0 0 100%;
61
54
  align-items: center;
62
55
  justify-content: center;
56
+ padding: var(--rt-space-10) var(--rt-space-4);
57
+ margin: 0;
58
+ scroll-snap-align: center;
59
+
60
+ picture {
61
+ display: flex;
62
+ width: 100%;
63
+ height: 100%;
64
+ align-items: center;
65
+ justify-content: center;
66
+ }
63
67
  }
64
- }
65
-
66
- // Кадры вертикальные, поэтому ограничение по высоте важнее, чем по ширине
67
- &__image {
68
- display: block;
69
- max-width: 100%;
70
- max-height: 100%;
71
- object-fit: contain;
72
- }
73
68
 
74
- // Панель правки: светлая полоса поверх тёмного просмотра — она рабочая
75
- // область, а не часть кадра
76
- &__panel {
77
- position: absolute;
78
- z-index: 1;
79
- right: 0;
80
- bottom: 0;
81
- left: 0;
82
- padding: var(--rt-space-4) var(--rt-space-5);
83
- background: var(--rt-color-bg-surface);
84
- color: var(--rt-color-text-primary);
85
- }
86
-
87
- /* TODO: отрефакторить это дерьмо */
88
- &__bar rt-icon-button,
89
- &__arrow-prev,
90
- &__arrow-next {
91
- --rt-icon-button-color: var(--rt-color-text-inverse);
92
- --rt-icon-button-color-bg-hover: color-mix(in srgb, var(--rt-color-text-inverse) 24%, transparent);
69
+ // Кадры вертикальные, поэтому ограничение по высоте важнее, чем по ширине
70
+ &__image {
71
+ display: block;
72
+ max-width: 100%;
73
+ max-height: 100%;
74
+ object-fit: contain;
75
+ }
93
76
 
94
- border-radius: var(--rt-radius-md);
95
- background: color-mix(in srgb, var(--rt-color-bg-inverse) 55%, transparent);
96
- }
77
+ // Панель правки: светлая полоса поверх тёмного просмотра — она рабочая
78
+ // область, а не часть кадра
79
+ &__panel {
80
+ position: absolute;
81
+ z-index: 1;
82
+ right: 0;
83
+ bottom: 0;
84
+ left: 0;
85
+ padding: var(--rt-space-4) var(--rt-space-5);
86
+ background: var(--rt-color-bg-surface);
87
+ color: var(--rt-color-text-primary);
88
+ }
97
89
 
98
- &__arrow-prev,
99
- &__arrow-next {
100
- position: absolute;
101
- top: 50%;
102
- transform: translateY(-50%);
103
- }
90
+ /* TODO: отрефакторить это дерьмо */
91
+ &__bar rt-icon-button,
92
+ &__arrow-prev,
93
+ &__arrow-next {
94
+ --rt-icon-button-color: var(--rt-color-text-inverse);
95
+ --rt-icon-button-color-bg-hover: color-mix(in srgb, var(--rt-color-text-inverse) 24%, transparent);
104
96
 
105
- &__arrow-prev {
106
- left: var(--rt-space-3);
107
- }
97
+ border-radius: var(--rt-photo-viewer-control-radius);
98
+ background: color-mix(in srgb, var(--rt-color-bg-inverse) 55%, transparent);
99
+ }
108
100
 
109
- &__arrow-next {
110
- right: var(--rt-space-3);
111
- }
101
+ &__arrow-prev,
102
+ &__arrow-next {
103
+ position: absolute;
104
+ top: 50%;
105
+ transform: translateY(-50%);
106
+ }
112
107
 
113
- // С панелью кадру нужно место под неё, иначе низ снимка уходит под полосу
114
- &:has(.rt-photo-viewer__panel) {
115
- .rt-photo-viewer__slide {
116
- padding-bottom: var(--rt-space-20);
108
+ &__arrow-prev {
109
+ left: var(--rt-space-4);
117
110
  }
118
- }
119
111
 
120
- @media (width <= 700px) {
121
- &__arrow-prev,
122
112
  &__arrow-next {
123
- display: none;
113
+ right: var(--rt-space-4);
124
114
  }
125
115
 
126
- &__slide {
127
- padding: var(--rt-space-12) 0;
116
+ // С панелью кадру нужно место под неё, иначе низ снимка уходит под полосу
117
+ &:has(.rt-photo-viewer__panel) {
118
+ .rt-photo-viewer__slide {
119
+ padding-bottom: var(--rt-space-20);
120
+ }
121
+ }
122
+
123
+ @media (width <= 700px) {
124
+ &__arrow-prev,
125
+ &__arrow-next {
126
+ display: none;
127
+ }
128
+
129
+ &__slide {
130
+ padding: var(--rt-space-12) 0;
131
+ }
128
132
  }
129
133
  }
130
134
  }
@@ -13,7 +13,7 @@
13
13
  | вход | тип | умолчание |
14
14
  | ------------- | ---------------------- | --------- |
15
15
  | `placeholder` | `string` | `''` |
16
- | `toolbar` | `IRtRichEditorToolbar` | `'full'` |
16
+ | `toolbar` | `TRtRichEditorToolbar` | `'full'` |
17
17
 
18
18
  Выход: `enterPressed` — Enter без Shift (перенос при этом гасится).
19
19
 
@@ -1,71 +1,75 @@
1
- // Базовая тема Quill (snow) подключена глобально в project.json приложения (styles).
2
- // Здесь — только перекрытие цветов на семантические --rt-* токены (dark-aware):
3
- // нативный snow светлый (иконки #444, границы #ccc) и в тёмной теме не читается.
4
- .rt-rich-editor {
5
- // Хост — flex-колонка (тулбар над контейнером). min-block-size:0 позволяет
6
- // ужиматься ниже интринзик-высоты Quill, когда редактор — flex-item в
7
- // height-ограниченном родителе (композер в fill-режиме): без этого контейнер
8
- // с фиксированной высотой вываливается за ужатый хост и перекрывает соседей.
9
- display: flex;
10
- flex-direction: column;
11
- min-block-size: 0;
1
+ @layer rt-kit.components {
2
+ // Базовая тема Quill (snow) подключена глобально в project.json приложения (styles).
3
+ // Здесь — только перекрытие цветов на семантические --rt-* токены (dark-aware):
4
+ // нативный snow светлый (иконки #444, границы #ccc) и в тёмной теме не читается.
5
+ .rt-rich-editor {
6
+ --rt-rich-editor-radius: var(--rt-radius-md);
12
7
 
13
- .ql-toolbar.ql-snow,
14
- .ql-container.ql-snow {
15
- border-color: var(--rt-color-border-default);
16
- }
8
+ // Хост — flex-колонка (тулбар над контейнером). min-block-size:0 позволяет
9
+ // ужиматься ниже интринзик-высоты Quill, когда редактор — flex-item в
10
+ // height-ограниченном родителе (композер в fill-режиме): без этого контейнер
11
+ // с фиксированной высотой вываливается за ужатый хост и перекрывает соседей.
12
+ display: flex;
13
+ flex-direction: column;
14
+ min-block-size: 0;
17
15
 
18
- .ql-toolbar.ql-snow {
19
- flex: 0 0 auto;
20
- border-start-end-radius: var(--rt-radius-md);
21
- border-start-start-radius: var(--rt-radius-md);
22
- }
16
+ .ql-toolbar.ql-snow,
17
+ .ql-container.ql-snow {
18
+ border-color: var(--rt-color-border-default);
19
+ }
23
20
 
24
- // Native snow задаёт контейнеру Helvetica 13px — возвращаем шрифт приложения.
25
- // flex:1 + min-block-size:0 + overflow держат зону ввода внутри хоста —
26
- // при нехватке высоты контент скроллится, а не наезжает на контролы.
27
- .ql-container.ql-snow {
28
- flex: 1 1 auto;
29
- border-end-end-radius: var(--rt-radius-md);
30
- border-end-start-radius: var(--rt-radius-md);
31
- font-family: inherit;
32
- font-size: inherit;
33
- min-block-size: 0;
34
- overflow-y: auto;
35
- }
21
+ .ql-toolbar.ql-snow {
22
+ flex: 0 0 auto;
23
+ border-start-end-radius: var(--rt-rich-editor-radius);
24
+ border-start-start-radius: var(--rt-rich-editor-radius);
25
+ }
36
26
 
37
- .ql-editor {
38
- background-color: var(--rt-color-bg-surface-subtle);
39
- color: var(--rt-color-text-default);
40
- min-block-size: 96px;
41
- }
27
+ // Native snow задаёт контейнеру Helvetica 13px — возвращаем шрифт приложения.
28
+ // flex:1 + min-block-size:0 + overflow держат зону ввода внутри хоста —
29
+ // при нехватке высоты контент скроллится, а не наезжает на контролы.
30
+ .ql-container.ql-snow {
31
+ flex: 1 1 auto;
32
+ border-end-end-radius: var(--rt-rich-editor-radius);
33
+ border-end-start-radius: var(--rt-rich-editor-radius);
34
+ font-family: inherit;
35
+ font-size: inherit;
36
+ min-block-size: 0;
37
+ overflow-y: auto;
38
+ }
42
39
 
43
- .ql-editor.ql-blank:before {
44
- color: var(--rt-color-text-muted);
45
- font-style: normal;
46
- }
40
+ .ql-editor {
41
+ background-color: var(--rt-color-bg-surface-subtle);
42
+ color: var(--rt-color-text-primary);
43
+ min-block-size: 96px;
44
+ }
47
45
 
48
- // Иконки тулбара — приглушённый цвет по умолчанию (native #444 в dark не виден).
49
- .ql-snow .ql-stroke {
50
- stroke: var(--rt-color-text-muted);
51
- }
46
+ .ql-editor.ql-blank:before {
47
+ color: var(--rt-color-text-muted);
48
+ font-style: normal;
49
+ }
52
50
 
53
- .ql-snow .ql-fill {
54
- fill: var(--rt-color-text-muted);
55
- }
51
+ // Иконки тулбара — приглушённый цвет по умолчанию (native #444 в dark не виден).
52
+ .ql-snow .ql-stroke {
53
+ stroke: var(--rt-color-text-muted);
54
+ }
56
55
 
57
- .ql-snow .ql-picker {
58
- color: var(--rt-color-text-muted);
59
- }
56
+ .ql-snow .ql-fill {
57
+ fill: var(--rt-color-text-muted);
58
+ }
60
59
 
61
- // Активная/наведённая кнопка — акцентный цвет.
62
- .ql-snow .ql-toolbar button:hover .ql-stroke,
63
- .ql-snow button.ql-active .ql-stroke {
64
- stroke: var(--rt-color-text-link);
65
- }
60
+ .ql-snow .ql-picker {
61
+ color: var(--rt-color-text-muted);
62
+ }
63
+
64
+ // Активная/наведённая кнопка — акцентный цвет.
65
+ .ql-snow .ql-toolbar button:hover .ql-stroke,
66
+ .ql-snow button.ql-active .ql-stroke {
67
+ stroke: var(--rt-color-text-link);
68
+ }
66
69
 
67
- .ql-snow .ql-toolbar button:hover .ql-fill,
68
- .ql-snow button.ql-active .ql-fill {
69
- fill: var(--rt-color-text-link);
70
+ .ql-snow .ql-toolbar button:hover .ql-fill,
71
+ .ql-snow button.ql-active .ql-fill {
72
+ fill: var(--rt-color-text-link);
73
+ }
70
74
  }
71
75
  }