@rt-tools/ui-kit-v2 0.32.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 (220) 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 +114 -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 +9 -6
  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/rich-editor/lib/components/chat/CONTEXT.md +3 -0
  183. package/src/rich-editor/lib/components/chat/rt-chat.component.scss +9 -0
  184. package/src/styles/_color-scheme.scss +1 -1
  185. package/src/styles/_density.scss +48 -0
  186. package/src/styles/_index.scss +8 -0
  187. package/src/styles/_preset-material.scss +160 -70
  188. package/src/styles/_primitives.scss +1 -0
  189. package/src/styles/_semantic-navigation.scss +117 -0
  190. package/src/styles/_semantic.scss +29 -98
  191. package/src/styles/_theme-dark.scss +8 -0
  192. package/styles/tokens.css +2066 -1134
  193. package/types/rt-tools-ui-kit-v2-autocomplete.d.ts +34 -0
  194. package/types/rt-tools-ui-kit-v2-badge.d.ts +71 -0
  195. package/types/rt-tools-ui-kit-v2-checkbox.d.ts +17 -3
  196. package/types/rt-tools-ui-kit-v2-container.d.ts +65 -9
  197. package/types/rt-tools-ui-kit-v2-copy-value.d.ts +11 -1
  198. package/types/rt-tools-ui-kit-v2-core.d.ts +110 -4
  199. package/types/rt-tools-ui-kit-v2-divider.d.ts +29 -0
  200. package/types/rt-tools-ui-kit-v2-drawer.d.ts +257 -0
  201. package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +240 -25
  202. package/types/rt-tools-ui-kit-v2-expansion-panel.d.ts +87 -3
  203. package/types/rt-tools-ui-kit-v2-field.d.ts +18 -1
  204. package/types/rt-tools-ui-kit-v2-form-control.d.ts +42 -4
  205. package/types/rt-tools-ui-kit-v2-icon-button.d.ts +2 -1
  206. package/types/rt-tools-ui-kit-v2-input-number.d.ts +1 -0
  207. package/types/rt-tools-ui-kit-v2-input.d.ts +98 -4
  208. package/types/rt-tools-ui-kit-v2-progress-bar.d.ts +53 -0
  209. package/types/rt-tools-ui-kit-v2-radio-button.d.ts +80 -1
  210. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +5 -2
  211. package/types/rt-tools-ui-kit-v2-select.d.ts +65 -1
  212. package/types/rt-tools-ui-kit-v2-side-menu.d.ts +3 -0
  213. package/types/rt-tools-ui-kit-v2-stepper.d.ts +57 -4
  214. package/types/rt-tools-ui-kit-v2-tabs.d.ts +291 -6
  215. package/types/rt-tools-ui-kit-v2-textarea.d.ts +16 -0
  216. package/types/rt-tools-ui-kit-v2-toast.d.ts +38 -2
  217. package/types/rt-tools-ui-kit-v2-toggle-button-group.d.ts +83 -3
  218. package/types/rt-tools-ui-kit-v2-tooltip.d.ts +17 -2
  219. package/types/rt-tools-ui-kit-v2.d.ts +4 -0
  220. package/src/lib/components/dynamic-selector/stories/component/test-dynamic-selector-popup-frame.component.scss +0 -6
