@rt-tools/ui-kit-v2 0.33.0 → 0.34.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 (217) hide show
  1. package/README.md +4 -3
  2. package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +1 -0
  3. package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -1
  4. package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +92 -5
  5. package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
  6. package/fesm2022/rt-tools-ui-kit-v2-badge.mjs +191 -0
  7. package/fesm2022/rt-tools-ui-kit-v2-badge.mjs.map +1 -0
  8. package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs +3 -2
  9. package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs.map +1 -1
  10. package/fesm2022/rt-tools-ui-kit-v2-button.mjs +6 -1
  11. package/fesm2022/rt-tools-ui-kit-v2-button.mjs.map +1 -1
  12. package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs +35 -4
  13. package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs.map +1 -1
  14. package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs +13 -4
  15. package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs.map +1 -1
  16. package/fesm2022/rt-tools-ui-kit-v2-container.mjs +245 -60
  17. package/fesm2022/rt-tools-ui-kit-v2-container.mjs.map +1 -1
  18. package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs +30 -5
  19. package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs.map +1 -1
  20. package/fesm2022/rt-tools-ui-kit-v2-core.mjs +113 -2
  21. package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
  22. package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +14 -3
  23. package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -1
  24. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +17 -3
  25. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
  26. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +6 -3
  27. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
  28. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +2 -2
  29. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
  30. package/fesm2022/rt-tools-ui-kit-v2-divider.mjs +112 -0
  31. package/fesm2022/rt-tools-ui-kit-v2-divider.mjs.map +1 -0
  32. package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs +1 -0
  33. package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs.map +1 -1
  34. package/fesm2022/rt-tools-ui-kit-v2-drawer.mjs +854 -0
  35. package/fesm2022/rt-tools-ui-kit-v2-drawer.mjs.map +1 -0
  36. package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs +16 -5
  37. package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs.map +1 -1
  38. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +580 -65
  39. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
  40. package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs +203 -15
  41. package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs.map +1 -1
  42. package/fesm2022/rt-tools-ui-kit-v2-field.mjs +40 -8
  43. package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -1
  44. package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +1 -0
  45. package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
  46. package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs +7 -3
  47. package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs.map +1 -1
  48. package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs +53 -2
  49. package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs.map +1 -1
  50. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs +14 -4
  51. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs.map +1 -1
  52. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs +6 -3
  53. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs.map +1 -1
  54. package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +16 -5
  55. package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
  56. package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +1 -0
  57. package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -1
  58. package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs +14 -4
  59. package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs.map +1 -1
  60. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +3 -2
  61. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
  62. package/fesm2022/rt-tools-ui-kit-v2-input.mjs +207 -7
  63. package/fesm2022/rt-tools-ui-kit-v2-input.mjs.map +1 -1
  64. package/fesm2022/rt-tools-ui-kit-v2-menu.mjs +1 -0
  65. package/fesm2022/rt-tools-ui-kit-v2-menu.mjs.map +1 -1
  66. package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +3 -2
  67. package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
  68. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +2 -0
  69. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
  70. package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs +3 -2
  71. package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs.map +1 -1
  72. package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs +3 -2
  73. package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs.map +1 -1
  74. package/fesm2022/rt-tools-ui-kit-v2-progress-bar.mjs +171 -0
  75. package/fesm2022/rt-tools-ui-kit-v2-progress-bar.mjs.map +1 -0
  76. package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs +176 -6
  77. package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs.map +1 -1
  78. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +2 -1
  79. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
  80. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +1 -0
  81. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
  82. package/fesm2022/rt-tools-ui-kit-v2-select.mjs +142 -23
  83. package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
  84. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +22 -9
  85. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
  86. package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs +3 -2
  87. package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs.map +1 -1
  88. package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs +105 -8
  89. package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs.map +1 -1
  90. package/fesm2022/rt-tools-ui-kit-v2-table.mjs +13 -2
  91. package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
  92. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +609 -33
  93. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
  94. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +1 -0
  95. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
  96. package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs +45 -7
  97. package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs.map +1 -1
  98. package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs +2 -2
  99. package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs.map +1 -1
  100. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +11 -2
  101. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
  102. package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +152 -11
  103. package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -1
  104. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +199 -17
  105. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
  106. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +35 -5
  107. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -1
  108. package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs +14 -4
  109. package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs.map +1 -1
  110. package/fesm2022/rt-tools-ui-kit-v2-tree.mjs +6 -3
  111. package/fesm2022/rt-tools-ui-kit-v2-tree.mjs.map +1 -1
  112. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +21 -6
  113. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
  114. package/fesm2022/rt-tools-ui-kit-v2.mjs +4 -0
  115. package/package.json +17 -1
  116. package/src/assets/icons/volume-off.svg +2 -1
  117. package/src/lib/components/autocomplete/CONTEXT.md +25 -14
  118. package/src/lib/components/autocomplete/rt-autocomplete.component.scss +19 -0
  119. package/src/lib/components/badge/CONTEXT.md +33 -0
  120. package/src/lib/components/badge/rt-badge.directive.scss +104 -0
  121. package/src/lib/components/breadcrumbs/rt-breadcrumbs.component.scss +2 -2
  122. package/src/lib/components/button/CONTEXT.md +5 -0
  123. package/src/lib/components/button/rt-button.directive.scss +3 -1
  124. package/src/lib/components/checkbox/CONTEXT.md +15 -8
  125. package/src/lib/components/color-palette/rt-color-palette.component.scss +2 -2
  126. package/src/lib/components/container/CONTEXT.md +23 -6
  127. package/src/lib/components/container/rt-container.component.scss +90 -1
  128. package/src/lib/components/copy-value/CONTEXT.md +6 -5
  129. package/src/lib/components/copy-value/rt-copy-value.component.scss +16 -0
  130. package/src/lib/components/date-picker/rt-date-picker.component.scss +7 -0
  131. package/src/lib/components/date-range/rt-date-range.component.scss +7 -0
  132. package/src/lib/components/divider/CONTEXT.md +21 -0
  133. package/src/lib/components/divider/rt-divider.component.scss +34 -0
  134. package/src/lib/components/drawer/CONTEXT.md +73 -0
  135. package/src/lib/components/drawer/rt-drawer-container.component.scss +19 -0
  136. package/src/lib/components/drawer/rt-drawer.component.scss +168 -0
  137. package/src/lib/components/drawer/rt-resize-handle.component.scss +42 -0
  138. package/src/lib/components/dynamic-selector/CONTEXT.md +5 -0
  139. package/src/lib/components/expansion-panel/CONTEXT.md +32 -8
  140. package/src/lib/components/expansion-panel/rt-expansion-panel.component.scss +67 -2
  141. package/src/lib/components/field/CONTEXT.md +43 -0
  142. package/src/lib/components/field/rt-field-label-inside.scss +179 -0
  143. package/src/lib/components/field/rt-field.component.scss +51 -2
  144. package/src/lib/components/icon-button/CONTEXT.md +17 -15
  145. package/src/lib/components/icon-button/rt-icon-button.component.scss +3 -1
  146. package/src/lib/components/inline-edit/rt-inline-edit.component.scss +4 -4
  147. package/src/lib/components/input/CONTEXT.md +45 -11
  148. package/src/lib/components/input/rt-input-floating-label.scss +192 -0
  149. package/src/lib/components/input/rt-input-icons.scss +105 -0
  150. package/src/lib/components/input/rt-input.component.scss +91 -13
  151. package/src/lib/components/input-number/CONTEXT.md +7 -0
  152. package/src/lib/components/input-number/rt-input-number.component.scss +58 -1
  153. package/src/lib/components/menu/CONTEXT.md +1 -0
  154. package/src/lib/components/multiselect/CONTEXT.md +2 -1
  155. package/src/lib/components/multiselect/rt-multiselect.component.scss +7 -0
  156. package/src/lib/components/pagination/CONTEXT.md +3 -0
  157. package/src/lib/components/pagination/rt-pagination.component.scss +7 -0
  158. package/src/lib/components/progress-bar/CONTEXT.md +22 -0
  159. package/src/lib/components/progress-bar/rt-progress-bar.component.scss +77 -0
  160. package/src/lib/components/radio-button/CONTEXT.md +9 -0
  161. package/src/lib/components/radio-button/rt-radio-group.component.scss +13 -0
  162. package/src/lib/components/select/CONTEXT.md +28 -0
  163. package/src/lib/components/select/rt-select-clear.scss +88 -0
  164. package/src/lib/components/select/rt-select-floating-label.scss +155 -0
  165. package/src/lib/components/select/rt-select-material.scss +54 -0
  166. package/src/lib/components/select/rt-select.component.scss +54 -16
  167. package/src/lib/components/side-menu/CONTEXT.md +5 -0
  168. package/src/lib/components/speed-menu/rt-speed-menu.component.scss +5 -5
  169. package/src/lib/components/stepper/CONTEXT.md +13 -5
  170. package/src/lib/components/stepper/rt-stepper.component.scss +93 -0
  171. package/src/lib/components/tabs/CONTEXT.md +57 -9
  172. package/src/lib/components/tabs/rt-tabs.component.scss +201 -5
  173. package/src/lib/components/textarea/CONTEXT.md +12 -1
  174. package/src/lib/components/textarea/rt-textarea.component.scss +116 -1
  175. package/src/lib/components/toast/CONTEXT.md +23 -0
  176. package/src/lib/components/toast/rt-toast.component.scss +37 -0
  177. package/src/lib/components/toggle-button-group/CONTEXT.md +24 -4
  178. package/src/lib/components/toggle-button-group/rt-toggle-button-group-chips.scss +151 -0
  179. package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +35 -0
  180. package/src/lib/components/tooltip/CONTEXT.md +7 -1
  181. package/src/lib/components/tree/rt-tree.component.scss +2 -2
  182. package/src/styles/_color-scheme.scss +1 -1
  183. package/src/styles/_density.scss +48 -0
  184. package/src/styles/_index.scss +8 -0
  185. package/src/styles/_preset-material.scss +160 -70
  186. package/src/styles/_primitives.scss +1 -0
  187. package/src/styles/_semantic-navigation.scss +117 -0
  188. package/src/styles/_semantic.scss +29 -98
  189. package/src/styles/_theme-dark.scss +8 -0
  190. package/styles/tokens.css +2066 -1134
  191. package/types/rt-tools-ui-kit-v2-autocomplete.d.ts +34 -0
  192. package/types/rt-tools-ui-kit-v2-badge.d.ts +71 -0
  193. package/types/rt-tools-ui-kit-v2-checkbox.d.ts +17 -3
  194. package/types/rt-tools-ui-kit-v2-container.d.ts +65 -9
  195. package/types/rt-tools-ui-kit-v2-copy-value.d.ts +11 -1
  196. package/types/rt-tools-ui-kit-v2-core.d.ts +109 -4
  197. package/types/rt-tools-ui-kit-v2-divider.d.ts +29 -0
  198. package/types/rt-tools-ui-kit-v2-drawer.d.ts +257 -0
  199. package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +240 -25
  200. package/types/rt-tools-ui-kit-v2-expansion-panel.d.ts +87 -3
  201. package/types/rt-tools-ui-kit-v2-field.d.ts +18 -1
  202. package/types/rt-tools-ui-kit-v2-form-control.d.ts +42 -4
  203. package/types/rt-tools-ui-kit-v2-icon-button.d.ts +2 -1
  204. package/types/rt-tools-ui-kit-v2-input-number.d.ts +1 -0
  205. package/types/rt-tools-ui-kit-v2-input.d.ts +98 -4
  206. package/types/rt-tools-ui-kit-v2-progress-bar.d.ts +53 -0
  207. package/types/rt-tools-ui-kit-v2-radio-button.d.ts +80 -1
  208. package/types/rt-tools-ui-kit-v2-select.d.ts +65 -1
  209. package/types/rt-tools-ui-kit-v2-side-menu.d.ts +3 -0
  210. package/types/rt-tools-ui-kit-v2-stepper.d.ts +57 -4
  211. package/types/rt-tools-ui-kit-v2-tabs.d.ts +291 -6
  212. package/types/rt-tools-ui-kit-v2-textarea.d.ts +16 -0
  213. package/types/rt-tools-ui-kit-v2-toast.d.ts +38 -2
  214. package/types/rt-tools-ui-kit-v2-toggle-button-group.d.ts +83 -3
  215. package/types/rt-tools-ui-kit-v2-tooltip.d.ts +17 -2
  216. package/types/rt-tools-ui-kit-v2.d.ts +4 -0
  217. package/src/lib/components/dynamic-selector/stories/component/test-dynamic-selector-popup-frame.component.scss +0 -6
