@rt-tools/ui-kit-v2 0.15.0 → 0.17.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 (119) hide show
  1. package/README.md +7 -0
  2. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +96 -41
  3. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
  4. package/fesm2022/rt-tools-ui-kit-v2.mjs +6824 -2700
  5. package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
  6. package/package.json +1 -1
  7. package/rt-tools-ui-kit-v2-0.17.0.tgz +0 -0
  8. package/src/assets/icons/chat-error.svg +9 -0
  9. package/src/assets/icons/fork-spoon.svg +9 -0
  10. package/src/assets/icons/fullscreen.svg +9 -0
  11. package/src/assets/icons/home.svg +9 -0
  12. package/src/assets/icons/layers.svg +9 -0
  13. package/src/assets/icons/pin.svg +5 -0
  14. package/src/assets/icons/troubleshoot.svg +9 -0
  15. package/src/assets/icons-material/chart-bar.fill.svg +5 -0
  16. package/src/assets/icons-material/chart-bar.svg +5 -0
  17. package/src/assets/icons-material/chart-line.fill.svg +5 -0
  18. package/src/assets/icons-material/chart-line.svg +5 -0
  19. package/src/assets/icons-material/chat-error.fill.svg +5 -0
  20. package/src/assets/icons-material/chat-error.svg +5 -0
  21. package/src/assets/icons-material/comment.fill.svg +5 -0
  22. package/src/assets/icons-material/comment.svg +5 -0
  23. package/src/assets/icons-material/fork-spoon.fill.svg +5 -0
  24. package/src/assets/icons-material/fork-spoon.svg +5 -0
  25. package/src/assets/icons-material/fullscreen.fill.svg +5 -0
  26. package/src/assets/icons-material/fullscreen.svg +5 -0
  27. package/src/assets/icons-material/home.fill.svg +3 -0
  28. package/src/assets/icons-material/home.svg +5 -0
  29. package/src/assets/icons-material/ico-exit.fill.svg +5 -0
  30. package/src/assets/icons-material/ico-exit.svg +5 -0
  31. package/src/assets/icons-material/ico-sun.fill.svg +5 -0
  32. package/src/assets/icons-material/ico-sun.svg +5 -0
  33. package/src/assets/icons-material/ico-user.fill.svg +5 -0
  34. package/src/assets/icons-material/ico-user.svg +5 -0
  35. package/src/assets/icons-material/layers.fill.svg +3 -0
  36. package/src/assets/icons-material/layers.svg +5 -0
  37. package/src/assets/icons-material/minus.fill.svg +3 -0
  38. package/src/assets/icons-material/minus.svg +3 -0
  39. package/src/assets/icons-material/moon.fill.svg +5 -0
  40. package/src/assets/icons-material/moon.svg +5 -0
  41. package/src/assets/icons-material/pin.fill.svg +3 -0
  42. package/src/assets/icons-material/pin.svg +5 -0
  43. package/src/assets/icons-material/search-plus.fill.svg +5 -0
  44. package/src/assets/icons-material/search-plus.svg +5 -0
  45. package/src/assets/icons-material/th-large.fill.svg +3 -0
  46. package/src/assets/icons-material/th-large.svg +5 -0
  47. package/src/assets/icons-material/troubleshoot.fill.svg +5 -0
  48. package/src/assets/icons-material/troubleshoot.svg +5 -0
  49. package/src/lib/components/CONTEXT.md +1 -1
  50. package/src/lib/components/action-bar/CONTEXT.md +5 -0
  51. package/src/lib/components/action-bar/rt-action-bar.component.scss +30 -16
  52. package/src/lib/components/aside/CONTEXT.md +18 -1
  53. package/src/lib/components/aside/error-box/rt-aside-error-box.component.scss +37 -0
  54. package/src/lib/components/aside/footer/rt-aside-footer.component.scss +7 -8
  55. package/src/lib/components/aside/header/rt-aside-header.component.scss +16 -1
  56. package/src/lib/components/aside/rt-aside.component.scss +31 -3
  57. package/src/lib/components/button/CONTEXT.md +12 -11
  58. package/src/lib/components/button/rt-button.directive.scss +36 -0
  59. package/src/lib/components/data-list/settings/rt-data-list-settings-aside.component.scss +2 -2
  60. package/src/lib/components/data-table/cell/rt-data-table-cell.component.scss +1 -1
  61. package/src/lib/components/data-table/filter-cell/rt-data-table-filter-cell.component.scss +1 -1
  62. package/src/lib/components/data-table/rt-data-table.component.scss +1 -1
  63. package/src/lib/components/dialog/CONTEXT.md +9 -0
  64. package/src/lib/components/dialog/content/rt-dialog-content.component.scss +20 -0
  65. package/src/lib/components/dialog/footer/rt-dialog-footer.component.scss +18 -2
  66. package/src/lib/components/dialog/header/rt-dialog-header.component.scss +21 -3
  67. package/src/lib/components/dialog/rt-dialog.component.scss +9 -3
  68. package/src/lib/components/dynamic-selector/CONTEXT.md +50 -0
  69. package/src/lib/components/dynamic-selector/dynamic-input/rt-dynamic-input.component.scss +19 -0
  70. package/src/lib/components/dynamic-selector/list/rt-dynamic-selector-list.component.scss +108 -0
  71. package/src/lib/components/dynamic-selector/popup/rt-dynamic-selector-popup.component.scss +170 -0
  72. package/src/lib/components/dynamic-selector/rt-dynamic-selector.component.scss +23 -0
  73. package/src/lib/components/dynamic-selector/stories/component/test-dynamic-selector-matrix.component.scss +8 -0
  74. package/src/lib/components/dynamic-selector/stories/component/test-dynamic-selector.component.scss +7 -0
  75. package/src/lib/components/empty-state/CONTEXT.md +3 -0
  76. package/src/lib/components/empty-state/rt-empty-state.component.scss +9 -0
  77. package/src/lib/components/expansion-panel/CONTEXT.md +45 -0
  78. package/src/lib/components/expansion-panel/rt-expansion-panel.component.scss +134 -0
  79. package/src/lib/components/expansion-panel/stories/component/test-expansion-panel-matrix.component.scss +31 -0
  80. package/src/lib/components/header/CONTEXT.md +2 -2
  81. package/src/lib/components/icon/CONTEXT.md +11 -7
  82. package/src/lib/components/icon/rt-icon.component.scss +47 -0
  83. package/src/lib/components/icon-button/CONTEXT.md +27 -20
  84. package/src/lib/components/icon-button/rt-icon-button.component.scss +51 -25
  85. package/src/lib/components/image-cropper/CONTEXT.md +54 -0
  86. package/src/lib/components/image-cropper/rt-image-cropper.component.scss +220 -0
  87. package/src/lib/components/image-upload/CONTEXT.md +70 -0
  88. package/src/lib/components/image-upload/rt-image-upload.component.scss +89 -0
  89. package/src/lib/components/menu/CONTEXT.md +27 -0
  90. package/src/lib/components/menu/rt-menu-item.component.scss +42 -0
  91. package/src/lib/components/pagination/rt-pagination.component.scss +1 -1
  92. package/src/lib/components/scroll-area/CONTEXT.md +2 -0
  93. package/src/lib/components/scroll-area/rt-scroll-area.component.scss +20 -3
  94. package/src/lib/components/side-menu/CONTEXT.md +43 -0
  95. package/src/lib/components/side-menu/favorites/rt-side-menu-favorites.component.scss +126 -0
  96. package/src/lib/components/side-menu/rt-side-menu.component.scss +303 -0
  97. package/src/lib/components/side-menu/stories/component/test-side-menu-cell.component.scss +27 -0
  98. package/src/lib/components/side-menu/stories/component/test-side-menu.component.scss +39 -0
  99. package/src/lib/components/side-menu/sub-item/rt-side-menu-sub-item.component.scss +203 -0
  100. package/src/lib/components/spinner/CONTEXT.md +15 -8
  101. package/src/lib/components/spinner/rt-spinner.component.scss +108 -9
  102. package/src/lib/components/table/CONTEXT.md +6 -0
  103. package/src/lib/components/table/rt-table.component.scss +4 -2
  104. package/src/lib/components/tag/rt-tag.component.scss +43 -23
  105. package/src/lib/components/toast/CONTEXT.md +8 -0
  106. package/src/lib/components/toast/rt-toast.component.scss +74 -15
  107. package/src/lib/components/toast/rt-toaster.component.scss +5 -1
  108. package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +35 -37
  109. package/src/lib/components/toggle-switch/CONTEXT.md +11 -3
  110. package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +53 -14
  111. package/src/lib/components/toolbar/rt-toolbar.component.scss +15 -4
  112. package/src/lib/components/tooltip/CONTEXT.md +7 -4
  113. package/src/rich-editor/lib/components/chat/CONTEXT.md +7 -2
  114. package/src/rich-editor/lib/components/chat/rt-chat.component.scss +25 -0
  115. package/src/styles/_color-scheme.scss +50 -0
  116. package/styles/tokens.css +35 -0
  117. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +16 -20
  118. package/types/rt-tools-ui-kit-v2.d.ts +1588 -58
  119. package/rt-tools-ui-kit-v2-0.15.0.tgz +0 -0
