@rt-tools/ui-kit-v2 0.23.3 → 0.24.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 (354) hide show
  1. package/fesm2022/rt-tools-ui-kit-v2-accordion.mjs +142 -71
  2. package/fesm2022/rt-tools-ui-kit-v2-accordion.mjs.map +1 -1
  3. package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs +467 -231
  4. package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs.map +1 -1
  5. package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +260 -91
  6. package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -1
  7. package/fesm2022/rt-tools-ui-kit-v2-aside-section.mjs +80 -46
  8. package/fesm2022/rt-tools-ui-kit-v2-aside-section.mjs.map +1 -1
  9. package/fesm2022/rt-tools-ui-kit-v2-aside.mjs +984 -697
  10. package/fesm2022/rt-tools-ui-kit-v2-aside.mjs.map +1 -1
  11. package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +452 -210
  12. package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
  13. package/fesm2022/rt-tools-ui-kit-v2-bar-list.mjs +143 -52
  14. package/fesm2022/rt-tools-ui-kit-v2-bar-list.mjs.map +1 -1
  15. package/fesm2022/rt-tools-ui-kit-v2-bottom-sheet.mjs +158 -83
  16. package/fesm2022/rt-tools-ui-kit-v2-bottom-sheet.mjs.map +1 -1
  17. package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs +335 -0
  18. package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs.map +1 -0
  19. package/fesm2022/rt-tools-ui-kit-v2-button.mjs +437 -363
  20. package/fesm2022/rt-tools-ui-kit-v2-button.mjs.map +1 -1
  21. package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs +430 -149
  22. package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs.map +1 -1
  23. package/fesm2022/rt-tools-ui-kit-v2-card.mjs +155 -71
  24. package/fesm2022/rt-tools-ui-kit-v2-card.mjs.map +1 -1
  25. package/fesm2022/rt-tools-ui-kit-v2-carousel.mjs +155 -0
  26. package/fesm2022/rt-tools-ui-kit-v2-carousel.mjs.map +1 -0
  27. package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs +215 -110
  28. package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs.map +1 -1
  29. package/fesm2022/rt-tools-ui-kit-v2-collapsible-text.mjs +158 -75
  30. package/fesm2022/rt-tools-ui-kit-v2-collapsible-text.mjs.map +1 -1
  31. package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs +769 -0
  32. package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs.map +1 -0
  33. package/fesm2022/rt-tools-ui-kit-v2-confirm-popover.mjs +462 -253
  34. package/fesm2022/rt-tools-ui-kit-v2-confirm-popover.mjs.map +1 -1
  35. package/fesm2022/rt-tools-ui-kit-v2-container.mjs +1276 -1316
  36. package/fesm2022/rt-tools-ui-kit-v2-container.mjs.map +1 -1
  37. package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs +185 -80
  38. package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs.map +1 -1
  39. package/fesm2022/rt-tools-ui-kit-v2-core.mjs +2321 -2619
  40. package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
  41. package/fesm2022/rt-tools-ui-kit-v2-counter-row.mjs +100 -44
  42. package/fesm2022/rt-tools-ui-kit-v2-counter-row.mjs.map +1 -1
  43. package/fesm2022/rt-tools-ui-kit-v2-counter.mjs +290 -155
  44. package/fesm2022/rt-tools-ui-kit-v2-counter.mjs.map +1 -1
  45. package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +2097 -858
  46. package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -1
  47. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +2247 -1176
  48. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
  49. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +1043 -705
  50. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
  51. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +810 -525
  52. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
  53. package/fesm2022/rt-tools-ui-kit-v2-delta-view.mjs +158 -138
  54. package/fesm2022/rt-tools-ui-kit-v2-delta-view.mjs.map +1 -1
  55. package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs +177 -67
  56. package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs.map +1 -1
  57. package/fesm2022/rt-tools-ui-kit-v2-dialog.mjs +550 -477
  58. package/fesm2022/rt-tools-ui-kit-v2-dialog.mjs.map +1 -1
  59. package/fesm2022/rt-tools-ui-kit-v2-dot-field.mjs +185 -168
  60. package/fesm2022/rt-tools-ui-kit-v2-dot-field.mjs.map +1 -1
  61. package/fesm2022/rt-tools-ui-kit-v2-download-link.mjs +116 -43
  62. package/fesm2022/rt-tools-ui-kit-v2-download-link.mjs.map +1 -1
  63. package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs +585 -0
  64. package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs.map +1 -0
  65. package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs +755 -259
  66. package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs.map +1 -1
  67. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +3266 -1115
  68. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
  69. package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs +190 -55
  70. package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs.map +1 -1
  71. package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs +283 -103
  72. package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs.map +1 -1
  73. package/fesm2022/rt-tools-ui-kit-v2-field.mjs +393 -177
  74. package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -1
  75. package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +399 -207
  76. package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
  77. package/fesm2022/rt-tools-ui-kit-v2-file-drop.mjs +288 -212
  78. package/fesm2022/rt-tools-ui-kit-v2-file-drop.mjs.map +1 -1
  79. package/fesm2022/rt-tools-ui-kit-v2-file-input.mjs +262 -116
  80. package/fesm2022/rt-tools-ui-kit-v2-file-input.mjs.map +1 -1
  81. package/fesm2022/rt-tools-ui-kit-v2-file-list.mjs +57 -31
  82. package/fesm2022/rt-tools-ui-kit-v2-file-list.mjs.map +1 -1
  83. package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs +258 -90
  84. package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs.map +1 -1
  85. package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs +249 -215
  86. package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs.map +1 -1
  87. package/fesm2022/rt-tools-ui-kit-v2-header.mjs +199 -71
  88. package/fesm2022/rt-tools-ui-kit-v2-header.mjs.map +1 -1
  89. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs +231 -0
  90. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs.map +1 -0
  91. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs +336 -0
  92. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs.map +1 -0
  93. package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +451 -162
  94. package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
  95. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs +931 -686
  96. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs.map +1 -1
  97. package/fesm2022/rt-tools-ui-kit-v2-image-cropper.mjs +664 -491
  98. package/fesm2022/rt-tools-ui-kit-v2-image-cropper.mjs.map +1 -1
  99. package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +574 -222
  100. package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -1
  101. package/fesm2022/rt-tools-ui-kit-v2-info-item.mjs +150 -36
  102. package/fesm2022/rt-tools-ui-kit-v2-info-item.mjs.map +1 -1
  103. package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs +606 -0
  104. package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs.map +1 -0
  105. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +461 -355
  106. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
  107. package/fesm2022/rt-tools-ui-kit-v2-input.mjs +338 -143
  108. package/fesm2022/rt-tools-ui-kit-v2-input.mjs.map +1 -1
  109. package/fesm2022/rt-tools-ui-kit-v2-live-badge.mjs +135 -48
  110. package/fesm2022/rt-tools-ui-kit-v2-live-badge.mjs.map +1 -1
  111. package/fesm2022/rt-tools-ui-kit-v2-logo.mjs +166 -92
  112. package/fesm2022/rt-tools-ui-kit-v2-logo.mjs.map +1 -1
  113. package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs +118 -56
  114. package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs.map +1 -1
  115. package/fesm2022/rt-tools-ui-kit-v2-menu.mjs +1054 -527
  116. package/fesm2022/rt-tools-ui-kit-v2-menu.mjs.map +1 -1
  117. package/fesm2022/rt-tools-ui-kit-v2-message.mjs +230 -104
  118. package/fesm2022/rt-tools-ui-kit-v2-message.mjs.map +1 -1
  119. package/fesm2022/rt-tools-ui-kit-v2-money-list.mjs +210 -70
  120. package/fesm2022/rt-tools-ui-kit-v2-money-list.mjs.map +1 -1
  121. package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +532 -311
  122. package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
  123. package/fesm2022/rt-tools-ui-kit-v2-night-grid.mjs +125 -50
  124. package/fesm2022/rt-tools-ui-kit-v2-night-grid.mjs.map +1 -1
  125. package/fesm2022/rt-tools-ui-kit-v2-note.mjs +73 -43
  126. package/fesm2022/rt-tools-ui-kit-v2-note.mjs.map +1 -1
  127. package/fesm2022/rt-tools-ui-kit-v2-notifications-bell.mjs +161 -53
  128. package/fesm2022/rt-tools-ui-kit-v2-notifications-bell.mjs.map +1 -1
  129. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +491 -310
  130. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
  131. package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs +374 -174
  132. package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs.map +1 -1
  133. package/fesm2022/rt-tools-ui-kit-v2-photo-viewer.mjs +202 -159
  134. package/fesm2022/rt-tools-ui-kit-v2-photo-viewer.mjs.map +1 -1
  135. package/fesm2022/rt-tools-ui-kit-v2-popover.mjs +438 -309
  136. package/fesm2022/rt-tools-ui-kit-v2-popover.mjs.map +1 -1
  137. package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs +295 -0
  138. package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs.map +1 -0
  139. package/fesm2022/rt-tools-ui-kit-v2-prompt-suggestion.mjs +135 -45
  140. package/fesm2022/rt-tools-ui-kit-v2-prompt-suggestion.mjs.map +1 -1
  141. package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs +293 -171
  142. package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs.map +1 -1
  143. package/fesm2022/rt-tools-ui-kit-v2-radius.mjs +62 -55
  144. package/fesm2022/rt-tools-ui-kit-v2-radius.mjs.map +1 -1
  145. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +3379 -1466
  146. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
  147. package/fesm2022/rt-tools-ui-kit-v2-ripple.mjs +114 -116
  148. package/fesm2022/rt-tools-ui-kit-v2-ripple.mjs.map +1 -1
  149. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +406 -299
  150. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
  151. package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs +137 -36
  152. package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs.map +1 -1
  153. package/fesm2022/rt-tools-ui-kit-v2-select.mjs +687 -468
  154. package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
  155. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +2195 -1569
  156. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
  157. package/fesm2022/rt-tools-ui-kit-v2-skeleton-wrapper.mjs +187 -48
  158. package/fesm2022/rt-tools-ui-kit-v2-skeleton-wrapper.mjs.map +1 -1
  159. package/fesm2022/rt-tools-ui-kit-v2-skeleton.mjs +242 -122
  160. package/fesm2022/rt-tools-ui-kit-v2-skeleton.mjs.map +1 -1
  161. package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs +439 -0
  162. package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs.map +1 -0
  163. package/fesm2022/rt-tools-ui-kit-v2-spinner.mjs +218 -69
  164. package/fesm2022/rt-tools-ui-kit-v2-spinner.mjs.map +1 -1
  165. package/fesm2022/rt-tools-ui-kit-v2-split-button.mjs +292 -91
  166. package/fesm2022/rt-tools-ui-kit-v2-split-button.mjs.map +1 -1
  167. package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs +225 -138
  168. package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs.map +1 -1
  169. package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs +150 -116
  170. package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs.map +1 -1
  171. package/fesm2022/rt-tools-ui-kit-v2-table.mjs +2462 -1583
  172. package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
  173. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +647 -346
  174. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
  175. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +335 -121
  176. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
  177. package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs +217 -84
  178. package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs.map +1 -1
  179. package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs +151 -72
  180. package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs.map +1 -1
  181. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +697 -226
  182. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
  183. package/fesm2022/rt-tools-ui-kit-v2-timeline.mjs +92 -38
  184. package/fesm2022/rt-tools-ui-kit-v2-timeline.mjs.map +1 -1
  185. package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +752 -338
  186. package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -1
  187. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +310 -129
  188. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
  189. package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs +286 -158
  190. package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs.map +1 -1
  191. package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs +270 -134
  192. package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs.map +1 -1
  193. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +322 -202
  194. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -1
  195. package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs +908 -0
  196. package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs.map +1 -0
  197. package/fesm2022/rt-tools-ui-kit-v2-tree.mjs +785 -0
  198. package/fesm2022/rt-tools-ui-kit-v2-tree.mjs.map +1 -0
  199. package/fesm2022/rt-tools-ui-kit-v2-welcome-dialog.mjs +118 -63
  200. package/fesm2022/rt-tools-ui-kit-v2-welcome-dialog.mjs.map +1 -1
  201. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +783 -262
  202. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
  203. package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs +633 -294
  204. package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs.map +1 -1
  205. package/fesm2022/rt-tools-ui-kit-v2.mjs +100 -103
  206. package/package.json +45 -1
  207. package/src/assets/icons/collapse-all.svg +9 -0
  208. package/src/assets/icons/expand-all.svg +9 -0
  209. package/src/assets/icons-material/collapse-all.fill.svg +5 -0
  210. package/src/assets/icons-material/collapse-all.svg +5 -0
  211. package/src/assets/icons-material/expand-all.fill.svg +5 -0
  212. package/src/assets/icons-material/expand-all.svg +5 -0
  213. package/src/assets/icons-material/undo.fill.svg +5 -0
  214. package/src/assets/icons-material/undo.svg +5 -0
  215. package/src/lib/components/bottom-sheet/CONTEXT.md +20 -2
  216. package/src/lib/components/bottom-sheet/rt-bottom-sheet.component.scss +36 -1
  217. package/src/lib/components/breadcrumbs/CONTEXT.md +37 -0
  218. package/src/lib/components/breadcrumbs/rt-breadcrumbs.component.scss +205 -0
  219. package/src/lib/components/carousel/CONTEXT.md +42 -0
  220. package/src/lib/components/carousel/rt-carousel.component.scss +117 -0
  221. package/src/lib/components/checkbox/CONTEXT.md +3 -0
  222. package/src/lib/components/checkbox/rt-checkbox.component.scss +9 -3
  223. package/src/lib/components/color-palette/CONTEXT.md +49 -0
  224. package/src/lib/components/color-palette/picker/rt-color-picker.component.scss +161 -0
  225. package/src/lib/components/color-palette/rt-color-palette.component.scss +132 -0
  226. package/src/lib/components/draggable-tree/CONTEXT.md +54 -0
  227. package/src/lib/components/draggable-tree/rt-draggable-tree.component.scss +219 -0
  228. package/src/lib/components/hybrid-tree/CONTEXT.md +31 -0
  229. package/src/lib/components/hybrid-tree-selector/CONTEXT.md +25 -0
  230. package/src/lib/components/icon-button/CONTEXT.md +3 -0
  231. package/src/lib/components/inline-edit/CONTEXT.md +41 -0
  232. package/src/lib/components/inline-edit/rt-inline-edit.component.scss +274 -0
  233. package/src/lib/components/popover/CONTEXT.md +3 -0
  234. package/src/lib/components/profile-menu/CONTEXT.md +32 -0
  235. package/src/lib/components/profile-menu/rt-profile-menu.component.scss +104 -0
  236. package/src/lib/components/speed-menu/CONTEXT.md +34 -0
  237. package/src/lib/components/speed-menu/rt-speed-menu.component.scss +118 -0
  238. package/src/lib/components/tag/rt-tag.component.scss +12 -0
  239. package/src/lib/components/thread-list/CONTEXT.md +1 -0
  240. package/src/lib/components/thread-list/rt-thread-list.component.scss +2 -1
  241. package/src/lib/components/toolbar/CONTEXT.md +9 -4
  242. package/src/lib/components/toolbar/rt-toolbar.component.scss +10 -2
  243. package/src/lib/components/tooltip/CONTEXT.md +8 -1
  244. package/src/lib/components/tree/CONTEXT.md +66 -0
  245. package/src/lib/components/tree/rt-tree.component.scss +313 -0
  246. package/src/lib/components/tree-selector/CONTEXT.md +47 -0
  247. package/src/lib/components/tree-selector/rt-tree-selector.component.scss +121 -0
  248. package/src/styles/_primitives.scss +4 -0
  249. package/src/styles/_semantic.scss +5 -0
  250. package/styles/tokens.css +43 -0
  251. package/types/rt-tools-ui-kit-v2-accordion.d.ts +31 -24
  252. package/types/rt-tools-ui-kit-v2-action-bar.d.ts +112 -91
  253. package/types/rt-tools-ui-kit-v2-ai-run-status.d.ts +64 -40
  254. package/types/rt-tools-ui-kit-v2-aside-section.d.ts +13 -10
  255. package/types/rt-tools-ui-kit-v2-aside.d.ts +268 -206
  256. package/types/rt-tools-ui-kit-v2-autocomplete.d.ts +102 -61
  257. package/types/rt-tools-ui-kit-v2-bar-list.d.ts +39 -27
  258. package/types/rt-tools-ui-kit-v2-bottom-sheet.d.ts +31 -20
  259. package/types/rt-tools-ui-kit-v2-breadcrumbs.d.ts +89 -0
  260. package/types/rt-tools-ui-kit-v2-button.d.ts +119 -59
  261. package/types/rt-tools-ui-kit-v2-calendar.d.ts +151 -86
  262. package/types/rt-tools-ui-kit-v2-card.d.ts +42 -21
  263. package/types/rt-tools-ui-kit-v2-carousel.d.ts +76 -0
  264. package/types/rt-tools-ui-kit-v2-checkbox.d.ts +48 -24
  265. package/types/rt-tools-ui-kit-v2-collapsible-text.d.ts +28 -20
  266. package/types/rt-tools-ui-kit-v2-color-palette.d.ts +208 -0
  267. package/types/rt-tools-ui-kit-v2-confirm-popover.d.ts +104 -47
  268. package/types/rt-tools-ui-kit-v2-container.d.ts +278 -221
  269. package/types/rt-tools-ui-kit-v2-copy-value.d.ts +39 -24
  270. package/types/rt-tools-ui-kit-v2-core.d.ts +862 -865
  271. package/types/rt-tools-ui-kit-v2-counter-row.d.ts +20 -12
  272. package/types/rt-tools-ui-kit-v2-counter.d.ts +70 -38
  273. package/types/rt-tools-ui-kit-v2-data-list.d.ts +429 -264
  274. package/types/rt-tools-ui-kit-v2-data-table.d.ts +500 -351
  275. package/types/rt-tools-ui-kit-v2-date-picker.d.ts +164 -138
  276. package/types/rt-tools-ui-kit-v2-date-range.d.ts +102 -84
  277. package/types/rt-tools-ui-kit-v2-delta-view.d.ts +16 -13
  278. package/types/rt-tools-ui-kit-v2-detail-list.d.ts +23 -16
  279. package/types/rt-tools-ui-kit-v2-dialog.d.ts +130 -101
  280. package/types/rt-tools-ui-kit-v2-dot-field.d.ts +10 -13
  281. package/types/rt-tools-ui-kit-v2-download-link.d.ts +22 -17
  282. package/types/rt-tools-ui-kit-v2-draggable-tree.d.ts +132 -0
  283. package/types/rt-tools-ui-kit-v2-dynamic-list.d.ts +185 -96
  284. package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +904 -404
  285. package/types/rt-tools-ui-kit-v2-empty-state.d.ts +48 -19
  286. package/types/rt-tools-ui-kit-v2-expansion-panel.d.ts +67 -39
  287. package/types/rt-tools-ui-kit-v2-field.d.ts +90 -49
  288. package/types/rt-tools-ui-kit-v2-file-card.d.ts +115 -75
  289. package/types/rt-tools-ui-kit-v2-file-drop.d.ts +75 -48
  290. package/types/rt-tools-ui-kit-v2-file-input.d.ts +53 -36
  291. package/types/rt-tools-ui-kit-v2-file-list.d.ts +5 -8
  292. package/types/rt-tools-ui-kit-v2-filter-control.d.ts +83 -49
  293. package/types/rt-tools-ui-kit-v2-form-control.d.ts +102 -74
  294. package/types/rt-tools-ui-kit-v2-header.d.ts +40 -22
  295. package/types/rt-tools-ui-kit-v2-hybrid-tree-selector.d.ts +14 -0
  296. package/types/rt-tools-ui-kit-v2-hybrid-tree.d.ts +72 -0
  297. package/types/rt-tools-ui-kit-v2-icon-button.d.ts +190 -90
  298. package/types/rt-tools-ui-kit-v2-icon.d.ts +160 -129
  299. package/types/rt-tools-ui-kit-v2-image-cropper.d.ts +151 -111
  300. package/types/rt-tools-ui-kit-v2-image-upload.d.ts +159 -85
  301. package/types/rt-tools-ui-kit-v2-info-item.d.ts +26 -13
  302. package/types/rt-tools-ui-kit-v2-inline-edit.d.ts +194 -0
  303. package/types/rt-tools-ui-kit-v2-input-number.d.ts +102 -53
  304. package/types/rt-tools-ui-kit-v2-input.d.ts +82 -43
  305. package/types/rt-tools-ui-kit-v2-live-badge.d.ts +30 -17
  306. package/types/rt-tools-ui-kit-v2-logo.d.ts +49 -32
  307. package/types/rt-tools-ui-kit-v2-markdown-text.d.ts +26 -17
  308. package/types/rt-tools-ui-kit-v2-menu.d.ts +272 -155
  309. package/types/rt-tools-ui-kit-v2-message.d.ts +59 -33
  310. package/types/rt-tools-ui-kit-v2-money-list.d.ts +36 -18
  311. package/types/rt-tools-ui-kit-v2-multiselect.d.ts +114 -80
  312. package/types/rt-tools-ui-kit-v2-night-grid.d.ts +34 -25
  313. package/types/rt-tools-ui-kit-v2-note.d.ts +12 -9
  314. package/types/rt-tools-ui-kit-v2-notifications-bell.d.ts +37 -16
  315. package/types/rt-tools-ui-kit-v2-page-header.d.ts +218 -150
  316. package/types/rt-tools-ui-kit-v2-pagination.d.ts +99 -63
  317. package/types/rt-tools-ui-kit-v2-photo-viewer.d.ts +61 -66
  318. package/types/rt-tools-ui-kit-v2-popover.d.ts +116 -55
  319. package/types/rt-tools-ui-kit-v2-profile-menu.d.ts +103 -0
  320. package/types/rt-tools-ui-kit-v2-prompt-suggestion.d.ts +26 -16
  321. package/types/rt-tools-ui-kit-v2-radio-button.d.ts +85 -43
  322. package/types/rt-tools-ui-kit-v2-radius.d.ts +18 -15
  323. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +931 -590
  324. package/types/rt-tools-ui-kit-v2-ripple.d.ts +28 -25
  325. package/types/rt-tools-ui-kit-v2-scroll-area.d.ts +60 -58
  326. package/types/rt-tools-ui-kit-v2-section-nav.d.ts +32 -22
  327. package/types/rt-tools-ui-kit-v2-select.d.ts +182 -139
  328. package/types/rt-tools-ui-kit-v2-side-menu.d.ts +452 -349
  329. package/types/rt-tools-ui-kit-v2-skeleton-wrapper.d.ts +53 -20
  330. package/types/rt-tools-ui-kit-v2-skeleton.d.ts +55 -26
  331. package/types/rt-tools-ui-kit-v2-speed-menu.d.ts +131 -0
  332. package/types/rt-tools-ui-kit-v2-spinner.d.ts +56 -28
  333. package/types/rt-tools-ui-kit-v2-split-button.d.ts +96 -55
  334. package/types/rt-tools-ui-kit-v2-stat-tile.d.ts +88 -60
  335. package/types/rt-tools-ui-kit-v2-stepper.d.ts +50 -37
  336. package/types/rt-tools-ui-kit-v2-table.d.ts +631 -480
  337. package/types/rt-tools-ui-kit-v2-tabs.d.ts +198 -113
  338. package/types/rt-tools-ui-kit-v2-tag.d.ts +106 -53
  339. package/types/rt-tools-ui-kit-v2-textarea.d.ts +48 -25
  340. package/types/rt-tools-ui-kit-v2-theme-toggle.d.ts +28 -26
  341. package/types/rt-tools-ui-kit-v2-thread-list.d.ts +154 -94
  342. package/types/rt-tools-ui-kit-v2-timeline.d.ts +30 -28
  343. package/types/rt-tools-ui-kit-v2-toast.d.ts +174 -98
  344. package/types/rt-tools-ui-kit-v2-toggle-button-group.d.ts +132 -86
  345. package/types/rt-tools-ui-kit-v2-toggle-switch.d.ts +88 -50
  346. package/types/rt-tools-ui-kit-v2-toolbar.d.ts +30 -27
  347. package/types/rt-tools-ui-kit-v2-tooltip.d.ts +65 -41
  348. package/types/rt-tools-ui-kit-v2-tree-selector.d.ts +257 -0
  349. package/types/rt-tools-ui-kit-v2-tree.d.ts +282 -0
  350. package/types/rt-tools-ui-kit-v2-welcome-dialog.d.ts +21 -24
  351. package/types/rt-tools-ui-kit-v2-workspace-details.d.ts +195 -124
  352. package/types/rt-tools-ui-kit-v2-workspace.d.ts +122 -79
  353. package/types/rt-tools-ui-kit-v2.d.ts +100 -90
  354. package/fesm2022/rt-tools-ui-kit-v2.mjs.map +0 -1
