@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
package/README.md CHANGED
@@ -34,10 +34,24 @@ export const appConfig: ApplicationConfig = {
34
34
  @use '@rt-tools/ui-kit-v2/styles/tokens.css';
35
35
  ```
36
36
 
37
+ Стили кита объявлены слоем каскада `rt-kit` — тремя подслоями в порядке `vendor`, `base`,
38
+ `components`. Правило приложения, объявленное вне слоя, выигрывает у любого правила кита
39
+ независимо от специфичности: перебирать её счётом и обходить чужую вёрстку больше не нужно.
40
+
41
+ Объявления свойств на корне страницы в слой не уходят — их приложение перебивает порядком,
42
+ объявляя своё после `tokens.css`.
43
+
44
+ Подслой `vendor` — для чужого CSS, который чинит кит. Тема редактора текста подключается в
45
+ него, иначе она выигрывает у правил кита и панель редактора перестраивается:
46
+
47
+ ```scss
48
+ @import 'quill/dist/quill.snow.css' layer(rt-kit.vendor);
49
+ ```
50
+
37
51
  Иконки лежат отдельными файлами в `node_modules/@rt-tools/ui-kit-v2/src/assets/icons`: сборка
38
52
  копирует каталог в свою статику, а `provideRtIcons('/icons')` называет адрес, по которому он
39
- опубликован. Реестр забирает их одним проходом на подъёме и склеивает в inline-sprite, поэтому
40
- дальше `<rt-icon>` рисуется без запросов.
53
+ опубликован. Файл забирается тогда, когда значок с этим именем попросила разметка, и дальше
54
+ живёт в inline-sprite: страница платит за те значки, которые нарисовала, а не за весь набор.
41
55
 
42
56
  ```json
43
57
  {
@@ -49,16 +63,25 @@ export const appConfig: ApplicationConfig = {
49
63
 
50
64
  ## Что внутри
51
65
 
52
- **Компоненты** — 72 семейства: поля формы (`rt-input`, `rt-select`, `rt-multiselect`,
66
+ **Компоненты** — 73 семейства: поля формы (`rt-input`, `rt-select`, `rt-multiselect`,
53
67
  `rt-date-picker`, `rt-file-input`, `rt-rich-editor`, `rt-field`), таблица с настройкой колонок и
54
68
  пагинацией, панель правки записи с маршрутом и защитой несохранённого, диалоги, чат с композером,
55
- календарь, шапка страницы с навигацией, тосты, просмотрщик фотографий и остальное.
69
+ календарь, шапка страницы с навигацией, тосты, просмотрщик фотографий, показ размеченного текста
70
+ (`rt-markdown-text`) и остальное.
56
71
 
57
72
  **Дизайн-система** — `src/styles`:
58
73
 
74
+ - `tokens.source.mjs` — вход источника: ступени шкал, назначения и ответ тёмной темы рядом со
75
+ своим назначением. Сами узлы лежат частями рядом — `tokens.scale-*.mjs` для шкал,
76
+ `tokens.light-*.mjs` для назначений, `tokens.dark-layout.mjs` и `tokens.coarse-pointer.mjs`
77
+ для порядка тёмного файла и грубого указателя, — а вход складывает их в два ряда. Три файла
78
+ ниже и имена в `src/lib/tokens/rt-design-tokens.ts` собираются отсюда командой
79
+ `pnpm run build:tokens-source` и руками не правятся;
59
80
  - `_primitives.scss` — шкалы: нейтральные и цветные ряды, отступы, радиусы, тени, типографика;
60
81
  - `_semantic.scss` — назначения поверх шкал (`--rt-color-bg-surface`, `--rt-color-text-muted`);
61
82
  - `_theme-dark.scss` — переопределения назначений для `[data-theme='dark']`;
83
+ - `_theme-dark-rules.scss` — правила тёмной темы, которые свойств не объявляют: подложка экранов
84
+ входа и инверсия логотипа;
62
85
  - `_scrollbar.scss` — оформление полос прокрутки;
63
86
  - `_breakpoints.scss` — SCSS-переменные порогов: свойства оформления в `@media` не работают,
64
87
  поэтому пороги остаются переменными препроцессора;
@@ -84,19 +107,60 @@ export const appConfig: ApplicationConfig = {
84
107
  отдаёт функцией-переводчиком:
85
108
 
86
109
  ```typescript
87
- import { provideRtKitLabels, RtKitLabelKey, RtKitLabelParams } from '@rt-tools/ui-kit-v2';
110
+ import { provideRtKitLabels, TRtKitLabelKey, TRtKitLabelParams } from '@rt-tools/ui-kit-v2';
88
111
 
89
112
  provideRtKitLabels({
90
- translator: computed(() => (key: RtKitLabelKey, params?: RtKitLabelParams) => myDictionary(key, params)),
113
+ translator: computed(() => (key: TRtKitLabelKey, params?: TRtKitLabelParams) => myDictionary(key, params)),
91
114
  locale: myLocale, // Signal<string>; ею кит форматирует даты
92
115
  });
93
116
  ```
94
117
 
95
118
  Способ доставки — дело приложения: Transloco, `$localize`, собственный словарь. Кит знает
96
- только ключи (`RtKitLabelKey` — перечень выводится из английского набора, поэтому опечатка не
119
+ только ключи (`TRtKitLabelKey` — перечень выводится из английского набора, поэтому опечатка не
97
120
  доживает до рантайма) и то, что на них отвечают готовой строкой: подстановки вида `{{name}}`
98
121
  переводчик делает сам. Подпись, которой он не дал, берётся английской — поштучно, не набором.
99
122
 
123
+ ## Настройка компонента снаружи
124
+
125
+ Компонент не берёт ступень шкалы там, где рисует себя: между ступенью и местом употребления
126
+ стоит своё свойство компонента — `--rt-<блок>-<что>`. Объявлено оно в корне блока, значением по
127
+ умолчанию стоит та самая ступень, поэтому без единой строки от приложения кит выглядит так же,
128
+ как выглядел.
129
+
130
+ Своими свойствами покрыты четыре рода назначений:
131
+
132
+ | Род | Имя свойства | Где применяется |
133
+ | ------------- | ----------------------------------- | --------------------------------------------------------------- |
134
+ | скругление | `--rt-<блок>-*-radius` | рамка блока, пузырь, значок, плашка, кольцо аватара |
135
+ | тень | `--rt-<блок>-*-shadow` | карточка, панель в перекрытии, кольцо фокуса, приподнятая точка |
136
+ | толщина рамки | `--rt-<блок>-*-border-width` | обводка, разделитель строк, дорожка, полоса под вкладкой |
137
+ | длительность | `--rt-<блок>-*-transition-duration` | переход цвета, фона, размера и сдвига |
138
+
139
+ Отступ, кегль и габариты остаются на ступенях намеренно: роль отступа одним словом не
140
+ называется, и свойство под неё вышло бы именем места, а не именем роли.
141
+
142
+ Приложение переопределяет свойство правилом той же цели и большей силы — наследования тут мало,
143
+ объявление живёт на самом блоке:
144
+
145
+ ```css
146
+ .my-app .rt-button {
147
+ --rt-btn-radius: 0;
148
+ }
149
+ ```
150
+
151
+ Часть, которую браузер уносит из поддерева блока — панель списка, меню, перетаскиваемая
152
+ строка, — объявляет свойство на себе, и целиться в неё надо тоже отдельно:
153
+
154
+ ```css
155
+ .my-app .rt-select__panel {
156
+ --rt-select-panel-shadow: none;
157
+ }
158
+ ```
159
+
160
+ Что ни один компонент этот порядок не обошёл, проверяет `pnpm run check:tokens-styles`: ступень,
161
+ взятая в стилях компонента напрямую, роняет прогон. Показ на витрине — страница
162
+ `Foundation / Design Tokens / Component Props`.
163
+
100
164
  ## Свой логотип
101
165
 
102
166
  `rt-logo` рисует то, что даст приложение: своих начертаний кит не везёт.
@@ -121,3 +185,19 @@ pnpm exec nx test @rt-tools/ui-kit-v2
121
185
  pnpm exec nx lint @rt-tools/ui-kit-v2
122
186
  pnpm exec stylelint "projects/ui-kit-v2/**/*.scss"
123
187
  ```
188
+
189
+ ## Переход на слой каскада
190
+
191
+ Стили кита переехали в слой `rt-kit`, и это меняет вид у тех, кто настраивал кит поверх. Ошибки
192
+ сборки не будет — узнаётся глазами, поэтому названо здесь прямо.
193
+
194
+ - **Правило приложения теперь выигрывает у правила кита независимо от специфичности.** Место,
195
+ где кит перебивали поднятой специфичностью или обходом чужой вёрстки, продолжит работать, но
196
+ надобности в этом больше нет: обычное правило сильнее любого правила из слоя.
197
+ - **Правило кита теперь проигрывает и чужой библиотеке, чей CSS объявлен вне слоя.** Тема
198
+ редактора текста подключается в подслой `vendor` — импортом с именем подслоя; подключённая
199
+ мимо, она перестраивает панель редактора.
200
+ - **Кит больше не настаивает на своём восклицательным знаком.** Таблица в карточном виде
201
+ перестала перебивать `min-width` приложения: приложению, которому нужен и горизонтальный
202
+ скролл, и карточный вид, остаётся сузить свой селектор до широкого экрана.
203
+