@@ -2,11 +2,12 @@ import { Overlay, ScrollStrategyOptions } from "@angular/cdk/overlay";
2
2
  import { TemplatePortal } from "@angular/cdk/portal";
3
3
  import { DOCUMENT, NgTemplateOutlet } from "@angular/common";
4
4
  import * as i0 from "@angular/core";
5
- import { ChangeDetectionStrategy, Component, DestroyRef, Directive, ElementRef, Injectable, Injector, RendererFactory2, TemplateRef, ViewContainerRef, ViewEncapsulation, afterNextRender, computed, contentChild, effect, inject, input, isSignal, output, signal, viewChild } from "@angular/core";
5
+ import { ChangeDetectionStrategy, Component, DestroyRef, Directive, ElementRef, Injectable, Injector, RendererFactory2, TemplateRef, ViewContainerRef, ViewEncapsulation, afterNextRender, booleanAttribute, computed, contentChild, effect, inject, input, isSignal, model, numberAttribute, output, signal, untracked, viewChild } from "@angular/core";
6
6
  import { outputToObservable, takeUntilDestroyed, toObservable, toSignal } from "@angular/core/rxjs-interop";
7
7
  import { Subject, catchError, defer, exhaustMap, filter, finalize, map, merge, mergeMap, of, shareReplay, startWith, switchMap, take, takeUntil, tap } from "rxjs";
8
8
  import { BlockDirective, ElemDirective, ModDirective } from "@rt-tools/core";
9
9
  import { BreakpointsService, NotificationBus, carryThemeScope, materialPresetClassesOf } from "@rt-tools/ui-kit-v2/core";
10
+ import { RtResizeHandleComponent, clampWidth, listenTransitionEnd } from "@rt-tools/ui-kit-v2/drawer";
10
11
  import { RtToasterComponent } from "@rt-tools/ui-kit-v2/toast";
11
12
  import { ActivatedRoute, Router } from "@angular/router";
12
13
  import { ERtAsideCloseIntent, ERtAsideUnsavedOutcome, RtAsideUnsavedDialogComponent, resolveCloseIntent } from "@rt-tools/ui-kit-v2/aside";
@@ -266,8 +267,10 @@ i0.ɵɵngDeclareClassMetadata({
266
267
  args: [{ selector: "[rtContainerContent]" }]
267
268
  }]
268
269
  });
269
- const ASIDE_TRANSITION_BUFFER_MS = 80;
270
270
  const BEM_BLOCK = "rt-container";
