@rt-tools/ui-kit-v2 0.1.0 → 0.3.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/fesm2022/rt-tools-ui-kit-v2.mjs +313 -205
  2. package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
  3. package/package.json +1 -1
  4. package/rt-tools-ui-kit-v2-0.3.0.tgz +0 -0
  5. package/src/lib/components/CONTEXT.md +49 -0
  6. package/src/lib/components/aside/CONTEXT.md +51 -0
  7. package/src/lib/components/aside/_rt-aside-overlay.scss +88 -0
  8. package/src/lib/components/aside/rt-aside.component.scss +19 -94
  9. package/src/lib/components/aside-section/CONTEXT.md +26 -0
  10. package/src/lib/components/autocomplete/CONTEXT.md +58 -0
  11. package/src/lib/components/bar-list/CONTEXT.md +27 -0
  12. package/src/lib/components/bar-list/rt-bar-list.component.scss +5 -2
  13. package/src/lib/components/bottom-sheet/CONTEXT.md +54 -0
  14. package/src/lib/components/bottom-sheet/rt-bottom-sheet.component.scss +53 -53
  15. package/src/lib/components/button/CONTEXT.md +53 -0
  16. package/src/lib/components/button/rt-button.directive.scss +16 -0
  17. package/src/lib/components/calendar/CONTEXT.md +41 -0
  18. package/src/lib/components/calendar/rt-calendar.component.scss +96 -99
  19. package/src/lib/components/card/CONTEXT.md +34 -0
  20. package/src/lib/components/card/rt-card.component.scss +5 -2
  21. package/src/lib/components/chat/CONTEXT.md +41 -0
  22. package/src/lib/components/checkbox/CONTEXT.md +37 -0
  23. package/src/lib/components/checkbox/rt-checkbox.component.scss +7 -2
  24. package/src/lib/components/collapsible-text/CONTEXT.md +29 -0
  25. package/src/lib/components/confirm-popover/CONTEXT.md +47 -0
  26. package/src/lib/components/container/CONTEXT.md +42 -0
  27. package/src/lib/components/container/rt-container.component.scss +5 -69
  28. package/src/lib/components/counter/CONTEXT.md +40 -0
  29. package/src/lib/components/counter/rt-counter.component.scss +10 -9
  30. package/src/lib/components/counter-row/CONTEXT.md +24 -0
  31. package/src/lib/components/counter-row/rt-counter-row.component.scss +23 -22
  32. package/src/lib/components/date-picker/CONTEXT.md +41 -0
  33. package/src/lib/components/delta-view/CONTEXT.md +31 -0
  34. package/src/lib/components/detail-list/CONTEXT.md +29 -0
  35. package/src/lib/components/dialog/CONTEXT.md +50 -0
  36. package/src/lib/components/dialog/rt-dialog.component.scss +6 -2
  37. package/src/lib/components/download-link/CONTEXT.md +26 -0
  38. package/src/lib/components/empty-state/CONTEXT.md +35 -0
  39. package/src/lib/components/field/CONTEXT.md +72 -0
  40. package/src/lib/components/file-card/CONTEXT.md +28 -0
  41. package/src/lib/components/file-drop/CONTEXT.md +39 -0
  42. package/src/lib/components/file-input/CONTEXT.md +36 -0
  43. package/src/lib/components/file-list/CONTEXT.md +15 -0
  44. package/src/lib/components/filter-control/CONTEXT.md +33 -0
  45. package/src/lib/components/form-control/CONTEXT.md +50 -0
  46. package/src/lib/components/header/CONTEXT.md +36 -0
  47. package/src/lib/components/icon/CONTEXT.md +46 -0
  48. package/src/lib/components/icon/rt-icon.component.scss +3 -5
  49. package/src/lib/components/icon-button/CONTEXT.md +49 -0
  50. package/src/lib/components/icon-button/rt-icon-button.component.scss +14 -1
  51. package/src/lib/components/info-item/CONTEXT.md +30 -0
  52. package/src/lib/components/input/CONTEXT.md +47 -0
  53. package/src/lib/components/input-number/CONTEXT.md +52 -0
  54. package/src/lib/components/live-badge/CONTEXT.md +31 -0
  55. package/src/lib/components/live-badge/rt-live-badge.component.scss +5 -2
  56. package/src/lib/components/logo/CONTEXT.md +42 -0
  57. package/src/lib/components/logo/rt-logo.component.scss +4 -6
  58. package/src/lib/components/menu/CONTEXT.md +65 -0
  59. package/src/lib/components/message/CONTEXT.md +35 -0
  60. package/src/lib/components/message/rt-message.component.scss +5 -2
  61. package/src/lib/components/message-composer/CONTEXT.md +46 -0
  62. package/src/lib/components/money-list/CONTEXT.md +32 -0
  63. package/src/lib/components/multiselect/CONTEXT.md +43 -0
  64. package/src/lib/components/night-grid/CONTEXT.md +31 -0
  65. package/src/lib/components/night-grid/rt-night-grid.component.scss +5 -2
  66. package/src/lib/components/note/CONTEXT.md +27 -0
  67. package/src/lib/components/notifications-bell/CONTEXT.md +29 -0
  68. package/src/lib/components/page-header/CONTEXT.md +33 -0
  69. package/src/lib/components/pagination/CONTEXT.md +43 -0
  70. package/src/lib/components/photo-viewer/CONTEXT.md +30 -0
  71. package/src/lib/components/photo-viewer/rt-photo-viewer.component.scss +95 -96
  72. package/src/lib/components/popover/CONTEXT.md +54 -0
  73. package/src/lib/components/rich-editor/CONTEXT.md +36 -0
  74. package/src/lib/components/section-nav/CONTEXT.md +27 -0
  75. package/src/lib/components/section-nav/rt-section-nav.component.scss +7 -1
  76. package/src/lib/components/select/CONTEXT.md +54 -0
  77. package/src/lib/components/skeleton/CONTEXT.md +41 -0
  78. package/src/lib/components/skeleton-wrapper/CONTEXT.md +24 -0
  79. package/src/lib/components/skeleton-wrapper/rt-skeleton-wrapper.component.scss +5 -1
  80. package/src/lib/components/spinner/CONTEXT.md +39 -0
  81. package/src/lib/components/split-button/CONTEXT.md +39 -0
  82. package/src/lib/components/stat-tile/CONTEXT.md +35 -0
  83. package/src/lib/components/stat-tile/rt-stat-tile.component.scss +5 -2
  84. package/src/lib/components/stepper/CONTEXT.md +36 -0
  85. package/src/lib/components/stepper/rt-stepper.component.scss +5 -2
  86. package/src/lib/components/table/CONTEXT.md +53 -0
  87. package/src/lib/components/table/settings-aside/rt-table-settings-aside.component.scss +4 -2
  88. package/src/lib/components/table/settings-panel/rt-table-settings-panel.component.scss +1 -1
  89. package/src/lib/components/tabs/CONTEXT.md +56 -0
  90. package/src/lib/components/tag/CONTEXT.md +47 -0
  91. package/src/lib/components/tag/rt-tag.component.scss +5 -2
  92. package/src/lib/components/textarea/CONTEXT.md +38 -0
  93. package/src/lib/components/theme-toggle/CONTEXT.md +28 -0
  94. package/src/lib/components/theme-toggle/rt-theme-toggle.component.scss +5 -1
  95. package/src/lib/components/thread-list/CONTEXT.md +42 -0
  96. package/src/lib/components/timeline/CONTEXT.md +33 -0
  97. package/src/lib/components/timeline/rt-timeline.component.scss +5 -2
  98. package/src/lib/components/toast/CONTEXT.md +53 -0
  99. package/src/lib/components/toggle-button-group/CONTEXT.md +38 -0
  100. package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +12 -7
  101. package/src/lib/components/toggle-switch/CONTEXT.md +35 -0
  102. package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +7 -2
  103. package/src/lib/components/toolbar/CONTEXT.md +22 -0
  104. package/src/lib/components/tooltip/CONTEXT.md +34 -0
  105. package/src/lib/components/welcome-dialog/CONTEXT.md +20 -0
  106. package/src/lib/components/welcome-dialog/rt-welcome-dialog.component.scss +6 -2
  107. package/src/lib/components/workspace/CONTEXT.md +46 -0
  108. package/src/lib/components/workspace-details/CONTEXT.md +42 -0
  109. package/styles/tokens.css +14 -0
  110. package/types/rt-tools-ui-kit-v2.d.ts +50 -29
  111. package/rt-tools-ui-kit-v2-0.1.0.tgz +0 -0
