@rt-tools/ui-kit-v2 0.5.0 → 0.6.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 (103) hide show
  1. package/README.md +71 -0
  2. package/fesm2022/rt-tools-ui-kit-v2.mjs +166 -166
  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.6.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/rt-icon.component.scss +14 -12
  42. package/src/lib/components/icon-button/CONTEXT.md +4 -2
  43. package/src/lib/components/icon-button/rt-icon-button.component.scss +128 -112
  44. package/src/lib/components/info-item/rt-info-item.component.scss +38 -36
  45. package/src/lib/components/input/rt-input.component.scss +102 -98
  46. package/src/lib/components/input-number/rt-input-number.component.scss +84 -82
  47. package/src/lib/components/live-badge/rt-live-badge.component.scss +27 -23
  48. package/src/lib/components/logo/rt-logo.component.scss +54 -52
  49. package/src/lib/components/menu/rt-menu-confirm-dialog.component.scss +30 -28
  50. package/src/lib/components/menu/rt-menu-item.component.scss +47 -42
  51. package/src/lib/components/menu/rt-menu.component.scss +23 -15
  52. package/src/lib/components/message/rt-message.component.scss +53 -49
  53. package/src/lib/components/message-composer/rt-message-composer.component.scss +55 -49
  54. package/src/lib/components/money-list/rt-money-list.component.scss +13 -9
  55. package/src/lib/components/money-list/rt-money-row.component.scss +23 -19
  56. package/src/lib/components/multiselect/rt-multiselect.component.scss +169 -161
  57. package/src/lib/components/night-grid/rt-night-grid.component.scss +47 -42
  58. package/src/lib/components/note/rt-note.component.scss +15 -11
  59. package/src/lib/components/notifications-bell/rt-notifications-bell.component.scss +34 -27
  60. package/src/lib/components/page-header/rt-page-header-mobile.scss +142 -134
  61. package/src/lib/components/page-header/rt-page-header-submenu.scss +130 -123
  62. package/src/lib/components/page-header/rt-page-header.component.scss +221 -210
  63. package/src/lib/components/pagination/rt-pagination.component.scss +88 -81
  64. package/src/lib/components/photo-viewer/rt-photo-viewer.component.scss +109 -105
  65. package/src/lib/components/rich-editor/rt-rich-editor.component.scss +63 -59
  66. package/src/lib/components/section-nav/rt-section-nav.component.scss +53 -47
  67. package/src/lib/components/select/rt-select.component.scss +146 -138
  68. package/src/lib/components/skeleton/rt-skeleton.component.scss +50 -41
  69. package/src/lib/components/skeleton-wrapper/rt-skeleton-wrapper.component.scss +8 -6
  70. package/src/lib/components/spinner/rt-spinner.component.scss +35 -32
  71. package/src/lib/components/split-button/rt-split-button.component.scss +74 -62
  72. package/src/lib/components/stat-tile/rt-stat-tile.component.scss +95 -91
  73. package/src/lib/components/stepper/rt-stepper.component.scss +107 -101
  74. package/src/lib/components/table/copy-cell/rt-copy-cell.component.scss +34 -30
  75. package/src/lib/components/table/rt-table.component.scss +260 -252
  76. package/src/lib/components/table/settings-aside/rt-table-settings-aside.component.scss +7 -5
  77. package/src/lib/components/table/settings-panel/rt-table-settings-panel.component.scss +71 -61
  78. package/src/lib/components/table/sort-header/rt-table-sort-header.component.scss +31 -29
  79. package/src/lib/components/tabs/rt-tabs.component.scss +184 -175
  80. package/src/lib/components/tag/rt-tag.component.scss +97 -92
  81. package/src/lib/components/textarea/rt-textarea.component.scss +62 -60
  82. package/src/lib/components/theme-toggle/rt-theme-toggle.component.scss +7 -5
  83. package/src/lib/components/thread-list/rt-thread-list.component.scss +221 -212
  84. package/src/lib/components/timeline/rt-timeline.component.scss +82 -76
  85. package/src/lib/components/toast/rt-toast.component.scss +169 -160
  86. package/src/lib/components/toast/rt-toaster.component.scss +37 -35
  87. package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +129 -122
  88. package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +97 -91
  89. package/src/lib/components/toolbar/rt-toolbar.component.scss +56 -54
  90. package/src/lib/components/tooltip/rt-tooltip.component.scss +20 -15
  91. package/src/lib/components/welcome-dialog/rt-welcome-dialog.component.scss +46 -44
  92. package/src/lib/components/workspace/rt-workspace.component.scss +139 -131
  93. package/src/lib/components/workspace-details/rt-workspace-details.component.scss +105 -101
  94. package/src/styles/_index.scss +4 -0
  95. package/src/styles/_layers.scss +22 -0
  96. package/src/styles/_login.scss +87 -85
  97. package/src/styles/_mixins.scss +1 -1
  98. package/src/styles/_primitives.scss +126 -67
  99. package/src/styles/_scrollbar.scss +21 -19
  100. package/src/styles/_semantic.scss +140 -56
  101. package/src/styles/_theme-dark.scss +60 -27
  102. package/styles/tokens.css +628 -408
  103. package/rt-tools-ui-kit-v2-0.5.0.tgz +0 -0
