@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
@@ -1,11 +1,49 @@
1
1
  import * as i0 from "@angular/core";
2
- import { ChangeDetectionStrategy, Component, Directive, TemplateRef, ViewEncapsulation, booleanAttribute, computed, contentChild, inject, input, model } from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, DestroyRef, Directive, InjectionToken, TemplateRef, ViewEncapsulation, booleanAttribute, computed, contentChildren, effect, forwardRef, inject, input, model, signal, untracked } from "@angular/core";
3
3
  import { NgTemplateOutlet } from "@angular/common";
4
4
  import { BlockDirective, ElemDirective, ModDirective } from "@rt-tools/core";
5
5
  import { RtIconComponent } from "@rt-tools/ui-kit-v2/icon";
6
+ const RT_EXPANSION_PANEL_OWNER = new InjectionToken("RT_EXPANSION_PANEL_OWNER");
7
+ const RT_EXPANSION_PANEL_GROUP = new InjectionToken("RT_EXPANSION_PANEL_GROUP");
8
+ var RtExpansionPanelActionsDirective = class RtExpansionPanelActionsDirective {
9
+ constructor() {
10
+ this.owner = inject(RT_EXPANSION_PANEL_OWNER, { optional: true });
11
+ }
12
+ static {
13
+ this.ɵfac = i0.ɵɵngDeclareFactory({
14
+ minVersion: "12.0.0",
15
+ version: "22.2.2",
16
+ ngImport: i0,
17
+ type: RtExpansionPanelActionsDirective,
18
+ deps: [],
19
+ target: i0.ɵɵFactoryTarget.Directive
20
+ });
21
+ }
22
+ static {
23
+ this.ɵdir = i0.ɵɵngDeclareDirective({
24
+ minVersion: "14.0.0",
25
+ version: "22.2.2",
26
+ type: RtExpansionPanelActionsDirective,
27
+ isStandalone: true,
28
+ selector: "[rtExpansionPanelActions]",
29
+ ngImport: i0
30
+ });
31
+ }
32
+ };
33
+ i0.ɵɵngDeclareClassMetadata({
34
+ minVersion: "12.0.0",
35
+ version: "22.2.2",
36
+ ngImport: i0,
37
+ type: RtExpansionPanelActionsDirective,
38
+ decorators: [{
39
+ type: Directive,
40
+ args: [{ selector: "[rtExpansionPanelActions]" }]
41
+ }]
42
+ });
6
43
  var RtExpansionPanelContentDirective = class RtExpansionPanelContentDirective {
7
44
  constructor() {
8
45
  this.templateRef = inject(TemplateRef);
46
+ this.owner = inject(RT_EXPANSION_PANEL_OWNER, { optional: true });
9
47
  }
10
48
  static {
11
49
  this.ɵfac = i0.ɵɵngDeclareFactory({
@@ -38,6 +76,81 @@ i0.ɵɵngDeclareClassMetadata({
38
76
  args: [{ selector: "ng-template[rtExpansionPanelContent]" }]
39
77
  }]
40
78
  });
79
+ var RtExpansionPanelGroupDirective = class RtExpansionPanelGroupDirective {
80
+ constructor() {
81
+ this.#panels = /* @__PURE__ */ new Set();
82
+ this.multi = input(false, {
83
+ ...ngDevMode ? { debugName: "multi" } : /* istanbul ignore next */ {},
84
+ transform: booleanAttribute
85
+ });
86
+ }
87
+ #panels;
88
+ register(panel) {
89
+ this.#panels.add(panel);
90
+ }
91
+ unregister(panel) {
92
+ this.#panels.delete(panel);
93
+ }
94
+ opened(panel) {
95
+ if (this.multi()) return;
96
+ for (const other of this.#panels) if (other !== panel && other.expanded()) other.expanded.set(false);
97
+ }
98
+ static {
99
+ this.ɵfac = i0.ɵɵngDeclareFactory({
100
+ minVersion: "12.0.0",
101
+ version: "22.2.2",
102
+ ngImport: i0,
103
+ type: RtExpansionPanelGroupDirective,
104
+ deps: [],
105
+ target: i0.ɵɵFactoryTarget.Directive
106
+ });
107
+ }
108
+ static {
109
+ this.ɵdir = i0.ɵɵngDeclareDirective({
110
+ minVersion: "17.1.0",
111
+ version: "22.2.2",
112
+ type: RtExpansionPanelGroupDirective,
113
+ isStandalone: true,
114
+ selector: "[rtExpansionPanelGroup]",
115
+ inputs: { multi: {
116
+ classPropertyName: "multi",
117
+ publicName: "multi",
118
+ isSignal: true,
119
+ isRequired: false,
120
+ transformFunction: null
121
+ } },
122
+ providers: [{
123
+ provide: RT_EXPANSION_PANEL_GROUP,
124
+ useExisting: forwardRef(() => RtExpansionPanelGroupDirective)
125
+ }],
126
+ ngImport: i0
127
+ });
128
+ }
129
+ };
130
+ i0.ɵɵngDeclareClassMetadata({
131
+ minVersion: "12.0.0",
132
+ version: "22.2.2",
133
+ ngImport: i0,
134
+ type: RtExpansionPanelGroupDirective,
135
+ decorators: [{
136
+ type: Directive,
137
+ args: [{
138
+ selector: "[rtExpansionPanelGroup]",
139
+ providers: [{
140
+ provide: RT_EXPANSION_PANEL_GROUP,
141
+ useExisting: forwardRef(() => RtExpansionPanelGroupDirective)
142
+ }]
143
+ }]
144
+ }],
145
+ propDecorators: { multi: [{
146
+ type: i0.Input,
147
+ args: [{
148
+ isSignal: true,
149
+ alias: "multi",
150
+ required: false
151
+ }]
152
+ }] }
153
+ });
41
154
  const BEM_BLOCK = "rt-expansion-panel";
42
155
  let expansionPanelIdSeed = 0;
43
156
  function nextExpansionPanelId() {
@@ -45,10 +158,28 @@ function nextExpansionPanelId() {
45
158
  return expansionPanelIdSeed;
46
159
  }
47
160
  var RtExpansionPanelComponent = class RtExpansionPanelComponent {
161
+ #idBase;
162
+ #group;
163
+ #everExpanded;
48
164
  constructor() {
49
165
  this.#idBase = `rt-expansion-panel-${nextExpansionPanelId()}`;
50
- this.lazyContent = contentChild(RtExpansionPanelContentDirective, ...ngDevMode ? [{ debugName: "lazyContent" }] : /* istanbul ignore next */ []);
166
+ this.#group = inject(RT_EXPANSION_PANEL_GROUP, {
167
+ optional: true,
168
+ skipSelf: true
169
+ });
170
+ this.#everExpanded = signal(false, ...ngDevMode ? [{ debugName: "#everExpanded" }] : /* istanbul ignore next */ []);
171
+ this.lazyContents = contentChildren(RtExpansionPanelContentDirective, {
172
+ ...ngDevMode ? { debugName: "lazyContents" } : /* istanbul ignore next */ {},
173
+ descendants: true
174
+ });
175
+ this.allActions = contentChildren(RtExpansionPanelActionsDirective, {
176
+ ...ngDevMode ? { debugName: "allActions" } : /* istanbul ignore next */ {},
177
+ descendants: true
178
+ });
179
+ this.lazyContent = computed(() => this.lazyContents().find((content) => content.owner === this), ...ngDevMode ? [{ debugName: "lazyContent" }] : /* istanbul ignore next */ []);
51
180
  this.bodyId = `${this.#idBase}-body`;
181
+ this.actions = computed(() => this.allActions().find((action) => action.owner === this), ...ngDevMode ? [{ debugName: "actions" }] : /* istanbul ignore next */ []);
182
+ this.bodyRendered = computed(() => this.expanded() || this.preserveContent() && this.#everExpanded(), ...ngDevMode ? [{ debugName: "bodyRendered" }] : /* istanbul ignore next */ []);
52
183
  this.headerDomId = computed(() => this.headerId() ?? `${this.#idBase}-header`, ...ngDevMode ? [{ debugName: "headerDomId" }] : /* istanbul ignore next */ []);
53
184
  this.expanded = model(false, ...ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []);
54
185
  this.disabled = input(false, {
@@ -62,8 +193,19 @@ var RtExpansionPanelComponent = class RtExpansionPanelComponent {
62
193
  this.appearance = input("card", ...ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []);
63
194
  this.headerId = input(null, ...ngDevMode ? [{ debugName: "headerId" }] : /* istanbul ignore next */ []);
64
195
  this.ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
196
+ this.preserveContent = input(false, {
197
+ ...ngDevMode ? { debugName: "preserveContent" } : /* istanbul ignore next */ {},
198
+ transform: booleanAttribute
199
+ });
200
+ this.#group?.register(this);
201
+ inject(DestroyRef).onDestroy(() => this.#group?.unregister(this));
202
+ effect(() => {
203
+ if (this.expanded()) untracked(() => {
204
+ this.#everExpanded.set(true);
205
+ this.#group?.opened(this);
206
+ });
207
+ });
65
208
  }
66
- #idBase;
67
209
  toggle() {
68
210
  if (!this.disabled()) this.expanded.set(!this.expanded());
69
211
  }
@@ -126,6 +268,13 @@ var RtExpansionPanelComponent = class RtExpansionPanelComponent {
126
268
  isSignal: true,
127
269
  isRequired: false,
128
270
  transformFunction: null
271
+ },
272
+ preserveContent: {
273
+ classPropertyName: "preserveContent",
274
+ publicName: "preserveContent",
275
+ isSignal: true,
276
+ isRequired: false,
277
+ transformFunction: null
129
278
  }
130
279
  },
131
280
  outputs: { expanded: "expandedChange" },
@@ -133,20 +282,32 @@ var RtExpansionPanelComponent = class RtExpansionPanelComponent {
133
282
  properties: {
134
283
  "class.rt-expansion-panel--plain": "appearance() === \"plain\"",
135
284
  "class.rt-expansion-panel--expanded": "expanded()",
136
- "class.rt-expansion-panel--disabled": "disabled()"
285
+ "class.rt-expansion-panel--disabled": "disabled()",
286
+ "class.rt-expansion-panel--with-actions": "!!actions()"
137
287
  },
138
288
  classAttribute: "rt-expansion-panel"
139
289
  },
290
+ providers: [{
291
+ provide: RT_EXPANSION_PANEL_GROUP,
292
+ useValue: null
293
+ }, {
294
+ provide: RT_EXPANSION_PANEL_OWNER,
295
+ useExisting: forwardRef(() => RtExpansionPanelComponent)
296
+ }],
140
297
  queries: [{
141
- propertyName: "lazyContent",
142
- first: true,
298
+ propertyName: "lazyContents",
143
299
  predicate: RtExpansionPanelContentDirective,
144
300
  descendants: true,
145
301
  isSignal: true
302
+ }, {
303
+ propertyName: "allActions",
304
+ predicate: RtExpansionPanelActionsDirective,
305
+ descendants: true,
306
+ isSignal: true
146
307
  }],
147
308
  ngImport: i0,
148
- template: "<ng-container rtBlock=\"rt-expansion-panel\">\n <button\n type=\"button\"\n rtElem=\"header\"\n qa-dataid=\"expansion-panel-header\"\n [id]=\"headerDomId()\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"expanded() ? bodyId : null\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"toggle()\">\n <ng-content />\n\n @if (!hideToggle()) {\n <!-- Шеврон — в обёртке: ширину столбца держит она, значок свою ширину ставит сам. -->\n <span rtElem=\"chevron\" aria-hidden=\"true\" [rtMod]=\"{ open: expanded() }\"><rt-icon size=\"sm\" name=\"chevron-down\" /></span>\n }\n </button>\n\n @if (expanded()) {\n <!-- Сворачивание доигрывает движение: класс ухода сводит высоту к нулю, и тело уходит после. -->\n <div\n rtElem=\"body\"\n role=\"region\"\n qa-dataid=\"expansion-panel-body\"\n animate.leave=\"rt-expansion-panel__body--leaving\"\n [id]=\"bodyId\"\n [attr.aria-labelledby]=\"headerDomId()\">\n <ng-content select=\"[rtExpansionPanelBody]\" />\n\n @if (lazyContent(); as content) {\n <ng-container [ngTemplateOutlet]=\"content.templateRef\" />\n }\n </div>\n }\n</ng-container>\n",
149
- styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-expansion-panel{--rt-expansion-panel-radius: var(--rt-radius-md);--rt-expansion-panel-shadow: var(--rt-shadow-sm);--rt-expansion-panel-duration: var(--rt-duration-base);--rt-expansion-panel-bg: var(--rt-color-bg-surface);--rt-expansion-panel-header-min-height: var(--rt-control-height-lg);--rt-expansion-panel-header-padding-block: var(--rt-space-sm);--rt-expansion-panel-header-padding-start: var(--rt-space-lg);--rt-expansion-panel-header-padding-end: var(--rt-space-md);--rt-expansion-panel-header-gap: var(--rt-space-sm);--rt-expansion-panel-header-radius: var(--rt-radius-md);--rt-expansion-panel-header-bg: transparent;--rt-expansion-panel-header-hover-bg: var(--rt-color-bg-hover);--rt-expansion-panel-header-color: var(--rt-color-text-primary);--rt-expansion-panel-header-font-size: var(--rt-text-md);--rt-expansion-panel-header-font-weight: var(--rt-font-weight-medium);--rt-expansion-panel-chevron-size: var(--rt-control-height-sm);--rt-expansion-panel-chevron-color: var(--rt-color-text-muted);--rt-expansion-panel-body-padding-inline: var(--rt-space-lg);--rt-expansion-panel-body-padding-end: var(--rt-space-md);display:block;width:100%;box-sizing:border-box;border-radius:var(--rt-expansion-panel-radius);background:var(--rt-expansion-panel-bg);box-shadow:var(--rt-expansion-panel-shadow);color:var(--rt-color-text-primary)}.rt-expansion-panel--plain{--rt-expansion-panel-radius: var(--rt-radius-none);--rt-expansion-panel-shadow: var(--rt-shadow-none);--rt-expansion-panel-bg: transparent;--rt-expansion-panel-header-min-height: var(--rt-control-height-md);--rt-expansion-panel-header-padding-start: var(--rt-space-0);--rt-expansion-panel-header-padding-end: var(--rt-space-0);--rt-expansion-panel-header-font-size: var(--rt-text-sm);--rt-expansion-panel-header-font-weight: var(--rt-font-weight-regular);--rt-expansion-panel-body-padding-inline: var(--rt-space-0);--rt-expansion-panel-body-padding-end: var(--rt-space-0)}.rt-expansion-panel__header{display:flex;width:100%;min-height:var(--rt-expansion-panel-header-min-height);box-sizing:border-box;align-items:center;border:0;border-radius:var(--rt-expansion-panel-header-radius);background:var(--rt-expansion-panel-header-bg);color:var(--rt-expansion-panel-header-color);cursor:pointer;font:inherit;font-size:var(--rt-expansion-panel-header-font-size);font-weight:var(--rt-expansion-panel-header-font-weight);gap:var(--rt-expansion-panel-header-gap);padding-block:var(--rt-expansion-panel-header-padding-block);padding-inline:var(--rt-expansion-panel-header-padding-start) var(--rt-expansion-panel-header-padding-end);text-align:start;transition:background-color var(--rt-expansion-panel-duration) ease}.rt-expansion-panel__header:hover:not(:disabled){background:var(--rt-expansion-panel-header-hover-bg)}.rt-expansion-panel__header:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:calc(var(--rt-focus-ring-width) * -1)}.rt-expansion-panel__header:disabled{color:var(--rt-color-text-disabled);cursor:default}.rt-expansion-panel__chevron{display:inline-flex;flex-shrink:0;justify-content:center;color:var(--rt-expansion-panel-chevron-color);inline-size:var(--rt-expansion-panel-chevron-size);margin-inline-start:auto;transition:transform var(--rt-expansion-panel-duration) ease}.rt-expansion-panel__chevron--open{transform:rotate(180deg)}.rt-expansion-panel__body{overflow:hidden;height:auto;interpolate-size:allow-keywords;padding-block-end:var(--rt-expansion-panel-body-padding-end);padding-inline:var(--rt-expansion-panel-body-padding-inline);transition:height var(--rt-expansion-panel-duration) ease,padding-block-end var(--rt-expansion-panel-duration) ease}@starting-style{.rt-expansion-panel__body{height:0;padding-block-end:0}}.rt-expansion-panel__body--leaving{height:0;padding-block-end:0}@media(prefers-reduced-motion:reduce){.rt-expansion-panel__body{transition:none}}.rt-expansion-panel--disabled .rt-expansion-panel__chevron{color:var(--rt-color-text-disabled)}}\n"],
309
+ template: "<ng-container rtBlock=\"rt-expansion-panel\">\n <!-- Строка заголовка: кнопка-переключатель, а при действиях — они и шеврон после неё. Действия\n вне кнопки: кнопка внутри кнопки недопустима, и нажатие по действию не раскрывает панель. -->\n <div rtElem=\"head\">\n <button\n type=\"button\"\n rtElem=\"header\"\n qa-dataid=\"expansion-panel-header\"\n [id]=\"headerDomId()\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"bodyRendered() ? bodyId : null\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"toggle()\">\n <ng-content />\n\n @if (!hideToggle() && !actions()) {\n <!-- Шеврон — в обёртке: ширину столбца держит она, значок свою ширину ставит сам. -->\n <span rtElem=\"chevron\" aria-hidden=\"true\" [rtMod]=\"{ open: expanded() }\"><rt-icon size=\"sm\" name=\"chevron-down\" /></span>\n }\n </button>\n\n @if (actions()) {\n <div rtElem=\"actions\" qa-dataid=\"expansion-panel-actions\">\n <ng-content select=\"[rtExpansionPanelActions]\" />\n </div>\n\n @if (!hideToggle()) {\n <!-- Шеврон вне кнопки нажимается мышью; с клавиатуры панель раскрывает сама кнопка. -->\n <span\n rtElem=\"chevron\"\n qa-dataid=\"expansion-panel-chevron\"\n aria-hidden=\"true\"\n [rtMod]=\"{ open: expanded(), outside: true }\"\n (click)=\"toggle()\">\n <rt-icon size=\"sm\" name=\"chevron-down\" />\n </span>\n }\n }\n </div>\n\n @if (bodyRendered()) {\n <!-- Сворачивание доигрывает движение: класс ухода сводит высоту к нулю, и тело уходит после. -->\n <div\n rtElem=\"body\"\n role=\"region\"\n qa-dataid=\"expansion-panel-body\"\n animate.leave=\"rt-expansion-panel__body--leaving\"\n [rtMod]=\"{ collapsed: !expanded() }\"\n [attr.inert]=\"expanded() ? null : ''\"\n [id]=\"bodyId\"\n [attr.aria-labelledby]=\"headerDomId()\">\n <ng-content select=\"[rtExpansionPanelBody]\" />\n\n @if (lazyContent(); as content) {\n <ng-container [ngTemplateOutlet]=\"content.templateRef\" />\n }\n </div>\n }\n</ng-container>\n",
310
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-expansion-panel{--rt-expansion-panel-radius: var(--rt-radius-md);--rt-expansion-panel-shadow: var(--rt-shadow-sm);--rt-expansion-panel-duration: var(--rt-duration-base);--rt-expansion-panel-bg: var(--rt-color-bg-surface);--rt-expansion-panel-header-min-height: var(--rt-control-height-lg);--rt-expansion-panel-header-padding-block: var(--rt-space-sm);--rt-expansion-panel-header-padding-start: var(--rt-space-lg);--rt-expansion-panel-header-padding-end: var(--rt-space-md);--rt-expansion-panel-header-gap: var(--rt-space-sm);--rt-expansion-panel-header-radius: var(--rt-radius-md);--rt-expansion-panel-header-bg: transparent;--rt-expansion-panel-header-hover-bg: var(--rt-color-bg-hover);--rt-expansion-panel-header-color: var(--rt-color-text-primary);--rt-expansion-panel-header-font-size: var(--rt-text-md);--rt-expansion-panel-header-font-weight: var(--rt-font-weight-medium);--rt-expansion-panel-chevron-size: var(--rt-control-height-sm);--rt-expansion-panel-chevron-color: var(--rt-color-text-muted);--rt-expansion-panel-body-padding-inline: var(--rt-space-lg);--rt-expansion-panel-body-padding-end: var(--rt-space-md);--rt-expansion-panel-actions-gap: var(--rt-space-xs);--rt-expansion-panel-box-sizing: border-box;display:block;width:100%;box-sizing:var(--rt-expansion-panel-box-sizing);border-radius:var(--rt-expansion-panel-radius);background:var(--rt-expansion-panel-bg);box-shadow:var(--rt-expansion-panel-shadow);color:var(--rt-color-text-primary)}.rt-expansion-panel--plain{--rt-expansion-panel-radius: var(--rt-radius-none);--rt-expansion-panel-shadow: var(--rt-shadow-none);--rt-expansion-panel-bg: transparent;--rt-expansion-panel-header-min-height: var(--rt-control-height-md);--rt-expansion-panel-header-padding-start: var(--rt-space-0);--rt-expansion-panel-header-padding-end: var(--rt-space-0);--rt-expansion-panel-header-font-size: var(--rt-text-sm);--rt-expansion-panel-header-font-weight: var(--rt-font-weight-regular);--rt-expansion-panel-body-padding-inline: var(--rt-space-0);--rt-expansion-panel-body-padding-end: var(--rt-space-0)}.rt-expansion-panel__head{display:flex;align-items:center;border-radius:var(--rt-expansion-panel-header-radius);transition:background-color var(--rt-expansion-panel-duration) ease}.rt-expansion-panel--with-actions .rt-expansion-panel__head{background:var(--rt-expansion-panel-header-bg);gap:var(--rt-expansion-panel-header-gap);padding-inline-end:var(--rt-expansion-panel-header-padding-end)}.rt-expansion-panel--with-actions .rt-expansion-panel__head:hover{background:var(--rt-expansion-panel-header-hover-bg)}.rt-expansion-panel--with-actions .rt-expansion-panel__header{min-width:0;flex:1 1 auto;padding-inline-end:var(--rt-space-0)}.rt-expansion-panel--with-actions .rt-expansion-panel__header:hover:not(:disabled){background:transparent}.rt-expansion-panel__actions{display:inline-flex;flex-shrink:0;align-items:center;gap:var(--rt-expansion-panel-actions-gap)}.rt-expansion-panel__header{display:flex;width:100%;min-height:var(--rt-expansion-panel-header-min-height);box-sizing:border-box;align-items:center;border:0;border-radius:var(--rt-expansion-panel-header-radius);background:var(--rt-expansion-panel-header-bg);color:var(--rt-expansion-panel-header-color);cursor:pointer;font:inherit;font-size:var(--rt-expansion-panel-header-font-size);font-weight:var(--rt-expansion-panel-header-font-weight);gap:var(--rt-expansion-panel-header-gap);padding-block:var(--rt-expansion-panel-header-padding-block);padding-inline:var(--rt-expansion-panel-header-padding-start) var(--rt-expansion-panel-header-padding-end);text-align:start;transition:background-color var(--rt-expansion-panel-duration) ease}.rt-expansion-panel__header:hover:not(:disabled){background:var(--rt-expansion-panel-header-hover-bg)}.rt-expansion-panel__header:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:calc(var(--rt-focus-ring-width) * -1)}.rt-expansion-panel__header:disabled{color:var(--rt-color-text-disabled);cursor:default}.rt-expansion-panel__chevron{display:inline-flex;flex-shrink:0;justify-content:center;color:var(--rt-expansion-panel-chevron-color);inline-size:var(--rt-expansion-panel-chevron-size);margin-inline-start:auto;transition:transform var(--rt-expansion-panel-duration) ease}.rt-expansion-panel__chevron--open{transform:rotate(180deg)}.rt-expansion-panel__chevron--outside{cursor:pointer;margin-inline-start:0}.rt-expansion-panel__body{overflow:hidden;height:auto;box-sizing:var(--rt-expansion-panel-body-box-sizing, inherit);font-size:var(--rt-expansion-panel-body-font-size);interpolate-size:allow-keywords;line-height:var(--rt-expansion-panel-body-line-height);padding-block-end:var(--rt-expansion-panel-body-padding-end);padding-inline:var(--rt-expansion-panel-body-padding-inline);transition:height var(--rt-expansion-panel-duration) ease,padding-block-end var(--rt-expansion-panel-duration) ease}@starting-style{.rt-expansion-panel__body{height:0;padding-block-end:0}}.rt-expansion-panel__body--leaving{height:0;padding-block-end:0}.rt-expansion-panel__body--collapsed{height:0;padding-block-end:0;transition:height var(--rt-expansion-panel-duration) ease,padding-block-end var(--rt-expansion-panel-duration) ease,visibility 0s linear var(--rt-expansion-panel-duration);visibility:hidden}@media(prefers-reduced-motion:reduce){.rt-expansion-panel__body{transition:none}}.rt-expansion-panel--disabled .rt-expansion-panel__chevron{color:var(--rt-color-text-disabled)}}\n"],
150
311
  dependencies: [
151
312
  {
152
313
  kind: "directive",
@@ -218,16 +379,35 @@ i0.ɵɵngDeclareClassMetadata({
218
379
  class: BEM_BLOCK,
219
380
  "[class.rt-expansion-panel--plain]": "appearance() === \"plain\"",
220
381
  "[class.rt-expansion-panel--expanded]": "expanded()",
221
- "[class.rt-expansion-panel--disabled]": "disabled()"
382
+ "[class.rt-expansion-panel--disabled]": "disabled()",
383
+ "[class.rt-expansion-panel--with-actions]": "!!actions()"
222
384
  },
223
- template: "<ng-container rtBlock=\"rt-expansion-panel\">\n <button\n type=\"button\"\n rtElem=\"header\"\n qa-dataid=\"expansion-panel-header\"\n [id]=\"headerDomId()\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"expanded() ? bodyId : null\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"toggle()\">\n <ng-content />\n\n @if (!hideToggle()) {\n <!-- Шеврон — в обёртке: ширину столбца держит она, значок свою ширину ставит сам. -->\n <span rtElem=\"chevron\" aria-hidden=\"true\" [rtMod]=\"{ open: expanded() }\"><rt-icon size=\"sm\" name=\"chevron-down\" /></span>\n }\n </button>\n\n @if (expanded()) {\n <!-- Сворачивание доигрывает движение: класс ухода сводит высоту к нулю, и тело уходит после. -->\n <div\n rtElem=\"body\"\n role=\"region\"\n qa-dataid=\"expansion-panel-body\"\n animate.leave=\"rt-expansion-panel__body--leaving\"\n [id]=\"bodyId\"\n [attr.aria-labelledby]=\"headerDomId()\">\n <ng-content select=\"[rtExpansionPanelBody]\" />\n\n @if (lazyContent(); as content) {\n <ng-container [ngTemplateOutlet]=\"content.templateRef\" />\n }\n </div>\n }\n</ng-container>\n",
224
- styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-expansion-panel{--rt-expansion-panel-radius: var(--rt-radius-md);--rt-expansion-panel-shadow: var(--rt-shadow-sm);--rt-expansion-panel-duration: var(--rt-duration-base);--rt-expansion-panel-bg: var(--rt-color-bg-surface);--rt-expansion-panel-header-min-height: var(--rt-control-height-lg);--rt-expansion-panel-header-padding-block: var(--rt-space-sm);--rt-expansion-panel-header-padding-start: var(--rt-space-lg);--rt-expansion-panel-header-padding-end: var(--rt-space-md);--rt-expansion-panel-header-gap: var(--rt-space-sm);--rt-expansion-panel-header-radius: var(--rt-radius-md);--rt-expansion-panel-header-bg: transparent;--rt-expansion-panel-header-hover-bg: var(--rt-color-bg-hover);--rt-expansion-panel-header-color: var(--rt-color-text-primary);--rt-expansion-panel-header-font-size: var(--rt-text-md);--rt-expansion-panel-header-font-weight: var(--rt-font-weight-medium);--rt-expansion-panel-chevron-size: var(--rt-control-height-sm);--rt-expansion-panel-chevron-color: var(--rt-color-text-muted);--rt-expansion-panel-body-padding-inline: var(--rt-space-lg);--rt-expansion-panel-body-padding-end: var(--rt-space-md);display:block;width:100%;box-sizing:border-box;border-radius:var(--rt-expansion-panel-radius);background:var(--rt-expansion-panel-bg);box-shadow:var(--rt-expansion-panel-shadow);color:var(--rt-color-text-primary)}.rt-expansion-panel--plain{--rt-expansion-panel-radius: var(--rt-radius-none);--rt-expansion-panel-shadow: var(--rt-shadow-none);--rt-expansion-panel-bg: transparent;--rt-expansion-panel-header-min-height: var(--rt-control-height-md);--rt-expansion-panel-header-padding-start: var(--rt-space-0);--rt-expansion-panel-header-padding-end: var(--rt-space-0);--rt-expansion-panel-header-font-size: var(--rt-text-sm);--rt-expansion-panel-header-font-weight: var(--rt-font-weight-regular);--rt-expansion-panel-body-padding-inline: var(--rt-space-0);--rt-expansion-panel-body-padding-end: var(--rt-space-0)}.rt-expansion-panel__header{display:flex;width:100%;min-height:var(--rt-expansion-panel-header-min-height);box-sizing:border-box;align-items:center;border:0;border-radius:var(--rt-expansion-panel-header-radius);background:var(--rt-expansion-panel-header-bg);color:var(--rt-expansion-panel-header-color);cursor:pointer;font:inherit;font-size:var(--rt-expansion-panel-header-font-size);font-weight:var(--rt-expansion-panel-header-font-weight);gap:var(--rt-expansion-panel-header-gap);padding-block:var(--rt-expansion-panel-header-padding-block);padding-inline:var(--rt-expansion-panel-header-padding-start) var(--rt-expansion-panel-header-padding-end);text-align:start;transition:background-color var(--rt-expansion-panel-duration) ease}.rt-expansion-panel__header:hover:not(:disabled){background:var(--rt-expansion-panel-header-hover-bg)}.rt-expansion-panel__header:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:calc(var(--rt-focus-ring-width) * -1)}.rt-expansion-panel__header:disabled{color:var(--rt-color-text-disabled);cursor:default}.rt-expansion-panel__chevron{display:inline-flex;flex-shrink:0;justify-content:center;color:var(--rt-expansion-panel-chevron-color);inline-size:var(--rt-expansion-panel-chevron-size);margin-inline-start:auto;transition:transform var(--rt-expansion-panel-duration) ease}.rt-expansion-panel__chevron--open{transform:rotate(180deg)}.rt-expansion-panel__body{overflow:hidden;height:auto;interpolate-size:allow-keywords;padding-block-end:var(--rt-expansion-panel-body-padding-end);padding-inline:var(--rt-expansion-panel-body-padding-inline);transition:height var(--rt-expansion-panel-duration) ease,padding-block-end var(--rt-expansion-panel-duration) ease}@starting-style{.rt-expansion-panel__body{height:0;padding-block-end:0}}.rt-expansion-panel__body--leaving{height:0;padding-block-end:0}@media(prefers-reduced-motion:reduce){.rt-expansion-panel__body{transition:none}}.rt-expansion-panel--disabled .rt-expansion-panel__chevron{color:var(--rt-color-text-disabled)}}\n"]
385
+ providers: [{
386
+ provide: RT_EXPANSION_PANEL_GROUP,
387
+ useValue: null
388
+ }, {
389
+ provide: RT_EXPANSION_PANEL_OWNER,
390
+ useExisting: forwardRef(() => RtExpansionPanelComponent)
391
+ }],
392
+ template: "<ng-container rtBlock=\"rt-expansion-panel\">\n <!-- Строка заголовка: кнопка-переключатель, а при действиях — они и шеврон после неё. Действия\n вне кнопки: кнопка внутри кнопки недопустима, и нажатие по действию не раскрывает панель. -->\n <div rtElem=\"head\">\n <button\n type=\"button\"\n rtElem=\"header\"\n qa-dataid=\"expansion-panel-header\"\n [id]=\"headerDomId()\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"bodyRendered() ? bodyId : null\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"toggle()\">\n <ng-content />\n\n @if (!hideToggle() && !actions()) {\n <!-- Шеврон — в обёртке: ширину столбца держит она, значок свою ширину ставит сам. -->\n <span rtElem=\"chevron\" aria-hidden=\"true\" [rtMod]=\"{ open: expanded() }\"><rt-icon size=\"sm\" name=\"chevron-down\" /></span>\n }\n </button>\n\n @if (actions()) {\n <div rtElem=\"actions\" qa-dataid=\"expansion-panel-actions\">\n <ng-content select=\"[rtExpansionPanelActions]\" />\n </div>\n\n @if (!hideToggle()) {\n <!-- Шеврон вне кнопки нажимается мышью; с клавиатуры панель раскрывает сама кнопка. -->\n <span\n rtElem=\"chevron\"\n qa-dataid=\"expansion-panel-chevron\"\n aria-hidden=\"true\"\n [rtMod]=\"{ open: expanded(), outside: true }\"\n (click)=\"toggle()\">\n <rt-icon size=\"sm\" name=\"chevron-down\" />\n </span>\n }\n }\n </div>\n\n @if (bodyRendered()) {\n <!-- Сворачивание доигрывает движение: класс ухода сводит высоту к нулю, и тело уходит после. -->\n <div\n rtElem=\"body\"\n role=\"region\"\n qa-dataid=\"expansion-panel-body\"\n animate.leave=\"rt-expansion-panel__body--leaving\"\n [rtMod]=\"{ collapsed: !expanded() }\"\n [attr.inert]=\"expanded() ? null : ''\"\n [id]=\"bodyId\"\n [attr.aria-labelledby]=\"headerDomId()\">\n <ng-content select=\"[rtExpansionPanelBody]\" />\n\n @if (lazyContent(); as content) {\n <ng-container [ngTemplateOutlet]=\"content.templateRef\" />\n }\n </div>\n }\n</ng-container>\n",
393
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-expansion-panel{--rt-expansion-panel-radius: var(--rt-radius-md);--rt-expansion-panel-shadow: var(--rt-shadow-sm);--rt-expansion-panel-duration: var(--rt-duration-base);--rt-expansion-panel-bg: var(--rt-color-bg-surface);--rt-expansion-panel-header-min-height: var(--rt-control-height-lg);--rt-expansion-panel-header-padding-block: var(--rt-space-sm);--rt-expansion-panel-header-padding-start: var(--rt-space-lg);--rt-expansion-panel-header-padding-end: var(--rt-space-md);--rt-expansion-panel-header-gap: var(--rt-space-sm);--rt-expansion-panel-header-radius: var(--rt-radius-md);--rt-expansion-panel-header-bg: transparent;--rt-expansion-panel-header-hover-bg: var(--rt-color-bg-hover);--rt-expansion-panel-header-color: var(--rt-color-text-primary);--rt-expansion-panel-header-font-size: var(--rt-text-md);--rt-expansion-panel-header-font-weight: var(--rt-font-weight-medium);--rt-expansion-panel-chevron-size: var(--rt-control-height-sm);--rt-expansion-panel-chevron-color: var(--rt-color-text-muted);--rt-expansion-panel-body-padding-inline: var(--rt-space-lg);--rt-expansion-panel-body-padding-end: var(--rt-space-md);--rt-expansion-panel-actions-gap: var(--rt-space-xs);--rt-expansion-panel-box-sizing: border-box;display:block;width:100%;box-sizing:var(--rt-expansion-panel-box-sizing);border-radius:var(--rt-expansion-panel-radius);background:var(--rt-expansion-panel-bg);box-shadow:var(--rt-expansion-panel-shadow);color:var(--rt-color-text-primary)}.rt-expansion-panel--plain{--rt-expansion-panel-radius: var(--rt-radius-none);--rt-expansion-panel-shadow: var(--rt-shadow-none);--rt-expansion-panel-bg: transparent;--rt-expansion-panel-header-min-height: var(--rt-control-height-md);--rt-expansion-panel-header-padding-start: var(--rt-space-0);--rt-expansion-panel-header-padding-end: var(--rt-space-0);--rt-expansion-panel-header-font-size: var(--rt-text-sm);--rt-expansion-panel-header-font-weight: var(--rt-font-weight-regular);--rt-expansion-panel-body-padding-inline: var(--rt-space-0);--rt-expansion-panel-body-padding-end: var(--rt-space-0)}.rt-expansion-panel__head{display:flex;align-items:center;border-radius:var(--rt-expansion-panel-header-radius);transition:background-color var(--rt-expansion-panel-duration) ease}.rt-expansion-panel--with-actions .rt-expansion-panel__head{background:var(--rt-expansion-panel-header-bg);gap:var(--rt-expansion-panel-header-gap);padding-inline-end:var(--rt-expansion-panel-header-padding-end)}.rt-expansion-panel--with-actions .rt-expansion-panel__head:hover{background:var(--rt-expansion-panel-header-hover-bg)}.rt-expansion-panel--with-actions .rt-expansion-panel__header{min-width:0;flex:1 1 auto;padding-inline-end:var(--rt-space-0)}.rt-expansion-panel--with-actions .rt-expansion-panel__header:hover:not(:disabled){background:transparent}.rt-expansion-panel__actions{display:inline-flex;flex-shrink:0;align-items:center;gap:var(--rt-expansion-panel-actions-gap)}.rt-expansion-panel__header{display:flex;width:100%;min-height:var(--rt-expansion-panel-header-min-height);box-sizing:border-box;align-items:center;border:0;border-radius:var(--rt-expansion-panel-header-radius);background:var(--rt-expansion-panel-header-bg);color:var(--rt-expansion-panel-header-color);cursor:pointer;font:inherit;font-size:var(--rt-expansion-panel-header-font-size);font-weight:var(--rt-expansion-panel-header-font-weight);gap:var(--rt-expansion-panel-header-gap);padding-block:var(--rt-expansion-panel-header-padding-block);padding-inline:var(--rt-expansion-panel-header-padding-start) var(--rt-expansion-panel-header-padding-end);text-align:start;transition:background-color var(--rt-expansion-panel-duration) ease}.rt-expansion-panel__header:hover:not(:disabled){background:var(--rt-expansion-panel-header-hover-bg)}.rt-expansion-panel__header:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:calc(var(--rt-focus-ring-width) * -1)}.rt-expansion-panel__header:disabled{color:var(--rt-color-text-disabled);cursor:default}.rt-expansion-panel__chevron{display:inline-flex;flex-shrink:0;justify-content:center;color:var(--rt-expansion-panel-chevron-color);inline-size:var(--rt-expansion-panel-chevron-size);margin-inline-start:auto;transition:transform var(--rt-expansion-panel-duration) ease}.rt-expansion-panel__chevron--open{transform:rotate(180deg)}.rt-expansion-panel__chevron--outside{cursor:pointer;margin-inline-start:0}.rt-expansion-panel__body{overflow:hidden;height:auto;box-sizing:var(--rt-expansion-panel-body-box-sizing, inherit);font-size:var(--rt-expansion-panel-body-font-size);interpolate-size:allow-keywords;line-height:var(--rt-expansion-panel-body-line-height);padding-block-end:var(--rt-expansion-panel-body-padding-end);padding-inline:var(--rt-expansion-panel-body-padding-inline);transition:height var(--rt-expansion-panel-duration) ease,padding-block-end var(--rt-expansion-panel-duration) ease}@starting-style{.rt-expansion-panel__body{height:0;padding-block-end:0}}.rt-expansion-panel__body--leaving{height:0;padding-block-end:0}.rt-expansion-panel__body--collapsed{height:0;padding-block-end:0;transition:height var(--rt-expansion-panel-duration) ease,padding-block-end var(--rt-expansion-panel-duration) ease,visibility 0s linear var(--rt-expansion-panel-duration);visibility:hidden}@media(prefers-reduced-motion:reduce){.rt-expansion-panel__body{transition:none}}.rt-expansion-panel--disabled .rt-expansion-panel__chevron{color:var(--rt-color-text-disabled)}}\n"]
225
394
  }]
