@rt-tools/ui-kit-v2 0.39.1 → 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 (38) hide show
  1. package/fesm2022/rt-tools-ui-kit-v2-core.mjs +12 -0
  2. package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
  3. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +3 -1
  4. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
  5. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +60 -7
  6. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
  7. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +91 -10
  8. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
  9. package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs +2 -2
  10. package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs.map +1 -1
  11. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +76 -5
  12. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
  13. package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs +37 -16
  14. package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs.map +1 -1
  15. package/fesm2022/rt-tools-ui-kit-v2-table.mjs +94 -5
  16. package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
  17. package/package.json +1 -1
  18. package/src/lib/components/date-picker/panel/rt-date-panel.component.scss +51 -2
  19. package/src/lib/components/date-range/panel/rt-date-range-panel.component.scss +95 -2
  20. package/src/lib/components/detail-list/CONTEXT.md +3 -0
  21. package/src/lib/components/detail-list/rt-detail-row.component.scss +1 -0
  22. package/src/lib/components/input-number/CONTEXT.md +8 -0
  23. package/src/lib/components/input-number/rt-input-number.component.scss +50 -0
  24. package/src/lib/components/stat-tile/CONTEXT.md +11 -6
  25. package/src/lib/components/stat-tile/rt-stat-tile.component.scss +21 -0
  26. package/src/lib/components/stat-tile/stories/component/test-stat-tile-matrix.component.scss +15 -0
  27. package/src/lib/components/table/CONTEXT.md +20 -0
  28. package/src/lib/components/table/rt-table.component.scss +77 -22
  29. package/src/lib/components/table/stories/component/test-table-pinned.component.scss +76 -0
  30. package/src/styles/_primitives.scss +2 -0
  31. package/src/styles/_semantic.scss +9 -0
  32. package/src/styles/_theme-dark.scss +2 -0
  33. package/styles/tokens.css +66 -0
  34. package/types/rt-tools-ui-kit-v2-core.d.ts +9 -1
  35. package/types/rt-tools-ui-kit-v2-date-picker.d.ts +14 -0
  36. package/types/rt-tools-ui-kit-v2-input-number.d.ts +30 -2
  37. package/types/rt-tools-ui-kit-v2-stat-tile.d.ts +29 -6
  38. package/types/rt-tools-ui-kit-v2-table.d.ts +31 -0
@@ -1,5 +1,6 @@
1
+ import { BooleanInput } from "@angular/cdk/coercion";
1
2
  import * as i0 from "@angular/core";
2
- import { InputSignal, Signal } from "@angular/core";
3
+ import { InputSignal, InputSignalWithTransform, Signal } from "@angular/core";
3
4
  import { IRtIcon, TRtKitLabelMap } from "@rt-tools/ui-kit-v2/core";
4
5
  /**
5
6
  * Контракты `rt-stat-tile` — KPI-плитка с базой сравнения.
@@ -9,16 +10,23 @@ import { IRtIcon, TRtKitLabelMap } from "@rt-tools/ui-kit-v2/core";
9
10
  export declare namespace IRtStatTile {
10
11
  /** Направление изменения — определяет цвет и иконку строки дельты. */
11
12
  type Direction = 'up' | 'down' | 'flat' | 'unknown';
13
+ /**
14
+ * Единица изменения: проценты к базе или процентные пункты — разница двух
15
+ * долей (занятость с 68 % до 78 % выросла на 10 п.п., а не на 15 %).
16
+ */
17
+ type Unit = 'percent' | 'points';
12
18
  /**
13
19
  * Изменение к одной базе сравнения.
14
20
  *
15
- * - `percent` — уже посчитанное изменение в процентах; `null` означает
16
- * «база нулевая или данных нет», и плитка рисует «—», а не «+100 %».
21
+ * - `percent` — уже посчитанное изменение в единицах `unit`; `null` означает
22
+ * «база нулевая или данных нет», и строка не рисуется вовсе.
23
+ * - `unit` — единица числа, по умолчанию проценты.
17
24
  * - `label` — подпись базы («к прошлому периоду», «к прошлому году»).
18
25
  * - `baseline` — необязательное «было X» той же строкой.
19
26
  */