@@ -1,58 +1,62 @@
1
- /* rt-empty-state — заглушка пустого состояния в common/ui (ViewEncapsulation.None).
2
- Селектор bare `.rt-empty-state` (класс на host) — `:host` в None light-DOM не матчит.
3
- Палитра приглушённая (как rt-note), центрированная вертикальная стопка. */
4
-
5
- .rt-empty-state {
6
- display: flex;
7
- flex-direction: column;
8
- align-items: center;
9
- justify-content: center;
10
- padding: var(--rt-space-xl) var(--rt-space-lg);
11
- gap: var(--rt-space-sm);
12
- text-align: center;
13
-
14
- /* Слот иллюстрации (проецируемая графика вместо иконки) — скрыт, если пуст. */
15
- &__illustration {
16
- &:empty {
17
- display: none;
18
- }
1
+ @layer rt-kit.components {
2
+ /* rt-empty-state — заглушка пустого состояния в common/ui (ViewEncapsulation.None).
3
+ Селектор bare `.rt-empty-state` (класс на host) — `:host` в None light-DOM не матчит.
4
+ Палитра приглушённая (как rt-note), центрированная вертикальная стопка. */
19
5
 
20
- margin-bottom: var(--rt-space-xs);
21
- }
6
+ .rt-empty-state {
7
+ --rt-empty-state-icon-radius: var(--rt-radius-full);
22
8
 
23
- &__icon-wrap {
24
9
  display: flex;
25
- width: 64px;
26
- height: 64px;
10
+ flex-direction: column;
27
11
  align-items: center;
28
12
  justify-content: center;
29
- border-radius: var(--rt-radius-full);
30
- margin-bottom: var(--rt-space-xs);
31
- background: var(--rt-color-bg-subtle);
32
- color: var(--rt-color-text-muted);
33
- }
13
+ padding: var(--rt-space-xl) var(--rt-space-lg);
14
+ gap: var(--rt-space-sm);
15
+ text-align: center;
34
16
 
35
- &__title {
36
- margin: 0;
37
- color: var(--rt-color-text-primary);
38
- font-size: var(--rt-text-md);
39
- font-weight: var(--rt-font-weight-medium);
40
- }
17
+ /* Слот иллюстрации (проецируемая графика вместо иконки) — скрыт, если пуст. */
18
+ &__illustration {
19
+ &:empty {
20
+ display: none;
21
+ }
41
22
 
42
- &__description {
43
- max-width: 320px;
44
- margin: 0;
45
- color: var(--rt-color-text-muted);
46
- font-size: var(--rt-text-sm);
47
- line-height: var(--rt-leading-normal);
48
- }
23
+ margin-bottom: var(--rt-space-xs);
24
+ }
49
25
 
50
- /* Слот действия скрыт, если ничего не спроецировано (пустой div). */
51
- &__action {
52
- &:empty {
53
- display: none;
26
+ &__icon-wrap {
27
+ display: flex;
28
+ width: 64px;
29
+ height: 64px;
30
+ align-items: center;
31
+ justify-content: center;
32
+ border-radius: var(--rt-empty-state-icon-radius);
33
+ margin-bottom: var(--rt-space-xs);
34
+ background: var(--rt-color-bg-subtle);
35
+ color: var(--rt-color-text-muted);
54
36
  }
55
37
 
56
- margin-top: var(--rt-space-sm);
38
+ &__title {
39
+ margin: 0;
40
+ color: var(--rt-color-text-primary);
41
+ font-size: var(--rt-text-md);
42
+ font-weight: var(--rt-font-weight-medium);
43
+ }
44
+
45
+ &__description {
46
+ max-width: 320px;
47
+ margin: 0;
48
+ color: var(--rt-color-text-muted);
49
+ font-size: var(--rt-text-sm);
50
+ line-height: var(--rt-leading-normal);
51
+ }
52
+
53
+ /* Слот действия скрыт, если ничего не спроецировано (пустой div). */
54
+ &__action {
55
+ &:empty {
56
+ display: none;
57
+ }
58
+
59
+ margin-top: var(--rt-space-sm);
60
+ }
57
61
  }
58
62
  }
@@ -1,78 +1,80 @@
1
- .rt-field {
2
- display: flex;
3
- flex-direction: column;
4
- gap: var(--rt-field-gap);
1
+ @layer rt-kit.components {
2
+ .rt-field {
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: var(--rt-field-gap);
5
6
 
6
- &__label-row {
7
- display: inline-flex;
8
- align-items: center;
9
- gap: var(--rt-field-label-help-gap);
10
- }
7
+ &__label-row {
8
+ display: inline-flex;
9
+ align-items: center;
10
+ gap: var(--rt-field-label-help-gap);
11
+ }
11
12
 
12
- &__label {
13
- color: var(--rt-field-label-color);
14
- font-size: var(--rt-field-label-font-size);
15
- font-weight: var(--rt-field-label-font-weight);
16
- }
13
+ &__label {
14
+ color: var(--rt-field-label-color);
15
+ font-size: var(--rt-field-label-font-size);
16
+ font-weight: var(--rt-field-label-font-weight);
17
+ }
17
18
 
18
- &__required {
19
- color: var(--rt-field-required-color);
20
- }
19
+ &__required {
20
+ color: var(--rt-field-required-color);
21
+ }
21
22
 
22
- /* Зона значения: проецируемый контрол или read-only текст. Задаёт размер/цвет
23
- значения, чтобы оно было крупнее и контрастнее muted-лейбла. Нативные
24
- <input> у rt-контролов задают свой font-size сами и это не переопределяют —
25
- подхватывают только проецируемые элементы (напр. read-only <p>). */
26
- &__control {
27
- color: var(--rt-field-value-color);
28
- font-size: var(--rt-field-value-font-size);
29
- }
23
+ /* Зона значения: проецируемый контрол или read-only текст. Задаёт размер/цвет
24
+ значения, чтобы оно было крупнее и контрастнее muted-лейбла. Нативные
25
+ <input> у rt-контролов задают свой font-size сами и это не переопределяют —
26
+ подхватывают только проецируемые элементы (напр. read-only <p>). */
27
+ &__control {
28
+ color: var(--rt-field-value-color);
29
+ font-size: var(--rt-field-value-font-size);
30
+ }
30
31
 
31
- &__help {
32
- display: inline-flex;
33
- padding: 0;
34
- border: none;
35
- margin: 0;
36
- background: none;
37
- cursor: help;
38
- }
32
+ &__help {
33
+ display: inline-flex;
34
+ padding: 0;
35
+ border: none;
36
+ margin: 0;
37
+ background: none;
38
+ cursor: help;
39
+ }
39
40
 
40
- &__help-popover {
41
- display: block;
42
- max-width: 240px;
43
- font-size: var(--rt-field-hint-font-size);
44
- }
41
+ &__help-popover {
42
+ display: block;
43
+ max-width: 240px;
44
+ font-size: var(--rt-field-hint-font-size);
45
+ }
45
46
 
46
- /* Зона сообщений под контролом. С резервом (reserveHintSpace) hint и ошибка
47
- кладутся в одну ячейку грида: скрытый hint продолжает задавать высоту, и
48
- подмена сообщения не двигает форму ни вниз, ни вверх. Без hint высоту
49
- держит min-height в одну строку — считаем по error-шрифту, он крупнее. */
50
- &__messages {
51
- display: grid;
47
+ /* Зона сообщений под контролом. С резервом (reserveHintSpace) hint и ошибка
48
+ кладутся в одну ячейку грида: скрытый hint продолжает задавать высоту, и
49
+ подмена сообщения не двигает форму ни вниз, ни вверх. Без hint высоту
50
+ держит min-height в одну строку — считаем по error-шрифту, он крупнее. */
51
+ &__messages {
52
+ display: grid;
52
53
 
53
- &--reserved {
54
- font-size: var(--rt-field-error-font-size);
55
- min-block-size: 1lh;
54
+ &--reserved {
55
+ font-size: var(--rt-field-error-font-size);
56
+ min-block-size: 1lh;
56
57
 
57
- > * {
58
- grid-area: 1 / 1;
58
+ > * {
59
+ grid-area: 1 / 1;
60
+ }
59
61
  }
60
62
  }
61
- }
62
63
 
63
- &__hint {
64
- color: var(--rt-field-hint-color);
65
- font-size: var(--rt-field-hint-font-size);
64
+ &__hint {
65
+ color: var(--rt-field-hint-color);
66
+ font-size: var(--rt-field-hint-font-size);
66
67
 
67
- /* Место под собой держит, глазу не мешает — только так высота зоны
68
- остаётся равной большему из двух сообщений. */
69
- &--hidden {
70
- visibility: hidden;
68
+ /* Место под собой держит, глазу не мешает — только так высота зоны
69
+ остаётся равной большему из двух сообщений. */
70
+ &--hidden {
71
+ visibility: hidden;
72
+ }
71
73
  }
72
- }
73
74
 
74
- &__error {
75
- color: var(--rt-field-error-color);
76
- font-size: var(--rt-field-error-font-size);
75
+ &__error {
76
+ color: var(--rt-field-error-color);
77
+ font-size: var(--rt-field-error-font-size);
78
+ }
77
79
  }
78
80
  }
@@ -1,96 +1,102 @@
1
- /* rt-file-card — ViewEncapsulation.None, плоский `.rt-file-card` (как rt-file-input/rt-icon).
2
- Host-класс ставится через @Component host:{class}. */
3
- .rt-file-card {
4
- /* Дефолт = md; перезаписывается модификаторами sm/lg ниже. Размеры иконки
5
- типа и кнопок действий сюда не входят — они задаются входами дочерних
6
- компонентов и маппятся в .ts. */
7
- --rt-file-card-padding-block: var(--rt-space-sm);
8
- --rt-file-card-padding-inline: var(--rt-space-md);
9
- --rt-file-card-gap: var(--rt-space-sm);
10
- --rt-file-card-title-size: var(--rt-text-md);
11
- --rt-file-card-name-size: var(--rt-text-sm);
12
- --rt-file-card-badge-size: var(--rt-text-xs);
1
+ @layer rt-kit.components {
2
+ /* rt-file-card — ViewEncapsulation.None, плоский `.rt-file-card` (как rt-file-input/rt-icon).
3
+ Host-класс ставится через @Component host:{class}. */
4
+ .rt-file-card {
5
+ --rt-file-card-radius: var(--rt-radius-lg);
6
+ --rt-file-card-border-width: var(--rt-border-width-thin);
7
+ --rt-file-card-badge-radius: var(--rt-radius-full);
13
8
 
14
- display: flex;
15
- align-items: center;
16
- padding: var(--rt-file-card-padding-block) var(--rt-file-card-padding-inline);
17
- border: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);
18
- border-radius: var(--rt-radius-lg);
19
- background-color: var(--rt-color-bg-surface);
20
- gap: var(--rt-file-card-gap);
21
-
22
- &--sm {
23
- --rt-file-card-padding-block: var(--rt-space-xs);
24
- --rt-file-card-padding-inline: var(--rt-space-sm);
25
- --rt-file-card-gap: var(--rt-space-xs);
26
- --rt-file-card-title-size: var(--rt-text-xs);
27
- --rt-file-card-name-size: var(--rt-text-2xs);
28
- --rt-file-card-badge-size: var(--rt-text-2xs);
29
- }
30
-
31
- &--md {
9
+ /* Дефолт = md; перезаписывается модификаторами sm/lg ниже. Размеры иконки
10
+ типа и кнопок действий сюда не входят — они задаются входами дочерних
11
+ компонентов и маппятся в .ts. */
32
12
  --rt-file-card-padding-block: var(--rt-space-sm);
33
13
  --rt-file-card-padding-inline: var(--rt-space-md);
34
14
  --rt-file-card-gap: var(--rt-space-sm);
35
15
  --rt-file-card-title-size: var(--rt-text-md);
36
16
  --rt-file-card-name-size: var(--rt-text-sm);
37
17
  --rt-file-card-badge-size: var(--rt-text-xs);
38
- }
39
18
 
40
- &--lg {
41
- --rt-file-card-padding-block: var(--rt-space-md);
42
- --rt-file-card-padding-inline: var(--rt-space-lg);
43
- --rt-file-card-gap: var(--rt-space-md);
44
- --rt-file-card-title-size: var(--rt-text-lg);
45
- --rt-file-card-name-size: var(--rt-text-md);
46
- --rt-file-card-badge-size: var(--rt-text-sm);
47
- }
19
+ display: flex;
20
+ align-items: center;
21
+ padding: var(--rt-file-card-padding-block) var(--rt-file-card-padding-inline);
22
+ border: var(--rt-file-card-border-width) solid var(--rt-color-border-subtle);
23
+ border-radius: var(--rt-file-card-radius);
24
+ background-color: var(--rt-color-bg-surface);
25
+ gap: var(--rt-file-card-gap);
48
26
 
49
- &__icon {
50
- flex-shrink: 0;
51
- }
27
+ &--sm {
28
+ --rt-file-card-padding-block: var(--rt-space-xs);
29
+ --rt-file-card-padding-inline: var(--rt-space-sm);
30
+ --rt-file-card-gap: var(--rt-space-xs);
31
+ --rt-file-card-title-size: var(--rt-text-xs);
32
+ --rt-file-card-name-size: var(--rt-text-2xs);
33
+ --rt-file-card-badge-size: var(--rt-text-2xs);
34
+ }
52
35
 
53
- &__text {
54
- display: flex;
36
+ &--md {
37
+ --rt-file-card-padding-block: var(--rt-space-sm);
38
+ --rt-file-card-padding-inline: var(--rt-space-md);
39
+ --rt-file-card-gap: var(--rt-space-sm);
40
+ --rt-file-card-title-size: var(--rt-text-md);
41
+ --rt-file-card-name-size: var(--rt-text-sm);
42
+ --rt-file-card-badge-size: var(--rt-text-xs);
43
+ }
55
44
 
56
- /* min-width:0 нужен, чтобы дочерние с ellipsis могли сжиматься в flex-строке */
57
- min-width: 0;
58
- flex: 1 1 auto;
59
- flex-direction: column;
60
- gap: var(--rt-space-2xs);
61
- }
45
+ &--lg {
46
+ --rt-file-card-padding-block: var(--rt-space-md);
47
+ --rt-file-card-padding-inline: var(--rt-space-lg);
48
+ --rt-file-card-gap: var(--rt-space-md);
49
+ --rt-file-card-title-size: var(--rt-text-lg);
50
+ --rt-file-card-name-size: var(--rt-text-md);
51
+ --rt-file-card-badge-size: var(--rt-text-sm);
52
+ }
62
53
 
63
- &__title {
64
- overflow: hidden;
65
- color: var(--rt-color-text-primary);
66
- font-size: var(--rt-file-card-title-size);
67
- font-weight: var(--rt-font-weight-semibold);
68
- text-overflow: ellipsis;
69
- white-space: nowrap;
70
- }
54
+ &__icon {
55
+ flex-shrink: 0;
56
+ }
71
57
 
72
- &__name {
73
- color: var(--rt-color-text-muted);
74
- font-size: var(--rt-file-card-name-size);
75
- }
58
+ &__text {
59
+ display: flex;
76
60
 
77
- &__meta {
78
- display: flex;
79
- flex-shrink: 0;
80
- align-items: center;
81
- gap: var(--rt-space-xs);
82
- }
61
+ /* min-width:0 нужен, чтобы дочерние с ellipsis могли сжиматься в flex-строке */
62
+ min-width: 0;
63
+ flex: 1 1 auto;
64
+ flex-direction: column;
65
+ gap: var(--rt-space-2xs);
66
+ }
83
67
 
84
- &__size {
85
- padding: var(--rt-space-2xs) var(--rt-space-sm);
86
- border: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);
87
- border-radius: var(--rt-radius-full);
88
- color: var(--rt-color-text-muted);
89
- font-size: var(--rt-file-card-badge-size);
90
- white-space: nowrap;
91
- }
68
+ &__title {
69
+ overflow: hidden;
70
+ color: var(--rt-color-text-primary);
71
+ font-size: var(--rt-file-card-title-size);
72
+ font-weight: var(--rt-font-weight-semibold);
73
+ text-overflow: ellipsis;
74
+ white-space: nowrap;
75
+ }
76
+
77
+ &__name {
78
+ color: var(--rt-color-text-muted);
79
+ font-size: var(--rt-file-card-name-size);
80
+ }
81
+
82
+ &__meta {
83
+ display: flex;
84
+ flex-shrink: 0;
85
+ align-items: center;
86
+ gap: var(--rt-space-xs);
87
+ }
88
+
89
+ &__size {
90
+ padding: var(--rt-space-2xs) var(--rt-space-sm);
91
+ border: var(--rt-file-card-border-width) solid var(--rt-color-border-subtle);
92
+ border-radius: var(--rt-file-card-badge-radius);
93
+ color: var(--rt-color-text-muted);
94
+ font-size: var(--rt-file-card-badge-size);
95
+ white-space: nowrap;
96
+ }
92
97
 
93
- &__action {
94
- flex-shrink: 0;
98
+ &__action {
99
+ flex-shrink: 0;
100
+ }
95
101
  }
96
102
  }
@@ -1,91 +1,97 @@
1
- /* rt-file-drop — зона перетаскивания файлов в common/ui (ViewEncapsulation.None).
2
- Селектор bare `.rt-file-drop` (класс на host) — `:host` в None light-DOM не матчит.
3
- Host — позиционный якорь для абсолютного оверлея, обрамляющего спроецированный
4
- контент. Оверлей pointer-events:none — не перехватывает drag/drop. */
1
+ @layer rt-kit.components {
2
+ /* rt-file-drop — зона перетаскивания файлов в common/ui (ViewEncapsulation.None).
3
+ Селектор bare `.rt-file-drop` (класс на host) — `:host` в None light-DOM не матчит.
4
+ Host — позиционный якорь для абсолютного оверлея, обрамляющего спроецированный
5
+ контент. Оверлей pointer-events:none — не перехватывает drag/drop. */
5
6
 
6
- .rt-file-drop {
7
- position: relative;
8
- display: block;
9
- height: 100%;
7
+ .rt-file-drop {
8
+ --rt-file-drop-radius: var(--rt-radius-lg);
9
+ --rt-file-drop-border-width: var(--rt-border-width-thin);
10
+ --rt-file-drop-transition-duration: var(--rt-duration-fast);
10
11
 
11
- &__overlay {
12
- position: absolute;
13
- z-index: 50;
14
- display: flex;
15
- align-items: center;
16
- justify-content: center;
17
- padding: var(--rt-space-lg);
18
- border-radius: var(--rt-radius-lg);
19
- /* stylelint-disable-next-line property-no-vendor-prefix -- Safari < 18 */
20
- -webkit-backdrop-filter: blur(4px);
21
- backdrop-filter: blur(4px);
22
- background: rgb(0 0 0 / 45%);
12
+ position: relative;
13
+ display: block;
14
+ height: 100%;
23
15
 
24
- /* Отступ от краёв host'а — рамка-приглашение не прижата к границе зоны. */
25
- inset: var(--rt-space-sm);
26
- pointer-events: none;
16
+ &__overlay {
17
+ position: absolute;
18
+ z-index: 50;
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ padding: var(--rt-space-lg);
23
+ border-radius: var(--rt-file-drop-radius);
24
+ /* stylelint-disable-next-line property-no-vendor-prefix -- Safari < 18 */
25
+ -webkit-backdrop-filter: blur(4px);
26
+ backdrop-filter: blur(4px);
27
+ background: rgb(0 0 0 / 45%);
27
28
 
28
- /* Мультизонный режим: вертикальная стопка равных зон-целей. */
29
- &--zoned {
30
- flex-direction: column;
31
- align-items: stretch;
32
- padding: var(--rt-space-md);
33
- gap: var(--rt-space-sm);
29
+ /* Отступ от краёв host'а — рамка-приглашение не прижата к границе зоны. */
30
+ inset: var(--rt-space-sm);
31
+ pointer-events: none;
32
+
33
+ /* Мультизонный режим: вертикальная стопка равных зон-целей. */
34
+ &--zoned {
35
+ flex-direction: column;
36
+ align-items: stretch;
37
+ padding: var(--rt-space-md);
38
+ gap: var(--rt-space-sm);
39
+ }
34
40
  }
35
- }
36
41
 
37
- &__frame {
38
- display: flex;
39
- width: 100%;
40
- height: 100%;
42
+ &__frame {
43
+ display: flex;
44
+ width: 100%;
45
+ height: 100%;
41
46
 
42
- /* border-box: иначе height:100% + padding переполняет контейнер по
43
- вертикали (flex-shrink ужимает только ширину) — зазор рамки сверху/снизу
44
- выходит меньше, чем слева/справа. */
45
- box-sizing: border-box;
46
- align-items: center;
47
- justify-content: center;
48
- padding: var(--rt-space-md);
49
- border: var(--rt-border-width-thin) dashed var(--rt-color-action-on-primary);
50
- border-radius: var(--rt-radius-lg);
51
- gap: var(--rt-space-sm);
52
- text-align: center;
53
- }
47
+ /* border-box: иначе height:100% + padding переполняет контейнер по
48
+ вертикали (flex-shrink ужимает только ширину) — зазор рамки сверху/снизу
49
+ выходит меньше, чем слева/справа. */
50
+ box-sizing: border-box;
51
+ align-items: center;
52
+ justify-content: center;
53
+ padding: var(--rt-space-md);
54
+ border: var(--rt-file-drop-border-width) dashed var(--rt-color-action-on-primary);
55
+ border-radius: var(--rt-file-drop-radius);
56
+ gap: var(--rt-space-sm);
57
+ text-align: center;
58
+ }
54
59
 
55
- &__zone {
56
- display: flex;
57
- min-height: 0;
58
- box-sizing: border-box;
59
- flex: 1 1 0;
60
- flex-direction: column;
61
- align-items: center;
62
- justify-content: center;
63
- padding: var(--rt-space-md);
64
- border: var(--rt-border-width-thin) dashed var(--rt-color-action-on-primary);
65
- border-radius: var(--rt-radius-lg);
66
- gap: var(--rt-space-2xs);
67
- text-align: center;
68
- transition:
69
- border-color var(--rt-duration-fast) ease,
70
- background-color var(--rt-duration-fast) ease;
60
+ &__zone {
61
+ display: flex;
62
+ min-height: 0;
63
+ box-sizing: border-box;
64
+ flex: 1 1 0;
65
+ flex-direction: column;
66
+ align-items: center;
67
+ justify-content: center;
68
+ padding: var(--rt-space-md);
69
+ border: var(--rt-file-drop-border-width) dashed var(--rt-color-action-on-primary);
70
+ border-radius: var(--rt-file-drop-radius);
71
+ gap: var(--rt-space-2xs);
72
+ text-align: center;
73
+ transition:
74
+ border-color var(--rt-file-drop-transition-duration) ease,
75
+ background-color var(--rt-file-drop-transition-duration) ease;
71
76
 
72
- /* Зона под курсором: акцентная сплошная рамка + лёгкая подсветка. */
73
- &--active {
74
- border-style: solid;
75
- border-color: var(--rt-color-action-primary);
76
- background: rgb(255 255 255 / 10%);
77
+ /* Зона под курсором: акцентная сплошная рамка + лёгкая подсветка. */
78
+ &--active {
79
+ border-style: solid;
80
+ border-color: var(--rt-color-action-primary);
81
+ background: rgb(255 255 255 / 10%);
82
+ }
77
83
  }
78
- }
79
84
 
80
- &__label {
81
- color: var(--rt-color-action-on-primary);
82
- font-size: var(--rt-text-lg);
83
- font-weight: var(--rt-font-weight-semibold);
84
- }
85
+ &__label {
86
+ color: var(--rt-color-action-on-primary);
87
+ font-size: var(--rt-text-lg);
88
+ font-weight: var(--rt-font-weight-semibold);
89
+ }
85
90
 
86
- &__sublabel {
87
- color: var(--rt-color-action-on-primary);
88
- font-size: var(--rt-text-sm);
89
- opacity: 0.8;
91
+ &__sublabel {
92
+ color: var(--rt-color-action-on-primary);
93
+ font-size: var(--rt-text-sm);
94
+ opacity: 0.8;
95
+ }
90
96
  }
91
97
  }
@@ -1,25 +1,27 @@
1
- .rt-file-input {
2
- display: flex;
3
- flex-direction: column;
4
- align-items: flex-start;
5
- gap: var(--rt-space-sm);
1
+ @layer rt-kit.components {
2
+ .rt-file-input {
3
+ display: flex;
4
+ flex-direction: column;
5
+ align-items: flex-start;
6
+ gap: var(--rt-space-sm);
6
7
 
7
- &--disabled {
8
- opacity: var(--rt-input-disabled-opacity);
9
- }
8
+ &--disabled {
9
+ opacity: var(--rt-input-disabled-opacity);
10
+ }
10
11
 
11
- /* Список выбранных файлов — карточки rt-file-card внутри rt-file-list. */
12
- &__list {
13
- width: 100%;
14
- }
12
+ /* Список выбранных файлов — карточки rt-file-card внутри rt-file-list. */
13
+ &__list {
14
+ width: 100%;
15
+ }
15
16
 
16
- /* Read-only: имена файлов как плоский текст. */
17
- &__readonly {
18
- color: var(--rt-field-value-color);
19
- font-size: var(--rt-field-value-font-size);
17
+ /* Read-only: имена файлов как плоский текст. */
18
+ &__readonly {
19
+ color: var(--rt-field-value-color);
20
+ font-size: var(--rt-field-value-font-size);
20
21
 
21
- &--empty {
22
- color: var(--rt-field-value-empty-color);
22
+ &--empty {
23
+ color: var(--rt-field-value-empty-color);
24
+ }
23
25
  }
24
26
  }
25
27
  }