@@ -1,478 +1,551 @@
1
- import * as i0 from '@angular/core';
2
- import { input, ViewEncapsulation, ChangeDetectionStrategy, Component, signal, InjectionToken, inject, Injector, afterNextRender, Injectable, booleanAttribute } from '@angular/core';
3
- import { BlockDirective, ModDirective, ElemDirective } from '@rt-tools/core';
4
- import * as i1 from '@rt-tools/ui-kit-v2/radius';
5
- import { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';
6
- import { FocusTrapFactory } from '@angular/cdk/a11y';
7
- import { Overlay } from '@angular/cdk/overlay';
8
- import { ComponentPortal } from '@angular/cdk/portal';
9
- import { DOCUMENT } from '@angular/common';
10
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
11
- import { Subject, take, mergeMap, map, EMPTY, merge, takeUntil } from 'rxjs';
12
- import { materialPresetClassesOfFocus, carryThemeScopeOfFocus, RT_KIT_LABELS } from '@rt-tools/ui-kit-v2/core';
13
- import { RtIconButtonComponent } from '@rt-tools/ui-kit-v2/icon-button';
14
-
15
- const BEM_BLOCK$3 = 'rt-dialog';
16
- /**
17
- * Презентационный styled-frame для модалки поверх CDK Overlay.
18
- *
19
- * Видимость / backdrop / scroll-block / ESC / фокус — НЕ внутренняя
20
- * ответственность компонента. Это обеспечивает `RtDialogService.open()`: оверлей CDK, а
21
- * ловушку и первый фокус — по флагам `trapFocus`, `restoreFocus` и `autoFocus` (по
22
- * умолчанию выключены). Рамка несёт `tabindex="-1"`, чтобы `autoFocus: 'dialog'` мог её взять. rt-dialog здесь — стилизованная "рамка"
23
- * (padding-free контейнер) с size-вариантами + ng-content слотом.
24
- *
25
- * Композиция:
26
- * \`\`\`html
27
- * <rt-dialog size="md">
28
- * <rt-dialog-header title="Создание записи" />
29
- * <div style="padding: var(--rt-space-lg);">body...</div>
30
- * <rt-dialog-footer>
31
- * <button rtButton (click)="cancel()">Отмена</button>
32
- * <button rtButton (click)="save()">Сохранить</button>
33
- * </rt-dialog-footer>
34
- * </rt-dialog>
35
- * \`\`\`
36
- *
37
- * Открытие — через `RtDialogService.open(MyModalComponent, { data })` →
38
- * получаешь `RtDialogRef<T>` с `.close(result)` + `.afterClosed()`.
39
- *
40
- * `ViewEncapsulation.None` — стили префиксованы `.rt-dialog`, чтобы
41
- * rt-dialog-header / rt-dialog-footer subscriptions работали с одним
42
- * BEM-классом без cross-encapsulation хака.
43
- */
44
- class RtDialogComponent {
45
- constructor() {
46
- /**
47
- * Размер модалки:
48
- * - `sm` — 460px (`--rt-dialog-width-sm`)
49
- * - `md` — 660px (`--rt-dialog-width-md`, дефолт)
50
- * - `lg` — 860px (`--rt-dialog-width-lg`)
51
- */
52
- this.size = input('md', /* @ts-ignore */
53
- ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
54
- /** Override ширины через CSS-property `--rt-dialog-width`. Имеет приоритет над `size`. */
55
- this.width = input(null, /* @ts-ignore */
56
- ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
57
- /** ARIA-label для dialog-обёртки (если нет видимого заголовка). */
58
- this.ariaLabel = input(null, /* @ts-ignore */
59
- ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
60
- }
61
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
62
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: RtDialogComponent, isStandalone: true, selector: "rt-dialog", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--rt-dialog-width": "width()" }, classAttribute: "rt-dialog" }, hostDirectives: [{ directive: i1.RtRadiusDirective, inputs: ["radius", "radius"] }], ngImport: i0, template: "<div\n rtBlock=\"rt-dialog\"\n qa-dataid=\"dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n tabindex=\"-1\"\n [rtMod]=\"{ size: size() }\"\n [style.--rt-dialog-width]=\"width()\"\n [attr.aria-label]=\"ariaLabel()\">\n <ng-content />\n</div>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog{display:contents}rt-dialog[data-rt-radius=none]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-none)}rt-dialog[data-rt-radius=xs]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-xs)}rt-dialog[data-rt-radius=sm]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-sm)}rt-dialog[data-rt-radius=ms]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-ms)}rt-dialog[data-rt-radius=md]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-md)}rt-dialog[data-rt-radius=lg]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-lg)}rt-dialog[data-rt-radius=xl]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-xl)}rt-dialog[data-rt-radius=\"2xl\"]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-2xl)}rt-dialog[data-rt-radius=full]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-full)}:root{--rt-dialog-width-sm: 460px;--rt-dialog-width-md: 660px;--rt-dialog-width-lg: 860px;--rt-dialog-shadow: var(--rt-shadow-dialog);--rt-dialog-radius: var(--rt-radius-xl);--rt-dialog-backdrop-bg: var(--rt-overlay-navy-70);--rt-dialog-backdrop-blur: 5px}rt-dialog .rt-dialog{display:flex;overflow:hidden;width:var(--rt-dialog-width, var(--rt-dialog-width-md));max-width:90dvw;max-height:90dvh;flex-direction:column;padding:0;border:var(--rt-dialog-border, none);border-radius:var(--rt-dialog-radius);background:var(--rt-dialog-bg, var(--rt-color-bg-surface));box-shadow:var(--rt-dialog-shadow);color:var(--rt-color-text-primary)}rt-dialog .rt-dialog:focus{outline:none}rt-dialog .rt-dialog--size--sm{width:var(--rt-dialog-width, var(--rt-dialog-width-sm))}rt-dialog .rt-dialog--size--md{width:var(--rt-dialog-width, var(--rt-dialog-width-md))}rt-dialog .rt-dialog--size--lg{width:var(--rt-dialog-width, var(--rt-dialog-width-lg))}.rt-dialog-backdrop{-webkit-backdrop-filter:blur(var(--rt-dialog-backdrop-blur));backdrop-filter:blur(var(--rt-dialog-backdrop-blur));background:var(--rt-dialog-backdrop-bg)}.rt-dialog-overlay{display:flex;align-items:center;justify-content:center}}\n"], dependencies: [{ kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
63
- }
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtDialogComponent, decorators: [{
65
- type: Component,
66
- args: [{ selector: 'rt-dialog', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [BlockDirective, ModDirective], hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }], host: {
67
- class: BEM_BLOCK$3,
68
- '[style.--rt-dialog-width]': 'width()',
69
- }, template: "<div\n rtBlock=\"rt-dialog\"\n qa-dataid=\"dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n tabindex=\"-1\"\n [rtMod]=\"{ size: size() }\"\n [style.--rt-dialog-width]=\"width()\"\n [attr.aria-label]=\"ariaLabel()\">\n <ng-content />\n</div>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog{display:contents}rt-dialog[data-rt-radius=none]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-none)}rt-dialog[data-rt-radius=xs]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-xs)}rt-dialog[data-rt-radius=sm]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-sm)}rt-dialog[data-rt-radius=ms]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-ms)}rt-dialog[data-rt-radius=md]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-md)}rt-dialog[data-rt-radius=lg]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-lg)}rt-dialog[data-rt-radius=xl]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-xl)}rt-dialog[data-rt-radius=\"2xl\"]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-2xl)}rt-dialog[data-rt-radius=full]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-full)}:root{--rt-dialog-width-sm: 460px;--rt-dialog-width-md: 660px;--rt-dialog-width-lg: 860px;--rt-dialog-shadow: var(--rt-shadow-dialog);--rt-dialog-radius: var(--rt-radius-xl);--rt-dialog-backdrop-bg: var(--rt-overlay-navy-70);--rt-dialog-backdrop-blur: 5px}rt-dialog .rt-dialog{display:flex;overflow:hidden;width:var(--rt-dialog-width, var(--rt-dialog-width-md));max-width:90dvw;max-height:90dvh;flex-direction:column;padding:0;border:var(--rt-dialog-border, none);border-radius:var(--rt-dialog-radius);background:var(--rt-dialog-bg, var(--rt-color-bg-surface));box-shadow:var(--rt-dialog-shadow);color:var(--rt-color-text-primary)}rt-dialog .rt-dialog:focus{outline:none}rt-dialog .rt-dialog--size--sm{width:var(--rt-dialog-width, var(--rt-dialog-width-sm))}rt-dialog .rt-dialog--size--md{width:var(--rt-dialog-width, var(--rt-dialog-width-md))}rt-dialog .rt-dialog--size--lg{width:var(--rt-dialog-width, var(--rt-dialog-width-lg))}.rt-dialog-backdrop{-webkit-backdrop-filter:blur(var(--rt-dialog-backdrop-blur));backdrop-filter:blur(var(--rt-dialog-backdrop-blur));background:var(--rt-dialog-backdrop-bg)}.rt-dialog-overlay{display:flex;align-items:center;justify-content:center}}\n"] }]
70
- }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
71
-
72
- /**
73
- * Хэндл к программно открытой модалке (через `RtDialogService.open()`).
74
- *
75
- * Контент-компонент инжектит `RtDialogRef` и закрывает модалку через `.close(result?)`.
76
- * Родитель, открывший модалку, ждёт результата через `.afterClosed()`.
77
- *
78
- * Слой, снятый без `close()` — переходом по адресу или уничтожением хозяина, — тоже завершает
79
- * `afterClosed()`: подписчик получает `undefined`. Иначе он ждал бы ответа, которого не будет.
80
- *
81
- * Generic `<T>` — тип результата `close(result)`. Дефолт `unknown` — если результат
82
- * не нужен, оставляй generic пустым.
83
- *
84
- * @example
85
- * \`\`\`ts
86
- * // в контент-компоненте
87
- * private readonly dialogRef = inject(RtDialogRef);
88
- * close(): void { this.dialogRef.close({ confirmed: true }); }
89
- *
90
- * // в родителе
91
- * dialogService.open(MyDialogComponent).afterClosed().subscribe((result) => {...});
92
- * \`\`\`
93
- */
94
- class RtDialogRef {
95
- #overlayRef;
96
- #afterClosedSource;
97
- #isClosed;
98
- constructor(overlayRef) {
99
- /**
100
- * Runtime-флаг, блокирующий close() через ESC / backdrop click.
101
- *
102
- * Default `false`. Включай (`dialogRef.disableClose.set(true)`) на
103
- * время in-flight submit'а, чтобы юзер не потерял введённые в форму
104
- * данные на случайном ESC. После next/error subscribe ставь обратно
105
- * в `false`. Не влияет на программный `close(result)` — он всегда
106
- * закрывает overlay.
107
- *
108
- * Статические config-флаги `closeOnEscape` / `closeOnBackdropClick`
109
- * (см. `IRtDialogConfig`) определяют, подписан ли вообще handler на
110
- * соответствующее событие; `disableClose` — это runtime-override,
111
- * который гейтит dispatch внутри уже-подписанного handler'а.
112
- */
113
- this.disableClose = signal(false, /* @ts-ignore */
114
- ...(ngDevMode ? [{ debugName: "disableClose" }] : /* istanbul ignore next */ []));
115
- this.#afterClosedSource = new Subject();
116
- this.#isClosed = false;
117
- this.#overlayRef = overlayRef;
118
- this.#overlayRef
119
- .detachments()
120
- .pipe(take(1))
121
- .subscribe(() => this.#finish(undefined));
122
- }
123
- /** Закрывает overlay; опционально передаёт результат подписчикам `afterClosed()`. */
124
- close(result) {
125
- if (this.#isClosed) {
126
- return;
127
- }
128
- // Флаг до dispose: снятие слоя само отзовётся в detachments(), а результат отдаёт close().
129
- this.#isClosed = true;
130
- this.#overlayRef.dispose();
131
- this.#afterClosedSource.next(result);
132
- this.#afterClosedSource.complete();
133
- }
134
- /** Эмиттит один раз — результат `close(result)` или `undefined` при снятом слое — и завершается. */
135
- afterClosed() {
136
- return this.#afterClosedSource.asObservable();
137
- }
138
- #finish(result) {
139
- if (this.#isClosed) {
140
- return;
141
- }
142
- this.#isClosed = true;
143
- this.#afterClosedSource.next(result);
144
- this.#afterClosedSource.complete();
145
- }
146
- }
147
-
148
- /**
149
- * Injection token для передачи данных в модалку, открытую через `RtDialogService.open()`.
150
- *
151
- * Пользовательский компонент-контент модалки инжектит токен и получает данные,
152
- * переданные в `DialogConfig.data`. Тип значения задаётся generic'ом — `inject(RT_DIALOG_DATA)`
153
- * вернёт `unknown`, прокастуй через `inject(RT_DIALOG_DATA) as MyDataType` ИЛИ
154
- * объяви токен с конкретным generic'ом в feature-либе.
155
- *
156
- * @example
157
- * \`\`\`ts
158
- * @Component({...})
159
- * export class WelcomeModalComponent {
160
- * readonly data = inject(RT_DIALOG_DATA) as { userName: string };
161
- * }
162
- *
163
- * // parent
164
- * dialogService.open(WelcomeModalComponent, { data: { userName: "Иван" } });
165
- * \`\`\`
166
- */
167
- const RT_DIALOG_DATA = new InjectionToken('RT_DIALOG_DATA');
168
-
169
- /**
170
- * Программный API для открытия модалок поверх CDK Overlay.
171
- *
172
- * Устройство сервиса:
173
- * - `Overlay.position().global().centerHorizontally().centerVertically()` — центрирование.
174
- * - `scrollStrategies.block()` — фиксирует background-scroll.
175
- * - `hasBackdrop: true` + кастомный класс — затемнение.
176
- * - `ComponentPortal` + custom `Injector` подкидывает `RtDialogRef` + `RT_DIALOG_DATA` в DI
177
- * контент-компонента.
178
- *
179
- * Альтернатива: legacy inline `<rt-dialog [visible]>` форма продолжает работать через
180
- * native `<dialog>.showModal()`. Новые экраны — на программный API.
181
- *
182
- * @example
183
- * \`\`\`ts
184
- * // открытие
185
- * private readonly dialogService = inject(RtDialogService);
186
- *
187
- * openConfirm(): void {
188
- * const ref = this.dialogService.open<ConfirmDialogComponent, { question: string }, boolean>(
189
- * ConfirmDialogComponent,
190
- * { data: { question: "Удалить?" } }
191
- * );
192
- * ref.afterClosed().subscribe((confirmed) => {
193
- * if (confirmed) this.delete();
194
- * });
195
- * }
196
- *
197
- * // контент-компонент
198
- * @Component({
199
- * selector: "rt-confirm-dialog",
200
- * template: \`
201
- * <rt-dialog size="sm">
202
- * <rt-dialog-header [title]="data.question" />
203
- * <div>Действие необратимо.</div>
204
- * <rt-dialog-footer>
205
- * <button rtButton (click)="close(false)">Отмена</button>
206
- * <button rtButton theme="danger" (click)="close(true)">Удалить</button>
207
- * </rt-dialog-footer>
208
- * </rt-dialog>
209
- * \`,
210
- * })
211
- * export class ConfirmDialogComponent {
212
- * readonly data = inject(RT_DIALOG_DATA) as { question: string };
213
- * readonly #ref = inject(RtDialogRef<boolean>);
214
- * close(result: boolean): void { this.#ref.close(result); }
215
- * }
216
- * \`\`\`
217
- */
218
- class RtDialogService {
219
- #overlay = inject(Overlay);
220
- #injector = inject(Injector);
221
- #document = inject(DOCUMENT);
222
- #focusTrapFactory = inject(FocusTrapFactory);
223
- #openSource = new Subject();
224
- constructor() {
225
- // Per-open close-подписки (backdrop / ESC) живут в одном постоянном
226
- // конструкторном стриме: open() эмитит контекст открытия, mergeMap
227
- // подписывает event-стримы конкретного OverlayRef. `detachments()`
228
- // терминирует внутренний поток при overlay.dispose() (дёргается из
229
- // RtDialogRef.close()). mergeMap, а не switchMap — одновременно может
230
- // быть открыто несколько модалок (стек).
231
- //
232
- // Внутри обоих handler'ов — runtime-guard через `dialogRef.disableClose()`:
233
- // если контент-компонент выставил `disableClose.set(true)` (например, на
234
- // время in-flight submit'а), ESC / backdrop НЕ закрывают overlay.
235
- // Программный `dialogRef.close(result)` гейтом не задет — он всегда работает.
236
- this.#openSource
237
- .pipe(mergeMap((openContext) => {
238
- const backdropClose$ = openContext.closeOnBackdropClick
239
- ? openContext.overlayRef.backdropClick().pipe(map(() => () => {
240
- if (openContext.dialogRef.disableClose()) {
241
- return;
242
- }
243
- openContext.dialogRef.close();
244
- }))
245
- : EMPTY;
246
- const escapeClose$ = openContext.closeOnEscape
247
- ? openContext.overlayRef.keydownEvents().pipe(map((event) => () => {
248
- if (event.key !== 'Escape') {
249
- return;
250
- }
251
- event.preventDefault();
252
- if (openContext.dialogRef.disableClose()) {
253
- return;
254
- }
255
- openContext.dialogRef.close();
256
- }))
257
- : EMPTY;
258
- // Уход оверлея снимает ловушку фокуса и возвращает фокус. Отдельно от закрывающих
259
- // потоков: те обрываются тем же уходом и до него не доживают.
260
- const releaseFocus$ = openContext.overlayRef.detachments().pipe(take(1), map(() => () => this.#releaseFocus(openContext.focus)));
261
- return merge(merge(backdropClose$, escapeClose$).pipe(takeUntil(openContext.overlayRef.detachments())), releaseFocus$);
262
- }), takeUntilDestroyed())
263
- .subscribe((handleCloseIntent) => handleCloseIntent());
264
- }
265
- open(component, config) {
266
- const overlayRef = this.#overlay.create({
267
- positionStrategy: this.#overlay.position().global().centerHorizontally().centerVertically(),
268
- scrollStrategy: this.#overlay.scrollStrategies.block(),
269
- hasBackdrop: true,
270
- backdropClass: config?.backdropClass ?? 'rt-dialog-backdrop',
271
- panelClass: [config?.panelClass ?? 'rt-dialog-overlay', materialPresetClassesOfFocus(this.#document)].flat(),
272
- disposeOnNavigation: true,
273
- });
274
- // До attach: содержимое диалога может забрать фокус, и кусок темы у кнопки будет потерян.
275
- carryThemeScopeOfFocus(overlayRef.overlayElement, this.#document);
276
- const dialogRef = new RtDialogRef(overlayRef);
277
- const focus = {
278
- trap: null,
279
- restoreTo: config?.restoreFocus === true ? this.#focusedElement() : null,
280
- };
281
- // Сами close-подписки объявлены один раз в конструкторе — здесь только
282
- // эмит контекста открытия (см. #openSource-стрим).
283
- this.#openSource.next({
284
- overlayRef,
285
- dialogRef,
286
- focus,
287
- closeOnBackdropClick: config?.closeOnBackdropClick !== false,
288
- closeOnEscape: config?.closeOnEscape !== false,
289
- });
290
- const injector = Injector.create({
291
- parent: this.#injector,
292
- providers: [
293
- { provide: RtDialogRef, useValue: dialogRef },
294
- { provide: RT_DIALOG_DATA, useValue: config?.data ?? null },
295
- ],
296
- });
297
- const portal = new ComponentPortal(component, null, injector);
298
- overlayRef.attach(portal);
299
- this.#holdFocus(overlayRef.overlayElement, focus, config?.trapFocus === true, config?.autoFocus ?? false);
300
- return dialogRef;
301
- }
302
- /**
303
- * Ловушка и первый фокус ставятся после отрисовки содержимого: до неё в оверлее нет ни рамки,
304
- * ни кнопок, и ловушке не на что опереться.
305
- */
306
- #holdFocus(pane, focus, trapFocus, autoFocus) {
307
- if (!trapFocus && autoFocus === false) {
308
- return;
309
- }
310
- afterNextRender(() => {
311
- if (trapFocus) {
312
- focus.trap = this.#focusTrapFactory.create(pane);
313
- }
314
- switch (autoFocus) {
315
- case 'dialog':
316
- pane.querySelector('[role="dialog"]')?.focus();
317
- break;
318
- case 'first-tabbable':
319
- this.#focusFirstTabbable(pane, focus.trap);
320
- break;
321
- default:
322
- break;
323
- }
324
- }, { injector: this.#injector });
325
- }
326
- /** Без ловушки первый элемент ищет временная ловушка: обход по Tab у неё уже есть. */
327
- #focusFirstTabbable(pane, trap) {
328
- if (trap) {
329
- trap.focusFirstTabbableElement();
330
- return;
331
- }
332
- const lookup = this.#focusTrapFactory.create(pane);
333
- lookup.focusFirstTabbableElement();
334
- lookup.destroy();
335
- }
336
- #releaseFocus(focus) {
337
- focus.trap?.destroy();
338
- focus.trap = null;
339
- if (focus.restoreTo?.isConnected) {
340
- focus.restoreTo.focus();
341
- }
342
- }
343
- #focusedElement() {
344
- const active = this.#document.activeElement;
345
- return active instanceof HTMLElement && active !== this.#document.body ? active : null;
346
- }
347
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
348
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtDialogService, providedIn: 'root' }); }
349
- }
350
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtDialogService, decorators: [{
351
- type: Injectable,
352
- args: [{ providedIn: 'root' }]
353
- }], ctorParameters: () => [] });
354
-
355
- const BEM_BLOCK$2 = 'rt-dialog-header';
356
- /**
357
- * Заголовок модалки для композиции внутри `<rt-dialog>`.
358
- *
359
- * Если компонент рендерится внутри overlay-портала, открытого через `RtDialogService.open()`,
360
- * кнопка закрытия дёргает `inject(RtDialogRef).close()` автоматически. В legacy-режиме
361
- * (внутри inline `<rt-dialog [visible]>`) `RtDialogRef` не зарегистрирован — клик
362
- * по close-кнопке эмитит output `(closeAction)`, который должен повесить родитель.
363
- *
364
- * Перед заголовком — место для значка или другого элемента: узел с атрибутом
365
- * `rtDialogHeaderLead` проецируется туда. Пустое место ничего не занимает.
366
- *
367
- * `ViewEncapsulation.None` — для единообразия с rt-dialog (стили префиксованы `.rt-dialog-header`).
368
- *
369
- * @example
370
- * \`\`\`html
371
- * <rt-dialog size="md">
372
- * <rt-dialog-header title="Создание записи" />
373
- * <div>...форма...</div>
374
- * <rt-dialog-footer>
375
- * <button rtButton (click)="cancel()">Отмена</button>
376
- * <button rtButton theme="primary" (click)="save()">Сохранить</button>
377
- * </rt-dialog-footer>
378
- * </rt-dialog>
379
- * \`\`\`
380
- */
381
- class RtDialogHeaderComponent {
382
- constructor() {
383
- this.#dialogRef = inject(RtDialogRef, { optional: true });
384
- /** Текст заголовка — рендерится в `<h2>`. */
385
- this.t = inject(RT_KIT_LABELS);
386
- this.title = input.required(/* @ts-ignore */
387
- ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
388
- /** Показывать кнопку закрытия в углу заголовка. Дефолт `true`. */
389
- this.closable = input(true, { ...(ngDevMode ? { debugName: "closable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
390
- }
391
- #dialogRef;
392
- onClose() {
393
- // Programmatic mode — закрываем через DialogRef.
394
- this.#dialogRef?.close();
395
- }
396
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtDialogHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
397
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: RtDialogHeaderComponent, isStandalone: true, selector: "rt-dialog-header", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "rt-dialog-header" }, ngImport: i0, template: "<header rtBlock=\"rt-dialog-header\" qa-dataid=\"dialog-header\">\n <span rtElem=\"lead\" qa-dataid=\"dialog-header-lead\"><ng-content select=\"[rtDialogHeaderLead]\" /></span>\n <h2 rtElem=\"title\" qa-dataid=\"dialog-title\">{{ title() }}</h2>\n @if (closable()) {\n <rt-icon-button\n rtElem=\"close\"\n qa-dataid=\"dialog-close\"\n icon=\"ico-close\"\n size=\"sm\"\n variant=\"ghost\"\n [ariaLabel]=\"t().uiClose\"\n (clicked)=\"onClose()\" />\n }\n</header>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog-header{display:contents}rt-dialog-header .rt-dialog-header{--rt-dialog-header-border-default: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);display:flex;align-items:center;justify-content:space-between;padding:var(--rt-dialog-header-padding, var(--rt-space-lg));border-block-end:var(--rt-dialog-header-border, var(--rt-dialog-header-border-default));gap:var(--rt-space-sm)}rt-dialog-header .rt-dialog-header__lead{display:inline-flex;flex-shrink:0;align-items:center}rt-dialog-header .rt-dialog-header__lead:empty{display:none}rt-dialog-header .rt-dialog-header__title{margin:0;color:var(--rt-color-text-primary);font-size:var(--rt-dialog-title-font-size, var(--rt-text-xl));font-weight:var(--rt-dialog-title-weight, var(--rt-font-weight-bold));text-transform:var(--rt-dialog-title-transform, none)}rt-dialog-header .rt-dialog-header__close{margin-inline-start:auto}}\n"], dependencies: [{ kind: "component", type:
398
- // standalone components / directives
399
- RtIconButtonComponent, selector: "rt-icon-button", inputs: ["icon", "glyph", "ariaLabel", "variant", "iconColor", "iconFill", "size", "iconSize", "type", "tooltip", "tabIndex", "loading", "disabled", "active", "indicator"], outputs: ["clicked"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
400
- }
401
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtDialogHeaderComponent, decorators: [{
402
- type: Component,
403
- args: [{ selector: 'rt-dialog-header', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
404
- // standalone components / directives
405
- RtIconButtonComponent,
406
- BlockDirective,
407
- ElemDirective,
408
- ], host: {
409
- class: BEM_BLOCK$2,
410
- }, template: "<header rtBlock=\"rt-dialog-header\" qa-dataid=\"dialog-header\">\n <span rtElem=\"lead\" qa-dataid=\"dialog-header-lead\"><ng-content select=\"[rtDialogHeaderLead]\" /></span>\n <h2 rtElem=\"title\" qa-dataid=\"dialog-title\">{{ title() }}</h2>\n @if (closable()) {\n <rt-icon-button\n rtElem=\"close\"\n qa-dataid=\"dialog-close\"\n icon=\"ico-close\"\n size=\"sm\"\n variant=\"ghost\"\n [ariaLabel]=\"t().uiClose\"\n (clicked)=\"onClose()\" />\n }\n</header>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog-header{display:contents}rt-dialog-header .rt-dialog-header{--rt-dialog-header-border-default: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);display:flex;align-items:center;justify-content:space-between;padding:var(--rt-dialog-header-padding, var(--rt-space-lg));border-block-end:var(--rt-dialog-header-border, var(--rt-dialog-header-border-default));gap:var(--rt-space-sm)}rt-dialog-header .rt-dialog-header__lead{display:inline-flex;flex-shrink:0;align-items:center}rt-dialog-header .rt-dialog-header__lead:empty{display:none}rt-dialog-header .rt-dialog-header__title{margin:0;color:var(--rt-color-text-primary);font-size:var(--rt-dialog-title-font-size, var(--rt-text-xl));font-weight:var(--rt-dialog-title-weight, var(--rt-font-weight-bold));text-transform:var(--rt-dialog-title-transform, none)}rt-dialog-header .rt-dialog-header__close{margin-inline-start:auto}}\n"] }]
411
- }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], closable: [{ type: i0.Input, args: [{ isSignal: true, alias: "closable", required: false }] }] } });
412
-
413
- const BEM_BLOCK$1 = 'rt-dialog-footer';
414
- /**
415
- * Footer-слот для композиции внутри `<rt-dialog>`. Принимает любой проектированный
416
- * контент (action-кнопки, статусные сообщения и т.п.), оборачивает в footer с
417
- * top-border и flex-раскладкой; вход `align` прижимает содержимое к концу (по умолчанию),
418
- * к началу, к центру или разводит по краям (`between`).
419
- *
420
- * `ViewEncapsulation.None` — для единообразия с rt-dialog.
421
- *
422
- * @example
423
- * \`\`\`html
424
- * <rt-dialog-footer>
425
- * <button rtButton (click)="cancel()">Отмена</button>
426
- * <button rtButton theme="primary" (click)="save()">Сохранить</button>
427
- * </rt-dialog-footer>
428
- * \`\`\`
429
- */
430
- class RtDialogFooterComponent {
431
- constructor() {
432
- this.align = input('end', /* @ts-ignore */
433
- ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
434
- }
435
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtDialogFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
436
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: RtDialogFooterComponent, isStandalone: true, selector: "rt-dialog-footer", inputs: { align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "rt-dialog-footer" }, ngImport: i0, template: "<footer rtBlock=\"rt-dialog-footer\" qa-dataid=\"dialog-footer\" [rtMod]=\"{ align: align() }\">\n <ng-content />\n</footer>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog-footer{display:contents}rt-dialog-footer .rt-dialog-footer{--rt-dialog-footer-border-default: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);display:flex;justify-content:flex-end;padding:var(--rt-dialog-footer-padding, var(--rt-space-lg));border-block-start:var(--rt-dialog-footer-border, var(--rt-dialog-footer-border-default));gap:var(--rt-space-sm)}rt-dialog-footer .rt-dialog-footer--align--start{justify-content:flex-start}rt-dialog-footer .rt-dialog-footer--align--center{justify-content:center}rt-dialog-footer .rt-dialog-footer--align--between{justify-content:space-between}rt-dialog-footer .rt-dialog-footer:empty{display:none}}\n"], dependencies: [{ kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
437
- }
438
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtDialogFooterComponent, decorators: [{
439
- type: Component,
440
- args: [{ selector: 'rt-dialog-footer', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [BlockDirective, ModDirective], host: {
441
- class: BEM_BLOCK$1,
442
- }, template: "<footer rtBlock=\"rt-dialog-footer\" qa-dataid=\"dialog-footer\" [rtMod]=\"{ align: align() }\">\n <ng-content />\n</footer>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog-footer{display:contents}rt-dialog-footer .rt-dialog-footer{--rt-dialog-footer-border-default: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);display:flex;justify-content:flex-end;padding:var(--rt-dialog-footer-padding, var(--rt-space-lg));border-block-start:var(--rt-dialog-footer-border, var(--rt-dialog-footer-border-default));gap:var(--rt-space-sm)}rt-dialog-footer .rt-dialog-footer--align--start{justify-content:flex-start}rt-dialog-footer .rt-dialog-footer--align--center{justify-content:center}rt-dialog-footer .rt-dialog-footer--align--between{justify-content:space-between}rt-dialog-footer .rt-dialog-footer:empty{display:none}}\n"] }]
443
- }], propDecorators: { align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }] } });
444
-
445
- const BEM_BLOCK = 'rt-dialog-content';
446
- /**
447
- * Тело модалки для композиции внутри `<rt-dialog>` между шапкой и подвалом. Даёт отступ и
448
- * прокрутку: длинное содержимое прокручивается внутри тела, а шапка и подвал стоят на месте.
449
- * Отступ задаёт `--rt-dialog-content-padding`, потолок высоты — `--rt-dialog-content-max-height`.
450
- *
451
- * Часть необязательная: окно со своей обёрткой тела выглядит как прежде.
452
- *
453
- * @example
454
- * \`\`\`html
455
- * <rt-dialog size="md">
456
- * <rt-dialog-header title="Создание записи" />
457
- * <rt-dialog-content>...форма...</rt-dialog-content>
458
- * <rt-dialog-footer>...</rt-dialog-footer>
459
- * </rt-dialog>
460
- * \`\`\`
461
- */
462
- class RtDialogContentComponent {
463
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtDialogContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
464
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: RtDialogContentComponent, isStandalone: true, selector: "rt-dialog-content", host: { classAttribute: "rt-dialog-content" }, ngImport: i0, template: "<div rtBlock=\"rt-dialog-content\" qa-dataid=\"dialog-content\">\n <ng-content />\n</div>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog-content{display:contents}rt-dialog-content .rt-dialog-content{overflow:auto;min-height:0;max-height:var(--rt-dialog-content-max-height, none);flex:1 1 auto;padding:var(--rt-dialog-content-padding, var(--rt-space-lg))}}\n"], dependencies: [{ kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
465
- }
466
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtDialogContentComponent, decorators: [{
467
- type: Component,
468
- args: [{ selector: 'rt-dialog-content', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [BlockDirective], host: {
469
- class: BEM_BLOCK,
470
- }, template: "<div rtBlock=\"rt-dialog-content\" qa-dataid=\"dialog-content\">\n <ng-content />\n</div>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog-content{display:contents}rt-dialog-content .rt-dialog-content{overflow:auto;min-height:0;max-height:var(--rt-dialog-content-max-height, none);flex:1 1 auto;padding:var(--rt-dialog-content-padding, var(--rt-space-lg))}}\n"] }]
471
- }] });
472
-
473
- /**
474
- * Generated bundle index. Do not edit.
475
- */
476
-
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, Injectable, InjectionToken, Injector, ViewEncapsulation, afterNextRender, booleanAttribute, inject, input, signal } from "@angular/core";
3
+ import { BlockDirective, ElemDirective, ModDirective } from "@rt-tools/core";
4
+ import * as i1 from "@rt-tools/ui-kit-v2/radius";
5
+ import { RtRadiusDirective } from "@rt-tools/ui-kit-v2/radius";
6
+ import { FocusTrapFactory } from "@angular/cdk/a11y";
7
+ import { Overlay } from "@angular/cdk/overlay";
8
+ import { ComponentPortal } from "@angular/cdk/portal";
9
+ import { DOCUMENT } from "@angular/common";
10
+ import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
11
+ import { EMPTY, Subject, map, merge, mergeMap, take, takeUntil } from "rxjs";
12
+ import { RT_KIT_LABELS, carryThemeScopeOfFocus, materialPresetClassesOfFocus } from "@rt-tools/ui-kit-v2/core";
13
+ import { RtIconButtonComponent } from "@rt-tools/ui-kit-v2/icon-button";
14
+ const BEM_BLOCK$3 = "rt-dialog";
15
+ var RtDialogComponent = class RtDialogComponent {
16
+ constructor() {
17
+ this.size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
18
+ this.width = input(null, ...ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []);
19
+ this.ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
20
+ }
21
+ static {
22
+ this.ɵfac = i0.ɵɵngDeclareFactory({
23
+ minVersion: "12.0.0",
24
+ version: "22.2.2",
25
+ ngImport: i0,
26
+ type: RtDialogComponent,
27
+ deps: [],
28
+ target: i0.ɵɵFactoryTarget.Component
29
+ });
30
+ }
31
+ static {
32
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
33
+ minVersion: "17.1.0",
34
+ version: "22.2.2",
35
+ type: RtDialogComponent,
36
+ isStandalone: true,
37
+ selector: "rt-dialog",
38
+ inputs: {
39
+ size: {
40
+ classPropertyName: "size",
41
+ publicName: "size",
42
+ isSignal: true,
43
+ isRequired: false,
44
+ transformFunction: null
45
+ },
46
+ width: {
47
+ classPropertyName: "width",
48
+ publicName: "width",
49
+ isSignal: true,
50
+ isRequired: false,
51
+ transformFunction: null
52
+ },
53
+ ariaLabel: {
54
+ classPropertyName: "ariaLabel",
55
+ publicName: "ariaLabel",
56
+ isSignal: true,
57
+ isRequired: false,
58
+ transformFunction: null
59
+ }
60
+ },
61
+ host: {
62
+ properties: { "style.--rt-dialog-width": "width()" },
63
+ classAttribute: "rt-dialog"
64
+ },
65
+ hostDirectives: [{
66
+ directive: i1.RtRadiusDirective,
67
+ inputs: ["radius", "radius"]
68
+ }],
69
+ ngImport: i0,
70
+ template: "<div\n rtBlock=\"rt-dialog\"\n qa-dataid=\"dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n tabindex=\"-1\"\n [rtMod]=\"{ size: size() }\"\n [style.--rt-dialog-width]=\"width()\"\n [attr.aria-label]=\"ariaLabel()\">\n <ng-content />\n</div>\n",
71
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog{display:contents}rt-dialog[data-rt-radius=none]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-none)}rt-dialog[data-rt-radius=xs]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-xs)}rt-dialog[data-rt-radius=sm]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-sm)}rt-dialog[data-rt-radius=ms]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-ms)}rt-dialog[data-rt-radius=md]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-md)}rt-dialog[data-rt-radius=lg]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-lg)}rt-dialog[data-rt-radius=xl]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-xl)}rt-dialog[data-rt-radius=\"2xl\"]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-2xl)}rt-dialog[data-rt-radius=full]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-full)}:root{--rt-dialog-width-sm: 460px;--rt-dialog-width-md: 660px;--rt-dialog-width-lg: 860px;--rt-dialog-shadow: var(--rt-shadow-dialog);--rt-dialog-radius: var(--rt-radius-xl);--rt-dialog-backdrop-bg: var(--rt-overlay-navy-70);--rt-dialog-backdrop-blur: 5px}rt-dialog .rt-dialog{display:flex;overflow:hidden;width:var(--rt-dialog-width, var(--rt-dialog-width-md));max-width:90dvw;max-height:90dvh;flex-direction:column;padding:0;border:var(--rt-dialog-border, none);border-radius:var(--rt-dialog-radius);background:var(--rt-dialog-bg, var(--rt-color-bg-surface));box-shadow:var(--rt-dialog-shadow);color:var(--rt-color-text-primary)}rt-dialog .rt-dialog:focus{outline:none}rt-dialog .rt-dialog--size--sm{width:var(--rt-dialog-width, var(--rt-dialog-width-sm))}rt-dialog .rt-dialog--size--md{width:var(--rt-dialog-width, var(--rt-dialog-width-md))}rt-dialog .rt-dialog--size--lg{width:var(--rt-dialog-width, var(--rt-dialog-width-lg))}.rt-dialog-backdrop{-webkit-backdrop-filter:blur(var(--rt-dialog-backdrop-blur));backdrop-filter:blur(var(--rt-dialog-backdrop-blur));background:var(--rt-dialog-backdrop-bg)}.rt-dialog-overlay{display:flex;align-items:center;justify-content:center}}\n"],
72
+ dependencies: [{
73
+ kind: "directive",
74
+ type: BlockDirective,
75
+ selector: "[rtBlock]",
76
+ inputs: ["rtMod"]
77
+ }, {
78
+ kind: "directive",
79
+ type: ModDirective,
80
+ selector: "[rtMod]"
81
+ }],
82
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
83
+ encapsulation: i0.ViewEncapsulation.None
84
+ });
85
+ }
86
+ };
87
+ i0.ɵɵngDeclareClassMetadata({
88
+ minVersion: "12.0.0",
89
+ version: "22.2.2",
90
+ ngImport: i0,
91
+ type: RtDialogComponent,
92
+ decorators: [{
93
+ type: Component,
94
+ args: [{
95
+ selector: "rt-dialog",
96
+ changeDetection: ChangeDetectionStrategy.OnPush,
97
+ encapsulation: ViewEncapsulation.None,
98
+ imports: [BlockDirective, ModDirective],
99
+ hostDirectives: [{
100
+ directive: RtRadiusDirective,
101
+ inputs: ["radius"]
102
+ }],
103
+ host: {
104
+ class: BEM_BLOCK$3,
105
+ "[style.--rt-dialog-width]": "width()"
106
+ },
107
+ template: "<div\n rtBlock=\"rt-dialog\"\n qa-dataid=\"dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n tabindex=\"-1\"\n [rtMod]=\"{ size: size() }\"\n [style.--rt-dialog-width]=\"width()\"\n [attr.aria-label]=\"ariaLabel()\">\n <ng-content />\n</div>\n",
108
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog{display:contents}rt-dialog[data-rt-radius=none]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-none)}rt-dialog[data-rt-radius=xs]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-xs)}rt-dialog[data-rt-radius=sm]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-sm)}rt-dialog[data-rt-radius=ms]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-ms)}rt-dialog[data-rt-radius=md]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-md)}rt-dialog[data-rt-radius=lg]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-lg)}rt-dialog[data-rt-radius=xl]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-xl)}rt-dialog[data-rt-radius=\"2xl\"]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-2xl)}rt-dialog[data-rt-radius=full]>.rt-dialog{--rt-dialog-radius: var(--rt-radius-full)}:root{--rt-dialog-width-sm: 460px;--rt-dialog-width-md: 660px;--rt-dialog-width-lg: 860px;--rt-dialog-shadow: var(--rt-shadow-dialog);--rt-dialog-radius: var(--rt-radius-xl);--rt-dialog-backdrop-bg: var(--rt-overlay-navy-70);--rt-dialog-backdrop-blur: 5px}rt-dialog .rt-dialog{display:flex;overflow:hidden;width:var(--rt-dialog-width, var(--rt-dialog-width-md));max-width:90dvw;max-height:90dvh;flex-direction:column;padding:0;border:var(--rt-dialog-border, none);border-radius:var(--rt-dialog-radius);background:var(--rt-dialog-bg, var(--rt-color-bg-surface));box-shadow:var(--rt-dialog-shadow);color:var(--rt-color-text-primary)}rt-dialog .rt-dialog:focus{outline:none}rt-dialog .rt-dialog--size--sm{width:var(--rt-dialog-width, var(--rt-dialog-width-sm))}rt-dialog .rt-dialog--size--md{width:var(--rt-dialog-width, var(--rt-dialog-width-md))}rt-dialog .rt-dialog--size--lg{width:var(--rt-dialog-width, var(--rt-dialog-width-lg))}.rt-dialog-backdrop{-webkit-backdrop-filter:blur(var(--rt-dialog-backdrop-blur));backdrop-filter:blur(var(--rt-dialog-backdrop-blur));background:var(--rt-dialog-backdrop-bg)}.rt-dialog-overlay{display:flex;align-items:center;justify-content:center}}\n"]
109
+ }]
110
+ }],
111
+ propDecorators: {
112
+ size: [{
113
+ type: i0.Input,
114
+ args: [{
115
+ isSignal: true,
116
+ alias: "size",
117
+ required: false
118
+ }]
119
+ }],
120
+ width: [{
121
+ type: i0.Input,
122
+ args: [{
123
+ isSignal: true,
124
+ alias: "width",
125
+ required: false
126
+ }]
127
+ }],
128
+ ariaLabel: [{
129
+ type: i0.Input,
130
+ args: [{
131
+ isSignal: true,
132
+ alias: "ariaLabel",
133
+ required: false
134
+ }]
135
+ }]
136
+ }
137
+ });
138
+ var RtDialogRef = class {
139
+ #overlayRef;
140
+ #afterClosedSource;
141
+ #isClosed;
142
+ constructor(overlayRef) {
143
+ this.disableClose = signal(false, ...ngDevMode ? [{ debugName: "disableClose" }] : /* istanbul ignore next */ []);
144
+ this.#afterClosedSource = new Subject();
145
+ this.#isClosed = false;
146
+ this.#overlayRef = overlayRef;
147
+ this.#overlayRef.detachments().pipe(take(1)).subscribe(() => this.#finish(void 0));
148
+ }
149
+ close(result) {
150
+ if (this.#isClosed) return;
151
+ this.#isClosed = true;
152
+ this.#overlayRef.dispose();
153
+ this.#afterClosedSource.next(result);
154
+ this.#afterClosedSource.complete();
155
+ }
156
+ afterClosed() {
157
+ return this.#afterClosedSource.asObservable();
158
+ }
159
+ #finish(result) {
160
+ if (this.#isClosed) return;
161
+ this.#isClosed = true;
162
+ this.#afterClosedSource.next(result);
163
+ this.#afterClosedSource.complete();
164
+ }
165
+ };
166
+ const RT_DIALOG_DATA = new InjectionToken("RT_DIALOG_DATA");
167
+ var RtDialogService = class RtDialogService {
168
+ #overlay = inject(Overlay);
169
+ #injector = inject(Injector);
170
+ #document = inject(DOCUMENT);
171
+ #focusTrapFactory = inject(FocusTrapFactory);
172
+ #openSource = new Subject();
173
+ constructor() {
174
+ this.#openSource.pipe(mergeMap((openContext) => {
175
+ const backdropClose$ = openContext.closeOnBackdropClick ? openContext.overlayRef.backdropClick().pipe(map(() => () => {
176
+ if (openContext.dialogRef.disableClose()) return;
177
+ openContext.dialogRef.close();
178
+ })) : EMPTY;
179
+ const escapeClose$ = openContext.closeOnEscape ? openContext.overlayRef.keydownEvents().pipe(map((event) => () => {
180
+ if (event.key !== "Escape") return;
181
+ event.preventDefault();
182
+ if (openContext.dialogRef.disableClose()) return;
183
+ openContext.dialogRef.close();
184
+ })) : EMPTY;
185
+ const releaseFocus$ = openContext.overlayRef.detachments().pipe(take(1), map(() => () => this.#releaseFocus(openContext.focus)));
186
+ return merge(merge(backdropClose$, escapeClose$).pipe(takeUntil(openContext.overlayRef.detachments())), releaseFocus$);
187
+ }), takeUntilDestroyed()).subscribe((handleCloseIntent) => handleCloseIntent());
188
+ }
189
+ open(component, config) {
190
+ const overlayRef = this.#overlay.create({
191
+ positionStrategy: this.#overlay.position().global().centerHorizontally().centerVertically(),
192
+ scrollStrategy: this.#overlay.scrollStrategies.block(),
193
+ hasBackdrop: true,
194
+ backdropClass: config?.backdropClass ?? "rt-dialog-backdrop",
195
+ panelClass: [config?.panelClass ?? "rt-dialog-overlay", materialPresetClassesOfFocus(this.#document)].flat(),
196
+ disposeOnNavigation: true
197
+ });
198
+ carryThemeScopeOfFocus(overlayRef.overlayElement, this.#document);
199
+ const dialogRef = new RtDialogRef(overlayRef);
200
+ const focus = {
201
+ trap: null,
202
+ restoreTo: config?.restoreFocus === true ? this.#focusedElement() : null
203
+ };
204
+ this.#openSource.next({
205
+ overlayRef,
206
+ dialogRef,
207
+ focus,
208
+ closeOnBackdropClick: config?.closeOnBackdropClick !== false,
209
+ closeOnEscape: config?.closeOnEscape !== false
210
+ });
211
+ const injector = Injector.create({
212
+ parent: this.#injector,
213
+ providers: [{
214
+ provide: RtDialogRef,
215
+ useValue: dialogRef
216
+ }, {
217
+ provide: RT_DIALOG_DATA,
218
+ useValue: config?.data ?? null
219
+ }]
220
+ });
221
+ const portal = new ComponentPortal(component, null, injector);
222
+ overlayRef.attach(portal);
223
+ this.#holdFocus(overlayRef.overlayElement, focus, config?.trapFocus === true, config?.autoFocus ?? false);
224
+ return dialogRef;
225
+ }
226
+ #holdFocus(pane, focus, trapFocus, autoFocus) {
227
+ if (!trapFocus && autoFocus === false) return;
228
+ afterNextRender(() => {
229
+ if (trapFocus) focus.trap = this.#focusTrapFactory.create(pane);
230
+ switch (autoFocus) {
231
+ case "dialog":
232
+ pane.querySelector("[role=\"dialog\"]")?.focus();
233
+ break;
234
+ case "first-tabbable": this.#focusFirstTabbable(pane, focus.trap);
235
+ }
236
+ }, { injector: this.#injector });
237
+ }
238
+ #focusFirstTabbable(pane, trap) {
239
+ if (trap) {
240
+ trap.focusFirstTabbableElement();
241
+ return;
242
+ }
243
+ const lookup = this.#focusTrapFactory.create(pane);
244
+ lookup.focusFirstTabbableElement();
245
+ lookup.destroy();
246
+ }
247
+ #releaseFocus(focus) {
248
+ focus.trap?.destroy();
249
+ focus.trap = null;
250
+ if (focus.restoreTo?.isConnected) focus.restoreTo.focus();
251
+ }
252
+ #focusedElement() {
253
+ const active = this.#document.activeElement;
254
+ return active instanceof HTMLElement && active !== this.#document.body ? active : null;
255
+ }
256
+ static {
257
+ this.ɵfac = i0.ɵɵngDeclareFactory({
258
+ minVersion: "12.0.0",
259
+ version: "22.2.2",
260
+ ngImport: i0,
261
+ type: RtDialogService,
262
+ deps: [],
263
+ target: i0.ɵɵFactoryTarget.Injectable
264
+ });
265
+ }
266
+ static {
267
+ this.ɵprov = i0.ɵɵngDeclareInjectable({
268
+ minVersion: "12.0.0",
269
+ version: "22.2.2",
270
+ ngImport: i0,
271
+ type: RtDialogService,
272
+ providedIn: "root"
273
+ });
274
+ }
275
+ };
276
+ i0.ɵɵngDeclareClassMetadata({
277
+ minVersion: "12.0.0",
278
+ version: "22.2.2",
279
+ ngImport: i0,
280
+ type: RtDialogService,
281
+ decorators: [{
282
+ type: Injectable,
283
+ args: [{ providedIn: "root" }]
284
+ }],
285
+ ctorParameters: () => []
286
+ });
287
+ const BEM_BLOCK$2 = "rt-dialog-header";
288
+ var RtDialogHeaderComponent = class RtDialogHeaderComponent {
289
+ constructor() {
290
+ this.#dialogRef = inject(RtDialogRef, { optional: true });
291
+ this.t = inject(RT_KIT_LABELS);
292
+ this.title = input.required(...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
293
+ this.closable = input(true, {
294
+ ...ngDevMode ? { debugName: "closable" } : /* istanbul ignore next */ {},
295
+ transform: booleanAttribute
296
+ });
297
+ }
298
+ #dialogRef;
299
+ onClose() {
300
+ this.#dialogRef?.close();
301
+ }
302
+ static {
303
+ this.ɵfac = i0.ɵɵngDeclareFactory({
304
+ minVersion: "12.0.0",
305
+ version: "22.2.2",
306
+ ngImport: i0,
307
+ type: RtDialogHeaderComponent,
308
+ deps: [],
309
+ target: i0.ɵɵFactoryTarget.Component
310
+ });
311
+ }
312
+ static {
313
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
314
+ minVersion: "17.0.0",
315
+ version: "22.2.2",
316
+ type: RtDialogHeaderComponent,
317
+ isStandalone: true,
318
+ selector: "rt-dialog-header",
319
+ inputs: {
320
+ title: {
321
+ classPropertyName: "title",
322
+ publicName: "title",
323
+ isSignal: true,
324
+ isRequired: true,
325
+ transformFunction: null
326
+ },
327
+ closable: {
328
+ classPropertyName: "closable",
329
+ publicName: "closable",
330
+ isSignal: true,
331
+ isRequired: false,
332
+ transformFunction: null
333
+ }
334
+ },
335
+ host: { classAttribute: "rt-dialog-header" },
336
+ ngImport: i0,
337
+ template: "<header rtBlock=\"rt-dialog-header\" qa-dataid=\"dialog-header\">\n <span rtElem=\"lead\" qa-dataid=\"dialog-header-lead\"><ng-content select=\"[rtDialogHeaderLead]\" /></span>\n <h2 rtElem=\"title\" qa-dataid=\"dialog-title\">{{ title() }}</h2>\n @if (closable()) {\n <rt-icon-button\n rtElem=\"close\"\n qa-dataid=\"dialog-close\"\n icon=\"ico-close\"\n size=\"sm\"\n variant=\"ghost\"\n [ariaLabel]=\"t().uiClose\"\n (clicked)=\"onClose()\" />\n }\n</header>\n",
338
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog-header{display:contents}rt-dialog-header .rt-dialog-header{--rt-dialog-header-border-default: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);display:flex;align-items:center;justify-content:space-between;padding:var(--rt-dialog-header-padding, var(--rt-space-lg));border-block-end:var(--rt-dialog-header-border, var(--rt-dialog-header-border-default));gap:var(--rt-space-sm)}rt-dialog-header .rt-dialog-header__lead{display:inline-flex;flex-shrink:0;align-items:center}rt-dialog-header .rt-dialog-header__lead:empty{display:none}rt-dialog-header .rt-dialog-header__title{margin:0;color:var(--rt-color-text-primary);font-size:var(--rt-dialog-title-font-size, var(--rt-text-xl));font-weight:var(--rt-dialog-title-weight, var(--rt-font-weight-bold));text-transform:var(--rt-dialog-title-transform, none)}rt-dialog-header .rt-dialog-header__close{margin-inline-start:auto}}\n"],
339
+ dependencies: [
340
+ {
341
+ kind: "component",
342
+ type: RtIconButtonComponent,
343
+ selector: "rt-icon-button",
344
+ inputs: [
345
+ "icon",
346
+ "glyph",
347
+ "ariaLabel",
348
+ "variant",
349
+ "iconColor",
350
+ "iconFill",
351
+ "size",
352
+ "iconSize",
353
+ "type",
354
+ "tooltip",
355
+ "tooltipHideOnClick",
356
+ "tabIndex",
357
+ "loading",
358
+ "disabled",
359
+ "active",
360
+ "expanded",
361
+ "indicator"
362
+ ],
363
+ outputs: ["clicked"]
364
+ },
365
+ {
366
+ kind: "directive",
367
+ type: BlockDirective,
368
+ selector: "[rtBlock]",
369
+ inputs: ["rtMod"]
370
+ },
371
+ {
372
+ kind: "directive",
373
+ type: ElemDirective,
374
+ selector: "[rtElem]",
375
+ inputs: ["rtMod"]
376
+ }
377
+ ],
378
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
379
+ encapsulation: i0.ViewEncapsulation.None
380
+ });
381
+ }
382
+ };
383
+ i0.ɵɵngDeclareClassMetadata({
384
+ minVersion: "12.0.0",
385
+ version: "22.2.2",
386
+ ngImport: i0,
387
+ type: RtDialogHeaderComponent,
388
+ decorators: [{
389
+ type: Component,
390
+ args: [{
391
+ selector: "rt-dialog-header",
392
+ changeDetection: ChangeDetectionStrategy.OnPush,
393
+ encapsulation: ViewEncapsulation.None,
394
+ imports: [
395
+ RtIconButtonComponent,
396
+ BlockDirective,
397
+ ElemDirective
398
+ ],
399
+ host: { class: BEM_BLOCK$2 },
400
+ template: "<header rtBlock=\"rt-dialog-header\" qa-dataid=\"dialog-header\">\n <span rtElem=\"lead\" qa-dataid=\"dialog-header-lead\"><ng-content select=\"[rtDialogHeaderLead]\" /></span>\n <h2 rtElem=\"title\" qa-dataid=\"dialog-title\">{{ title() }}</h2>\n @if (closable()) {\n <rt-icon-button\n rtElem=\"close\"\n qa-dataid=\"dialog-close\"\n icon=\"ico-close\"\n size=\"sm\"\n variant=\"ghost\"\n [ariaLabel]=\"t().uiClose\"\n (clicked)=\"onClose()\" />\n }\n</header>\n",
401
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog-header{display:contents}rt-dialog-header .rt-dialog-header{--rt-dialog-header-border-default: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);display:flex;align-items:center;justify-content:space-between;padding:var(--rt-dialog-header-padding, var(--rt-space-lg));border-block-end:var(--rt-dialog-header-border, var(--rt-dialog-header-border-default));gap:var(--rt-space-sm)}rt-dialog-header .rt-dialog-header__lead{display:inline-flex;flex-shrink:0;align-items:center}rt-dialog-header .rt-dialog-header__lead:empty{display:none}rt-dialog-header .rt-dialog-header__title{margin:0;color:var(--rt-color-text-primary);font-size:var(--rt-dialog-title-font-size, var(--rt-text-xl));font-weight:var(--rt-dialog-title-weight, var(--rt-font-weight-bold));text-transform:var(--rt-dialog-title-transform, none)}rt-dialog-header .rt-dialog-header__close{margin-inline-start:auto}}\n"]
402
+ }]
403
+ }],
404
+ propDecorators: {
405
+ title: [{
406
+ type: i0.Input,
407
+ args: [{
408
+ isSignal: true,
409
+ alias: "title",
410
+ required: true
411
+ }]
412
+ }],
413
+ closable: [{
414
+ type: i0.Input,
415
+ args: [{
416
+ isSignal: true,
417
+ alias: "closable",
418
+ required: false
419
+ }]
420
+ }]
421
+ }
422
+ });
423
+ const BEM_BLOCK$1 = "rt-dialog-footer";
424
+ var RtDialogFooterComponent = class RtDialogFooterComponent {
425
+ constructor() {
426
+ this.align = input("end", ...ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []);
427
+ }
428
+ static {
429
+ this.ɵfac = i0.ɵɵngDeclareFactory({
430
+ minVersion: "12.0.0",
431
+ version: "22.2.2",
432
+ ngImport: i0,
433
+ type: RtDialogFooterComponent,
434
+ deps: [],
435
+ target: i0.ɵɵFactoryTarget.Component
436
+ });
437
+ }
438
+ static {
439
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
440
+ minVersion: "17.1.0",
441
+ version: "22.2.2",
442
+ type: RtDialogFooterComponent,
443
+ isStandalone: true,
444
+ selector: "rt-dialog-footer",
445
+ inputs: { align: {
446
+ classPropertyName: "align",
447
+ publicName: "align",
448
+ isSignal: true,
449
+ isRequired: false,
450
+ transformFunction: null
451
+ } },
452
+ host: { classAttribute: "rt-dialog-footer" },
453
+ ngImport: i0,
454
+ template: "<footer rtBlock=\"rt-dialog-footer\" qa-dataid=\"dialog-footer\" [rtMod]=\"{ align: align() }\">\n <ng-content />\n</footer>\n",
455
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog-footer{display:contents}rt-dialog-footer .rt-dialog-footer{--rt-dialog-footer-border-default: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);display:flex;justify-content:flex-end;padding:var(--rt-dialog-footer-padding, var(--rt-space-lg));border-block-start:var(--rt-dialog-footer-border, var(--rt-dialog-footer-border-default));gap:var(--rt-space-sm)}rt-dialog-footer .rt-dialog-footer--align--start{justify-content:flex-start}rt-dialog-footer .rt-dialog-footer--align--center{justify-content:center}rt-dialog-footer .rt-dialog-footer--align--between{justify-content:space-between}rt-dialog-footer .rt-dialog-footer:empty{display:none}}\n"],
456
+ dependencies: [{
457
+ kind: "directive",
458
+ type: BlockDirective,
459
+ selector: "[rtBlock]",
460
+ inputs: ["rtMod"]
461
+ }, {
462
+ kind: "directive",
463
+ type: ModDirective,
464
+ selector: "[rtMod]"
465
+ }],
466
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
467
+ encapsulation: i0.ViewEncapsulation.None
468
+ });
469
+ }
470
+ };
471
+ i0.ɵɵngDeclareClassMetadata({
472
+ minVersion: "12.0.0",
473
+ version: "22.2.2",
474
+ ngImport: i0,
475
+ type: RtDialogFooterComponent,
476
+ decorators: [{
477
+ type: Component,
478
+ args: [{
479
+ selector: "rt-dialog-footer",
480
+ changeDetection: ChangeDetectionStrategy.OnPush,
481
+ encapsulation: ViewEncapsulation.None,
482
+ imports: [BlockDirective, ModDirective],
483
+ host: { class: BEM_BLOCK$1 },
484
+ template: "<footer rtBlock=\"rt-dialog-footer\" qa-dataid=\"dialog-footer\" [rtMod]=\"{ align: align() }\">\n <ng-content />\n</footer>\n",
485
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog-footer{display:contents}rt-dialog-footer .rt-dialog-footer{--rt-dialog-footer-border-default: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);display:flex;justify-content:flex-end;padding:var(--rt-dialog-footer-padding, var(--rt-space-lg));border-block-start:var(--rt-dialog-footer-border, var(--rt-dialog-footer-border-default));gap:var(--rt-space-sm)}rt-dialog-footer .rt-dialog-footer--align--start{justify-content:flex-start}rt-dialog-footer .rt-dialog-footer--align--center{justify-content:center}rt-dialog-footer .rt-dialog-footer--align--between{justify-content:space-between}rt-dialog-footer .rt-dialog-footer:empty{display:none}}\n"]
486
+ }]
487
+ }],
488
+ propDecorators: { align: [{
489
+ type: i0.Input,
490
+ args: [{
491
+ isSignal: true,
492
+ alias: "align",
493
+ required: false
494
+ }]
495
+ }] }
496
+ });
497
+ const BEM_BLOCK = "rt-dialog-content";
498
+ var RtDialogContentComponent = class RtDialogContentComponent {
499
+ static {
500
+ this.ɵfac = i0.ɵɵngDeclareFactory({
501
+ minVersion: "12.0.0",
502
+ version: "22.2.2",
503
+ ngImport: i0,
504
+ type: RtDialogContentComponent,
505
+ deps: [],
506
+ target: i0.ɵɵFactoryTarget.Component
507
+ });
508
+ }
509
+ static {
510
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
511
+ minVersion: "14.0.0",
512
+ version: "22.2.2",
513
+ type: RtDialogContentComponent,
514
+ isStandalone: true,
515
+ selector: "rt-dialog-content",
516
+ host: { classAttribute: "rt-dialog-content" },
517
+ ngImport: i0,
518
+ template: "<div rtBlock=\"rt-dialog-content\" qa-dataid=\"dialog-content\">\n <ng-content />\n</div>\n",
519
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog-content{display:contents}rt-dialog-content .rt-dialog-content{overflow:auto;min-height:0;max-height:var(--rt-dialog-content-max-height, none);flex:1 1 auto;padding:var(--rt-dialog-content-padding, var(--rt-space-lg))}}\n"],
520
+ dependencies: [{
521
+ kind: "directive",
522
+ type: BlockDirective,
523
+ selector: "[rtBlock]",
524
+ inputs: ["rtMod"]
525
+ }],
526
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
527
+ encapsulation: i0.ViewEncapsulation.None
528
+ });
529
+ }
530
+ };
531
+ i0.ɵɵngDeclareClassMetadata({
532
+ minVersion: "12.0.0",
533
+ version: "22.2.2",
534
+ ngImport: i0,
535
+ type: RtDialogContentComponent,
536
+ decorators: [{
537
+ type: Component,
538
+ args: [{
539
+ selector: "rt-dialog-content",
540
+ changeDetection: ChangeDetectionStrategy.OnPush,
541
+ encapsulation: ViewEncapsulation.None,
542
+ imports: [BlockDirective],
543
+ host: { class: BEM_BLOCK },
544
+ template: "<div rtBlock=\"rt-dialog-content\" qa-dataid=\"dialog-content\">\n <ng-content />\n</div>\n",
545
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-dialog-content{display:contents}rt-dialog-content .rt-dialog-content{overflow:auto;min-height:0;max-height:var(--rt-dialog-content-max-height, none);flex:1 1 auto;padding:var(--rt-dialog-content-padding, var(--rt-space-lg))}}\n"]
546
+ }]
547
+ }]
548
+ });
477
549
  export { RT_DIALOG_DATA, RtDialogComponent, RtDialogContentComponent, RtDialogFooterComponent, RtDialogHeaderComponent, RtDialogRef, RtDialogService };
478
- //# sourceMappingURL=rt-tools-ui-kit-v2-dialog.mjs.map
550
+
551
+ //# sourceMappingURL=rt-tools-ui-kit-v2-dialog.mjs.map