@@ -216,7 +216,7 @@ declare namespace IRtIcon {
216
216
  /** Допустимые имена иконок. Литеральный union из {@link iconsName}. */
217
217
  type Name = (typeof iconsName)[number];
218
218
  /** Доступные размеры. Маппинг на пиксели — в `rt-icon.component.ts`. */
219
- type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
219
+ type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
220
220
  /** Семантические цвета. Маппинг на CSS-переменные `--rt-icon-color-*` — в `rt-icon.component.ts`. */
221
221
  type Color = 'current' | 'muted' | 'info' | 'success' | 'warning' | 'danger' | 'inverse';
222
222
  }
@@ -490,7 +490,8 @@ declare namespace IRtInput {
490
490
  * - self-injected `NgControl` + ручная привязка `valueAccessor` (без
491
491
  * `NG_VALUE_ACCESSOR` provider — иначе NG0200 cycle при self-reference),
492
492
  * что даёт доступ к `control.invalid/touched` для авто-подсветки ошибки;
493
- * - сигнал значения `value`, состояния `isDisabled`/`isInvalid`;
493
+ * - сигнал значения `value`, состояния `isDisabled`/`isInvalid` (отключение
494
+ * складывается из входа `disabled` и слова формы — см. `isDisabled`);
494
495
  * - общие инпуты `size`/`disabled`/`controlId`/`ariaLabel`/`clearable`;
495
496
  * - оркестрацию очистки (`clear`) через абстрактные хуки конкретного поля.
496
497
  *
@@ -501,7 +502,14 @@ declare namespace IRtInput {
501
502
  declare abstract class RtFormControlBase<TValue> implements ControlValueAccessor, OnInit {
502
503
  #private;
503
504
  protected readonly value: WritableSignal<TValue>;
504
- protected readonly isDisabled: WritableSignal<boolean>;
505
+ /**
506
+ * Отключение: вход и форма — два независимых источника, поле отключено,
507
+ * если так сказал любой из них. Сводить их в один signal нельзя: форма
508
+ * зовёт `setDisabledState` при связывании контрола, то есть раньше, чем
509
+ * поле впервые обновит своё вью, и мирроринг входа затирал бы её слово —
510
+ * контрол, созданный отключённым, оказывался бы редактируемым.
511
+ */
512
+ protected readonly isDisabled: Signal<boolean>;
505
513
  protected readonly isInvalid: WritableSignal<boolean>;
506
514
  /** Видимость кнопки очистки: включена, есть значение, поле активно. */
507
515
  protected readonly showClearButton: Signal<boolean>;
@@ -751,8 +759,8 @@ declare namespace IButton {
751
759
  type Theme = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';
752
760
  /** Внешний вид: filled (заливка), outlined (контур), text (без фона). */
753
761
  type Appearance = 'filled' | 'outlined' | 'text';
754
- /** Размер по высоте: sm — 30px, md — 40px (default), lg — 50px. */
755
- type Size = 'sm' | 'md' | 'lg';
762
+ /** Размер по высоте: sm — 30px, md — 40px (default), lg — 50px, xl — 60px, 2xl — 70px. */
763
+ type Size = 'sm' | 'md' | 'lg' | 'xl' | '2xl';
756
764
  /** Положение иконки относительно лейбла. */
757
765
  type IconPos = 'left' | 'right';
758
766
  }
@@ -1375,10 +1383,12 @@ declare function toRtMessage<TMessage extends IRtMappableMessage>(message: TMess
1375
1383
  * `useExisting: forwardRef(...)` — `useClass` на self-reference вызывает
1376
1384
  * NG0200 cycle при boot'е.
1377
1385
  *
1378
- * Source-of-truth для disabled — внутренний `isDisabled` signal: и signal-input
1379
- * `disabled`, и CVA `setDisabledState` пишут в один и тот же signal (input —
1380
- * через `effect()`, CVA — напрямую), так `[disabled]="true"` и
1381
- * `FormControl.disable()` ведут себя одинаково.
1386
+ * Отключение складывается из двух независимых источников: входа `disabled` и
1387
+ * слова формы (CVA `setDisabledState`). Отключено, если так сказал любой из
1388
+ * них. Сводить их в один signal нельзя: форма зовёт `setDisabledState` при
1389
+ * связывании контрола, то есть раньше, чем чекбокс впервые обновит своё вью,
1390
+ * и мирроринг входа затирал бы её слово — контрол, созданный отключённым,
1391
+ * оказывался бы кликабельным.
1382
1392
  *
1383
1393
  * `indeterminate` — чисто визуальное mixed-состояние; клик по нему разрешается
1384
1394
  * в `true` (стандартное поведение tri-state чекбокса).
@@ -1388,12 +1398,11 @@ declare function toRtMessage<TMessage extends IRtMappableMessage>(message: TMess
1388
1398
  declare class RtCheckboxComponent implements ControlValueAccessor {
1389
1399
  #private;
1390
1400
  protected readonly isChecked: WritableSignal<boolean>;
1391
- protected readonly isDisabled: WritableSignal<boolean>;
1401
+ protected readonly isDisabled: Signal<boolean>;
1392
1402
  readonly inputId: InputSignal<string | null>;
1393
1403
  readonly ariaLabel: InputSignal<string | null>;
1394
1404
  readonly disabled: InputSignalWithTransform<boolean, BooleanInput>;
1395
1405
  readonly indeterminate: InputSignalWithTransform<boolean, BooleanInput>;
1396
- constructor();
1397
1406
  writeValue(value: boolean | null | undefined): void;
1398
1407
  registerOnChange(fn: (value: boolean) => void): void;
1399
1408
  registerOnTouched(fn: () => void): void;
@@ -1916,19 +1925,22 @@ declare const rtAsideUnsavedGuard: CanDeactivateFn<IRtAsideDeactivate | null>;
1916
1925
  * `useExisting: forwardRef(...)` — `useClass` на self-reference вызывает
1917
1926
  * NG0200 cycle при boot'е.
1918
1927
  *
1919
- * Source-of-truth для disabled — внутренний `isDisabled` signal: и signal-input
1920
- * `disabled`, и CVA `setDisabledState` пишут в него, поэтому `[disabled]="true"`
1921
- * и `FormControl.disable()` ведут себя одинаково.
1928
+ * Отключение складывается из двух независимых источников: входа `disabled` и
1929
+ * слова формы (CVA `setDisabledState`). Отключено, если так сказал любой из
1930
+ * них. Сводить их в один signal нельзя: форма зовёт `setDisabledState` при
1931
+ * связывании контрола, то есть раньше, чем счётчик впервые обновит своё вью,
1932
+ * и мирроринг входа затирал бы её слово — контрол, созданный отключённым,
1933
+ * оказывался бы рабочим.
1922
1934
  *
1923
1935
  * Хост объявлен группой с `aria-label`, значение помечено `aria-live`, так что
1924
1936
  * скринридер называет назначение счётчика и проговаривает новое число.
1925
1937
  *
1926
- * ViewEncapsulation — default (Emulated), стили обёрнуты в `:host { ... }`.
1938
+ * ViewEncapsulation.None — стили таргетируют имя элемента и BEM-класс блока.
1927
1939
  */
1928
1940
  declare class RtCounterComponent implements ControlValueAccessor {
1929
1941
  #private;
1930
1942
  protected readonly value: WritableSignal<number>;
1931
- protected readonly isDisabled: WritableSignal<boolean>;
1943
+ protected readonly isDisabled: Signal<boolean>;
1932
1944
  /** Своя подпись важнее умолчания: форма знает, что именно считает */
1933
1945
  protected readonly decreaseAriaLabel: Signal<string>;
1934
1946
  protected readonly increaseAriaLabel: Signal<string>;
@@ -1944,7 +1956,6 @@ declare class RtCounterComponent implements ControlValueAccessor {
1944
1956
  readonly decreaseLabel: InputSignal<string>;
1945
1957
  readonly increaseLabel: InputSignal<string>;
1946
1958
  readonly disabled: InputSignalWithTransform<boolean, BooleanInput>;
1947
- constructor();
1948
1959
  writeValue(value: number | null | undefined): void;
1949
1960
  registerOnChange(fn: (value: number) => void): void;
1950
1961
  registerOnTouched(fn: () => void): void;
@@ -1976,7 +1987,7 @@ declare const RT_COUNTER_INCREASE_KEY: string;
1976
1987
  * раскладку, и её не приходится расширять каждый раз, когда у `rt-counter`
1977
1988
  * появляется новый input.
1978
1989
  *
1979
- * ViewEncapsulation — default (Emulated), стили обёрнуты в `:host { ... }`.
1990
+ * ViewEncapsulation.None — стили таргетируют имя элемента и BEM-класс блока.
1980
1991
  */
1981
1992
  declare class RtCounterRowComponent {
1982
1993
  readonly label: InputSignal<string>;
@@ -2382,7 +2393,7 @@ declare namespace IRtIconButton {
2382
2393
  /** Семантическая палитра кнопки. */
2383
2394
  type Variant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'success' | 'warning';
2384
2395
  /** Размер квадрата кнопки. Маппинг на пиксели — в SCSS (`--rt-icon-button-size`). */
2385
- type Size = 'sm' | 'md' | 'lg';
2396
+ type Size = 'sm' | 'md' | 'lg' | 'xl' | '2xl';
2386
2397
  /** Форма границы кнопки. */
2387
2398
  type Shape = 'circle' | 'square';
2388
2399
  /** HTML-тип нативного `<button>`. */
@@ -3763,7 +3774,13 @@ declare class RtSkeletonComponent {
3763
3774
  readonly size: InputSignal<IRtSkeletonSize>;
3764
3775
  readonly width: InputSignal<string>;
3765
3776
  readonly height: InputSignal<string>;
3766
- readonly borderRadius: InputSignal<IRtSkeletonRadius>;
3777
+ /**
3778
+ * Скругление. `null` — «не задано»: прямоугольник берёт `xl`, квадрат —
3779
+ * `sm` (пилюля из квадрата не квадрат). Умолчанием нельзя было держать сам
3780
+ * `xl`: тогда явный `xl` неотличим от невыставленного, и квадрату
3781
+ * приходилось прибивать `sm` жёстко — вход у него молча пропадал.
3782
+ */
3783
+ readonly borderRadius: InputSignal<IRtSkeletonRadius | null>;
3767
3784
  readonly animation: InputSignalWithTransform<boolean, BooleanInput>;
3768
3785
  protected get isRectangle(): boolean;
3769
3786
  protected get isCircle(): boolean;
@@ -3796,7 +3813,8 @@ declare class RtSkeletonWrapperComponent {
3796
3813
  readonly height: InputSignal<string>;
3797
3814
  readonly shape: InputSignal<IRtSkeletonShape>;
3798
3815
  readonly size: InputSignal<IRtSkeletonSize>;
3799
- readonly borderRadius: InputSignal<IRtSkeletonRadius>;
3816
+ /** Как у `rt-skeleton`: `null` — «по фигуре», а не «без скругления». */
3817
+ readonly borderRadius: InputSignal<IRtSkeletonRadius | null>;
3800
3818
  readonly animation: InputSignalWithTransform<boolean, BooleanInput>;
3801
3819
  readonly isLoading: InputSignalWithTransform<boolean, BooleanInput>;
3802
3820
  static ɵfac: i0.ɵɵFactoryDeclaration<RtSkeletonWrapperComponent, never>;
@@ -3999,7 +4017,10 @@ declare namespace IRtStepper {
3999
4017
  * скринридером через aria.
4000
4018
  */
4001
4019
  declare class RtStepperComponent {
4020
+ #private;
4002
4021
  protected readonly currentStep: Signal<IRtStepper.Step | null>;
4022
+ /** Номер текущего шага для скринридера: `0`, когда шагов нет вовсе. */
4023
+ protected readonly currentStepNumber: Signal<number>;
4003
4024
  /**
4004
4025
  * Доля заполненной полосы от 0 до 100. На один шаг и меньше — 0%, иначе
4005
4026
  * `idx / (total - 1)`. Без clamp в шаблоне получаем переполнение если
@@ -4739,7 +4760,6 @@ type IRtTextareaResize = 'none' | 'vertical';
4739
4760
  */
4740
4761
  declare class RtTextareaComponent extends RtFormControlBase<string> {
4741
4762
  protected readonly fieldEl: Signal<ElementRef<HTMLTextAreaElement> | undefined>;
4742
- protected readonly effectiveDisabled: Signal<boolean>;
4743
4763
  protected readonly hasValue: Signal<boolean>;
4744
4764
  readonly displayText: Signal<string>;
4745
4765
  readonly placeholder: InputSignal<string>;
@@ -5231,22 +5251,24 @@ declare namespace IRtToggleSwitch {
5231
5251
  * `useExisting: forwardRef(...)` — `useClass` на self-reference вызывает
5232
5252
  * NG0200 cycle при boot'е.
5233
5253
  *
5234
- * Source-of-truth для disabled — внутренний `isDisabled` signal. И signal-input
5235
- * `disabled`, и CVA `setDisabledState` пишут в один и тот же signal: input —
5236
- * через `effect()`, CVA — напрямую через метод. Так `[disabled]="true"` и
5237
- * `FormControl.disable()` ведут себя одинаково.
5254
+ * Отключение складывается из двух независимых источников: входа `disabled` и
5255
+ * слова формы (CVA `setDisabledState`). Отключено, если так сказал любой из
5256
+ * них. Сводить их в один signal нельзя: форма зовёт `setDisabledState` при
5257
+ * связывании контрола, то есть раньше, чем переключатель впервые обновит своё
5258
+ * вью, и мирроринг входа затирал бы её слово — контрол, созданный отключённым,
5259
+ * оказывался бы кликабельным.
5238
5260
  *
5239
5261
  * Опциональные иконки `iconOff` / `iconOn` рисуются внутри трека статично:
5240
5262
  * off-иконка в начальной половине, on-иконка в конечной. Бегунок непрозрачен
5241
5263
  * и наезжает на иконку активного состояния, так что видна всегда иконка того
5242
5264
  * состояния, куда переключится контрол.
5243
5265
  *
5244
- * ViewEncapsulation — default (Emulated), стили обёрнуты в `:host { ... }`.
5266
+ * ViewEncapsulation.None — стили таргетируют имя элемента и BEM-класс блока.
5245
5267
  */
5246
5268
  declare class RtToggleSwitchComponent implements ControlValueAccessor {
5247
5269
  #private;
5248
5270
  protected readonly isOn: WritableSignal<boolean>;
5249
- protected readonly isDisabled: WritableSignal<boolean>;
5271
+ protected readonly isDisabled: Signal<boolean>;
5250
5272
  /**
5251
5273
  * BEM-модификаторы для `[rtMod]`. Собираем в .ts, потому что
5252
5274
  * Angular template-parser не поддерживает computed property keys
@@ -5262,7 +5284,6 @@ declare class RtToggleSwitchComponent implements ControlValueAccessor {
5262
5284
  /** Иконка включённого состояния — в конечной половине трека. Пусто — без иконки. */
5263
5285
  readonly iconOn: InputSignal<IRtIcon.Name | null>;
5264
5286
  readonly disabled: InputSignalWithTransform<boolean, BooleanInput>;
5265
- constructor();
5266
5287
  writeValue(value: boolean | null | undefined): void;
5267
5288
  registerOnChange(fn: (value: boolean) => void): void;
5268
5289
  registerOnTouched(fn: () => void): void;
Binary file