@@ -1,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { WritableSignal, InputSignal, InjectionToken, Signal, OutputEmitterRef, Renderer2, EnvironmentProviders, PipeTransform, InputSignalWithTransform, OnInit, OnDestroy, TemplateRef, ElementRef, DestroyRef, AfterViewChecked, AfterContentInit, ModelSignal, AfterViewInit } from '@angular/core';
3
- import { OverlayRef, ComponentType, CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';
4
- import { Observable, MonoTypeOperatorFunction } from 'rxjs';
2
+ import { WritableSignal, InputSignal, InjectionToken, Signal, OutputEmitterRef, ElementRef, InputSignalWithTransform, Renderer2, Injector, EnvironmentProviders, PipeTransform, OnInit, OnDestroy, TemplateRef, DestroyRef, AfterViewChecked, ModelSignal, AfterContentInit, AfterViewInit } from '@angular/core';
5
3
  import { BooleanInput, NumberInput } from '@angular/cdk/coercion';
4
+ import { OverlayRef, ComponentType, CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';
5
+ import { Subject, Observable, MonoTypeOperatorFunction } from 'rxjs';
6
6
  import { ControlValueAccessor, ValidationErrors, AbstractControl, FormControl, FormGroup } from '@angular/forms';
7
- import { Router, ActivatedRoute, Params, CanDeactivateFn } from '@angular/router';
7
+ import { Router, ActivatedRoute, Params, CanDeactivateFn, RouterLink } from '@angular/router';
8
8
  import { TNullable, IPageModel, ISortModel, TFilterOperatorType, IFilterModel, TListSortOrderType } from '@rt-tools/utils';
9
9
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
10
10
  import { SafeStyle } from '@angular/platform-browser';
@@ -51,7 +51,7 @@ declare class RtAccordionComponent {
51
51
  * литеральный тип, нужный для `IRtIcon.Name` (см. `rt-icon.model.ts`). `as const`
52
52
  * сохраняет литеральные ключи.
53
53
  */
54
- declare const iconsName: readonly ["alarm-clock", "align-center", "align-justify", "align-left", "align-right", "angle-double-down", "angle-double-left", "angle-double-right", "angle-double-up", "angle-down", "angle-left", "angle-right", "angle-up", "arrow-bottom-old", "arrow-circle-down", "arrow-circle-left", "arrow-circle-right", "arrow-circle-up", "arrow-down", "arrow-down-left", "arrow-down-long", "arrow-down-right", "arrow-left", "arrow-left-old", "arrow-leftlong", "arrow-right", "arrow-right-old", "arrow-rightlong", "arrow-top-old", "arrow-up", "arrow-up-left", "arrow-up-long", "arrow-up-right", "arrows", "arrows-h", "arrows-v", "at", "attach-docx-doc", "attach-eml", "attach-folder", "attach-jpg-png", "attach-msg", "attach-other", "attach-pdf", "attach-ppt-pptx", "attach-txt", "attach-webp", "attach-xlsx-xls", "attach-zip-rar", "ban", "bars", "bell", "bolt", "book", "bookmark", "bookmark-fill", "bot", "box", "briefcase", "building", "burger", "calendar", "calendar-minus", "calendar-plus", "calendar-times", "camera", "chart-bar", "chart-line", "chart-line-2", "chart-pie", "check", "check-circle", "check-double", "check-square", "chevron-circle-down", "chevron-circle-left", "chevron-circle-right", "chevron-circle-up", "chevron-down", "chevron-left", "chevron-right", "chevron-up", "chevron-up-down", "clock", "clone", "close", "cloud", "cloud-download", "cloud-upload", "code", "cog", "comment", "comments", "copy", "credit-card", "database", "desktop", "directions", "directions-alt", "doc-success", "docBox", "ellipsis-h", "ellipsis-v", "email", "equals", "exclamation-circle", "external-link", "eye", "eye-slash", "file", "file-excel", "file-o", "file-pdf", "filter", "filter-fill", "filter-slash", "flag", "flag-fill", "flagman-a", "flagman-b", "flagman-c", "flagman-q", "folder", "folder-open", "globe", "groupen", "hashtag", "heart", "heart-fill", "help", "history", "historyUpdate", "ico-age", "ico-alert", "ico-b", "ico-babyPacifier", "ico-bank", "ico-bill", "ico-bill-striked", "ico-bookmark-right", "ico-books", "ico-burger", "ico-businessman", "ico-c", "ico-calendar", "ico-case", "ico-change", "ico-change-2", "ico-check", "ico-checked", "ico-checked-alert", "ico-cheker", "ico-chevron", "ico-chevron-down", "ico-close", "ico-config", "ico-contragents", "ico-control", "ico-copy", "ico-counterparty", "ico-coworkers", "ico-debt", "ico-director", "ico-doc", "ico-docDocprimary", "ico-docs", "ico-door", "ico-dotted-more-horizontal", "ico-doubleArrows", "ico-download", "ico-eagle", "ico-edit", "ico-edo", "ico-email", "ico-email1", "ico-error", "ico-exit", "ico-eye", "ico-eyeClose", "ico-faq", "ico-farm", "ico-filter", "ico-fine", "ico-gasket", "ico-generator", "ico-grade", "ico-grade-2", "ico-ground-area-transport", "ico-groundArea", "ico-groupen", "ico-hands", "ico-help", "ico-ico-history", "ico-info", "ico-infoFill", "ico-invite", "ico-key", "ico-keyFill", "ico-letter", "ico-level", "ico-level-down", "ico-level-up", "ico-licence", "ico-limit", "ico-link", "ico-link-2", "ico-listadd", "ico-listing", "ico-lock", "ico-locked", "ico-megafon", "ico-new-window", "ico-notification", "ico-notificationOff", "ico-percent-alert", "ico-plus", "ico-referal", "ico-repeat", "ico-reset", "ico-return", "ico-search", "ico-setting", "ico-settings", "ico-site", "ico-snowflake", "ico-spec", "ico-statement", "ico-subuser", "ico-sun", "ico-sunrise", "ico-support", "ico-target", "ico-team", "ico-tech", "ico-telegram", "ico-time", "ico-trash", "ico-try", "ico-txt", "ico-unlock", "ico-upload", "ico-user", "ico-user-2", "ico-users", "ico-users-2", "ico-video-play", "ico-warning", "ico-warranty", "ico-warranty-shield", "ico-xml", "id-card", "image", "images", "inbox", "info", "info-circle", "link", "list", "lock", "lock-open", "map", "mapYandex", "microsoft", "minus", "minus-circle", "mobile", "money-bill", "moon", "paperclip", "pause", "pencil", "percentage", "phone", "pie-chart", "plus-circle", "power-off", "print", "qrcode", "question-circle", "refresh", "replay", "reply", "reset", "search", "search-minus", "search-plus", "send", "server", "share-alt", "shield", "sitemap", "sliders-v", "social-facebook", "social-instagram", "social-kakaotalk", "social-line", "social-naver", "social-pinterest", "social-tiktok", "social-vk", "social-wechat", "social-x", "social-xiaohongshu", "social-youtube", "sort-alpha-alt-down", "sort-alpha-alt-up", "sort-alpha-down", "sort-alpha-up", "sort-alt", "sort-alt-slash", "sort-amount-down", "sort-amount-down-alt", "sort-amount-up", "sort-amount-up-alt", "sort-numeric-alt-down", "sort-numeric-alt-up", "sort-numeric-down", "sort-numeric-up", "spinner", "star", "star-fill", "stock", "stop", "sync", "table", "tablet", "tag", "tags", "telegram", "th-large", "ticket", "times-circle", "trash", "undo", "unlock", "user", "user-edit", "user-minus", "user-off", "user-plus", "users", "video", "volume-down", "volume-off", "volume-up", "wallet", "warning", "wifi", "window-maximize", "window-minimize"];
54
+ declare const iconsName: readonly ["alarm-clock", "align-center", "align-justify", "align-left", "align-right", "angle-double-down", "angle-double-left", "angle-double-right", "angle-double-up", "angle-down", "angle-left", "angle-right", "angle-up", "arrow-bottom-old", "arrow-circle-down", "arrow-circle-left", "arrow-circle-right", "arrow-circle-up", "arrow-down", "arrow-down-left", "arrow-down-long", "arrow-down-right", "arrow-left", "arrow-left-old", "arrow-leftlong", "arrow-right", "arrow-right-old", "arrow-rightlong", "arrow-top-old", "arrow-up", "arrow-up-left", "arrow-up-long", "arrow-up-right", "arrows", "arrows-h", "arrows-v", "at", "attach-docx-doc", "attach-eml", "attach-folder", "attach-jpg-png", "attach-msg", "attach-other", "attach-pdf", "attach-ppt-pptx", "attach-txt", "attach-webp", "attach-xlsx-xls", "attach-zip-rar", "ban", "bars", "bell", "bolt", "book", "bookmark", "bookmark-fill", "bot", "box", "briefcase", "building", "burger", "calendar", "calendar-minus", "calendar-plus", "calendar-times", "camera", "chart-bar", "chart-line", "chart-line-2", "chart-pie", "chat-error", "check", "check-circle", "check-double", "check-square", "chevron-circle-down", "chevron-circle-left", "chevron-circle-right", "chevron-circle-up", "chevron-down", "chevron-left", "chevron-right", "chevron-up", "chevron-up-down", "clock", "clone", "close", "cloud", "cloud-download", "cloud-upload", "code", "cog", "comment", "comments", "copy", "credit-card", "database", "desktop", "directions", "directions-alt", "doc-success", "docBox", "ellipsis-h", "ellipsis-v", "email", "equals", "exclamation-circle", "external-link", "eye", "eye-slash", "file", "file-excel", "file-o", "file-pdf", "filter", "filter-fill", "filter-slash", "flag", "flag-fill", "flagman-a", "flagman-b", "flagman-c", "flagman-q", "folder", "folder-open", "fork-spoon", "fullscreen", "globe", "groupen", "hashtag", "heart", "heart-fill", "help", "history", "historyUpdate", "home", "ico-age", "ico-alert", "ico-b", "ico-babyPacifier", "ico-bank", "ico-bill", "ico-bill-striked", "ico-bookmark-right", "ico-books", "ico-burger", "ico-businessman", "ico-c", "ico-calendar", "ico-case", "ico-change", "ico-change-2", "ico-check", "ico-checked", "ico-checked-alert", "ico-cheker", "ico-chevron", "ico-chevron-down", "ico-close", "ico-config", "ico-contragents", "ico-control", "ico-copy", "ico-counterparty", "ico-coworkers", "ico-debt", "ico-director", "ico-doc", "ico-docDocprimary", "ico-docs", "ico-door", "ico-dotted-more-horizontal", "ico-doubleArrows", "ico-download", "ico-eagle", "ico-edit", "ico-edo", "ico-email", "ico-email1", "ico-error", "ico-exit", "ico-eye", "ico-eyeClose", "ico-faq", "ico-farm", "ico-filter", "ico-fine", "ico-gasket", "ico-generator", "ico-grade", "ico-grade-2", "ico-ground-area-transport", "ico-groundArea", "ico-groupen", "ico-hands", "ico-help", "ico-ico-history", "ico-info", "ico-infoFill", "ico-invite", "ico-key", "ico-keyFill", "ico-letter", "ico-level", "ico-level-down", "ico-level-up", "ico-licence", "ico-limit", "ico-link", "ico-link-2", "ico-listadd", "ico-listing", "ico-lock", "ico-locked", "ico-megafon", "ico-new-window", "ico-notification", "ico-notificationOff", "ico-percent-alert", "ico-plus", "ico-referal", "ico-repeat", "ico-reset", "ico-return", "ico-search", "ico-setting", "ico-settings", "ico-site", "ico-snowflake", "ico-spec", "ico-statement", "ico-subuser", "ico-sun", "ico-sunrise", "ico-support", "ico-target", "ico-team", "ico-tech", "ico-telegram", "ico-time", "ico-trash", "ico-try", "ico-txt", "ico-unlock", "ico-upload", "ico-user", "ico-user-2", "ico-users", "ico-users-2", "ico-video-play", "ico-warning", "ico-warranty", "ico-warranty-shield", "ico-xml", "id-card", "image", "images", "inbox", "info", "info-circle", "layers", "link", "list", "lock", "lock-open", "map", "mapYandex", "microsoft", "minus", "minus-circle", "mobile", "money-bill", "moon", "paperclip", "pause", "pencil", "percentage", "phone", "pie-chart", "pin", "plus-circle", "power-off", "print", "qrcode", "question-circle", "refresh", "replay", "reply", "reset", "search", "search-minus", "search-plus", "send", "server", "share-alt", "shield", "sitemap", "sliders-v", "social-facebook", "social-instagram", "social-kakaotalk", "social-line", "social-naver", "social-pinterest", "social-tiktok", "social-vk", "social-wechat", "social-x", "social-xiaohongshu", "social-youtube", "sort-alpha-alt-down", "sort-alpha-alt-up", "sort-alpha-down", "sort-alpha-up", "sort-alt", "sort-alt-slash", "sort-amount-down", "sort-amount-down-alt", "sort-amount-up", "sort-amount-up-alt", "sort-numeric-alt-down", "sort-numeric-alt-up", "sort-numeric-down", "sort-numeric-up", "spinner", "star", "star-fill", "stock", "stop", "sync", "table", "tablet", "tag", "tags", "telegram", "th-large", "ticket", "times-circle", "trash", "troubleshoot", "undo", "unlock", "user", "user-edit", "user-minus", "user-off", "user-plus", "users", "video", "volume-down", "volume-off", "volume-up", "wallet", "warning", "wifi", "window-maximize", "window-minimize"];
55
55
 
56
56
  /**
57
57
  * Модель `<rt-icon>`: один корневой неймспейс с префиксом `I`.
@@ -71,6 +71,21 @@ declare namespace IRtIcon {
71
71
  type Drawing = Preset | 'material-fill';
72
72
  /** Семантические цвета. Маппинг на CSS-переменные `--rt-icon-color-*` — в `rt-icon.component.ts`. */
73
73
  type Color = 'current' | 'muted' | 'info' | 'success' | 'warning' | 'danger' | 'inverse';
74
+ /** Размер на входе значка: ступень или пиксели. */
75
+ type SizeInput = Size | number;
76
+ /**
77
+ * Как значок рисует имя Material: `map-first` — пара из перечня кита, без пары шрифт;
78
+ * `font` — шрифт для любого имени.
79
+ */
80
+ type GlyphStrategy = 'map-first' | 'font';
81
+ /** Итог разбора имени: рисунок кита либо лигатура шрифта Material. */
82
+ type Resolved = {
83
+ readonly kind: 'kit';
84
+ readonly name: Name;
85
+ } | {
86
+ readonly kind: 'font';
87
+ readonly glyph: string;
88
+ };
74
89
  }
75
90
 
76
91
  /**
@@ -288,14 +303,35 @@ type TRtAsideContentLayout = 'default' | 'tabs';
288
303
  * cross-encapsulation хака.
289
304
  */
290
305
  declare class RtAsideComponent {
306
+ #private;
307
+ protected readonly frame: Signal<ElementRef<HTMLElement>>;
308
+ protected readonly hasRequestError: Signal<boolean>;
291
309
  readonly size: InputSignal<TRtAsideSize>;
292
310
  readonly contentLayout: InputSignal<TRtAsideContentLayout>;
293
311
  readonly width: InputSignal<string | null>;
294
312
  readonly ariaLabel: InputSignal<string | null>;
313
+ /**
314
+ * Ошибка неудавшегося запроса. Пока она есть, между шапкой и содержимым стоит блок ошибки с
315
+ * кнопкой копирования; `null` и `undefined` — ошибки нет, любое другое значение её показывает.
316
+ */
317
+ readonly requestError: InputSignal<unknown>;
318
+ /**
319
+ * Держать Tab внутри панели. При включении фокус уходит на `[cdkFocusInitial]` или первый
320
+ * элемент под Tab, а когда панель уходит или вход гаснет, возвращается туда, где стоял.
321
+ */
322
+ readonly trapFocus: InputSignalWithTransform<boolean, BooleanInput>;
323
+ /** Идёт запрос: панель накрыта слоем с крутилкой и помечена занятой. */
324
+ readonly pending: InputSignalWithTransform<boolean, BooleanInput>;
325
+ constructor();
295
326
  static ɵfac: i0.ɵɵFactoryDeclaration<RtAsideComponent, never>;
296
- static ɵcmp: i0.ɵɵComponentDeclaration<RtAsideComponent, "rt-aside", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "contentLayout": { "alias": "contentLayout"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["rt-aside-header", "*", "rt-aside-footer"], true, never>;
327
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtAsideComponent, "rt-aside", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "contentLayout": { "alias": "contentLayout"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "requestError": { "alias": "requestError"; "required": false; "isSignal": true; }; "trapFocus": { "alias": "trapFocus"; "required": false; "isSignal": true; }; "pending": { "alias": "pending"; "required": false; "isSignal": true; }; }, {}, never, ["rt-aside-header", "*", "rt-aside-footer"], true, never>;
297
328
  }
298
329
 
330
+ /**
331
+ * Жест закрытия, на который панель не закрылась: `Escape` или нажатие по подложке. Панель
332
+ * отказывает в нём под `disableClose()` и когда жест выключен настройкой открытия.
333
+ */
334
+ type TRtAsideCloseRequest = 'escape' | 'backdrop';
299
335
  /**
300
336
  * Хэндл к программно открытой side-sheet (через `RtAsideService.open()`).
301
337
  *
@@ -312,6 +348,9 @@ declare class RtAsideComponent {
312
348
  * 3. Эмиттит result в `afterClosed()` СРАЗУ (consumer не ждёт анимацию).
313
349
  * 4. Через `setTimeout(200ms)` зовёт `overlayRef.dispose()` — overlay убран после анимации.
314
350
  *
351
+ * Слой, снятый без `close()` — переходом по адресу (`disposeOnNavigation`) или уничтожением
352
+ * хозяина, — тоже завершает `afterClosed()`: подписчик получает `undefined`.
353
+ *
315
354
  * @example
316
355
  * \`\`\`ts
317
356
  * // в контент-компоненте
@@ -332,11 +371,20 @@ declare class RtAsideRef<T = unknown> {
332
371
  * Программный `close(result)` гейтом не задет — он всегда закрывает.
333
372
  */
334
373
  readonly disableClose: WritableSignal<boolean>;
335
- constructor(overlayRef: OverlayRef, renderer: Renderer2);
374
+ /**
375
+ * `closeRequestsSource` наполняет служба: она слушает жесты и знает, отказала ли в них панель.
376
+ * Хэндл только завершает поток вместе с панелью.
377
+ */
378
+ constructor(overlayRef: OverlayRef, renderer: Renderer2, closeRequestsSource?: Subject<TRtAsideCloseRequest>);
336
379
  /** Закрывает overlay со slide-out анимацией; эмиттит result в `afterClosed()` синхронно. */
337
380
  close(result?: T): void;
338
- /** Эмиттит один раз — результат `close(result)` — и завершается. */
381
+ /** Эмиттит один раз — результат `close(result)` или `undefined` при снятом слое — и завершается. */
339
382
  afterClosed(): Observable<T | undefined>;
383
+ /**
384
+ * Жесты закрытия, в которых панель отказала: `Escape` и нажатие по подложке под
385
+ * `disableClose()` или выключенные настройкой. Завершается вместе с панелью.
386
+ */
387
+ closeRequests(): Observable<TRtAsideCloseRequest>;
340
388
  }
341
389
 
342
390
  /**
@@ -359,6 +407,12 @@ interface IRtAsideConfig<TData = unknown> {
359
407
  closeOnEscape?: boolean;
360
408
  /** К какому краю viewport "приклеить" панель. По дефолту `"right"`. */
361
409
  position?: TRtAsidePosition;
410
+ /**
411
+ * Injector хозяина панели — обычно `inject(Injector)` открывающего компонента. Он становится
412
+ * родителем портала: содержимое видит провайдеры хозяина. Уничтожение хозяина закрывает
413
+ * панель через `close()`. Без него родитель — корневой injector, и панель живёт сама по себе.
414
+ */
415
+ injector?: Injector;
362
416
  }
363
417
  /**
364
418
  * Программный API для открытия side-sheet поверх CDK Overlay.
@@ -435,6 +489,8 @@ declare class RtAsideService {
435
489
  declare const RT_ASIDE_DATA: InjectionToken<unknown>;
436
490
 
437
491
  declare const RT_KIT_LABELS_EN: {
492
+ readonly asideCopyErrorInfo: "Copy error info";
493
+ readonly asideRequestError: "Request Error";
438
494
  readonly bottomSheetClose: "Close";
439
495
  readonly chatAttachAria: "Attach a file";
440
496
  readonly chatAttachTooltip: "Attach a file";
@@ -476,6 +532,19 @@ declare const RT_KIT_LABELS_EN: {
476
532
  readonly dataListSettingsTitle: "Edit table configuration";
477
533
  readonly dataListTableConfig: "Table configuration";
478
534
  readonly dataListVerticalScrollbar: "Vertical scrollbar shown";
535
+ readonly dynamicInputPlaceholder: "Type and press Enter";
536
+ readonly dynamicSelectorAdd: "Add";
537
+ readonly dynamicSelectorApply: "Apply";
538
+ readonly dynamicSelectorClear: "Clear list";
539
+ readonly dynamicSelectorDrag: "Hold to drag";
540
+ readonly dynamicSelectorEdit: "Edit";
541
+ readonly dynamicSelectorMulti: "Multi selection";
542
+ readonly dynamicSelectorMultiHint: "Hold Ctrl or Cmd to tick several rows";
543
+ readonly dynamicSelectorNoResults: "No results";
544
+ readonly dynamicSelectorNothingToChoose: "There are no available items to choose";
545
+ readonly dynamicSelectorRemove: "Remove the item";
546
+ readonly dynamicSelectorReset: "Reset to initial list";
547
+ readonly dynamicSelectorSearch: "Search...";
479
548
  readonly dataTableActions: "Actions";
480
549
  readonly dataTableCopied: "Copied!";
481
550
  readonly dataTableCopy: "Copy";
@@ -499,6 +568,18 @@ declare const RT_KIT_LABELS_EN: {
499
568
  readonly photoViewerClose: "Close viewer";
500
569
  readonly photoViewerNext: "Next photo";
501
570
  readonly photoViewerPrev: "Previous photo";
571
+ readonly sideMenuBack: "Main menu";
572
+ readonly sideMenuFavoriteAdd: "Add to favourites";
573
+ readonly sideMenuFavoriteDrag: "Hold button to drag";
574
+ readonly sideMenuFavoriteRemove: "Remove from favourites";
575
+ readonly sideMenuFavorites: "Favourites";
576
+ readonly sideMenuFavoritesCollapse: "Collapse favourites";
577
+ readonly sideMenuFavoritesExpand: "Expand favourites";
578
+ readonly sideMenuNothingFound: "Nothing found";
579
+ readonly sideMenuPin: "Pin submenu";
580
+ readonly sideMenuResize: "Resize submenu";
581
+ readonly sideMenuSearch: "Search";
582
+ readonly sideMenuUnpin: "Unpin submenu";
502
583
  readonly themeToggleLabel: "Switch theme";
503
584
  readonly uiActions: "Actions";
504
585
  readonly uiApply: "Apply";
@@ -554,6 +635,23 @@ declare const RT_KIT_LABELS_EN: {
554
635
  readonly uiHint: "Hint";
555
636
  readonly uiHistory: "History";
556
637
  readonly uiHours: "Hours";
638
+ readonly uiImageCropperFrame: "Crop frame";
639
+ readonly uiImageCropperHandleE: "Right edge of the crop frame";
640
+ readonly uiImageCropperHandleN: "Top edge of the crop frame";
641
+ readonly uiImageCropperHandleNe: "Top right corner of the crop frame";
642
+ readonly uiImageCropperHandleNw: "Top left corner of the crop frame";
643
+ readonly uiImageCropperHandleS: "Bottom edge of the crop frame";
644
+ readonly uiImageCropperHandleSe: "Bottom right corner of the crop frame";
645
+ readonly uiImageCropperHandleSw: "Bottom left corner of the crop frame";
646
+ readonly uiImageCropperHandleW: "Left edge of the crop frame";
647
+ readonly uiImageCropperPlaceholder: "Choose an image to crop";
648
+ readonly uiImageCropperRefusal: "The image could not be read";
649
+ readonly uiImageUploadApply: "Apply";
650
+ readonly uiImageUploadCancel: "Cancel";
651
+ readonly uiImageUploadChange: "Click to change the image";
652
+ readonly uiImageUploadChoose: "Choose file";
653
+ readonly uiImageUploadDrop: "Drag and drop an image here or";
654
+ readonly uiImageUploadImage: "Current image";
557
655
  readonly uiInviteUser: "Invite user";
558
656
  readonly uiItemsPerPage: "Items per page";
559
657
  readonly uiLast30Days: "Last 30 days";
@@ -797,9 +895,51 @@ declare const ICON_CATEGORY_RULES: readonly IIconCategoryRule[];
797
895
  */
798
896
  declare function categoryOf(name: IRtIcon.Name): TIconCategory;
799
897
 
898
+ /**
899
+ * Как значки приложения рисуют имя Material. Задаётся третьим аргументом `provideRtIcons()`;
900
+ * по умолчанию `map-first` — пара из перечня кита, а без пары шрифт.
901
+ */
902
+ declare const RT_ICON_GLYPH_STRATEGY: InjectionToken<IRtIcon.GlyphStrategy>;
903
+ /**
904
+ * Готовность шрифтов страницы — одна на все значки.
905
+ *
906
+ * Лигатура до готовности шрифта рисуется словом в запасном шрифте: значок прячет её, пока страница
907
+ * не сказала, что шрифты готовы. Кит шрифт не везёт и семью не знает, поэтому ждёт общую готовность,
908
+ * а не загрузку одной семьи. На сервере шрифтов нет — лигатура там скрыта. Браузер без интерфейса
909
+ * шрифтов ждать нечем, и лигатура показывается сразу.
910
+ */
911
+ declare class RtIconFontService {
912
+ #private;
913
+ readonly ready: Signal<boolean>;
914
+ constructor();
915
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtIconFontService, never>;
916
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
917
+ }
918
+
919
+ /** Имя значка кита — то, что рисует спрайт; остальное кит своим рисунком не закрывает. */
920
+ declare function isKitIconName(name: string): name is IRtIcon.Name;
921
+ /** Пара имени Material из перечня кита; `null` — пары нет или имени нет. */
922
+ declare function materialPairOf(glyph: string | null | undefined): IRtIcon.Name | null;
923
+ /**
924
+ * Чем рисуется значок: своим рисунком кита или лигатурой шрифта Material.
925
+ *
926
+ * Имя кита выигрывает у имени Material, если названы оба. Имя Material по способу `map-first`
927
+ * берёт пару из перечня, а без пары — шрифт; по способу `font` — шрифт сразу. Материальный рисунок
928
+ * для пары выбирает уже сам значок по признаку набора над собой: это не дело разбора.
929
+ *
930
+ * `null` — значку нечего рисовать.
931
+ */
932
+ declare function resolveIconGlyph(name: IRtIcon.Name | null | undefined, glyph: string | null | undefined, strategy: IRtIcon.GlyphStrategy): IRtIcon.Resolved | null;
933
+
800
934
  declare class RtIconComponent {
801
935
  #private;
802
- protected readonly href: Signal<string>;
936
+ /** Чем рисуется значок: именем кита или лигатурой шрифта. Ни имени, ни глифа — пустое место. */
937
+ protected readonly resolved: Signal<IRtIcon.Resolved | null>;
938
+ protected readonly kitName: Signal<IRtIcon.Name | null>;
939
+ protected readonly fontGlyph: Signal<string | null>;
940
+ /** Лигатура прячется, пока шрифты страницы не готовы: до того она рисуется словом. */
941
+ protected readonly glyphMods: Signal<Record<string, boolean>>;
942
+ protected readonly href: Signal<string | null>;
803
943
  /**
804
944
  * Набор, которым рисуется этот значок. Материальный закрывает не все имена кита — он слой
805
945
  * переопределений, как набор оформления: имя без материального рисунка рисуется своим, и это
@@ -811,18 +951,35 @@ declare class RtIconComponent {
811
951
  protected readonly sizePx: Signal<number>;
812
952
  protected readonly colorValue: Signal<string | null>;
813
953
  protected readonly rotateStyle: Signal<string | null>;
814
- readonly name: InputSignal<IRtIcon.Name>;
815
- readonly size: InputSignal<IRtIcon.Size>;
954
+ /** Имя кита. Стоит рядом с глифом и побеждает его, когда переданы оба. */
955
+ readonly name: InputSignal<IRtIcon.Name | null>;
956
+ /**
957
+ * Имя Material вместо имени кита. Как оно рисуется — парой из перечня кита или лигатурой
958
+ * шрифта Material Symbols — решает настройка `glyphStrategy` у `provideRtIcons()`. Шрифт
959
+ * приложение подключает само; семья берётся из свойства `--rt-icon-glyph-font`.
960
+ */
961
+ readonly glyph: InputSignal<string | null>;
962
+ /**
963
+ * Ступень размера или число пикселей — для размеров между ступенями и крупнее последней.
964
+ * Числовая строка из статического атрибута читается числом, прочая строка вне ступеней — `md`.
965
+ * Внутри вход хранит пиксели: ступень переводится в них при записи.
966
+ */
967
+ readonly size: InputSignalWithTransform<number, IRtIcon.SizeInput | string>;
816
968
  readonly color: InputSignal<IRtIcon.Color>;
817
969
  /**
818
970
  * Залитый рисунок вместо контурного — как `FILL 1` у значка первого кита. Действует в
819
971
  * материальном наборе; свой набор рисует значок одним рисунком. Дефолт `false`.
820
972
  */
821
973
  readonly fill: InputSignalWithTransform<boolean, BooleanInput>;
974
+ /**
975
+ * Значок вращается — как индикатор занятости внутри кнопки или строки. Когда система просит
976
+ * меньше движения, вращение медленнее. Поворот на время вращения уступает ему. Дефолт `false`.
977
+ */
978
+ readonly spin: InputSignalWithTransform<boolean, BooleanInput>;
822
979
  readonly rotate: InputSignalWithTransform<number | null, TRotateInput>;
823
980
  constructor();
824
981
  static ɵfac: i0.ɵɵFactoryDeclaration<RtIconComponent, never>;
825
- static ɵcmp: i0.ɵɵComponentDeclaration<RtIconComponent, "rt-icon", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "fill": { "alias": "fill"; "required": false; "isSignal": true; }; "rotate": { "alias": "rotate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
982
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtIconComponent, "rt-icon", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "glyph": { "alias": "glyph"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "fill": { "alias": "fill"; "required": false; "isSignal": true; }; "spin": { "alias": "spin"; "required": false; "isSignal": true; }; "rotate": { "alias": "rotate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
826
983
  }
827
984
  type TRotateInput = number | string | null;
828
985
 
@@ -871,10 +1028,19 @@ declare const RT_ICON_MATERIAL_PRESET_SELECTOR: string;
871
1028
  * Наборов значков два: свой и материальный. Второй нужен только приложению, которое объявляет
872
1029
  * материальный набор оформления, и адрес у него свой — набор лежит в `assets/icons-material`.
873
1030
  *
1031
+ * Третий аргумент — настройки значков. `glyphStrategy` говорит, как рисуется имя Material на входе
1032
+ * `glyph`: `map-first` (по умолчанию) — пара из перечня кита, а без пары шрифт Material Symbols;
1033
+ * `font` — шрифт для любого имени. Шрифт приложение подключает само.
1034
+ *
874
1035
  * @param baseUrl Адрес опубликованного набора. По умолчанию `/icons`.
875
1036
  * @param materialBaseUrl Адрес материального набора. По умолчанию `/icons-material`.
1037
+ * @param options Настройки значков.
876
1038
  */
877
- declare function provideRtIcons(baseUrl?: string, materialBaseUrl?: string): EnvironmentProviders;
1039
+ declare function provideRtIcons(baseUrl?: string, materialBaseUrl?: string, options?: IRtIconsOptions): EnvironmentProviders;
1040
+ /** Настройки значков приложения — третий аргумент `provideRtIcons()`. */
1041
+ interface IRtIconsOptions {
1042
+ readonly glyphStrategy?: IRtIcon.GlyphStrategy;
1043
+ }
878
1044
 
879
1045
  /**
880
1046
  * Адрес, по которому приложение публикует набор из `assets/icons` пакета.
@@ -971,6 +1137,9 @@ declare namespace IRtAsideHeader {
971
1137
  * Доменные действия (отклонить / удалить / снять с публикации и т.п.)
972
1138
  * проецируются в слот `[asideActions]` как ряд `rt-icon-button` справа от title.
973
1139
  *
1140
+ * Слот `[asideHeaderContent]` — строка под заголовком на всю ширину шапки: поиск, вкладки,
1141
+ * сводка. Пустой слот места не занимает.
1142
+ *
974
1143
  * `ViewEncapsulation.None` — для единообразия с rt-dialog-header (стили
975
1144
  * префиксованы `.rt-aside-header`).
976
1145
  *
@@ -1023,7 +1192,7 @@ declare class RtAsideHeaderComponent {
1023
1192
  readonly dismiss: OutputEmitterRef<void>;
1024
1193
  protected onDismiss(): void;
1025
1194
  static ɵfac: i0.ɵɵFactoryDeclaration<RtAsideHeaderComponent, never>;
1026
- static ɵcmp: i0.ɵɵComponentDeclaration<RtAsideHeaderComponent, "rt-aside-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "overline": { "alias": "overline"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "badges": { "alias": "badges"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, { "dismiss": "dismiss"; }, never, ["[asideActions]"], true, never>;
1195
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtAsideHeaderComponent, "rt-aside-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "overline": { "alias": "overline"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "badges": { "alias": "badges"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, { "dismiss": "dismiss"; }, never, ["[asideActions]", "[asideHeaderContent]"], true, never>;
1027
1196
  }
1028
1197
 
1029
1198
  /**
@@ -1052,6 +1221,27 @@ declare class RtAsideFooterComponent {
1052
1221
  static ɵcmp: i0.ɵɵComponentDeclaration<RtAsideFooterComponent, "rt-aside-footer", never, {}, {}, never, ["[asideDismiss]", "[asidePrimary]"], true, never>;
1053
1222
  }
1054
1223
 
1224
+ /**
1225
+ * Блок ошибки запроса боковой панели: надпись и кнопка, которая кладёт в буфер обмена время и
1226
+ * ошибку. Перенос `rtui-aside-error-box` первого кита без Material.
1227
+ *
1228
+ * Обычно его рисует сама панель по входу `requestError`; отдельно он нужен приложению, которое
1229
+ * показывает ошибку в другом месте.
1230
+ */
1231
+ declare class RtAsideErrorBoxComponent {
1232
+ #private;
1233
+ protected readonly title: Signal<string>;
1234
+ protected readonly copied: WritableSignal<boolean>;
1235
+ protected readonly buttonLabel: Signal<string>;
1236
+ protected readonly buttonIcon: Signal<string | null>;
1237
+ /** Ошибка, пришедшая от неудавшегося запроса: уходит в копию как JSON. */
1238
+ readonly error: InputSignal<unknown>;
1239
+ constructor();
1240
+ protected onCopy(): void;
1241
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtAsideErrorBoxComponent, never>;
1242
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtAsideErrorBoxComponent, "rt-aside-error-box", never, { "error": { "alias": "error"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1243
+ }
1244
+
1055
1245
  /**
1056
1246
  * Смысловая секция внутри асайда: единый вертикальный ритм между полями и
1057
1247
  * необязательный заголовок одного стиля. Заменяет разнобой из `fieldset`,
@@ -1367,6 +1557,11 @@ declare namespace IButton {
1367
1557
  type Size = 'sm' | 'md' | 'lg' | 'xl' | '2xl';
1368
1558
  /** Положение иконки относительно лейбла. */
1369
1559
  type IconPos = 'left' | 'right';
1560
+ /**
1561
+ * Подпись во время загрузки: `keep` — спиннер рядом с подписью, `hide` — подпись и иконка
1562
+ * невидимы, но держат ширину кнопки, а спиннер стоит по центру.
1563
+ */
1564
+ type LoadingLabel = 'keep' | 'hide';
1370
1565
  }
1371
1566
 
1372
1567
  /**
@@ -1425,7 +1620,11 @@ declare class RtButtonDirective {
1425
1620
  protected readonly isIconOnly: Signal<boolean>;
1426
1621
  /** Текстовый лейбл кнопки. Если null — кнопка только с иконкой. */
1427
1622
  readonly label: InputSignal<string | null>;
1428
- /** CSS-класс иконки (например, `check`). Если null — без иконки. */
1623
+ /**
1624
+ * Значок кнопки: имя кита (`check`) или имя Material (`arrow_back`). Имя Material рисуется
1625
+ * так же, как вход `glyph` у `rt-icon`: парой из перечня кита или лигатурой шрифта — по
1626
+ * настройке `glyphStrategy` у `provideRtIcons()`. Если null — без иконки.
1627
+ */
1429
1628
  readonly icon: InputSignal<string | null>;
1430
1629
  /** Сторона размещения иконки относительно лейбла. */
1431
1630
  readonly iconPos: InputSignal<IButton.IconPos>;
@@ -1439,6 +1638,11 @@ declare class RtButtonDirective {
1439
1638
  readonly loading: InputSignalWithTransform<boolean, BooleanInput>;
1440
1639
  /** Кастомный CSS-класс иконки в loading. Если null — встроенный CSS-спиннер. */
1441
1640
  readonly loadingIcon: InputSignal<string | null>;
1641
+ /**
1642
+ * Подпись во время загрузки. `hide` оставляет подпись и иконку в кнопке невидимыми — ширина
1643
+ * не скачет, — а спиннер ставит по центру; имя кнопки для скринридера остаётся.
1644
+ */
1645
+ readonly loadingLabel: InputSignal<IButton.LoadingLabel>;
1442
1646
  /**
1443
1647
  * Положение двухпозиционной кнопки: `true` — нажата, `false` — отжата, `null` — положения нет
1444
1648
  * вовсе.
@@ -1459,7 +1663,7 @@ declare class RtButtonDirective {
1459
1663
  protected get ariaPressed(): string | null;
1460
1664
  protected get hostClasses(): Record<string, boolean>;
1461
1665
  static ɵfac: i0.ɵɵFactoryDeclaration<RtButtonDirective, never>;
1462
- static ɵdir: i0.ɵɵDirectiveDeclaration<RtButtonDirective, "button[rtButton], a[rtButton]", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconPos": { "alias": "iconPos"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingIcon": { "alias": "loadingIcon"; "required": false; "isSignal": true; }; "pressed": { "alias": "pressed"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof RtRippleDirective; inputs: { "rippleDisabled": "rippleDisabled"; }; outputs: {}; }, { directive: typeof RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
1666
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RtButtonDirective, "button[rtButton], a[rtButton]", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconPos": { "alias": "iconPos"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingIcon": { "alias": "loadingIcon"; "required": false; "isSignal": true; }; "loadingLabel": { "alias": "loadingLabel"; "required": false; "isSignal": true; }; "pressed": { "alias": "pressed"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof RtRippleDirective; inputs: { "rippleDisabled": "rippleDisabled"; }; outputs: {}; }, { directive: typeof RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
1463
1667
  }
1464
1668
 
1465
1669
  /**
@@ -3533,9 +3737,10 @@ type TRtDialogSize = 'sm' | 'md' | 'lg';
3533
3737
  /**
3534
3738
  * Презентационный styled-frame для модалки поверх CDK Overlay.
3535
3739
  *
3536
- * Видимость / backdrop / scroll-block / ESC / focus-trap — НЕ внутренняя
3537
- * ответственность компонента. Это обеспечивает CDK Overlay через
3538
- * `RtDialogService.open()`. rt-dialog здесь — стилизованная "рамка"
3740
+ * Видимость / backdrop / scroll-block / ESC / фокус — НЕ внутренняя
3741
+ * ответственность компонента. Это обеспечивает `RtDialogService.open()`: оверлей CDK, а
3742
+ * ловушку и первый фокус — по флагам `trapFocus`, `restoreFocus` и `autoFocus` (по
3743
+ * умолчанию выключены). Рамка несёт `tabindex="-1"`, чтобы `autoFocus: 'dialog'` мог её взять. rt-dialog здесь — стилизованная "рамка"
3539
3744
  * (padding-free контейнер) с size-вариантами + ng-content слотом.
3540
3745
  *
3541
3746
  * Композиция:
@@ -3579,6 +3784,9 @@ declare class RtDialogComponent {
3579
3784
  * Контент-компонент инжектит `RtDialogRef` и закрывает модалку через `.close(result?)`.
3580
3785
  * Родитель, открывший модалку, ждёт результата через `.afterClosed()`.
3581
3786
  *
3787
+ * Слой, снятый без `close()` — переходом по адресу или уничтожением хозяина, — тоже завершает
3788
+ * `afterClosed()`: подписчик получает `undefined`. Иначе он ждал бы ответа, которого не будет.
3789
+ *
3582
3790
  * Generic `<T>` — тип результата `close(result)`. Дефолт `unknown` — если результат
3583
3791
  * не нужен, оставляй generic пустым.
3584
3792
  *
@@ -3612,7 +3820,7 @@ declare class RtDialogRef<T = unknown> {
3612
3820
  constructor(overlayRef: OverlayRef);
3613
3821
  /** Закрывает overlay; опционально передаёт результат подписчикам `afterClosed()`. */
3614
3822
  close(result?: T): void;
3615
- /** Эмиттит один раз — результат `close(result)` — и завершается. */
3823
+ /** Эмиттит один раз — результат `close(result)` или `undefined` при снятом слое — и завершается. */
3616
3824
  afterClosed(): Observable<T | undefined>;
3617
3825
  }
3618
3826
 
@@ -3630,7 +3838,18 @@ interface IRtDialogConfig<TData = unknown> {
3630
3838
  closeOnBackdropClick?: boolean;
3631
3839
  /** Закрывать модалку по ESC. По дефолту `true`. */
3632
3840
  closeOnEscape?: boolean;
3841
+ /** Держать Tab внутри модалки, пока она открыта. По дефолту `false` — как было. */
3842
+ trapFocus?: boolean;
3843
+ /** После закрытия вернуть фокус туда, где он стоял при открытии. По дефолту `false`. */
3844
+ restoreFocus?: boolean;
3845
+ /**
3846
+ * Куда поставить фокус при открытии: `'dialog'` — на рамку окна, `'first-tabbable'` — на первый
3847
+ * элемент, до которого доходит Tab. По дефолту `false` — фокус не трогается.
3848
+ */
3849
+ autoFocus?: TRtDialogAutoFocus;
3633
3850
  }
3851
+ /** Куда диалог ставит фокус при открытии; `false` — никуда. */
3852
+ type TRtDialogAutoFocus = 'dialog' | 'first-tabbable' | false;
3634
3853
  /**
3635
3854
  * Программный API для открытия модалок поверх CDK Overlay.
3636
3855
  *
@@ -3717,6 +3936,9 @@ declare const RT_DIALOG_DATA: InjectionToken<unknown>;
3717
3936
  * (внутри inline `<rt-dialog [visible]>`) `RtDialogRef` не зарегистрирован — клик
3718
3937
  * по close-кнопке эмитит output `(closeAction)`, который должен повесить родитель.
3719
3938
  *
3939
+ * Перед заголовком — место для значка или другого элемента: узел с атрибутом
3940
+ * `rtDialogHeaderLead` проецируется туда. Пустое место ничего не занимает.
3941
+ *
3720
3942
  * `ViewEncapsulation.None` — для единообразия с rt-dialog (стили префиксованы `.rt-dialog-header`).
3721
3943
  *
3722
3944
  * @example
@@ -3740,13 +3962,16 @@ declare class RtDialogHeaderComponent {
3740
3962
  readonly closable: InputSignalWithTransform<boolean, BooleanInput>;
3741
3963
  protected onClose(): void;
3742
3964
  static ɵfac: i0.ɵɵFactoryDeclaration<RtDialogHeaderComponent, never>;
3743
- static ɵcmp: i0.ɵɵComponentDeclaration<RtDialogHeaderComponent, "rt-dialog-header", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3965
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtDialogHeaderComponent, "rt-dialog-header", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; }, {}, never, ["[rtDialogHeaderLead]"], true, never>;
3744
3966
  }
3745
3967
 
3968
+ /** Как подвал раскладывает содержимое: к началу, по центру, к концу или по обоим краям. */
3969
+ type TRtDialogFooterAlign = 'start' | 'center' | 'end' | 'between';
3746
3970
  /**
3747
3971
  * Footer-слот для композиции внутри `<rt-dialog>`. Принимает любой проектированный
3748
3972
  * контент (action-кнопки, статусные сообщения и т.п.), оборачивает в footer с
3749
- * top-border и flex-раскладкой `justify-content: flex-end`.
3973
+ * top-border и flex-раскладкой; вход `align` прижимает содержимое к концу (по умолчанию),
3974
+ * к началу, к центру или разводит по краям (`between`).
3750
3975
  *
3751
3976
  * `ViewEncapsulation.None` — для единообразия с rt-dialog.
3752
3977
  *
@@ -3759,8 +3984,30 @@ declare class RtDialogHeaderComponent {
3759
3984
  * \`\`\`
3760
3985
  */
3761
3986
  declare class RtDialogFooterComponent {
3987
+ readonly align: InputSignal<TRtDialogFooterAlign>;
3762
3988
  static ɵfac: i0.ɵɵFactoryDeclaration<RtDialogFooterComponent, never>;
3763
- static ɵcmp: i0.ɵɵComponentDeclaration<RtDialogFooterComponent, "rt-dialog-footer", never, {}, {}, never, ["*"], true, never>;
3989
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtDialogFooterComponent, "rt-dialog-footer", never, { "align": { "alias": "align"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3990
+ }
3991
+
3992
+ /**
3993
+ * Тело модалки для композиции внутри `<rt-dialog>` между шапкой и подвалом. Даёт отступ и
3994
+ * прокрутку: длинное содержимое прокручивается внутри тела, а шапка и подвал стоят на месте.
3995
+ * Отступ задаёт `--rt-dialog-content-padding`, потолок высоты — `--rt-dialog-content-max-height`.
3996
+ *
3997
+ * Часть необязательная: окно со своей обёрткой тела выглядит как прежде.
3998
+ *
3999
+ * @example
4000
+ * \`\`\`html
4001
+ * <rt-dialog size="md">
4002
+ * <rt-dialog-header title="Создание записи" />
4003
+ * <rt-dialog-content>...форма...</rt-dialog-content>
4004
+ * <rt-dialog-footer>...</rt-dialog-footer>
4005
+ * </rt-dialog>
4006
+ * \`\`\`
4007
+ */
4008
+ declare class RtDialogContentComponent {
4009
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtDialogContentComponent, never>;
4010
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtDialogContentComponent, "rt-dialog-content", never, {}, {}, never, ["*"], true, never>;
3764
4011
  }
3765
4012
 
3766
4013
  declare class RtDownloadLinkComponent {
@@ -3907,6 +4154,382 @@ declare class RtDynamicListComponent implements OnInit {
3907
4154
  static ɵcmp: i0.ɵɵComponentDeclaration<RtDynamicListComponent, "rt-dynamic-list", never, { "pageModel": { "alias": "pageModel"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fetching": { "alias": "fetching"; "required": false; "isSignal": true; }; "empty": { "alias": "empty"; "required": false; "isSignal": true; }; "filtered": { "alias": "filtered"; "required": false; "isSignal": true; }; "showClearFilters": { "alias": "showClearFilters"; "required": false; "isSignal": true; }; "showRefresh": { "alias": "showRefresh"; "required": false; "isSignal": true; }; "showColumnSettings": { "alias": "showColumnSettings"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "allSelected": { "alias": "allSelected"; "required": false; "isSignal": true; }; "someSelected": { "alias": "someSelected"; "required": false; "isSignal": true; }; "selectAllDisabled": { "alias": "selectAllDisabled"; "required": false; "isSignal": true; }; "selectedCount": { "alias": "selectedCount"; "required": false; "isSignal": true; }; "emptyTitle": { "alias": "emptyTitle"; "required": false; "isSignal": true; }; "emptyDescription": { "alias": "emptyDescription"; "required": false; "isSignal": true; }; "searchTerm": { "alias": "searchTerm"; "required": false; "isSignal": true; }; }, { "searchChange": "searchChange"; "refreshed": "refreshed"; "filtersCleared": "filtersCleared"; "columnSettingsOpened": "columnSettingsOpened"; "pageChange": "pageChange"; "perPageChange": "perPageChange"; "allSelectedChange": "allSelectedChange"; }, ["selectorsTpl", "actionsTpl"], ["*"], true, never>;
3908
4155
  }
3909
4156
 
4157
+ /**
4158
+ * Модель `rt-dynamic-selector`: один корневой неймспейс с префиксом `I`.
4159
+ */
4160
+ declare namespace IRtDynamicSelector {
4161
+ /** Состояние флажка «Выбрать всё» по видимым пунктам. */
4162
+ type SelectAllState = 'none' | 'some' | 'all';
4163
+ /** Как выбирает всплывающий список: один пункт переключателем или несколько флажками. */
4164
+ type Mode = 'single' | 'multi';
4165
+ /** Строки всплывающего выбора: отмеченные раньше над разделителем и найденные под ним. */
4166
+ interface PopupRows<T> {
4167
+ readonly ticked: ReadonlyArray<T>;
4168
+ readonly found: ReadonlyArray<T>;
4169
+ }
4170
+ /** Строка всплывающего выбора, готовая для разметки. */
4171
+ interface PopupRow<T> {
4172
+ readonly entity: T;
4173
+ readonly key: unknown;
4174
+ readonly label: string;
4175
+ readonly ticked: boolean;
4176
+ /** Под строкой стоит разделитель. */
4177
+ readonly separated: boolean;
4178
+ }
4179
+ /** Строка списка выбранного, готовая для разметки. */
4180
+ interface ListRow<T> {
4181
+ readonly item: T;
4182
+ readonly key: unknown;
4183
+ readonly label: string;
4184
+ /** Строку нельзя убрать из списка. */
4185
+ readonly locked: boolean;
4186
+ }
4187
+ /** Перенос строки списка выбранного: откуда и куда. */
4188
+ interface Move {
4189
+ readonly from: number;
4190
+ readonly to: number;
4191
+ }
4192
+ /** Обстановка шаблона строки, который принёс вызывающий. */
4193
+ interface RowContext<T> {
4194
+ readonly $implicit: T;
4195
+ }
4196
+ /** Правка строки поля списка строк: прежнее значение и новое. */
4197
+ interface TextEdit {
4198
+ readonly previous: string;
4199
+ readonly next: string;
4200
+ }
4201
+ }
4202
+
4203
+ /**
4204
+ * Маркеры частей строки списка выбранного — своим файлом, как у соседних семей.
4205
+ *
4206
+ * Маркер держит свой шаблон и о списке не знает ничего: селектор и поле списка строк читают его
4207
+ * среди своего содержимого и отдают шаблон списку. Удаление и ручка перетаскивания остаются
4208
+ * за китом.
4209
+ */
4210
+ /**
4211
+ * Свои кнопки у каждой строки: стоят перед кнопкой удаления.
4212
+ *
4213
+ * @example
4214
+ * ```html
4215
+ * <rt-dynamic-selector keyExp="id" displayExp="name" [entities]="people()">
4216
+ * <ng-template rtDynamicSelectorRowControls let-person>
4217
+ * <rt-icon-button icon="info" ariaLabel="About" (clicked)="open(person)" />
4218
+ * </ng-template>
4219
+ * </rt-dynamic-selector>
4220
+ * ```
4221
+ */
4222
+ declare class RtDynamicSelectorRowControlsDirective<T = unknown> {
4223
+ readonly templateRef: TemplateRef<IRtDynamicSelector.RowContext<T>>;
4224
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtDynamicSelectorRowControlsDirective<any>, never>;
4225
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RtDynamicSelectorRowControlsDirective<any>, "[rtDynamicSelectorRowControls]", never, {}, {}, never, never, true, never>;
4226
+ }
4227
+ /** Своё название строки вместо подписи из поля записи. */
4228
+ declare class RtDynamicSelectorRowTitleDirective<T = unknown> {
4229
+ readonly templateRef: TemplateRef<IRtDynamicSelector.RowContext<T>>;
4230
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtDynamicSelectorRowTitleDirective<any>, never>;
4231
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RtDynamicSelectorRowTitleDirective<any>, "[rtDynamicSelectorRowTitle]", never, {}, {}, never, never, true, never>;
4232
+ }
4233
+
4234
+ /**
4235
+ * Поле списка строк: строки человек набирает сам. Значение — массив строк в порядке списка.
4236
+ * Enter или уход из поля добавляют срезанный по краям текст в конец; пустой и повторный не
4237
+ * добавляются. Сброс, очистка, удаление строки и перетаскивание — те же, что у селектора.
4238
+ *
4239
+ * @example
4240
+ * ```html
4241
+ * <rt-dynamic-input editable [formControl]="tags" />
4242
+ * ```
4243
+ */
4244
+ declare class RtDynamicInputComponent extends RtFormControlBase<string[]> {
4245
+ #private;
4246
+ protected readonly addLabel: Signal<string>;
4247
+ protected readonly placeholderLabel: Signal<string>;
4248
+ protected readonly field: Signal<ElementRef<HTMLElement> | undefined>;
4249
+ protected readonly rowControls: Signal<RtDynamicSelectorRowControlsDirective<string> | undefined>;
4250
+ protected readonly controlsTpl: Signal<TemplateRef<IRtDynamicSelector.RowContext<string>> | null>;
4251
+ /** Поле набора открыто, и в нём текст. */
4252
+ protected readonly isFieldShown: WritableSignal<boolean>;
4253
+ protected readonly draft: WritableSignal<string>;
4254
+ /** Приглашение снимается нажатием его кнопки и до новой записи формы не возвращается. */
4255
+ protected readonly isInvitationDismissed: WritableSignal<boolean>;
4256
+ protected readonly rows: Signal<IRtDynamicSelector.ListRow<string>[]>;
4257
+ protected readonly isInvitationShown: Signal<boolean>;
4258
+ protected readonly isAddShown: Signal<boolean>;
4259
+ protected readonly isKeysReset: Signal<boolean>;
4260
+ protected readonly isKeysClear: Signal<boolean>;
4261
+ /** Правки в шаблоне строки держат сброс и очистку включёнными, даже когда строки не менялись. */
4262
+ protected readonly isResetDisabled: Signal<boolean>;
4263
+ protected readonly isClearDisabled: Signal<boolean>;
4264
+ protected readonly addTitle: Signal<string>;
4265
+ protected readonly fieldPlaceholder: Signal<string>;
4266
+ protected readonly hasValue: Signal<boolean>;
4267
+ readonly buttonTitle: InputSignal<string>;
4268
+ readonly placeholder: InputSignal<string>;
4269
+ /** Строки, которые нельзя убрать из списка. */
4270
+ readonly readonlyKeys: InputSignal<ReadonlyArray<string>>;
4271
+ readonly draggable: InputSignalWithTransform<boolean, unknown>;
4272
+ /** Шаг скругления кнопок-иконок списка; по умолчанию они круглые. */
4273
+ readonly buttonRadius: InputSignal<TRtRadius | null>;
4274
+ readonly editable: InputSignalWithTransform<boolean, unknown>;
4275
+ readonly invitation: InputSignalWithTransform<boolean, unknown>;
4276
+ readonly invitationIcon: InputSignal<IRtIcon.Name | null>;
4277
+ readonly invitationDescription: InputSignal<string>;
4278
+ /** Корзина строк; без неё строки убирает только очистка или сам вызывающий. */
4279
+ readonly removeShown: InputSignalWithTransform<boolean, unknown>;
4280
+ /** Сброс и очистка под списком: `false` их убирает, кнопка добавления остаётся. */
4281
+ readonly listActionsShown: InputSignalWithTransform<boolean, unknown>;
4282
+ /**
4283
+ * Строки правлены в шаблоне вызывающего: сброс и очистка включены и тогда, когда строки прежние.
4284
+ * Сброс сообщает `listReset`, очистка — `listCleared`, и вызывающий снимает свои правки.
4285
+ */
4286
+ readonly extraChanged: InputSignalWithTransform<boolean, unknown>;
4287
+ readonly listReset: OutputEmitterRef<void>;
4288
+ readonly listCleared: OutputEmitterRef<void>;
4289
+ readonly displayText: Signal<string>;
4290
+ /** Записанное формой становится и списком, и значением для сброса; пустой массив список опустошает. */
4291
+ writeValue(value: string[] | null): void;
4292
+ protected onAdd(): void;
4293
+ /** Enter или уход из поля: пустой текст поле не закрывает, повторный закрывает без изменений. */
4294
+ protected onCommit(): void;
4295
+ protected onRemoved(key: unknown): void;
4296
+ protected onMoved(move: IRtDynamicSelector.Move): void;
4297
+ protected onEdited(edit: IRtDynamicSelector.TextEdit): void;
4298
+ protected onReset(): void;
4299
+ protected onCleared(): void;
4300
+ protected getEmptyValue(): string[];
4301
+ protected focusAfterClear(): void;
4302
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtDynamicInputComponent, never>;
4303
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtDynamicInputComponent, "rt-dynamic-input", never, { "buttonTitle": { "alias": "buttonTitle"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "readonlyKeys": { "alias": "readonlyKeys"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "buttonRadius": { "alias": "buttonRadius"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "invitation": { "alias": "invitation"; "required": false; "isSignal": true; }; "invitationIcon": { "alias": "invitationIcon"; "required": false; "isSignal": true; }; "invitationDescription": { "alias": "invitationDescription"; "required": false; "isSignal": true; }; "removeShown": { "alias": "removeShown"; "required": false; "isSignal": true; }; "listActionsShown": { "alias": "listActionsShown"; "required": false; "isSignal": true; }; "extraChanged": { "alias": "extraChanged"; "required": false; "isSignal": true; }; }, { "listReset": "listReset"; "listCleared": "listCleared"; }, ["rowControls"], never, true, never>;
4304
+ }
4305
+
4306
+ /**
4307
+ * Список выбранного семьи динамических селекторов: строки с удалением, ручкой перетаскивания и
4308
+ * правкой, под ними полоса с кнопкой добавления вызывающего, сбросом и очисткой. Значения список
4309
+ * не держит: он сообщает, что человек сделал, а селектор и поле списка строк решают, что из этого
4310
+ * выходит.
4311
+ */
4312
+ declare class RtDynamicSelectorListComponent<TItem> {
4313
+ #private;
4314
+ /** На узком экране подсказки кнопок не показываются: наведения там нет. */
4315
+ protected readonly isNarrow: Signal<boolean>;
4316
+ protected readonly dragLabel: Signal<string>;
4317
+ protected readonly removeLabel: Signal<string>;
4318
+ protected readonly editLabel: Signal<string>;
4319
+ protected readonly applyLabel: Signal<string>;
4320
+ protected readonly cancelLabel: Signal<string>;
4321
+ protected readonly resetLabel: Signal<string>;
4322
+ protected readonly clearLabel: Signal<string>;
4323
+ /** Строка, открытая для правки, и текст в её поле. */
4324
+ protected readonly editedIndex: WritableSignal<number | null>;
4325
+ protected readonly draft: WritableSignal<string>;
4326
+ readonly rows: InputSignal<ReadonlyArray<IRtDynamicSelector.ListRow<TItem>>>;
4327
+ readonly draggable: InputSignalWithTransform<boolean, unknown>;
4328
+ readonly editable: InputSignalWithTransform<boolean, unknown>;
4329
+ readonly disabled: InputSignalWithTransform<boolean, unknown>;
4330
+ /** Полоса под строками; приглашение вызывающего встаёт на её место. */
4331
+ readonly actionsShown: InputSignalWithTransform<boolean, unknown>;
4332
+ /** Сброс и очистка в полосе; без них в полосе остаётся кнопка добавления. */
4333
+ readonly resetClearShown: InputSignalWithTransform<boolean, unknown>;
4334
+ /** Корзина строк; без неё строки двигаются и правятся, но не убираются. */
4335
+ readonly removeShown: InputSignalWithTransform<boolean, unknown>;
4336
+ readonly resetDisabled: InputSignalWithTransform<boolean, unknown>;
4337
+ readonly clearDisabled: InputSignalWithTransform<boolean, unknown>;
4338
+ /** Шаг скругления кнопок-иконок списка; по умолчанию они круглые. */
4339
+ readonly buttonRadius: InputSignal<TRtRadius | null>;
4340
+ readonly titleTpl: InputSignal<TemplateRef<IRtDynamicSelector.RowContext<TItem>> | null>;
4341
+ readonly controlsTpl: InputSignal<TemplateRef<IRtDynamicSelector.RowContext<TItem>> | null>;
4342
+ readonly removed: OutputEmitterRef<unknown>;
4343
+ readonly moved: OutputEmitterRef<IRtDynamicSelector.Move>;
4344
+ readonly edited: OutputEmitterRef<IRtDynamicSelector.TextEdit>;
4345
+ readonly resetClicked: OutputEmitterRef<void>;
4346
+ readonly cleared: OutputEmitterRef<void>;
4347
+ /** Строка, взятая из чужого списка, ничего не меняет; брошенная на своё место — тоже. */
4348
+ protected onDrop(event: CdkDragDrop<unknown>): void;
4349
+ protected onRemove(row: IRtDynamicSelector.ListRow<TItem>): void;
4350
+ protected onEditStart(index: number, row: IRtDynamicSelector.ListRow<TItem>): void;
4351
+ protected onEditApply(row: IRtDynamicSelector.ListRow<TItem>): void;
4352
+ protected onEditCancel(): void;
4353
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtDynamicSelectorListComponent<any>, never>;
4354
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtDynamicSelectorListComponent<any>, "rt-dynamic-selector-list", never, { "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "actionsShown": { "alias": "actionsShown"; "required": false; "isSignal": true; }; "resetClearShown": { "alias": "resetClearShown"; "required": false; "isSignal": true; }; "removeShown": { "alias": "removeShown"; "required": false; "isSignal": true; }; "resetDisabled": { "alias": "resetDisabled"; "required": false; "isSignal": true; }; "clearDisabled": { "alias": "clearDisabled"; "required": false; "isSignal": true; }; "buttonRadius": { "alias": "buttonRadius"; "required": false; "isSignal": true; }; "titleTpl": { "alias": "titleTpl"; "required": false; "isSignal": true; }; "controlsTpl": { "alias": "controlsTpl"; "required": false; "isSignal": true; }; }, { "removed": "removed"; "moved": "moved"; "edited": "edited"; "resetClicked": "resetClicked"; "cleared": "cleared"; }, never, ["*"], true, never>;
4355
+ }
4356
+
4357
+ /** Сколько ждёт поиск на сервере после последней нажатой клавиши. */
4358
+ declare const RT_DYNAMIC_SELECTOR_SEARCH_DEBOUNCE: number;
4359
+ /**
4360
+ * Всплывающий выбор динамического селектора: поиск, флажки или переключатели, «Выбрать всё»,
4361
+ * догрузка при прокрутке, «Отмена» и «Применить». Отметки живут в самом окне и уходят наружу
4362
+ * только по «Применить»: окно создаётся заново при каждом открытии, и закрытие их сбрасывает.
4363
+ */
4364
+ declare class RtDynamicSelectorPopupComponent<TEntity extends object> implements OnInit {
4365
+ #private;
4366
+ protected readonly searchLabel: Signal<string>;
4367
+ protected readonly selectAllLabel: Signal<string>;
4368
+ protected readonly multiLabel: Signal<string>;
4369
+ protected readonly multiHintLabel: Signal<string>;
4370
+ protected readonly noResultsLabel: Signal<string>;
4371
+ protected readonly cancelLabel: Signal<string>;
4372
+ protected readonly applyLabel: Signal<string>;
4373
+ /** Отмеченные ключи — ещё не применённые. */
4374
+ protected readonly ticked: WritableSignal<unknown[]>;
4375
+ protected readonly query: WritableSignal<string>;
4376
+ /** Выбор нескольких включён: без него простое нажатие оставляет одну отметку. */
4377
+ protected readonly isMultiOn: WritableSignal<boolean>;
4378
+ /** Найденные строки: местный поиск отбирает сам, серверный отдаёт запрос наружу. */
4379
+ protected readonly found: Signal<TEntity[]>;
4380
+ protected readonly rows: Signal<IRtDynamicSelector.PopupRows<TEntity>>;
4381
+ protected readonly visibleKeys: Signal<unknown[]>;
4382
+ /** Строки для разметки: отмеченные раньше над разделителем, найденные — под ним. */
4383
+ protected readonly rowItems: Signal<IRtDynamicSelector.PopupRow<TEntity>[]>;
4384
+ protected readonly hasRows: Signal<boolean>;
4385
+ protected readonly selectAllState: Signal<IRtDynamicSelector.SelectAllState>;
4386
+ protected readonly isSingle: Signal<boolean>;
4387
+ protected readonly isSelectAllShown: Signal<boolean>;
4388
+ protected readonly isMultiToggleVisible: Signal<boolean>;
4389
+ protected readonly lastPinnedKey: Signal<unknown>;
4390
+ protected readonly isApplyDisabled: Signal<boolean>;
4391
+ protected readonly isNavShown: Signal<boolean>;
4392
+ /** Предлагаемые записи: ещё не выбранные, отсортированные селектором. */
4393
+ readonly entities: InputSignal<ReadonlyArray<TEntity>>;
4394
+ readonly keyExp: InputSignal<keyof TEntity & string>;
4395
+ readonly displayExp: InputSignal<keyof TEntity & string>;
4396
+ readonly mode: InputSignal<IRtDynamicSelector.Mode>;
4397
+ readonly multiToggleShown: InputSignalWithTransform<boolean, unknown>;
4398
+ readonly selectAllShown: InputSignalWithTransform<boolean, unknown>;
4399
+ readonly localSearch: InputSignalWithTransform<boolean, unknown>;
4400
+ readonly lazyLoad: InputSignalWithTransform<boolean, unknown>;
4401
+ readonly loading: InputSignalWithTransform<boolean, unknown>;
4402
+ readonly fetching: InputSignalWithTransform<boolean, unknown>;
4403
+ readonly pinnedKeys: InputSignal<ReadonlyArray<unknown>>;
4404
+ readonly navigateTitle: InputSignal<string>;
4405
+ readonly navigateLink: InputSignal<string>;
4406
+ /** Запрос, с которым выбор открывается; событием поиска он не уходит — вызывающий его знает. */
4407
+ readonly searchTerm: InputSignal<string>;
4408
+ /** Применённые ключи в порядке отметок. */
4409
+ readonly applied: OutputEmitterRef<unknown[]>;
4410
+ readonly cancelled: OutputEmitterRef<void>;
4411
+ /** Запрос для поиска на сервере: через паузу после последней клавиши, стёртый — пустой строкой. */
4412
+ readonly searchChange: OutputEmitterRef<string>;
4413
+ readonly loadMore: OutputEmitterRef<void>;
4414
+ /** Отмеченные записи: пустой список при открытии и текущие отметки после каждого поиска. */
4415
+ readonly temporaryChoiceChange: OutputEmitterRef<TEntity[]>;
4416
+ ngOnInit(): void;
4417
+ protected onQueryChange(value: string | null): void;
4418
+ /** Нажатие строки флажков: при выключенном выборе нескольких без Ctrl или Cmd остаётся одна отметка. */
4419
+ protected onRowClick(event: MouseEvent, item: TEntity): void;
4420
+ protected onRadioChange(item: TEntity): void;
4421
+ protected onSelectAll(checked: boolean): void;
4422
+ protected onMultiToggle(value: boolean): void;
4423
+ protected onApply(): void;
4424
+ protected onCancel(): void;
4425
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtDynamicSelectorPopupComponent<any>, never>;
4426
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtDynamicSelectorPopupComponent<any>, "rt-dynamic-selector-popup", never, { "entities": { "alias": "entities"; "required": false; "isSignal": true; }; "keyExp": { "alias": "keyExp"; "required": true; "isSignal": true; }; "displayExp": { "alias": "displayExp"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "multiToggleShown": { "alias": "multiToggleShown"; "required": false; "isSignal": true; }; "selectAllShown": { "alias": "selectAllShown"; "required": false; "isSignal": true; }; "localSearch": { "alias": "localSearch"; "required": false; "isSignal": true; }; "lazyLoad": { "alias": "lazyLoad"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fetching": { "alias": "fetching"; "required": false; "isSignal": true; }; "pinnedKeys": { "alias": "pinnedKeys"; "required": false; "isSignal": true; }; "navigateTitle": { "alias": "navigateTitle"; "required": false; "isSignal": true; }; "navigateLink": { "alias": "navigateLink"; "required": false; "isSignal": true; }; "searchTerm": { "alias": "searchTerm"; "required": false; "isSignal": true; }; }, { "applied": "applied"; "cancelled": "cancelled"; "searchChange": "searchChange"; "loadMore": "loadMore"; "temporaryChoiceChange": "temporaryChoiceChange"; }, never, never, true, never>;
4427
+ }
4428
+
4429
+ /**
4430
+ * Динамический селектор: поле формы со списком выбранных записей. Значение — массив ключей в
4431
+ * порядке списка. Записи добавляются всплывающим выбором, убираются корзиной строки, список
4432
+ * возвращается к записанному формой сбросом и пустеет очисткой — кроме строк только для чтения.
4433
+ *
4434
+ * @example
4435
+ * ```html
4436
+ * <rt-dynamic-selector keyExp="id" displayExp="name" [entities]="people()" [formControl]="team" />
4437
+ * ```
4438
+ */
4439
+ declare class RtDynamicSelectorComponent<TEntity extends object> extends RtFormControlBase<unknown[]> {
4440
+ #private;
4441
+ protected readonly addLabel: Signal<string>;
4442
+ protected readonly nothingToChooseLabel: Signal<string>;
4443
+ /** Всплывающий выбор открывается от нажатой кнопки добавления: у полосы и у приглашения — свой. */
4444
+ protected readonly popovers: Signal<readonly RtPopoverDirective[]>;
4445
+ protected readonly rowTitle: Signal<RtDynamicSelectorRowTitleDirective<TEntity> | undefined>;
4446
+ protected readonly rowControls: Signal<RtDynamicSelectorRowControlsDirective<TEntity> | undefined>;
4447
+ protected readonly titleTpl: Signal<TemplateRef<IRtDynamicSelector.RowContext<TEntity>> | null>;
4448
+ protected readonly controlsTpl: Signal<TemplateRef<IRtDynamicSelector.RowContext<TEntity>> | null>;
4449
+ /** Выбранные записи в порядке значения; ключ, которого нет среди записей, строки не рисует. */
4450
+ protected readonly chosen: Signal<TEntity[]>;
4451
+ protected readonly rows: Signal<IRtDynamicSelector.ListRow<TEntity>[]>;
4452
+ /** Что предлагает всплывающий выбор: ещё не выбранное, в порядке вызывающего или по алфавиту. */
4453
+ protected readonly offered: Signal<TEntity[]>;
4454
+ protected readonly hasOffer: Signal<boolean>;
4455
+ protected readonly isNothingToChoose: Signal<boolean>;
4456
+ protected readonly isAddShown: Signal<boolean>;
4457
+ protected readonly isKeysReset: Signal<boolean>;
4458
+ protected readonly isKeysClear: Signal<boolean>;
4459
+ /** Правки в шаблоне строки держат сброс и очистку включёнными, даже когда ключи не менялись. */
4460
+ protected readonly isResetDisabled: Signal<boolean>;
4461
+ protected readonly isClearDisabled: Signal<boolean>;
4462
+ protected readonly addTitle: Signal<string>;
4463
+ protected readonly hasValue: Signal<boolean>;
4464
+ /** Записи, из которых выбирают; у каждой есть поле ключа и поле подписи. */
4465
+ readonly entities: InputSignal<ReadonlyArray<TEntity>>;
4466
+ readonly keyExp: InputSignal<keyof TEntity & string>;
4467
+ readonly displayExp: InputSignal<keyof TEntity & string>;
4468
+ readonly mode: InputSignal<IRtDynamicSelector.Mode>;
4469
+ /** Название кнопки добавления; пустое — «Add» из словаря кита. */
4470
+ readonly buttonTitle: InputSignal<string>;
4471
+ readonly addShown: InputSignalWithTransform<boolean, unknown>;
4472
+ /** Корзина строк; без неё записи убирает только очистка или сам вызывающий. */
4473
+ readonly removeShown: InputSignalWithTransform<boolean, unknown>;
4474
+ /** Сброс и очистка под списком: `false` их убирает, кнопка добавления остаётся. */
4475
+ readonly listActionsShown: InputSignalWithTransform<boolean, unknown>;
4476
+ /**
4477
+ * Строки правлены в шаблоне вызывающего: сброс и очистка включены и тогда, когда ключи прежние.
4478
+ * Сброс сообщает `listReset`, очистка — `listCleared`, и вызывающий снимает свои правки.
4479
+ */
4480
+ readonly extraChanged: InputSignalWithTransform<boolean, unknown>;
4481
+ /** Запрос, с которым открывается всплывающий выбор; событием поиска он не уходит. */
4482
+ readonly searchTerm: InputSignal<string>;
4483
+ /** Ключи, которые нельзя убрать из списка. */
4484
+ readonly readonlyKeys: InputSignal<ReadonlyArray<unknown>>;
4485
+ /** Ключи строк всплывающего выбора, под последней из которых стоит разделитель. */
4486
+ readonly pinnedKeys: InputSignal<ReadonlyArray<unknown>>;
4487
+ readonly draggable: InputSignalWithTransform<boolean, unknown>;
4488
+ /** Шаг скругления кнопок-иконок списка; по умолчанию они круглые. */
4489
+ readonly buttonRadius: InputSignal<TRtRadius | null>;
4490
+ /** Приглашение вместо полосы кнопок: значок, описание и кнопка добавления. */
4491
+ readonly invitation: InputSignalWithTransform<boolean, unknown>;
4492
+ readonly invitationIcon: InputSignal<IRtIcon.Name | null>;
4493
+ readonly invitationDescription: InputSignal<string>;
4494
+ readonly multiToggleShown: InputSignalWithTransform<boolean, unknown>;
4495
+ readonly selectAllShown: InputSignalWithTransform<boolean, unknown>;
4496
+ readonly localSearch: InputSignalWithTransform<boolean, unknown>;
4497
+ readonly lazyLoad: InputSignalWithTransform<boolean, unknown>;
4498
+ readonly loading: InputSignalWithTransform<boolean, unknown>;
4499
+ readonly fetching: InputSignalWithTransform<boolean, unknown>;
4500
+ readonly navigateTitle: InputSignal<string>;
4501
+ readonly navigateLink: InputSignal<string>;
4502
+ readonly sortFn: InputSignal<((a: TEntity, b: TEntity) => number) | null>;
4503
+ /** Выбранные записи: те же, что уходят событием изменения выбора. */
4504
+ readonly chosenEntities: ModelSignal<TEntity[]>;
4505
+ readonly selectionChange: OutputEmitterRef<TEntity[]>;
4506
+ readonly listReset: OutputEmitterRef<void>;
4507
+ readonly listCleared: OutputEmitterRef<void>;
4508
+ /** Всплывающий выбор открылся или закрылся. */
4509
+ readonly popupOpenChange: OutputEmitterRef<boolean>;
4510
+ readonly searchChange: OutputEmitterRef<string>;
4511
+ readonly loadMore: OutputEmitterRef<void>;
4512
+ readonly temporaryChoiceChange: OutputEmitterRef<TEntity[]>;
4513
+ /** Открыт ли всплывающий выбор — от кнопки полосы или от кнопки приглашения. */
4514
+ readonly popupOpen: Signal<boolean>;
4515
+ readonly displayText: Signal<string>;
4516
+ /** Записанное формой становится и списком, и значением для сброса; пустой массив список опустошает. */
4517
+ writeValue(value: unknown[] | null): void;
4518
+ protected onAdd(popover: RtPopoverDirective): void;
4519
+ protected onApplied(keys: unknown[]): void;
4520
+ protected onCancelled(): void;
4521
+ protected onRemoved(key: unknown): void;
4522
+ protected onMoved(move: IRtDynamicSelector.Move): void;
4523
+ protected onReset(): void;
4524
+ protected onCleared(): void;
4525
+ protected onOpened(): void;
4526
+ protected onClosed(): void;
4527
+ protected getEmptyValue(): unknown[];
4528
+ protected focusAfterClear(): void;
4529
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtDynamicSelectorComponent<any>, never>;
4530
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtDynamicSelectorComponent<any>, "rt-dynamic-selector", never, { "entities": { "alias": "entities"; "required": false; "isSignal": true; }; "keyExp": { "alias": "keyExp"; "required": true; "isSignal": true; }; "displayExp": { "alias": "displayExp"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "buttonTitle": { "alias": "buttonTitle"; "required": false; "isSignal": true; }; "addShown": { "alias": "addShown"; "required": false; "isSignal": true; }; "removeShown": { "alias": "removeShown"; "required": false; "isSignal": true; }; "listActionsShown": { "alias": "listActionsShown"; "required": false; "isSignal": true; }; "extraChanged": { "alias": "extraChanged"; "required": false; "isSignal": true; }; "searchTerm": { "alias": "searchTerm"; "required": false; "isSignal": true; }; "readonlyKeys": { "alias": "readonlyKeys"; "required": false; "isSignal": true; }; "pinnedKeys": { "alias": "pinnedKeys"; "required": false; "isSignal": true; }; "draggable": { "alias": "draggable"; "required": false; "isSignal": true; }; "buttonRadius": { "alias": "buttonRadius"; "required": false; "isSignal": true; }; "invitation": { "alias": "invitation"; "required": false; "isSignal": true; }; "invitationIcon": { "alias": "invitationIcon"; "required": false; "isSignal": true; }; "invitationDescription": { "alias": "invitationDescription"; "required": false; "isSignal": true; }; "multiToggleShown": { "alias": "multiToggleShown"; "required": false; "isSignal": true; }; "selectAllShown": { "alias": "selectAllShown"; "required": false; "isSignal": true; }; "localSearch": { "alias": "localSearch"; "required": false; "isSignal": true; }; "lazyLoad": { "alias": "lazyLoad"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "fetching": { "alias": "fetching"; "required": false; "isSignal": true; }; "navigateTitle": { "alias": "navigateTitle"; "required": false; "isSignal": true; }; "navigateLink": { "alias": "navigateLink"; "required": false; "isSignal": true; }; "sortFn": { "alias": "sortFn"; "required": false; "isSignal": true; }; "chosenEntities": { "alias": "chosenEntities"; "required": false; "isSignal": true; }; }, { "chosenEntities": "chosenEntitiesChange"; "selectionChange": "selectionChange"; "listReset": "listReset"; "listCleared": "listCleared"; "popupOpenChange": "popupOpenChange"; "searchChange": "searchChange"; "loadMore": "loadMore"; "temporaryChoiceChange": "temporaryChoiceChange"; }, ["rowTitle", "rowControls"], never, true, never>;
4531
+ }
4532
+
3910
4533
  /**
3911
4534
  * Заглушка пустого состояния: центрированная иконка в круглой подложке, заголовок,
3912
4535
  * опциональное описание и проецируемый слот для действия (кнопка «Прикрепить»,
@@ -3919,10 +4542,67 @@ declare class RtDynamicListComponent implements OnInit {
3919
4542
  */
3920
4543
  declare class RtEmptyStateComponent {
3921
4544
  readonly icon: InputSignal<IRtIcon.Name | null>;
4545
+ /** Имя Material вместо `icon` — рисуется так же, как вход `glyph` у `rt-icon`. */
4546
+ readonly glyph: InputSignal<string | null>;
3922
4547
  readonly title: InputSignal<string>;
3923
4548
  readonly description: InputSignal<string | null>;
4549
+ /** Пунктирная рамка вокруг заглушки — так она читается как зона, куда бросают файл. */
4550
+ readonly framed: InputSignalWithTransform<boolean, BooleanInput>;
3924
4551
  static ɵfac: i0.ɵɵFactoryDeclaration<RtEmptyStateComponent, never>;
3925
- static ɵcmp: i0.ɵɵComponentDeclaration<RtEmptyStateComponent, "rt-empty-state", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, {}, never, ["[rtEmptyIllustration]", "*"], true, [{ directive: typeof RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
4552
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtEmptyStateComponent, "rt-empty-state", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "glyph": { "alias": "glyph"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "framed": { "alias": "framed"; "required": false; "isSignal": true; }; }, {}, never, ["[rtEmptyIllustration]", "*"], true, [{ directive: typeof RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
4553
+ }
4554
+
4555
+ /**
4556
+ * Тело `rt-expansion-panel`, собираемое лениво: ставится на `<ng-template>` внутри панели, и его
4557
+ * содержимое создаётся при раскрытии и уходит после сворачивания. Сворачивание при этом доигрывает
4558
+ * движение до конца: тело уходит вместе со своим содержимым, а не пустым.
4559
+ */
4560
+ declare class RtExpansionPanelContentDirective {
4561
+ readonly templateRef: TemplateRef<unknown>;
4562
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtExpansionPanelContentDirective, never>;
4563
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RtExpansionPanelContentDirective, "ng-template[rtExpansionPanelContent]", never, {}, {}, never, never, true, never>;
4564
+ }
4565
+
4566
+ declare namespace IRtExpansionPanel {
4567
+ /**
4568
+ * Вид панели: `card` — отдельная карточка на фоне поверхности с тенью, как панель Material;
4569
+ * `plain` — без фона, тени и отступов, для панели внутри списка, который рисует строки сам.
4570
+ */
4571
+ type Appearance = 'card' | 'plain';
4572
+ }
4573
+
4574
+ /**
4575
+ * Раскрывающаяся панель: заголовок-кнопка во всю ширину с шевроном у правого края и тело под ним.
4576
+ * Нажатие на заголовок раскрывает и сворачивает тело, раскрытие и сворачивание идут с движением.
4577
+ * Заменяет во втором ките панель раскрытия Material первого кита.
4578
+ *
4579
+ * Заголовок — содержимое панели без отметки. Тело — узел с `rtExpansionPanelBody`, созданный сразу,
4580
+ * или `<ng-template rtExpansionPanelContent>`, созданный при раскрытии.
4581
+ *
4582
+ * Состояние раскрытия — `expanded`, двусторонняя привязка: панель пишет в него сама, а владелец
4583
+ * может держать его в своём сигнале и менять извне.
4584
+ */
4585
+ declare class RtExpansionPanelComponent {
4586
+ #private;
4587
+ /** Ленивое тело: шаблон создаётся при раскрытии. */
4588
+ protected readonly lazyContent: Signal<RtExpansionPanelContentDirective | undefined>;
4589
+ protected readonly bodyId: string;
4590
+ protected readonly headerDomId: Signal<string>;
4591
+ /** Тело раскрыто. Двусторонняя привязка: нажатие на заголовок пишет сюда. */
4592
+ readonly expanded: ModelSignal<boolean>;
4593
+ /** Заголовок не нажимается, тело остаётся как было. */
4594
+ readonly disabled: InputSignalWithTransform<boolean, unknown>;
4595
+ /** Шеврона нет: раскрытие читается по содержимому или его нечего раскрывать. */
4596
+ readonly hideToggle: InputSignalWithTransform<boolean, unknown>;
4597
+ readonly appearance: InputSignal<IRtExpansionPanel.Appearance>;
4598
+ /** Id кнопки заголовка. Нужен владельцу, который ищет заголовок по своему номеру; иначе — свой. */
4599
+ readonly headerId: InputSignal<string | null>;
4600
+ /** Имя кнопки заголовка для вспомогательных средств, когда видимой подписи мало. */
4601
+ readonly ariaLabel: InputSignal<string | null>;
4602
+ /** Нажатие на заголовок: раскрывает свёрнутую панель и сворачивает раскрытую. */
4603
+ toggle(): void;
4604
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtExpansionPanelComponent, never>;
4605
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtExpansionPanelComponent, "rt-expansion-panel", never, { "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hideToggle": { "alias": "hideToggle"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "headerId": { "alias": "headerId"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; }, ["lazyContent"], ["*", "[rtExpansionPanelBody]"], true, never>;
3926
4606
  }
3927
4607
 
3928
4608
  /**
@@ -4002,8 +4682,11 @@ declare class RtFieldComponent implements AfterContentInit {
4002
4682
  declare namespace IRtIconButton {
4003
4683
  /** Семантическая палитра кнопки. */
4004
4684
  type Variant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'success' | 'warning';
4005
- /** Размер квадрата кнопки. Маппинг на пиксели — в SCSS (`--rt-icon-button-size`). */
4006
- type Size = 'sm' | 'md' | 'lg' | 'xl' | '2xl';
4685
+ /**
4686
+ * Размер квадрата кнопки. Шаги — в SCSS; `xs` — 22px и `2xs` — 20px, оба со значком 16px.
4687
+ * Свой размер задаёт `--rt-icon-button-size` на теге или выше.
4688
+ */
4689
+ type Size = '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
4007
4690
  /** HTML-тип нативного `<button>`. */
4008
4691
  type Type = 'button' | 'submit';
4009
4692
  }
@@ -4308,8 +4991,7 @@ declare class RtFilterControlComponent<T = string> {
4308
4991
  * `canGoBack=false` (default) — slot полностью скрыт через display:none, wordmark
4309
4992
  * выравнивается слева.
4310
4993
  *
4311
- * Далее — wordmark, справа — action-иконки (на базе rt-icon-button с inline
4312
- * override `--rt-icon-button-size: 35px`): опциональная «Пригласить пользователя»
4994
+ * Далее — wordmark, справа — action-иконки (rt-icon-button шагом md): опциональная «Пригласить пользователя»
4313
4995
  * (`showInvite`), слот колокольчика и профиль.
4314
4996
  *
4315
4997
  * Колокольчик уведомлений — проекция `[rtHeaderBell]`: домен кладёт в слот
@@ -4339,8 +5021,8 @@ declare class RtHeaderComponent {
4339
5021
  *
4340
5022
  * Рендерит свой собственный `<button type="...">` внутри template (НЕ host-button).
4341
5023
  * Все цвета и размеры — через семантические `--rt-*` токены; геометрия квадрата
4342
- * выставляется CSS-custom-property `--rt-icon-button-size` (overridable inline
4343
- * через `style="--rt-icon-button-size: 35px"` — нужно для миграции rt-header 35×35).
5024
+ * берётся из `--rt-icon-button-size`, а без него — из шага `size`. Свойство, заданное на теге
5025
+ * `<rt-icon-button>` или выше, доходит до кнопки; так же и `--rt-icon-button-bg`.
4344
5026
  *
4345
5027
  * Loading state — заменяет иконку на `<rt-icon name="spinner">` и блокирует
4346
5028
  * клики (`button[disabled]`). Active state управляет `aria-pressed` (для toggle-кнопок).
@@ -4366,8 +5048,14 @@ declare class RtIconButtonComponent {
4366
5048
  * camelCase ключи `hasIndicator` директива автоматически конвертирует в `has-indicator`.
4367
5049
  */
4368
5050
  protected readonly bemMods: Signal<Record<string, boolean>>;
4369
- /** Имя иконки — обязательно. */
4370
- readonly icon: InputSignal<IRtIcon.Name>;
5051
+ /**
5052
+ * Имя иконки в наборе кита. Нужно оно или `glyph`; когда переданы оба, побеждает имя. Нет ни
5053
+ * того ни другого — значок кит не рисует, и кнопка показывает вложенное содержимое: свой
5054
+ * рисунок приложения встаёт в кнопку с её размером, формой и состояниями.
5055
+ */
5056
+ readonly icon: InputSignal<IRtIcon.Name | null>;
5057
+ /** Имя Material вместо имени кита — рисуется так же, как вход `glyph` у `rt-icon`. */
5058
+ readonly glyph: InputSignal<string | null>;
4371
5059
  /** Доступное имя для screen-reader'ов — обязательно (icon-only кнопка). */
4372
5060
  readonly ariaLabel: InputSignal<string>;
4373
5061
  /** Семантическая палитра. */
@@ -4413,9 +5101,266 @@ declare class RtIconButtonComponent {
4413
5101
  readonly clicked: OutputEmitterRef<MouseEvent>;
4414
5102
  protected onClick(event: MouseEvent): void;
4415
5103
  static ɵfac: i0.ɵɵFactoryDeclaration<RtIconButtonComponent, never>;
4416
- static ɵcmp: i0.ɵɵComponentDeclaration<RtIconButtonComponent, "rt-icon-button", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "iconFill": { "alias": "iconFill"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabIndex"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "indicator": { "alias": "indicator"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, [{ directive: typeof RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
5104
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtIconButtonComponent, "rt-icon-button", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "glyph": { "alias": "glyph"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "iconFill": { "alias": "iconFill"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabIndex"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "indicator": { "alias": "indicator"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["*"], true, [{ directive: typeof RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
5105
+ }
5106
+
5107
+ /**
5108
+ * Контракты обрезки изображения. Один корневой неймспейс с префиксом `I`.
5109
+ */
5110
+ declare namespace IRtImageCropper {
5111
+ /** Прямоугольник в пикселях исходника: рамка, границы картинки */
5112
+ interface Rect {
5113
+ readonly x: number;
5114
+ readonly y: number;
5115
+ readonly width: number;
5116
+ readonly height: number;
5117
+ }
5118
+ /** Размер исходника или поля */
5119
+ interface Size {
5120
+ readonly width: number;
5121
+ readonly height: number;
5122
+ }
5123
+ /**
5124
+ * Как исходник вписан в поле: масштаб — сколько пикселей поля приходится на
5125
+ * пиксель исходника, отступы — где картинка начинается внутри поля.
5126
+ */
5127
+ interface Fit {
5128
+ readonly scale: number;
5129
+ readonly offsetX: number;
5130
+ readonly offsetY: number;
5131
+ readonly width: number;
5132
+ readonly height: number;
5133
+ }
5134
+ /** Сдвиг в пикселях исходника */
5135
+ interface Delta {
5136
+ readonly dx: number;
5137
+ readonly dy: number;
5138
+ }
5139
+ /** Направление ручки по осям: −1 — к началу оси, 1 — к концу, 0 — ось ручкой не тянется */
5140
+ interface Direction {
5141
+ readonly x: number;
5142
+ readonly y: number;
5143
+ }
5144
+ /** Ручка рамки: четыре угла и четыре стороны, по сторонам света */
5145
+ type Handle = 'n' | 's' | 'e' | 'w' | 'ne' | 'nw' | 'se' | 'sw';
5146
+ /** Форматы результата */
5147
+ type Format = 'png' | 'jpeg' | 'webp';
5148
+ /** Результат обрезки: файл и рамка, которой он вырезан */
5149
+ interface Result {
5150
+ readonly file: File;
5151
+ readonly frame: Rect;
5152
+ }
5153
+ }
5154
+
5155
+ /** Состояние поля: пусто, читается, не прочиталось, готово */
5156
+ type TCropperState = 'empty' | 'loading' | 'refusal' | 'ready';
5157
+ /**
5158
+ * Обрезка изображения: исходник вписан в поле целиком, поверх — рамка с восемью
5159
+ * ручками. Рамка живёт в пикселях исходника и двигается указателем, пальцем и
5160
+ * стрелками; после прочтения исходника и после каждого законченного изменения
5161
+ * компонент отдаёт файл, вырезанный рамкой, в выбранном формате и качестве.
5162
+ *
5163
+ * Поворот снимка по EXIF делает сам браузер: картинка и холст читают исходник с
5164
+ * `image-orientation: from-image`, и размеры, которые видит логика, уже
5165
+ * повёрнутые.
5166
+ */
5167
+ declare class RtImageCropperComponent {
5168
+ #private;
5169
+ protected readonly field: Signal<ElementRef<HTMLElement>>;
5170
+ protected readonly t: Signal<TRtKitLabelMap>;
5171
+ protected readonly handles: readonly IRtImageCropper.Handle[];
5172
+ protected readonly handleLabels: Readonly<Record<IRtImageCropper.Handle, TRtKitLabelKey>>;
5173
+ protected readonly state: WritableSignal<TCropperState>;
5174
+ /** Текст пустого поля: свой, если задан, иначе подпись кита */
5175
+ protected readonly placeholderText: Signal<string>;
5176
+ /** Адрес исходника для картинки в поле */
5177
+ protected readonly url: WritableSignal<string | null>;
5178
+ /** Где картинка лежит в поле, в пикселях поля */
5179
+ protected readonly image: Signal<IRtImageCropper.Rect>;
5180
+ /** Рамка в пикселях поля */
5181
+ protected readonly frameBox: Signal<IRtImageCropper.Rect>;
5182
+ /** Подсказка пустого поля; пусто — подпись кита `uiImageCropperPlaceholder` */
5183
+ readonly placeholder: InputSignal<string>;
5184
+ /** Исходник: файл, который надо обрезать; пусто — поле с подсказкой */
5185
+ readonly file: InputSignal<Blob | null>;
5186
+ /** Пропорция рамки, ширина к высоте; пусто — рамка свободная */
5187
+ readonly ratio: InputSignalWithTransform<number | null, NumberInput>;
5188
+ /** Круглый вид: маска на экране и пропорция один к одному; результат — квадрат */
5189
+ readonly round: InputSignalWithTransform<boolean, BooleanInput>;
5190
+ /** Наименьший размер рамки в пикселях исходника */
5191
+ readonly minSize: InputSignalWithTransform<number, NumberInput>;
5192
+ /** Формат результата; пусто — формат исходника, png, когда он не из трёх */
5193
+ readonly format: InputSignal<IRtImageCropper.Format | null>;
5194
+ /** Качество результата в процентах — для jpeg и webp */
5195
+ readonly quality: InputSignalWithTransform<number, NumberInput>;
5196
+ /** Недоступна: рамка видна, но не меняется ни указателем, ни клавишами */
5197
+ readonly disabled: InputSignalWithTransform<boolean, BooleanInput>;
5198
+ /** Файл, вырезанный рамкой: после прочтения исходника и после каждого законченного изменения */
5199
+ readonly cropped: OutputEmitterRef<IRtImageCropper.Result>;
5200
+ /** Исходник не прочитался */
5201
+ readonly loadFailed: OutputEmitterRef<void>;
5202
+ constructor();
5203
+ protected onPointerDown(event: PointerEvent, handle: IRtImageCropper.Handle | null): void;
5204
+ protected onPointerMove(event: PointerEvent): void;
5205
+ protected onPointerUp(event: PointerEvent): void;
5206
+ protected onKeyDown(event: KeyboardEvent, handle: IRtImageCropper.Handle | null): void;
5207
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtImageCropperComponent, never>;
5208
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtImageCropperComponent, "rt-image-cropper", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "file": { "alias": "file"; "required": false; "isSignal": true; }; "ratio": { "alias": "ratio"; "required": false; "isSignal": true; }; "round": { "alias": "round"; "required": false; "isSignal": true; }; "minSize": { "alias": "minSize"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "quality": { "alias": "quality"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "cropped": "cropped"; "loadFailed": "loadFailed"; }, never, never, true, never>;
5209
+ }
5210
+
5211
+ /**
5212
+ * Чистая логика обрезки: вписывание исходника в поле, рамка в пикселях
5213
+ * исходника, её движение и растяжение, перевод клавиш и выбор формата.
5214
+ * Компонент только переводит указатель в сдвиги и рисует то, что вернулось.
5215
+ */
5216
+ /** Все восемь ручек по часовой стрелке от левого верхнего угла */
5217
+ declare const RT_IMAGE_CROPPER_HANDLES: readonly IRtImageCropper.Handle[];
5218
+ /** Шаг клавиш в пикселях поля: стрелка и стрелка с Shift */
5219
+ declare const RT_IMAGE_CROPPER_KEY_STEP: number;
5220
+ declare const RT_IMAGE_CROPPER_KEY_STEP_LARGE: number;
5221
+ /** Качество по умолчанию — то же, что у загрузчика первого кита */
5222
+ declare const RT_IMAGE_CROPPER_QUALITY: number;
5223
+ /**
5224
+ * Вписывает исходник в поле целиком, с его пропорциями, по центру. Ни одна часть
5225
+ * картинки не срезается полем, и ни одна не растянута.
5226
+ */
5227
+ declare function fitSource(source: IRtImageCropper.Size, field: IRtImageCropper.Size): IRtImageCropper.Fit;
5228
+ /**
5229
+ * Пропорция, которую держит рамка. Круглый вид держит один к одному при любой
5230
+ * заданной; заданная не числом или не больше нуля значит свободную рамку.
5231
+ */
5232
+ declare function frameRatio(ratio: number | null | undefined, round: boolean): number | null;
5233
+ /**
5234
+ * Начальная рамка — наибольшая, какую позволяет пропорция, по центру исходника.
5235
+ * Свободная начинается как весь исходник.
5236
+ */
5237
+ declare function initialFrame(source: IRtImageCropper.Size, ratio: number | null): IRtImageCropper.Rect;
5238
+ /** Сдвиг рамки целиком: размер тот же, у края исходника рамка останавливается */
5239
+ declare function moveFrame(frame: IRtImageCropper.Rect, delta: IRtImageCropper.Delta, source: IRtImageCropper.Size): IRtImageCropper.Rect;
5240
+ /** По каким осям и в какую сторону тянет ручка */
5241
+ declare function handleDirection(handle: IRtImageCropper.Handle): IRtImageCropper.Direction;
5242
+ /**
5243
+ * Растяжение рамки за ручку. Сторона или угол напротив ручки стоит на месте;
5244
+ * рамка не выходит за исходник и не становится меньше наименьшего размера; рамка
5245
+ * с пропорцией держит её, а боковая ручка тянет её вокруг центра второй оси.
5246
+ */
5247
+ declare function resizeFrame(frame: IRtImageCropper.Rect, handle: IRtImageCropper.Handle, delta: IRtImageCropper.Delta, source: IRtImageCropper.Size, ratio: number | null, minSize: number): IRtImageCropper.Rect;
5248
+ /**
5249
+ * Сдвиг от стрелки клавиатуры в пикселях исходника. Одно нажатие — пиксель поля,
5250
+ * с Shift десять; не стрелка даёт `null`.
5251
+ */
5252
+ declare function keyDelta(key: string, isLarge: boolean, scale: number): IRtImageCropper.Delta | null;
5253
+ /** Сдвиг указателя в пикселях поля переводится в пиксели исходника */
5254
+ declare function fieldDelta(dx: number, dy: number, scale: number): IRtImageCropper.Delta;
5255
+ /** Рамка в пикселях поля — для рисования поверх вписанной картинки */
5256
+ declare function frameInField(frame: IRtImageCropper.Rect, fit: IRtImageCropper.Fit): IRtImageCropper.Rect;
5257
+ /** Рамка в целых пикселях исходника — то, что вырезает холст; не меньше пикселя */
5258
+ declare function cropArea(frame: IRtImageCropper.Rect, source: IRtImageCropper.Size): IRtImageCropper.Rect;
5259
+ /**
5260
+ * Тип результата. Без выбранного формата берётся формат исходника, и png, когда
5261
+ * он не из трёх.
5262
+ */
5263
+ declare function resultType(format: IRtImageCropper.Format | null | undefined, sourceType: string): string;
5264
+ /** Качество холста — доля единицы; вход берёт проценты */
5265
+ declare function resultQuality(quality: number): number;
5266
+ /** Имя файла результата: основа имени исходника и расширение по типу результата */
5267
+ declare function resultFileName(sourceName: string, type: string): string;
5268
+
5269
+ declare namespace IRtImageUpload {
5270
+ /** Что стоит в месте загрузчика: одно состояние за раз */
5271
+ type State = 'loading' | 'cropping' | 'image' | 'empty';
5272
+ /** Форма кнопки скачивания: круглая, как у первого кита, или квадратная */
5273
+ type DownloadShape = 'circle' | 'square';
5274
+ }
5275
+
5276
+ /**
5277
+ * Загрузчик одного изображения: одно место, в котором по очереди стоят зона загрузки, обрезка и
5278
+ * сама картинка. Файл выбирают кнопкой зоны или бросают на неё; выбранный открывает обрезку, а
5279
+ * «Применить» ставит результат на место картинки и отдаёт файл приложению. Нажатие на картинку
5280
+ * выбирает другой файл.
5281
+ *
5282
+ * Картинка — адрес: приложение даёт свой, а адрес применённого файла загрузчик делает сам и
5283
+ * отпускает его, когда картинку сменили или компонент ушёл. Файл приложение получает в
5284
+ * `imageChanged`.
5285
+ */
5286
+ declare class RtImageUploadComponent {
5287
+ #private;
5288
+ protected readonly picker: Signal<ElementRef<HTMLInputElement>>;
5289
+ protected readonly t: Signal<TRtKitLabelMap>;
5290
+ /** Выбранный файл, который сейчас режет обрезка */
5291
+ protected readonly source: WritableSignal<File | null>;
5292
+ /** Последний результат обрезки — его берёт «Применить» */
5293
+ protected readonly result: WritableSignal<IRtImageCropper.Result | null>;
5294
+ /** Что сейчас стоит в месте загрузчика */
5295
+ protected readonly state: Signal<IRtImageUpload.State>;
5296
+ /** Подсказка над картинкой: своя приложения или подпись кита */
5297
+ protected readonly hint: Signal<string>;
5298
+ /** Круглая ли кнопка скачивания: подложка под размытием повторяет её скругление */
5299
+ protected readonly downloadRound: Signal<boolean>;
5300
+ /** Шаг скругления кнопки скачивания: круг — полный шаг, квадрат — скругление кнопки по умолчанию */
5301
+ protected readonly downloadRadius: Signal<TRtRadius | null>;
5302
+ /**
5303
+ * Адрес текущей картинки: данный приложением или сделанный под применённый файл. Новый адрес от
5304
+ * приложения снова берёт верх над применённым.
5305
+ */
5306
+ protected readonly image: WritableSignal<string | null>;
5307
+ /** Адрес картинки от приложения */
5308
+ readonly imageUrl: InputSignal<string | null>;
5309
+ /** Имя файла, под которым картинку скачивают и отдают приложению */
5310
+ readonly fileName: InputSignal<string>;
5311
+ /** Подсказка над картинкой; пустая — подпись кита */
5312
+ readonly tooltip: InputSignal<string>;
5313
+ /** Кнопка скачивания рядом с картинкой */
5314
+ readonly downloadable: InputSignalWithTransform<boolean, BooleanInput>;
5315
+ /** Форма кнопки скачивания; она заходит за правый верхний угол картинки при любой форме */
5316
+ readonly downloadShape: InputSignal<IRtImageUpload.DownloadShape>;
5317
+ /** Размер значка кнопки скачивания; пусто — от размера кнопки */
5318
+ readonly downloadIconSize: InputSignal<IRtIcon.Size | null>;
5319
+ /** Вид кнопки выбора файла в пустом загрузчике */
5320
+ readonly chooseAppearance: InputSignal<IButton.Appearance>;
5321
+ /** Значок кнопки выбора файла; пусто — кнопка без значка */
5322
+ readonly chooseIcon: InputSignal<string | null>;
5323
+ /** Без кнопок «Отмена» и «Применить»: каждый результат обрезки применяется сразу */
5324
+ readonly autoApply: InputSignalWithTransform<boolean, BooleanInput>;
5325
+ /** Приложение загружает картинку: на месте стоит индикатор */
5326
+ readonly loading: InputSignalWithTransform<boolean, BooleanInput>;
5327
+ /** Недоступный загрузчик не берёт файлов и не отзывается на нажатие картинки */
5328
+ readonly disabled: InputSignalWithTransform<boolean, BooleanInput>;
5329
+ /** Соотношение рамки обрезки; пусто — свободная рамка */
5330
+ readonly ratio: InputSignalWithTransform<number | null, NumberInput>;
5331
+ /** Круглая маска обрезки для аватара */
5332
+ readonly round: InputSignalWithTransform<boolean, BooleanInput>;
5333
+ /** Формат результата; пусто — формат исходника */
5334
+ readonly format: InputSignal<IRtImageCropper.Format | null>;
5335
+ /** Качество результата, от 0 до 100 */
5336
+ readonly quality: InputSignalWithTransform<number, NumberInput>;
5337
+ /** Применённый файл — его приложение отправляет, куда ему надо */
5338
+ readonly imageChanged: OutputEmitterRef<File>;
5339
+ /** Картинку скачали */
5340
+ readonly downloaded: OutputEmitterRef<void>;
5341
+ constructor();
5342
+ /** Открывает выбор файла, если загрузчик доступен */
5343
+ pick(): void;
5344
+ /** Файл выбран кнопкой или брошен: изображение открывает обрезку, остальное пропускается */
5345
+ choose(file: File | null | undefined): void;
5346
+ protected onPicked(event: Event): void;
5347
+ protected onSpace(event: Event): void;
5348
+ protected onCropped(result: IRtImageCropper.Result): void;
5349
+ protected apply(): void;
5350
+ protected cancel(): void;
5351
+ protected download(): void;
5352
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtImageUploadComponent, never>;
5353
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtImageUploadComponent, "rt-image-upload", never, { "imageUrl": { "alias": "imageUrl"; "required": false; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "downloadable": { "alias": "downloadable"; "required": false; "isSignal": true; }; "downloadShape": { "alias": "downloadShape"; "required": false; "isSignal": true; }; "downloadIconSize": { "alias": "downloadIconSize"; "required": false; "isSignal": true; }; "chooseAppearance": { "alias": "chooseAppearance"; "required": false; "isSignal": true; }; "chooseIcon": { "alias": "chooseIcon"; "required": false; "isSignal": true; }; "autoApply": { "alias": "autoApply"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ratio": { "alias": "ratio"; "required": false; "isSignal": true; }; "round": { "alias": "round"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "quality": { "alias": "quality"; "required": false; "isSignal": true; }; }, { "imageChanged": "imageChanged"; "downloaded": "downloaded"; }, never, never, true, never>;
4417
5354
  }
4418
5355
 
5356
+ /**
5357
+ * Какое состояние занимает место. Загрузка приложения важнее всего, выбранный исходник важнее
5358
+ * картинки, картинка важнее зоны загрузки.
5359
+ */
5360
+ declare function uploadState(loading: boolean, hasSource: boolean, image: string | null): IRtImageUpload.State;
5361
+ /** Берётся только файл изображения: брошенный файл другого типа загрузчик пропускает */
5362
+ declare function isImageFile(file: File | null | undefined): file is File;
5363
+
4419
5364
  declare class RtInfoItemComponent {
4420
5365
  readonly label: InputSignal<string>;
4421
5366
  readonly loading: InputSignalWithTransform<boolean, BooleanInput>;
@@ -4696,6 +5641,23 @@ declare class RtMarkdownTextComponent {
4696
5641
  static ɵcmp: i0.ɵɵComponentDeclaration<RtMarkdownTextComponent, "rt-markdown-text", never, { "text": { "alias": "text"; "required": true; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
4697
5642
  }
4698
5643
 
5644
+ /**
5645
+ * Помечает `<ng-template>` своего значка пункта меню. Кит ставит содержимое на место значка
5646
+ * `rt-menu-item__icon` его размером и цветом тона пункта — так приложение рисует значок, которого
5647
+ * нет ни в наборе кита, ни в перечне имён Material. Свой значок сильнее `icon` и `glyph`.
5648
+ *
5649
+ * ```html
5650
+ * <rt-menu-item label="Сделать активным">
5651
+ * <ng-template rtMenuItemIcon><svg viewBox="0 0 24 24">…</svg></ng-template>
5652
+ * </rt-menu-item>
5653
+ * ```
5654
+ */
5655
+ declare class RtMenuItemIconDirective {
5656
+ readonly templateRef: TemplateRef<unknown>;
5657
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtMenuItemIconDirective, never>;
5658
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RtMenuItemIconDirective, "ng-template[rtMenuItemIcon]", never, {}, {}, never, never, true, never>;
5659
+ }
5660
+
4699
5661
  /**
4700
5662
  * Контракты `rt-menu` — dropdown-меню действий (триггер «…» + плавающая панель
4701
5663
  * с пунктами `rt-menu-item`). Один корневой неймспейс с префиксом `I`.
@@ -4740,8 +5702,11 @@ declare const RT_MENU_SELECT_EVENT: string;
4740
5702
  * Модель `[rtTooltip]`: один корневой неймспейс с префиксом `I`.
4741
5703
  */
4742
5704
  declare namespace IRtTooltip {
4743
- /** Сторона, с которой tooltip пристыкован к host'у (с авто-flip у края). */
4744
- type Placement = 'top' | 'bottom';
5705
+ /**
5706
+ * Сторона, с которой tooltip пристыкован к host'у. Не поместилась — подсказка уходит на
5707
+ * противоположную; боковой не хватило ни одной стороны — встаёт сверху или снизу.
5708
+ */
5709
+ type Placement = 'top' | 'bottom' | 'left' | 'right';
4745
5710
  }
4746
5711
 
4747
5712
  /**
@@ -4750,8 +5715,10 @@ declare namespace IRtTooltip {
4750
5715
  * (авто-flip у края viewport, reposition при скролле), так что подсказка не
4751
5716
  * режется `overflow: hidden` предками (таблицы, aside, карточки).
4752
5717
  *
4753
- * Триггеры: `mouseenter`/`focusin` показывают (с задержкой `SHOW_DELAY_MS`),
4754
- * `mouseleave`/`focusout`/`click` прячут. Пустой текст → no-op (директива
5718
+ * Триггеры: `mouseenter` и фокус с клавиатуры показывают (с задержкой `SHOW_DELAY_MS`),
5719
+ * `mouseleave`/`focusout`/`click` прячут. Фокус, поставленный мышью или кодом, подсказку не
5720
+ * показывает, как у Material: меню возвращает фокус кнопке после выбора пункта мышью, и
5721
+ * подсказка кнопки всплывала поверх того, что пункт открыл. Пустой текст → no-op (директива
4755
5722
  * выключена), поэтому её можно безусловно вешать на icon-кнопки и включать
4756
5723
  * выставлением строки.
4757
5724
  *
@@ -4772,11 +5739,18 @@ declare class RtTooltipDirective implements OnDestroy {
4772
5739
  readonly text: InputSignalWithTransform<string, string | null | undefined>;
4773
5740
  /** Сторона подсказки. Не задана — сверху, а под материальным набором снизу, как у первого кита. */
4774
5741
  readonly placement: InputSignal<IRtTooltip.Placement | null>;
5742
+ /**
5743
+ * Подсказка только у обрезанного текста: хост меряется в момент показа, и подсказка не
5744
+ * появляется, пока его содержимое помещается целиком. Мерить заранее не нужно — показ идёт
5745
+ * только отсюда, и признак в эту минуту всегда свежий.
5746
+ */
5747
+ readonly whenTruncated: InputSignalWithTransform<boolean, unknown>;
5748
+ constructor();
4775
5749
  ngOnDestroy(): void;
4776
5750
  protected show(): void;
4777
5751
  protected hide(): void;
4778
5752
  static ɵfac: i0.ɵɵFactoryDeclaration<RtTooltipDirective, never>;
4779
- static ɵdir: i0.ɵɵDirectiveDeclaration<RtTooltipDirective, "[rtTooltip]", ["rtTooltip"], { "text": { "alias": "rtTooltip"; "required": false; "isSignal": true; }; "placement": { "alias": "rtTooltipPlacement"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5753
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RtTooltipDirective, "[rtTooltip]", ["rtTooltip"], { "text": { "alias": "rtTooltip"; "required": false; "isSignal": true; }; "placement": { "alias": "rtTooltipPlacement"; "required": false; "isSignal": true; }; "whenTruncated": { "alias": "rtTooltipWhenTruncated"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4780
5754
  }
4781
5755
 
4782
5756
  /**
@@ -4801,8 +5775,14 @@ declare class RtTooltipDirective implements OnDestroy {
4801
5775
  */
4802
5776
  declare class RtMenuItemComponent {
4803
5777
  #private;
5778
+ /** Свой значок приложения — `<ng-template rtMenuItemIcon>` внутри пункта. */
5779
+ protected readonly ownIcon: Signal<RtMenuItemIconDirective | undefined>;
4804
5780
  /** Значок пункта: свой `icon`, а без него — пара имени Material из перечня кита. */
4805
5781
  protected readonly iconName: Signal<IRtIcon.Name | null>;
5782
+ /** Пункт — ссылка: задан `link`. Роль пункта меню и фокус тогда несёт ссылка внутри. */
5783
+ protected readonly isLink: Signal<boolean>;
5784
+ /** Адрес для ссылки: у недоступного пункта его нет, и ссылка не переходит. */
5785
+ protected readonly linkTarget: Signal<RouterLink['routerLink']>;
4806
5786
  /** Иконка слева от лейбла. `null` — без иконки. */
4807
5787
  readonly icon: InputSignal<IRtIcon.Name | null>;
4808
5788
  /** Текст пункта. */
@@ -4816,6 +5796,12 @@ declare class RtMenuItemComponent {
4816
5796
  * кита через перечень соответствий; `icon` сильнее, а имя без пары рисует пункт без значка.
4817
5797
  */
4818
5798
  readonly glyph: InputSignal<string | null>;
5799
+ /**
5800
+ * Залитый значок вместо контурного — как значки пунктов меню первого кита. Уходит в `fill`
5801
+ * значка: действует в материальном наборе, свой набор рисует значок одним рисунком. Свой
5802
+ * значок `rtMenuItemIcon` приложение рисует само, и заливка его не касается.
5803
+ */
5804
+ readonly fill: InputSignalWithTransform<boolean, BooleanInput>;
4819
5805
  /** Пункт — нынешнее значение выбора, который открыл меню: подсвечен фоном и объявлен скринридеру. */
4820
5806
  readonly current: InputSignalWithTransform<boolean, BooleanInput>;
4821
5807
  /** Недоступный пункт — приглушён, не эмитит `(selected)` и не закрывает меню. */
@@ -4834,13 +5820,21 @@ declare class RtMenuItemComponent {
4834
5820
  readonly confirmCancelLabel: InputSignal<string>;
4835
5821
  /** Тон подтверждающей кнопки в модалке. */
4836
5822
  readonly confirmTone: InputSignal<IRtMenu.ConfirmTone>;
5823
+ /**
5824
+ * Команды маршрута приложения, как у `routerLink`. Задан — пункт рисует ссылку с `href`: Enter и
5825
+ * клик переходят по ней, а Ctrl/Cmd-click, Shift-click и средняя кнопка открывают новую вкладку
5826
+ * или окно силами браузера. Меню закрывается во всех этих случаях; подтверждение не спрашивается.
5827
+ */
5828
+ readonly link: InputSignal<RouterLink['routerLink']>;
4837
5829
  /** Пункт выбран (клик/Enter/Space и не `disabled`; после подтверждения, если задано). */
4838
5830
  readonly selected: OutputEmitterRef<void>;
4839
5831
  constructor();
4840
5832
  protected onActivate(event: Event): void;
4841
5833
  protected onKey(event: Event): void;
5834
+ /** Средняя кнопка не даёт `click`: вкладку открывает браузер, а меню закрываем сами. */
5835
+ protected onAuxClick(event: MouseEvent): void;
4842
5836
  static ɵfac: i0.ɵɵFactoryDeclaration<RtMenuItemComponent, never>;
4843
- static ɵcmp: i0.ɵɵComponentDeclaration<RtMenuItemComponent, "rt-menu-item", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "danger": { "alias": "danger"; "required": false; "isSignal": true; }; "success": { "alias": "success"; "required": false; "isSignal": true; }; "glyph": { "alias": "glyph"; "required": false; "isSignal": true; }; "current": { "alias": "current"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "confirmMessage": { "alias": "confirmMessage"; "required": false; "isSignal": true; }; "confirmTitle": { "alias": "confirmTitle"; "required": false; "isSignal": true; }; "confirmLabel": { "alias": "confirmLabel"; "required": false; "isSignal": true; }; "confirmCancelLabel": { "alias": "confirmCancelLabel"; "required": false; "isSignal": true; }; "confirmTone": { "alias": "confirmTone"; "required": false; "isSignal": true; }; }, { "selected": "selected"; }, never, never, true, [{ directive: typeof RtTooltipDirective; inputs: { "rtTooltip": "tooltip"; }; outputs: {}; }, { directive: typeof RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
5837
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtMenuItemComponent, "rt-menu-item", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "danger": { "alias": "danger"; "required": false; "isSignal": true; }; "success": { "alias": "success"; "required": false; "isSignal": true; }; "glyph": { "alias": "glyph"; "required": false; "isSignal": true; }; "fill": { "alias": "fill"; "required": false; "isSignal": true; }; "current": { "alias": "current"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "confirmMessage": { "alias": "confirmMessage"; "required": false; "isSignal": true; }; "confirmTitle": { "alias": "confirmTitle"; "required": false; "isSignal": true; }; "confirmLabel": { "alias": "confirmLabel"; "required": false; "isSignal": true; }; "confirmCancelLabel": { "alias": "confirmCancelLabel"; "required": false; "isSignal": true; }; "confirmTone": { "alias": "confirmTone"; "required": false; "isSignal": true; }; "link": { "alias": "link"; "required": false; "isSignal": true; }; }, { "selected": "selected"; }, ["ownIcon"], never, true, [{ directive: typeof RtTooltipDirective; inputs: { "rtTooltip": "tooltip"; }; outputs: {}; }, { directive: typeof RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
4844
5838
  }
4845
5839
 
4846
5840
  /**
@@ -5678,6 +6672,482 @@ declare class RtSectionNavComponent {
5678
6672
  static ɵcmp: i0.ɵɵComponentDeclaration<RtSectionNavComponent, "rt-section-nav", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; }, { "itemSelect": "itemSelect"; }, never, never, true, [{ directive: typeof RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
5679
6673
  }
5680
6674
 
6675
+ declare namespace IRtSideMenu {
6676
+ type ItemData = string | number | object;
6677
+ /**
6678
+ * Чем подменю держится открытым: наведением или закреплением — тогда оно стоит открытым, пока
6679
+ * человек сам его не свернёт.
6680
+ */
6681
+ type SubMenuMode = 'hover' | 'pinned';
6682
+ /** Номер пункта в списке избранного — тот же, что `id` пункта меню. */
6683
+ type FavoriteId = Item['id'];
6684
+ /**
6685
+ * Место под скрытые кнопки строки: `always` — кнопка, ждущая наведения, держит свою ширину;
6686
+ * `none` — в покое ширины не занимает, и подпись идёт до края.
6687
+ */
6688
+ type FavoriteActionsReserve = 'always' | 'none';
6689
+ /**
6690
+ * Число строк в заголовке блока избранного: `always` — всегда; `collapsed` — только у свёрнутого
6691
+ * блока; `never` — никогда.
6692
+ */
6693
+ type FavoritesCount = 'always' | 'collapsed' | 'never';
6694
+ /**
6695
+ * Настройки одного меню под его номером в хранилище. Незнакомые поля кит не удаляет: их могло
6696
+ * положить приложение или следующая версия кита.
6697
+ */
6698
+ interface Settings {
6699
+ favorites?: FavoriteId[];
6700
+ /** Пункты полосы, чей блок избранного свёрнут; блок по умолчанию развёрнут. */
6701
+ favoritesCollapsed?: Array<Item['id']>;
6702
+ subMenuMode?: SubMenuMode;
6703
+ subMenuWidth?: number;
6704
+ [field: string]: unknown;
6705
+ }
6706
+ interface Item {
6707
+ id: string | number;
6708
+ icon?: string;
6709
+ name?: string;
6710
+ link?: string;
6711
+ submenu?: Item[];
6712
+ /** Избранное в подменю этого пункта полосы. По умолчанию выключено. */
6713
+ favorites?: boolean;
6714
+ /**
6715
+ * Пункт со ссылкой, который в избранное не ставится: своя страница раздела, дашборд,
6716
+ * действие «Создать». Звезды у него нет, и номер, сохранённый раньше, в блок не попадает.
6717
+ */
6718
+ favoriteDisabled?: boolean;
6719
+ iconButton?: {
6720
+ icon: string;
6721
+ data?: ItemData;
6722
+ };
6723
+ }
6724
+ /** Кусок подписи: отмеченный — тот, которым она совпала с запросом. */
6725
+ interface TitlePart {
6726
+ text: string;
6727
+ matched: boolean;
6728
+ }
6729
+ }
6730
+
6731
+ /** Шапка бокового меню: над полосой пунктов. */
6732
+ declare class RtSideMenuHeaderDirective {
6733
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtSideMenuHeaderDirective, never>;
6734
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RtSideMenuHeaderDirective, "[rtSideMenuHeader]", never, {}, {}, never, never, true, never>;
6735
+ }
6736
+ /** Подвал бокового меню: под полосой пунктов. */
6737
+ declare class RtSideMenuFooterDirective {
6738
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtSideMenuFooterDirective, never>;
6739
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RtSideMenuFooterDirective, "[rtSideMenuFooter]", never, {}, {}, never, never, true, never>;
6740
+ }
6741
+ /**
6742
+ * Контекст своего значка: пункт, имя, которое надо нарисовать, и место. Шаблон один на меню и рисует
6743
+ * и значок строки, и кнопку строки, поэтому рисунок выбирают по `icon`, а не по `item.icon`: у кнопки
6744
+ * это имя её значка.
6745
+ */
6746
+ interface IRtSideMenuIconContext {
6747
+ $implicit: IRtSideMenu.Item;
6748
+ /** Имя значка этого места: значка строки или кнопки строки. */
6749
+ icon: string;
6750
+ /** Место: значок строки или кнопка строки. */
6751
+ slot: 'icon' | 'iconButton';
6752
+ }
6753
+ /**
6754
+ * Помечает `<ng-template>` своего значка пунктов меню — для имён, которых нет ни в наборе кита, ни
6755
+ * в перечне имён Material. Шаблон один на меню и рисует и значок строки, и значок кнопки строки; кит
6756
+ * ставит его на место значка размером значка и цветом строки. Рисунок выбирают по `icon` контекста.
6757
+ * Значок, который кит рисует сам, шаблон не перебивает.
6758
+ *
6759
+ * ```html
6760
+ * <rt-side-menu [menuItems]="items">
6761
+ * <ng-template rtSideMenuIcon let-icon="icon"><img [src]="'/icons/' + icon + '.svg'" alt="" /></ng-template>
6762
+ * </rt-side-menu>
6763
+ * ```
6764
+ */
6765
+ declare class RtSideMenuIconDirective {
6766
+ readonly templateRef: TemplateRef<IRtSideMenuIconContext>;
6767
+ static ngTemplateContextGuard(_directive: RtSideMenuIconDirective, context: unknown): context is IRtSideMenuIconContext;
6768
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtSideMenuIconDirective, never>;
6769
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RtSideMenuIconDirective, "ng-template[rtSideMenuIcon]", never, {}, {}, never, never, true, never>;
6770
+ }
6771
+
6772
+ /**
6773
+ * Меню, в котором стоит подпункт. Токен вместо самого компонента: меню объявляет подпункт в своих
6774
+ * импортах, и прямая ссылка замкнула бы круг «меню → подпункт → меню».
6775
+ *
6776
+ * Активность и раскрытость — два значения: активным остаётся адрес, на котором человек стоит, а
6777
+ * раскрытой — всякая папка, в которой нашлось совпадение.
6778
+ */
6779
+ interface IRtSideMenuHost {
6780
+ readonly activeMenuIds: Signal<ReadonlyArray<string | number>>;
6781
+ readonly expandedMenuIds: Signal<ReadonlyArray<string | number>>;
6782
+ readonly highlightedMenuId: Signal<string | number | null>;
6783
+ readonly subMenuQuery: Signal<string>;
6784
+ /** Номер, под которым меню хранит настройки, и пункты полосы: по ним избранное находит свой раздел. */
6785
+ readonly menuId: Signal<string>;
6786
+ readonly menuItems: Signal<ReadonlyArray<IRtSideMenu.Item>>;
6787
+ /** Набор, который подменю наполняет сейчас, до отбора поиском. */
6788
+ readonly shownSubMenu: Signal<IRtSideMenu.Item[]>;
6789
+ readonly favoritesCount: Signal<IRtSideMenu.FavoritesCount>;
6790
+ /** Поиск показывает совпавшие строки избранного; выключено — на время поиска блока нет. */
6791
+ readonly isFavoritesSearchShown: Signal<boolean>;
6792
+ /** Свой значок пунктов, чьё имя кит не рисует: шаблон `rtSideMenuIcon` меню. */
6793
+ readonly ownIconTpl: Signal<TemplateRef<IRtSideMenuIconContext> | undefined>;
6794
+ /** Подсказки строк подменю: выключено — их нет ни у подписей, ни у кнопок строк. */
6795
+ readonly subMenuTooltipsShown: Signal<boolean>;
6796
+ /** Раскрыть или свернуть папку нажатием её заголовка. */
6797
+ toggleFolder(item: IRtSideMenu.Item): void;
6798
+ /** Уход указателя с панели: подменю, открытое наведением, закрывается. */
6799
+ toggleSubMenu(): void;
6800
+ /** Строку избранного тянут: подменю, открытое наведением, не закрывается уходом указателя. */
6801
+ holdSubMenu(held: boolean): void;
6802
+ }
6803
+
6804
+ /**
6805
+ * Боковая навигация: полоса пунктов и подменю раздела рядом. Перенос бокового меню первого кита на
6806
+ * части второго; `rt-menu` — другое семейство, выпадающее меню действий.
6807
+ */
6808
+ declare class RtSideMenuComponent implements IRtSideMenuHost {
6809
+ #private;
6810
+ protected readonly searchControl: FormControl<string | null>;
6811
+ protected readonly panelRef: Signal<ElementRef<HTMLElement> | undefined>;
6812
+ protected readonly headerTpl: Signal<TemplateRef<unknown> | undefined>;
6813
+ protected readonly footerTpl: Signal<TemplateRef<unknown> | undefined>;
6814
+ protected readonly searchLabel: Signal<string>;
6815
+ protected readonly pinLabel: Signal<string>;
6816
+ protected readonly unpinLabel: Signal<string>;
6817
+ protected readonly nothingFoundLabel: Signal<string>;
6818
+ protected readonly resizeLabel: Signal<string>;
6819
+ protected readonly backLabel: Signal<string>;
6820
+ /** Экран узкий: замер кита, и другого источника у этого признака нет. */
6821
+ protected readonly narrow: Signal<boolean>;
6822
+ protected readonly resizeValueNow: Signal<number | null>;
6823
+ protected readonly resizeValueMin: number;
6824
+ protected readonly resizeValueMax: number;
6825
+ /** Натянутая ширина панели. Своего выбора нет — свойство не ставится, и ширину берёт оформление. */
6826
+ protected readonly panelWidthStyle: Signal<string | null>;
6827
+ /** Закрепление действует только на широком экране: на узком подменю занимает экран целиком. */
6828
+ protected readonly isPinned: Signal<boolean>;
6829
+ /** Подменю держится набором запроса: уходом указателя не закрывается. */
6830
+ protected readonly isSearchHeld: Signal<boolean>;
6831
+ /** Закреплённое подменю открыто, пока ему есть что показать: указатель на это не влияет. */
6832
+ protected readonly subMenuOpened: Signal<boolean>;
6833
+ protected readonly visibleSubMenuItems: Signal<IRtSideMenu.Item[]>;
6834
+ protected readonly isNothingFound: Signal<boolean>;
6835
+ /** Пункт полосы подсвечен активным: выбранный человеком, а без выбора — пункт текущего адреса. */
6836
+ protected readonly activeRailIds: Signal<ReadonlyArray<string | number>>;
6837
+ /** Набор, который подменю наполняет сейчас, до отбора поиском. */
6838
+ readonly shownSubMenu: Signal<IRtSideMenu.Item[]>;
6839
+ readonly selectedItem: WritableSignal<IRtSideMenu.Item | null>;
6840
+ readonly selectedSubMenu: WritableSignal<IRtSideMenu.Item[] | null>;
6841
+ /** Что набрано в поиске: строка берёт запрос отсюда, чтобы отметить совпавшее. */
6842
+ readonly subMenuQuery: WritableSignal<string>;
6843
+ readonly highlightedMenuId: Signal<string | number | null>;
6844
+ /**
6845
+ * Какие папки раскрыты. Пустой запрос оставляет раздел текущего адреса; непустой добавляет
6846
+ * папки с совпадением — иначе найденное лежит за закрытым заголовком.
6847
+ */
6848
+ readonly expandedMenuIds: Signal<ReadonlyArray<string | number>>;
6849
+ readonly activeMenuIds: InputSignal<ReadonlyArray<string | number>>;
6850
+ readonly menuItems: InputSignal<ReadonlyArray<IRtSideMenu.Item>>;
6851
+ /** Режим подменю от приложения. Задан — важнее сохранённого; нет ни того, ни другого — наведение. */
6852
+ readonly subMenuMode: InputSignal<IRtSideMenu.SubMenuMode | undefined>;
6853
+ /** Ширина закреплённого подменю в пикселях. Пусто — сохранённая, её нет — оформление. */
6854
+ readonly subMenuWidth: InputSignal<number | null | undefined>;
6855
+ /** Номер, под которым меню хранит свои настройки: у двух меню приложения — два номера. */
6856
+ readonly menuId: InputSignalWithTransform<string, string | null | undefined>;
6857
+ /** Число строк в заголовке блока избранного: всегда, у свёрнутого блока или никогда. */
6858
+ readonly favoritesCount: InputSignal<IRtSideMenu.FavoritesCount>;
6859
+ /** Место под кнопки избранного, ждущие наведения: держать всегда или отдавать подписи. */
6860
+ readonly favoriteActionsReserve: InputSignal<IRtSideMenu.FavoriteActionsReserve>;
6861
+ /** Поиск показывает совпавшие строки избранного; выключено — на время поиска блока нет. */
6862
+ readonly isFavoritesSearchShown: InputSignalWithTransform<boolean, unknown>;
6863
+ /** Кнопка закрепления в шапке подменю; выключено — подменю только всплывает, если режим не задан входом. */
6864
+ readonly pinShown: InputSignalWithTransform<boolean, unknown>;
6865
+ /** Подсказки строк подменю — у подписей и у кнопок строк. Доступные имена остаются. */
6866
+ readonly subMenuTooltipsShown: InputSignalWithTransform<boolean, unknown>;
6867
+ readonly subMenuModeChange: OutputEmitterRef<IRtSideMenu.SubMenuMode>;
6868
+ readonly subMenuWidthChange: OutputEmitterRef<number>;
6869
+ /** Начало и конец тяги: по ним потребитель накрывает чужие кадры и снимает накрытие. */
6870
+ readonly subMenuResizeStart: OutputEmitterRef<void>;
6871
+ readonly subMenuResizeEnd: OutputEmitterRef<void>;
6872
+ readonly closeMobileMenuAction: OutputEmitterRef<void>;
6873
+ readonly clickSubMenuAction: OutputEmitterRef<{
6874
+ item: IRtSideMenu.Item;
6875
+ event: MouseEvent;
6876
+ }>;
6877
+ readonly clickSubMenuAdditionalAction: OutputEmitterRef<{
6878
+ data: IRtSideMenu.ItemData | undefined;
6879
+ event: MouseEvent;
6880
+ }>;
6881
+ /** Свой значок пунктов, чьё имя кит не рисует; подпункты читают его через токен меню. */
6882
+ readonly ownIconTpl: Signal<TemplateRef<IRtSideMenuIconContext> | undefined>;
6883
+ constructor();
6884
+ onClickMenu(item: IRtSideMenu.Item): void;
6885
+ onClickSubMenu({ item, event }: {
6886
+ item: IRtSideMenu.Item;
6887
+ event: MouseEvent;
6888
+ }): void;
6889
+ onClickSubMenuAdditional(payload: {
6890
+ data: IRtSideMenu.ItemData | undefined;
6891
+ event: MouseEvent;
6892
+ }): void;
6893
+ onBackToMainMenu(): void;
6894
+ /** Наведение на пункт полосы открывает его подменю; уход указателя с панели — без пункта. */
6895
+ toggleSubMenu(item?: IRtSideMenu.Item): void;
6896
+ closeSubMenu(): void;
6897
+ holdSubMenu(held: boolean): void;
6898
+ toggleFolder(item: IRtSideMenu.Item): void;
6899
+ /** Человек взялся за поле поиска: дальше подменю закрывает нажатие снаружи, а не уход указателя. */
6900
+ onSearchHold(): void;
6901
+ /** Клавиши поля поиска раздаются списку; умолчание отменяется только у съеденной. */
6902
+ onSearchKeydown(event: KeyboardEvent): void;
6903
+ /** Нажат переключатель режима: выбор уходит в настройки меню и наружу. */
6904
+ onSubMenuModeToggle(): void;
6905
+ onResizeStart(event: PointerEvent): void;
6906
+ onResizeKeydown(event: KeyboardEvent): void;
6907
+ closeMobileMenu(): void;
6908
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtSideMenuComponent, never>;
6909
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtSideMenuComponent, "rt-side-menu", never, { "activeMenuIds": { "alias": "activeMenuIds"; "required": true; "isSignal": true; }; "menuItems": { "alias": "menuItems"; "required": false; "isSignal": true; }; "subMenuMode": { "alias": "subMenuMode"; "required": false; "isSignal": true; }; "subMenuWidth": { "alias": "subMenuWidth"; "required": false; "isSignal": true; }; "menuId": { "alias": "menuId"; "required": false; "isSignal": true; }; "favoritesCount": { "alias": "favoritesCount"; "required": false; "isSignal": true; }; "favoriteActionsReserve": { "alias": "favoriteActionsReserve"; "required": false; "isSignal": true; }; "isFavoritesSearchShown": { "alias": "isFavoritesSearchShown"; "required": false; "isSignal": true; }; "pinShown": { "alias": "pinShown"; "required": false; "isSignal": true; }; "subMenuTooltipsShown": { "alias": "subMenuTooltipsShown"; "required": false; "isSignal": true; }; }, { "subMenuModeChange": "subMenuModeChange"; "subMenuWidthChange": "subMenuWidthChange"; "subMenuResizeStart": "subMenuResizeStart"; "subMenuResizeEnd": "subMenuResizeEnd"; "closeMobileMenuAction": "closeMobileMenuAction"; "clickSubMenuAction": "clickSubMenuAction"; "clickSubMenuAdditionalAction": "clickSubMenuAdditionalAction"; }, ["headerTpl", "footerTpl", "ownIconTpl"], never, true, never>;
6910
+ }
6911
+
6912
+ /**
6913
+ * Отбор пунктов подменю по подстроке подписи.
6914
+ *
6915
+ * Отбор спускается внутрь папок на любую глубину: потребитель кладёт в папки то, что человек и ищет
6916
+ * по имени, и по одному верхнему уровню такой пункт не нашёлся бы.
6917
+ *
6918
+ * В выдаче стоят только строки, содержащие запрос. Папка остаётся путём к совпавшим детям, а её
6919
+ * состав отбирается тем же правилом: иначе одно совпадение по имени папки вытаскивало бы весь её
6920
+ * состав. Папка, совпавшая только по имени, остаётся одной строкой без детей.
6921
+ *
6922
+ * Отобранная папка — новый объект: правка на месте переписала бы набор потребителя, и стёртый
6923
+ * запрос вернул бы урезанное меню.
6924
+ */
6925
+ declare function filterSideMenuItems(items: ReadonlyArray<IRtSideMenu.Item>, query: string): IRtSideMenu.Item[];
6926
+ /**
6927
+ * Папки отобранного списка — те, что должны стоять раскрытыми. Возвращаются номера, а не пункты:
6928
+ * отобранный список пересобирается на каждую букву запроса, и ссылка на пункт этого не переживает.
6929
+ */
6930
+ declare function sideMenuIdsToExpand(items: ReadonlyArray<IRtSideMenu.Item>): Array<string | number>;
6931
+ /**
6932
+ * Пределы ширины подменю в пикселях. Уже нижнего не помещается ни одна подпись пункта, шире
6933
+ * верхнего подменю закрывает содержимое страницы.
6934
+ */
6935
+ declare const RT_SIDE_MENU_WIDTH_MIN: number;
6936
+ declare const RT_SIDE_MENU_WIDTH_MAX: number;
6937
+ /** Шаг ширины с клавиатуры: стрелку держат нажатой, и крупный шаг проскакивал бы подпись целиком. */
6938
+ declare const RT_SIDE_MENU_WIDTH_STEP: number;
6939
+ /** Приведение ширины к пределам. */
6940
+ declare function clampSideMenuWidth(width: number): number;
6941
+ /**
6942
+ * Резка подписи на совпавшие и несовпавшие куски.
6943
+ *
6944
+ * Отмечаются все вхождения: отмеченное одно первое читается как «второго нет». Сравнение без учёта
6945
+ * регистра, а куски режутся из оригинала — приведение к нижнему регистру переписало бы названия.
6946
+ */
6947
+ declare function splitSideMenuTitle(name: string, query: string): IRtSideMenu.TitlePart[];
6948
+ /**
6949
+ * Пункты подменю в том порядке, в каком они стоят на экране. Внутрь папки список спускается, только
6950
+ * если та раскрыта: ходьба стрелками идёт по видимому, а не по всему набору.
6951
+ */
6952
+ declare function walkSideMenuItems(items: ReadonlyArray<IRtSideMenu.Item>, expandedIds: ReadonlyArray<string | number>): IRtSideMenu.Item[];
6953
+ /**
6954
+ * Куда уходит подсветка на шаг стрелкой. Считается по номеру пункта: видимый список пересобирается
6955
+ * на каждую букву запроса. Без подсветки вниз берёт первый пункт, вверх — последний. У краёв ходьба
6956
+ * останавливается: заворот уводил бы взгляд через всю панель.
6957
+ */
6958
+ declare function stepSideMenuHighlight(walk: ReadonlyArray<IRtSideMenu.Item>, highlightedId: string | number | null, step: number): string | number | null;
6959
+ /** Чем вешается слушатель. У кита это `Renderer2.listen`, у проверки — своя функция. */
6960
+ type TRtPointerListen = (target: HTMLElement, event: string, handler: (event: PointerEvent) => void) => () => void;
6961
+ /** Что тяга сообщает меню: новую ширину по ходу и конец — отпусканием или отнятием указателя. */
6962
+ interface IRtSubMenuWidthDragHooks {
6963
+ readonly onWidth: (width: number) => void;
6964
+ readonly onEnd: () => void;
6965
+ }
6966
+ /**
6967
+ * Тяга ширины подменю указательными событиями: мышиных палец и перо не дают. Слушатели висят на
6968
+ * ручке, а держит их захват указателя — слушатель на документе терял бы движение над чужим кадром.
6969
+ * Указатель, отнятый средой, кончает тягу так же, как отпускание.
6970
+ *
6971
+ * Возвращает снятие слушателей. Пустое значение — тянуть нечем.
6972
+ */
6973
+ declare function startSideMenuWidthDrag(event: PointerEvent, startWidth: number, listen: TRtPointerListen, hooks: IRtSubMenuWidthDragHooks): (() => void) | null;
6974
+ /**
6975
+ * Ширина, которой панель нарисована. Панели нет или раскладка не посчитана — нижний предел: с нуля
6976
+ * тяга уводила бы ширину в отрицательные числа.
6977
+ */
6978
+ declare function drawnSideMenuWidth(panel: HTMLElement | null): number;
6979
+ /**
6980
+ * Число, которое уходит наружу по концу тяги: большее из натянутого и нарисованного. Нижний предел
6981
+ * держит оформление, и панель не бывает уже его, даже если рука ушла левее.
6982
+ */
6983
+ declare function reportedSideMenuWidth(dragged: number, panel: HTMLElement | null): number;
6984
+ /**
6985
+ * Новая ширина по нажатой клавише. Пустое значение — клавиша не о ширине, и умолчание не отменяется:
6986
+ * иначе ручка съедала бы табуляцию. Влево значит уже при любом направлении письма: ручка стоит у
6987
+ * правого края панели.
6988
+ */
6989
+ declare function sideMenuWidthByKey(key: string, width: number): number | null;
6990
+ /**
6991
+ * Что показывает закреплённое подменю: выбранный человеком раздел, а пока выбора нет — раздел
6992
+ * активного адреса. Выбор впереди активности: иначе до соседнего раздела не добраться.
6993
+ */
6994
+ declare function pinnedSideMenuItems(picked: IRtSideMenu.Item[] | null | undefined, activeIds: ReadonlyArray<string | number>, items: ReadonlyArray<IRtSideMenu.Item>): IRtSideMenu.Item[];
6995
+
6996
+ /**
6997
+ * Значок пункта по его `icon`: имя кита как есть, имя Material первого кита — его парой из перечня
6998
+ * кита, как у `rt-menu-item`. `null` — кит такой значок не рисует: пункт берёт свой шаблон меню или
6999
+ * стоит без значка.
7000
+ */
7001
+ declare function sideMenuIconName(icon: string | undefined): IRtIcon.Name | null;
7002
+ /**
7003
+ * Имена значков меню, о которых оно должно предупредить: ни имени кита, ни пары в перечне. И значок
7004
+ * пункта, и значок кнопки строки закрывает свой шаблон меню.
7005
+ * Без предупреждения такой значок пуст, и пропуск не заметен. Обходит пункты на любую глубину;
7006
+ * каждое имя — один раз.
7007
+ */
7008
+ declare function unpairedSideMenuIcons(items: ReadonlyArray<IRtSideMenu.Item>, hasOwnIcon: boolean): string[];
7009
+
7010
+ /** Номер меню, которому приложение своего не задало. */
7011
+ declare const RT_SIDE_MENU_DEFAULT_ID: string;
7012
+ /**
7013
+ * Номер меню, под которым лежат его настройки. Пустой — тот же, что не заданный: атрибут без
7014
+ * значения даёт пустую строку, и настройки легли бы под ключ, которого никто не называл.
7015
+ */
7016
+ declare function normalizeSideMenuId(menuId: string | null | undefined): string;
7017
+ /** Запись хранилища как есть: номер меню — и что под ним лежит, в том числе сломанное. */
7018
+ type TRtSideMenuSettingsRecord = Record<string, unknown>;
7019
+ /**
7020
+ * Настройки одного меню из того, что лежит под его номером. Недопустимое поле читается как
7021
+ * отсутствие значения, соседние поля остаются: сломанная ширина не стирает режим. Незнакомые поля
7022
+ * не удаляются. Ширина приводится к пределам подменю, списки избранного — к номерам без повторов.
7023
+ */
7024
+ declare function normalizeSideMenuSettings(value: unknown): IRtSideMenu.Settings;
7025
+ /** Запись хранилища как объект. Не JSON, не объект, пустое хранилище — одинаково пустая запись. */
7026
+ declare function parseSideMenuSettingsRecord(raw: string | null): TRtSideMenuSettingsRecord;
7027
+ /**
7028
+ * Настройки всех меню из записи. Меню, чьё значение не объект, пропускается: сломанный угол одного
7029
+ * меню не стирает соседние.
7030
+ */
7031
+ declare function readSideMenuSettings(record: TRtSideMenuSettingsRecord): Record<string, IRtSideMenu.Settings>;
7032
+ /**
7033
+ * Запись с правкой полей одного меню. Остальные меню и поля уходят такими, какими лежали, даже
7034
+ * сломанные: кит правит только то, о чём его попросили.
7035
+ */
7036
+ declare function patchSideMenuSettings(record: TRtSideMenuSettingsRecord, menuId: string, patch: Partial<IRtSideMenu.Settings>): TRtSideMenuSettingsRecord;
7037
+ /** Запись без настроек одного меню. */
7038
+ declare function omitSideMenuSettings(record: TRtSideMenuSettingsRecord, menuId: string): TRtSideMenuSettingsRecord;
7039
+
7040
+ /** Значки кнопок строки избранного: «убрать» и ручка перетаскивания. */
7041
+ interface IRtSideMenuFavoritesIcons {
7042
+ readonly remove: IRtIcon.Name;
7043
+ readonly drag: IRtIcon.Name;
7044
+ }
7045
+ interface IRtSideMenuSettingsConfig {
7046
+ /** Свой ключ хранилища, если приложению нужен не общий ключ кита. */
7047
+ readonly storageKey?: string;
7048
+ /** Свои значки кнопок избранного; не названный берётся из набора кита. */
7049
+ readonly icons?: Partial<IRtSideMenuFavoritesIcons>;
7050
+ }
7051
+ declare const RT_SIDE_MENU_SETTINGS_CONFIG: InjectionToken<IRtSideMenuSettingsConfig>;
7052
+ /**
7053
+ * Настройки боковых меню в хранилище браузера: режим и ширина подменю, избранное и свёрнутые блоки
7054
+ * избранного под номером каждого меню.
7055
+ *
7056
+ * Перед каждой записью ключ читается заново: соседняя вкладка или приложение могли записать своё,
7057
+ * и запись из копии затёрла бы их. Правится одно поле одного меню, остальное уходит как лежало.
7058
+ * Изменения из других вкладок приходят событием `storage` и обновляют сигналы.
7059
+ *
7060
+ * Хранилище берётся токеном `@rt-tools/core` напрямую, а не общим сервисом хранилища: сервису
7061
+ * нужно знать, что запись не удалась, и держать правду в памяти до перезагрузки. Без хранилища, вне
7062
+ * браузера, закрытое или полное — настройки живут в памяти, и ни чтение, ни запись не бросают.
7063
+ *
7064
+ * Сервис ставится провайдером окружения — `provideRtSideMenuSettings()`, — а меню берёт его
7065
+ * необязательно: не поставлен — меню ничего не хранит, режим и ширина приходят входами.
7066
+ */
7067
+ declare class RtSideMenuSettingsService {
7068
+ #private;
7069
+ /** Значки кнопок избранного: из настроек провайдера, иначе из набора кита. */
7070
+ readonly favoritesIcons: IRtSideMenuFavoritesIcons;
7071
+ /** Номера меню, чьи настройки лежат в хранилище. */
7072
+ readonly menuIds: Signal<string[]>;
7073
+ constructor();
7074
+ /** Настройки одного меню целиком, с незнакомыми полями; не сохранены — пустой объект. */
7075
+ settings(menuId: string): Signal<IRtSideMenu.Settings>;
7076
+ subMenuMode(menuId: string): Signal<IRtSideMenu.SubMenuMode>;
7077
+ subMenuWidth(menuId: string): Signal<number | null>;
7078
+ /** Избранное меню в порядке списка; пусто — пустой список. */
7079
+ favoriteIds(menuId: string): Signal<ReadonlyArray<IRtSideMenu.FavoriteId>>;
7080
+ /** Пункты полосы, чей блок избранного свёрнут; ничего не свёрнуто — пустой список. */
7081
+ favoritesCollapsed(menuId: string): Signal<ReadonlyArray<IRtSideMenu.Item['id']>>;
7082
+ /** Сворачивает или разворачивает блок одного раздела; остальные разделы остаются как были. */
7083
+ setFavoritesCollapsed(menuId: string, sectionId: IRtSideMenu.Item['id'], collapsed: boolean): void;
7084
+ /** Звезда: нет в списке — встаёт последним, есть — уходит. */
7085
+ toggleFavorite(menuId: string, id: IRtSideMenu.FavoriteId): void;
7086
+ removeFavorite(menuId: string, id: IRtSideMenu.FavoriteId): void;
7087
+ /** Перенос строки блока: места в блоке, скрытые номера остаются на своих. */
7088
+ moveVisibleSideMenuFavorite(menuId: string, visibleIds: ReadonlyArray<IRtSideMenu.FavoriteId>, from: number, to: number): void;
7089
+ /** Список целиком: приложение заводит избранное само, например по умолчанию для роли. */
7090
+ setFavorites(menuId: string, ids: ReadonlyArray<IRtSideMenu.FavoriteId>): void;
7091
+ setSubMenuMode(menuId: string, mode: IRtSideMenu.SubMenuMode): void;
7092
+ setSubMenuWidth(menuId: string, width: number): void;
7093
+ /** Настройки меню уходят только по вызову приложения: кит сам ничего не удаляет. */
7094
+ deleteSettings(menuId: string): void;
7095
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtSideMenuSettingsService, never>;
7096
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
7097
+ }
7098
+ /**
7099
+ * Сервис настроек бокового меню для приложения.
7100
+ *
7101
+ * ```ts
7102
+ * bootstrapApplication(App, { providers: [provideRtSideMenuSettings()] });
7103
+ * ```
7104
+ */
7105
+ declare function provideRtSideMenuSettings(config?: IRtSideMenuSettingsConfig): EnvironmentProviders;
7106
+
7107
+ /**
7108
+ * Строка подменю: пункт со ссылкой или папка со своими пунктами. Раскрытость, подсветку и запрос
7109
+ * строка берёт у меню — своего состояния у неё нет.
7110
+ *
7111
+ * В разделе, где приложение включило избранное, у пункта со ссылкой стоит звезда; в строке блока
7112
+ * избранного — кнопка «убрать» и слот `[rtSideMenuSubItemAction]`, куда блок кладёт ручку.
7113
+ */
7114
+ declare class RtSideMenuSubItemComponent {
7115
+ #private;
7116
+ protected readonly menuRef: IRtSideMenuHost;
7117
+ protected readonly narrow: Signal<boolean>;
7118
+ /** Значки кнопок избранного: из настроек провайдера, иначе из набора кита. */
7119
+ protected readonly favoritesIcons: RtSideMenuSettingsService['favoritesIcons'] | null;
7120
+ protected readonly addLabel: Signal<string>;
7121
+ protected readonly removeLabel: Signal<string>;
7122
+ /** Избранное включено у раздела, чьё подменю показано, и приложение поставило настройки меню. */
7123
+ protected readonly favoritesOn: Signal<boolean>;
7124
+ protected readonly favoriteIds: Signal<ReadonlyArray<IRtSideMenu.FavoriteId>>;
7125
+ readonly item: InputSignal<IRtSideMenu.Item>;
7126
+ /** Строка стоит в блоке избранного: вместо звезды — «убрать», без номера и подсветки клавиатуры. */
7127
+ readonly inFavorites: InputSignalWithTransform<boolean, unknown>;
7128
+ readonly clickSubMenuAction: OutputEmitterRef<{
7129
+ item: IRtSideMenu.Item;
7130
+ event: MouseEvent;
7131
+ }>;
7132
+ readonly clickSubMenuAdditionalAction: OutputEmitterRef<{
7133
+ data: IRtSideMenu.ItemData | undefined;
7134
+ event: MouseEvent;
7135
+ }>;
7136
+ onClickSubMenu(item: IRtSideMenu.Item, event: MouseEvent): void;
7137
+ /** Кнопка потребителя в строке: ни перехода по ссылке строки, ни закрытия подменю. */
7138
+ onClickSubMenuAdditional(item: IRtSideMenu.Item, event: MouseEvent): void;
7139
+ /** Звезда переключает избранное и больше ничего: ни перехода, ни закрытия подменю. */
7140
+ onToggleFavorite(item: IRtSideMenu.Item, event: MouseEvent): void;
7141
+ /**
7142
+ * «Убрать» в строке блока. Фокус уходит на такую же кнопку соседней строки до того, как строка
7143
+ * исчезнет: иначе он падал бы на страницу, и человек с клавиатуры терял бы место.
7144
+ */
7145
+ onRemoveFavorite(item: IRtSideMenu.Item, event: MouseEvent): void;
7146
+ onToggleFolder(item: IRtSideMenu.Item): void;
7147
+ static ɵfac: i0.ɵɵFactoryDeclaration<RtSideMenuSubItemComponent, never>;
7148
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtSideMenuSubItemComponent, "rt-side-menu-sub-item", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "inFavorites": { "alias": "inFavorites"; "required": false; "isSignal": true; }; }, { "clickSubMenuAction": "clickSubMenuAction"; "clickSubMenuAdditionalAction": "clickSubMenuAdditionalAction"; }, never, ["[rtSideMenuSubItemAction]"], true, never>;
7149
+ }
7150
+
5681
7151
  /**
5682
7152
  * Маркеры частей области прокрутки — своим файлом, как у соседних семей.
5683
7153
  *
@@ -5908,33 +7378,48 @@ declare class RtSkeletonWrapperComponent {
5908
7378
  * - `primary` — синий основной (action accent), default
5909
7379
  * - `neutral` — нейтральный серый (для тонких inline-loader'ов)
5910
7380
  * - `on-primary` — белый (для overlay поверх primary-фона)
7381
+ *
7382
+ * `Appearance` — вид кольца: `border` — кольцо с дорожкой, `arc` — дуга без дорожки, как в Material.
5911
7383
  */
5912
7384
  declare namespace IRtSpinner {
5913
7385
  type Color = 'primary' | 'neutral' | 'on-primary';
7386
+ type Appearance = 'border' | 'arc';
5914
7387
  }
5915
7388
 
5916
7389
  /**
5917
7390
  * Атомарный rotating-spinner для loading-индикаторов.
5918
7391
  *
5919
- * Чистый CSS keyframe (border + animation rotate), zero deps. Без conditional
5920
- * rendering и backdrop'а — это ответственность parent'а (например `rt-table`
5921
- * sticky overlay).
7392
+ * Без новых режимов кольцо рисует сам host: border с одной цветной стороной и вращение, своей
7393
+ * разметки нет. Так спиннер стоит у семи компонентов кита, и их разметка от режимов не меняется.
5922
7394
  *
5923
- * Размер задаётся через `[diameter]` (px); цвет — через `[color]`
5924
- * (`primary` / `neutral` / `on-primary`).
7395
+ * Режимы `overlay`, `plate` и вид `arc` рисуют внутреннюю разметку, а host перестаёт быть кольцом:
7396
+ * - `overlay` — спиннер занимает позиционированного родителя целиком и ставит кольцо в центр;
7397
+ * слой — ступень `sticky`, ниже всего, что открывается поверх страницы;
7398
+ * - `backdrop` — полупрозрачная подложка оверлея, без `overlay` не действует;
7399
+ * - `plate` — круглая плашка с тенью под кольцом;
7400
+ * - `appearance="arc"` — дуга без дорожки, как у Material.
5925
7401
  *
5926
- * Анимация уважает `@media (prefers-reduced-motion)` — у пользователей с
5927
- * включённым reduced-motion spinner не вращается.
7402
+ * Анимация уважает `@media (prefers-reduced-motion)` — вращение замедляется.
5928
7403
  */
5929
7404
  declare class RtSpinnerComponent {
7405
+ /** Кольцо рисуется внутренней разметкой, а не самим host-ом. */
7406
+ protected readonly framed: Signal<boolean>;
7407
+ protected readonly modifiers: Signal<Record<string, boolean>>;
7408
+ protected readonly cssDiameter: Signal<string>;
5930
7409
  /** Диаметр spinner'а в px. Default 32. */
5931
7410
  readonly diameter: InputSignalWithTransform<number, NumberInput>;
5932
7411
  /** Семантическая палитра. Default `primary`. */
5933
7412
  readonly color: InputSignal<IRtSpinner.Color>;
5934
- get hostClasses(): Record<string, boolean>;
5935
- get cssDiameter(): string;
7413
+ /** Вид кольца: `border` — с дорожкой, `arc` — дуга без дорожки. Default `border`. */
7414
+ readonly appearance: InputSignal<IRtSpinner.Appearance>;
7415
+ /** Спиннер накрывает позиционированного родителя и стоит в его центре. Default `false`. */
7416
+ readonly overlay: InputSignalWithTransform<boolean, BooleanInput>;
7417
+ /** Полупрозрачная подложка оверлея; без `overlay` не действует. Default `false`. */
7418
+ readonly backdrop: InputSignalWithTransform<boolean, BooleanInput>;
7419
+ /** Круглая плашка с тенью под кольцом. Default `false`. */
7420
+ readonly plate: InputSignalWithTransform<boolean, BooleanInput>;
5936
7421
  static ɵfac: i0.ɵɵFactoryDeclaration<RtSpinnerComponent, never>;
5937
- static ɵcmp: i0.ɵɵComponentDeclaration<RtSpinnerComponent, "rt-spinner", never, { "diameter": { "alias": "diameter"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
7422
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtSpinnerComponent, "rt-spinner", never, { "diameter": { "alias": "diameter"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "overlay": { "alias": "overlay"; "required": false; "isSignal": true; }; "backdrop": { "alias": "backdrop"; "required": false; "isSignal": true; }; "plate": { "alias": "plate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5938
7423
  }
5939
7424
 
5940
7425
  /**
@@ -6347,7 +7832,6 @@ declare class RtRowHasActionsPipe implements PipeTransform {
6347
7832
  * Визуальный аффорданс (cursor/hover/focus-ring) включает `[clickable]` на rt-table.
6348
7833
  */
6349
7834
  declare class RtTableRowDirective {
6350
- #private;
6351
7835
  readonly activated: OutputEmitterRef<void>;
6352
7836
  protected onClick(event: MouseEvent): void;
6353
7837
  protected onKey(event: Event): void;
@@ -7237,8 +8721,17 @@ declare namespace INotification {
7237
8721
  */
7238
8722
  readonly secondaryAction?: Action;
7239
8723
  readonly filled?: boolean;
8724
+ /**
8725
+ * Сколько тост живёт, в миллисекундах. Не задано — столько, сколько велит тостер;
8726
+ * `null` — таймера нет, тост держится до крестика.
8727
+ */
8728
+ readonly duration?: number | null;
8729
+ /** Полоса срока под тостом: сжимается вместе с таймером и встаёт вместе с ним. */
8730
+ readonly progress?: boolean;
8731
+ /** Свой значок вместо значка severity; `null` — тост без значка. */
8732
+ readonly icon?: IRtIcon.Name | null;
7240
8733
  }
7241
- type Options = Pick<Payload, 'description' | 'meta' | 'action' | 'secondaryAction' | 'filled'>;
8734
+ type Options = Pick<Payload, 'description' | 'meta' | 'action' | 'secondaryAction' | 'filled' | 'duration' | 'progress' | 'icon'>;
7242
8735
  /**
7243
8736
  * Событие шины уведомлений. `type` — строковый дискриминатор (доменные
7244
8737
  * action-перечисления вроде «обновление записи успешно»/«ошибка загрузки
@@ -7323,7 +8816,9 @@ declare enum ERtStorageKeys {
7323
8816
  /** Выбранная тема оформления: переживает перезагрузку и смену пользователя */
7324
8817
  Theme = "rt.theme",
7325
8818
  /** Префикс, а не полный ключ: итоговый вид — `rt.table.columns.<tableId>`. */
7326
- TableColumnsPrefix = "rt.table.columns."
8819
+ TableColumnsPrefix = "rt.table.columns.",
8820
+ /** Настройки боковых меню: один объект, в нём каждое меню под своим номером. */
8821
+ SideMenu = "rt.side-menu"
7327
8822
  }
7328
8823
 
7329
8824
  /**
@@ -7357,10 +8852,17 @@ declare class ThemeService {
7357
8852
  }
7358
8853
 
7359
8854
  declare const RT_TOASTER_GAP_PX: number;
8855
+ /**
8856
+ * Значки severity у тоста. Приложение подменяет карту целиком — например, на имена
8857
+ * Material, — а тост со своим `icon` берёт свой значок мимо карты.
8858
+ */
8859
+ declare const RT_TOAST_SEVERITY_ICONS: InjectionToken<Readonly<Record<INotification.Severity, IRtIcon.Name>>>;
7360
8860
  declare namespace IRtToaster {
7361
8861
  type Position = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
7362
8862
  type PositionY = 'top' | 'bottom';
7363
8863
  type PositionX = 'left' | 'center' | 'right';
8864
+ /** `stack` копит тосты стопкой; `replace` — новый тост уводит прежние. */
8865
+ type Mode = 'stack' | 'replace';
7364
8866
  interface Toast {
7365
8867
  readonly id: number;
7366
8868
  readonly severity: INotification.Severity;
@@ -7370,6 +8872,11 @@ declare namespace IRtToaster {
7370
8872
  readonly action?: INotification.Action;
7371
8873
  readonly secondaryAction?: INotification.Action;
7372
8874
  readonly filled?: boolean;
8875
+ readonly duration?: number | null;
8876
+ readonly progress?: boolean;
8877
+ readonly icon?: IRtIcon.Name | null;
8878
+ /** Тост вытеснен новым в режиме `replace` и уходит своей анимацией. */
8879
+ readonly replaced?: boolean;
7373
8880
  }
7374
8881
  interface Height {
7375
8882
  readonly toastId: number;
@@ -7380,7 +8887,13 @@ declare namespace IRtToaster {
7380
8887
  declare class RtToastComponent implements AfterViewInit, OnDestroy {
7381
8888
  #private;
7382
8889
  protected readonly t: Signal<TRtKitLabelMap>;
7383
- protected readonly icon: Signal<IRtIcon.Name>;
8890
+ /** Свой значок тоста важнее карты severity; `null` у тоста значок снимает. */
8891
+ protected readonly icon: Signal<IRtIcon.Name | null>;
8892
+ /** Срок жизни тоста: свой, если задан, иначе тостера; `null` — таймера нет. */
8893
+ protected readonly lifetime: Signal<number | null>;
8894
+ protected readonly showProgress: Signal<boolean>;
8895
+ /** Таймер и полоса срока встают от одного признака, чтобы не разойтись. */
8896
+ protected readonly paused: Signal<boolean>;
7384
8897
  readonly toast: InputSignal<IRtToaster.Toast>;
7385
8898
  readonly index: InputSignal<number>;
7386
8899
  readonly totalToasts: InputSignal<number>;
@@ -7418,6 +8931,8 @@ declare class RtToasterComponent {
7418
8931
  readonly position: InputSignal<IRtToaster.Position>;
7419
8932
  readonly duration: InputSignalWithTransform<number, number | string>;
7420
8933
  readonly visibleToasts: InputSignalWithTransform<number, number | string>;
8934
+ /** `replace` — новый тост уводит прежние их же анимацией ухода, а не копится стопкой. */
8935
+ readonly mode: InputSignal<IRtToaster.Mode>;
7421
8936
  readonly expand: InputSignalWithTransform<boolean, boolean | string>;
7422
8937
  get hostModifierClasses(): Record<string, boolean>;
7423
8938
  get hostStackStyles(): Record<string, string>;
@@ -7430,7 +8945,7 @@ declare class RtToasterComponent {
7430
8945
  protected onHeightRemoved(toastId: number): void;
7431
8946
  protected onDismissed(toastId: number): void;
7432
8947
  static ɵfac: i0.ɵɵFactoryDeclaration<RtToasterComponent, never>;
7433
- static ɵcmp: i0.ɵɵComponentDeclaration<RtToasterComponent, "rt-toaster", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "visibleToasts": { "alias": "visibleToasts"; "required": false; "isSignal": true; }; "expand": { "alias": "expand"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
8948
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtToasterComponent, "rt-toaster", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "visibleToasts": { "alias": "visibleToasts"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "expand": { "alias": "expand"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
7434
8949
  }
7435
8950
 
7436
8951
  /**
@@ -7450,6 +8965,7 @@ declare namespace IRtToggleButtonGroup {
7450
8965
  * - `value` — уникальный идентификатор сегмента, эмитится в `valueChange`.
7451
8966
  * - `label` — текстовая подпись (основной контент).
7452
8967
  * - `icon` — опциональная иконка перед лейблом (`<rt-icon>`).
8968
+ * - `glyph` — имя Material вместо `icon`; рисуется так же, как вход `glyph` у `rt-icon`.
7453
8969
  * - `title` — нативный HTML-title (вместо тултип-директивы).
7454
8970
  * - `disabled` — сегмент недоступен сейчас: он остаётся видимым, но нажатия не пропускает.
7455
8971
  * Признак лежит рядом с подписью, а не отдельным списком значений: список запретов
@@ -7460,6 +8976,7 @@ declare namespace IRtToggleButtonGroup {
7460
8976
  readonly value: T;
7461
8977
  readonly label: string;
7462
8978
  readonly icon?: IRtIcon.Name;
8979
+ readonly glyph?: string;
7463
8980
  readonly title?: string;
7464
8981
  readonly disabled?: boolean;
7465
8982
  }
@@ -7567,12 +9084,23 @@ declare namespace IRtToggleSwitch {
7567
9084
  * и наезжает на иконку активного состояния, так что видна всегда иконка того
7568
9085
  * состояния, куда переключится контрол.
7569
9086
  *
9087
+ * Вход `label` рисует подпись после кнопки — элементом `<label>`, связанным с
9088
+ * кнопкой: нажатие на подпись переключает, и она же называет переключатель
9089
+ * скринридеру через `aria-labelledby`.
9090
+ *
9091
+ * Размер и отключение выводятся модификаторами и на хост: свойства размеров
9092
+ * объявлены на хосте, чтобы правило приложения на теге их переопределяло, а
9093
+ * прозрачность отключения гасит переключатель вместе с подписью.
9094
+ *
7570
9095
  * ViewEncapsulation.None — стили таргетируют имя элемента и BEM-класс блока.
7571
9096
  */
7572
9097
  declare class RtToggleSwitchComponent implements ControlValueAccessor {
7573
9098
  #private;
7574
9099
  protected readonly isOn: WritableSignal<boolean>;
7575
9100
  protected readonly isDisabled: Signal<boolean>;
9101
+ /** Id кнопки: заданный входом или свой — на него указывает подпись. */
9102
+ protected readonly controlId: Signal<string>;
9103
+ protected readonly labelId: string;
7576
9104
  /**
7577
9105
  * BEM-модификаторы для `[rtMod]`. Собираем в .ts, потому что
7578
9106
  * Angular template-parser не поддерживает computed property keys
@@ -7581,6 +9109,8 @@ declare class RtToggleSwitchComponent implements ControlValueAccessor {
7581
9109
  protected readonly bemMods: Signal<Record<string, boolean>>;
7582
9110
  readonly inputId: InputSignal<string | null>;
7583
9111
  readonly ariaLabel: InputSignal<string | null>;
9112
+ /** Подпись после переключателя. Пусто — без подписи, как раньше. */
9113
+ readonly label: InputSignal<string | null>;
7584
9114
  /** Размерный тир трека. */
7585
9115
  readonly size: InputSignal<IRtToggleSwitch.Size>;
7586
9116
  /** Иконка выключенного состояния — в начальной половине трека. Пусто — без иконки. */
@@ -7594,7 +9124,7 @@ declare class RtToggleSwitchComponent implements ControlValueAccessor {
7594
9124
  setDisabledState(disabled: boolean): void;
7595
9125
  protected toggle(): void;
7596
9126
  static ɵfac: i0.ɵɵFactoryDeclaration<RtToggleSwitchComponent, never>;
7597
- static ɵcmp: i0.ɵɵComponentDeclaration<RtToggleSwitchComponent, "rt-toggle-switch", never, { "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "iconOff": { "alias": "iconOff"; "required": false; "isSignal": true; }; "iconOn": { "alias": "iconOn"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
9127
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtToggleSwitchComponent, "rt-toggle-switch", never, { "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "iconOff": { "alias": "iconOff"; "required": false; "isSignal": true; }; "iconOn": { "alias": "iconOn"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof RtRadiusDirective; inputs: { "radius": "radius"; }; outputs: {}; }]>;
7598
9128
  }
7599
9129
 
7600
9130
  /**
@@ -8059,11 +9589,11 @@ declare function provideRtKit(config: IRtKitConfig.Config): EnvironmentProviders
8059
9589
  /** The name of a styling property the kit declares itself. */
8060
9590
  type TRtDesignTokenName = '--rt-amber-400' | '--rt-border-width-medium' | '--rt-border-width-thick' | '--rt-border-width-thin' | '--rt-bp-lg' | '--rt-bp-md' | '--rt-bp-sm' | '--rt-bp-xl' | '--rt-brand-100' | '--rt-brand-200' | '--rt-brand-300' | '--rt-brand-400' | '--rt-brand-50' | '--rt-brand-500' | '--rt-brand-600' | '--rt-brand-700' | '--rt-brand-800' | '--rt-brand-900' | '--rt-brand-950' | '--rt-btn-tint-active' | '--rt-btn-tint-hover' | '--rt-charcoal-700' | '--rt-charcoal-800' | '--rt-charcoal-900' | '--rt-charcoal-950' | '--rt-charcoal-border' | '--rt-charcoal-border-strong' | '--rt-chat-bubble-date' | '--rt-chat-bubble-in-author' | '--rt-chat-bubble-in-bg' | '--rt-chat-bubble-own-author' | '--rt-chat-bubble-own-bg' | '--rt-chat-status-read' | '--rt-color-action-danger' | '--rt-color-action-danger-active' | '--rt-color-action-danger-hover' | '--rt-color-action-danger-on-surface' | '--rt-color-action-disabled' | '--rt-color-action-info' | '--rt-color-action-info-active' | '--rt-color-action-info-hover' | '--rt-color-action-info-on-surface' | '--rt-color-action-on-danger' | '--rt-color-action-on-disabled' | '--rt-color-action-on-info' | '--rt-color-action-on-primary' | '--rt-color-action-on-secondary' | '--rt-color-action-on-success' | '--rt-color-action-on-warning' | '--rt-color-action-primary' | '--rt-color-action-primary-active' | '--rt-color-action-primary-hover' | '--rt-color-action-primary-on-surface' | '--rt-color-action-primary-soft' | '--rt-color-action-primary-subtle' | '--rt-color-action-secondary' | '--rt-color-action-secondary-active' | '--rt-color-action-secondary-hover' | '--rt-color-action-secondary-on-surface' | '--rt-color-action-success' | '--rt-color-action-success-active' | '--rt-color-action-success-hover' | '--rt-color-action-success-on-surface' | '--rt-color-action-warning' | '--rt-color-action-warning-active' | '--rt-color-action-warning-hover' | '--rt-color-action-warning-on-surface' | '--rt-color-bg-hover' | '--rt-color-bg-inverse' | '--rt-color-bg-nav' | '--rt-color-bg-overlay' | '--rt-color-bg-page' | '--rt-color-bg-page-auth' | '--rt-color-bg-subtle' | '--rt-color-bg-surface' | '--rt-color-bg-surface-auth-card' | '--rt-color-bg-surface-subtle' | '--rt-color-bg-surface-subtle-2' | '--rt-color-border-default' | '--rt-color-border-focus' | '--rt-color-border-strong' | '--rt-color-border-subtle' | '--rt-color-field-fill-underline' | '--rt-color-skeleton-base' | '--rt-color-skeleton-wave' | '--rt-color-state-danger' | '--rt-color-state-danger-bg' | '--rt-color-state-error-text' | '--rt-color-state-info' | '--rt-color-state-info-bg' | '--rt-color-state-success' | '--rt-color-state-success-bg' | '--rt-color-state-success-text' | '--rt-color-state-warning' | '--rt-color-state-warning-bg' | '--rt-color-state-warning-text' | '--rt-color-stepper-current' | '--rt-color-stepper-current-subtle' | '--rt-color-stepper-progress' | '--rt-color-stepper-track' | '--rt-color-table-head-bg' | '--rt-color-text-disabled' | '--rt-color-text-inverse' | '--rt-color-text-link' | '--rt-color-text-link-hover' | '--rt-color-text-muted' | '--rt-color-text-primary' | '--rt-control-height-2xl' | '--rt-control-height-lg' | '--rt-control-height-md' | '--rt-control-height-sm' | '--rt-control-height-xl' | '--rt-control-max-width' | '--rt-control-panel-max-height' | '--rt-control-textarea-min-height-lg' | '--rt-control-textarea-min-height-md' | '--rt-control-textarea-min-height-sm' | '--rt-counter-gap' | '--rt-counter-row-color-border' | '--rt-counter-row-gap' | '--rt-counter-row-hint-color' | '--rt-counter-row-hint-font-size' | '--rt-counter-row-label-color' | '--rt-counter-row-label-font-size' | '--rt-counter-row-padding-y' | '--rt-counter-value-color' | '--rt-counter-value-font-size' | '--rt-counter-value-min-width' | '--rt-danger-50' | '--rt-danger-500' | '--rt-danger-600' | '--rt-danger-700' | '--rt-duration-base' | '--rt-duration-fast' | '--rt-duration-slow' | '--rt-duration-slower' | '--rt-field-error-color' | '--rt-field-error-font-size' | '--rt-field-gap' | '--rt-field-hint-color' | '--rt-field-hint-font-size' | '--rt-field-label-color' | '--rt-field-label-font-size' | '--rt-field-label-font-weight' | '--rt-field-label-help-gap' | '--rt-field-required-color' | '--rt-field-value-color' | '--rt-field-value-empty-color' | '--rt-field-value-font-size' | '--rt-focus-ring-color' | '--rt-focus-ring-color-danger' | '--rt-focus-ring-offset' | '--rt-focus-ring-width' | '--rt-font-family-mono' | '--rt-font-family-sans' | '--rt-font-weight-bold' | '--rt-font-weight-medium' | '--rt-font-weight-regular' | '--rt-font-weight-semibold' | '--rt-gray-350' | '--rt-icon-button-color-bg-hover' | '--rt-icon-button-disabled-color' | '--rt-icon-button-disabled-fill' | '--rt-icon-button-disabled-opacity' | '--rt-info-50' | '--rt-info-500' | '--rt-info-600' | '--rt-info-700' | '--rt-input-border-width' | '--rt-input-color-bg' | '--rt-input-color-bg-disabled' | '--rt-input-color-bg-hover' | '--rt-input-color-border' | '--rt-input-color-border-error' | '--rt-input-color-border-focus' | '--rt-input-color-text' | '--rt-input-color-text-placeholder' | '--rt-input-disabled-opacity' | '--rt-input-focus-outline-offset' | '--rt-input-focus-shadow' | '--rt-input-focus-shadow-error' | '--rt-input-font-size' | '--rt-input-gap' | '--rt-input-height' | '--rt-input-height-lg' | '--rt-input-height-md' | '--rt-input-height-sm' | '--rt-input-icon-color' | '--rt-input-icon-size' | '--rt-input-line-height' | '--rt-input-max-width' | '--rt-input-padding-x' | '--rt-input-padding-y' | '--rt-input-panel-max-height' | '--rt-input-radius' | '--rt-input-transition' | '--rt-leading-none' | '--rt-leading-normal' | '--rt-leading-relaxed' | '--rt-leading-snug' | '--rt-leading-tight' | '--rt-letter-spacing-wide' | '--rt-list-action-color' | '--rt-list-action-color-bg-hover' | '--rt-list-action-color-hover' | '--rt-list-action-divider-height' | '--rt-list-action-gap' | '--rt-list-action-icon-size' | '--rt-list-action-radius' | '--rt-list-action-shadow' | '--rt-list-action-shadow-hover' | '--rt-list-content-padding-bottom' | '--rt-list-copy-button-bg' | '--rt-list-copy-button-bg-hover' | '--rt-list-copy-button-color' | '--rt-list-copy-button-radius' | '--rt-list-copy-button-size' | '--rt-list-empty-icon-size' | '--rt-list-empty-icon-wrap-bg' | '--rt-list-empty-icon-wrap-size' | '--rt-list-empty-title-size' | '--rt-list-empty-title-weight' | '--rt-list-filter-line-height' | '--rt-list-placeholder-grow' | '--rt-list-placeholder-min-height' | '--rt-list-search-color-bg' | '--rt-list-search-color-border' | '--rt-list-search-color-placeholder' | '--rt-list-search-font-size' | '--rt-list-search-gap' | '--rt-list-search-height' | '--rt-list-search-icon-color' | '--rt-list-search-icon-size' | '--rt-list-search-padding-x' | '--rt-list-search-radius' | '--rt-list-search-width' | '--rt-list-selector-label-color' | '--rt-list-settings-icon-color' | '--rt-list-settings-item-bg' | '--rt-list-settings-item-radius' | '--rt-list-table-button-radius' | '--rt-list-table-button-size' | '--rt-list-table-head-divider-color' | '--rt-list-table-icon-color' | '--rt-list-table-icon-size' | '--rt-list-toolbar-gap' | '--rt-list-toolbar-padding-bottom' | '--rt-list-toolbar-padding-top' | '--rt-mat-blue-100' | '--rt-mat-blue-20' | '--rt-mat-blue-40' | '--rt-mat-blue-60' | '--rt-mat-blue-80' | '--rt-mat-blue-active' | '--rt-mat-blue-hover' | '--rt-mat-dark-10' | '--rt-mat-dark-20' | '--rt-mat-dark-30' | '--rt-mat-dark-40' | '--rt-mat-green-10' | '--rt-mat-green-100' | '--rt-mat-green-120' | '--rt-mat-green-20' | '--rt-mat-green-40' | '--rt-mat-green-60' | '--rt-mat-green-80' | '--rt-mat-green-active' | '--rt-mat-green-hover' | '--rt-mat-menu-min-width' | '--rt-mat-menu-sm-icon-size' | '--rt-mat-menu-sm-item-height' | '--rt-mat-navy-100' | '--rt-mat-neutral-0' | '--rt-mat-neutral-10' | '--rt-mat-neutral-100' | '--rt-mat-neutral-15' | '--rt-mat-neutral-20' | '--rt-mat-neutral-25' | '--rt-mat-neutral-30' | '--rt-mat-neutral-35' | '--rt-mat-neutral-40' | '--rt-mat-neutral-5' | '--rt-mat-neutral-60' | '--rt-mat-neutral-80' | '--rt-mat-neutral-active' | '--rt-mat-neutral-hover' | '--rt-mat-orange-10' | '--rt-mat-orange-100' | '--rt-mat-orange-20' | '--rt-mat-orange-40' | '--rt-mat-orange-5' | '--rt-mat-orange-60' | '--rt-mat-orange-70' | '--rt-mat-orange-80' | '--rt-mat-orange-active' | '--rt-mat-orange-hover' | '--rt-mat-overlay-black-32' | '--rt-mat-overlay-black-4' | '--rt-mat-overlay-blue-24' | '--rt-mat-overlay-blue-8' | '--rt-mat-radius-4' | '--rt-mat-radius-5' | '--rt-mat-red-10' | '--rt-mat-red-100' | '--rt-mat-red-20' | '--rt-mat-red-40' | '--rt-mat-red-60' | '--rt-mat-red-80' | '--rt-mat-red-active' | '--rt-mat-red-hover' | '--rt-mat-shadow-fab' | '--rt-mat-shadow-fab-hover' | '--rt-mat-shadow-level-2' | '--rt-nav-caret-size' | '--rt-nav-color-disabled' | '--rt-nav-color-focus' | '--rt-nav-header-color-bg' | '--rt-nav-header-padding' | '--rt-nav-item-color' | '--rt-nav-item-color-bg' | '--rt-nav-item-color-bg-active' | '--rt-nav-item-color-border' | '--rt-nav-item-color-caret' | '--rt-nav-item-color-hover' | '--rt-nav-item-color-pressed' | '--rt-nav-item-content-gap' | '--rt-nav-item-font-size' | '--rt-nav-item-font-weight' | '--rt-nav-item-gap' | '--rt-nav-item-height' | '--rt-nav-item-line-height' | '--rt-nav-item-padding' | '--rt-nav-marker-color' | '--rt-nav-marker-size' | '--rt-nav-panel-color-bg' | '--rt-nav-panel-color-border' | '--rt-nav-panel-column-gap' | '--rt-nav-panel-column-width' | '--rt-nav-panel-columns' | '--rt-nav-panel-group-color' | '--rt-nav-panel-group-content-gap' | '--rt-nav-panel-group-font-size' | '--rt-nav-panel-group-font-weight' | '--rt-nav-panel-group-gap' | '--rt-nav-panel-item-color' | '--rt-nav-panel-item-color-active' | '--rt-nav-panel-item-color-bg-active' | '--rt-nav-panel-item-color-bg-hover' | '--rt-nav-panel-item-content-gap' | '--rt-nav-panel-item-font-size' | '--rt-nav-panel-item-font-weight' | '--rt-nav-panel-item-gap' | '--rt-nav-panel-item-height' | '--rt-nav-panel-item-padding' | '--rt-nav-panel-padding' | '--rt-nav-panel-padding-y' | '--rt-nav-panel-shadow' | '--rt-navy-600' | '--rt-navy-900' | '--rt-neutral-0' | '--rt-neutral-100' | '--rt-neutral-200' | '--rt-neutral-300' | '--rt-neutral-400' | '--rt-neutral-50' | '--rt-neutral-500' | '--rt-neutral-600' | '--rt-neutral-700' | '--rt-neutral-800' | '--rt-neutral-900' | '--rt-neutral-950' | '--rt-opacity-disabled' | '--rt-overlay-amber-16' | '--rt-overlay-black-4' | '--rt-overlay-black-50' | '--rt-overlay-black-8' | '--rt-overlay-brand-24' | '--rt-overlay-brand-8' | '--rt-overlay-danger-16' | '--rt-overlay-menu-bg' | '--rt-overlay-menu-current-bg' | '--rt-overlay-menu-danger-color' | '--rt-overlay-menu-danger-label-color' | '--rt-overlay-menu-item-icon-size' | '--rt-overlay-menu-item-min-height' | '--rt-overlay-menu-item-padding-x' | '--rt-overlay-menu-item-padding-y' | '--rt-overlay-menu-item-weight' | '--rt-overlay-menu-min-width' | '--rt-overlay-menu-padding-y' | '--rt-overlay-menu-radius' | '--rt-overlay-menu-shadow' | '--rt-overlay-menu-sm-item-icon-size' | '--rt-overlay-menu-sm-item-min-height' | '--rt-overlay-navy-70' | '--rt-overlay-select-check-display' | '--rt-overlay-select-option-font-size' | '--rt-overlay-select-option-min-height' | '--rt-overlay-select-panel-border-width' | '--rt-overlay-select-radius' | '--rt-overlay-select-selected-bg' | '--rt-overlay-select-selected-weight' | '--rt-overlay-select-shadow' | '--rt-overlay-tooltip-radius' | '--rt-overlay-tooltip-shadow' | '--rt-overlay-white-25' | '--rt-overlay-white-4' | '--rt-overlay-white-40' | '--rt-overlay-white-50' | '--rt-overlay-white-8' | '--rt-pagination-arrow-color' | '--rt-pagination-arrow-radius' | '--rt-pagination-arrow-shadow' | '--rt-pagination-arrow-size' | '--rt-pagination-box-color-border' | '--rt-pagination-box-color-text' | '--rt-pagination-box-current-color-bg' | '--rt-pagination-box-current-color-border' | '--rt-pagination-box-current-color-text' | '--rt-pagination-box-current-font-weight' | '--rt-pagination-box-radius' | '--rt-pagination-box-size' | '--rt-pagination-field-color-bg' | '--rt-pagination-field-color-border' | '--rt-pagination-field-color-text' | '--rt-pagination-field-height' | '--rt-pagination-field-padding-x' | '--rt-pagination-field-radius' | '--rt-pagination-gap' | '--rt-pagination-justify' | '--rt-pagination-nav-gap' | '--rt-pagination-padding-x' | '--rt-pagination-padding-y' | '--rt-pagination-per-page-gap' | '--rt-pagination-per-page-label-white-space' | '--rt-pagination-range-display' | '--rt-profile-avatar-font-size' | '--rt-profile-avatar-size' | '--rt-profile-item-content-gap' | '--rt-profile-item-font-size' | '--rt-profile-item-font-weight' | '--rt-profile-item-padding-y' | '--rt-profile-item-radius' | '--rt-profile-menu-min-width' | '--rt-profile-menu-padding' | '--rt-profile-menu-shadow' | '--rt-profile-row-inset' | '--rt-profile-theme-icon-padding' | '--rt-radius-2xl' | '--rt-radius-control' | '--rt-radius-full' | '--rt-radius-lg' | '--rt-radius-md' | '--rt-radius-ms' | '--rt-radius-none' | '--rt-radius-sm' | '--rt-radius-xl' | '--rt-radius-xs' | '--rt-shadow-card' | '--rt-shadow-card-soft' | '--rt-shadow-dialog' | '--rt-shadow-focus-ring' | '--rt-shadow-focus-ring-danger' | '--rt-shadow-lg' | '--rt-shadow-md' | '--rt-shadow-nav-panel' | '--rt-shadow-none' | '--rt-shadow-profile-menu' | '--rt-shadow-sm' | '--rt-shadow-status-dot' | '--rt-shadow-step-indicator' | '--rt-shadow-xl' | '--rt-size-1' | '--rt-size-10' | '--rt-size-100' | '--rt-size-12' | '--rt-size-16' | '--rt-size-2' | '--rt-size-20' | '--rt-size-24' | '--rt-size-3' | '--rt-size-30' | '--rt-size-4' | '--rt-size-40' | '--rt-size-5' | '--rt-size-6' | '--rt-size-60' | '--rt-size-64' | '--rt-size-8' | '--rt-slate-300' | '--rt-space-0' | '--rt-space-0-5' | '--rt-space-1' | '--rt-space-10' | '--rt-space-12' | '--rt-space-16' | '--rt-space-2' | '--rt-space-20' | '--rt-space-24' | '--rt-space-2xl' | '--rt-space-2xs' | '--rt-space-3xl' | '--rt-space-4' | '--rt-space-5' | '--rt-space-6' | '--rt-space-8' | '--rt-space-lg' | '--rt-space-md' | '--rt-space-sm' | '--rt-space-xl' | '--rt-space-xs' | '--rt-success-100' | '--rt-success-400' | '--rt-success-50' | '--rt-success-500' | '--rt-success-600' | '--rt-success-700' | '--rt-text-2xl' | '--rt-text-2xs' | '--rt-text-3xl' | '--rt-text-3xs' | '--rt-text-4xl' | '--rt-text-base' | '--rt-text-lg' | '--rt-text-md' | '--rt-text-sm' | '--rt-text-xl' | '--rt-text-xs' | '--rt-textarea-line-height' | '--rt-textarea-min-height' | '--rt-textarea-min-height-lg' | '--rt-textarea-min-height-md' | '--rt-textarea-min-height-sm' | '--rt-textarea-padding-y' | '--rt-toggle-color-border' | '--rt-toggle-color-icon' | '--rt-toggle-color-thumb' | '--rt-toggle-color-track' | '--rt-toggle-color-track-on' | '--rt-toggle-shadow-border' | '--rt-toggle-shadow-thumb' | '--rt-warning-50' | '--rt-warning-500' | '--rt-warning-600' | '--rt-warning-700' | '--rt-yellow-400' | '--rt-z-base' | '--rt-z-dropdown' | '--rt-z-fixed' | '--rt-z-modal' | '--rt-z-modal-backdrop' | '--rt-z-popover' | '--rt-z-sticky' | '--rt-z-tooltip';
8061
9591
  /** The name of a consumer's handle — a property the kit deliberately does not declare. */
8062
- type TRtConsumerHandleName = '--rt-aside-bg' | '--rt-aside-width' | '--rt-data-table-scrollbar-color' | '--rt-data-table-scrollbar-horizontal-height' | '--rt-data-table-scrollbar-vertical-width' | '--rt-data-table-scrollbar-width' | '--rt-dialog-width' | '--rt-header-content-max-width' | '--rt-header-height' | '--rt-logo-tagline' | '--rt-logo-tagline-dark' | '--rt-logo-wordmark' | '--rt-logo-wordmark-dark' | '--rt-page-header-bg' | '--rt-table-actions-bg' | '--rt-workspace-aside-size' | '--rt-workspace-list-size';
9592
+ type TRtConsumerHandleName = '--rt-action-bar-menu-bg' | '--rt-action-bar-menu-color' | '--rt-action-bar-menu-radius' | '--rt-action-bar-menu-shadow' | '--rt-aside-bg' | '--rt-aside-content-inset' | '--rt-aside-error-margin-block' | '--rt-aside-footer-gap' | '--rt-aside-footer-inset' | '--rt-aside-footer-justify' | '--rt-aside-footer-margin' | '--rt-aside-header-inset' | '--rt-aside-header-title-leading' | '--rt-aside-width' | '--rt-data-table-scrollbar-color' | '--rt-data-table-scrollbar-horizontal-height' | '--rt-data-table-scrollbar-vertical-width' | '--rt-data-table-scrollbar-width' | '--rt-dialog-bg' | '--rt-dialog-border' | '--rt-dialog-content-max-height' | '--rt-dialog-content-padding' | '--rt-dialog-footer-border' | '--rt-dialog-footer-padding' | '--rt-dialog-header-border' | '--rt-dialog-header-padding' | '--rt-dialog-title-font-size' | '--rt-dialog-title-transform' | '--rt-dialog-title-weight' | '--rt-dialog-width' | '--rt-header-content-max-width' | '--rt-header-height' | '--rt-icon-button-bg' | '--rt-icon-button-bg-hover' | '--rt-icon-button-size' | '--rt-icon-glyph-font' | '--rt-logo-tagline' | '--rt-logo-tagline-dark' | '--rt-logo-wordmark' | '--rt-logo-wordmark-dark' | '--rt-page-header-bg' | '--rt-table-actions-bg' | '--rt-tag-color-bg' | '--rt-tag-color-border' | '--rt-tag-color-text' | '--rt-tag-letter-spacing' | '--rt-tag-padding-block' | '--rt-tag-padding-inline' | '--rt-toast-action-color' | '--rt-toast-bg' | '--rt-toast-border-color' | '--rt-toast-close-color' | '--rt-toast-color' | '--rt-toast-filled-danger-bg' | '--rt-toast-filled-danger-border-color' | '--rt-toast-filled-danger-color' | '--rt-toast-filled-info-bg' | '--rt-toast-filled-info-border-color' | '--rt-toast-filled-info-color' | '--rt-toast-filled-success-bg' | '--rt-toast-filled-success-border-color' | '--rt-toast-filled-success-color' | '--rt-toast-filled-warning-bg' | '--rt-toast-filled-warning-border-color' | '--rt-toast-filled-warning-color' | '--rt-toast-icon-color' | '--rt-toast-progress-color' | '--rt-toast-progress-height' | '--rt-workspace-aside-size' | '--rt-workspace-list-size';
8063
9593
  /** All the styling properties declared by the kit. */
8064
9594
  declare const RT_DESIGN_TOKEN_NAMES: readonly TRtDesignTokenName[];
8065
9595
  /** All the consumer's handles: the value comes from the application, until then the fallback works. */
8066
9596
  declare const RT_CONSUMER_HANDLE_NAMES: readonly TRtConsumerHandleName[];
8067
9597
 
8068
- export { BreakpointsService, CATEGORY_ORDER, DATA_LIST_PAGE_SIZES, DATA_TABLE_FILTER_MENU_OPERATORS, DATA_TABLE_FILTER_OPERATOR_GLYPHS, ERtCalendarDayState, ERtDataTableCellColor, ERtDataTableColumnType, ERtDataTableFilterType, ERtDateRangePreset, ERtMarkdownBlock, ERtMarkdownInline, ERtStorageKeys, IButton, ICON_CATEGORY_RULES, INotification, IRtAccordion, IRtActionBar, IRtAsideHeader, IRtAutocomplete, IRtBarList, IRtCalendar, IRtConfirmPopover, IRtDataTable, IRtDatePicker, IRtDateRange, IRtDynamicList, IRtField, IRtFileCard, IRtFileDrop, IRtFileInput, IRtFilterControl, IRtIcon, IRtIconButton, IRtInput, IRtKitConfig, IRtLogo, IRtMenu, IRtNightGrid, IRtPageHeader, IRtPagination, IRtPhotoViewer, IRtPopover, IRtSectionNav, IRtSelect, IRtSpinner, IRtSplitButton, IRtStatTile, IRtStepper, IRtTable, IRtTabs, IRtTag, IRtThemeToggle, IRtThreadList, IRtTimeline, IRtToaster, IRtToggleButtonGroup, IRtToggleSwitch, IRtTooltip, IRtWelcomeDialog, IRtWorkspace, IRtWorkspaceDetails, ITheme, MessageBus, NotificationBus, RT_ACTION_BAR_LEAVE_MS, RT_ASIDE_DATA, RT_CONSUMER_HANDLE_NAMES, RT_COUNTER_DECREASE_KEY, RT_COUNTER_INCREASE_KEY, RT_DATA_TABLE_PRESET_FROM_HOST, RT_DATA_TABLE_ROW_HOST, RT_DATA_TABLE_STOP_ROW_CLICK_ATTRIBUTE, RT_DESIGN_TOKEN_NAMES, RT_DIALOG_DATA, RT_FIELD_DEFAULT_ERROR_KEYS, RT_FIELD_EMPTY_VALUE, RT_ICONS_BASE_URL, RT_ICONS_MATERIAL_BASE_URL, RT_ICON_MATERIAL_FILL_SYMBOL_ID_PREFIX, RT_ICON_MATERIAL_PRESET_SELECTOR, RT_ICON_MATERIAL_SYMBOL_ID_PREFIX, RT_ICON_SPRITE_ID, RT_ICON_SYMBOL_ID_PREFIX, RT_KIT_CONFIG, RT_KIT_LABELS, RT_KIT_LABELS_EN, RT_KIT_LOCALE, RT_KIT_TRANSLATOR, RT_MENU_SELECT_EVENT, RT_PRESET_MATERIAL_CLASS, RT_RADIUS_DEFAULT, RT_RADIUS_STEPS, RT_TABLE_ROW_ACTIONS_COLUMN, RT_TOASTER_GAP_PX, RtAccordionComponent, RtActionBarComponent, RtActionBarHolderComponent, RtActionBarService, RtAsideComponent, RtAsideFooterComponent, RtAsideHeaderComponent, RtAsideRef, RtAsideSectionComponent, RtAsideService, RtAutocompleteComponent, RtBarListComponent, RtBottomSheetComponent, RtButtonDirective, RtCalendarComponent, RtCardComponent, RtCheckboxComponent, RtCollapsibleTextComponent, RtConfirmDirective, RtConfirmPopoverComponent, RtContainerComponent, RtContainerContentDirective, RtContainerContentPanelDirective, RtContainerHeaderDirective, RtContainerLeftSidenavDirective, RtContainerLeftSidenavPanelDirective, RtContainerRightSidenavDirective, RtContainerRightSidenavPanelDirective, RtContainerStateService, RtContainerToolbarCenterDirective, RtContainerToolbarLeftDirective, RtContainerToolbarRightDirective, RtCopyCellComponent, RtCounterComponent, RtCounterRowComponent, RtDataListAdditionalRowActionsDirective, RtDataListComponent, RtDataListCustomCellsDirective, RtDataListRowActionsDirective, RtDataListSelectorsDirective, RtDataListSettingsAsideComponent, RtDataListToolbarActionsDirective, RtDataListToolbarComponent, RtDataListToolbarSelectorsDirective, RtDataTableAdditionalRowActionsDirective, RtDataTableCellComponent, RtDataTableComponent, RtDataTableConfigService, RtDataTableCustomCellsDirective, RtDataTableFilterCellComponent, RtDataTableHeaderCellComponent, RtDataTableIconDirective, RtDataTableRowActionsDirective, RtDataTableRowClickDirective, RtDataTableSelectorsDirective, RtDataTableStopRowClickDirective, RtDatePickerComponent, RtDateRangeComponent, RtDayStampPipe, RtDeltaViewComponent, RtDetailListComponent, RtDetailRowComponent, RtDialogComponent, RtDialogFooterComponent, RtDialogHeaderComponent, RtDialogRef, RtDialogService, RtDownloadLinkComponent, RtDynamicListComponent, RtDynamicListToolbarActionsDirective, RtDynamicListToolbarSelectorsDirective, RtEmptyStateComponent, RtFieldComponent, RtFieldHintDirective, RtFileCardComponent, RtFileDropComponent, RtFileInputComponent, RtFileListComponent, RtFilterControlComponent, RtFormControlBase, RtHeaderComponent, RtIconButtonComponent, RtIconComponent, RtIconRegistry, RtInfiniteScrollDirective, RtInfoItemComponent, RtInputComponent, RtInputNumberComponent, RtKitLabelPipe, RtLiveBadgeComponent, RtLogoComponent, RtMarkdownTextComponent, RtMenuComponent, RtMenuItemComponent, RtMessageComponent, RtMoneyListComponent, RtMoneyRowComponent, RtMultiselectComponent, RtNightGridComponent, RtNoteComponent, RtNotificationsBellComponent, RtPageHeaderComponent, RtPaginationComponent, RtPhotoViewerComponent, RtPopoverDirective, RtRadioButtonComponent, RtRadiusDirective, RtRippleDirective, RtRouteAsideComponent, RtRowHasActionsPipe, RtScrollAreaComponent, RtScrollAreaContentDirective, RtScrollAreaFooterDirective, RtScrollAreaHeaderDirective, RtSectionNavComponent, RtSelectComponent, RtSelectTriggerDirective, RtSkeletonComponent, RtSkeletonWrapperComponent, RtSpinnerComponent, RtSplitButtonComponent, RtStatTileComponent, RtStepperComponent, RtTabDirective, RtTableCardDirective, RtTableComponent, RtTableFilterHeaderComponent, RtTableRowActionsDirective, RtTableRowDirective, RtTableSettingsAsideComponent, RtTableSettingsPanelComponent, RtTableSettingsRegistry, RtTableSortHeaderComponent, RtTabsComponent, RtTabsControlDirective, RtTagComponent, RtTextareaComponent, RtThemeScopeDirective, RtThemeToggleComponent, RtThreadListComponent, RtThreadListFiltersDirective, RtThreadListRowDirective, RtThreadListSearchDirective, RtTimelineComponent, RtToastComponent, RtToasterComponent, RtToggleButtonGroupComponent, RtToggleSwitchComponent, RtToolbarCenterDirective, RtToolbarComponent, RtToolbarLeftDirective, RtToolbarRightDirective, RtTooltipComponent, RtTooltipDirective, RtTruncateMiddlePipe, RtWelcomeDialogComponent, RtWorkspaceAsideDirective, RtWorkspaceCenterDirective, RtWorkspaceComponent, RtWorkspaceDesktopOnlyDirective, RtWorkspaceDetailsComponent, RtWorkspaceListDirective, SEARCH_DEBOUNCE_MS, ThemeService, ariaSortOf, breakNode, categoryOf, coerceQuillDeltaOutput, comparePropNames, dataListColumnsFromItems, dataListExcludedAfterEntity, dataListExcludedAfterPageMarked, dataListExcludedAfterPageUnmarked, dataListMoveItem, dataListPageAfterSizeChange, dataListPageCount, dataListPageSizes, dataListSelectedAfterPage, dataListSettingItems, dataListSettingsChanged, dataListToggleHidden, dataTableAllOnPage, dataTableAnyOnPage, dataTableAriaSort, dataTableCellText, dataTableCellValue, dataTableColumnFilter, dataTableCopyButtonSide, dataTableDayToIso, dataTableDefaultOperator, dataTableFiltersWithOperator, dataTableFiltersWithValue, dataTableIconName, dataTableIsoToDay, dataTableKeysOf, dataTableNextSortOrder, dataTablePresetEntities, dataTableSortActive, dataTableWithEntity, dataTableWithPageEntities, dataTableWithoutPageEntities, defaultColumnItems, deriveFileTitle, displayedColumnKeys, fileNameFromUrl, filterCellsOf, filterOf, filterValueOf, filtersWithOperator, filtersWithValue, formatFileSize, getFileTypeIcon, iconsName, indexFromParam, indexFromScroll, isColumnSortable, nextPhotoIndex, nextSort, normalizeQuillDelta, paramFromIndex, parseInline, parseMarkdown, provideRtIcons, provideRtKit, provideRtKitLabels, resolveColumns, rowHasAvailableActions, rtAsideUnsavedGuard, rtKitDefault, rtKitLabel, searchDebounce, shouldRenderPhoto, sortDirectionOf, startOperatorOf, withoutLockedHidden };
8069
- export type { IMessageBusEvent, IQuillDelta, IQuillDeltaAttributes, IQuillDeltaOp, IRtAsideConfig, IRtDataTableIconContext, IRtDataTableRowContext, IRtDataTableRowHost, IRtDialogConfig, IRtMarkdownBlockNode, IRtMarkdownInlineNode, IRtMarkdownListItem, IRtPicture, IRtPictureSource, IRtTableCardContext, IRtTableRowActionsContext, IRtTableSettingsRegistration, TIconCategory, TRtAsideContentLayout, TRtAsidePosition, TRtAsideSize, TRtConsumerHandleName, TRtDataTableAriaSort, TRtDataTableFilterValue, TRtDataTableFilters, TRtDesignTokenName, TRtDialogSize, TRtKitLabelKey, TRtKitLabelMap, TRtKitLabelParams, TRtKitTranslator, TRtRadius, TRtSkeletonShape, TRtSkeletonSize, TRtTableAriaSort, TRtTableFilterInput, TRtTableFilterValue, TRtTextareaResize };
9598
+ export { BreakpointsService, CATEGORY_ORDER, DATA_LIST_PAGE_SIZES, DATA_TABLE_FILTER_MENU_OPERATORS, DATA_TABLE_FILTER_OPERATOR_GLYPHS, ERtCalendarDayState, ERtDataTableCellColor, ERtDataTableColumnType, ERtDataTableFilterType, ERtDateRangePreset, ERtMarkdownBlock, ERtMarkdownInline, ERtStorageKeys, IButton, ICON_CATEGORY_RULES, INotification, IRtAccordion, IRtActionBar, IRtAsideHeader, IRtAutocomplete, IRtBarList, IRtCalendar, IRtConfirmPopover, IRtDataTable, IRtDatePicker, IRtDateRange, IRtDynamicList, IRtDynamicSelector, IRtExpansionPanel, IRtField, IRtFileCard, IRtFileDrop, IRtFileInput, IRtFilterControl, IRtIcon, IRtIconButton, IRtImageCropper, IRtImageUpload, IRtInput, IRtKitConfig, IRtLogo, IRtMenu, IRtNightGrid, IRtPageHeader, IRtPagination, IRtPhotoViewer, IRtPopover, IRtSectionNav, IRtSelect, IRtSideMenu, IRtSpinner, IRtSplitButton, IRtStatTile, IRtStepper, IRtTable, IRtTabs, IRtTag, IRtThemeToggle, IRtThreadList, IRtTimeline, IRtToaster, IRtToggleButtonGroup, IRtToggleSwitch, IRtTooltip, IRtWelcomeDialog, IRtWorkspace, IRtWorkspaceDetails, ITheme, MessageBus, NotificationBus, RT_ACTION_BAR_LEAVE_MS, RT_ASIDE_DATA, RT_CONSUMER_HANDLE_NAMES, RT_COUNTER_DECREASE_KEY, RT_COUNTER_INCREASE_KEY, RT_DATA_TABLE_PRESET_FROM_HOST, RT_DATA_TABLE_ROW_HOST, RT_DATA_TABLE_STOP_ROW_CLICK_ATTRIBUTE, RT_DESIGN_TOKEN_NAMES, RT_DIALOG_DATA, RT_DYNAMIC_SELECTOR_SEARCH_DEBOUNCE, RT_FIELD_DEFAULT_ERROR_KEYS, RT_FIELD_EMPTY_VALUE, RT_ICONS_BASE_URL, RT_ICONS_MATERIAL_BASE_URL, RT_ICON_GLYPH_STRATEGY, RT_ICON_MATERIAL_FILL_SYMBOL_ID_PREFIX, RT_ICON_MATERIAL_PRESET_SELECTOR, RT_ICON_MATERIAL_SYMBOL_ID_PREFIX, RT_ICON_SPRITE_ID, RT_ICON_SYMBOL_ID_PREFIX, RT_IMAGE_CROPPER_HANDLES, RT_IMAGE_CROPPER_KEY_STEP, RT_IMAGE_CROPPER_KEY_STEP_LARGE, RT_IMAGE_CROPPER_QUALITY, RT_KIT_CONFIG, RT_KIT_LABELS, RT_KIT_LABELS_EN, RT_KIT_LOCALE, RT_KIT_TRANSLATOR, RT_MENU_SELECT_EVENT, RT_PRESET_MATERIAL_CLASS, RT_RADIUS_DEFAULT, RT_RADIUS_STEPS, RT_SIDE_MENU_DEFAULT_ID, RT_SIDE_MENU_SETTINGS_CONFIG, RT_SIDE_MENU_WIDTH_MAX, RT_SIDE_MENU_WIDTH_MIN, RT_SIDE_MENU_WIDTH_STEP, RT_TABLE_ROW_ACTIONS_COLUMN, RT_TOASTER_GAP_PX, RT_TOAST_SEVERITY_ICONS, RtAccordionComponent, RtActionBarComponent, RtActionBarHolderComponent, RtActionBarService, RtAsideComponent, RtAsideErrorBoxComponent, RtAsideFooterComponent, RtAsideHeaderComponent, RtAsideRef, RtAsideSectionComponent, RtAsideService, RtAutocompleteComponent, RtBarListComponent, RtBottomSheetComponent, RtButtonDirective, RtCalendarComponent, RtCardComponent, RtCheckboxComponent, RtCollapsibleTextComponent, RtConfirmDirective, RtConfirmPopoverComponent, RtContainerComponent, RtContainerContentDirective, RtContainerContentPanelDirective, RtContainerHeaderDirective, RtContainerLeftSidenavDirective, RtContainerLeftSidenavPanelDirective, RtContainerRightSidenavDirective, RtContainerRightSidenavPanelDirective, RtContainerStateService, RtContainerToolbarCenterDirective, RtContainerToolbarLeftDirective, RtContainerToolbarRightDirective, RtCopyCellComponent, RtCounterComponent, RtCounterRowComponent, RtDataListAdditionalRowActionsDirective, RtDataListComponent, RtDataListCustomCellsDirective, RtDataListRowActionsDirective, RtDataListSelectorsDirective, RtDataListSettingsAsideComponent, RtDataListToolbarActionsDirective, RtDataListToolbarComponent, RtDataListToolbarSelectorsDirective, RtDataTableAdditionalRowActionsDirective, RtDataTableCellComponent, RtDataTableComponent, RtDataTableConfigService, RtDataTableCustomCellsDirective, RtDataTableFilterCellComponent, RtDataTableHeaderCellComponent, RtDataTableIconDirective, RtDataTableRowActionsDirective, RtDataTableRowClickDirective, RtDataTableSelectorsDirective, RtDataTableStopRowClickDirective, RtDatePickerComponent, RtDateRangeComponent, RtDayStampPipe, RtDeltaViewComponent, RtDetailListComponent, RtDetailRowComponent, RtDialogComponent, RtDialogContentComponent, RtDialogFooterComponent, RtDialogHeaderComponent, RtDialogRef, RtDialogService, RtDownloadLinkComponent, RtDynamicInputComponent, RtDynamicListComponent, RtDynamicListToolbarActionsDirective, RtDynamicListToolbarSelectorsDirective, RtDynamicSelectorComponent, RtDynamicSelectorListComponent, RtDynamicSelectorPopupComponent, RtDynamicSelectorRowControlsDirective, RtDynamicSelectorRowTitleDirective, RtEmptyStateComponent, RtExpansionPanelComponent, RtExpansionPanelContentDirective, RtFieldComponent, RtFieldHintDirective, RtFileCardComponent, RtFileDropComponent, RtFileInputComponent, RtFileListComponent, RtFilterControlComponent, RtFormControlBase, RtHeaderComponent, RtIconButtonComponent, RtIconComponent, RtIconFontService, RtIconRegistry, RtImageCropperComponent, RtImageUploadComponent, RtInfiniteScrollDirective, RtInfoItemComponent, RtInputComponent, RtInputNumberComponent, RtKitLabelPipe, RtLiveBadgeComponent, RtLogoComponent, RtMarkdownTextComponent, RtMenuComponent, RtMenuItemComponent, RtMenuItemIconDirective, RtMessageComponent, RtMoneyListComponent, RtMoneyRowComponent, RtMultiselectComponent, RtNightGridComponent, RtNoteComponent, RtNotificationsBellComponent, RtPageHeaderComponent, RtPaginationComponent, RtPhotoViewerComponent, RtPopoverDirective, RtRadioButtonComponent, RtRadiusDirective, RtRippleDirective, RtRouteAsideComponent, RtRowHasActionsPipe, RtScrollAreaComponent, RtScrollAreaContentDirective, RtScrollAreaFooterDirective, RtScrollAreaHeaderDirective, RtSectionNavComponent, RtSelectComponent, RtSelectTriggerDirective, RtSideMenuComponent, RtSideMenuFooterDirective, RtSideMenuHeaderDirective, RtSideMenuIconDirective, RtSideMenuSettingsService, RtSideMenuSubItemComponent, RtSkeletonComponent, RtSkeletonWrapperComponent, RtSpinnerComponent, RtSplitButtonComponent, RtStatTileComponent, RtStepperComponent, RtTabDirective, RtTableCardDirective, RtTableComponent, RtTableFilterHeaderComponent, RtTableRowActionsDirective, RtTableRowDirective, RtTableSettingsAsideComponent, RtTableSettingsPanelComponent, RtTableSettingsRegistry, RtTableSortHeaderComponent, RtTabsComponent, RtTabsControlDirective, RtTagComponent, RtTextareaComponent, RtThemeScopeDirective, RtThemeToggleComponent, RtThreadListComponent, RtThreadListFiltersDirective, RtThreadListRowDirective, RtThreadListSearchDirective, RtTimelineComponent, RtToastComponent, RtToasterComponent, RtToggleButtonGroupComponent, RtToggleSwitchComponent, RtToolbarCenterDirective, RtToolbarComponent, RtToolbarLeftDirective, RtToolbarRightDirective, RtTooltipComponent, RtTooltipDirective, RtTruncateMiddlePipe, RtWelcomeDialogComponent, RtWorkspaceAsideDirective, RtWorkspaceCenterDirective, RtWorkspaceComponent, RtWorkspaceDesktopOnlyDirective, RtWorkspaceDetailsComponent, RtWorkspaceListDirective, SEARCH_DEBOUNCE_MS, ThemeService, ariaSortOf, breakNode, categoryOf, clampSideMenuWidth, coerceQuillDeltaOutput, comparePropNames, cropArea, dataListColumnsFromItems, dataListExcludedAfterEntity, dataListExcludedAfterPageMarked, dataListExcludedAfterPageUnmarked, dataListMoveItem, dataListPageAfterSizeChange, dataListPageCount, dataListPageSizes, dataListSelectedAfterPage, dataListSettingItems, dataListSettingsChanged, dataListToggleHidden, dataTableAllOnPage, dataTableAnyOnPage, dataTableAriaSort, dataTableCellText, dataTableCellValue, dataTableColumnFilter, dataTableCopyButtonSide, dataTableDayToIso, dataTableDefaultOperator, dataTableFiltersWithOperator, dataTableFiltersWithValue, dataTableIconName, dataTableIsoToDay, dataTableKeysOf, dataTableNextSortOrder, dataTablePresetEntities, dataTableSortActive, dataTableWithEntity, dataTableWithPageEntities, dataTableWithoutPageEntities, defaultColumnItems, deriveFileTitle, displayedColumnKeys, drawnSideMenuWidth, fieldDelta, fileNameFromUrl, filterCellsOf, filterOf, filterSideMenuItems, filterValueOf, filtersWithOperator, filtersWithValue, fitSource, formatFileSize, frameInField, frameRatio, getFileTypeIcon, handleDirection, iconsName, indexFromParam, indexFromScroll, initialFrame, isColumnSortable, isImageFile, isKitIconName, keyDelta, materialPairOf, moveFrame, nextPhotoIndex, nextSort, normalizeQuillDelta, normalizeSideMenuId, normalizeSideMenuSettings, omitSideMenuSettings, paramFromIndex, parseInline, parseMarkdown, parseSideMenuSettingsRecord, patchSideMenuSettings, pinnedSideMenuItems, provideRtIcons, provideRtKit, provideRtKitLabels, provideRtSideMenuSettings, readSideMenuSettings, reportedSideMenuWidth, resizeFrame, resolveColumns, resolveIconGlyph, resultFileName, resultQuality, resultType, rowHasAvailableActions, rtAsideUnsavedGuard, rtKitDefault, rtKitLabel, searchDebounce, shouldRenderPhoto, sideMenuIconName, sideMenuIdsToExpand, sideMenuWidthByKey, sortDirectionOf, splitSideMenuTitle, startOperatorOf, startSideMenuWidthDrag, stepSideMenuHighlight, unpairedSideMenuIcons, uploadState, walkSideMenuItems, withoutLockedHidden };
9599
+ export type { IMessageBusEvent, IQuillDelta, IQuillDeltaAttributes, IQuillDeltaOp, IRtAsideConfig, IRtDataTableIconContext, IRtDataTableRowContext, IRtDataTableRowHost, IRtDialogConfig, IRtIconsOptions, IRtMarkdownBlockNode, IRtMarkdownInlineNode, IRtMarkdownListItem, IRtPicture, IRtPictureSource, IRtSideMenuFavoritesIcons, IRtSideMenuIconContext, IRtSideMenuSettingsConfig, IRtSubMenuWidthDragHooks, IRtTableCardContext, IRtTableRowActionsContext, IRtTableSettingsRegistration, TIconCategory, TRtAsideCloseRequest, TRtAsideContentLayout, TRtAsidePosition, TRtAsideSize, TRtConsumerHandleName, TRtDataTableAriaSort, TRtDataTableFilterValue, TRtDataTableFilters, TRtDesignTokenName, TRtDialogAutoFocus, TRtDialogFooterAlign, TRtDialogSize, TRtKitLabelKey, TRtKitLabelMap, TRtKitLabelParams, TRtKitTranslator, TRtPointerListen, TRtRadius, TRtSideMenuSettingsRecord, TRtSkeletonShape, TRtSkeletonSize, TRtTableAriaSort, TRtTableFilterInput, TRtTableFilterValue, TRtTextareaResize };