@rt-tools/ui-kit-v2 0.4.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 (108) hide show
  1. package/README.md +71 -0
  2. package/fesm2022/rt-tools-ui-kit-v2.mjs +395 -188
  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/CONTEXT.md +22 -0
  23. package/src/lib/components/container/rt-container.component.scss +91 -87
  24. package/src/lib/components/counter/rt-counter.component.scss +14 -12
  25. package/src/lib/components/counter-row/rt-counter-row.component.scss +31 -27
  26. package/src/lib/components/date-picker/rt-date-picker.component.scss +73 -71
  27. package/src/lib/components/delta-view/rt-delta-view.component.scss +27 -25
  28. package/src/lib/components/detail-list/rt-detail-list.component.scss +8 -6
  29. package/src/lib/components/detail-list/rt-detail-row.component.scss +18 -16
  30. package/src/lib/components/dialog/footer/rt-dialog-footer.component.scss +19 -17
  31. package/src/lib/components/dialog/header/rt-dialog-header.component.scss +27 -25
  32. package/src/lib/components/dialog/rt-dialog.component.scss +59 -56
  33. package/src/lib/components/download-link/rt-download-link.component.scss +32 -27
  34. package/src/lib/components/empty-state/rt-empty-state.component.scss +50 -46
  35. package/src/lib/components/field/rt-field.component.scss +63 -61
  36. package/src/lib/components/file-card/rt-file-card.component.scss +84 -78
  37. package/src/lib/components/file-drop/rt-file-drop.component.scss +83 -77
  38. package/src/lib/components/file-input/rt-file-input.component.scss +20 -18
  39. package/src/lib/components/file-list/rt-file-list.component.scss +9 -7
  40. package/src/lib/components/filter-control/rt-filter-control.component.scss +16 -14
  41. package/src/lib/components/header/rt-header.component.scss +61 -55
  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/rt-input.component.scss +102 -98
  47. package/src/lib/components/input-number/rt-input-number.component.scss +84 -82
  48. package/src/lib/components/live-badge/rt-live-badge.component.scss +27 -23
  49. package/src/lib/components/logo/rt-logo.component.scss +54 -52
  50. package/src/lib/components/menu/rt-menu-confirm-dialog.component.scss +30 -28
  51. package/src/lib/components/menu/rt-menu-item.component.scss +47 -42
  52. package/src/lib/components/menu/rt-menu.component.scss +23 -15
  53. package/src/lib/components/message/rt-message.component.scss +53 -49
  54. package/src/lib/components/message-composer/rt-message-composer.component.scss +55 -49
  55. package/src/lib/components/money-list/rt-money-list.component.scss +13 -9
  56. package/src/lib/components/money-list/rt-money-row.component.scss +23 -19
  57. package/src/lib/components/multiselect/rt-multiselect.component.scss +169 -161
  58. package/src/lib/components/night-grid/rt-night-grid.component.scss +47 -42
  59. package/src/lib/components/note/rt-note.component.scss +15 -11
  60. package/src/lib/components/notifications-bell/rt-notifications-bell.component.scss +34 -27
  61. package/src/lib/components/page-header/rt-page-header-mobile.scss +142 -134
  62. package/src/lib/components/page-header/rt-page-header-submenu.scss +130 -123
  63. package/src/lib/components/page-header/rt-page-header.component.scss +221 -210
  64. package/src/lib/components/pagination/rt-pagination.component.scss +88 -81
  65. package/src/lib/components/photo-viewer/rt-photo-viewer.component.scss +109 -105
  66. package/src/lib/components/rich-editor/rt-rich-editor.component.scss +63 -59
  67. package/src/lib/components/section-nav/rt-section-nav.component.scss +53 -47
  68. package/src/lib/components/select/rt-select.component.scss +146 -138
  69. package/src/lib/components/skeleton/rt-skeleton.component.scss +50 -41
  70. package/src/lib/components/skeleton-wrapper/rt-skeleton-wrapper.component.scss +8 -6
  71. package/src/lib/components/spinner/rt-spinner.component.scss +35 -32
  72. package/src/lib/components/split-button/rt-split-button.component.scss +74 -62
  73. package/src/lib/components/stat-tile/rt-stat-tile.component.scss +95 -91
  74. package/src/lib/components/stepper/rt-stepper.component.scss +107 -101
  75. package/src/lib/components/table/copy-cell/rt-copy-cell.component.scss +34 -30
  76. package/src/lib/components/table/rt-table.component.scss +260 -252
  77. package/src/lib/components/table/settings-aside/rt-table-settings-aside.component.scss +7 -5
  78. package/src/lib/components/table/settings-panel/rt-table-settings-panel.component.scss +71 -61
  79. package/src/lib/components/table/sort-header/CONTEXT.md +40 -0
  80. package/src/lib/components/table/sort-header/rt-table-sort-header.component.scss +31 -29
  81. package/src/lib/components/tabs/CONTEXT.md +5 -0
  82. package/src/lib/components/tabs/rt-tabs.component.scss +184 -175
  83. package/src/lib/components/tag/rt-tag.component.scss +97 -92
  84. package/src/lib/components/textarea/rt-textarea.component.scss +62 -60
  85. package/src/lib/components/theme-toggle/rt-theme-toggle.component.scss +7 -5
  86. package/src/lib/components/thread-list/rt-thread-list.component.scss +221 -212
  87. package/src/lib/components/timeline/rt-timeline.component.scss +82 -76
  88. package/src/lib/components/toast/CONTEXT.md +8 -0
  89. package/src/lib/components/toast/rt-toast.component.scss +169 -160
  90. package/src/lib/components/toast/rt-toaster.component.scss +37 -35
  91. package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +129 -122
  92. package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +97 -91
  93. package/src/lib/components/toolbar/rt-toolbar.component.scss +56 -54
  94. package/src/lib/components/tooltip/rt-tooltip.component.scss +20 -15
  95. package/src/lib/components/welcome-dialog/rt-welcome-dialog.component.scss +46 -44
  96. package/src/lib/components/workspace/rt-workspace.component.scss +139 -131
  97. package/src/lib/components/workspace-details/rt-workspace-details.component.scss +105 -101
  98. package/src/styles/_index.scss +4 -0
  99. package/src/styles/_layers.scss +22 -0
  100. package/src/styles/_login.scss +87 -85
  101. package/src/styles/_mixins.scss +1 -1
  102. package/src/styles/_primitives.scss +126 -67
  103. package/src/styles/_scrollbar.scss +21 -19
  104. package/src/styles/_semantic.scss +140 -56
  105. package/src/styles/_theme-dark.scss +60 -27
  106. package/styles/tokens.css +628 -408
  107. package/types/rt-tools-ui-kit-v2.d.ts +9 -16
  108. package/rt-tools-ui-kit-v2-0.4.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
  }