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

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 (88) 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 +14 -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 +48 -45
  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 +62 -9
  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 +93 -12
  14. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
  15. package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs +2 -2
  16. package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs.map +1 -1
  17. package/fesm2022/rt-tools-ui-kit-v2-field.mjs +2 -2
  18. package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -1
  19. package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs +4 -1
  20. package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs.map +1 -1
  21. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs +10 -0
  22. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs.map +1 -1
  23. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +76 -5
  24. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
  25. package/fesm2022/rt-tools-ui-kit-v2-input.mjs +2 -2
  26. package/fesm2022/rt-tools-ui-kit-v2-message.mjs +3 -3
  27. package/fesm2022/rt-tools-ui-kit-v2-message.mjs.map +1 -1
  28. package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +4 -4
  29. package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
  30. package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs +37 -16
  31. package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs.map +1 -1
  32. package/fesm2022/rt-tools-ui-kit-v2-table-core.mjs +101 -0
  33. package/fesm2022/rt-tools-ui-kit-v2-table-core.mjs.map +1 -0
  34. package/fesm2022/rt-tools-ui-kit-v2-table.mjs +130 -42
  35. package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
  36. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +41 -4
  37. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
  38. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +2 -0
  39. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
  40. package/package.json +5 -1
  41. package/src/assets/icons-material/bookmark.fill.svg +5 -0
  42. package/src/assets/icons-material/bookmark.svg +5 -0
  43. package/src/assets/icons-material/flag.fill.svg +3 -0
  44. package/src/assets/icons-material/flag.svg +5 -0
  45. package/src/lib/components/aside/footer/CONTEXT.md +27 -0
  46. package/src/lib/components/aside/footer/rt-aside-footer.component.scss +8 -3
  47. package/src/lib/components/aside/header/rt-aside-header.component.scss +11 -3
  48. package/src/lib/components/button/rt-button.directive.scss +5 -1
  49. package/src/lib/components/data-table/CONTEXT.md +8 -2
  50. package/src/lib/components/date-picker/panel/rt-date-panel.component.scss +51 -2
  51. package/src/lib/components/date-range/panel/rt-date-range-panel.component.scss +95 -2
  52. package/src/lib/components/detail-list/CONTEXT.md +3 -0
  53. package/src/lib/components/detail-list/rt-detail-row.component.scss +1 -0
  54. package/src/lib/components/field/CONTEXT.md +4 -2
  55. package/src/lib/components/field/rt-field.component.scss +14 -0
  56. package/src/lib/components/form-control/CONTEXT.md +13 -8
  57. package/src/lib/components/input/rt-input.component.scss +4 -0
  58. package/src/lib/components/input-number/CONTEXT.md +8 -0
  59. package/src/lib/components/input-number/rt-input-number.component.scss +50 -0
  60. package/src/lib/components/message/CONTEXT.md +1 -1
  61. package/src/lib/components/message/rt-message.component.scss +2 -1
  62. package/src/lib/components/multiselect/rt-multiselect.component.scss +21 -0
  63. package/src/lib/components/service-block/stories/component/test-service-block-panel.component.scss +29 -0
  64. package/src/lib/components/stat-tile/CONTEXT.md +11 -6
  65. package/src/lib/components/stat-tile/rt-stat-tile.component.scss +21 -0
  66. package/src/lib/components/stat-tile/stories/component/test-stat-tile-matrix.component.scss +15 -0
  67. package/src/lib/components/table/CONTEXT.md +23 -0
  68. package/src/lib/components/table/copy-cell/CONTEXT.md +32 -0
  69. package/src/lib/components/table/copy-cell/rt-copy-cell.component.scss +26 -0
  70. package/src/lib/components/table/rt-table.component.scss +77 -22
  71. package/src/lib/components/table/stories/component/test-table-pinned.component.scss +76 -0
  72. package/src/lib/components/tabs/CONTEXT.md +18 -16
  73. package/src/lib/components/tabs/rt-tabs.component.scss +25 -1
  74. package/src/styles/_form.scss +10 -0
  75. package/src/styles/_primitives.scss +2 -0
  76. package/src/styles/_semantic.scss +11 -1
  77. package/src/styles/_theme-dark.scss +2 -0
  78. package/styles/tokens.css +95 -9
  79. package/types/rt-tools-ui-kit-v2-core.d.ts +28 -5
  80. package/types/rt-tools-ui-kit-v2-data-table.d.ts +23 -9
  81. package/types/rt-tools-ui-kit-v2-date-picker.d.ts +14 -0
  82. package/types/rt-tools-ui-kit-v2-form-control.d.ts +2 -2
  83. package/types/rt-tools-ui-kit-v2-input-number.d.ts +30 -2
  84. package/types/rt-tools-ui-kit-v2-message.d.ts +1 -1
  85. package/types/rt-tools-ui-kit-v2-stat-tile.d.ts +29 -6
  86. package/types/rt-tools-ui-kit-v2-table-core.d.ts +76 -0
  87. package/types/rt-tools-ui-kit-v2-table.d.ts +52 -18
  88. package/types/rt-tools-ui-kit-v2-tabs.d.ts +26 -0