226
395
  }],
396
+ ctorParameters: () => [],
227
397
  propDecorators: {
228
- lazyContent: [{
229
- type: i0.ContentChild,
230
- args: [i0.forwardRef(() => RtExpansionPanelContentDirective), { isSignal: true }]
398
+ lazyContents: [{
399
+ type: i0.ContentChildren,
400
+ args: [i0.forwardRef(() => RtExpansionPanelContentDirective), {
401
+ descendants: true,
402
+ isSignal: true
403
+ }]
404
+ }],
405
+ allActions: [{
406
+ type: i0.ContentChildren,
407
+ args: [i0.forwardRef(() => RtExpansionPanelActionsDirective), {
408
+ descendants: true,
409
+ isSignal: true
410
+ }]
231
411
  }],
232
412
  expanded: [{
233
413
  type: i0.Input,
@@ -279,9 +459,17 @@ i0.ɵɵngDeclareClassMetadata({
279
459
  alias: "ariaLabel",
280
460
  required: false
281
461
  }]
462
+ }],
463
+ preserveContent: [{
464
+ type: i0.Input,
465
+ args: [{
466
+ isSignal: true,
467
+ alias: "preserveContent",
468
+ required: false
469
+ }]
282
470
  }]
283
471
  }
284
472
  });
285
- export { RtExpansionPanelComponent, RtExpansionPanelContentDirective };
473
+ export { RT_EXPANSION_PANEL_GROUP, RT_EXPANSION_PANEL_OWNER, RtExpansionPanelActionsDirective, RtExpansionPanelComponent, RtExpansionPanelContentDirective, RtExpansionPanelGroupDirective };
286
474
 
