@rt-tools/ui-kit-v2 0.11.0 → 0.13.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 (167) hide show
  1. package/README.md +110 -5
  2. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +947 -0
  3. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -0
  4. package/fesm2022/rt-tools-ui-kit-v2.mjs +12236 -8927
  5. package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
  6. package/package.json +8 -1
  7. package/rt-tools-ui-kit-v2-0.13.0.tgz +0 -0
  8. package/src/assets/fonts/montserrat-cyrillic-ext-wght-italic.woff2 +0 -0
  9. package/src/assets/fonts/montserrat-cyrillic-ext-wght-normal.woff2 +0 -0
  10. package/src/assets/fonts/montserrat-cyrillic-wght-italic.woff2 +0 -0
  11. package/src/assets/fonts/montserrat-cyrillic-wght-normal.woff2 +0 -0
  12. package/src/assets/fonts/montserrat-latin-ext-wght-italic.woff2 +0 -0
  13. package/src/assets/fonts/montserrat-latin-ext-wght-normal.woff2 +0 -0
  14. package/src/assets/fonts/montserrat-latin-wght-italic.woff2 +0 -0
  15. package/src/assets/fonts/montserrat-latin-wght-normal.woff2 +0 -0
  16. package/src/assets/icons/arrows.svg +9 -0
  17. package/src/assets/icons/equals.svg +8 -0
  18. package/src/assets/icons/user-off.svg +16 -0
  19. package/src/assets/icons-material/NOTICE.md +6 -2
  20. package/src/assets/icons-material/arrow-left.fill.svg +3 -0
  21. package/src/assets/icons-material/arrow-left.svg +1 -1
  22. package/src/assets/icons-material/arrow-right.fill.svg +3 -0
  23. package/src/assets/icons-material/arrow-right.svg +3 -0
  24. package/src/assets/icons-material/arrows.fill.svg +5 -0
  25. package/src/assets/icons-material/arrows.svg +5 -0
  26. package/src/assets/icons-material/ban.fill.svg +5 -0
  27. package/src/assets/icons-material/ban.svg +1 -1
  28. package/src/assets/icons-material/bars.fill.svg +3 -0
  29. package/src/assets/icons-material/bars.svg +1 -1
  30. package/src/assets/icons-material/check.fill.svg +3 -0
  31. package/src/assets/icons-material/check.svg +1 -1
  32. package/src/assets/icons-material/chevron-down.fill.svg +3 -0
  33. package/src/assets/icons-material/chevron-down.svg +1 -1
  34. package/src/assets/icons-material/chevron-left.fill.svg +3 -0
  35. package/src/assets/icons-material/chevron-left.svg +1 -1
  36. package/src/assets/icons-material/chevron-right.fill.svg +3 -0
  37. package/src/assets/icons-material/chevron-right.svg +1 -1
  38. package/src/assets/icons-material/close.fill.svg +3 -0
  39. package/src/assets/icons-material/close.svg +1 -1
  40. package/src/assets/icons-material/cloud-upload.fill.svg +5 -0
  41. package/src/assets/icons-material/cloud-upload.svg +1 -1
  42. package/src/assets/icons-material/cog.fill.svg +5 -0
  43. package/src/assets/icons-material/cog.svg +1 -1
  44. package/src/assets/icons-material/copy.fill.svg +5 -0
  45. package/src/assets/icons-material/copy.svg +1 -1
  46. package/src/assets/icons-material/ellipsis-h.fill.svg +5 -0
  47. package/src/assets/icons-material/ellipsis-h.svg +1 -1
  48. package/src/assets/icons-material/ellipsis-v.fill.svg +5 -0
  49. package/src/assets/icons-material/ellipsis-v.svg +1 -1
  50. package/src/assets/icons-material/email.fill.svg +5 -0
  51. package/src/assets/icons-material/email.svg +5 -0
  52. package/src/assets/icons-material/equals.fill.svg +3 -0
  53. package/src/assets/icons-material/equals.svg +3 -0
  54. package/src/assets/icons-material/external-link.fill.svg +5 -0
  55. package/src/assets/icons-material/external-link.svg +1 -1
  56. package/src/assets/icons-material/eye-slash.fill.svg +5 -0
  57. package/src/assets/icons-material/eye-slash.svg +1 -1
  58. package/src/assets/icons-material/eye.fill.svg +5 -0
  59. package/src/assets/icons-material/eye.svg +1 -1
  60. package/src/assets/icons-material/ico-download.fill.svg +5 -0
  61. package/src/assets/icons-material/ico-download.svg +1 -1
  62. package/src/assets/icons-material/ico-plus.fill.svg +3 -0
  63. package/src/assets/icons-material/ico-plus.svg +1 -1
  64. package/src/assets/icons-material/info-circle.fill.svg +5 -0
  65. package/src/assets/icons-material/info-circle.svg +1 -1
  66. package/src/assets/icons-material/pencil.fill.svg +5 -0
  67. package/src/assets/icons-material/pencil.svg +1 -1
  68. package/src/assets/icons-material/refresh.fill.svg +5 -0
  69. package/src/assets/icons-material/refresh.svg +1 -1
  70. package/src/assets/icons-material/search.fill.svg +5 -0
  71. package/src/assets/icons-material/search.svg +1 -1
  72. package/src/assets/icons-material/star.fill.svg +3 -0
  73. package/src/assets/icons-material/star.svg +1 -1
  74. package/src/assets/icons-material/sync.fill.svg +5 -0
  75. package/src/assets/icons-material/sync.svg +1 -1
  76. package/src/assets/icons-material/table.fill.svg +5 -0
  77. package/src/assets/icons-material/table.svg +1 -1
  78. package/src/assets/icons-material/tag.fill.svg +5 -0
  79. package/src/assets/icons-material/tag.svg +1 -1
  80. package/src/assets/icons-material/trash.fill.svg +5 -0
  81. package/src/assets/icons-material/trash.svg +1 -1
  82. package/src/assets/icons-material/user-off.fill.svg +5 -0
  83. package/src/assets/icons-material/user-off.svg +5 -0
  84. package/src/assets/icons-material/user.fill.svg +5 -0
  85. package/src/assets/icons-material/user.svg +1 -1
  86. package/src/lib/components/CONTEXT.md +19 -16
  87. package/src/lib/components/accordion/CONTEXT.md +31 -0
  88. package/src/lib/components/accordion/rt-accordion.component.scss +61 -0
  89. package/src/lib/components/action-bar/CONTEXT.md +53 -0
  90. package/src/lib/components/action-bar/rt-action-bar-holder.component.scss +70 -0
  91. package/src/lib/components/action-bar/rt-action-bar.component.scss +122 -0
  92. package/src/lib/components/aside/CONTEXT.md +5 -1
  93. package/src/lib/components/aside/_rt-aside-overlay.scss +9 -0
  94. package/src/lib/components/aside/header/rt-aside-header.component.scss +18 -2
  95. package/src/lib/components/aside/rt-aside.component.scss +5 -1
  96. package/src/lib/components/autocomplete/CONTEXT.md +2 -1
  97. package/src/lib/components/button/CONTEXT.md +11 -11
  98. package/src/lib/components/checkbox/rt-checkbox.component.scss +5 -1
  99. package/src/lib/components/data-list/CONTEXT.md +122 -0
  100. package/src/lib/components/data-list/rt-data-list.component.scss +57 -0
  101. package/src/lib/components/data-list/settings/rt-data-list-settings-aside.component.scss +256 -0
  102. package/src/lib/components/data-list/toolbar/rt-data-list-toolbar.component.scss +128 -0
  103. package/src/lib/components/data-table/CONTEXT.md +102 -0
  104. package/src/lib/components/data-table/cell/rt-data-table-cell.component.scss +115 -0
  105. package/src/lib/components/data-table/filter-cell/rt-data-table-filter-cell.component.scss +51 -0
  106. package/src/lib/components/data-table/header-cell/rt-data-table-header-cell.component.scss +111 -0
  107. package/src/lib/components/data-table/rt-data-table.component.scss +263 -0
  108. package/src/lib/components/date-picker/rt-date-picker.component.scss +13 -0
  109. package/src/lib/components/delta-view/CONTEXT.md +1 -1
  110. package/src/lib/components/dialog/CONTEXT.md +4 -0
  111. package/src/lib/components/dynamic-list/CONTEXT.md +90 -0
  112. package/src/lib/components/dynamic-list/rt-dynamic-list.component.scss +123 -0
  113. package/src/lib/components/empty-state/CONTEXT.md +5 -0
  114. package/src/lib/components/empty-state/rt-empty-state.component.scss +19 -5
  115. package/src/lib/components/file-card/rt-file-card.component.scss +14 -0
  116. package/src/lib/components/file-drop/rt-file-drop.component.scss +44 -8
  117. package/src/lib/components/icon-button/rt-icon-button.component.scss +28 -4
  118. package/src/lib/components/input/rt-input.component.scss +25 -1
  119. package/src/lib/components/input-number/rt-input-number.component.scss +13 -0
  120. package/src/lib/components/menu/CONTEXT.md +10 -0
  121. package/src/lib/components/menu/rt-menu-item.component.scss +35 -3
  122. package/src/lib/components/menu/rt-menu.component.scss +15 -5
  123. package/src/lib/components/multiselect/CONTEXT.md +3 -0
  124. package/src/lib/components/multiselect/rt-multiselect.component.scss +58 -1
  125. package/src/lib/components/pagination/CONTEXT.md +4 -1
  126. package/src/lib/components/pagination/rt-pagination.component.scss +43 -13
  127. package/src/lib/components/radio-button/CONTEXT.md +42 -0
  128. package/src/lib/components/radio-button/rt-radio-button.component.scss +105 -0
  129. package/src/lib/components/scroll-area/CONTEXT.md +52 -0
  130. package/src/lib/components/scroll-area/rt-scroll-area.component.scss +69 -0
  131. package/src/lib/components/select/CONTEXT.md +8 -1
  132. package/src/lib/components/select/rt-select.component.scss +110 -7
  133. package/src/lib/components/table/CONTEXT.md +46 -1
  134. package/src/lib/components/table/filter-header/CONTEXT.md +64 -0
  135. package/src/lib/components/table/filter-header/rt-table-filter-header.component.scss +76 -0
  136. package/src/lib/components/table/rt-table.component.scss +32 -1
  137. package/src/lib/components/tag/CONTEXT.md +9 -0
  138. package/src/lib/components/tag/rt-tag.component.scss +38 -0
  139. package/src/lib/components/textarea/CONTEXT.md +1 -1
  140. package/src/lib/components/toolbar/CONTEXT.md +3 -0
  141. package/src/lib/components/toolbar/rt-toolbar.component.scss +9 -2
  142. package/src/lib/components/tooltip/CONTEXT.md +4 -4
  143. package/src/lib/components/tooltip/rt-tooltip.component.scss +2 -2
  144. package/src/{lib → rich-editor/lib}/components/chat/CONTEXT.md +1 -1
  145. package/src/{lib → rich-editor/lib}/components/message-composer/CONTEXT.md +5 -1
  146. package/src/{lib → rich-editor/lib}/components/message-composer/rt-message-composer.component.scss +9 -0
  147. package/src/{lib → rich-editor/lib}/components/rich-editor/CONTEXT.md +2 -2
  148. package/src/styles/_coarse-pointer.scss +15 -0
  149. package/src/styles/_coexist.scss +28 -0
  150. package/src/styles/_fonts.scss +99 -0
  151. package/src/styles/_index.scss +13 -0
  152. package/src/styles/_preset-material.scss +201 -26
  153. package/src/styles/_primitives.scss +41 -5
  154. package/src/styles/_scrollbar.scss +16 -12
  155. package/src/styles/_semantic-lists.scss +89 -0
  156. package/src/styles/_semantic.scss +80 -9
  157. package/src/styles/_theme-dark.scss +36 -0
  158. package/src/styles/_theme-scope.scss +111 -0
  159. package/src/styles/tokens.coexist.scss +3 -0
  160. package/src/styles/tokens.package.scss +6 -0
  161. package/styles/tokens.coexist.css +27 -0
  162. package/styles/tokens.css +5443 -43
  163. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +529 -0
  164. package/types/rt-tools-ui-kit-v2.d.ts +2778 -1375
  165. package/rt-tools-ui-kit-v2-0.11.0.tgz +0 -0
  166. /package/src/{lib → rich-editor/lib}/components/chat/rt-chat.component.scss +0 -0
  167. /package/src/{lib → rich-editor/lib}/components/rich-editor/rt-rich-editor.component.scss +0 -0