271
+ const OVERLAY_OPEN_CLASS = "rt-aside-overlay--open";
272
+ const RIGHT_MIN_WIDTH = 240;
273
+ const RIGHT_MAX_WIDTH = 960;
271
274
  var RtContainerComponent = class RtContainerComponent {
272
275
  #overlay;
273
276
  #host;
@@ -278,6 +281,7 @@ var RtContainerComponent = class RtContainerComponent {
278
281
  #window;
279
282
  #rightOverlaySource;
280
283
  #overlayRef;
284
+ #scrollBlocked;
281
285
  #overlayRefSignal;
282
286
  constructor() {
283
287
  this.#overlay = inject(Overlay);
@@ -289,6 +293,7 @@ var RtContainerComponent = class RtContainerComponent {
289
293
  this.#window = inject(DOCUMENT).defaultView;
290
294
  this.#rightOverlaySource = new Subject();
291
295
  this.#overlayRef = null;
296
+ this.#scrollBlocked = false;
292
297
  this.#overlayRefSignal = signal(null, ...ngDevMode ? [{ debugName: "#overlayRefSignal" }] : /* istanbul ignore next */ []);
293
298
  this.headerTpl = contentChild(RtContainerHeaderDirective, {
294
299
  ...ngDevMode ? { debugName: "headerTpl" } : /* istanbul ignore next */ {},
@@ -318,13 +323,41 @@ var RtContainerComponent = class RtContainerComponent {
318
323
  ...ngDevMode ? { debugName: "contentTpl" } : /* istanbul ignore next */ {},
319
324
  read: TemplateRef
320
325
  });
326
+ this.rightPaneTpl = viewChild("rightPane", {
327
+ ...ngDevMode ? { debugName: "rightPaneTpl" } : /* istanbul ignore next */ {},
328
+ read: TemplateRef
329
+ });
330
+ this.rightCell = viewChild("rightCell", ...ngDevMode ? [{ debugName: "rightCell" }] : /* istanbul ignore next */ []);
331
+ this.rightResizing = signal(false, ...ngDevMode ? [{ debugName: "rightResizing" }] : /* istanbul ignore next */ []);
332
+ this.rightShownWidth = computed(() => {
333
+ const width = this.rightWidth();
334
+ return width === null ? null : clampWidth(width, this.rightMinWidth(), this.rightMaxWidth());
335
+ }, ...ngDevMode ? [{ debugName: "rightShownWidth" }] : /* istanbul ignore next */ []);
321
336
  this.mobileLeftNav = input("keep", ...ngDevMode ? [{ debugName: "mobileLeftNav" }] : /* istanbul ignore next */ []);
322
337
  this.height = input("auto", ...ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []);
338
+ this.rightMode = input("over", ...ngDevMode ? [{ debugName: "rightMode" }] : /* istanbul ignore next */ []);
339
+ this.rightBackdrop = input(true, {
340
+ ...ngDevMode ? { debugName: "rightBackdrop" } : /* istanbul ignore next */ {},
341
+ transform: booleanAttribute
342
+ });
343
+ this.rightWidth = model(null, ...ngDevMode ? [{ debugName: "rightWidth" }] : /* istanbul ignore next */ []);
344
+ this.rightResizable = input(false, {
345
+ ...ngDevMode ? { debugName: "rightResizable" } : /* istanbul ignore next */ {},
346
+ transform: booleanAttribute
347
+ });
348
+ this.rightMinWidth = input(RIGHT_MIN_WIDTH, {
349
+ ...ngDevMode ? { debugName: "rightMinWidth" } : /* istanbul ignore next */ {},
350
+ transform: numberAttribute
351
+ });
352
+ this.rightMaxWidth = input(RIGHT_MAX_WIDTH, {
353
+ ...ngDevMode ? { debugName: "rightMaxWidth" } : /* istanbul ignore next */ {},
354
+ transform: numberAttribute
355
+ });
323
356
  this.backdropClick = output();
324
357
  this.rightOpened = output();
325
358
  this.rightClosed = output();
326
359
  this.rightOpen = signal(false, ...ngDevMode ? [{ debugName: "rightOpen" }] : /* istanbul ignore next */ []);
327
- this.rightOverlayReady = computed(() => this.#overlayRefSignal() !== null, ...ngDevMode ? [{ debugName: "rightOverlayReady" }] : /* istanbul ignore next */ []);
360
+ this.rightOverlayReady = computed(() => this.rightMode() === "side" ? this.rightSidenavTpl() !== void 0 : this.#overlayRefSignal() !== null, ...ngDevMode ? [{ debugName: "rightOverlayReady" }] : /* istanbul ignore next */ []);
328
361
  const breakpoints = inject(BreakpointsService);
329
362
  const destroyRef = inject(DestroyRef);
330
363
  afterNextRender(() => {
@@ -337,11 +370,19 @@ var RtContainerComponent = class RtContainerComponent {
337
370
  }))).pipe(takeUntil(overlayRef.detachments()))), takeUntilDestroyed()).subscribe((handleCloseIntent) => handleCloseIntent());
338
371
  effect((onCleanup) => {
339
372
  const tpl = this.rightSidenavTpl();
340
- if (tpl === void 0 || this.#overlayRef !== null) return;
341
- const overlayRef = this.#createRightOverlay(tpl);
373
+ const pane = this.rightPaneTpl();
374
+ const over = this.rightMode() === "over";
375
+ const backdrop = this.rightBackdrop();
376
+ if (tpl === void 0 || pane === void 0 || !over || this.#overlayRef !== null) return;
377
+ const overlayRef = this.#createRightOverlay(pane, backdrop);
342
378
  this.#overlayRef = overlayRef;
343
379
  this.#overlayRefSignal.set(overlayRef);
380
+ if (untracked(this.rightOpen)) {
381
+ this.#showOverlay(overlayRef);
382
+ this.#renderer.addClass(overlayRef.overlayElement, OVERLAY_OPEN_CLASS);
383
+ }
344
384
  onCleanup(() => {
385
+ this.#setScrollBlocked(false);
345
386
  overlayRef.dispose();
346
387
  this.#overlayRef = null;
347
388
  this.#overlayRefSignal.set(null);
@@ -349,49 +390,87 @@ var RtContainerComponent = class RtContainerComponent {
349
390
  });
350
391
  }
351
392
  openRight() {
393
+ if (this.rightMode() === "side") {
394
+ this.#openSide();
395
+ return;
396
+ }
352
397
  const overlayRef = this.#overlayRef;
353
398
  if (overlayRef === null) return;
354
- this.#blockScroll.enable();
355
- carryThemeScope(overlayRef.overlayElement, this.#host.nativeElement);
356
- this.#renderer.removeClass(overlayRef.overlayElement, "rt-aside-overlay--entering");
357
- this.#renderer.removeClass(overlayRef.overlayElement, "rt-aside-overlay--leaving");
358
- const backdropEl = overlayRef.backdropElement;
359
- if (backdropEl !== null) {
360
- this.#renderer.addClass(backdropEl, "rt-aside-backdrop--visible");
361
- this.#renderer.removeStyle(backdropEl, "opacity");
362
- this.#renderer.removeStyle(backdropEl, "pointer-events");
363
- }
399
+ this.#showOverlay(overlayRef);
364
400
  requestAnimationFrame(() => {
365
- this.#renderer.addClass(overlayRef.overlayElement, "rt-aside-overlay--open");
366
- this.#listenTransitionEnd(overlayRef, () => this.rightOpened.emit());
401
+ this.#renderer.addClass(overlayRef.overlayElement, OVERLAY_OPEN_CLASS);
402
+ listenTransitionEnd(this.#window, overlayRef.overlayElement, "transform", () => this.rightOpened.emit());
367
403
  });
368
404
  this.rightOpen.set(true);
369
405
  }
370
406
  closeRight() {
407
+ if (this.rightMode() === "side") {
408
+ this.#closeSide();
409
+ return;
410
+ }
371
411
  const overlayRef = this.#overlayRef;
372
412
  if (overlayRef === null || !this.rightOpen()) return;
373
- this.#renderer.removeClass(overlayRef.overlayElement, "rt-aside-overlay--open");
413
+ this.#renderer.removeClass(overlayRef.overlayElement, OVERLAY_OPEN_CLASS);
374
414
  this.#renderer.addClass(overlayRef.overlayElement, "rt-aside-overlay--leaving");
375
415
  const backdropEl = overlayRef.backdropElement;
376
416
  if (backdropEl !== null) this.#renderer.removeClass(backdropEl, "rt-aside-backdrop--visible");
377
- this.#listenTransitionEnd(overlayRef, () => {
378
- this.#blockScroll.disable();
417
+ listenTransitionEnd(this.#window, overlayRef.overlayElement, "transform", () => {
418
+ this.#setScrollBlocked(false);
379
419
  this.#hideBackdrop(overlayRef);
380
420
  this.rightOpen.set(false);
381
421
  this.rightClosed.emit();
382
422
  });
383
423
  }
424
+ onRightWidth(width) {
425
+ this.rightWidth.set(width);
426
+ }
427
+ #openSide() {
428
+ if (this.rightOpen()) return;
429
+ this.rightOpen.set(true);
430
+ requestAnimationFrame(() => this.#afterSideTransition(() => this.rightOpened.emit()));
431
+ }
432
+ #closeSide() {
433
+ if (!this.rightOpen()) return;
434
+ this.rightOpen.set(false);
435
+ this.#afterSideTransition(() => this.rightClosed.emit());
436
+ }
437
+ #afterSideTransition(callback) {
438
+ const cell = this.rightCell()?.nativeElement;
439
+ if (cell === void 0) {
440
+ callback();
441
+ return;
442
+ }
443
+ listenTransitionEnd(this.#window, cell, "inline-size", callback);
444
+ }
445
+ #showOverlay(overlayRef) {
446
+ carryThemeScope(overlayRef.overlayElement, this.#host.nativeElement);
447
+ this.#renderer.removeClass(overlayRef.overlayElement, "rt-aside-overlay--entering");
448
+ this.#renderer.removeClass(overlayRef.overlayElement, "rt-aside-overlay--leaving");
449
+ const backdropEl = overlayRef.backdropElement;
450
+ if (backdropEl !== null) {
451
+ this.#setScrollBlocked(true);
452
+ this.#renderer.addClass(backdropEl, "rt-aside-backdrop--visible");
453
+ this.#renderer.removeStyle(backdropEl, "opacity");
454
+ this.#renderer.removeStyle(backdropEl, "pointer-events");
455
+ }
456
+ }
457
+ #setScrollBlocked(blocked) {
458
+ if (blocked === this.#scrollBlocked) return;
459
+ this.#scrollBlocked = blocked;
460
+ if (blocked) this.#blockScroll.enable();
461
+ else this.#blockScroll.disable();
462
+ }
384
463
  #hideBackdrop(overlayRef) {
385
464
  const backdropEl = overlayRef.backdropElement;
386
465
  if (backdropEl === null) return;
387
466
  this.#renderer.setStyle(backdropEl, "opacity", "0");
388
467
  this.#renderer.setStyle(backdropEl, "pointer-events", "none");
389
468
  }
390
- #createRightOverlay(tpl) {
469
+ #createRightOverlay(tpl, hasBackdrop) {
391
470
  const overlayConfig = {
392
471
  positionStrategy: this.#overlay.position().global().right("0").top("0"),
472
+ hasBackdrop,
393
473
  scrollStrategy: this.#overlay.scrollStrategies.noop(),
394
- hasBackdrop: true,
395
474
  backdropClass: "rt-aside-backdrop",
396
475
  panelClass: [
397
476
  "rt-aside-overlay",
@@ -408,37 +487,6 @@ var RtContainerComponent = class RtContainerComponent {
408
487
  this.#rightOverlaySource.next(overlayRef);
409
488
  return overlayRef;
410
489
  }
411
- #listenTransitionEnd(overlayRef, callback) {
412
- const element = overlayRef.overlayElement;
413
- const durationMs = this.#transitionDurationMs(element);
414
- if (durationMs === 0) {
415
- callback();
416
- return;
417
- }
418
- let settled = false;
419
- const handler = (event) => {
420
- if (event.propertyName !== "transform" || settled) return;
421
- settled = true;
422
- element.removeEventListener("transitionend", handler);
423
- callback();
424
- };
425
- element.addEventListener("transitionend", handler);
426
- setTimeout(() => {
427
- if (settled) return;
428
- settled = true;
429
- element.removeEventListener("transitionend", handler);
430
- callback();
431
- }, durationMs + ASIDE_TRANSITION_BUFFER_MS);
432
- }
433
- #transitionDurationMs(element) {
434
- const durationCss = this.#window?.getComputedStyle(element).transitionDuration;
435
- if (durationCss === void 0 || durationCss === "") return 0;
436
- return durationCss.split(",").reduce((max, part) => {
437
- const trimmed = part.trim();
438
- const seconds = trimmed.endsWith("ms") ? Number.parseFloat(trimmed) / 1e3 : Number.parseFloat(trimmed);
439
- return Number.isNaN(seconds) ? max : Math.max(max, seconds);
440
- }, 0) * 1e3;
441
- }
442
490
  static {
443
491
  this.ɵfac = i0.ɵɵngDeclareFactory({
444
492
  minVersion: "12.0.0",
@@ -470,9 +518,52 @@ var RtContainerComponent = class RtContainerComponent {
470
518
  isSignal: true,
471
519
  isRequired: false,
472
520
  transformFunction: null
521
+ },
522
+ rightMode: {
523
+ classPropertyName: "rightMode",
524
+ publicName: "rightMode",
525
+ isSignal: true,
526
+ isRequired: false,
527
+ transformFunction: null
528
+ },
529
+ rightBackdrop: {
530
+ classPropertyName: "rightBackdrop",
531
+ publicName: "rightBackdrop",
532
+ isSignal: true,
533
+ isRequired: false,
534
+ transformFunction: null
535
+ },
536
+ rightWidth: {
537
+ classPropertyName: "rightWidth",
538
+ publicName: "rightWidth",
539
+ isSignal: true,
540
+ isRequired: false,
541
+ transformFunction: null
542
+ },
543
+ rightResizable: {
544
+ classPropertyName: "rightResizable",
545
+ publicName: "rightResizable",
546
+ isSignal: true,
547
+ isRequired: false,
548
+ transformFunction: null
549
+ },
550
+ rightMinWidth: {
551
+ classPropertyName: "rightMinWidth",
552
+ publicName: "rightMinWidth",
553
+ isSignal: true,
554
+ isRequired: false,
555
+ transformFunction: null
556
+ },
557
+ rightMaxWidth: {
558
+ classPropertyName: "rightMaxWidth",
559
+ publicName: "rightMaxWidth",
560
+ isSignal: true,
561
+ isRequired: false,
562
+ transformFunction: null
473
563
  }
474
564
  },
475
565
  outputs: {
566
+ rightWidth: "rightWidthChange",
476
567
  backdropClick: "backdropClick",
477
568
  rightOpened: "rightOpened",
478
569
  rightClosed: "rightClosed"
@@ -480,7 +571,8 @@ var RtContainerComponent = class RtContainerComponent {
480
571
  host: {
481
572
  properties: {
482
573
  "class.rt-container--mobile-left-bottom": "mobileLeftNav() === 'bottom'",
483
- "class.rt-container--viewport": "height() === 'viewport'"
574
+ "class.rt-container--viewport": "height() === 'viewport'",
575
+ "class.rt-container--right-side": "rightMode() === 'side' && rightSidenavTpl() !== undefined"
484
576
  },
485
577
  classAttribute: "rt-container"
486
578
  },
@@ -543,9 +635,23 @@ var RtContainerComponent = class RtContainerComponent {
543
635
  isSignal: true
544
636
  }
545
637
  ],
638
+ viewQueries: [{
639
+ propertyName: "rightPaneTpl",
640
+ first: true,
641
+ predicate: ["rightPane"],
642
+ descendants: true,
643
+ read: TemplateRef,
644
+ isSignal: true
645
+ }, {
646
+ propertyName: "rightCell",
647
+ first: true,
648
+ predicate: ["rightCell"],
649
+ descendants: true,
650
+ isSignal: true
651
+ }],
546
652
  ngImport: i0,
547
- template: "<ng-container rtBlock=\"rt-container\">\n @if (headerTpl(); as tpl) {\n <header rtElem=\"header\" qa-dataid=\"container-header\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </header>\n }\n\n @if (leftSidenavTpl(); as tpl) {\n <aside rtElem=\"left-sidenav\" qa-dataid=\"container-left-sidenav\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </aside>\n }\n\n @if (toolbarLeftTpl(); as tpl) {\n <div rtElem=\"toolbar\" qa-dataid=\"container-toolbar\" data-slot=\"left\" [rtMod]=\"{ slot: 'left' }\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </div>\n }\n\n @if (toolbarCenterTpl(); as tpl) {\n <div rtElem=\"toolbar\" qa-dataid=\"container-toolbar\" data-slot=\"center\" [rtMod]=\"{ slot: 'center' }\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </div>\n }\n\n @if (toolbarRightTpl(); as tpl) {\n <div rtElem=\"toolbar\" qa-dataid=\"container-toolbar\" data-slot=\"right\" [rtMod]=\"{ slot: 'right' }\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </div>\n }\n\n @if (contentTpl(); as tpl) {\n <main rtElem=\"content\" qa-dataid=\"container-content\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </main>\n }\n\n <rt-toaster position=\"bottom-center\" />\n</ng-container>\n",
548
- styles: ["@charset \"UTF-8\";@layer rt-kit.components{:root{--rt-aside-animation-duration: .2s;--rt-aside-backdrop-bg: var(--rt-color-bg-overlay);--rt-aside-backdrop-blur: 5px}.cdk-overlay-backdrop.rt-aside-backdrop{-webkit-backdrop-filter:blur(var(--rt-aside-backdrop-blur));backdrop-filter:blur(var(--rt-aside-backdrop-blur));background:var(--rt-aside-backdrop-bg);transition:opacity var(--rt-aside-animation-duration) ease}:is(.rt-preset-material,[data-preset=material]).cdk-overlay-backdrop.rt-aside-backdrop,[data-preset=material] .cdk-overlay-backdrop.rt-aside-backdrop{--rt-aside-backdrop-bg: var(--rt-color-bg-overlay);--rt-aside-backdrop-blur: 0}.rt-aside-overlay{height:100dvh;transition:transform var(--rt-aside-animation-duration) ease}.rt-aside-overlay.rt-aside-overlay--entering{transition:none}.rt-aside-overlay--position-right.rt-aside-overlay--entering,.rt-aside-overlay--position-right.rt-aside-overlay--leaving{transform:translate(100%)}.rt-aside-overlay--position-left.rt-aside-overlay--entering,.rt-aside-overlay--position-left.rt-aside-overlay--leaving{transform:translate(-100%)}.rt-aside-overlay--position-right.rt-aside-overlay--open,.rt-aside-overlay--position-left.rt-aside-overlay--open{transform:translate(0)}@media(width<=768px){.rt-aside-overlay{overflow:hidden;width:100dvw;max-width:100dvw}}@media(prefers-reduced-motion:reduce){.rt-aside-overlay{transition:none}}}.cdk-overlay-backdrop.rt-aside-backdrop{opacity:0;pointer-events:none}.cdk-overlay-backdrop.rt-aside-backdrop.rt-aside-backdrop--visible{opacity:1;pointer-events:auto}.rt-aside-overlay:not(.rt-aside-overlay--open){pointer-events:none}@layer rt-kit.components{.rt-container{--rt-container-border-width: var(--rt-border-width-thin);display:grid;min-height:100%;flex:1 1 auto;background-color:var(--rt-color-bg-page);color:var(--rt-color-text-primary);container:rt-place/inline-size;grid-template:\"header header\" auto \"left-sidenav toolbar\" auto \"left-sidenav content\" 1fr/auto 1fr}.rt-container__header{position:sticky;z-index:1;top:0;display:block;grid-area:header}.rt-container__header>.rt-page-header{margin:var(--rt-space-5) var(--rt-space-5) 0}.rt-container__left-sidenav{display:block;padding:var(--rt-space-md);border-right:var(--rt-container-border-width) solid var(--rt-color-border-subtle);background-color:var(--rt-color-bg-surface);grid-area:left-sidenav}.rt-container__toolbar{display:flex;align-items:center;padding:var(--rt-space-sm) var(--rt-space-md);border-bottom:var(--rt-container-border-width) solid var(--rt-color-border-subtle);background-color:var(--rt-color-bg-surface);grid-area:toolbar}.rt-container__toolbar--slot--left{justify-content:flex-start}.rt-container__toolbar--slot--center{justify-content:center}.rt-container__toolbar--slot--right{justify-content:flex-end}.rt-container__content{display:flex;overflow:auto;min-height:0;flex-direction:column;grid-area:content}.rt-container--viewport{block-size:100dvh;min-block-size:0}.rt-container--viewport .rt-container__content{overflow:hidden}.rt-container--viewport .rt-container__left-sidenav{overflow:auto}@media(width<=768px){.rt-container--mobile-left-bottom{grid-template:\"header\" auto \"toolbar\" auto \"content\" 1fr \"left-sidenav\" auto/1fr}.rt-container--mobile-left-bottom .rt-container__left-sidenav{padding:0;border-top:var(--rt-container-border-width) solid var(--rt-color-border-subtle);border-right:none}}}\n"],
653
+ template: "<ng-container rtBlock=\"rt-container\">\n @if (headerTpl(); as tpl) {\n <header rtElem=\"header\" qa-dataid=\"container-header\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </header>\n }\n\n @if (leftSidenavTpl(); as tpl) {\n <aside rtElem=\"left-sidenav\" qa-dataid=\"container-left-sidenav\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </aside>\n }\n\n @if (toolbarLeftTpl(); as tpl) {\n <div rtElem=\"toolbar\" qa-dataid=\"container-toolbar\" data-slot=\"left\" [rtMod]=\"{ slot: 'left' }\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </div>\n }\n\n @if (toolbarCenterTpl(); as tpl) {\n <div rtElem=\"toolbar\" qa-dataid=\"container-toolbar\" data-slot=\"center\" [rtMod]=\"{ slot: 'center' }\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </div>\n }\n\n @if (toolbarRightTpl(); as tpl) {\n <div rtElem=\"toolbar\" qa-dataid=\"container-toolbar\" data-slot=\"right\" [rtMod]=\"{ slot: 'right' }\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </div>\n }\n\n @if (contentTpl(); as tpl) {\n <main rtElem=\"content\" qa-dataid=\"container-content\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </main>\n }\n\n @if (rightSidenavTpl() !== undefined && rightMode() === 'side') {\n <aside\n #rightCell\n rtElem=\"right-sidenav\"\n qa-dataid=\"container-right-sidenav\"\n [rtMod]=\"{ open: rightOpen(), resizing: rightResizing() }\"\n [attr.inert]=\"rightOpen() ? null : ''\"\n [style.--rt-container-right-width.px]=\"rightShownWidth()\">\n <ng-container [ngTemplateOutlet]=\"rightPane\" />\n </aside>\n }\n\n <rt-toaster position=\"bottom-center\" />\n\n <!-- Правая панель с шириной и ручкой: одна разметка для оверлея и для колонки рядом с содержимым. -->\n <ng-template #rightPane>\n <div\n rtElem=\"right-pane\"\n qa-dataid=\"container-right-pane\"\n [rtMod]=\"{ sized: rightShownWidth() !== null }\"\n [style.--rt-container-right-width.px]=\"rightShownWidth()\">\n @if (rightSidenavTpl(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n }\n\n @if (rightResizable()) {\n <rt-resize-handle\n edge=\"start\"\n [width]=\"rightShownWidth()\"\n [min]=\"rightMinWidth()\"\n [max]=\"rightMaxWidth()\"\n (widthChange)=\"onRightWidth($event)\"\n (resizing)=\"rightResizing.set($event)\" />\n }\n </div>\n </ng-template>\n</ng-container>\n",
654
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{:root{--rt-aside-animation-duration: .2s;--rt-aside-backdrop-bg: var(--rt-color-bg-overlay);--rt-aside-backdrop-blur: 5px}.cdk-overlay-backdrop.rt-aside-backdrop{-webkit-backdrop-filter:blur(var(--rt-aside-backdrop-blur));backdrop-filter:blur(var(--rt-aside-backdrop-blur));background:var(--rt-aside-backdrop-bg);transition:opacity var(--rt-aside-animation-duration) ease}:is(.rt-preset-material,[data-preset=material]).cdk-overlay-backdrop.rt-aside-backdrop,[data-preset=material] .cdk-overlay-backdrop.rt-aside-backdrop{--rt-aside-backdrop-bg: var(--rt-color-bg-overlay);--rt-aside-backdrop-blur: 0}.rt-aside-overlay{height:100dvh;transition:transform var(--rt-aside-animation-duration) ease}.rt-aside-overlay.rt-aside-overlay--entering{transition:none}.rt-aside-overlay--position-right.rt-aside-overlay--entering,.rt-aside-overlay--position-right.rt-aside-overlay--leaving{transform:translate(100%)}.rt-aside-overlay--position-left.rt-aside-overlay--entering,.rt-aside-overlay--position-left.rt-aside-overlay--leaving{transform:translate(-100%)}.rt-aside-overlay--position-right.rt-aside-overlay--open,.rt-aside-overlay--position-left.rt-aside-overlay--open{transform:translate(0)}@media(width<=768px){.rt-aside-overlay{overflow:hidden;width:100dvw;max-width:100dvw}}@media(prefers-reduced-motion:reduce){.rt-aside-overlay{transition:none}}}.cdk-overlay-backdrop.rt-aside-backdrop{opacity:0;pointer-events:none}.cdk-overlay-backdrop.rt-aside-backdrop.rt-aside-backdrop--visible{opacity:1;pointer-events:auto}.rt-aside-overlay:not(.rt-aside-overlay--open){pointer-events:none}@layer rt-kit.components{.rt-container{--rt-container-border-width: var(--rt-border-width-thin);--rt-container-right-duration: var(--rt-duration-base);display:grid;min-height:100%;flex:1 1 auto;background-color:var(--rt-color-bg-page);color:var(--rt-color-text-primary);container:rt-place/inline-size;grid-template:\"header header header\" auto \"left-sidenav toolbar right-sidenav\" auto \"left-sidenav content right-sidenav\" 1fr/auto 1fr auto}.rt-container__header{position:sticky;z-index:1;top:0;display:block;grid-area:header}.rt-container__header>.rt-page-header{margin:var(--rt-space-5) var(--rt-space-5) 0}.rt-container__left-sidenav{display:block;padding:var(--rt-space-md);border-right:var(--rt-container-border-width) solid var(--rt-color-border-subtle);background-color:var(--rt-color-bg-surface);grid-area:left-sidenav}.rt-container__toolbar{display:flex;align-items:center;padding:var(--rt-space-sm) var(--rt-space-md);border-bottom:var(--rt-container-border-width) solid var(--rt-color-border-subtle);background-color:var(--rt-color-bg-surface);grid-area:toolbar}.rt-container__toolbar--slot--left{justify-content:flex-start}.rt-container__toolbar--slot--center{justify-content:center}.rt-container__toolbar--slot--right{justify-content:flex-end}.rt-container__content{display:flex;overflow:auto;min-height:0;flex-direction:column;grid-area:content}.rt-container__right-sidenav{--rt-container-right-width: auto;display:flex;overflow:clip;min-height:0;border-left:var(--rt-container-border-width) solid var(--rt-color-border-subtle);background-color:var(--rt-color-bg-surface);grid-area:right-sidenav;inline-size:var(--rt-container-right-width);transition:inline-size var(--rt-container-right-duration) ease,visibility 0s linear}.rt-container__right-sidenav:not(.rt-container__right-sidenav--open){border-left-width:0;inline-size:0;transition:inline-size var(--rt-container-right-duration) ease,visibility 0s linear var(--rt-container-right-duration);visibility:hidden}.rt-container__right-sidenav--resizing{transition:none}.rt-container__right-pane{--rt-container-right-width: auto;position:relative;display:flex;overflow:auto;min-height:0;flex:0 0 auto;block-size:100%}.rt-container__right-pane>:not(rt-resize-handle){min-width:0;flex:1 1 auto}.rt-container__right-pane--sized{inline-size:var(--rt-container-right-width)}.cdk-overlay-pane>.rt-container__right-pane{flex-shrink:1}.rt-container--viewport{block-size:100dvh;min-block-size:0}.rt-container--viewport .rt-container__content{overflow:hidden}.rt-container--viewport .rt-container__left-sidenav{overflow:auto}@media(prefers-reduced-motion:reduce){.rt-container__right-sidenav,.rt-container__right-sidenav:not(.rt-container__right-sidenav--open){transition:none}}@media(width<=768px){.rt-container__right-sidenav{grid-column:content;grid-row:toolbar/content;inline-size:auto}.rt-container__right-sidenav .rt-container__right-pane--sized,.cdk-overlay-pane>.rt-container__right-pane--sized{inline-size:100%}.rt-container--mobile-left-bottom{grid-template:\"header\" auto \"toolbar\" auto \"content\" 1fr \"left-sidenav\" auto/1fr}.rt-container--mobile-left-bottom .rt-container__left-sidenav{padding:0;border-top:var(--rt-container-border-width) solid var(--rt-color-border-subtle);border-right:none}}}\n"],
549
655
  dependencies: [
550
656
  {
551
657
  kind: "directive",
@@ -566,9 +672,24 @@ var RtContainerComponent = class RtContainerComponent {
566
672
  "duration",
567
673
  "visibleToasts",
568
674
  "mode",
569
- "expand"
675
+ "expand",
676
+ "channel"
570
677
  ]
571
678
  },
679
+ {
680
+ kind: "component",
681
+ type: RtResizeHandleComponent,
682
+ selector: "rt-resize-handle",
683
+ inputs: [
684
+ "width",
685
+ "min",
686
+ "max",
687
+ "step",
688
+ "edge",
689
+ "ariaLabel"
690
+ ],
691
+ outputs: ["widthChange", "resizing"]
692
+ },
572
693
  {
573
694
  kind: "directive",
574
695
  type: BlockDirective,
@@ -606,6 +727,7 @@ i0.ɵɵngDeclareClassMetadata({
606
727
  imports: [
607
728
  NgTemplateOutlet,
608
729
  RtToasterComponent,
730
+ RtResizeHandleComponent,
609
731
  BlockDirective,
610
732
  ElemDirective,
611
733
  ModDirective
@@ -614,10 +736,11 @@ i0.ɵɵngDeclareClassMetadata({
614
736
  host: {
615
737
  class: BEM_BLOCK,
616
738
  "[class.rt-container--mobile-left-bottom]": "mobileLeftNav() === 'bottom'",
617
- "[class.rt-container--viewport]": "height() === 'viewport'"
739
+ "[class.rt-container--viewport]": "height() === 'viewport'",
740
+ "[class.rt-container--right-side]": "rightMode() === 'side' && rightSidenavTpl() !== undefined"
618
741
  },
619
- template: "<ng-container rtBlock=\"rt-container\">\n @if (headerTpl(); as tpl) {\n <header rtElem=\"header\" qa-dataid=\"container-header\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </header>\n }\n\n @if (leftSidenavTpl(); as tpl) {\n <aside rtElem=\"left-sidenav\" qa-dataid=\"container-left-sidenav\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </aside>\n }\n\n @if (toolbarLeftTpl(); as tpl) {\n <div rtElem=\"toolbar\" qa-dataid=\"container-toolbar\" data-slot=\"left\" [rtMod]=\"{ slot: 'left' }\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </div>\n }\n\n @if (toolbarCenterTpl(); as tpl) {\n <div rtElem=\"toolbar\" qa-dataid=\"container-toolbar\" data-slot=\"center\" [rtMod]=\"{ slot: 'center' }\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </div>\n }\n\n @if (toolbarRightTpl(); as tpl) {\n <div rtElem=\"toolbar\" qa-dataid=\"container-toolbar\" data-slot=\"right\" [rtMod]=\"{ slot: 'right' }\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </div>\n }\n\n @if (contentTpl(); as tpl) {\n <main rtElem=\"content\" qa-dataid=\"container-content\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </main>\n }\n\n <rt-toaster position=\"bottom-center\" />\n</ng-container>\n",
620
- styles: ["@charset \"UTF-8\";@layer rt-kit.components{:root{--rt-aside-animation-duration: .2s;--rt-aside-backdrop-bg: var(--rt-color-bg-overlay);--rt-aside-backdrop-blur: 5px}.cdk-overlay-backdrop.rt-aside-backdrop{-webkit-backdrop-filter:blur(var(--rt-aside-backdrop-blur));backdrop-filter:blur(var(--rt-aside-backdrop-blur));background:var(--rt-aside-backdrop-bg);transition:opacity var(--rt-aside-animation-duration) ease}:is(.rt-preset-material,[data-preset=material]).cdk-overlay-backdrop.rt-aside-backdrop,[data-preset=material] .cdk-overlay-backdrop.rt-aside-backdrop{--rt-aside-backdrop-bg: var(--rt-color-bg-overlay);--rt-aside-backdrop-blur: 0}.rt-aside-overlay{height:100dvh;transition:transform var(--rt-aside-animation-duration) ease}.rt-aside-overlay.rt-aside-overlay--entering{transition:none}.rt-aside-overlay--position-right.rt-aside-overlay--entering,.rt-aside-overlay--position-right.rt-aside-overlay--leaving{transform:translate(100%)}.rt-aside-overlay--position-left.rt-aside-overlay--entering,.rt-aside-overlay--position-left.rt-aside-overlay--leaving{transform:translate(-100%)}.rt-aside-overlay--position-right.rt-aside-overlay--open,.rt-aside-overlay--position-left.rt-aside-overlay--open{transform:translate(0)}@media(width<=768px){.rt-aside-overlay{overflow:hidden;width:100dvw;max-width:100dvw}}@media(prefers-reduced-motion:reduce){.rt-aside-overlay{transition:none}}}.cdk-overlay-backdrop.rt-aside-backdrop{opacity:0;pointer-events:none}.cdk-overlay-backdrop.rt-aside-backdrop.rt-aside-backdrop--visible{opacity:1;pointer-events:auto}.rt-aside-overlay:not(.rt-aside-overlay--open){pointer-events:none}@layer rt-kit.components{.rt-container{--rt-container-border-width: var(--rt-border-width-thin);display:grid;min-height:100%;flex:1 1 auto;background-color:var(--rt-color-bg-page);color:var(--rt-color-text-primary);container:rt-place/inline-size;grid-template:\"header header\" auto \"left-sidenav toolbar\" auto \"left-sidenav content\" 1fr/auto 1fr}.rt-container__header{position:sticky;z-index:1;top:0;display:block;grid-area:header}.rt-container__header>.rt-page-header{margin:var(--rt-space-5) var(--rt-space-5) 0}.rt-container__left-sidenav{display:block;padding:var(--rt-space-md);border-right:var(--rt-container-border-width) solid var(--rt-color-border-subtle);background-color:var(--rt-color-bg-surface);grid-area:left-sidenav}.rt-container__toolbar{display:flex;align-items:center;padding:var(--rt-space-sm) var(--rt-space-md);border-bottom:var(--rt-container-border-width) solid var(--rt-color-border-subtle);background-color:var(--rt-color-bg-surface);grid-area:toolbar}.rt-container__toolbar--slot--left{justify-content:flex-start}.rt-container__toolbar--slot--center{justify-content:center}.rt-container__toolbar--slot--right{justify-content:flex-end}.rt-container__content{display:flex;overflow:auto;min-height:0;flex-direction:column;grid-area:content}.rt-container--viewport{block-size:100dvh;min-block-size:0}.rt-container--viewport .rt-container__content{overflow:hidden}.rt-container--viewport .rt-container__left-sidenav{overflow:auto}@media(width<=768px){.rt-container--mobile-left-bottom{grid-template:\"header\" auto \"toolbar\" auto \"content\" 1fr \"left-sidenav\" auto/1fr}.rt-container--mobile-left-bottom .rt-container__left-sidenav{padding:0;border-top:var(--rt-container-border-width) solid var(--rt-color-border-subtle);border-right:none}}}\n"]
742
+ template: "<ng-container rtBlock=\"rt-container\">\n @if (headerTpl(); as tpl) {\n <header rtElem=\"header\" qa-dataid=\"container-header\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </header>\n }\n\n @if (leftSidenavTpl(); as tpl) {\n <aside rtElem=\"left-sidenav\" qa-dataid=\"container-left-sidenav\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </aside>\n }\n\n @if (toolbarLeftTpl(); as tpl) {\n <div rtElem=\"toolbar\" qa-dataid=\"container-toolbar\" data-slot=\"left\" [rtMod]=\"{ slot: 'left' }\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </div>\n }\n\n @if (toolbarCenterTpl(); as tpl) {\n <div rtElem=\"toolbar\" qa-dataid=\"container-toolbar\" data-slot=\"center\" [rtMod]=\"{ slot: 'center' }\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </div>\n }\n\n @if (toolbarRightTpl(); as tpl) {\n <div rtElem=\"toolbar\" qa-dataid=\"container-toolbar\" data-slot=\"right\" [rtMod]=\"{ slot: 'right' }\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </div>\n }\n\n @if (contentTpl(); as tpl) {\n <main rtElem=\"content\" qa-dataid=\"container-content\">\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n </main>\n }\n\n @if (rightSidenavTpl() !== undefined && rightMode() === 'side') {\n <aside\n #rightCell\n rtElem=\"right-sidenav\"\n qa-dataid=\"container-right-sidenav\"\n [rtMod]=\"{ open: rightOpen(), resizing: rightResizing() }\"\n [attr.inert]=\"rightOpen() ? null : ''\"\n [style.--rt-container-right-width.px]=\"rightShownWidth()\">\n <ng-container [ngTemplateOutlet]=\"rightPane\" />\n </aside>\n }\n\n <rt-toaster position=\"bottom-center\" />\n\n <!-- Правая панель с шириной и ручкой: одна разметка для оверлея и для колонки рядом с содержимым. -->\n <ng-template #rightPane>\n <div\n rtElem=\"right-pane\"\n qa-dataid=\"container-right-pane\"\n [rtMod]=\"{ sized: rightShownWidth() !== null }\"\n [style.--rt-container-right-width.px]=\"rightShownWidth()\">\n @if (rightSidenavTpl(); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\" />\n }\n\n @if (rightResizable()) {\n <rt-resize-handle\n edge=\"start\"\n [width]=\"rightShownWidth()\"\n [min]=\"rightMinWidth()\"\n [max]=\"rightMaxWidth()\"\n (widthChange)=\"onRightWidth($event)\"\n (resizing)=\"rightResizing.set($event)\" />\n }\n </div>\n </ng-template>\n</ng-container>\n",
743
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{:root{--rt-aside-animation-duration: .2s;--rt-aside-backdrop-bg: var(--rt-color-bg-overlay);--rt-aside-backdrop-blur: 5px}.cdk-overlay-backdrop.rt-aside-backdrop{-webkit-backdrop-filter:blur(var(--rt-aside-backdrop-blur));backdrop-filter:blur(var(--rt-aside-backdrop-blur));background:var(--rt-aside-backdrop-bg);transition:opacity var(--rt-aside-animation-duration) ease}:is(.rt-preset-material,[data-preset=material]).cdk-overlay-backdrop.rt-aside-backdrop,[data-preset=material] .cdk-overlay-backdrop.rt-aside-backdrop{--rt-aside-backdrop-bg: var(--rt-color-bg-overlay);--rt-aside-backdrop-blur: 0}.rt-aside-overlay{height:100dvh;transition:transform var(--rt-aside-animation-duration) ease}.rt-aside-overlay.rt-aside-overlay--entering{transition:none}.rt-aside-overlay--position-right.rt-aside-overlay--entering,.rt-aside-overlay--position-right.rt-aside-overlay--leaving{transform:translate(100%)}.rt-aside-overlay--position-left.rt-aside-overlay--entering,.rt-aside-overlay--position-left.rt-aside-overlay--leaving{transform:translate(-100%)}.rt-aside-overlay--position-right.rt-aside-overlay--open,.rt-aside-overlay--position-left.rt-aside-overlay--open{transform:translate(0)}@media(width<=768px){.rt-aside-overlay{overflow:hidden;width:100dvw;max-width:100dvw}}@media(prefers-reduced-motion:reduce){.rt-aside-overlay{transition:none}}}.cdk-overlay-backdrop.rt-aside-backdrop{opacity:0;pointer-events:none}.cdk-overlay-backdrop.rt-aside-backdrop.rt-aside-backdrop--visible{opacity:1;pointer-events:auto}.rt-aside-overlay:not(.rt-aside-overlay--open){pointer-events:none}@layer rt-kit.components{.rt-container{--rt-container-border-width: var(--rt-border-width-thin);--rt-container-right-duration: var(--rt-duration-base);display:grid;min-height:100%;flex:1 1 auto;background-color:var(--rt-color-bg-page);color:var(--rt-color-text-primary);container:rt-place/inline-size;grid-template:\"header header header\" auto \"left-sidenav toolbar right-sidenav\" auto \"left-sidenav content right-sidenav\" 1fr/auto 1fr auto}.rt-container__header{position:sticky;z-index:1;top:0;display:block;grid-area:header}.rt-container__header>.rt-page-header{margin:var(--rt-space-5) var(--rt-space-5) 0}.rt-container__left-sidenav{display:block;padding:var(--rt-space-md);border-right:var(--rt-container-border-width) solid var(--rt-color-border-subtle);background-color:var(--rt-color-bg-surface);grid-area:left-sidenav}.rt-container__toolbar{display:flex;align-items:center;padding:var(--rt-space-sm) var(--rt-space-md);border-bottom:var(--rt-container-border-width) solid var(--rt-color-border-subtle);background-color:var(--rt-color-bg-surface);grid-area:toolbar}.rt-container__toolbar--slot--left{justify-content:flex-start}.rt-container__toolbar--slot--center{justify-content:center}.rt-container__toolbar--slot--right{justify-content:flex-end}.rt-container__content{display:flex;overflow:auto;min-height:0;flex-direction:column;grid-area:content}.rt-container__right-sidenav{--rt-container-right-width: auto;display:flex;overflow:clip;min-height:0;border-left:var(--rt-container-border-width) solid var(--rt-color-border-subtle);background-color:var(--rt-color-bg-surface);grid-area:right-sidenav;inline-size:var(--rt-container-right-width);transition:inline-size var(--rt-container-right-duration) ease,visibility 0s linear}.rt-container__right-sidenav:not(.rt-container__right-sidenav--open){border-left-width:0;inline-size:0;transition:inline-size var(--rt-container-right-duration) ease,visibility 0s linear var(--rt-container-right-duration);visibility:hidden}.rt-container__right-sidenav--resizing{transition:none}.rt-container__right-pane{--rt-container-right-width: auto;position:relative;display:flex;overflow:auto;min-height:0;flex:0 0 auto;block-size:100%}.rt-container__right-pane>:not(rt-resize-handle){min-width:0;flex:1 1 auto}.rt-container__right-pane--sized{inline-size:var(--rt-container-right-width)}.cdk-overlay-pane>.rt-container__right-pane{flex-shrink:1}.rt-container--viewport{block-size:100dvh;min-block-size:0}.rt-container--viewport .rt-container__content{overflow:hidden}.rt-container--viewport .rt-container__left-sidenav{overflow:auto}@media(prefers-reduced-motion:reduce){.rt-container__right-sidenav,.rt-container__right-sidenav:not(.rt-container__right-sidenav--open){transition:none}}@media(width<=768px){.rt-container__right-sidenav{grid-column:content;grid-row:toolbar/content;inline-size:auto}.rt-container__right-sidenav .rt-container__right-pane--sized,.cdk-overlay-pane>.rt-container__right-pane--sized{inline-size:100%}.rt-container--mobile-left-bottom{grid-template:\"header\" auto \"toolbar\" auto \"content\" 1fr \"left-sidenav\" auto/1fr}.rt-container--mobile-left-bottom .rt-container__left-sidenav{padding:0;border-top:var(--rt-container-border-width) solid var(--rt-color-border-subtle);border-right:none}}}\n"]
621
744
  }]
622
745
  }],
623
746
  ctorParameters: () => [],
@@ -671,6 +794,17 @@ i0.ɵɵngDeclareClassMetadata({
671
794
  isSignal: true
672
795
  }]
673
796
  }],
797
+ rightPaneTpl: [{
798
+ type: i0.ViewChild,
799
+ args: ["rightPane", {
800
+ read: TemplateRef,
801
+ isSignal: true
802
+ }]
803
+ }],
804
+ rightCell: [{
805
+ type: i0.ViewChild,
806
+ args: ["rightCell", { isSignal: true }]
807
+ }],
674
808
  mobileLeftNav: [{
675
809
  type: i0.Input,
676
810
  args: [{
@@ -687,6 +821,57 @@ i0.ɵɵngDeclareClassMetadata({
687
821
  required: false
688
822
  }]
689
823
  }],
824
+ rightMode: [{
825
+ type: i0.Input,
826
+ args: [{
827
+ isSignal: true,
828
+ alias: "rightMode",
829
+ required: false
830
+ }]
831
+ }],
832
+ rightBackdrop: [{
833
+ type: i0.Input,
834
+ args: [{
835
+ isSignal: true,
836
+ alias: "rightBackdrop",
837
+ required: false
838
+ }]
839
+ }],
840
+ rightWidth: [{
841
+ type: i0.Input,
842
+ args: [{
843
+ isSignal: true,
844
+ alias: "rightWidth",
845
+ required: false
846
+ }]
847
+ }, {
848
+ type: i0.Output,
849
+ args: ["rightWidthChange"]
850
+ }],
851
+ rightResizable: [{
852
+ type: i0.Input,
853
+ args: [{
854
+ isSignal: true,
855
+ alias: "rightResizable",
856
+ required: false
857
+ }]
858
+ }],
859
+ rightMinWidth: [{
860
+ type: i0.Input,
861
+ args: [{
862
+ isSignal: true,
863
+ alias: "rightMinWidth",
864
+ required: false
865
+ }]
866
+ }],
867
+ rightMaxWidth: [{
868
+ type: i0.Input,
869
+ args: [{
870
+ isSignal: true,
871
+ alias: "rightMaxWidth",
872
+ required: false
873
+ }]
874
+ }],
690
875
  backdropClick: [{
691
876
  type: i0.Output,
692
877
  args: ["backdropClick"]