287
475
  //# sourceMappingURL=rt-tools-ui-kit-v2-expansion-panel.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rt-tools-ui-kit-v2-expansion-panel.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/expansion-panel/rt-expansion-panel-content.directive.ts","../../../projects/ui-kit-v2/src/lib/components/expansion-panel/rt-expansion-panel.component.ts","../../../projects/ui-kit-v2/src/lib/components/expansion-panel/rt-expansion-panel.component.html"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Тело `rt-expansion-panel`, собираемое лениво: ставится на `<ng-template>` внутри панели, и его\n * содержимое создаётся при раскрытии и уходит после сворачивания. Сворачивание при этом доигрывает\n * движение до конца: тело уходит вместе со своим содержимым, а не пустым.\n */\n@Directive({\n selector: 'ng-template[rtExpansionPanelContent]',\n})\nexport class RtExpansionPanelContentDirective {\n public readonly templateRef: TemplateRef<unknown> = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n InputSignal,\n InputSignalWithTransform,\n model,\n ModelSignal,\n Signal,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtExpansionPanelContentDirective } from './rt-expansion-panel-content.directive';\nimport { IRtExpansionPanel } from './rt-expansion-panel.model';\n\nconst BEM_BLOCK: string = 'rt-expansion-panel';\n\nlet expansionPanelIdSeed: number = 0;\n\nfunction nextExpansionPanelId(): number {\n expansionPanelIdSeed += 1;\n return expansionPanelIdSeed;\n}\n\n/**\n * Раскрывающаяся панель: заголовок-кнопка во всю ширину с шевроном у правого края и тело под ним.\n * Нажатие на заголовок раскрывает и сворачивает тело, раскрытие и сворачивание идут с движением.\n * Заменяет во втором ките панель раскрытия Material первого кита.\n *\n * Заголовок — содержимое панели без отметки. Тело — узел с `rtExpansionPanelBody`, созданный сразу,\n * или `<ng-template rtExpansionPanelContent>`, созданный при раскрытии.\n *\n * Состояние раскрытия — `expanded`, двусторонняя привязка: панель пишет в него сама, а владелец\n * может держать его в своём сигнале и менять извне.\n */\n@Component({\n selector: 'rt-expansion-panel',\n templateUrl: './rt-expansion-panel.component.html',\n styleUrl: './rt-expansion-panel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n NgTemplateOutlet,\n\n // directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n\n // components\n RtIconComponent,\n ],\n host: {\n class: BEM_BLOCK,\n '[class.rt-expansion-panel--plain]': 'appearance() === \"plain\"',\n '[class.rt-expansion-panel--expanded]': 'expanded()',\n '[class.rt-expansion-panel--disabled]': 'disabled()',\n },\n})\nexport class RtExpansionPanelComponent {\n /** Основа id: две панели на одной странице не ссылаются на чужое тело. */\n readonly #idBase: string = `rt-expansion-panel-${nextExpansionPanelId()}`;\n\n /** Ленивое тело: шаблон создаётся при раскрытии. */\n protected readonly lazyContent: Signal<RtExpansionPanelContentDirective | undefined> = contentChild(RtExpansionPanelContentDirective);\n protected readonly bodyId: string = `${this.#idBase}-body`;\n protected readonly headerDomId: Signal<string> = computed((): string => this.headerId() ?? `${this.#idBase}-header`);\n\n /** Тело раскрыто. Двусторонняя привязка: нажатие на заголовок пишет сюда. */\n public readonly expanded: ModelSignal<boolean> = model<boolean>(false);\n\n /** Заголовок не нажимается, тело остаётся как было. */\n public readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n\n /** Шеврона нет: раскрытие читается по содержимому или его нечего раскрывать. */\n public readonly hideToggle: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n\n public readonly appearance: InputSignal<IRtExpansionPanel.Appearance> = input<IRtExpansionPanel.Appearance>('card');\n\n /** Id кнопки заголовка. Нужен владельцу, который ищет заголовок по своему номеру; иначе — свой. */\n public readonly headerId: InputSignal<string | null> = input<string | null>(null);\n\n /** Имя кнопки заголовка для вспомогательных средств, когда видимой подписи мало. */\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** Нажатие на заголовок: раскрывает свёрнутую панель и сворачивает раскрытую. */\n public toggle(): void {\n if (!this.disabled()) {\n this.expanded.set(!this.expanded());\n }\n }\n}\n","<ng-container rtBlock=\"rt-expansion-panel\">\n <button\n type=\"button\"\n rtElem=\"header\"\n qa-dataid=\"expansion-panel-header\"\n [id]=\"headerDomId()\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"expanded() ? bodyId : null\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"toggle()\">\n <ng-content />\n\n @if (!hideToggle()) {\n <!-- Шеврон — в обёртке: ширину столбца держит она, значок свою ширину ставит сам. -->\n <span rtElem=\"chevron\" aria-hidden=\"true\" [rtMod]=\"{ open: expanded() }\"><rt-icon size=\"sm\" name=\"chevron-down\" /></span>\n }\n </button>\n\n @if (expanded()) {\n <!-- Сворачивание доигрывает движение: класс ухода сводит высоту к нулю, и тело уходит после. -->\n <div\n rtElem=\"body\"\n role=\"region\"\n qa-dataid=\"expansion-panel-body\"\n animate.leave=\"rt-expansion-panel__body--leaving\"\n [id]=\"bodyId\"\n [attr.aria-labelledby]=\"headerDomId()\">\n <ng-content select=\"[rtExpansionPanelBody]\" />\n\n @if (lazyContent(); as content) {\n <ng-container [ngTemplateOutlet]=\"content.templateRef\" />\n }\n </div>\n }\n</ng-container>\n"],"mappings":"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"}