package/README.md CHANGED
@@ -14,19 +14,30 @@
14
14
  pnpm add @rt-tools/ui-kit-v2 @rt-tools/core @rt-tools/utils
15
15
  ```
16
16
 
17
- `quill` нужен только тем, кто ставит `rt-rich-editor`: редактор грузит его динамически, и без
18
- пакета остальной кит работает.
17
+ `quill` нужен только тем, кто ставит редактор текста. Он и два компонента на нём — поле ввода
18
+ сообщения и чат — стоят отдельным входом `@rt-tools/ui-kit-v2/rich-editor`:
19
+
20
+ ```typescript
21
+ import { RtChatComponent, RtMessageComposerComponent, RtRichEditorComponent } from '@rt-tools/ui-kit-v2/rich-editor';
22
+ ```
23
+
24
+ Основной вход quill не называет, и приложение без этих трёх компонентов собирается без него.
19
25
 
20
26
  ## Подключение
21
27
 
22
28
  ```typescript
29
+ import { provideRtIDBStorage } from '@rt-tools/core';
23
30
  import { provideRtIcons } from '@rt-tools/ui-kit-v2';
24
31
 
25
32
  export const appConfig: ApplicationConfig = {
26
- providers: [provideHttpClient(), provideRtIcons()],
33
+ providers: [provideHttpClient(), provideRtIcons(), provideRtIDBStorage()],
27
34
  };
