@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 +1 @@
1
- {"version":3,"file":"rt-tools-ui-kit-v2-menu.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu-item-icon.directive.ts","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu-confirm-dialog.component.ts","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu-confirm-dialog.component.html","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu-item.logic.ts","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu.model.ts","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu-item.component.ts","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu-item.component.html","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu.component.ts","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu.component.html","../../../projects/ui-kit-v2/src/lib/components/menu/rt-tools-ui-kit-v2-menu.ts"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Помечает `<ng-template>` своего значка пункта меню. Кит ставит содержимое на место значка\n * `rt-menu-item__icon` его размером и цветом тона пункта — так приложение рисует значок, которого\n * нет ни в наборе кита, ни в перечне имён Material. Свой значок сильнее `icon` и `glyph`.\n *\n * ```html\n * <rt-menu-item label=\"Сделать активным\">\n * <ng-template rtMenuItemIcon><svg viewBox=\"0 0 24 24\">…</svg></ng-template>\n * </rt-menu-item>\n * ```\n */\n@Directive({\n selector: 'ng-template[rtMenuItemIcon]',\n})\nexport class RtMenuItemIconDirective {\n public readonly templateRef: TemplateRef<unknown> = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { inject, ChangeDetectionStrategy, Component, Signal, ViewEncapsulation } from '@angular/core';\n\nimport { BlockDirective, ElemDirective } from '@rt-tools/core';\n\nimport { RT_KIT_LABELS, TRtKitLabelMap } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtDialogRef } from '@rt-tools/ui-kit-v2/dialog';\nimport { RtDialogComponent } from '@rt-tools/ui-kit-v2/dialog';\nimport { RT_DIALOG_DATA } from '@rt-tools/ui-kit-v2/dialog';\nimport { IRtMenu } from './rt-menu.model';\n\nconst BEM_BLOCK: string = 'rt-menu-confirm-dialog';\n\n/**\n * Confirm-модалка деструктивного пункта `rt-menu-item`. Открывается через\n * `RtDialogService` (центрированный overlay поверх меню), возвращает `true`\n * при подтверждении и `false`/`undefined` при отмене.\n *\n * Модалка (а не popover-под-пунктом) нужна потому, что панель `rt-menu` сама\n * живёт в CDK Overlay: вложенный popover-overlay конфликтовал бы с её\n * backdrop/закрытием. Внутренний компонент — не экспортируется из `components`, это\n * деталь реализации confirm-флоу пункта меню.\n */\n@Component({\n selector: 'rt-menu-confirm-dialog',\n templateUrl: './rt-menu-confirm-dialog.component.html',\n styleUrl: './rt-menu-confirm-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone components / directives\n RtButtonDirective,\n RtDialogComponent,\n BlockDirective,\n ElemDirective,\n ],\n host: {\n class: BEM_BLOCK,\n },\n})\nexport class RtMenuConfirmDialogComponent {\n protected readonly t: Signal<TRtKitLabelMap> = inject(RT_KIT_LABELS);\n\n protected readonly data: IRtMenu.ConfirmData = inject(RT_DIALOG_DATA) as IRtMenu.ConfirmData;\n\n readonly #dialogRef: RtDialogRef<boolean> = inject(RtDialogRef);\n\n protected onConfirm(): void {\n this.#dialogRef.close(true);\n }\n\n protected onCancel(): void {\n this.#dialogRef.close(false);\n }\n}\n","<rt-dialog width=\"360px\" [ariaLabel]=\"t().uiConfirmAction\">\n <div rtBlock=\"rt-menu-confirm-dialog\">\n <div rtElem=\"text\">\n @if (data.title; as title) {\n <h2 rtElem=\"title\" qa-dataid=\"menu-confirm-title\">{{ title }}</h2>\n }\n <p rtElem=\"message\" qa-dataid=\"menu-confirm-message\">{{ data.message }}</p>\n </div>\n <div rtElem=\"footer\">\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content -->\n <button\n rtButton\n qa-dataid=\"menu-confirm-cancel\"\n type=\"button\"\n appearance=\"text\"\n theme=\"secondary\"\n [label]=\"data.cancelLabel\"\n (click)=\"onCancel()\"></button>\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content -->\n <button\n rtButton\n qa-dataid=\"menu-confirm-accept\"\n type=\"button\"\n appearance=\"filled\"\n [label]=\"data.confirmLabel\"\n [theme]=\"data.tone\"\n (click)=\"onConfirm()\"></button>\n </div>\n </div>\n</rt-dialog>\n","import { materialPairOf } from '@rt-tools/ui-kit-v2/icon';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\n\n/** Значок пункта: свой `icon`, а без него — пара имени Material из перечня кита. */\nexport function menuItemIconName(icon: IRtIcon.Name | null, glyph: string | null): IRtIcon.Name | null {\n if (icon !== null) {\n return icon;\n }\n return materialPairOf(glyph);\n}\n\n/**\n * Имя Material, о котором пункт должен предупредить: у него нет пары в перечне кита, а ни `icon`,\n * ни своего значка нет. Тогда пункт рисуется без значка, и без предупреждения пропуск не заметен.\n * `null` — предупреждать не о чем.\n */\nexport function unpairedGlyph(icon: IRtIcon.Name | null, glyph: string | null, hasOwnIcon: boolean): string | null {\n if (!glyph || hasOwnIcon || menuItemIconName(icon, glyph) !== null) {\n return null;\n }\n return glyph;\n}\n","/**\n * Контракты `rt-menu` — dropdown-меню действий (триггер «…» + плавающая панель\n * с пунктами `rt-menu-item`). Один корневой неймспейс с префиксом `I`.\n */\nexport namespace IRtMenu {\n /** Горизонтальное выравнивание панели относительно триггера. */\n export type Align = 'start' | 'end';\n\n /**\n * Размер панели: `md` — обычный, `sm` — компактный, как меню действий строки в первом ките. Под\n * материальным набором у компактного пункт ниже и значок мельче; свой вид их не различает.\n */\n export type Size = 'md' | 'sm';\n\n /** Тон подтверждающей кнопки в confirm-модалке пункта меню. */\n export type ConfirmTone = 'danger' | 'warning' | 'primary';\n\n /**\n * Данные для confirm-модалки, которую `rt-menu-item` открывает перед\n * деструктивным действием. Прокидываются в `rt-menu-confirm-dialog` через\n * `RT_DIALOG_DATA`; модалка возвращает `true` при подтверждении.\n */\n export interface ConfirmData {\n readonly message: string;\n readonly title: string | null;\n readonly confirmLabel: string;\n readonly cancelLabel: string;\n readonly tone: ConfirmTone;\n }\n\n /** Пункт панели для хода стрелками: его узел и признак, что его пропускают. */\n export interface Focusable {\n readonly disabled: boolean;\n focus(): void;\n }\n}\n\n/**\n * Имя DOM-события, которое `rt-menu-item` всплывающе диспатчит при выборе пункта.\n * `rt-menu` слушает его на панели и закрывается. DOM-событие (а не DI/output)\n * нужно потому, что пункты проецируются в overlay-панель — всплытие через DOM\n * переживает границы content-projection и overlay-контейнера.\n */\nexport const RT_MENU_SELECT_EVENT: string = 'rtMenuSelect';\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n computed,\n Component,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n isDevMode,\n output,\n OutputEmitterRef,\n Signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RouterLink } from '@angular/router';\n\nimport { mergeMap, Observable, Subject } from 'rxjs';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { RtDialogService } from '@rt-tools/ui-kit-v2/dialog';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { RtMenuConfirmDialogComponent } from './rt-menu-confirm-dialog.component';\nimport { RtMenuItemIconDirective } from './rt-menu-item-icon.directive';\nimport { menuItemIconName, unpairedGlyph } from './rt-menu-item.logic';\nimport { RT_MENU_SELECT_EVENT, IRtMenu } from './rt-menu.model';\n\nconst BEM_BLOCK: string = 'rt-menu-item';\n\n/**\n * Пункт меню `rt-menu`: иконка (опц.) + лейбл. Кликабелен и активируется с\n * клавиатуры (Enter/Space). Выбор пункта эмитит `(selected)` для потребителя\n * и всплывающе диспатчит DOM-событие `rtMenuSelect`, по которому `rt-menu`\n * закрывается. `disabled` блокирует и `(selected)`, и закрытие.\n *\n * Tooltip — через host-директиву `RtTooltipDirective` (`tooltip` маппится в\n * `rtTooltip`): полезно показать причину недоступности на `disabled`-пункте.\n *\n * Деструктивный пункт может требовать подтверждения: задайте `confirmMessage`\n * (опц. `confirmTitle` / `confirmLabel` / `confirmTone`) — тогда по выбору\n * сперва открывается центрированная confirm-модалка, и `(selected)` эмитится\n * только после подтверждения. Модалка (а не popover) нужна потому, что панель\n * `rt-menu` сама в CDK Overlay; меню остаётся открытым под backdrop'ом, пока\n * пользователь решает.\n *\n * `ViewEncapsulation.None`; стили префиксованы `.rt-menu-item`. Host несёт\n * BEM-класс блока (template-`<ng-container rtBlock>` даёт контекст для `rtElem`,\n * но класс на comment-node не вешает — см. host-class паттерн rt-icon-button).\n */\n@Component({\n selector: 'rt-menu-item',\n templateUrl: './rt-menu-item.component.html',\n styleUrl: './rt-menu-item.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone components / directives\n RtIconComponent,\n BlockDirective,\n ElemDirective,\n ModDirective,\n NgTemplateOutlet,\n RouterLink,\n ],\n hostDirectives: [\n {\n directive: RtTooltipDirective,\n inputs: ['rtTooltip: tooltip'],\n },\n { directive: RtRadiusDirective, inputs: ['radius'] },\n ],\n host: {\n class: BEM_BLOCK,\n '[attr.role]': \"isLink() ? 'none' : 'menuitem'\",\n '[class.rt-menu-item--danger]': 'danger()',\n '[class.rt-menu-item--success]': 'success()',\n '[class.rt-menu-item--disabled]': 'disabled()',\n '[class.rt-menu-item--current]': 'current()',\n '[class.rt-menu-item--link]': 'isLink()',\n '[attr.aria-current]': \"current() && !isLink() ? 'true' : null\",\n '[attr.aria-disabled]': \"disabled() && !isLink() ? 'true' : null\",\n '[attr.tabindex]': 'disabled() || isLink() ? null : 0',\n '(click)': 'onActivate($event)',\n '(auxclick)': 'onAuxClick($event)',\n '(keydown.enter)': 'onKey($event)',\n '(keydown.space)': 'onKey($event)',\n },\n})\nexport class RtMenuItemComponent {\n readonly #elementRef: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #dialogService: RtDialogService = inject(RtDialogService);\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n readonly #confirmRequestSource: Subject<IRtMenu.ConfirmData> = new Subject<IRtMenu.ConfirmData>();\n\n readonly #t_uiConfirm: Signal<string> = rtKitLabel('uiConfirm');\n readonly #t_uiCancel: Signal<string> = rtKitLabel('uiCancel');\n\n /** Свой значок приложения — `<ng-template rtMenuItemIcon>` внутри пункта. */\n protected readonly ownIcon: Signal<RtMenuItemIconDirective | undefined> = contentChild(RtMenuItemIconDirective);\n\n /** Значок пункта: свой `icon`, а без него — пара имени Material из перечня кита. */\n protected readonly iconName: Signal<IRtIcon.Name | null> = computed((): IRtIcon.Name | null =>\n menuItemIconName(this.icon(), this.glyph())\n );\n\n /** Пункт — ссылка: задан `link`. Роль пункта меню и фокус тогда несёт ссылка внутри. */\n protected readonly isLink: Signal<boolean> = computed((): boolean => this.link() !== null);\n\n /** Адрес для ссылки: у недоступного пункта его нет, и ссылка не переходит. */\n protected readonly linkTarget: Signal<RouterLink['routerLink']> = computed((): RouterLink['routerLink'] =>\n this.disabled() ? null : this.link()\n );\n\n /** Иконка слева от лейбла. `null` — без иконки. */\n public readonly icon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n /** Текст пункта. */\n public readonly label: InputSignal<string> = input<string>('');\n\n /** Деструктивный пункт (например «Удалить») — красный текст/иконка. */\n public readonly danger: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Пункт-согласие (например «Принять») — зелёный текст и иконка, как тон `success` пунктов первого кита. */\n public readonly success: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /**\n * Имя значка Material, как его пишет пункт меню первого кита (`check_circle`). Рисует его набор\n * кита через перечень соответствий; `icon` сильнее, а имя без пары рисует пункт без значка.\n */\n public readonly glyph: InputSignal<string | null> = input<string | null>(null);\n\n /**\n * Залитый значок вместо контурного — как значки пунктов меню первого кита. Уходит в `fill`\n * значка: действует в материальном наборе, свой набор рисует значок одним рисунком. Свой\n * значок `rtMenuItemIcon` приложение рисует само, и заливка его не касается.\n */\n public readonly fill: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Пункт — нынешнее значение выбора, который открыл меню: подсвечен фоном и объявлен скринридеру. */\n public readonly current: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Недоступный пункт — приглушён, не эмитит `(selected)` и не закрывает меню. */\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /**\n * Текст confirm-модалки. Непустое значение включает подтверждение: по выбору\n * пункта открывается модалка, и `(selected)` эмитится только после согласия.\n */\n public readonly confirmMessage: InputSignal<string> = input<string>('');\n\n /** Заголовок confirm-модалки (опц.). */\n public readonly confirmTitle: InputSignal<string | null> = input<string | null>(null);\n\n /** Лейбл подтверждающей кнопки в модалке. */\n /** Пусто — берётся переведённая подпись по умолчанию */\n public readonly confirmLabel: InputSignal<string> = input<string>('');\n\n /** Лейбл кнопки отмены в модалке. */\n public readonly confirmCancelLabel: InputSignal<string> = input<string>('');\n\n /** Тон подтверждающей кнопки в модалке. */\n public readonly confirmTone: InputSignal<IRtMenu.ConfirmTone> = input<IRtMenu.ConfirmTone>('danger');\n\n /**\n * Команды маршрута приложения, как у `routerLink`. Задан — пункт рисует ссылку с `href`: Enter и\n * клик переходят по ней, а Ctrl/Cmd-click, Shift-click и средняя кнопка открывают новую вкладку\n * или окно силами браузера. Меню закрывается во всех этих случаях; подтверждение не спрашивается.\n */\n public readonly link: InputSignal<RouterLink['routerLink']> = input<RouterLink['routerLink']>(null);\n\n /** Пункт выбран (клик/Enter/Space и не `disabled`; после подтверждения, если задано). */\n public readonly selected: OutputEmitterRef<void> = output<void>();\n\n constructor() {\n // Имя Material без пары рисует пункт без значка, и пропуск без предупреждения не заметен.\n if (isDevMode()) {\n effect((): void => {\n const glyph: string | null = unpairedGlyph(this.icon(), this.glyph(), this.ownIcon() !== undefined);\n if (glyph !== null) {\n // eslint-disable-next-line no-console -- предупреждение разработчику приложения: другого канала у кита нет\n console.warn(\n `rt-menu-item «${this.label()}»: у значка Material «${glyph}» нет пары в перечне кита. ` +\n 'Задайте icon или свой значок через <ng-template rtMenuItemIcon>.'\n );\n }\n });\n }\n\n // Подписка на результат confirm-модалки объявлена один раз: #openConfirm\n // эмитит данные модалки, mergeMap открывает её и ждёт afterClosed()\n // (одноразовый стрим — комплитится при закрытии модалки).\n this.#confirmRequestSource\n .pipe(\n mergeMap((data: IRtMenu.ConfirmData): Observable<boolean | undefined> =>\n this.#dialogService\n .open<RtMenuConfirmDialogComponent, IRtMenu.ConfirmData, boolean>(RtMenuConfirmDialogComponent, { data })\n .afterClosed()\n ),\n takeUntilDestroyed(this.#destroyRef)\n )\n .subscribe((confirmed: boolean | undefined = false): void => {\n if (confirmed === true) {\n this.#commitSelection();\n }\n });\n }\n\n protected onActivate(event: Event): void {\n if (this.disabled()) {\n // Гасим, чтобы клик по disabled-пункту не «протёк» наружу.\n event.stopPropagation();\n event.preventDefault();\n return;\n }\n const message: string = this.confirmMessage().trim();\n if (message !== '' && !this.isLink()) {\n // Не закрываем меню сразу: оно остаётся открытым под backdrop'ом\n // модалки, чтобы пункт пережил решение пользователя (отмена → меню\n // снова видно). Подтверждение коммитит выбор.\n this.#openConfirm(message);\n return;\n }\n this.#commitSelection();\n }\n\n protected onKey(event: Event): void {\n if (this.isLink()) {\n this.#onLinkKey(event);\n return;\n }\n // Space иначе проскроллит страницу — гасим дефолт перед активацией.\n event.preventDefault();\n this.onActivate(event);\n }\n\n /** Средняя кнопка не даёт `click`: вкладку открывает браузер, а меню закрываем сами. */\n protected onAuxClick(event: MouseEvent): void {\n if (this.isLink() && event.button === 1 && !this.disabled()) {\n this.#commitSelection();\n }\n }\n\n /**\n * Enter на ссылке браузер сам превращает в `click`, и переход делает `routerLink`. Пробел ссылка\n * не нажимает — его переводим в тот же `click`, погасив прокрутку страницы.\n */\n #onLinkKey(event: Event): void {\n if (event instanceof KeyboardEvent && event.key === ' ') {\n event.preventDefault();\n this.#elementRef.nativeElement.querySelector<HTMLElement>('a')?.click();\n }\n }\n\n #openConfirm(message: string): void {\n const data: IRtMenu.ConfirmData = {\n message,\n title: this.confirmTitle(),\n confirmLabel: this.confirmLabel() || this.#t_uiConfirm(),\n cancelLabel: this.confirmCancelLabel() || this.#t_uiCancel(),\n tone: this.confirmTone(),\n };\n // Открытие модалки и подписка на результат — в конструкторном стриме\n // (см. #confirmRequestSource); здесь только эмит данных модалки.\n this.#confirmRequestSource.next(data);\n }\n\n #commitSelection(): void {\n this.selected.emit();\n // Закрыть родительское меню: событие всплывает к панели rt-menu в overlay.\n this.#elementRef.nativeElement.dispatchEvent(new CustomEvent(RT_MENU_SELECT_EVENT, { bubbles: true }));\n }\n}\n","<ng-container rtBlock=\"rt-menu-item\">\n @if (isLink()) {\n <a\n rtElem=\"link\"\n role=\"menuitem\"\n qa-dataid=\"menu-item-link\"\n [routerLink]=\"linkTarget()\"\n [attr.aria-current]=\"current() ? 'true' : null\"\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\n [attr.tabindex]=\"disabled() ? null : 0\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n </a>\n } @else {\n <ng-container [ngTemplateOutlet]=\"content\" />\n }\n\n <ng-template #content>\n @if (ownIcon(); as own) {\n <span rtElem=\"icon\" qa-dataid=\"menu-item-own-icon\" aria-hidden=\"true\" [rtMod]=\"{ own: true }\">\n <ng-container [ngTemplateOutlet]=\"own.templateRef\" />\n </span>\n } @else if (iconName(); as name) {\n <rt-icon rtElem=\"icon\" size=\"sm\" [name]=\"name\" [fill]=\"fill()\" />\n }\n\n <span rtElem=\"label\" qa-dataid=\"menu-item-label\">{{ label() }}</span>\n </ng-template>\n</ng-container>\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition, OverlayModule } from '@angular/cdk/overlay';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\n signal,\n viewChild,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { carryThemeScope, materialPresetClassesOf } from '@rt-tools/ui-kit-v2/core';\nimport { IRtIconButton, RtIconButtonComponent } from '@rt-tools/ui-kit-v2/icon-button';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { IRtMenu } from './rt-menu.model';\n\nconst BEM_BLOCK: string = 'rt-menu';\n\nconst POSITION_BELOW_END: ConnectedPosition = {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 4,\n};\nconst POSITION_ABOVE_END: ConnectedPosition = {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -4,\n};\nconst POSITION_BELOW_START: ConnectedPosition = {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 4,\n};\nconst POSITION_ABOVE_START: ConnectedPosition = {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -4,\n};\n\n/**\n * Dropdown-меню действий: icon-only триггер «…» + плавающая панель с пунктами\n * `rt-menu-item`, спроецированными через `<ng-content>`. Типовое применение —\n * per-row действия в конце строки `rt-table` (см. `[showRowActions]`).\n *\n * Движок — CDK `cdkConnectedOverlay` с прозрачным backdrop: авто-flip у края\n * viewport (4 fallback-позиции), backdrop-click и `(detach)` закрывают, Escape\n * закрывает через `(overlayKeydown)`. Панель не режется `overflow: hidden`\n * предками (таблицы, карточки), т.к. рендерится в overlay-контейнере.\n *\n * Выбор пункта закрывает меню: `rt-menu-item` всплывающе диспатчит DOM-событие\n * `rtMenuSelect`, которое панель ловит, — это переживает content-projection.\n *\n * @example\n * ```html\n * <rt-menu ariaLabel=\"Действия\">\n * <rt-menu-item icon=\"ico-edit\" label=\"Редактировать\" (selected)=\"edit()\" />\n * <rt-menu-item icon=\"ico-trash\" label=\"Удалить\" danger (selected)=\"remove()\" />\n * </rt-menu>\n * ```\n */\n@Component({\n selector: 'rt-menu',\n templateUrl: './rt-menu.component.html',\n styleUrl: './rt-menu.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // @angular/cdk\n OverlayModule,\n\n // standalone components / directives\n RtIconButtonComponent,\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n host: {\n class: BEM_BLOCK,\n '[class.rt-menu--open]': 'isOpen()',\n },\n})\nexport class RtMenuComponent {\n readonly #host: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #t_uiActions: Signal<string> = rtKitLabel('uiActions');\n\n /** Ход стрелками по пунктам открытой панели; у закрытой его нет. */\n #keyManager: FocusKeyManager<IRtMenu.Focusable> | null = null;\n\n protected readonly overlay: Signal<CdkConnectedOverlay> = viewChild.required(CdkConnectedOverlay);\n protected readonly trigger: Signal<CdkOverlayOrigin> = viewChild.required(CdkOverlayOrigin);\n\n protected readonly isOpen: WritableSignal<boolean> = signal<boolean>(false);\n\n /** Класс набора, найденный над меню при открытии: панель лежит вне контейнера с признаком. */\n protected readonly presetClasses: WritableSignal<string[]> = signal<string[]>([]);\n\n /** Классы панели: заданные входом и класс набора. */\n protected readonly panelClasses: Signal<string[]> = computed((): string[] => {\n const own: string | string[] = this.panelClass();\n return [...(Array.isArray(own) ? own : own.split(/\\s+/).filter(Boolean)), ...this.presetClasses()];\n });\n\n protected readonly ariaText: Signal<string> = computed((): string => this.ariaLabel() || this.#t_uiActions());\n\n /** Fallback-цепочка позиций панели: первой идёт сторона по `align`. */\n protected readonly overlayPositions: Signal<ConnectedPosition[]> = computed((): ConnectedPosition[] =>\n this.align() === 'end'\n ? [POSITION_BELOW_END, POSITION_ABOVE_END, POSITION_BELOW_START, POSITION_ABOVE_START]\n : [POSITION_BELOW_START, POSITION_ABOVE_START, POSITION_BELOW_END, POSITION_ABOVE_END]\n );\n\n /** Иконка триггера. Default `ellipsis-h` («…» — три точки в конце строки). */\n public readonly icon: InputSignal<IRtIcon.Name> = input<IRtIcon.Name>('ellipsis-h');\n\n /** ARIA-метка триггера (icon-only кнопка) + текст tooltip'а. */\n /** Пусто — берётся переведённая подпись по умолчанию */\n public readonly ariaLabel: InputSignal<string> = input<string>('');\n\n /** Сторона раскрытия панели относительно триггера. */\n public readonly align: InputSignal<IRtMenu.Align> = input<IRtMenu.Align>('end');\n\n /**\n * Классы панели. Панель живёт поверх страницы, вне хоста меню, и признаки вида над хостом до неё\n * не доходят: семья, нарисованная своим набором, отдаёт его панели этим входом.\n */\n public readonly panelClass: InputSignal<string | string[]> = input<string | string[]>([]);\n\n /** Размер кнопки-триггера: мельче `md` — в плотной строке рядом с другими действиями строки. */\n public readonly triggerSize: InputSignal<IRtIconButton.Size> = input<IRtIconButton.Size>('md');\n\n /** Размер панели: компактная — у меню действий строки таблицы. */\n public readonly size: InputSignal<IRtMenu.Size> = input<IRtMenu.Size>('md');\n\n /** Триггер отключён — меню не открыть. */\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Панель открылась (`true`) или закрылась (`false`); повтор того же состояния не приходит. */\n public readonly openedChange: OutputEmitterRef<boolean> = output<boolean>();\n\n protected toggle(event: MouseEvent): void {\n // Клик по триггеру не должен активировать строку таблицы под ним.\n event.stopPropagation();\n this.#setOpen(!this.isOpen());\n }\n\n protected close(): void {\n this.#setOpen(false);\n }\n\n /**\n * Панель легла на страницу — фокус уходит на первый пункт, как у меню Material. Пункты берутся\n * из разметки панели, а не запросом компонентов: таблица кладёт их шаблоном приложения, и\n * запрос содержимого меню их не видит.\n */\n protected onAttach(): void {\n const pane: HTMLElement = this.overlay().overlayRef.overlayElement;\n\n // Тема куска `rtTheme` вокруг меню едет на коробку панели, как у поповера и подсказки:\n // панель лежит в конце страницы, и без этого меню из тёмной карточки рисовалось темой\n // страницы. Зовётся на каждом открытии — кусок вокруг кнопки мог смениться.\n carryThemeScope(pane, this.trigger().elementRef.nativeElement);\n\n const nodes: HTMLElement[] = Array.from(pane.querySelectorAll<HTMLElement>('[role=\"menuitem\"]'));\n const focusables: IRtMenu.Focusable[] = nodes.map((node: HTMLElement): IRtMenu.Focusable => ({\n disabled: node.getAttribute('aria-disabled') === 'true',\n focus: (): void => node.focus(),\n }));\n\n this.#keyManager = new FocusKeyManager<IRtMenu.Focusable>(focusables).withWrap().withHomeAndEnd();\n this.#keyManager.setFirstItemActive();\n }\n\n /** Выбранный пункт закрывает панель и возвращает фокус кнопке, откуда меню открыли. */\n protected onSelect(): void {\n this.close();\n this.#focusTrigger();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n this.close();\n this.#focusTrigger();\n return;\n }\n\n if (event.key === 'Tab') {\n // Tab уводит фокус дальше по порядку — панель за ним не остаётся. Панель лежит в конце\n // страницы, и без возврата Tab ушёл бы с неё в никуда: фокус ставится на кнопку, а\n // умолчание клавиши не отменяется — браузер ведёт его от кнопки к следующему, как у\n // меню Material.\n this.close();\n this.#focusTrigger();\n return;\n }\n\n this.#keyManager?.onKeydown(event);\n }\n\n #focusTrigger(): void {\n this.trigger().elementRef.nativeElement.querySelector('button')?.focus();\n }\n\n #setOpen(open: boolean): void {\n if (open !== this.isOpen()) {\n if (!open) {\n this.#keyManager?.destroy();\n this.#keyManager = null;\n }\n if (open) {\n this.presetClasses.set(materialPresetClassesOf(this.#host.nativeElement));\n }\n this.isOpen.set(open);\n this.openedChange.emit(open);\n }\n }\n}\n","<rt-icon-button\n cdkOverlayOrigin\n qa-dataid=\"menu-trigger\"\n #trigger=\"cdkOverlayOrigin\"\n variant=\"ghost\"\n [size]=\"triggerSize()\"\n [icon]=\"icon()\"\n [ariaLabel]=\"ariaText()\"\n [tooltip]=\"ariaText()\"\n [disabled]=\"disabled()\"\n (clicked)=\"toggle($event)\" />\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions()\"\n [cdkConnectedOverlayPanelClass]=\"panelClasses()\"\n (backdropClick)=\"close()\"\n (attach)=\"onAttach()\"\n (detach)=\"close()\"\n (overlayKeydown)=\"onKeydown($event)\">\n <ng-container rtBlock=\"rt-menu\">\n <div rtElem=\"panel\" qa-dataid=\"menu-panel\" role=\"menu\" [rtMod]=\"{ size: size() }\" (rtMenuSelect)=\"onSelect()\">\n <ng-content />\n </div>\n </ng-container>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["BEM_BLOCK","i1"],"mappings":"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"}
1
+ {"version":3,"file":"rt-tools-ui-kit-v2-menu.mjs","names":["BEM_BLOCK","BEM_BLOCK","i1"],"sources":["../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu-item-icon.directive.ts","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu-confirm-dialog.component.ts","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu-confirm-dialog.component.html","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu-item.logic.ts","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu.model.ts","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu-item.component.ts","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu-item.component.html","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu.component.ts","../../../projects/ui-kit-v2/src/lib/components/menu/rt-menu.component.html"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Помечает `<ng-template>` своего значка пункта меню. Кит ставит содержимое на место значка\n * `rt-menu-item__icon` его размером и цветом тона пункта — так приложение рисует значок, которого\n * нет ни в наборе кита, ни в перечне имён Material. Свой значок сильнее `icon` и `glyph`.\n *\n * ```html\n * <rt-menu-item label=\"Сделать активным\">\n * <ng-template rtMenuItemIcon><svg viewBox=\"0 0 24 24\">…</svg></ng-template>\n * </rt-menu-item>\n * ```\n */\n@Directive({\n selector: 'ng-template[rtMenuItemIcon]',\n})\nexport class RtMenuItemIconDirective {\n public readonly templateRef: TemplateRef<unknown> = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { inject, ChangeDetectionStrategy, Component, Signal, ViewEncapsulation } from '@angular/core';\n\nimport { BlockDirective, ElemDirective } from '@rt-tools/core';\n\nimport { RT_KIT_LABELS, TRtKitLabelMap } from '@rt-tools/ui-kit-v2/core';\nimport { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';\nimport { RtDialogRef } from '@rt-tools/ui-kit-v2/dialog';\nimport { RtDialogComponent } from '@rt-tools/ui-kit-v2/dialog';\nimport { RT_DIALOG_DATA } from '@rt-tools/ui-kit-v2/dialog';\nimport { IRtMenu } from './rt-menu.model';\n\nconst BEM_BLOCK: string = 'rt-menu-confirm-dialog';\n\n/**\n * Confirm-модалка деструктивного пункта `rt-menu-item`. Открывается через\n * `RtDialogService` (центрированный overlay поверх меню), возвращает `true`\n * при подтверждении и `false`/`undefined` при отмене.\n *\n * Модалка (а не popover-под-пунктом) нужна потому, что панель `rt-menu` сама\n * живёт в CDK Overlay: вложенный popover-overlay конфликтовал бы с её\n * backdrop/закрытием. Внутренний компонент — не экспортируется из `components`, это\n * деталь реализации confirm-флоу пункта меню.\n */\n@Component({\n selector: 'rt-menu-confirm-dialog',\n templateUrl: './rt-menu-confirm-dialog.component.html',\n styleUrl: './rt-menu-confirm-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone components / directives\n RtButtonDirective,\n RtDialogComponent,\n BlockDirective,\n ElemDirective,\n ],\n host: {\n class: BEM_BLOCK,\n },\n})\nexport class RtMenuConfirmDialogComponent {\n protected readonly t: Signal<TRtKitLabelMap> = inject(RT_KIT_LABELS);\n\n protected readonly data: IRtMenu.ConfirmData = inject(RT_DIALOG_DATA) as IRtMenu.ConfirmData;\n\n readonly #dialogRef: RtDialogRef<boolean> = inject(RtDialogRef);\n\n protected onConfirm(): void {\n this.#dialogRef.close(true);\n }\n\n protected onCancel(): void {\n this.#dialogRef.close(false);\n }\n}\n","<rt-dialog width=\"360px\" [ariaLabel]=\"t().uiConfirmAction\">\n <div rtBlock=\"rt-menu-confirm-dialog\">\n <div rtElem=\"text\">\n @if (data.title; as title) {\n <h2 rtElem=\"title\" qa-dataid=\"menu-confirm-title\">{{ title }}</h2>\n }\n <p rtElem=\"message\" qa-dataid=\"menu-confirm-message\">{{ data.message }}</p>\n </div>\n <div rtElem=\"footer\">\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content -->\n <button\n rtButton\n qa-dataid=\"menu-confirm-cancel\"\n type=\"button\"\n appearance=\"text\"\n theme=\"secondary\"\n [label]=\"data.cancelLabel\"\n (click)=\"onCancel()\"></button>\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content -->\n <button\n rtButton\n qa-dataid=\"menu-confirm-accept\"\n type=\"button\"\n appearance=\"filled\"\n [label]=\"data.confirmLabel\"\n [theme]=\"data.tone\"\n (click)=\"onConfirm()\"></button>\n </div>\n </div>\n</rt-dialog>\n","import { materialPairOf } from '@rt-tools/ui-kit-v2/icon';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\n\n/** Значок пункта: свой `icon`, а без него — пара имени Material из перечня кита. */\nexport function menuItemIconName(icon: IRtIcon.Name | null, glyph: string | null): IRtIcon.Name | null {\n if (icon !== null) {\n return icon;\n }\n return materialPairOf(glyph);\n}\n\n/**\n * Имя Material, о котором пункт должен предупредить: у него нет пары в перечне кита, а ни `icon`,\n * ни своего значка нет. Тогда пункт рисуется без значка, и без предупреждения пропуск не заметен.\n * `null` — предупреждать не о чем.\n */\nexport function unpairedGlyph(icon: IRtIcon.Name | null, glyph: string | null, hasOwnIcon: boolean): string | null {\n if (!glyph || hasOwnIcon || menuItemIconName(icon, glyph) !== null) {\n return null;\n }\n return glyph;\n}\n","/**\n * Контракты `rt-menu` — dropdown-меню действий (триггер «…» + плавающая панель\n * с пунктами `rt-menu-item`). Один корневой неймспейс с префиксом `I`.\n */\nexport namespace IRtMenu {\n /** Горизонтальное выравнивание панели относительно триггера. */\n export type Align = 'start' | 'end';\n\n /**\n * Размер панели: `md` — обычный, `sm` — компактный, как меню действий строки в первом ките. Под\n * материальным набором у компактного пункт ниже и значок мельче; свой вид их не различает.\n */\n export type Size = 'md' | 'sm';\n\n /** Тон подтверждающей кнопки в confirm-модалке пункта меню. */\n export type ConfirmTone = 'danger' | 'warning' | 'primary';\n\n /**\n * Данные для confirm-модалки, которую `rt-menu-item` открывает перед\n * деструктивным действием. Прокидываются в `rt-menu-confirm-dialog` через\n * `RT_DIALOG_DATA`; модалка возвращает `true` при подтверждении.\n */\n export interface ConfirmData {\n readonly message: string;\n readonly title: string | null;\n readonly confirmLabel: string;\n readonly cancelLabel: string;\n readonly tone: ConfirmTone;\n }\n\n /** Пункт панели для хода стрелками: его узел и признак, что его пропускают. */\n export interface Focusable {\n readonly disabled: boolean;\n focus(): void;\n }\n}\n\n/**\n * Имя DOM-события, которое `rt-menu-item` всплывающе диспатчит при выборе пункта.\n * `rt-menu` слушает его на панели и закрывается. DOM-событие (а не DI/output)\n * нужно потому, что пункты проецируются в overlay-панель — всплытие через DOM\n * переживает границы content-projection и overlay-контейнера.\n */\nexport const RT_MENU_SELECT_EVENT: string = 'rtMenuSelect';\n","import { BooleanInput } from '@angular/cdk/coercion';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n computed,\n Component,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n isDevMode,\n output,\n OutputEmitterRef,\n Signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RouterLink } from '@angular/router';\n\nimport { mergeMap, Observable, Subject } from 'rxjs';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { RtDialogService } from '@rt-tools/ui-kit-v2/dialog';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { RtMenuConfirmDialogComponent } from './rt-menu-confirm-dialog.component';\nimport { RtMenuItemIconDirective } from './rt-menu-item-icon.directive';\nimport { menuItemIconName, unpairedGlyph } from './rt-menu-item.logic';\nimport { RT_MENU_SELECT_EVENT, IRtMenu } from './rt-menu.model';\n\nconst BEM_BLOCK: string = 'rt-menu-item';\n\n/**\n * Пункт меню `rt-menu`: иконка (опц.) + лейбл. Кликабелен и активируется с\n * клавиатуры (Enter/Space). Выбор пункта эмитит `(selected)` для потребителя\n * и всплывающе диспатчит DOM-событие `rtMenuSelect`, по которому `rt-menu`\n * закрывается. `disabled` блокирует и `(selected)`, и закрытие.\n *\n * Tooltip — через host-директиву `RtTooltipDirective` (`tooltip` маппится в\n * `rtTooltip`): полезно показать причину недоступности на `disabled`-пункте.\n *\n * Деструктивный пункт может требовать подтверждения: задайте `confirmMessage`\n * (опц. `confirmTitle` / `confirmLabel` / `confirmTone`) — тогда по выбору\n * сперва открывается центрированная confirm-модалка, и `(selected)` эмитится\n * только после подтверждения. Модалка (а не popover) нужна потому, что панель\n * `rt-menu` сама в CDK Overlay; меню остаётся открытым под backdrop'ом, пока\n * пользователь решает.\n *\n * `ViewEncapsulation.None`; стили префиксованы `.rt-menu-item`. Host несёт\n * BEM-класс блока (template-`<ng-container rtBlock>` даёт контекст для `rtElem`,\n * но класс на comment-node не вешает — см. host-class паттерн rt-icon-button).\n */\n@Component({\n selector: 'rt-menu-item',\n templateUrl: './rt-menu-item.component.html',\n styleUrl: './rt-menu-item.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone components / directives\n RtIconComponent,\n BlockDirective,\n ElemDirective,\n ModDirective,\n NgTemplateOutlet,\n RouterLink,\n ],\n hostDirectives: [\n {\n directive: RtTooltipDirective,\n inputs: ['rtTooltip: tooltip'],\n },\n { directive: RtRadiusDirective, inputs: ['radius'] },\n ],\n host: {\n class: BEM_BLOCK,\n '[attr.role]': \"isLink() ? 'none' : 'menuitem'\",\n '[class.rt-menu-item--danger]': 'danger()',\n '[class.rt-menu-item--success]': 'success()',\n '[class.rt-menu-item--disabled]': 'disabled()',\n '[class.rt-menu-item--current]': 'current()',\n '[class.rt-menu-item--link]': 'isLink()',\n '[attr.aria-current]': \"current() && !isLink() ? 'true' : null\",\n '[attr.aria-disabled]': \"disabled() && !isLink() ? 'true' : null\",\n '[attr.tabindex]': 'disabled() || isLink() ? null : 0',\n '(click)': 'onActivate($event)',\n '(auxclick)': 'onAuxClick($event)',\n '(keydown.enter)': 'onKey($event)',\n '(keydown.space)': 'onKey($event)',\n },\n})\nexport class RtMenuItemComponent {\n readonly #elementRef: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #dialogService: RtDialogService = inject(RtDialogService);\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n readonly #confirmRequestSource: Subject<IRtMenu.ConfirmData> = new Subject<IRtMenu.ConfirmData>();\n\n readonly #t_uiConfirm: Signal<string> = rtKitLabel('uiConfirm');\n readonly #t_uiCancel: Signal<string> = rtKitLabel('uiCancel');\n\n /** Свой значок приложения — `<ng-template rtMenuItemIcon>` внутри пункта. */\n protected readonly ownIcon: Signal<RtMenuItemIconDirective | undefined> = contentChild(RtMenuItemIconDirective);\n\n /** Значок пункта: свой `icon`, а без него — пара имени Material из перечня кита. */\n protected readonly iconName: Signal<IRtIcon.Name | null> = computed((): IRtIcon.Name | null =>\n menuItemIconName(this.icon(), this.glyph())\n );\n\n /** Пункт — ссылка: задан `link`. Роль пункта меню и фокус тогда несёт ссылка внутри. */\n protected readonly isLink: Signal<boolean> = computed((): boolean => this.link() !== null);\n\n /** Адрес для ссылки: у недоступного пункта его нет, и ссылка не переходит. */\n protected readonly linkTarget: Signal<RouterLink['routerLink']> = computed((): RouterLink['routerLink'] =>\n this.disabled() ? null : this.link()\n );\n\n /** Иконка слева от лейбла. `null` — без иконки. */\n public readonly icon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n /** Текст пункта. */\n public readonly label: InputSignal<string> = input<string>('');\n\n /** Деструктивный пункт (например «Удалить») — красный текст/иконка. */\n public readonly danger: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Пункт-согласие (например «Принять») — зелёный текст и иконка, как тон `success` пунктов первого кита. */\n public readonly success: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /**\n * Имя значка Material, как его пишет пункт меню первого кита (`check_circle`). Рисует его набор\n * кита через перечень соответствий; `icon` сильнее, а имя без пары рисует пункт без значка.\n */\n public readonly glyph: InputSignal<string | null> = input<string | null>(null);\n\n /**\n * Залитый значок вместо контурного — как значки пунктов меню первого кита. Уходит в `fill`\n * значка: действует в материальном наборе, свой набор рисует значок одним рисунком. Свой\n * значок `rtMenuItemIcon` приложение рисует само, и заливка его не касается.\n */\n public readonly fill: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Пункт — нынешнее значение выбора, который открыл меню: подсвечен фоном и объявлен скринридеру. */\n public readonly current: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Недоступный пункт — приглушён, не эмитит `(selected)` и не закрывает меню. */\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /**\n * Текст confirm-модалки. Непустое значение включает подтверждение: по выбору\n * пункта открывается модалка, и `(selected)` эмитится только после согласия.\n */\n public readonly confirmMessage: InputSignal<string> = input<string>('');\n\n /** Заголовок confirm-модалки (опц.). */\n public readonly confirmTitle: InputSignal<string | null> = input<string | null>(null);\n\n /** Лейбл подтверждающей кнопки в модалке. */\n /** Пусто — берётся переведённая подпись по умолчанию */\n public readonly confirmLabel: InputSignal<string> = input<string>('');\n\n /** Лейбл кнопки отмены в модалке. */\n public readonly confirmCancelLabel: InputSignal<string> = input<string>('');\n\n /** Тон подтверждающей кнопки в модалке. */\n public readonly confirmTone: InputSignal<IRtMenu.ConfirmTone> = input<IRtMenu.ConfirmTone>('danger');\n\n /**\n * Команды маршрута приложения, как у `routerLink`. Задан — пункт рисует ссылку с `href`: Enter и\n * клик переходят по ней, а Ctrl/Cmd-click, Shift-click и средняя кнопка открывают новую вкладку\n * или окно силами браузера. Меню закрывается во всех этих случаях; подтверждение не спрашивается.\n */\n public readonly link: InputSignal<RouterLink['routerLink']> = input<RouterLink['routerLink']>(null);\n\n /** Пункт выбран (клик/Enter/Space и не `disabled`; после подтверждения, если задано). */\n public readonly selected: OutputEmitterRef<void> = output<void>();\n\n constructor() {\n // Имя Material без пары рисует пункт без значка, и пропуск без предупреждения не заметен.\n if (isDevMode()) {\n effect((): void => {\n const glyph: string | null = unpairedGlyph(this.icon(), this.glyph(), this.ownIcon() !== undefined);\n if (glyph !== null) {\n // eslint-disable-next-line no-console -- предупреждение разработчику приложения: другого канала у кита нет\n console.warn(\n `rt-menu-item «${this.label()}»: у значка Material «${glyph}» нет пары в перечне кита. ` +\n 'Задайте icon или свой значок через <ng-template rtMenuItemIcon>.'\n );\n }\n });\n }\n\n // Подписка на результат confirm-модалки объявлена один раз: #openConfirm\n // эмитит данные модалки, mergeMap открывает её и ждёт afterClosed()\n // (одноразовый стрим — комплитится при закрытии модалки).\n this.#confirmRequestSource\n .pipe(\n mergeMap((data: IRtMenu.ConfirmData): Observable<boolean | undefined> =>\n this.#dialogService\n .open<RtMenuConfirmDialogComponent, IRtMenu.ConfirmData, boolean>(RtMenuConfirmDialogComponent, { data })\n .afterClosed()\n ),\n takeUntilDestroyed(this.#destroyRef)\n )\n .subscribe((confirmed: boolean | undefined = false): void => {\n if (confirmed === true) {\n this.#commitSelection();\n }\n });\n }\n\n protected onActivate(event: Event): void {\n if (this.disabled()) {\n // Гасим, чтобы клик по disabled-пункту не «протёк» наружу.\n event.stopPropagation();\n event.preventDefault();\n return;\n }\n const message: string = this.confirmMessage().trim();\n if (message !== '' && !this.isLink()) {\n // Не закрываем меню сразу: оно остаётся открытым под backdrop'ом\n // модалки, чтобы пункт пережил решение пользователя (отмена → меню\n // снова видно). Подтверждение коммитит выбор.\n this.#openConfirm(message);\n return;\n }\n this.#commitSelection();\n }\n\n protected onKey(event: Event): void {\n if (this.isLink()) {\n this.#onLinkKey(event);\n return;\n }\n // Space иначе проскроллит страницу — гасим дефолт перед активацией.\n event.preventDefault();\n this.onActivate(event);\n }\n\n /** Средняя кнопка не даёт `click`: вкладку открывает браузер, а меню закрываем сами. */\n protected onAuxClick(event: MouseEvent): void {\n if (this.isLink() && event.button === 1 && !this.disabled()) {\n this.#commitSelection();\n }\n }\n\n /**\n * Enter на ссылке браузер сам превращает в `click`, и переход делает `routerLink`. Пробел ссылка\n * не нажимает — его переводим в тот же `click`, погасив прокрутку страницы.\n */\n #onLinkKey(event: Event): void {\n if (event instanceof KeyboardEvent && event.key === ' ') {\n event.preventDefault();\n this.#elementRef.nativeElement.querySelector<HTMLElement>('a')?.click();\n }\n }\n\n #openConfirm(message: string): void {\n const data: IRtMenu.ConfirmData = {\n message,\n title: this.confirmTitle(),\n confirmLabel: this.confirmLabel() || this.#t_uiConfirm(),\n cancelLabel: this.confirmCancelLabel() || this.#t_uiCancel(),\n tone: this.confirmTone(),\n };\n // Открытие модалки и подписка на результат — в конструкторном стриме\n // (см. #confirmRequestSource); здесь только эмит данных модалки.\n this.#confirmRequestSource.next(data);\n }\n\n #commitSelection(): void {\n this.selected.emit();\n // Закрыть родительское меню: событие всплывает к панели rt-menu в overlay.\n this.#elementRef.nativeElement.dispatchEvent(new CustomEvent(RT_MENU_SELECT_EVENT, { bubbles: true }));\n }\n}\n","<ng-container rtBlock=\"rt-menu-item\">\n @if (isLink()) {\n <a\n rtElem=\"link\"\n role=\"menuitem\"\n qa-dataid=\"menu-item-link\"\n [routerLink]=\"linkTarget()\"\n [attr.aria-current]=\"current() ? 'true' : null\"\n [attr.aria-disabled]=\"disabled() ? 'true' : null\"\n [attr.tabindex]=\"disabled() ? null : 0\">\n <ng-container [ngTemplateOutlet]=\"content\" />\n </a>\n } @else {\n <ng-container [ngTemplateOutlet]=\"content\" />\n }\n\n <ng-template #content>\n @if (ownIcon(); as own) {\n <span rtElem=\"icon\" qa-dataid=\"menu-item-own-icon\" aria-hidden=\"true\" [rtMod]=\"{ own: true }\">\n <ng-container [ngTemplateOutlet]=\"own.templateRef\" />\n </span>\n } @else if (iconName(); as name) {\n <rt-icon rtElem=\"icon\" size=\"sm\" [name]=\"name\" [fill]=\"fill()\" />\n }\n\n <span rtElem=\"label\" qa-dataid=\"menu-item-label\">{{ label() }}</span>\n </ng-template>\n</ng-container>\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { BooleanInput } from '@angular/cdk/coercion';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition, OverlayModule } from '@angular/cdk/overlay';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\n signal,\n viewChild,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { rtKitLabel } from '@rt-tools/ui-kit-v2/core';\nimport { carryThemeScope, materialPresetClassesOf } from '@rt-tools/ui-kit-v2/core';\nimport { IRtIconButton, RtIconButtonComponent } from '@rt-tools/ui-kit-v2/icon-button';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { IRtMenu } from './rt-menu.model';\n\nconst BEM_BLOCK: string = 'rt-menu';\n\nconst POSITION_BELOW_END: ConnectedPosition = {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 4,\n};\nconst POSITION_ABOVE_END: ConnectedPosition = {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -4,\n};\nconst POSITION_BELOW_START: ConnectedPosition = {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 4,\n};\nconst POSITION_ABOVE_START: ConnectedPosition = {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -4,\n};\n\n/**\n * Dropdown-меню действий: icon-only триггер «…» + плавающая панель с пунктами\n * `rt-menu-item`, спроецированными через `<ng-content>`. Типовое применение —\n * per-row действия в конце строки `rt-table` (см. `[showRowActions]`).\n *\n * Движок — CDK `cdkConnectedOverlay` с прозрачным backdrop: авто-flip у края\n * viewport (4 fallback-позиции), backdrop-click и `(detach)` закрывают, Escape\n * закрывает через `(overlayKeydown)`. Панель не режется `overflow: hidden`\n * предками (таблицы, карточки), т.к. рендерится в overlay-контейнере.\n *\n * Выбор пункта закрывает меню: `rt-menu-item` всплывающе диспатчит DOM-событие\n * `rtMenuSelect`, которое панель ловит, — это переживает content-projection.\n *\n * @example\n * ```html\n * <rt-menu ariaLabel=\"Действия\">\n * <rt-menu-item icon=\"ico-edit\" label=\"Редактировать\" (selected)=\"edit()\" />\n * <rt-menu-item icon=\"ico-trash\" label=\"Удалить\" danger (selected)=\"remove()\" />\n * </rt-menu>\n * ```\n */\n@Component({\n selector: 'rt-menu',\n templateUrl: './rt-menu.component.html',\n styleUrl: './rt-menu.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // @angular/cdk\n OverlayModule,\n\n // standalone components / directives\n RtIconButtonComponent,\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n host: {\n class: BEM_BLOCK,\n '[class.rt-menu--open]': 'isOpen()',\n },\n})\nexport class RtMenuComponent {\n readonly #host: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #t_uiActions: Signal<string> = rtKitLabel('uiActions');\n\n /** Ход стрелками по пунктам открытой панели; у закрытой его нет. */\n #keyManager: FocusKeyManager<IRtMenu.Focusable> | null = null;\n\n protected readonly overlay: Signal<CdkConnectedOverlay> = viewChild.required(CdkConnectedOverlay);\n protected readonly trigger: Signal<CdkOverlayOrigin> = viewChild.required(CdkOverlayOrigin);\n\n protected readonly isOpen: WritableSignal<boolean> = signal<boolean>(false);\n\n /** Класс набора, найденный над меню при открытии: панель лежит вне контейнера с признаком. */\n protected readonly presetClasses: WritableSignal<string[]> = signal<string[]>([]);\n\n /** Классы панели: заданные входом и класс набора. */\n protected readonly panelClasses: Signal<string[]> = computed((): string[] => {\n const own: string | string[] = this.panelClass();\n return [...(Array.isArray(own) ? own : own.split(/\\s+/).filter(Boolean)), ...this.presetClasses()];\n });\n\n protected readonly ariaText: Signal<string> = computed((): string => this.ariaLabel() || this.#t_uiActions());\n\n /** Fallback-цепочка позиций панели: первой идёт сторона по `align`. */\n protected readonly overlayPositions: Signal<ConnectedPosition[]> = computed((): ConnectedPosition[] =>\n this.align() === 'end'\n ? [POSITION_BELOW_END, POSITION_ABOVE_END, POSITION_BELOW_START, POSITION_ABOVE_START]\n : [POSITION_BELOW_START, POSITION_ABOVE_START, POSITION_BELOW_END, POSITION_ABOVE_END]\n );\n\n /** Иконка триггера. Default `ellipsis-h` («…» — три точки в конце строки). */\n public readonly icon: InputSignal<IRtIcon.Name> = input<IRtIcon.Name>('ellipsis-h');\n\n /** ARIA-метка триггера (icon-only кнопка) + текст tooltip'а. */\n /** Пусто — берётся переведённая подпись по умолчанию */\n public readonly ariaLabel: InputSignal<string> = input<string>('');\n\n /** Сторона раскрытия панели относительно триггера. */\n public readonly align: InputSignal<IRtMenu.Align> = input<IRtMenu.Align>('end');\n\n /**\n * Классы панели. Панель живёт поверх страницы, вне хоста меню, и признаки вида над хостом до неё\n * не доходят: семья, нарисованная своим набором, отдаёт его панели этим входом.\n */\n public readonly panelClass: InputSignal<string | string[]> = input<string | string[]>([]);\n\n /** Размер кнопки-триггера: мельче `md` — в плотной строке рядом с другими действиями строки. */\n public readonly triggerSize: InputSignal<IRtIconButton.Size> = input<IRtIconButton.Size>('md');\n\n /** Размер панели: компактная — у меню действий строки таблицы. */\n public readonly size: InputSignal<IRtMenu.Size> = input<IRtMenu.Size>('md');\n\n /** Триггер отключён — меню не открыть. */\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Панель открылась (`true`) или закрылась (`false`); повтор того же состояния не приходит. */\n public readonly openedChange: OutputEmitterRef<boolean> = output<boolean>();\n\n protected toggle(event: MouseEvent): void {\n // Клик по триггеру не должен активировать строку таблицы под ним.\n event.stopPropagation();\n this.#setOpen(!this.isOpen());\n }\n\n protected close(): void {\n this.#setOpen(false);\n }\n\n /**\n * Панель легла на страницу — фокус уходит на первый пункт, как у меню Material. Пункты берутся\n * из разметки панели, а не запросом компонентов: таблица кладёт их шаблоном приложения, и\n * запрос содержимого меню их не видит.\n */\n protected onAttach(): void {\n const pane: HTMLElement = this.overlay().overlayRef.overlayElement;\n\n // Тема куска `rtTheme` вокруг меню едет на коробку панели, как у поповера и подсказки:\n // панель лежит в конце страницы, и без этого меню из тёмной карточки рисовалось темой\n // страницы. Зовётся на каждом открытии — кусок вокруг кнопки мог смениться.\n carryThemeScope(pane, this.trigger().elementRef.nativeElement);\n\n const nodes: HTMLElement[] = Array.from(pane.querySelectorAll<HTMLElement>('[role=\"menuitem\"]'));\n const focusables: IRtMenu.Focusable[] = nodes.map((node: HTMLElement): IRtMenu.Focusable => ({\n disabled: node.getAttribute('aria-disabled') === 'true',\n focus: (): void => node.focus(),\n }));\n\n this.#keyManager = new FocusKeyManager<IRtMenu.Focusable>(focusables).withWrap().withHomeAndEnd();\n this.#keyManager.setFirstItemActive();\n }\n\n /** Выбранный пункт закрывает панель и возвращает фокус кнопке, откуда меню открыли. */\n protected onSelect(): void {\n this.close();\n this.#focusTrigger();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n this.close();\n this.#focusTrigger();\n return;\n }\n\n if (event.key === 'Tab') {\n // Tab уводит фокус дальше по порядку — панель за ним не остаётся. Панель лежит в конце\n // страницы, и без возврата Tab ушёл бы с неё в никуда: фокус ставится на кнопку, а\n // умолчание клавиши не отменяется — браузер ведёт его от кнопки к следующему, как у\n // меню Material.\n this.close();\n this.#focusTrigger();\n return;\n }\n\n this.#keyManager?.onKeydown(event);\n }\n\n #focusTrigger(): void {\n this.trigger().elementRef.nativeElement.querySelector('button')?.focus();\n }\n\n #setOpen(open: boolean): void {\n if (open !== this.isOpen()) {\n if (!open) {\n this.#keyManager?.destroy();\n this.#keyManager = null;\n }\n if (open) {\n this.presetClasses.set(materialPresetClassesOf(this.#host.nativeElement));\n }\n this.isOpen.set(open);\n this.openedChange.emit(open);\n }\n }\n}\n","<rt-icon-button\n cdkOverlayOrigin\n qa-dataid=\"menu-trigger\"\n #trigger=\"cdkOverlayOrigin\"\n variant=\"ghost\"\n [size]=\"triggerSize()\"\n [icon]=\"icon()\"\n [ariaLabel]=\"ariaText()\"\n [tooltip]=\"ariaText()\"\n [disabled]=\"disabled()\"\n (clicked)=\"toggle($event)\" />\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions()\"\n [cdkConnectedOverlayPanelClass]=\"panelClasses()\"\n (backdropClick)=\"close()\"\n (attach)=\"onAttach()\"\n (detach)=\"close()\"\n (overlayKeydown)=\"onKeydown($event)\">\n <ng-container rtBlock=\"rt-menu\">\n <div rtElem=\"panel\" qa-dataid=\"menu-panel\" role=\"menu\" [rtMod]=\"{ size: size() }\" (rtMenuSelect)=\"onSelect()\">\n <ng-content />\n </div>\n </ng-container>\n</ng-template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAgBA,IAAa,0BAAb,MAAa,wBAAuB;CAHpC,cAAA;EAIoB,KAAA,cAAoC,OAA6B,WAAW;CAC/F;CAFY;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAuB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAvB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAuB,cAAA;GAAA,UAAA;GAAA,UAAA;EAAA,CAAA;CAAA;;AAAvB,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAuB,YAAA,CAAA;EAHnC,MAAA;EAAU,MAAA,CAAA,EACP,UAAU,8BACb,CAAA;;;ACJD,MAAMA,cAAoB;AA6B1B,IAAa,+BAAb,MAAa,6BAA4B;CAjBzC,cAAA;EAkBuB,KAAA,IAA4B,OAAO,aAAa;EAEhD,KAAA,OAA4B,OAAO,cAAc;EAE3D,KAAA,aAAmC,OAAO,WAAW;CASjE;CATY;CAEC,YAAS;EACf,KAAK,WAAW,MAAM,IAAI;CAC9B;CAEU,WAAQ;EACd,KAAK,WAAW,MAAM,KAAK;CAC/B;CAbS;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAA4B,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAA5B;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAA4B,cAAA;GAAA,UAAA;GAAA,MAAA,EAAA,gBAAA,yBAAA;GAAA,UAAA;GAAA,UCxCzC;GA8BA,QAAA,CAAA,8lBAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MDCQ;KAAiB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACjB;KAAiB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACjB;KAAc,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACd;KAAa,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;GAAA,eAAA,GAAA,kBAAA;EAAA,CAAA;CAAA;;AAMR,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAA4B,YAAA,CAAA;EAjBxC,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAwB,iBAGjB,wBAAwB;GAAM,eAChC,kBAAkB;GAAI,SAC5B;IAEL;IACA;IACA;IACA;GACH;GAAA,MACK,EACF,OAAOA,YACV;GAAA,UAAA;GAAA,QAAA,CAAA,8lBAAA;EAAA,CAAA;;;AElCL,SAAgB,iBAAiB,MAA2B,OAAoB;CAC5E,IAAI,SAAS,MACT,OAAO;CAEX,OAAO,eAAe,KAAK;AAC/B;AAOA,SAAgB,cAAc,MAA2B,OAAsB,YAAmB;CAC9F,IAAI,CAAC,SAAS,cAAc,iBAAiB,MAAM,KAAK,MAAM,MAC1D,OAAO;CAEX,OAAO;AACX;ACsBA,MAAa,uBAA+B;ACJ5C,MAAMC,cAAoB;AA6D1B,IAAa,sBAAb,MAAa,oBAAmB;CACnB;CACA;CACA;CAEA;CAEA;CACA;CAwFT,cAAA;EA/FS,KAAA,cAAuC,OAAgC,UAAU;EACjF,KAAA,iBAAkC,OAAO,eAAe;EACxD,KAAA,cAA0B,OAAO,UAAU;EAE3C,KAAA,wBAAsD,IAAI,QAAO;EAEjE,KAAA,eAA+B,WAAW,WAAW;EACrD,KAAA,cAA8B,WAAW,UAAU;EAGzC,KAAA,UAAuD,aAAa,yBAAwB,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EAG5F,KAAA,WAAwC,eACvD,iBAAiB,KAAK,KAAI,GAAI,KAAK,MAAK,CAAE,GAC7C,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;EAGkB,KAAA,SAA0B,eAAwB,KAAK,KAAI,MAAO,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;EAGvE,KAAA,aAA+C,eAC9D,KAAK,SAAQ,IAAK,OAAO,KAAK,KAAI,GACrC,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;EAGe,KAAA,OAAyC,MAA2B,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EAGzE,KAAA,QAA6B,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAG9C,KAAA,SAA0D,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,SAAA,+BAAA,CAAA;GACxG,WAAW;EAAgB,CAAA;EAIf,KAAA,UAA2D,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;GACzG,WAAW;EAAgB,CAAA;EAOf,KAAA,QAAoC,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAO9D,KAAA,OAAwD,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,OAAA,+BAAA,CAAA;GACtG,WAAW;EAAgB,CAAA;EAIf,KAAA,UAA2D,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,UAAA,+BAAA,CAAA;GACzG,WAAW;EAAgB,CAAA;EAIf,KAAA,WAA4D,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;GAC1G,WAAW;EAAgB,CAAA;EAOf,KAAA,iBAAsC,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,iBAAA,CAAA,+BAAA,CAAA,CAAA;EAGvD,KAAA,eAA2C,MAAqB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;EAIrE,KAAA,eAAoC,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;EAGrD,KAAA,qBAA0C,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,qBAAA,CAAA,+BAAA,CAAA,CAAA;EAG3D,KAAA,cAAgD,MAA2B,UAAS,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;EAOpF,KAAA,OAA8C,MAAgC,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EAGnF,KAAA,WAAmC,OAAM;EAIrD,IAAI,UAAS,GACT,aAAkB;GACd,MAAM,QAAuB,cAAc,KAAK,KAAI,GAAI,KAAK,MAAK,GAAI,KAAK,QAAO,MAAO,MAAS;GAClG,IAAI,UAAU,MAEV,QAAQ,KACJ,iBAAiB,KAAK,MAAK,EAAE,wBAAyB,MAAK,4FACW;EAGlF,CAAC;EAML,KAAK,sBACA,KACG,UAAU,SACN,KAAK,eACA,KAAiE,8BAA8B,EAAE,KAAI,CAAE,CAAC,CACxG,YAAW,CAAE,GAEtB,mBAAmB,KAAK,WAAW,CAAC,CACvC,CACA,WAAW,YAAiC,UAAe;GACxD,IAAI,cAAc,MACd,KAAK,iBAAgB;EAE7B,CAAC;CACT;CAEU,WAAW,OAAY;EAC7B,IAAI,KAAK,SAAQ,GAAI;GAEjB,MAAM,gBAAe;GACrB,MAAM,eAAc;GACpB;EACJ;EACA,MAAM,UAAkB,KAAK,eAAc,CAAE,CAAC,KAAI;EAClD,IAAI,YAAY,MAAM,CAAC,KAAK,OAAM,GAAI;GAIlC,KAAK,aAAa,OAAO;GACzB;EACJ;EACA,KAAK,iBAAgB;CACzB;CAEU,MAAM,OAAY;EACxB,IAAI,KAAK,OAAM,GAAI;GACf,KAAK,WAAW,KAAK;GACrB;EACJ;EAEA,MAAM,eAAc;EACpB,KAAK,WAAW,KAAK;CACzB;CAGU,WAAW,OAAiB;EAClC,IAAI,KAAK,OAAM,KAAM,MAAM,WAAW,KAAK,CAAC,KAAK,SAAQ,GACrD,KAAK,iBAAgB;CAE7B;CAMA,WAAW,OAAY;EACnB,IAAI,iBAAiB,iBAAiB,MAAM,QAAQ,KAAK;GACrD,MAAM,eAAc;GACpB,KAAK,YAAY,cAAc,cAA2B,GAAG,CAAC,EAAE,MAAK;EACzE;CACJ;CAEA,aAAa,SAAe;EACxB,MAAM,OAA4B;GAC9B;GACA,OAAO,KAAK,aAAY;GACxB,cAAc,KAAK,aAAY,KAAM,KAAK,aAAY;GACtD,aAAa,KAAK,mBAAkB,KAAM,KAAK,YAAW;GAC1D,MAAM,KAAK,YAAW;EACzB;EAGD,KAAK,sBAAsB,KAAK,IAAI;CACxC;CAEA,mBAAgB;EACZ,KAAK,SAAS,KAAI;EAElB,KAAK,YAAY,cAAc,cAAc,IAAI,YAAY,sBAAsB,EAAE,SAAS,KAAI,CAAE,CAAC;CACzG;CAjMS;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAmB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAnB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAmB,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,MAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,OAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,QAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,SAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,OAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,MAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,SAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,UAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,gBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,cAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,cAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,oBAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,aAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,MAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;GAAA;GAAA,SAAA,EAAA,UAAA,WAAA;GAAA,MAAA;IAAA,WAAA;KAAA,SAAA;KAAA,YAAA;KAAA,iBAAA;KAAA,iBAAA;IAAA;IAAA,YAAA;KAAA,aAAA;KAAA,8BAAA;KAAA,+BAAA;KAAA,gCAAA;KAAA,+BAAA;KAAA,4BAAA;KAAA,qBAAA;KAAA,sBAAA;KAAA,iBAAA;IAAA;IAAA,gBAAA;GAAA;GAAA,SAAA,CAAA;IAAA,cAAA;IAAA,OAAA;IAAA,WAW2D;IAAuB,aAAA;IAAA,UAAA;GAAA,CAAA;GAAA,gBAAA,CAAA;IAAA,WAAAC,KAAA;IAAA,QAAA,CAAA,aAAA,SAAA;GAAA,GAAA;IAAA,WAAA,GAAA;IAAA,QAAA,CAAA,UAAA,QAAA;GAAA,CAAA;GAAA,UAAA;GAAA,UC/GlH;GA4BA,QAAA,CAAA,m4GAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MDyCQ;KAAe,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACf;KAAc,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACd;KAAa,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACb;KAAY,UAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACZ;KAAgB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;KAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAChB;KAAU,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;GAAA,eAAA,GAAA,kBAAA;EAAA,CAAA;CAAA;;AA0BL,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAmB,YAAA,CAAA;EAvC/B,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAc,iBAGP,wBAAwB;GAAM,eAChC,kBAAkB;GAAI,SAC5B;IAEL;IACA;IACA;IACA;IACA;IACA;GACH;GAAA,gBACe,CACZ;IACI,WAAW;IACX,QAAQ,CAAC,oBAAoB;GAChC,GACD;IAAE,WAAW;IAAmB,QAAQ,CAAC,QAAQ;GAAC,CACrD;GAAA,MACK;IACF,OAAOD;IACP,eAAe;IACf,gCAAgC;IAChC,iCAAiC;IACjC,kCAAkC;IAClC,iCAAiC;IACjC,8BAA8B;IAC9B,uBAAuB;IACvB,wBAAwB;IACxB,mBAAmB;IACnB,WAAW;IACX,cAAc;IACd,mBAAmB;IACnB,mBAAmB;GACtB;GAAA,UAAA;GAAA,QAAA,CAAA,m4GAAA;EAAA,CAAA;CAasF,CAAA;CAAA,sBAAA,CAAA;CAAA,gBAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAAA,uBAAuB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,QAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,gBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,oBAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,aAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,UAAA;EAAA,CAAA;CAAA;AAAA,CAAA;AEjFlH,MAAM,YAAoB;AAE1B,MAAM,qBAAwC;CAC1C,SAAS;CACT,SAAS;CACT,UAAU;CACV,UAAU;CACV,SAAS;AACZ;AACD,MAAM,qBAAwC;CAC1C,SAAS;CACT,SAAS;CACT,UAAU;CACV,UAAU;CACV,SAAS;AACZ;AACD,MAAM,uBAA0C;CAC5C,SAAS;CACT,SAAS;CACT,UAAU;CACV,UAAU;CACV,SAAS;AACZ;AACD,MAAM,uBAA0C;CAC5C,SAAS;CACT,SAAS;CACT,UAAU;CACV,UAAU;CACV,SAAS;AACZ;AA4CD,IAAa,kBAAb,MAAa,gBAAe;CArB5B,cAAA;EAsBa,KAAA,QAAiC,OAAgC,UAAU;EAC3E,KAAA,eAA+B,WAAW,WAAW;EAG9D,KAAA,cAAyD;EAEtC,KAAA,UAAuC,UAAU,SAAS,qBAAoB,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EAC9E,KAAA,UAAoC,UAAU,SAAS,kBAAiB,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;EAExE,KAAA,SAAkC,OAAgB,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;EAGxD,KAAA,gBAA0C,OAAiB,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,gBAAA,CAAA,+BAAA,CAAA,CAAA;EAG9D,KAAA,eAAiC,eAAwB;GACxE,MAAM,MAAyB,KAAK,WAAU;GAC9C,OAAO,CAAC,GAAI,MAAM,QAAQ,GAAG,IAAI,MAAM,IAAI,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO,GAAI,GAAG,KAAK,cAAa,CAAE;EACrG,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,eAAA,CAAA,+BAAA,CAAA,CAAA;EAEiB,KAAA,WAA2B,eAAuB,KAAK,UAAS,KAAM,KAAK,aAAY,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;EAG1F,KAAA,mBAAgD,eAC/D,KAAK,MAAK,MAAO,QACX;GAAC;GAAoB;GAAoB;GAAsB;EAAoB,IACnF;GAAC;GAAsB;GAAsB;GAAoB;EAAkB,GAC5F,GAAA,YAAA,CAAA,EAAA,WAAA,mBAAA,CAAA,+BAAA,CAAA,CAAA;EAGe,KAAA,OAAkC,MAAoB,cAAa,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EAInE,KAAA,YAAiC,MAAc,IAAG,GAAA,YAAA,CAAA,EAAA,WAAA,YAAA,CAAA,+BAAA,CAAA,CAAA;EAGlD,KAAA,QAAoC,MAAqB,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;EAM/D,KAAA,aAA6C,MAAyB,CAAA,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;EAGzE,KAAA,cAA+C,MAA0B,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;EAG9E,KAAA,OAAkC,MAAoB,MAAK,GAAA,YAAA,CAAA,EAAA,WAAA,OAAA,CAAA,+BAAA,CAAA,CAAA;EAG3D,KAAA,WAA4D,MAA6B,OAAK;GAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;GAC1G,WAAW;EAAgB,CAAA;EAIf,KAAA,eAA0C,OAAM;CA8EnE;CAvIY;CACA;CAGT;CAuDU,OAAO,OAAiB;EAE9B,MAAM,gBAAe;EACrB,KAAK,SAAS,CAAC,KAAK,OAAM,CAAE;CAChC;CAEU,QAAK;EACX,KAAK,SAAS,KAAK;CACvB;CAOU,WAAQ;EACd,MAAM,OAAoB,KAAK,QAAO,CAAE,CAAC,WAAW;EAKpD,gBAAgB,MAAM,KAAK,QAAO,CAAE,CAAC,WAAW,aAAa;EAG7D,MAAM,aADuB,MAAM,KAAK,KAAK,iBAA8B,qBAAmB,CACtD,CAAA,CAAM,KAAK,UAA0C;GACzF,UAAU,KAAK,aAAa,eAAe,MAAM;GACjD,aAAmB,KAAK,MAAK;EAChC,EAAC;EAEF,KAAK,cAAc,IAAI,gBAAmC,UAAU,CAAC,CAAC,SAAQ,CAAE,CAAC,eAAc;EAC/F,KAAK,YAAY,mBAAkB;CACvC;CAGU,WAAQ;EACd,KAAK,MAAK;EACV,KAAK,cAAa;CACtB;CAEU,UAAU,OAAoB;EACpC,IAAI,MAAM,QAAQ,UAAU;GACxB,KAAK,MAAK;GACV,KAAK,cAAa;GAClB;EACJ;EAEA,IAAI,MAAM,QAAQ,OAAO;GAKrB,KAAK,MAAK;GACV,KAAK,cAAa;GAClB;EACJ;EAEA,KAAK,aAAa,UAAU,KAAK;CACrC;CAEA,gBAAa;EACT,KAAK,QAAO,CAAE,CAAC,WAAW,cAAc,cAAc,QAAQ,CAAC,EAAE,MAAK;CAC1E;CAEA,SAAS,MAAa;EAClB,IAAI,SAAS,KAAK,OAAM,GAAI;GACxB,IAAI,CAAC,MAAM;IACP,KAAK,aAAa,QAAO;IACzB,KAAK,cAAc;GACvB;GACA,IAAI,MACA,KAAK,cAAc,IAAI,wBAAwB,KAAK,MAAM,aAAa,CAAC;GAE5E,KAAK,OAAO,IAAI,IAAI;GACpB,KAAK,aAAa,KAAK,IAAI;EAC/B;CACJ;CAvIS;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAe,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAf;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAe,cAAA;GAAA,UAAA;GAAA,QAAA;IAAA,MAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,WAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,OAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,YAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,aAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,MAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;IAAA,UAAA;KAAA,mBAAA;KAAA,YAAA;KAAA,UAAA;KAAA,YAAA;KAAA,mBAAA;IAAA;GAAA;GAAA,SAAA,EAAA,cAAA,eAAA;GAAA,MAAA;IAAA,YAAA,EAAA,uBAAA,WAAA;IAAA,gBAAA;GAAA;GAAA,aAAA,CAAA;IAAA,cAAA;IAAA,OAAA;IAAA,WAOqD;IAAmB,aAAA;IAAA,UAAA;GAAA,GAAA;IAAA,cAAA;IAAA,OAAA;IAAA,WACtB;IAAgB,aAAA;IAAA,UAAA;GAAA,CAAA;GAAA,UAAA;GAAA,UC/G9F;GA8BA,QAAA,CAAA,68BAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MD4DQ;IAAa;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,UAAA,CAAA,qBAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAAA,GAAA;KAAA,UAAA;KAAA,UAAA,CAAA,kBAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MAGb;KAAqB,UAAA;KAAA,QAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;KAAA;KAAA,SAAA,CAAA,SAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACrB;KAAc,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACd;KAAa,UAAA;KAAA,QAAA,CAAA,OAAA;IAAA;IAAA;KAAA,MAAA;KAAA,MACb;KAAY,UAAA;IAAA;GAAA;GAAA,iBAAA,GAAA,wBAAA;GAAA,eAAA,GAAA,kBAAA;EAAA,CAAA;CAAA;;AAOP,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAe,YAAA,CAAA;EArB3B,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAS,iBAGF,wBAAwB;GAAM,eAChC,kBAAkB;GAAI,SAC5B;IAEL;IAGA;IACA;IACA;IACA;GACH;GAAA,MACK;IACF,OAAO;IACP,yBAAyB;GAC5B;GAAA,UAAA;GAAA,QAAA,CAAA,68BAAA;EAAA,CAAA;CAS4E,CAAA;CAAA,gBAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBAAA,mBAAmB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,SAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,GAAA,iBACtB,gBAAgB,GAAA,EAAA,UAAA,KAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,WAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,OAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,YAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,aAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,MAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,UAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA;IAAA,UAAA;IAAA,OAAA;IAAA,UAAA;GAAA,CAAA;EAAA,CAAA;EAAA,cAAA,CAAA;GAAA,MAAA,GAAA;GAAA,MAAA,CAAA,cAAA;EAAA,CAAA;CAAA;AAAA,CAAA"}