1
+ {"version":3,"file":"rt-tools-ui-kit-v2-expansion-panel.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/expansion-panel/rt-expansion-panel-group.token.ts","../../../projects/ui-kit-v2/src/lib/components/expansion-panel/rt-expansion-panel-actions.directive.ts","../../../projects/ui-kit-v2/src/lib/components/expansion-panel/rt-expansion-panel-content.directive.ts","../../../projects/ui-kit-v2/src/lib/components/expansion-panel/rt-expansion-panel-group.directive.ts","../../../projects/ui-kit-v2/src/lib/components/expansion-panel/rt-expansion-panel.component.ts","../../../projects/ui-kit-v2/src/lib/components/expansion-panel/rt-expansion-panel.component.html"],"sourcesContent":["import { InjectionToken, WritableSignal } from '@angular/core';\n\n/**\n * Что панель сообщает группе, в которой стоит. Отдельным токеном, а не классом группы: группа сама\n * знает панели по типу, и прямой импорт в обе стороны замкнул бы файлы в круг.\n */\nexport interface IRtExpansionPanelGroupHost {\n /** Панель встала в группу. Вложенная в тело другой панели не встаёт: её группа — не эта. */\n readonly register: (panel: IRtExpansionPanelGroupMember) => void;\n /** Панель ушла из разметки. */\n readonly unregister: (panel: IRtExpansionPanelGroupMember) => void;\n /** Панель раскрылась: группа без `multi` сворачивает остальные. */\n readonly opened: (panel: IRtExpansionPanelGroupMember) => void;\n}\n\n/** Что группа знает о панели: только её раскрытие. */\nexport interface IRtExpansionPanelGroupMember {\n readonly expanded: WritableSignal<boolean>;\n}\n\n/**\n * Ближайшая панель над узлом. Директивы тела и действий запоминают её, и панель берёт из своего\n * содержимого только свои: шаблон в обёртке владельца находится, а шаблон вложенной панели — нет.\n */\nexport const RT_EXPANSION_PANEL_OWNER: InjectionToken<object> = new InjectionToken<object>('RT_EXPANSION_PANEL_OWNER');\n\nexport const RT_EXPANSION_PANEL_GROUP: InjectionToken<IRtExpansionPanelGroupHost> = new InjectionToken<IRtExpansionPanelGroupHost>(\n 'RT_EXPANSION_PANEL_GROUP'\n);\n","import { Directive, inject } from '@angular/core';\n\nimport { RT_EXPANSION_PANEL_OWNER } from './rt-expansion-panel-group.token';\n\n/**\n * Действия в заголовке `rt-expansion-panel`: кнопки, флажки, меню. Встают в строку заголовка между\n * подписью и шевроном, но вне кнопки-переключателя — кнопка внутри кнопки недопустима, и нажатие\n * по действию не раскрывает панель.\n */\n@Directive({\n selector: '[rtExpansionPanelActions]',\n})\nexport class RtExpansionPanelActionsDirective {\n /** Панель, которой принадлежат действия: ближайшая над узлом. */\n public readonly owner: object | null = inject(RT_EXPANSION_PANEL_OWNER, { optional: true });\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\nimport { RT_EXPANSION_PANEL_OWNER } from './rt-expansion-panel-group.token';\n\n/**\n * Тело `rt-expansion-panel`, собираемое лениво: ставится на `<ng-template>` внутри панели, и его\n * содержимое создаётся при раскрытии и уходит после сворачивания. Сворачивание при этом доигрывает\n * движение до конца: тело уходит вместе со своим содержимым, а не пустым.\n */\n@Directive({\n selector: 'ng-template[rtExpansionPanelContent]',\n})\nexport class RtExpansionPanelContentDirective {\n public readonly templateRef: TemplateRef<unknown> = inject<TemplateRef<unknown>>(TemplateRef);\n /** Панель, которой принадлежит тело: ближайшая над шаблоном, сколько бы обёрток ни стояло между. */\n public readonly owner: object | null = inject(RT_EXPANSION_PANEL_OWNER, { optional: true });\n}\n","import { booleanAttribute, Directive, forwardRef, input, InputSignalWithTransform } from '@angular/core';\n\nimport { IRtExpansionPanelGroupHost, IRtExpansionPanelGroupMember, RT_EXPANSION_PANEL_GROUP } from './rt-expansion-panel-group.token';\n\n/**\n * Группа раскрывающихся панелей, положенных разметкой: раскрытие одной сворачивает остальные, как\n * аккордеон Material. С `multi` панели раскрываются независимо, и группа только собирает их.\n *\n * Ставится на любой узел-обёртку, а не рисует свою: раскладку панелей — промежутки, рамки между\n * ними — задаёт владелец. `rt-accordion` остаётся списком пунктов из входа и группой не служит.\n */\n@Directive({\n selector: '[rtExpansionPanelGroup]',\n providers: [\n {\n provide: RT_EXPANSION_PANEL_GROUP,\n useExisting: forwardRef((): typeof RtExpansionPanelGroupDirective => RtExpansionPanelGroupDirective),\n },\n ],\n})\nexport class RtExpansionPanelGroupDirective implements IRtExpansionPanelGroupHost {\n /**\n * Панели группы, и вложенные в обёртки владельца тоже. Их список ведут сами панели, а не запрос\n * по содержимому: запрос взял бы и панель из тела соседки, и раскрытие такой панели свернуло бы\n * её же родителя.\n */\n readonly #panels: Set<IRtExpansionPanelGroupMember> = new Set<IRtExpansionPanelGroupMember>();\n\n /** Панели раскрываются независимо: группа никого не сворачивает. */\n public readonly multi: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n\n public register(panel: IRtExpansionPanelGroupMember): void {\n this.#panels.add(panel);\n }\n\n public unregister(panel: IRtExpansionPanelGroupMember): void {\n this.#panels.delete(panel);\n }\n\n public opened(panel: IRtExpansionPanelGroupMember): void {\n if (this.multi()) {\n return;\n }\n\n for (const other of this.#panels) {\n if (other !== panel && other.expanded()) {\n other.expanded.set(false);\n }\n }\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n effect,\n forwardRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n model,\n ModelSignal,\n Signal,\n signal,\n untracked,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtExpansionPanelActionsDirective } from './rt-expansion-panel-actions.directive';\nimport { RtExpansionPanelContentDirective } from './rt-expansion-panel-content.directive';\nimport { IRtExpansionPanelGroupHost, RT_EXPANSION_PANEL_GROUP, RT_EXPANSION_PANEL_OWNER } from './rt-expansion-panel-group.token';\nimport { IRtExpansionPanel } from './rt-expansion-panel.model';\n\nconst BEM_BLOCK: string = 'rt-expansion-panel';\n\nlet expansionPanelIdSeed: number = 0;\n\nfunction nextExpansionPanelId(): number {\n expansionPanelIdSeed += 1;\n return expansionPanelIdSeed;\n}\n\n/**\n * Раскрывающаяся панель: заголовок-кнопка во всю ширину с шевроном у правого края и тело под ним.\n * Нажатие на заголовок раскрывает и сворачивает тело, раскрытие и сворачивание идут с движением.\n * Заменяет во втором ките панель раскрытия Material первого кита.\n *\n * Заголовок — содержимое панели без отметки. Тело — узел с `rtExpansionPanelBody`, созданный сразу,\n * или `<ng-template rtExpansionPanelContent>`, созданный при раскрытии.\n *\n * Состояние раскрытия — `expanded`, двусторонняя привязка: панель пишет в него сама, а владелец\n * может держать его в своём сигнале и менять извне.\n *\n * Действия заголовка — узел с `rtExpansionPanelActions`: он стоит в строке заголовка вне кнопки, и\n * нажатие по нему панель не раскрывает. В группе `rtExpansionPanelGroup` раскрытие панели\n * сворачивает соседей.\n */\n@Component({\n selector: 'rt-expansion-panel',\n templateUrl: './rt-expansion-panel.component.html',\n styleUrl: './rt-expansion-panel.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n NgTemplateOutlet,\n\n // directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n\n // components\n RtIconComponent,\n ],\n host: {\n class: BEM_BLOCK,\n '[class.rt-expansion-panel--plain]': 'appearance() === \"plain\"',\n '[class.rt-expansion-panel--expanded]': 'expanded()',\n '[class.rt-expansion-panel--disabled]': 'disabled()',\n '[class.rt-expansion-panel--with-actions]': '!!actions()',\n },\n // Тело панели закрыто от группы над ней: вложенная панель раскрывается независимо, как в Material.\n providers: [\n { provide: RT_EXPANSION_PANEL_GROUP, useValue: null },\n { provide: RT_EXPANSION_PANEL_OWNER, useExisting: forwardRef((): typeof RtExpansionPanelComponent => RtExpansionPanelComponent) },\n ],\n})\nexport class RtExpansionPanelComponent {\n /** Основа id: две панели на одной странице не ссылаются на чужое тело. */\n readonly #idBase: string = `rt-expansion-panel-${nextExpansionPanelId()}`;\n /** Группа над панелью. Сама панель закрывает её от своего тела: вложенная панель в группу не встаёт. */\n readonly #group: IRtExpansionPanelGroupHost | null = inject(RT_EXPANSION_PANEL_GROUP, { optional: true, skipSelf: true });\n /** Панель хоть раз раскрывалась: сохраняемое тело создаётся при первом раскрытии, не раньше. */\n readonly #everExpanded: WritableSignal<boolean> = signal<boolean>(false);\n\n /** Ленивые тела в содержимом на любой глубине, свои и вложенных панелей. */\n protected readonly lazyContents: Signal<readonly RtExpansionPanelContentDirective[]> = contentChildren(\n RtExpansionPanelContentDirective,\n {\n descendants: true,\n }\n );\n /** Действия в содержимом на любой глубине, свои и вложенных панелей. */\n protected readonly allActions: Signal<readonly RtExpansionPanelActionsDirective[]> = contentChildren(RtExpansionPanelActionsDirective, {\n descendants: true,\n });\n\n /** Ленивое тело: шаблон создаётся при раскрытии. Своё и в обёртке владельца тоже; тело вложенной панели — её. */\n protected readonly lazyContent: Signal<RtExpansionPanelContentDirective | undefined> = computed(\n (): RtExpansionPanelContentDirective | undefined =>\n this.lazyContents().find((content: RtExpansionPanelContentDirective): boolean => content.owner === this)\n );\n protected readonly bodyId: string = `${this.#idBase}-body`;\n /**\n * Действия заголовка: есть они — шеврон выходит из кнопки и встаёт после них. Только свои: действия\n * панели, вложенной в тело, принадлежат ей.\n */\n protected readonly actions: Signal<RtExpansionPanelActionsDirective | undefined> = computed(\n (): RtExpansionPanelActionsDirective | undefined =>\n this.allActions().find((action: RtExpansionPanelActionsDirective): boolean => action.owner === this)\n );\n /** Тело есть в разметке: раскрыто, или сохраняется свёрнутым после первого раскрытия. */\n protected readonly bodyRendered: Signal<boolean> = computed(\n (): boolean => this.expanded() || (this.preserveContent() && this.#everExpanded())\n );\n protected readonly headerDomId: Signal<string> = computed((): string => this.headerId() ?? `${this.#idBase}-header`);\n\n /** Тело раскрыто. Двусторонняя привязка: нажатие на заголовок пишет сюда. */\n public readonly expanded: ModelSignal<boolean> = model<boolean>(false);\n\n /** Заголовок не нажимается, тело остаётся как было. */\n public readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n\n /** Шеврона нет: раскрытие читается по содержимому или его нечего раскрывать. */\n public readonly hideToggle: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n\n public readonly appearance: InputSignal<IRtExpansionPanel.Appearance> = input<IRtExpansionPanel.Appearance>('card');\n\n /** Id кнопки заголовка. Нужен владельцу, который ищет заголовок по своему номеру; иначе — свой. */\n public readonly headerId: InputSignal<string | null> = input<string | null>(null);\n\n /** Имя кнопки заголовка для вспомогательных средств, когда видимой подписи мало. */\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /**\n * Тело не уходит при сворачивании, а прячется: внутри остаются набранный текст, прокрутка и\n * выбор. Ленивое тело создаётся при первом раскрытии и дальше живёт вместе с панелью.\n */\n public readonly preserveContent: InputSignalWithTransform<boolean, unknown> = input(false, { transform: booleanAttribute });\n\n constructor() {\n this.#group?.register(this);\n inject(DestroyRef).onDestroy((): void => this.#group?.unregister(this));\n\n effect((): void => {\n if (this.expanded()) {\n untracked((): void => {\n this.#everExpanded.set(true);\n this.#group?.opened(this);\n });\n }\n });\n }\n\n /** Нажатие на заголовок: раскрывает свёрнутую панель и сворачивает раскрытую. */\n public toggle(): void {\n if (!this.disabled()) {\n this.expanded.set(!this.expanded());\n }\n }\n}\n","<ng-container rtBlock=\"rt-expansion-panel\">\n <!-- Строка заголовка: кнопка-переключатель, а при действиях — они и шеврон после неё. Действия\n вне кнопки: кнопка внутри кнопки недопустима, и нажатие по действию не раскрывает панель. -->\n <div rtElem=\"head\">\n <button\n type=\"button\"\n rtElem=\"header\"\n qa-dataid=\"expansion-panel-header\"\n [id]=\"headerDomId()\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"expanded()\"\n [attr.aria-controls]=\"bodyRendered() ? bodyId : null\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"toggle()\">\n <ng-content />\n\n @if (!hideToggle() && !actions()) {\n <!-- Шеврон — в обёртке: ширину столбца держит она, значок свою ширину ставит сам. -->\n <span rtElem=\"chevron\" aria-hidden=\"true\" [rtMod]=\"{ open: expanded() }\"><rt-icon size=\"sm\" name=\"chevron-down\" /></span>\n }\n </button>\n\n @if (actions()) {\n <div rtElem=\"actions\" qa-dataid=\"expansion-panel-actions\">\n <ng-content select=\"[rtExpansionPanelActions]\" />\n </div>\n\n @if (!hideToggle()) {\n <!-- Шеврон вне кнопки нажимается мышью; с клавиатуры панель раскрывает сама кнопка. -->\n <span\n rtElem=\"chevron\"\n qa-dataid=\"expansion-panel-chevron\"\n aria-hidden=\"true\"\n [rtMod]=\"{ open: expanded(), outside: true }\"\n (click)=\"toggle()\">\n <rt-icon size=\"sm\" name=\"chevron-down\" />\n </span>\n }\n }\n </div>\n\n @if (bodyRendered()) {\n <!-- Сворачивание доигрывает движение: класс ухода сводит высоту к нулю, и тело уходит после. -->\n <div\n rtElem=\"body\"\n role=\"region\"\n qa-dataid=\"expansion-panel-body\"\n animate.leave=\"rt-expansion-panel__body--leaving\"\n [rtMod]=\"{ collapsed: !expanded() }\"\n [attr.inert]=\"expanded() ? null : ''\"\n [id]=\"bodyId\"\n [attr.aria-labelledby]=\"headerDomId()\">\n <ng-content select=\"[rtExpansionPanelBody]\" />\n\n @if (lazyContent(); as content) {\n <ng-container [ngTemplateOutlet]=\"content.templateRef\" />\n }\n </div>\n }\n</ng-container>\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import * as i0 from "@angular/core";
2
- import { ChangeDetectionStrategy, Component, Directive, ViewEncapsulation, booleanAttribute, computed, contentChild, effect, inject, input } from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, Directive, ViewEncapsulation, booleanAttribute, computed, contentChild, effect, inject, input, viewChild } from "@angular/core";
3
3
  import { BlockDirective, ElemDirective, ModDirective } from "@rt-tools/core";