@@ -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`, когда сортирует другая. */
@@ -395,6 +405,35 @@ declare function hasRowsIn(dataSource: unknown): boolean;
395
405
  * её значение нечем.
396
406
  */
397
407
  declare function cardColumnsOf<TRow>(displayedColumns: ReadonlyArray<string>, columnDefs: ReadonlyArray<CdkColumnDef>, columnsConfig: ReadonlyArray<IRtTable.ColumnConfig>): ReadonlyArray<IRtTableCardColumn<TRow>>;
408
+ /** С какой стороны под закреплённой колонкой лежит прокрученное содержимое. */
409
+ interface IRtTablePinnedEdges {
410
+ /** Прокручено от начала: под колонкой, закреплённой у начала, есть скрытые колонки. */
411
+ start: boolean;
412
+ /** Прокручено не до конца: под колонкой, закреплённой у конца, есть скрытые колонки. */
413
+ end: boolean;
414
+ }
415
+ /**
416
+ * Скрытые края по положению прокрутки. При письме справа налево браузер отдаёт отрицательный
417
+ * сдвиг, поэтому берётся его величина: «начало» — сторона, откуда прокрутка началась.
418
+ */
419
+ declare function hiddenEdges(scrollLeft: number, scrollWidth: number, clientWidth: number): IRtTablePinnedEdges;
420
+ /**
421
+ * Ближайший предок, который прокручивается вбок. Таблица сама не прокручивается: её прокручивает
422
+ * контейнер потребителя, и тень у края зависит от его положения.
423
+ */
424
+ declare function horizontalScrollParentOf(element: Element, view: Window): HTMLElement | null;
425
+ /**
426
+ * Следит за прокруткой контейнера таблицы и за его размерами: тень у края нужна, пока под
427
+ * закреплённой колонкой есть скрытое содержимое, а оно меняется и при прокрутке, и при смене
428
+ * ширины окна или набора колонок.
429
+ */
430
+ declare class RtTablePinnedEdges {
431
+ #private;
432
+ constructor(changed: (edges: IRtTablePinnedEdges) => void);
433
+ /** Находит контейнер прокрутки над `table` и сообщает скрытые края сразу и после каждой перемены. */
434
+ watch(table: HTMLElement, view: Window): void;
435
+ stop(): void;
436
+ }
398
437
  /**
399
438
  * Таблица — стилизованная обёртка над `cdk-table` (`@angular/cdk/table`).
400
439
  *
@@ -418,6 +457,8 @@ export declare class RtTableComponent<TRow> extends CdkTable<TRow> {
418
457
  * остаются висеть вне таблицы. Считается один раз — тег хоста по ходу жизни не меняется.
419
458
  */
420
459
  protected readonly hostRole: 'table' | null;
460
+ /** Скрытые края для модификаторов хоста `--hidden-start` и `--hidden-end`. */
461
+ protected readonly hiddenEdges: Signal<IRtTablePinnedEdges>;
421
462
  /** `true` когда initial-load в полёте и entities ещё нет — рендерим skeleton rows. */
422
463
  protected readonly isInitialLoading: Signal<boolean>;
423
464
  /** `true` когда загрузка завершена и entities пустые — рендерим empty placeholder. */
@@ -754,7 +795,7 @@ export declare class RtTableSettingsPanelComponent {
754
795
  }, never, never, true, never>;
755
796
  }
756
797
  /** Значение условия в том виде, в каком оно хранится и сверяется. */
757
- export type TRtTableFilterValue = string | number | boolean;
798
+ export type TRtTableFilterValue = TRtFilterValue;
758
799
  /** Что приходит в ячейку от человека: дата приходит объектом, остальное — уже готовым значением. */
759
800
  export type TRtTableFilterInput = TRtTableFilterValue | Date | null | undefined;
760
801
  /**
@@ -768,21 +809,14 @@ export declare function filterValueOf(value: TRtTableFilterInput): TRtTableFilte
768
809
  /** Условие по этой колонке из набора либо `null`, когда колонка ничего не отбирает. */
769
810
  export declare function filterOf(filters: readonly IFilterModel<string>[], propertyName: string): IFilterModel<string> | null;
770
811
  /**
771
- * Набор условий после перемены значения по одной колонке.
772
- *
773
- * Пустое значение снимает колонку с отбора, а не уходит пустым условием: условие без значения
774
- * просит потребителя ответить «подходит всё», и потребитель, прочитавший его буквально, не
775
- * вернёт ни одной строки.
776
- *
777
- * Возвращает прежний набор тем же объектом, когда менять нечего: по этому признаку ячейка и
778
- * решает, сообщать ли наружу.
812
+ * Набор условий после перемены значения по одной колонке — по ядру таблиц в режиме `rt-table`.
813
+ * Возвращает прежний набор тем же объектом, когда менять нечего: по этому признаку ячейка и решает,
814
+ * сообщать ли наружу.
779
815
  */
780
816
  export declare function filtersWithValue(filters: readonly IFilterModel<string>[], propertyName: string, operatorType: TFilterOperatorType, value: TRtTableFilterValue): readonly IFilterModel<string>[];
781
817
  /**
782
- * Набор условий после перемены вида сравнения по одной колонке.
783
- *
784
- * Пока значения нет, менять вид сравнения не у чего: отбирать нечего, и набор условий не
785
- * изменился — значит, наружу ничего не уходит.
818
+ * Набор условий после перемены вида сравнения по одной колонке. Значение `rt-table` всегда лежит в
819
+ * условии, так что колонка без условия менять нечего и наружу ничего не уходит.
786
820
  */
787
821
  export declare function filtersWithOperator(filters: readonly IFilterModel<string>[], propertyName: string, operatorType: TFilterOperatorType): readonly IFilterModel<string>[];
788
822
  /** Вид сравнения, с которого колонка начинает: свой, первый разрешённый либо равенство. */
@@ -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;