20
27
  interface Delta {
21
28
  readonly percent: number | null;
29
+ readonly unit?: Unit;
22
30
  readonly label: string;
23
31
  readonly baseline?: string;
24
32
  }
@@ -40,17 +48,22 @@ interface IDeltaRow {
40
48
  * готовыми строками, `percent` — посчитанным числом. Так плитка не знает ни про
41
49
  * валюты, ни про методику метрик и остаётся общей для любого домена.
42
50
  *
43
- * Нулевая база показывается как «—»: «+100 %» от нуля вводит в заблуждение, а
44
- * «∞» нечитаемо.
51
+ * Строка с неизвестной базой не рисуется: «+100 %» от нуля вводит в
52
+ * заблуждение, а «—» рядом с цифрой читается как поломка.
53
+ *
54
+ * Цвет строки говорит, хорошо изменение или плохо, а стрелка — только знак
55
+ * числа: у метрики, где рост хуже (отмены, потерянная выручка), рост красный и
56
+ * со стрелкой вверх.
45
57
  */
46
58
  export declare class RtStatTileComponent {
47
59
  #private;
60
+ /** Подписи кита для шаблона — приставка годового чипа. */
61
+ protected readonly t: Signal<TRtKitLabelMap>;
48
62
  /**
49
63
  * Дельта к предыдущему периоду — рядом со значением. Пустая база (`percent`
50
64
  * = null) не рисуется вовсе: «—» рядом с цифрой читается как поломка, а не
51
65
  * как «сравнивать не с чем».
52
66
  */
53
- protected readonly t: Signal<TRtKitLabelMap>;
54
67
  protected readonly primaryDelta: Signal<IDeltaRow | null>;
55
68
  /** Годовое сравнение — отдельным компактным чипом, без слов в строке. */
56
69
  protected readonly yearDelta: Signal<IDeltaRow | null>;
@@ -72,6 +85,11 @@ export declare class RtStatTileComponent {
72
85
  readonly deltaSecondary: InputSignal<IRtStatTile.Delta | null>;
73
86
  /** Пояснение методики — нативный title на иконке подсказки. */
74
87
  readonly hint: InputSignal<string | null>;
88
+ /**
89
+ * Рост метрики плох для владельца (отмены, потерянная выручка): рост обеих
90
+ * строк красный, падение зелёное. Стрелка по-прежнему показывает знак числа.
91
+ */
92
+ readonly growthIsWorse: InputSignalWithTransform<boolean, BooleanInput>;
75
93
  static ɵfac: i0.ɵɵFactoryDeclaration<RtStatTileComponent, never>;
76
94
  static ɵcmp: i0.ɵɵComponentDeclaration<RtStatTileComponent, "rt-stat-tile", never, {
77
95
  "label": {
@@ -104,6 +122,11 @@ export declare class RtStatTileComponent {
104
122
  "required": false;
105
123
  "isSignal": true;
106
124
  };
125
+ "growthIsWorse": {
126
+ "alias": "growthIsWorse";
127
+ "required": false;
128
+ "isSignal": true;
129
+ };
107
130
  }, {}, never, never, true, never>;
108
131
  }
109
132
  export {};
@@ -405,6 +405,35 @@ declare function hasRowsIn(dataSource: unknown): boolean;
405
405
  * её значение нечем.
406
406
  */
407
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
+ }
408
437
  /**
409
438
  * Таблица — стилизованная обёртка над `cdk-table` (`@angular/cdk/table`).
410
439
  *
@@ -428,6 +457,8 @@ export declare class RtTableComponent<TRow> extends CdkTable<TRow> {
428
457
  * остаются висеть вне таблицы. Считается один раз — тег хоста по ходу жизни не меняется.
429
458
  */
430
459
  protected readonly hostRole: 'table' | null;
460
+ /** Скрытые края для модификаторов хоста `--hidden-start` и `--hidden-end`. */
461
+ protected readonly hiddenEdges: Signal<IRtTablePinnedEdges>;
431
462
  /** `true` когда initial-load в полёте и entities ещё нет — рендерим skeleton rows. */
432
463
  protected readonly isInitialLoading: Signal<boolean>;
433
464
  /** `true` когда загрузка завершена и entities пустые — рендерим empty placeholder. */