28
35
  ```
29
36
 
37
+ `provideRtIDBStorage()` нужен `rt-data-table`, `rt-data-list` и `rt-table`: они хранят настройку
38
+ колонок в базе браузера. Без него страница с ними пустая, а в консоли стоит
39
+ `NG0201: No provider found for _IDBStorageService`.
40
+
30
41
  Оформление — одной строкой в точке входа приложения; в пакете лежит и собранный CSS со всеми
31
42
  свойствами, и исходники партиалов:
32
43
 
@@ -41,6 +52,39 @@ export const appConfig: ApplicationConfig = {
41
52
  Объявления свойств на корне страницы в слой не уходят — их приложение перебивает порядком,
42
53
  объявляя своё после `tokens.css`.
43
54
 
55
+ Тёмная тема кита включается только признаком на корне: `[data-theme='dark']` или класс
56
+ `html.rt-theme-dark`. Системную настройку CSS кита не читает: по ней признак ставит `ThemeService`
57
+ в режиме `auto`. Своя тема Material или класс тёмной темы приложения кит не переключают.
58
+ На узле ниже корня `[data-theme='dark']` даёт тёмный кусок страницы.
59
+
60
+ Под материальным набором тёмная тема не перебивает цвета, которые набор берёт из `--mat-sys-*`.
61
+ Поиск, поля отбора и пагинация следуют теме Material приложения, а она отвечает тёмной сама.
62
+ Без темы Material на странице набор рисует тёмные цвета кита.
63
+
64
+ Оба признака на корне ставят на `body` фон-градиент тёмной темы. Приложению со своим фоном
65
+ страницы его нужно перебить своим правилом `body`.
66
+
67
+ Приложение, которое переезжает с `@rt-tools/ui-kit` и пока держит оба кита, подключает ещё один
68
+ файл — файл совместимости, он лежит рядом с `tokens.css`:
69
+
70
+ ```scss
71
+ @use '@rt-tools/ui-kit-v2/styles/tokens.coexist.css';
72
+ ```
73
+
74
+ Первый кит объявляет на корне страницы десять ступеней с теми же именами — `--rt-radius-*` и
75
+ `--rt-shadow-sm/md/lg` — и своими значениями. Его файл подключается позже, и внутри компонентов
76
+ второго кита действуют его ступени: скругление поля отбора выходит 8px вместо 4px. Файл
77
+ совместимости ставит значения второго кита на узел материального набора (`.rt-preset-material`,
78
+ `[data-preset='material']`), и такой узел рисуется своей шкалой, что бы ни лежало на корне. Набор
79
+ может стоять и на самом корне страницы: селектор файла весит на ступень больше корня первого кита,
80
+ и порядок подключения ничего не решает.
81
+
82
+ С этим файлом приложению не нужны свои скругления поверх кита: поле отбора, поле поиска и кнопки
83
+ страниц берут значения второго кита сами.
84
+
85
+ Файл удаляется вместе с первым китом. Он повторяет значения шкалы второго кита, поэтому без первого
86
+ кита вид от его удаления не меняется.
87
+
44
88
  Подслой `vendor` — для чужого CSS, который чинит кит. Тема редактора текста подключается в
45
89
  него, иначе она выигрывает у правил кита и панель редактора перестраивается:
46
90
 
@@ -48,6 +92,25 @@ export const appConfig: ApplicationConfig = {
48
92
  @import 'quill/dist/quill.snow.css' layer(rt-kit.vendor);
49
93
  ```
