@rt-tools/ui-kit-v2 0.39.0 → 0.39.1

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 (68) hide show
  1. package/fesm2022/rt-tools-ui-kit-v2-aside.mjs +4 -4
  2. package/fesm2022/rt-tools-ui-kit-v2-aside.mjs.map +1 -1
  3. package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +2 -2
  4. package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
  5. package/fesm2022/rt-tools-ui-kit-v2-core.mjs +2 -0
  6. package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
  7. package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +5 -5
  8. package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -1
  9. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +45 -44
  10. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
  11. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +2 -2
  12. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
  13. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +2 -2
  14. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
  15. package/fesm2022/rt-tools-ui-kit-v2-field.mjs +2 -2
  16. package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -1
  17. package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs +4 -1
  18. package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs.map +1 -1
  19. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs +10 -0
  20. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs.map +1 -1
  21. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +2 -2
  22. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
  23. package/fesm2022/rt-tools-ui-kit-v2-input.mjs +2 -2
  24. package/fesm2022/rt-tools-ui-kit-v2-message.mjs +3 -3
  25. package/fesm2022/rt-tools-ui-kit-v2-message.mjs.map +1 -1
  26. package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +4 -4
  27. package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
  28. package/fesm2022/rt-tools-ui-kit-v2-table-core.mjs +101 -0
  29. package/fesm2022/rt-tools-ui-kit-v2-table-core.mjs.map +1 -0
  30. package/fesm2022/rt-tools-ui-kit-v2-table.mjs +36 -37
  31. package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
  32. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +41 -4
  33. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
  34. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +2 -0
  35. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
  36. package/package.json +5 -1
  37. package/src/assets/icons-material/bookmark.fill.svg +5 -0
  38. package/src/assets/icons-material/bookmark.svg +5 -0
  39. package/src/assets/icons-material/flag.fill.svg +3 -0
  40. package/src/assets/icons-material/flag.svg +5 -0
  41. package/src/lib/components/aside/footer/CONTEXT.md +27 -0
  42. package/src/lib/components/aside/footer/rt-aside-footer.component.scss +8 -3
  43. package/src/lib/components/aside/header/rt-aside-header.component.scss +11 -3
  44. package/src/lib/components/button/rt-button.directive.scss +5 -1
  45. package/src/lib/components/data-table/CONTEXT.md +8 -2
  46. package/src/lib/components/field/CONTEXT.md +4 -2
  47. package/src/lib/components/field/rt-field.component.scss +14 -0
  48. package/src/lib/components/form-control/CONTEXT.md +13 -8
  49. package/src/lib/components/input/rt-input.component.scss +4 -0
  50. package/src/lib/components/message/CONTEXT.md +1 -1
  51. package/src/lib/components/message/rt-message.component.scss +2 -1
  52. package/src/lib/components/multiselect/rt-multiselect.component.scss +21 -0
  53. package/src/lib/components/service-block/stories/component/test-service-block-panel.component.scss +29 -0
  54. package/src/lib/components/table/CONTEXT.md +3 -0
  55. package/src/lib/components/table/copy-cell/CONTEXT.md +32 -0
  56. package/src/lib/components/table/copy-cell/rt-copy-cell.component.scss +26 -0
  57. package/src/lib/components/tabs/CONTEXT.md +18 -16
  58. package/src/lib/components/tabs/rt-tabs.component.scss +25 -1
  59. package/src/styles/_form.scss +10 -0
  60. package/src/styles/_semantic.scss +2 -1
  61. package/styles/tokens.css +29 -9
  62. package/types/rt-tools-ui-kit-v2-core.d.ts +20 -5
  63. package/types/rt-tools-ui-kit-v2-data-table.d.ts +23 -9
  64. package/types/rt-tools-ui-kit-v2-form-control.d.ts +2 -2
  65. package/types/rt-tools-ui-kit-v2-message.d.ts +1 -1
  66. package/types/rt-tools-ui-kit-v2-table-core.d.ts +76 -0
  67. package/types/rt-tools-ui-kit-v2-table.d.ts +21 -18
  68. package/types/rt-tools-ui-kit-v2-tabs.d.ts +26 -0