@@ -0,0 +1,854 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, Injector, ViewEncapsulation, afterNextRender, booleanAttribute, computed, effect, inject, input, model, numberAttribute, output, signal, untracked, viewChild } from "@angular/core";
3
+ import { CdkTrapFocus, FocusTrapFactory } from "@angular/cdk/a11y";
4
+ import { DOCUMENT } from "@angular/common";
5
+ import { BlockDirective, ElemDirective, ModDirective } from "@rt-tools/core";
6
+ const FOCUS_PANEL = "";
7
+ const FOCUS_FLAGS = /* @__PURE__ */ new Map([
8
+ ["", true],
9
+ ["true", true],
10
+ ["false", false]
11
+ ]);
12
+ function autoFocusTarget(value, over) {
13
+ if (typeof value === "string" && !FOCUS_FLAGS.has(value)) return value;
14
+ return (typeof value === "string" ? FOCUS_FLAGS.get(value) === true : value ?? true) && over ? "" : null;
15
+ }
16
+ function clampWidth(width, min, max) {
17
+ return Math.min(Math.max(width, min), Math.max(min, max));
18
+ }
19
+ const BEM_BLOCK$2 = "rt-resize-handle";
20
+ const DEFAULT_STEP = 16;
21
+ var RtResizeHandleComponent = class RtResizeHandleComponent {
22
+ constructor() {
23
+ this.#host = inject(ElementRef).nativeElement;
24
+ this.#start = null;
25
+ this.dragging = signal(false, ...ngDevMode ? [{ debugName: "dragging" }] : /* istanbul ignore next */ []);
26
+ this.width = input(null, ...ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []);
27
+ this.min = input(0, {
28
+ ...ngDevMode ? { debugName: "min" } : /* istanbul ignore next */ {},
29
+ transform: numberAttribute
30
+ });
31
+ this.max = input(Number.MAX_SAFE_INTEGER, {
32
+ ...ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {},
33
+ transform: numberAttribute
34
+ });
35
+ this.step = input(DEFAULT_STEP, {
36
+ ...ngDevMode ? { debugName: "step" } : /* istanbul ignore next */ {},
37
+ transform: numberAttribute
38
+ });
39
+ this.edge = input("end", ...ngDevMode ? [{ debugName: "edge" }] : /* istanbul ignore next */ []);
40
+ this.ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
41
+ this.widthChange = output();
42
+ this.resizing = output();
43
+ }
44
+ #host;
45
+ #start;
46
+ startDrag(event) {
47
+ if (event.button !== 0) return;
48
+ event.preventDefault();
49
+ this.#host.setPointerCapture?.(event.pointerId);
50
+ this.#start = {
51
+ pointerId: event.pointerId,
52
+ x: event.clientX,
53
+ width: this.#currentWidth()
54
+ };
55
+ this.dragging.set(true);
56
+ this.resizing.emit(true);
57
+ }
58
+ drag(event) {
59
+ const start = this.#start;
60
+ if (start === null || start.pointerId !== event.pointerId) return;
61
+ const shift = event.clientX - start.x;
62
+ this.#report(start.width + (this.edge() === "start" ? -shift : shift));
63
+ }
64
+ endDrag(event) {
65
+ if (this.#start === null || this.#start.pointerId !== event.pointerId) return;
66
+ this.#host.releasePointerCapture?.(event.pointerId);
67
+ this.#start = null;
68
+ this.dragging.set(false);
69
+ this.resizing.emit(false);
70
+ }
71
+ onLostCapture(event) {
72
+ this.endDrag(event);
73
+ }
74
+ onKeydown(event) {
75
+ const target = this.#keyTarget(event.key);
76
+ if (target === null) return;
77
+ event.preventDefault();
78
+ this.#report(target);
79
+ }
80
+ #keyTarget(key) {
81
+ const grow = this.edge() === "start" ? "ArrowLeft" : "ArrowRight";
82
+ const shrink = this.edge() === "start" ? "ArrowRight" : "ArrowLeft";
83
+ switch (key) {
84
+ case grow: return this.#currentWidth() + this.step();
85
+ case shrink: return this.#currentWidth() - this.step();
86
+ case "Home": return this.min();
87
+ case "End": return this.max();
88
+ default: return null;
89
+ }
90
+ }
91
+ #report(width) {
92
+ const next = Math.round(clampWidth(width, this.min(), this.max()));
93
+ if (next !== this.width()) this.widthChange.emit(next);
94
+ }
95
+ #currentWidth() {
96
+ return this.width() ?? this.#host.parentElement?.getBoundingClientRect().width ?? this.min();
97
+ }
98
+ static {
99
+ this.ɵfac = i0.ɵɵngDeclareFactory({
100
+ minVersion: "12.0.0",
101
+ version: "22.2.2",
102
+ ngImport: i0,
103
+ type: RtResizeHandleComponent,
104
+ deps: [],
105
+ target: i0.ɵɵFactoryTarget.Component
106
+ });
107
+ }
108
+ static {
109
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
110
+ minVersion: "17.1.0",
111
+ version: "22.2.2",
112
+ type: RtResizeHandleComponent,
113
+ isStandalone: true,
114
+ selector: "rt-resize-handle",
115
+ inputs: {
116
+ width: {
117
+ classPropertyName: "width",
118
+ publicName: "width",
119
+ isSignal: true,
120
+ isRequired: false,
121
+ transformFunction: null
122
+ },
123
+ min: {
124
+ classPropertyName: "min",
125
+ publicName: "min",
126
+ isSignal: true,
127
+ isRequired: false,
128
+ transformFunction: null
129
+ },
130
+ max: {
131
+ classPropertyName: "max",
132
+ publicName: "max",
133
+ isSignal: true,
134
+ isRequired: false,
135
+ transformFunction: null
136
+ },
137
+ step: {
138
+ classPropertyName: "step",
139
+ publicName: "step",
140
+ isSignal: true,
141
+ isRequired: false,
142
+ transformFunction: null
143
+ },
144
+ edge: {
145
+ classPropertyName: "edge",
146
+ publicName: "edge",
147
+ isSignal: true,
148
+ isRequired: false,
149
+ transformFunction: null
150
+ },
151
+ ariaLabel: {
152
+ classPropertyName: "ariaLabel",
153
+ publicName: "ariaLabel",
154
+ isSignal: true,
155
+ isRequired: false,
156
+ transformFunction: null
157
+ }
158
+ },
159
+ outputs: {
160
+ widthChange: "widthChange",
161
+ resizing: "resizing"
162
+ },
163
+ host: {
164
+ attributes: {
165
+ "role": "separator",
166
+ "tabindex": "0",
167
+ "qa-dataid": "resize-handle",
168
+ "aria-orientation": "vertical"
169
+ },
170
+ listeners: {
171
+ "pointerdown": "startDrag($event)",
172
+ "pointermove": "drag($event)",
173
+ "pointerup": "endDrag($event)",
174
+ "pointercancel": "endDrag($event)",
175
+ "lostpointercapture": "onLostCapture($event)",
176
+ "keydown": "onKeydown($event)"
177
+ },
178
+ properties: {
179
+ "attr.aria-valuenow": "width()",
180
+ "attr.aria-valuemin": "min()",
181
+ "attr.aria-valuemax": "max()",
182
+ "attr.aria-label": "ariaLabel()",
183
+ "class.rt-resize-handle--edge--start": "edge() === 'start'",
184
+ "class.rt-resize-handle--edge--end": "edge() === 'end'",
185
+ "class.rt-resize-handle--dragging": "dragging()"
186
+ },
187
+ classAttribute: "rt-resize-handle"
188
+ },
189
+ ngImport: i0,
190
+ template: "",
191
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-resize-handle{--rt-resize-handle-hit: var(--rt-space-2);--rt-resize-handle-line: var(--rt-border-width-medium);--rt-resize-handle-color: var(--rt-color-action-primary);--rt-resize-handle-duration: var(--rt-duration-fast);position:absolute;width:var(--rt-resize-handle-hit);cursor:col-resize;inset-block:0;outline:none;touch-action:none}.rt-resize-handle:after{position:absolute;width:var(--rt-resize-handle-line);background-color:transparent;content:\"\";inset-block:0;inset-inline-start:calc(50% - var(--rt-resize-handle-line) / 2);transition:background-color var(--rt-resize-handle-duration) ease}.rt-resize-handle:hover:after,.rt-resize-handle:focus-visible:after,.rt-resize-handle--dragging:after{background-color:var(--rt-resize-handle-color)}.rt-resize-handle--edge--start{inset-inline-start:0}.rt-resize-handle--edge--end{inset-inline-end:0}}\n"],
192
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
193
+ encapsulation: i0.ViewEncapsulation.None
194
+ });
195
+ }
196
+ };
197
+ i0.ɵɵngDeclareClassMetadata({
198
+ minVersion: "12.0.0",
199
+ version: "22.2.2",
200
+ ngImport: i0,
201
+ type: RtResizeHandleComponent,
202
+ decorators: [{
203
+ type: Component,
204
+ args: [{
205
+ selector: "rt-resize-handle",
206
+ changeDetection: ChangeDetectionStrategy.OnPush,
207
+ encapsulation: ViewEncapsulation.None,
208
+ host: {
209
+ class: BEM_BLOCK$2,
210
+ role: "separator",
211
+ tabindex: "0",
212
+ "qa-dataid": "resize-handle",
213
+ "aria-orientation": "vertical",
214
+ "[attr.aria-valuenow]": "width()",
215
+ "[attr.aria-valuemin]": "min()",
216
+ "[attr.aria-valuemax]": "max()",
217
+ "[attr.aria-label]": "ariaLabel()",
218
+ "[class.rt-resize-handle--edge--start]": "edge() === 'start'",
219
+ "[class.rt-resize-handle--edge--end]": "edge() === 'end'",
220
+ "[class.rt-resize-handle--dragging]": "dragging()",
221
+ "(pointerdown)": "startDrag($event)",
222
+ "(pointermove)": "drag($event)",
223
+ "(pointerup)": "endDrag($event)",
224
+ "(pointercancel)": "endDrag($event)",
225
+ "(lostpointercapture)": "onLostCapture($event)",
226
+ "(keydown)": "onKeydown($event)"
227
+ },
228
+ template: "",
229
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-resize-handle{--rt-resize-handle-hit: var(--rt-space-2);--rt-resize-handle-line: var(--rt-border-width-medium);--rt-resize-handle-color: var(--rt-color-action-primary);--rt-resize-handle-duration: var(--rt-duration-fast);position:absolute;width:var(--rt-resize-handle-hit);cursor:col-resize;inset-block:0;outline:none;touch-action:none}.rt-resize-handle:after{position:absolute;width:var(--rt-resize-handle-line);background-color:transparent;content:\"\";inset-block:0;inset-inline-start:calc(50% - var(--rt-resize-handle-line) / 2);transition:background-color var(--rt-resize-handle-duration) ease}.rt-resize-handle:hover:after,.rt-resize-handle:focus-visible:after,.rt-resize-handle--dragging:after{background-color:var(--rt-resize-handle-color)}.rt-resize-handle--edge--start{inset-inline-start:0}.rt-resize-handle--edge--end{inset-inline-end:0}}\n"]
230
+ }]
231
+ }],
232
+ propDecorators: {
233
+ width: [{
234
+ type: i0.Input,
235
+ args: [{
236
+ isSignal: true,
237
+ alias: "width",
238
+ required: false
239
+ }]
240
+ }],
241
+ min: [{
242
+ type: i0.Input,
243
+ args: [{
244
+ isSignal: true,
245
+ alias: "min",
246
+ required: false
247
+ }]
248
+ }],
249
+ max: [{
250
+ type: i0.Input,
251
+ args: [{
252
+ isSignal: true,
253
+ alias: "max",
254
+ required: false
255
+ }]
256
+ }],
257
+ step: [{
258
+ type: i0.Input,
259
+ args: [{
260
+ isSignal: true,
261
+ alias: "step",
262
+ required: false
263
+ }]
264
+ }],
265
+ edge: [{
266
+ type: i0.Input,
267
+ args: [{
268
+ isSignal: true,
269
+ alias: "edge",
270
+ required: false
271
+ }]
272
+ }],
273
+ ariaLabel: [{
274
+ type: i0.Input,
275
+ args: [{
276
+ isSignal: true,
277
+ alias: "ariaLabel",
278
+ required: false
279
+ }]
280
+ }],
281
+ widthChange: [{
282
+ type: i0.Output,
283
+ args: ["widthChange"]
284
+ }],
285
+ resizing: [{
286
+ type: i0.Output,
287
+ args: ["resizing"]
288
+ }]
289
+ }
290
+ });
291
+ const TRANSITION_BUFFER_MS = 80;
292
+ function transitionDurationMs(win, element) {
293
+ const durationCss = win?.getComputedStyle(element).transitionDuration;
294
+ if (durationCss === void 0 || durationCss === "") return 0;
295
+ return durationCss.split(",").reduce((max, part) => {
296
+ const trimmed = part.trim();
297
+ const seconds = trimmed.endsWith("ms") ? Number.parseFloat(trimmed) / 1e3 : Number.parseFloat(trimmed);
298
+ return Number.isNaN(seconds) ? max : Math.max(max, seconds);
299
+ }, 0) * 1e3;
300
+ }
301
+ function listenTransitionEnd(win, element, property, callback) {
302
+ const durationMs = transitionDurationMs(win, element);
303
+ if (durationMs === 0) {
304
+ callback();
305
+ return;
306
+ }
307
+ let settled = false;
308
+ const handler = (event) => {
309
+ if (event.propertyName !== property || event.target !== element || settled) return;
310
+ settled = true;
311
+ element.removeEventListener("transitionend", handler);
312
+ callback();
313
+ };
314
+ element.addEventListener("transitionend", handler);
315
+ setTimeout(() => {
316
+ if (settled) return;
317
+ settled = true;
318
+ element.removeEventListener("transitionend", handler);
319
+ callback();
320
+ }, durationMs + TRANSITION_BUFFER_MS);
321
+ }
322
+ const BEM_BLOCK$1 = "rt-drawer";
323
+ const DEFAULT_WIDTH = 320;
324
+ const DEFAULT_MIN_WIDTH = 200;
325
+ const DEFAULT_MAX_WIDTH = 640;
326
+ var RtDrawerComponent = class RtDrawerComponent {
327
+ #document;
328
+ #injector;
329
+ #focusTrapFactory;
330
+ #announced;
331
+ #turn;
332
+ #destroyed;
333
+ #focusBefore;
334
+ constructor() {
335
+ this.#document = inject(DOCUMENT);
336
+ this.#injector = inject(Injector);
337
+ this.#focusTrapFactory = inject(FocusTrapFactory);
338
+ this.#announced = false;
339
+ this.#turn = 0;
340
+ this.#destroyed = false;
341
+ this.#focusBefore = null;
342
+ this.panel = viewChild.required("panel", ...ngDevMode ? [{ debugName: "panel" }] : /* istanbul ignore next */ []);
343
+ this.resizing = signal(false, ...ngDevMode ? [{ debugName: "resizing" }] : /* istanbul ignore next */ []);
344
+ this.shownWidth = computed(() => {
345
+ const width = this.width();
346
+ return width === null ? null : clampWidth(width, this.minWidth(), this.maxWidth());
347
+ }, ...ngDevMode ? [{ debugName: "shownWidth" }] : /* istanbul ignore next */ []);
348
+ this.autoWidth = computed(() => this.width() === null, ...ngDevMode ? [{ debugName: "autoWidth" }] : /* istanbul ignore next */ []);
349
+ this.handleShown = computed(() => this.resizable() && !this.autoWidth(), ...ngDevMode ? [{ debugName: "handleShown" }] : /* istanbul ignore next */ []);
350
+ this.backdropShown = computed(() => this.mode() === "over" && this.hasBackdrop(), ...ngDevMode ? [{ debugName: "backdropShown" }] : /* istanbul ignore next */ []);
351
+ this.trapFocus = computed(() => this.backdropShown() && this.opened(), ...ngDevMode ? [{ debugName: "trapFocus" }] : /* istanbul ignore next */ []);
352
+ this.handleEdge = computed(() => this.position() === "start" ? "end" : "start", ...ngDevMode ? [{ debugName: "handleEdge" }] : /* istanbul ignore next */ []);
353
+ this.opened = model(false, ...ngDevMode ? [{ debugName: "opened" }] : /* istanbul ignore next */ []);
354
+ this.mode = input("side", ...ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []);
355
+ this.position = input("start", ...ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []);
356
+ this.hasBackdrop = input(true, {
357
+ ...ngDevMode ? { debugName: "hasBackdrop" } : /* istanbul ignore next */ {},
358
+ transform: booleanAttribute
359
+ });
360
+ this.disableClose = input(false, {
361
+ ...ngDevMode ? { debugName: "disableClose" } : /* istanbul ignore next */ {},
362
+ transform: booleanAttribute
363
+ });
364
+ this.width = model(DEFAULT_WIDTH, ...ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []);
365
+ this.minWidth = input(DEFAULT_MIN_WIDTH, {
366
+ ...ngDevMode ? { debugName: "minWidth" } : /* istanbul ignore next */ {},
367
+ transform: numberAttribute
368
+ });
369
+ this.maxWidth = input(DEFAULT_MAX_WIDTH, {
370
+ ...ngDevMode ? { debugName: "maxWidth" } : /* istanbul ignore next */ {},
371
+ transform: numberAttribute
372
+ });
373
+ this.resizable = input(false, {
374
+ ...ngDevMode ? { debugName: "resizable" } : /* istanbul ignore next */ {},
375
+ transform: booleanAttribute
376
+ });
377
+ this.ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
378
+ this.overflow = input("clip", ...ngDevMode ? [{ debugName: "overflow" }] : /* istanbul ignore next */ []);
379
+ this.autoFocus = input(true, ...ngDevMode ? [{ debugName: "autoFocus" }] : /* istanbul ignore next */ []);
380
+ this.openedStart = output();
381
+ this.closedStart = output();
382
+ this.afterOpened = output();
383
+ this.afterClosed = output();
384
+ this.backdropClick = output();
385
+ effect(() => {
386
+ const opened = this.opened();
387
+ untracked(() => {
388
+ if (!this.#announced) {
389
+ this.#announce(opened);
390
+ return;
391
+ }
392
+ if (opened) this.#takeFocus();
393
+ else this.#returnFocus();
394
+ this.#announce(opened);
395
+ });
396
+ });
397
+ inject(DestroyRef).onDestroy(() => {
398
+ this.#destroyed = true;
399
+ });
400
+ }
401
+ open() {
402
+ this.opened.set(true);
403
+ }
404
+ close() {
405
+ this.opened.set(false);
406
+ }
407
+ toggle() {
408
+ this.opened.update((opened) => !opened);
409
+ }
410
+ onBackdrop(event) {
411
+ this.backdropClick.emit(event);
412
+ if (!this.disableClose()) this.close();
413
+ }
414
+ onEscape(event) {
415
+ if (this.mode() !== "over" || this.disableClose() || !this.opened()) return;
416
+ event.stopPropagation();
417
+ this.close();
418
+ }
419
+ onWidth(width) {
420
+ this.width.set(width);
421
+ }
422
+ #takeFocus() {
423
+ const target = autoFocusTarget(this.autoFocus(), this.mode() === "over");
424
+ if (target === null) return;
425
+ const active = this.#document.activeElement;
426
+ this.#focusBefore = active instanceof HTMLElement ? active : null;
427
+ afterNextRender(() => this.#focusInside(target), { injector: this.#injector });
428
+ }
429
+ #focusInside(target) {
430
+ const panel = this.panel().nativeElement;
431
+ if (target === "first-tabbable") {
432
+ const lookup = this.#focusTrapFactory.create(panel);
433
+ const found = lookup.focusFirstTabbableElement({ preventScroll: true });
434
+ lookup.destroy();
435
+ if (!found) panel.focus({ preventScroll: true });
436
+ return;
437
+ }
438
+ ((target === "" ? null : panel.querySelector(target)) ?? panel).focus({ preventScroll: true });
439
+ }
440
+ #announce(opened) {
441
+ if (!this.#announced) {
442
+ this.#announced = true;
443
+ return;
444
+ }
445
+ this.#turn += 1;
446
+ const turn = this.#turn;
447
+ (opened ? this.openedStart : this.closedStart).emit();
448
+ afterNextRender(() => {
449
+ const panel = this.panel().nativeElement;
450
+ const property = this.mode() === "over" ? "transform" : "inline-size";
451
+ listenTransitionEnd(this.#document.defaultView, panel, property, () => {
452
+ if (turn === this.#turn && !this.#destroyed) (opened ? this.afterOpened : this.afterClosed).emit();
453
+ });
454
+ }, { injector: this.#injector });
455
+ }
456
+ #returnFocus() {
457
+ const before = this.#focusBefore;
458
+ const panel = this.panel().nativeElement;
459
+ this.#focusBefore = null;
460
+ if (before !== null && panel.contains(this.#document.activeElement)) before.focus({ preventScroll: true });
461
+ }
462
+ static {
463
+ this.ɵfac = i0.ɵɵngDeclareFactory({
464
+ minVersion: "12.0.0",
465
+ version: "22.2.2",
466
+ ngImport: i0,
467
+ type: RtDrawerComponent,
468
+ deps: [],
469
+ target: i0.ɵɵFactoryTarget.Component
470
+ });
471
+ }
472
+ static {
473
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
474
+ minVersion: "17.0.0",
475
+ version: "22.2.2",
476
+ type: RtDrawerComponent,
477
+ isStandalone: true,
478
+ selector: "rt-drawer",
479
+ inputs: {
480
+ opened: {
481
+ classPropertyName: "opened",
482
+ publicName: "opened",
483
+ isSignal: true,
484
+ isRequired: false,
485
+ transformFunction: null
486
+ },
487
+ mode: {
488
+ classPropertyName: "mode",
489
+ publicName: "mode",
490
+ isSignal: true,
491
+ isRequired: false,
492
+ transformFunction: null
493
+ },
494
+ position: {
495
+ classPropertyName: "position",
496
+ publicName: "position",
497
+ isSignal: true,
498
+ isRequired: false,
499
+ transformFunction: null
500
+ },
501
+ hasBackdrop: {
502
+ classPropertyName: "hasBackdrop",
503
+ publicName: "hasBackdrop",
504
+ isSignal: true,
505
+ isRequired: false,
506
+ transformFunction: null
507
+ },
508
+ disableClose: {
509
+ classPropertyName: "disableClose",
510
+ publicName: "disableClose",
511
+ isSignal: true,
512
+ isRequired: false,
513
+ transformFunction: null
514
+ },
515
+ width: {
516
+ classPropertyName: "width",
517
+ publicName: "width",
518
+ isSignal: true,
519
+ isRequired: false,
520
+ transformFunction: null
521
+ },
522
+ minWidth: {
523
+ classPropertyName: "minWidth",
524
+ publicName: "minWidth",
525
+ isSignal: true,
526
+ isRequired: false,
527
+ transformFunction: null
528
+ },
529
+ maxWidth: {
530
+ classPropertyName: "maxWidth",
531
+ publicName: "maxWidth",
532
+ isSignal: true,
533
+ isRequired: false,
534
+ transformFunction: null
535
+ },
536
+ resizable: {
537
+ classPropertyName: "resizable",
538
+ publicName: "resizable",
539
+ isSignal: true,
540
+ isRequired: false,
541
+ transformFunction: null
542
+ },
543
+ ariaLabel: {
544
+ classPropertyName: "ariaLabel",
545
+ publicName: "ariaLabel",
546
+ isSignal: true,
547
+ isRequired: false,
548
+ transformFunction: null
549
+ },
550
+ overflow: {
551
+ classPropertyName: "overflow",
552
+ publicName: "overflow",
553
+ isSignal: true,
554
+ isRequired: false,
555
+ transformFunction: null
556
+ },
557
+ autoFocus: {
558
+ classPropertyName: "autoFocus",
559
+ publicName: "autoFocus",
560
+ isSignal: true,
561
+ isRequired: false,
562
+ transformFunction: null
563
+ }
564
+ },
565
+ outputs: {
566
+ opened: "openedChange",
567
+ width: "widthChange",
568
+ openedStart: "openedStart",
569
+ closedStart: "closedStart",
570
+ afterOpened: "afterOpened",
571
+ afterClosed: "afterClosed",
572
+ backdropClick: "backdropClick"
573
+ },
574
+ host: {
575
+ attributes: { "qa-dataid": "drawer" },
576
+ classAttribute: "rt-drawer"
577
+ },
578
+ viewQueries: [{
579
+ propertyName: "panel",
580
+ first: true,
581
+ predicate: ["panel"],
582
+ descendants: true,
583
+ isSignal: true
584
+ }],
585
+ ngImport: i0,
586
+ template: "<ng-container rtBlock=\"rt-drawer\">\n @if (backdropShown()) {\n <!-- Подложка закрывается и с клавиатуры: Escape в панели, которая держит фокус. Своя клавиша\n у подложки была бы второй точкой фокуса без названия. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div rtElem=\"backdrop\" qa-dataid=\"drawer-backdrop\" [rtMod]=\"{ visible: opened() }\" (click)=\"onBackdrop($event)\"></div>\n }\n\n <aside\n #panel\n rtElem=\"panel\"\n qa-dataid=\"drawer-panel\"\n tabindex=\"-1\"\n [cdkTrapFocus]=\"trapFocus()\"\n [rtMod]=\"{\n mode: mode(),\n position: position(),\n opened: opened(),\n resizing: resizing(),\n overflow: overflow(),\n 'auto-width': autoWidth(),\n }\"\n [attr.inert]=\"opened() ? null : ''\"\n [attr.aria-label]=\"ariaLabel()\"\n [style.--rt-drawer-width.px]=\"shownWidth()\"\n (keydown.escape)=\"onEscape($event)\">\n <div rtElem=\"inner\">\n <ng-content />\n </div>\n\n @if (handleShown()) {\n <rt-resize-handle\n [width]=\"shownWidth()\"\n [min]=\"minWidth()\"\n [max]=\"maxWidth()\"\n [edge]=\"handleEdge()\"\n [ariaLabel]=\"ariaLabel()\"\n (widthChange)=\"onWidth($event)\"\n (resizing)=\"resizing.set($event)\" />\n }\n </aside>\n</ng-container>\n",
587
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-drawer{display:contents}.rt-drawer__panel{--rt-drawer-width: var(--rt-size-64);--rt-drawer-bg: var(--rt-color-bg-surface);--rt-drawer-border-width: var(--rt-border-width-thin);--rt-drawer-border-color: var(--rt-color-border-subtle);--rt-drawer-shadow: var(--rt-shadow-lg);--rt-drawer-side-shadow: none;--rt-drawer-duration: var(--rt-duration-base);--rt-drawer-z-index: auto;--rt-drawer-over-z-index: var(--rt-z-modal);position:relative;z-index:var(--rt-drawer-z-index);display:flex;overflow:clip;min-height:0;flex:0 0 auto;background-color:var(--rt-drawer-bg);inline-size:var(--rt-drawer-width);outline:none;transition:inline-size var(--rt-drawer-duration) ease,transform var(--rt-drawer-duration) ease,visibility 0s linear}.rt-drawer__panel--position--start{order:-1}.rt-drawer__panel--position--end{order:1}.rt-drawer__panel--mode--side{box-shadow:var(--rt-drawer-side-shadow)}.rt-drawer__panel--mode--side.rt-drawer__panel--position--start{border-inline-end:var(--rt-drawer-border-width) solid var(--rt-drawer-border-color)}.rt-drawer__panel--mode--side.rt-drawer__panel--position--end{border-inline-start:var(--rt-drawer-border-width) solid var(--rt-drawer-border-color)}.rt-drawer__panel--mode--over{position:absolute;z-index:var(--rt-drawer-over-z-index);box-shadow:var(--rt-drawer-shadow);inset-block:0}.rt-drawer__panel--mode--over.rt-drawer__panel--position--start{inset-inline-start:0}.rt-drawer__panel--mode--over.rt-drawer__panel--position--end{inset-inline-end:0}.rt-drawer__panel--overflow--visible.rt-drawer__panel--opened{overflow:visible}.rt-drawer__panel--auto-width{inline-size:fit-content}.rt-drawer__panel:not(.rt-drawer__panel--opened){transition:inline-size var(--rt-drawer-duration) ease,transform var(--rt-drawer-duration) ease,visibility 0s linear var(--rt-drawer-duration);visibility:hidden}.rt-drawer__panel--mode--side:not(.rt-drawer__panel--opened){border-width:0;inline-size:0}.rt-drawer__panel--mode--over.rt-drawer__panel--position--start:not(.rt-drawer__panel--opened){transform:translate(-100%)}.rt-drawer__panel--mode--over.rt-drawer__panel--position--end:not(.rt-drawer__panel--opened){transform:translate(100%)}.rt-drawer__panel--mode--over.rt-drawer__panel--position--start:not(.rt-drawer__panel--opened):dir(rtl){transform:translate(100%)}.rt-drawer__panel--mode--over.rt-drawer__panel--position--end:not(.rt-drawer__panel--opened):dir(rtl){transform:translate(-100%)}.rt-drawer__panel--resizing{transition:none}.rt-drawer__inner{overflow:auto;min-width:0;flex:0 0 var(--rt-drawer-width)}.rt-drawer__panel--overflow--visible.rt-drawer__panel--opened>.rt-drawer__inner{overflow:visible}.rt-drawer__panel--auto-width>.rt-drawer__inner{flex-basis:auto}.rt-drawer__backdrop{--rt-drawer-backdrop-bg: var(--rt-color-bg-overlay);--rt-drawer-backdrop-duration: var(--rt-duration-base);--rt-drawer-backdrop-z-index: var(--rt-z-modal-backdrop);position:absolute;z-index:var(--rt-drawer-backdrop-z-index);background:var(--rt-drawer-backdrop-bg);inset:0;opacity:0;pointer-events:none;transition:opacity var(--rt-drawer-backdrop-duration) ease}.rt-drawer__backdrop--visible{opacity:1;pointer-events:auto}@media(prefers-reduced-motion:reduce){.rt-drawer__panel,.rt-drawer__panel:not(.rt-drawer__panel--opened),.rt-drawer__backdrop{transition:none}}}\n"],
588
+ dependencies: [
589
+ {
590
+ kind: "directive",
591
+ type: CdkTrapFocus,
592
+ selector: "[cdkTrapFocus]",
593
+ inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"],
594
+ exportAs: ["cdkTrapFocus"]
595
+ },
596
+ {
597
+ kind: "directive",
598
+ type: BlockDirective,
599
+ selector: "[rtBlock]",
600
+ inputs: ["rtMod"]
601
+ },
602
+ {
603
+ kind: "directive",
604
+ type: ElemDirective,
605
+ selector: "[rtElem]",
606
+ inputs: ["rtMod"]
607
+ },
608
+ {
609
+ kind: "directive",
610
+ type: ModDirective,
611
+ selector: "[rtMod]"
612
+ },
613
+ {
614
+ kind: "component",
615
+ type: RtResizeHandleComponent,
616
+ selector: "rt-resize-handle",
617
+ inputs: [
618
+ "width",
619
+ "min",
620
+ "max",
621
+ "step",
622
+ "edge",
623
+ "ariaLabel"
624
+ ],
625
+ outputs: ["widthChange", "resizing"]
626
+ }
627
+ ],
628
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
629
+ encapsulation: i0.ViewEncapsulation.None
630
+ });
631
+ }
632
+ };
633
+ i0.ɵɵngDeclareClassMetadata({
634
+ minVersion: "12.0.0",
635
+ version: "22.2.2",
636
+ ngImport: i0,
637
+ type: RtDrawerComponent,
638
+ decorators: [{
639
+ type: Component,
640
+ args: [{
641
+ selector: "rt-drawer",
642
+ changeDetection: ChangeDetectionStrategy.OnPush,
643
+ encapsulation: ViewEncapsulation.None,
644
+ imports: [
645
+ CdkTrapFocus,
646
+ BlockDirective,
647
+ ElemDirective,
648
+ ModDirective,
649
+ RtResizeHandleComponent
650
+ ],
651
+ host: {
652
+ class: BEM_BLOCK$1,
653
+ "qa-dataid": "drawer"
654
+ },
655
+ template: "<ng-container rtBlock=\"rt-drawer\">\n @if (backdropShown()) {\n <!-- Подложка закрывается и с клавиатуры: Escape в панели, которая держит фокус. Своя клавиша\n у подложки была бы второй точкой фокуса без названия. -->\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n <div rtElem=\"backdrop\" qa-dataid=\"drawer-backdrop\" [rtMod]=\"{ visible: opened() }\" (click)=\"onBackdrop($event)\"></div>\n }\n\n <aside\n #panel\n rtElem=\"panel\"\n qa-dataid=\"drawer-panel\"\n tabindex=\"-1\"\n [cdkTrapFocus]=\"trapFocus()\"\n [rtMod]=\"{\n mode: mode(),\n position: position(),\n opened: opened(),\n resizing: resizing(),\n overflow: overflow(),\n 'auto-width': autoWidth(),\n }\"\n [attr.inert]=\"opened() ? null : ''\"\n [attr.aria-label]=\"ariaLabel()\"\n [style.--rt-drawer-width.px]=\"shownWidth()\"\n (keydown.escape)=\"onEscape($event)\">\n <div rtElem=\"inner\">\n <ng-content />\n </div>\n\n @if (handleShown()) {\n <rt-resize-handle\n [width]=\"shownWidth()\"\n [min]=\"minWidth()\"\n [max]=\"maxWidth()\"\n [edge]=\"handleEdge()\"\n [ariaLabel]=\"ariaLabel()\"\n (widthChange)=\"onWidth($event)\"\n (resizing)=\"resizing.set($event)\" />\n }\n </aside>\n</ng-container>\n",
656
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-drawer{display:contents}.rt-drawer__panel{--rt-drawer-width: var(--rt-size-64);--rt-drawer-bg: var(--rt-color-bg-surface);--rt-drawer-border-width: var(--rt-border-width-thin);--rt-drawer-border-color: var(--rt-color-border-subtle);--rt-drawer-shadow: var(--rt-shadow-lg);--rt-drawer-side-shadow: none;--rt-drawer-duration: var(--rt-duration-base);--rt-drawer-z-index: auto;--rt-drawer-over-z-index: var(--rt-z-modal);position:relative;z-index:var(--rt-drawer-z-index);display:flex;overflow:clip;min-height:0;flex:0 0 auto;background-color:var(--rt-drawer-bg);inline-size:var(--rt-drawer-width);outline:none;transition:inline-size var(--rt-drawer-duration) ease,transform var(--rt-drawer-duration) ease,visibility 0s linear}.rt-drawer__panel--position--start{order:-1}.rt-drawer__panel--position--end{order:1}.rt-drawer__panel--mode--side{box-shadow:var(--rt-drawer-side-shadow)}.rt-drawer__panel--mode--side.rt-drawer__panel--position--start{border-inline-end:var(--rt-drawer-border-width) solid var(--rt-drawer-border-color)}.rt-drawer__panel--mode--side.rt-drawer__panel--position--end{border-inline-start:var(--rt-drawer-border-width) solid var(--rt-drawer-border-color)}.rt-drawer__panel--mode--over{position:absolute;z-index:var(--rt-drawer-over-z-index);box-shadow:var(--rt-drawer-shadow);inset-block:0}.rt-drawer__panel--mode--over.rt-drawer__panel--position--start{inset-inline-start:0}.rt-drawer__panel--mode--over.rt-drawer__panel--position--end{inset-inline-end:0}.rt-drawer__panel--overflow--visible.rt-drawer__panel--opened{overflow:visible}.rt-drawer__panel--auto-width{inline-size:fit-content}.rt-drawer__panel:not(.rt-drawer__panel--opened){transition:inline-size var(--rt-drawer-duration) ease,transform var(--rt-drawer-duration) ease,visibility 0s linear var(--rt-drawer-duration);visibility:hidden}.rt-drawer__panel--mode--side:not(.rt-drawer__panel--opened){border-width:0;inline-size:0}.rt-drawer__panel--mode--over.rt-drawer__panel--position--start:not(.rt-drawer__panel--opened){transform:translate(-100%)}.rt-drawer__panel--mode--over.rt-drawer__panel--position--end:not(.rt-drawer__panel--opened){transform:translate(100%)}.rt-drawer__panel--mode--over.rt-drawer__panel--position--start:not(.rt-drawer__panel--opened):dir(rtl){transform:translate(100%)}.rt-drawer__panel--mode--over.rt-drawer__panel--position--end:not(.rt-drawer__panel--opened):dir(rtl){transform:translate(-100%)}.rt-drawer__panel--resizing{transition:none}.rt-drawer__inner{overflow:auto;min-width:0;flex:0 0 var(--rt-drawer-width)}.rt-drawer__panel--overflow--visible.rt-drawer__panel--opened>.rt-drawer__inner{overflow:visible}.rt-drawer__panel--auto-width>.rt-drawer__inner{flex-basis:auto}.rt-drawer__backdrop{--rt-drawer-backdrop-bg: var(--rt-color-bg-overlay);--rt-drawer-backdrop-duration: var(--rt-duration-base);--rt-drawer-backdrop-z-index: var(--rt-z-modal-backdrop);position:absolute;z-index:var(--rt-drawer-backdrop-z-index);background:var(--rt-drawer-backdrop-bg);inset:0;opacity:0;pointer-events:none;transition:opacity var(--rt-drawer-backdrop-duration) ease}.rt-drawer__backdrop--visible{opacity:1;pointer-events:auto}@media(prefers-reduced-motion:reduce){.rt-drawer__panel,.rt-drawer__panel:not(.rt-drawer__panel--opened),.rt-drawer__backdrop{transition:none}}}\n"]
657
+ }]
658
+ }],
659
+ ctorParameters: () => [],
660
+ propDecorators: {
661
+ panel: [{
662
+ type: i0.ViewChild,
663
+ args: ["panel", { isSignal: true }]
664
+ }],
665
+ opened: [{
666
+ type: i0.Input,
667
+ args: [{
668
+ isSignal: true,
669
+ alias: "opened",
670
+ required: false
671
+ }]
672
+ }, {
673
+ type: i0.Output,
674
+ args: ["openedChange"]
675
+ }],
676
+ mode: [{
677
+ type: i0.Input,
678
+ args: [{
679
+ isSignal: true,
680
+ alias: "mode",
681
+ required: false
682
+ }]
683
+ }],
684
+ position: [{
685
+ type: i0.Input,
686
+ args: [{
687
+ isSignal: true,
688
+ alias: "position",
689
+ required: false
690
+ }]
691
+ }],
692
+ hasBackdrop: [{
693
+ type: i0.Input,
694
+ args: [{
695
+ isSignal: true,
696
+ alias: "hasBackdrop",
697
+ required: false
698
+ }]
699
+ }],
700
+ disableClose: [{
701
+ type: i0.Input,
702
+ args: [{
703
+ isSignal: true,
704
+ alias: "disableClose",
705
+ required: false
706
+ }]
707
+ }],
708
+ width: [{
709
+ type: i0.Input,
710
+ args: [{
711
+ isSignal: true,
712
+ alias: "width",
713
+ required: false
714
+ }]
715
+ }, {
716
+ type: i0.Output,
717
+ args: ["widthChange"]
718
+ }],
719
+ minWidth: [{
720
+ type: i0.Input,
721
+ args: [{
722
+ isSignal: true,
723
+ alias: "minWidth",
724
+ required: false
725
+ }]
726
+ }],
727
+ maxWidth: [{
728
+ type: i0.Input,
729
+ args: [{
730
+ isSignal: true,
731
+ alias: "maxWidth",
732
+ required: false
733
+ }]
734
+ }],
735
+ resizable: [{
736
+ type: i0.Input,
737
+ args: [{
738
+ isSignal: true,
739
+ alias: "resizable",
740
+ required: false
741
+ }]
742
+ }],
743
+ ariaLabel: [{
744
+ type: i0.Input,
745
+ args: [{
746
+ isSignal: true,
747
+ alias: "ariaLabel",
748
+ required: false
749
+ }]
750
+ }],
751
+ overflow: [{
752
+ type: i0.Input,
753
+ args: [{
754
+ isSignal: true,
755
+ alias: "overflow",
756
+ required: false
757
+ }]
758
+ }],
759
+ autoFocus: [{
760
+ type: i0.Input,
761
+ args: [{
762
+ isSignal: true,
763
+ alias: "autoFocus",
764
+ required: false
765
+ }]
766
+ }],
767
+ openedStart: [{
768
+ type: i0.Output,
769
+ args: ["openedStart"]
770
+ }],
771
+ closedStart: [{
772
+ type: i0.Output,
773
+ args: ["closedStart"]
774
+ }],
775
+ afterOpened: [{
776
+ type: i0.Output,
777
+ args: ["afterOpened"]
778
+ }],
779
+ afterClosed: [{
780
+ type: i0.Output,
781
+ args: ["afterClosed"]
782
+ }],
783
+ backdropClick: [{
784
+ type: i0.Output,
785
+ args: ["backdropClick"]
786
+ }]
787
+ }
788
+ });
789
+ const BEM_BLOCK = "rt-drawer-container";
790
+ var RtDrawerContainerComponent = class RtDrawerContainerComponent {
791
+ static {
792
+ this.ɵfac = i0.ɵɵngDeclareFactory({
793
+ minVersion: "12.0.0",
794
+ version: "22.2.2",
795
+ ngImport: i0,
796
+ type: RtDrawerContainerComponent,
797
+ deps: [],
798
+ target: i0.ɵɵFactoryTarget.Component
799
+ });
800
+ }
801
+ static {
802
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
803
+ minVersion: "14.0.0",
804
+ version: "22.2.2",
805
+ type: RtDrawerContainerComponent,
806
+ isStandalone: true,
807
+ selector: "rt-drawer-container",
808
+ host: {
809
+ attributes: { "qa-dataid": "drawer-container" },
810
+ classAttribute: "rt-drawer-container"
811
+ },
812
+ ngImport: i0,
813
+ template: "<!-- Содержимое идёт в разметке первым: панели после него рисуются поверх его узлов с положением.\n На экране порядок задают сами панели — у каждой свой край строки. -->\n<ng-container rtBlock=\"rt-drawer-container\">\n <div rtElem=\"content\" qa-dataid=\"drawer-container-content\">\n <ng-content />\n </div>\n <ng-content select=\"rt-drawer\" />\n</ng-container>\n",
814
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-drawer-container{position:relative;display:flex;overflow:hidden;min-height:0;isolation:isolate}.rt-drawer-container__content{overflow:auto;min-width:0;flex:1 1 auto}}\n"],
815
+ dependencies: [{
816
+ kind: "directive",
817
+ type: BlockDirective,
818
+ selector: "[rtBlock]",
819
+ inputs: ["rtMod"]
820
+ }, {
821
+ kind: "directive",
822
+ type: ElemDirective,
823
+ selector: "[rtElem]",
824
+ inputs: ["rtMod"]
825
+ }],
826
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
827
+ encapsulation: i0.ViewEncapsulation.None
828
+ });
829
+ }
830
+ };
831
+ i0.ɵɵngDeclareClassMetadata({
832
+ minVersion: "12.0.0",
833
+ version: "22.2.2",
834
+ ngImport: i0,
835
+ type: RtDrawerContainerComponent,
836
+ decorators: [{
837
+ type: Component,
838
+ args: [{
839
+ selector: "rt-drawer-container",
840
+ changeDetection: ChangeDetectionStrategy.OnPush,
841
+ encapsulation: ViewEncapsulation.None,
842
+ imports: [BlockDirective, ElemDirective],
843
+ host: {
844
+ class: BEM_BLOCK,
845
+ "qa-dataid": "drawer-container"
846
+ },
847
+ template: "<!-- Содержимое идёт в разметке первым: панели после него рисуются поверх его узлов с положением.\n На экране порядок задают сами панели — у каждой свой край строки. -->\n<ng-container rtBlock=\"rt-drawer-container\">\n <div rtElem=\"content\" qa-dataid=\"drawer-container-content\">\n <ng-content />\n </div>\n <ng-content select=\"rt-drawer\" />\n</ng-container>\n",
848
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-drawer-container{position:relative;display:flex;overflow:hidden;min-height:0;isolation:isolate}.rt-drawer-container__content{overflow:auto;min-width:0;flex:1 1 auto}}\n"]
849
+ }]
850
+ }]
851
+ });
852
+ export { FOCUS_PANEL, RtDrawerComponent, RtDrawerContainerComponent, RtResizeHandleComponent, autoFocusTarget, clampWidth, listenTransitionEnd, transitionDurationMs };
853
+
854
+ //# sourceMappingURL=rt-tools-ui-kit-v2-drawer.mjs.map