50
94
 
95
+ Сброс приложения вида `* { margin: 0; padding: 0; }` вне слоя выигрывает у кита по тому же
96
+ правилу. Он обнуляет поля компонентов: ячейки таблицы, пункты меню и кнопки теряют отступы.
97
+ Сброс кладётся в тот же подслой `vendor`. Подслой нижний, и кит перебивает сброс своими
98
+ правилами, а остальная вёрстка приложения получает его как прежде:
99
+
100
+ ```scss
101
+ @layer rt-kit.vendor {
102
+ * {
103
+ margin: 0;
104
+ padding: 0;
105
+ }
106
+ }
107
+ ```
108
+
109
+ Полосу прокрутки кит рисует только своим узлам — с классом на `rt-`. Узлы приложения он не
110
+ трогает, и их `::-webkit-scrollbar` работает и в Chrome. Своя полоса приложения, поставленная всем
111
+ узлам, кладётся в тот же подслой `vendor`: вне слоя она перебивает полосы кита, и таблица
112
+ перестаёт прятать полосу, которую человек выключил в настройке колонок.
113
+
51
114
  Иконки лежат отдельными файлами в `node_modules/@rt-tools/ui-kit-v2/src/assets/icons`: сборка
52
115
  копирует каталог в свою статику, а `provideRtIcons('/icons')` называет адрес, по которому он