@@ -0,0 +1,76 @@
1
+ import { IFilterModel, ISortModel, TFilterOperatorType, TListSortOrderType, TNullable } from "@rt-tools/utils";
2
+ /** Значение условия в том виде, в каком оно хранится и сверяется. Одно для обеих таблиц. */
3
+ export type TRtFilterValue = string | number | boolean;
4
+ /**
5
+ * Какие значения поля снимают условие колонки.
6
+ *
7
+ * `empty-string` — только пустая строка; `0` и `false` остаются значениями, так ведёт себя `rt-table`.
8
+ * `falsy` — любое ложное значение, как в первом ките; так ведёт себя `rt-data-table`.
9
+ */
10
+ export type TRtFilterEmptyMode = 'empty-string' | 'falsy';
11
+ /** Снимает ли это значение условие колонки при режиме таблицы. */
12
+ export declare function rtIsEmptyFilterValue(value: unknown, mode: TRtFilterEmptyMode): boolean;
13
+ /** Условие по этой колонке из набора либо `null`, когда колонка ничего не отбирает. */
14
+ export declare function rtFilterOf<KEY extends string>(filters: ReadonlyArray<IFilterModel<KEY>>, propertyName: KEY): IFilterModel<KEY> | null;
15
+ /**
16
+ * Набор условий после перемены значения по одной колонке.
17
+ *
18
+ * Пустое по режиму значение снимает колонку с отбора, а не уходит пустым условием: условие без
19
+ * значения просит потребителя ответить «подходит всё», и потребитель, прочитавший его буквально, не
20
+ * вернёт ни одной строки.
21
+ *
22
+ * Возвращает прежний набор тем же объектом, когда менять нечего: по этому признаку таблица и решает,
23
+ * сообщать ли наружу.
24
+ */
25
+ export declare function rtFiltersWithValue<KEY extends string>(filters: ReadonlyArray<IFilterModel<KEY>>, propertyName: KEY, operatorType: TFilterOperatorType, value: TRtFilterValue, mode: TRtFilterEmptyMode): ReadonlyArray<IFilterModel<KEY>>;
26
+ /**
27
+ * Набор условий после перемены вида сравнения по одной колонке.
28
+ *
29
+ * Колонка с условием меняет в нём вид сравнения. Колонка без условия, но с набранным значением,
30
+ * получает условие; без значения отбирать нечего, и набор не меняется — наружу ничего не уходит.
31
+ */
32
+ export declare function rtFiltersWithOperator<KEY extends string>(filters: ReadonlyArray<IFilterModel<KEY>>, propertyName: KEY, operatorType: TFilterOperatorType, value: IFilterModel<KEY>['value'], mode: TRtFilterEmptyMode): ReadonlyArray<IFilterModel<KEY>>;
33
+ /** Ключи записей списка. */
34
+ export declare function rtKeysOf<ENTITY_TYPE, KEY extends keyof ENTITY_TYPE>(entities: ReadonlyArray<ENTITY_TYPE>, keyExp: KEY): Array<ENTITY_TYPE[KEY]>;
35
+ /** Записи страницы, добавленные к отмеченным; повторов не будет. */
36
+ export declare function rtWithPageEntities<ENTITY_TYPE, KEY extends keyof ENTITY_TYPE>(selected: ReadonlyArray<ENTITY_TYPE>, page: ReadonlyArray<ENTITY_TYPE>, keyExp: KEY): ENTITY_TYPE[];
37
+ /** Отмеченные без записей страницы. */
38
+ export declare function rtWithoutPageEntities<ENTITY_TYPE, KEY extends keyof ENTITY_TYPE>(selected: ReadonlyArray<ENTITY_TYPE>, page: ReadonlyArray<ENTITY_TYPE>, keyExp: KEY): ENTITY_TYPE[];
39
+ /** Отмеченные после отметки или снятия одной записи. */
40
+ export declare function rtWithEntity<ENTITY_TYPE, KEY extends keyof ENTITY_TYPE>(selected: ReadonlyArray<ENTITY_TYPE>, entity: ENTITY_TYPE, checked: boolean, keyExp: KEY): ENTITY_TYPE[];
41
+ /** Хоть одна запись страницы отмечена. */
42
+ export declare function rtAnyOnPage<ENTITY_TYPE, KEY extends keyof ENTITY_TYPE>(page: ReadonlyArray<ENTITY_TYPE>, selectedKeys: ReadonlyArray<ENTITY_TYPE[KEY]>, keyExp: KEY): boolean;
43
+ /** Отмечены все записи страницы; пустая страница у первого кита считается отмеченной целиком. */
44
+ export declare function rtAllOnPage<ENTITY_TYPE, KEY extends keyof ENTITY_TYPE>(page: ReadonlyArray<ENTITY_TYPE>, selectedKeys: ReadonlyArray<ENTITY_TYPE[KEY]>, keyExp: KEY): boolean;
45
+ /** Записи первой страницы, чьи ключи названы приложением как отмеченные заранее. */
46
+ export declare function rtPresetEntities<ENTITY_TYPE, KEY extends keyof ENTITY_TYPE>(entities: ReadonlyArray<ENTITY_TYPE>, keys: ReadonlyArray<ENTITY_TYPE[KEY]>, keyExp: KEY): ENTITY_TYPE[];
47
+ /** Отметки после смены страницы под «отметить все»: пришедшие строки отмечаются, кроме исключённых. */
48
+ export declare function rtSelectedAfterPage<ENTITY_TYPE, KEY extends keyof ENTITY_TYPE>(selected: ReadonlyArray<ENTITY_TYPE>, page: ReadonlyArray<ENTITY_TYPE>, excluded: ReadonlyArray<ENTITY_TYPE>, keyExp: KEY): ENTITY_TYPE[];
49
+ /** Исключения после отметки или снятия одной записи под «отметить все». */
50
+ export declare function rtExcludedAfterEntity<ENTITY_TYPE, KEY extends keyof ENTITY_TYPE>(excluded: ReadonlyArray<ENTITY_TYPE>, entity: ENTITY_TYPE, checked: boolean, keyExp: KEY): ENTITY_TYPE[];
51
+ /** Исключения после отметки всей страницы под «отметить все»: её записи уходят из исключений. */
52
+ export declare function rtExcludedAfterPageMarked<ENTITY_TYPE, KEY extends keyof ENTITY_TYPE>(excluded: ReadonlyArray<ENTITY_TYPE>, page: ReadonlyArray<ENTITY_TYPE>, keyExp: KEY): ENTITY_TYPE[];
53
+ /** Исключения после снятия всей страницы под «отметить все»: её записи становятся исключениями. */
54
+ export declare function rtExcludedAfterPageUnmarked<ENTITY_TYPE, KEY extends keyof ENTITY_TYPE>(excluded: ReadonlyArray<ENTITY_TYPE>, page: ReadonlyArray<ENTITY_TYPE>, keyExp: KEY): ENTITY_TYPE[];
55
+ /** Значение атрибута `aria-sort` шапки: направление либо его отсутствие. Одно для обеих таблиц. */
56
+ export type TRtAriaSort = 'ascending' | 'descending' | 'none';
57
+ /**
58
+ * Что просит нажатие на шапку после убывания.
59
+ *
60
+ * `clears` — порядок снимается: по возрастанию → по убыванию → без порядка, так ведёт себя `rt-table`.
61
+ * `repeats` — снова по возрастанию, как в первом ките; так ведёт себя `rt-data-table`.
62
+ */
63
+ export type TRtSortCycle = 'clears' | 'repeats';
64
+ /** Порядок стоит по этой колонке. */
65
+ export declare function rtIsSortedBy(current: TNullable<ISortModel<string>>, propertyName: TNullable<string>): boolean;
66
+ /** Направление порядка по этой колонке либо `null`, когда порядок стоит по другой или не стоит вовсе. */
67
+ export declare function rtSortDirectionOf(current: TNullable<ISortModel<string>>, propertyName: string): TListSortOrderType | null;
68
+ /**
69
+ * Следующий порядок после нажатия на шапку колонки.
70
+ *
71
+ * Оба круга смотрят на нажатую колонку: другая колонка встаёт по возрастанию, та, что идёт по
72
+ * возрастанию, — по убыванию. Круги расходятся только после убывания.
73
+ */
74
+ export declare function rtNextSort(current: TNullable<ISortModel<string>>, propertyName: string, cycle: TRtSortCycle): ISortModel<string> | null;
75
+ /** Значение `aria-sort` шапки: скринридер называет порядок колонки, а не только её имя. */
76
+ export declare function rtAriaSortOf(current: TNullable<ISortModel<string>>, propertyName: string): TRtAriaSort;
@@ -4,6 +4,7 @@ import { InputSignal, InputSignalWithTransform, ModelSignal, OutputEmitterRef, P
4
4
  import { IRtIconButton } from "@rt-tools/ui-kit-v2/icon-button";
5
5
  import { IRtIcon, TRtKitLabelMap } from "@rt-tools/ui-kit-v2/core";
6
6
  import { IFilterModel, ISortModel, TFilterOperatorType, TListSortOrderType } from "@rt-tools/utils";
7
+ import { TRtAriaSort, TRtFilterValue } from "@rt-tools/ui-kit-v2/table-core";
7
8
  import { CdkColumnDef, CdkTable, CdkTableDataSourceInput } from "@angular/cdk/table";
8
9
  import * as i1 from "@rt-tools/ui-kit-v2/radius";
9
10
  import { Observable } from "rxjs";
@@ -59,6 +60,11 @@ export declare class RtCopyCellComponent {
59
60
  * для hover.
60
61
  */
61
62
  readonly revealOnHover: InputSignalWithTransform<boolean, BooleanInput>;
63
+ /**
64
+ * Ячейка в рамке поля ввода: фон, рамка и радиус поля, значение кеглем поля, кнопка видна
65
+ * всегда. Так адрес для копирования стоит в форме панели, где строки таблицы для наведения нет.
66
+ */
67
+ readonly framed: InputSignalWithTransform<boolean, BooleanInput>;
62
68
  constructor();
63
69
  /**
64
70
  * Замер обрезки в момент наведения.
@@ -89,6 +95,11 @@ export declare class RtCopyCellComponent {
89
95
  "required": false;
90
96
  "isSignal": true;
91
97
  };
98
+ "framed": {
99
+ "alias": "framed";
100
+ "required": false;
101
+ "isSignal": true;
102
+ };
92
103
  }, {}, never, ["*"], true, never>;
93
104
  }
94
105
  export declare namespace IRtTable {
@@ -157,12 +168,11 @@ export declare namespace IRtTable {
157
168
  }
158
169
  }
159
170
  /** Значение атрибута `aria-sort` заголовка: направление либо его отсутствие. */
160
- export type TRtTableAriaSort = 'ascending' | 'descending' | 'none';
171
+ export type TRtTableAriaSort = TRtAriaSort;
161
172
  /**
162
- * Следующее состояние сортировки при нажатии на заголовок колонки.
163
- *
164
- * Порядок кругов: по возрастанию → по убыванию → без сортировки. Третье состояние
165
- * нужно, чтобы пользователь мог вернуть исходный порядок, не перезагружая список.
173
+ * Следующее состояние сортировки при нажатии на заголовок колонки — по ядру таблиц, круг `clears`:
174
+ * по возрастанию → по убыванию → без сортировки. Третье состояние нужно, чтобы пользователь мог
175
+ * вернуть исходный порядок, не перезагружая список.
166
176
  */
167
177
  export declare function nextSort(current: ISortModel<string> | null, propertyName: string): ISortModel<string> | null;
168
178
  /** Направление сортировки по этой колонке либо `null`, когда сортирует другая. */
@@ -754,7 +764,7 @@ export declare class RtTableSettingsPanelComponent {
754
764
  }, never, never, true, never>;
755
765
  }
756
766
  /** Значение условия в том виде, в каком оно хранится и сверяется. */
757
- export type TRtTableFilterValue = string | number | boolean;
767
+ export type TRtTableFilterValue = TRtFilterValue;
758
768
  /** Что приходит в ячейку от человека: дата приходит объектом, остальное — уже готовым значением. */
759
769
  export type TRtTableFilterInput = TRtTableFilterValue | Date | null | undefined;
760
770
  /**
@@ -768,21 +778,14 @@ export declare function filterValueOf(value: TRtTableFilterInput): TRtTableFilte
768
778
  /** Условие по этой колонке из набора либо `null`, когда колонка ничего не отбирает. */
769
779
  export declare function filterOf(filters: readonly IFilterModel<string>[], propertyName: string): IFilterModel<string> | null;
770
780
  /**
771
- * Набор условий после перемены значения по одной колонке.
772
- *
773
- * Пустое значение снимает колонку с отбора, а не уходит пустым условием: условие без значения
774
- * просит потребителя ответить «подходит всё», и потребитель, прочитавший его буквально, не
775
- * вернёт ни одной строки.
776
- *
777
- * Возвращает прежний набор тем же объектом, когда менять нечего: по этому признаку ячейка и
778
- * решает, сообщать ли наружу.
781
+ * Набор условий после перемены значения по одной колонке — по ядру таблиц в режиме `rt-table`.
782
+ * Возвращает прежний набор тем же объектом, когда менять нечего: по этому признаку ячейка и решает,
783
+ * сообщать ли наружу.
779
784
  */
780
785
  export declare function filtersWithValue(filters: readonly IFilterModel<string>[], propertyName: string, operatorType: TFilterOperatorType, value: TRtTableFilterValue): readonly IFilterModel<string>[];
781
786
  /**
782
- * Набор условий после перемены вида сравнения по одной колонке.
783
- *
784
- * Пока значения нет, менять вид сравнения не у чего: отбирать нечего, и набор условий не
785
- * изменился — значит, наружу ничего не уходит.
787
+ * Набор условий после перемены вида сравнения по одной колонке. Значение `rt-table` всегда лежит в
788
+ * условии, так что колонка без условия менять нечего и наружу ничего не уходит.
786
789
  */
787
790
  export declare function filtersWithOperator(filters: readonly IFilterModel<string>[], propertyName: string, operatorType: TFilterOperatorType): readonly IFilterModel<string>[];
788
791
  /** Вид сравнения, с которого колонка начинает: свой, первый разрешённый либо равенство. */
@@ -36,6 +36,11 @@ export declare namespace IRtTabs {
36
36
  type AnimationDuration = string | number | null;
37
37
  /** Сторона размещения header-контрола относительно полосы вкладок. */
38
38
  type ControlSide = 'left' | 'right';
39
+ /**
40
+ * Где стоит бейдж вкладки: `inline` — после подписи, как прежде; `overlay` — кружком над правым
41
+ * верхним углом иконки, не меняя ширины вкладки. У вкладки без иконки бейдж всегда `inline`.
42
+ */
43
+ type BadgePosition = 'inline' | 'overlay';
39
44
  /** Семантический цвет иконки/бейджа вкладки — маппится на палитру `rt-icon`. */
40
45
  type TitleColor = IRtIcon.Color;
41
46
  }
@@ -66,8 +71,15 @@ export declare class RtTabDirective {
66
71
  readonly glyph: InputSignal<string | null>;
67
72
  /** Семантический цвет иконки заголовка. */
68
73
  readonly iconColor: InputSignal<IRtTabs.TitleColor>;
74
+ /**
75
+ * Залитый рисунок иконки — уходит в `fill` у `rt-icon`. Значок Material заливается всегда, имя
76
+ * кита — в материальном наборе: в своём наборе у него один рисунок. Дефолт `false`.
77
+ */
78
+ readonly iconFill: InputSignalWithTransform<boolean, BooleanInput>;
69
79
  /** Значение бейджа справа от заголовка (число/строка). `null` — без бейджа. */
70
80
  readonly badge: InputSignal<string | number | null>;
81
+ /** Где стоит бейдж: после подписи или кружком над углом иконки. Дефолт `'inline'`. */
82
+ readonly badgePosition: InputSignal<IRtTabs.BadgePosition>;
71
83
  /**
72
84
  * Подсказка при наведении на бейдж. Подсказка самой кнопки занята неверной вкладкой,
73
85
  * поэтому у бейджа своя. Пусто — подсказки нет.
@@ -120,6 +132,10 @@ export declare class RtTabDirective {
120
132
  * Крестик — отдельная кнопка, и без имени диктор назвал бы её просто «кнопка».
121
133
  */
122
134
  readonly closeLabel: Signal<string>;
135
+ /** У вкладки есть иконка — по имени кита или по значку Material. */
136
+ readonly hasIcon: Signal<boolean>;
137
+ /** Бейдж стоит над иконкой: попросили `overlay`, бейдж есть и есть над чем стоять. */
138
+ readonly badgeOverlay: Signal<boolean>;
123
139
  /** Крестик рисуется только у доступной вкладки: отключённую закрыть нельзя. */
124
140
  readonly showClose: Signal<boolean>;
125
141
  static ɵfac: i0.ɵɵFactoryDeclaration<RtTabDirective, never>;
@@ -154,11 +170,21 @@ export declare class RtTabDirective {
154
170
  "required": false;
155
171
  "isSignal": true;
156
172
  };
173
+ "iconFill": {
174
+ "alias": "iconFill";
175
+ "required": false;
176
+ "isSignal": true;
177
+ };
157
178
  "badge": {
158
179
  "alias": "badge";
159
180
  "required": false;
160
181
  "isSignal": true;
161
182
  };
183
+ "badgePosition": {
184
+ "alias": "badgePosition";
185
+ "required": false;
186
+ "isSignal": true;
187
+ };
162
188
  "badgeTitle": {
163
189
  "alias": "badgeTitle";
164
190
  "required": false;