4
4
  import { RT_KIT_LABELS, rtKitLabel } from "@rt-tools/ui-kit-v2/core";
5
- import { RtFormControlBase } from "@rt-tools/ui-kit-v2/form-control";
5
+ import { RtFormControlBase, rtNotchWidth } from "@rt-tools/ui-kit-v2/form-control";
6
6
  import { RtIconComponent } from "@rt-tools/ui-kit-v2/icon";
7
7
  import { RtPopoverDirective } from "@rt-tools/ui-kit-v2/popover";
8
8
  import { RtSkeletonWrapperComponent } from "@rt-tools/ui-kit-v2/skeleton-wrapper";
@@ -63,9 +63,14 @@ var RtFieldComponent = class RtFieldComponent {
63
63
  this.projectedControl = contentChild(RtFormControlBase, ...ngDevMode ? [{ debugName: "projectedControl" }] : /* istanbul ignore next */ []);
64
64
  this.projectedHint = contentChild(RtFieldHintDirective, ...ngDevMode ? [{ debugName: "projectedHint" }] : /* istanbul ignore next */ []);
65
65
  this.#autoId = nextAutoId();
66
+ this.labelRow = viewChild("labelRow", ...ngDevMode ? [{ debugName: "labelRow" }] : /* istanbul ignore next */ []);
67
+ this.notchWidth = rtNotchWidth(this.labelRow);
66
68
  this.controlId = computed(() => this.projectedControl()?.effectiveControlId() ?? this.#autoId, ...ngDevMode ? [{ debugName: "controlId" }] : /* istanbul ignore next */ []);
67
69
  this.isRequired = computed(() => this.projectedControl()?.required() ?? false, ...ngDevMode ? [{ debugName: "isRequired" }] : /* istanbul ignore next */ []);
68
70
  this.showError = computed(() => !!this.projectedControl()?.invalid(), ...ngDevMode ? [{ debugName: "showError" }] : /* istanbul ignore next */ []);
71
+ this.filled = computed(() => (this.projectedControl()?.displayText() ?? "") !== "", ...ngDevMode ? [{ debugName: "filled" }] : /* istanbul ignore next */ []);
72
+ this.isStatic = computed(() => this.readonly() || this.loading() || !!this.projectedControl()?.isReadonly(), ...ngDevMode ? [{ debugName: "isStatic" }] : /* istanbul ignore next */ []);
73
+ this.labelInside = computed(() => !this.isStatic() && !!this.projectedControl()?.fieldLabelInside, ...ngDevMode ? [{ debugName: "labelInside" }] : /* istanbul ignore next */ []);
69
74
  this.#failedValidator = computed(() => {
70
75
  const errs = this.projectedControl()?.errors() ?? null;
71
76
  return errs ? Object.keys(errs)[0] ?? "" : "";
@@ -196,7 +201,16 @@ var RtFieldComponent = class RtFieldComponent {
196
201
  transformFunction: null
197
202
  }
198
203
  },
199
- host: { classAttribute: "rt-field" },
204
+ host: {
205
+ properties: {
206
+ "class.rt-field--filled": "filled()",
207
+ "class.rt-field--invalid": "showError()",
208
+ "class.rt-field--static": "isStatic()",
209
+ "class.rt-field--label-inside": "labelInside()",
210
+ "style.--rt-field-notch-width": "notchWidth() + 'px'"
211
+ },
212
+ classAttribute: "rt-field"
213
+ },
200
214
  queries: [{
201
215
  propertyName: "projectedControl",
202
216
  first: true,
@@ -210,9 +224,16 @@ var RtFieldComponent = class RtFieldComponent {
210
224
  descendants: true,
211
225
  isSignal: true
212
226
  }],
227
+ viewQueries: [{
228
+ propertyName: "labelRow",
229
+ first: true,
230
+ predicate: ["labelRow"],
231
+ descendants: true,
232
+ isSignal: true
233
+ }],
213
234
  ngImport: i0,
214
- template: "<ng-container rtBlock=\"rt-field\">\n @if (label()) {\n <span rtElem=\"label-row\">\n <label rtElem=\"label\" qa-dataid=\"field-label\" [attr.for]=\"controlId()\">\n {{ label() }}\n @if (isRequired() && !hideRequiredMark()) {\n <span rtElem=\"required\" qa-dataid=\"field-required\" aria-hidden=\"true\">*</span>\n }\n </label>\n @if (help()) {\n <button\n rtElem=\"help\"\n qa-dataid=\"field-help\"\n type=\"button\"\n rtPopoverTrigger=\"hover\"\n [attr.aria-label]=\"t().uiHint\"\n [rtPopover]=\"helpTpl\">\n <rt-icon name=\"ico-help\" size=\"sm\" color=\"muted\" />\n </button>\n <ng-template #helpTpl>\n <span rtElem=\"help-popover\" qa-dataid=\"field-help-popover\">{{ help() }}</span>\n </ng-template>\n }\n </span>\n }\n\n <rt-skeleton-wrapper rtElem=\"control\" height=\"var(--rt-input-height)\" [isLoading]=\"loading()\">\n <ng-content />\n </rt-skeleton-wrapper>\n\n <!-- С резервом hint остаётся в потоке даже под ошибкой (скрытый), а сама\n ошибка кладётся в ту же ячейку грида: высота зоны равна большему из\n двух сообщений и не меняется при их подмене. Без резерва — как было,\n одно сообщение за раз, чтобы плотные формы не набирали лишний воздух. -->\n <span rtElem=\"messages\" [rtMod]=\"{ reserved: reserveHintSpace() }\">\n @if (projectedHint() && (reserveHintSpace() || !showError())) {\n <small rtElem=\"hint\" qa-dataid=\"field-hint\" [rtMod]=\"{ hidden: showError() }\" [attr.aria-hidden]=\"showError() ? 'true' : null\">\n <ng-content select=\"[rtFieldHint]\" />\n </small>\n } @else if (hint() && (reserveHintSpace() || !showError())) {\n <small rtElem=\"hint\" qa-dataid=\"field-hint\" [rtMod]=\"{ hidden: showError() }\" [attr.aria-hidden]=\"showError() ? 'true' : null\">\n {{ hint() }}\n </small>\n }\n\n @if (showError()) {\n <small rtElem=\"error\" qa-dataid=\"field-error\">{{ errorText() }}</small>\n }\n </span>\n</ng-container>\n",
215
- styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-field{display:flex;flex-direction:column;gap:var(--rt-field-gap)}.rt-field__label-row{display:inline-flex;align-items:center;gap:var(--rt-field-label-help-gap)}.rt-field__label{color:var(--rt-field-label-color);font-size:var(--rt-field-label-font-size);font-weight:var(--rt-field-label-font-weight)}.rt-field__required{color:var(--rt-field-required-color)}.rt-field__control{color:var(--rt-field-value-color);font-size:var(--rt-field-value-font-size)}.rt-field__help{display:inline-flex;padding:0;border:none;margin:0;background:none;cursor:help}.rt-field__help-popover{display:block;max-width:240px;font-size:var(--rt-field-hint-font-size)}.rt-field__messages{display:grid}.rt-field__messages--reserved{font-size:var(--rt-field-error-font-size);min-block-size:1lh}.rt-field__messages--reserved>*{grid-area:1/1}.rt-field__hint{color:var(--rt-field-hint-color);font-size:var(--rt-field-hint-font-size)}.rt-field__hint--hidden{visibility:hidden}.rt-field__error{color:var(--rt-field-error-color);font-size:var(--rt-field-error-font-size)}}\n"],
235
+ template: "<ng-container rtBlock=\"rt-field\">\n @if (label()) {\n <span #labelRow rtElem=\"label-row\">\n <!-- Текст подписи — свой узел: пробел между ним и звёздочкой сборка выбрасывает, и зазор до\n звёздочки задаёт свойство, а не пробел в разметке. -->\n <label rtElem=\"label\" qa-dataid=\"field-label\" [attr.for]=\"controlId()\">\n <span>{{ label() }}</span>\n @if (isRequired() && !hideRequiredMark()) {\n <span rtElem=\"required\" qa-dataid=\"field-required\" aria-hidden=\"true\">*</span>\n }\n </label>\n @if (help()) {\n <button\n rtElem=\"help\"\n qa-dataid=\"field-help\"\n type=\"button\"\n rtPopoverTrigger=\"hover\"\n [attr.aria-label]=\"t().uiHint\"\n [rtPopover]=\"helpTpl\">\n <rt-icon name=\"ico-help\" size=\"sm\" color=\"muted\" />\n </button>\n <ng-template #helpTpl>\n <span rtElem=\"help-popover\" qa-dataid=\"field-help-popover\">{{ help() }}</span>\n </ng-template>\n }\n </span>\n }\n\n <rt-skeleton-wrapper rtElem=\"control\" height=\"var(--rt-input-height)\" [isLoading]=\"loading()\">\n <ng-content />\n </rt-skeleton-wrapper>\n\n <!-- С резервом hint остаётся в потоке даже под ошибкой (скрытый), а сама\n ошибка кладётся в ту же ячейку грида: высота зоны равна большему из\n двух сообщений и не меняется при их подмене. Без резерва — как было,\n одно сообщение за раз, чтобы плотные формы не набирали лишний воздух. -->\n <span rtElem=\"messages\" [rtMod]=\"{ reserved: reserveHintSpace() }\">\n @if (projectedHint() && (reserveHintSpace() || !showError())) {\n <small rtElem=\"hint\" qa-dataid=\"field-hint\" [rtMod]=\"{ hidden: showError() }\" [attr.aria-hidden]=\"showError() ? 'true' : null\">\n <ng-content select=\"[rtFieldHint]\" />\n </small>\n } @else if (hint() && (reserveHintSpace() || !showError())) {\n <small rtElem=\"hint\" qa-dataid=\"field-hint\" [rtMod]=\"{ hidden: showError() }\" [attr.aria-hidden]=\"showError() ? 'true' : null\">\n {{ hint() }}\n </small>\n }\n\n @if (showError()) {\n <small rtElem=\"error\" qa-dataid=\"field-error\">{{ errorText() }}</small>\n }\n </span>\n</ng-container>\n",
236
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-field{--rt-field-floating-start: calc(var(--rt-input-padding-x) + var(--rt-input-border-width));--rt-field-floating-rest-start: var(--rt-field-floating-start);--rt-field-floating-duration: var(--rt-duration-fast);--rt-field-raised-start: max( var(--rt-field-floating-start), calc(min(var(--rt-input-radius), var(--rt-input-height) / 2) + var(--rt-space-2)) );--rt-field-notch-start: calc(var(--rt-field-raised-start) - var(--rt-space-1));--rt-field-notch-depth: calc(2 * var(--rt-input-border-width));--rt-field-notch-width: 0px;--rt-field-fill-height: var(--rt-input-height-md);--rt-field-floating-z: var(--rt-z-sticky);display:flex;flex-direction:column;gap:var(--rt-field-gap)}.rt-field__label-row{display:inline-flex;align-items:center;gap:var(--rt-field-label-help-gap)}.rt-field__label{color:var(--rt-field-label-color);font-size:var(--rt-field-label-font-size);font-weight:var(--rt-field-label-font-weight);letter-spacing:var(--rt-field-label-letter-spacing, inherit)}.rt-field__required{margin-left:var(--rt-field-required-gap);color:var(--rt-field-required-color)}.rt-field--invalid .rt-field__required{color:var(--rt-field-error-color)}.rt-field__control{color:var(--rt-field-value-color);font-size:var(--rt-field-value-font-size)}.rt-field__help{display:inline-flex;padding:0;border:none;margin:0;background:none;cursor:help}.rt-field__help-popover{display:block;max-width:240px;font-size:var(--rt-field-hint-font-size)}.rt-field__messages{display:grid;box-sizing:border-box}.rt-field__messages:is(.rt-preset-material *,[data-preset=material] *){line-height:var(--rt-field-messages-line-height)}.rt-field__messages--reserved,.rt-field__messages:has(>*){padding-top:var(--rt-field-messages-padding-top)}.rt-field__messages--reserved{font-size:var(--rt-field-error-font-size);min-block-size:calc(1lh + var(--rt-field-messages-padding-top))}.rt-field__messages--reserved>*{grid-area:1/1}.rt-field__hint{color:var(--rt-field-hint-color);font-size:var(--rt-field-hint-font-size)}.rt-field__hint--hidden{visibility:hidden}.rt-field__error{color:var(--rt-field-error-color);font-size:var(--rt-field-error-font-size)}}\n", "@charset \"UTF-8\";@layer rt-kit.components{.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]){--rt-field-floating-start: var(--rt-input-padding-x);position:relative;isolation:isolate}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-input--with-icon-left){--rt-field-floating-rest-start: calc(var(--rt-field-floating-start) + var(--rt-input-icon-size) + var(--rt-input-gap))}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-input--with-icon-left>.rt-input__icon-left){--rt-field-floating-rest-start: calc(var(--rt-space-2) + var(--rt-space-1) + var(--rt-input-icon-size) + var(--rt-space-1))}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]) .rt-field__messages{margin-top:calc(-1 * var(--rt-field-gap));padding-inline:var(--rt-input-padding-x)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-input--size--sm,.rt-select--size--sm,.rt-input-number--size--sm){--rt-input-height: var(--rt-input-height-sm)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-input--size--lg,.rt-select--size--lg,.rt-input-number--size--lg){--rt-input-height: var(--rt-input-height-lg)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]) .rt-field__label-row{position:absolute;z-index:var(--rt-field-floating-z);top:calc(var(--rt-input-height) / 2);left:var(--rt-field-floating-rest-start);max-width:calc(100% - 2 * var(--rt-field-floating-start));pointer-events:none;transform:translateY(-50%);transition:top var(--rt-field-floating-duration) ease,left var(--rt-field-floating-duration) ease}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]) .rt-field__label{overflow:hidden;color:var(--rt-input-color-text-placeholder);font-size:var(--rt-input-font-size);font-weight:inherit;text-overflow:ellipsis;transition:font-size var(--rt-field-floating-duration) ease,color var(--rt-field-floating-duration) ease;white-space:nowrap}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]) .rt-field__help{pointer-events:auto}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-field__label-row):not(.rt-field--filled,:focus-within) ::placeholder,.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-field__label-row):not(.rt-field--filled,:focus-within) .rt-select__label--placeholder{color:transparent}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]).rt-field--filled .rt-field__label-row,.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):focus-within .rt-field__label-row{top:0;left:var(--rt-field-raised-start);max-width:calc(100% - var(--rt-field-raised-start) - var(--rt-field-floating-start));padding:0 var(--rt-space-1);margin-left:calc(-1 * var(--rt-space-1));line-height:1}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]).rt-field--filled:not(:has(.rt-input--appearance--fill,.rt-input--appearance--pill,.rt-select--appearance--fill,.rt-input-number--appearance--fill,.rt-input-number--appearance--pill,.rt-textarea--appearance--fill)) .rt-field__control,.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):focus-within:not(:has(.rt-input--appearance--fill,.rt-input--appearance--pill,.rt-select--appearance--fill,.rt-input-number--appearance--fill,.rt-input-number--appearance--pill,.rt-textarea--appearance--fill)) .rt-field__control{clip-path:polygon(0 0,var(--rt-field-notch-start) 0,var(--rt-field-notch-start) var(--rt-field-notch-depth),calc(var(--rt-field-notch-start) + var(--rt-field-notch-width)) var(--rt-field-notch-depth),calc(var(--rt-field-notch-start) + var(--rt-field-notch-width)) 0,100% 0,100% 100%,0 100%)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-input--appearance--fill,.rt-input--appearance--pill,.rt-select--appearance--fill,.rt-input-number--appearance--fill,.rt-input-number--appearance--pill,.rt-textarea--appearance--fill){--rt-input-height: var(--rt-field-fill-height)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-input--appearance--fill,.rt-input--appearance--pill,.rt-select--appearance--fill,.rt-input-number--appearance--fill,.rt-input-number--appearance--pill,.rt-textarea--appearance--fill) .rt-field__label{line-height:var(--rt-leading-tight)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-field__label-row) :is(.rt-input--appearance--fill .rt-input__field,.rt-input--appearance--pill .rt-input__field,.rt-select--appearance--fill .rt-select__label,.rt-input-number--appearance--fill .rt-input-number__field,.rt-input-number--appearance--pill .rt-input-number__field){align-self:stretch;padding-top:calc(var(--rt-input-height) / 2 - var(--rt-space-1) - var(--rt-input-fill-edge));padding-bottom:calc(var(--rt-input-height) / 2 - var(--rt-space-5) - var(--rt-input-border-width));line-height:var(--rt-leading-normal)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-field__label-row) :is(.rt-input--appearance--pill .rt-input__field,.rt-input-number--appearance--pill .rt-input-number__field){padding-top:calc(var(--rt-input-height) / 2 - var(--rt-space-1) - var(--rt-input-border-width))}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]).rt-field--filled:has(.rt-input--appearance--fill,.rt-input--appearance--pill,.rt-select--appearance--fill,.rt-input-number--appearance--fill,.rt-input-number--appearance--pill,.rt-textarea--appearance--fill) .rt-field__label-row,.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):focus-within:has(.rt-input--appearance--fill,.rt-input--appearance--pill,.rt-select--appearance--fill,.rt-input-number--appearance--fill,.rt-input-number--appearance--pill,.rt-textarea--appearance--fill) .rt-field__label-row{top:calc(var(--rt-input-height) / 2 - var(--rt-space-5));left:var(--rt-field-floating-rest-start);padding:0;margin-left:0;transform:none}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]).rt-field--filled .rt-field__label,.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):focus-within .rt-field__label{font-size:var(--rt-text-xs)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):focus-within .rt-field__label{color:var(--rt-input-color-border-focus)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]).rt-field--invalid .rt-field__label{color:var(--rt-input-color-border-error)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-input--disabled,.rt-select--disabled,.rt-input-number--disabled,.rt-textarea--disabled) .rt-field__label{color:var(--rt-input-color-placeholder-disabled)}}\n"],
216
237
  dependencies: [
217
238
  {
218
239
  kind: "component",
@@ -305,9 +326,16 @@ i0.ɵɵngDeclareClassMetadata({
305
326
  ElemDirective,
306
327
  ModDirective
307
328
  ],
308
- host: { class: BEM_BLOCK },
309
- template: "<ng-container rtBlock=\"rt-field\">\n @if (label()) {\n <span rtElem=\"label-row\">\n <label rtElem=\"label\" qa-dataid=\"field-label\" [attr.for]=\"controlId()\">\n {{ label() }}\n @if (isRequired() && !hideRequiredMark()) {\n <span rtElem=\"required\" qa-dataid=\"field-required\" aria-hidden=\"true\">*</span>\n }\n </label>\n @if (help()) {\n <button\n rtElem=\"help\"\n qa-dataid=\"field-help\"\n type=\"button\"\n rtPopoverTrigger=\"hover\"\n [attr.aria-label]=\"t().uiHint\"\n [rtPopover]=\"helpTpl\">\n <rt-icon name=\"ico-help\" size=\"sm\" color=\"muted\" />\n </button>\n <ng-template #helpTpl>\n <span rtElem=\"help-popover\" qa-dataid=\"field-help-popover\">{{ help() }}</span>\n </ng-template>\n }\n </span>\n }\n\n <rt-skeleton-wrapper rtElem=\"control\" height=\"var(--rt-input-height)\" [isLoading]=\"loading()\">\n <ng-content />\n </rt-skeleton-wrapper>\n\n <!-- С резервом hint остаётся в потоке даже под ошибкой (скрытый), а сама\n ошибка кладётся в ту же ячейку грида: высота зоны равна большему из\n двух сообщений и не меняется при их подмене. Без резерва — как было,\n одно сообщение за раз, чтобы плотные формы не набирали лишний воздух. -->\n <span rtElem=\"messages\" [rtMod]=\"{ reserved: reserveHintSpace() }\">\n @if (projectedHint() && (reserveHintSpace() || !showError())) {\n <small rtElem=\"hint\" qa-dataid=\"field-hint\" [rtMod]=\"{ hidden: showError() }\" [attr.aria-hidden]=\"showError() ? 'true' : null\">\n <ng-content select=\"[rtFieldHint]\" />\n </small>\n } @else if (hint() && (reserveHintSpace() || !showError())) {\n <small rtElem=\"hint\" qa-dataid=\"field-hint\" [rtMod]=\"{ hidden: showError() }\" [attr.aria-hidden]=\"showError() ? 'true' : null\">\n {{ hint() }}\n </small>\n }\n\n @if (showError()) {\n <small rtElem=\"error\" qa-dataid=\"field-error\">{{ errorText() }}</small>\n }\n </span>\n</ng-container>\n",
310
- styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-field{display:flex;flex-direction:column;gap:var(--rt-field-gap)}.rt-field__label-row{display:inline-flex;align-items:center;gap:var(--rt-field-label-help-gap)}.rt-field__label{color:var(--rt-field-label-color);font-size:var(--rt-field-label-font-size);font-weight:var(--rt-field-label-font-weight)}.rt-field__required{color:var(--rt-field-required-color)}.rt-field__control{color:var(--rt-field-value-color);font-size:var(--rt-field-value-font-size)}.rt-field__help{display:inline-flex;padding:0;border:none;margin:0;background:none;cursor:help}.rt-field__help-popover{display:block;max-width:240px;font-size:var(--rt-field-hint-font-size)}.rt-field__messages{display:grid}.rt-field__messages--reserved{font-size:var(--rt-field-error-font-size);min-block-size:1lh}.rt-field__messages--reserved>*{grid-area:1/1}.rt-field__hint{color:var(--rt-field-hint-color);font-size:var(--rt-field-hint-font-size)}.rt-field__hint--hidden{visibility:hidden}.rt-field__error{color:var(--rt-field-error-color);font-size:var(--rt-field-error-font-size)}}\n"]
329
+ host: {
330
+ class: BEM_BLOCK,
331
+ "[class.rt-field--filled]": "filled()",
332
+ "[class.rt-field--invalid]": "showError()",
333
+ "[class.rt-field--static]": "isStatic()",
334
+ "[class.rt-field--label-inside]": "labelInside()",
335
+ "[style.--rt-field-notch-width]": "notchWidth() + 'px'"
336
+ },
337
+ template: "<ng-container rtBlock=\"rt-field\">\n @if (label()) {\n <span #labelRow rtElem=\"label-row\">\n <!-- Текст подписи — свой узел: пробел между ним и звёздочкой сборка выбрасывает, и зазор до\n звёздочки задаёт свойство, а не пробел в разметке. -->\n <label rtElem=\"label\" qa-dataid=\"field-label\" [attr.for]=\"controlId()\">\n <span>{{ label() }}</span>\n @if (isRequired() && !hideRequiredMark()) {\n <span rtElem=\"required\" qa-dataid=\"field-required\" aria-hidden=\"true\">*</span>\n }\n </label>\n @if (help()) {\n <button\n rtElem=\"help\"\n qa-dataid=\"field-help\"\n type=\"button\"\n rtPopoverTrigger=\"hover\"\n [attr.aria-label]=\"t().uiHint\"\n [rtPopover]=\"helpTpl\">\n <rt-icon name=\"ico-help\" size=\"sm\" color=\"muted\" />\n </button>\n <ng-template #helpTpl>\n <span rtElem=\"help-popover\" qa-dataid=\"field-help-popover\">{{ help() }}</span>\n </ng-template>\n }\n </span>\n }\n\n <rt-skeleton-wrapper rtElem=\"control\" height=\"var(--rt-input-height)\" [isLoading]=\"loading()\">\n <ng-content />\n </rt-skeleton-wrapper>\n\n <!-- С резервом hint остаётся в потоке даже под ошибкой (скрытый), а сама\n ошибка кладётся в ту же ячейку грида: высота зоны равна большему из\n двух сообщений и не меняется при их подмене. Без резерва — как было,\n одно сообщение за раз, чтобы плотные формы не набирали лишний воздух. -->\n <span rtElem=\"messages\" [rtMod]=\"{ reserved: reserveHintSpace() }\">\n @if (projectedHint() && (reserveHintSpace() || !showError())) {\n <small rtElem=\"hint\" qa-dataid=\"field-hint\" [rtMod]=\"{ hidden: showError() }\" [attr.aria-hidden]=\"showError() ? 'true' : null\">\n <ng-content select=\"[rtFieldHint]\" />\n </small>\n } @else if (hint() && (reserveHintSpace() || !showError())) {\n <small rtElem=\"hint\" qa-dataid=\"field-hint\" [rtMod]=\"{ hidden: showError() }\" [attr.aria-hidden]=\"showError() ? 'true' : null\">\n {{ hint() }}\n </small>\n }\n\n @if (showError()) {\n <small rtElem=\"error\" qa-dataid=\"field-error\">{{ errorText() }}</small>\n }\n </span>\n</ng-container>\n",
338
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-field{--rt-field-floating-start: calc(var(--rt-input-padding-x) + var(--rt-input-border-width));--rt-field-floating-rest-start: var(--rt-field-floating-start);--rt-field-floating-duration: var(--rt-duration-fast);--rt-field-raised-start: max( var(--rt-field-floating-start), calc(min(var(--rt-input-radius), var(--rt-input-height) / 2) + var(--rt-space-2)) );--rt-field-notch-start: calc(var(--rt-field-raised-start) - var(--rt-space-1));--rt-field-notch-depth: calc(2 * var(--rt-input-border-width));--rt-field-notch-width: 0px;--rt-field-fill-height: var(--rt-input-height-md);--rt-field-floating-z: var(--rt-z-sticky);display:flex;flex-direction:column;gap:var(--rt-field-gap)}.rt-field__label-row{display:inline-flex;align-items:center;gap:var(--rt-field-label-help-gap)}.rt-field__label{color:var(--rt-field-label-color);font-size:var(--rt-field-label-font-size);font-weight:var(--rt-field-label-font-weight);letter-spacing:var(--rt-field-label-letter-spacing, inherit)}.rt-field__required{margin-left:var(--rt-field-required-gap);color:var(--rt-field-required-color)}.rt-field--invalid .rt-field__required{color:var(--rt-field-error-color)}.rt-field__control{color:var(--rt-field-value-color);font-size:var(--rt-field-value-font-size)}.rt-field__help{display:inline-flex;padding:0;border:none;margin:0;background:none;cursor:help}.rt-field__help-popover{display:block;max-width:240px;font-size:var(--rt-field-hint-font-size)}.rt-field__messages{display:grid;box-sizing:border-box}.rt-field__messages:is(.rt-preset-material *,[data-preset=material] *){line-height:var(--rt-field-messages-line-height)}.rt-field__messages--reserved,.rt-field__messages:has(>*){padding-top:var(--rt-field-messages-padding-top)}.rt-field__messages--reserved{font-size:var(--rt-field-error-font-size);min-block-size:calc(1lh + var(--rt-field-messages-padding-top))}.rt-field__messages--reserved>*{grid-area:1/1}.rt-field__hint{color:var(--rt-field-hint-color);font-size:var(--rt-field-hint-font-size)}.rt-field__hint--hidden{visibility:hidden}.rt-field__error{color:var(--rt-field-error-color);font-size:var(--rt-field-error-font-size)}}\n", "@charset \"UTF-8\";@layer rt-kit.components{.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]){--rt-field-floating-start: var(--rt-input-padding-x);position:relative;isolation:isolate}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-input--with-icon-left){--rt-field-floating-rest-start: calc(var(--rt-field-floating-start) + var(--rt-input-icon-size) + var(--rt-input-gap))}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-input--with-icon-left>.rt-input__icon-left){--rt-field-floating-rest-start: calc(var(--rt-space-2) + var(--rt-space-1) + var(--rt-input-icon-size) + var(--rt-space-1))}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]) .rt-field__messages{margin-top:calc(-1 * var(--rt-field-gap));padding-inline:var(--rt-input-padding-x)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-input--size--sm,.rt-select--size--sm,.rt-input-number--size--sm){--rt-input-height: var(--rt-input-height-sm)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-input--size--lg,.rt-select--size--lg,.rt-input-number--size--lg){--rt-input-height: var(--rt-input-height-lg)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]) .rt-field__label-row{position:absolute;z-index:var(--rt-field-floating-z);top:calc(var(--rt-input-height) / 2);left:var(--rt-field-floating-rest-start);max-width:calc(100% - 2 * var(--rt-field-floating-start));pointer-events:none;transform:translateY(-50%);transition:top var(--rt-field-floating-duration) ease,left var(--rt-field-floating-duration) ease}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]) .rt-field__label{overflow:hidden;color:var(--rt-input-color-text-placeholder);font-size:var(--rt-input-font-size);font-weight:inherit;text-overflow:ellipsis;transition:font-size var(--rt-field-floating-duration) ease,color var(--rt-field-floating-duration) ease;white-space:nowrap}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]) .rt-field__help{pointer-events:auto}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-field__label-row):not(.rt-field--filled,:focus-within) ::placeholder,.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-field__label-row):not(.rt-field--filled,:focus-within) .rt-select__label--placeholder{color:transparent}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]).rt-field--filled .rt-field__label-row,.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):focus-within .rt-field__label-row{top:0;left:var(--rt-field-raised-start);max-width:calc(100% - var(--rt-field-raised-start) - var(--rt-field-floating-start));padding:0 var(--rt-space-1);margin-left:calc(-1 * var(--rt-space-1));line-height:1}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]).rt-field--filled:not(:has(.rt-input--appearance--fill,.rt-input--appearance--pill,.rt-select--appearance--fill,.rt-input-number--appearance--fill,.rt-input-number--appearance--pill,.rt-textarea--appearance--fill)) .rt-field__control,.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):focus-within:not(:has(.rt-input--appearance--fill,.rt-input--appearance--pill,.rt-select--appearance--fill,.rt-input-number--appearance--fill,.rt-input-number--appearance--pill,.rt-textarea--appearance--fill)) .rt-field__control{clip-path:polygon(0 0,var(--rt-field-notch-start) 0,var(--rt-field-notch-start) var(--rt-field-notch-depth),calc(var(--rt-field-notch-start) + var(--rt-field-notch-width)) var(--rt-field-notch-depth),calc(var(--rt-field-notch-start) + var(--rt-field-notch-width)) 0,100% 0,100% 100%,0 100%)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-input--appearance--fill,.rt-input--appearance--pill,.rt-select--appearance--fill,.rt-input-number--appearance--fill,.rt-input-number--appearance--pill,.rt-textarea--appearance--fill){--rt-input-height: var(--rt-field-fill-height)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-input--appearance--fill,.rt-input--appearance--pill,.rt-select--appearance--fill,.rt-input-number--appearance--fill,.rt-input-number--appearance--pill,.rt-textarea--appearance--fill) .rt-field__label{line-height:var(--rt-leading-tight)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-field__label-row) :is(.rt-input--appearance--fill .rt-input__field,.rt-input--appearance--pill .rt-input__field,.rt-select--appearance--fill .rt-select__label,.rt-input-number--appearance--fill .rt-input-number__field,.rt-input-number--appearance--pill .rt-input-number__field){align-self:stretch;padding-top:calc(var(--rt-input-height) / 2 - var(--rt-space-1) - var(--rt-input-fill-edge));padding-bottom:calc(var(--rt-input-height) / 2 - var(--rt-space-5) - var(--rt-input-border-width));line-height:var(--rt-leading-normal)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-field__label-row) :is(.rt-input--appearance--pill .rt-input__field,.rt-input-number--appearance--pill .rt-input-number__field){padding-top:calc(var(--rt-input-height) / 2 - var(--rt-space-1) - var(--rt-input-border-width))}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]).rt-field--filled:has(.rt-input--appearance--fill,.rt-input--appearance--pill,.rt-select--appearance--fill,.rt-input-number--appearance--fill,.rt-input-number--appearance--pill,.rt-textarea--appearance--fill) .rt-field__label-row,.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):focus-within:has(.rt-input--appearance--fill,.rt-input--appearance--pill,.rt-select--appearance--fill,.rt-input-number--appearance--fill,.rt-input-number--appearance--pill,.rt-textarea--appearance--fill) .rt-field__label-row{top:calc(var(--rt-input-height) / 2 - var(--rt-space-5));left:var(--rt-field-floating-rest-start);padding:0;margin-left:0;transform:none}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]).rt-field--filled .rt-field__label,.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):focus-within .rt-field__label{font-size:var(--rt-text-xs)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):focus-within .rt-field__label{color:var(--rt-input-color-border-focus)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]).rt-field--invalid .rt-field__label{color:var(--rt-input-color-border-error)}.rt-field--label-inside:is(.rt-preset-material *,[data-preset=material] *,.rt-preset-material,[data-preset=material]):has(.rt-input--disabled,.rt-select--disabled,.rt-input-number--disabled,.rt-textarea--disabled) .rt-field__label{color:var(--rt-input-color-placeholder-disabled)}}\n"]
311
339
  }]
312
340
  }],
313
341
  ctorParameters: () => [],
@@ -320,6 +348,10 @@ i0.ɵɵngDeclareClassMetadata({
320
348
  type: i0.ContentChild,
321
349
  args: [i0.forwardRef(() => RtFieldHintDirective), { isSignal: true }]
322
350
  }],
351
+ labelRow: [{
352
+ type: i0.ViewChild,
353
+ args: ["labelRow", { isSignal: true }]
354
+ }],
323
355
  label: [{
324
356
  type: i0.Input,
325
357
  args: [{