53
116
  опубликован. Файл забирается тогда, когда значок с этим именем попросила разметка, и дальше
@@ -61,6 +124,36 @@ export const appConfig: ApplicationConfig = {
61
124
  }
62
125
  ```
63
126
 
127
+ Приложение, которое объявляет материальный набор оформления, публикует и второй набор значков —
128
+ рисунки Material из `src/assets/icons-material`. Его адрес по умолчанию `/icons-material`, свой
129
+ называется вторым аргументом: `provideRtIcons('/icons', '/icons-material')`. Без этой записи
130
+ кит рисует свои значки и под материальным набором: пустого места не будет, но и рисунка Material
131
+ тоже.
132
+
133
+ ```json
134
+ {
135
+ "glob": "**/*.svg",
136
+ "input": "node_modules/@rt-tools/ui-kit-v2/src/assets/icons-material",
137
+ "output": "icons-material"
138
+ }
139
+ ```
140
+
141
+ Шрифт кит везёт сам. Начертания Montserrat лежат в
142
+ `node_modules/@rt-tools/ui-kit-v2/src/assets/fonts`, объявления `@font-face` — в слое оформления,
143
+ и адрес в них относительный: сборка приложения разрешает его от места файла стилей и уносит
144
+ файлы в свою статику сама. Отдельной настройки это не просит — в отличие от значков, которые
145
+ публикуются по адресу.
146
+
147
+ Начертание переменное, одно на все насыщенности: кит объявляет веса 400, 500, 600 и 700 и берёт
148
+ их из одной оси. Подмножеств четыре — кириллица, кириллическое расширение, латиница и латинское
149
+ расширение, каждое в прямом и наклонном начертании; браузер качает только те, чьи знаки на
150
+ странице встретились. Всего 332 КБ, русской странице достаются два файла из восьми.
151
+
152
+ Письменностей, которых в Montserrat нет, кит не везёт: тайская, хангыль и деванагари добавляются
153
+ приложением — своим `@font-face` и своим именем в конце `--rt-font-family-sans`. Именовать
154
+ семейство, которого кит не везёт, он не будет: названное и не привезённое рисуется тем, что
155
+ случайно стоит на машине читателя, а отступы и высоты строк кита рассчитаны под Montserrat.
156
+
64
157
  ## Что внутри
65
158
 
66
159
  **Компоненты** — 73 семейства: поля формы (`rt-input`, `rt-select`, `rt-multiselect`,
@@ -79,16 +172,24 @@ export const appConfig: ApplicationConfig = {
79
172
  `pnpm run build:tokens-source` и руками не правятся;
80
173
  - `_primitives.scss` — шкалы: нейтральные и цветные ряды, отступы, радиусы, тени, типографика;
81
174
  - `_semantic.scss` — назначения поверх шкал (`--rt-color-bg-surface`, `--rt-color-text-muted`);
175
+ - `_coarse-pointer.scss` — поправка назначений для сенсорного экрана: поле ввода не мельче 16px;
82
176
  - `_theme-dark.scss` — переопределения назначений для `[data-theme='dark']`;
83
177
  - `_theme-dark-rules.scss` — правила тёмной темы, которые свойств не объявляют: подложка экранов
84
178
  входа и инверсия логотипа;
179
+ - `_theme-scope.scss` — те же назначения для узла, а не для корня: под ними живёт метка
180
+ `rtTheme`, и каждое правило объявляет весь набор целиком;
85
181
  - `_scrollbar.scss` — оформление полос прокрутки;
86
182
  - `_breakpoints.scss` — SCSS-переменные порогов: свойства оформления в `@media` не работают,
87
183
  поэтому пороги остаются переменными препроцессора;
88
184
  - `_mixins.scss` — миксины поверхности карточки и её заголовка;
89
185
  - `_login.scss` — раскладка страницы входа.
90
186
 
91
- Всё, кроме `_breakpoints.scss`, собирает `_index.scss` — из него и собран `tokens.css`. Пороги и
187
+ `_coexist.scss` — ступени второго кита на узле материального набора на время переезда с первого
188
+ кита. Его собирает тот же генератор из источника шкалы, а файл совместимости собран из него
189
+ отдельно.
190
+
191
+ Всё, кроме `_breakpoints.scss` и `_coexist.scss`, собирает `_index.scss` — из него и собран
192
+ `tokens.css`. Пороги и
92
193
  миксины подключаются партиалами напрямую:
93
194
 
94
195
  ```scss
@@ -96,9 +197,13 @@ export const appConfig: ApplicationConfig = {
96
197
  @use 'pkg:@rt-tools/ui-kit-v2/styles/mixins';
97
198
  ```
98
199
 
99
- **Среда исполнения** — `ThemeService` (тема на `<html data-theme>`, переживает перезагрузку),
200
+ **Среда исполнения** — `ThemeService` (три состояния темы, признак на `<html data-theme>`,
201
+ переживает перезагрузку), `RtThemeScopeDirective` (метка `rtTheme`: своя тема у узла),
100
202
  `BreakpointsService` (сигналы совпадения по ширине), `NotificationBus` (шина тостов).
101
203
 
204
+ **Умолчания кита** — `provideRtKit`: приложение одной раздачей задаёт тему старта и вид кнопки и
205
+ шторы. Раздача необязательна, а вход, написанный в разметке, её перебивает.
206
+
102
207
  **Подписи** — 131 ключ: кнопки диалогов, тексты ошибок поля, расшифровки иконок для
103
208
  скринридера. Своего языка у кита нет и быть не может — его знает приложение.
104
209