@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rt-tools-ui-kit-v2-tree.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/tree/rt-tree.directives.ts","../../../projects/ui-kit-v2/src/lib/components/tree/rt-tree.logic.ts","../../../projects/ui-kit-v2/src/lib/components/tree/rt-tree.component.ts","../../../projects/ui-kit-v2/src/lib/components/tree/rt-tree.component.html"],"sourcesContent":["import { inject, Directive, TemplateRef } from '@angular/core';\n\nimport { IRtTree } from './rt-tree.model';\n\n/**\n * Разметка приложения в конце каждой строки `rt-tree`. Узел строки приходит в контексте как\n * `$implicit`: дерево не заводит вход под каждый такой элемент.\n */\n@Directive({ selector: 'ng-template[rtTreeNodeEnd]' })\nexport class RtTreeNodeEndDirective<TValue> {\n public readonly templateRef: TemplateRef<IRtTree.NodeContext<TValue>> = inject<TemplateRef<IRtTree.NodeContext<TValue>>>(TemplateRef);\n}\n\n/**\n * Разметка приложения под подписью строки, в одной линии с метками узла. Узел строки приходит в\n * контексте как `$implicit`.\n */\n@Directive({ selector: 'ng-template[rtTreeNodeMeta]' })\nexport class RtTreeNodeMetaDirective<TValue> {\n public readonly templateRef: TemplateRef<IRtTree.NodeContext<TValue>> = inject<TemplateRef<IRtTree.NodeContext<TValue>>>(TemplateRef);\n}\n","import { rtTreeBranchState, rtTreeLeaves } from '@rt-tools/ui-kit-v2/select';\nimport { splitTitleByWords } from '@rt-tools/ui-kit-v2/side-menu';\nimport { IRtSideMenu } from '@rt-tools/ui-kit-v2/side-menu';\nimport { IRtTree } from './rt-tree.model';\n\n/**\n * Расчёт выбора `rt-tree` — чистые функции над неизменяемыми узлами.\n *\n * Строки, листья и отметки ветвей считает модуль дерева выбора из списка: здесь только то, чего у\n * выбора из списка нет — режим отметок, выключенный каскад и «выбрать всё». Узлы не меняются\n * никогда: каждая функция отвечает новым массивом выбора.\n */\n\ntype TNode<TValue> = IRtTree.Node<TValue>;\n\nfunction isBranch<TValue>(node: TNode<TValue>): boolean {\n return (node.children ?? []).length > 0;\n}\n\nfunction without<TValue>(value: ReadonlyArray<TValue>, drop: ReadonlyArray<TValue>): ReadonlyArray<TValue> {\n return value.filter((item: TValue): boolean => !drop.includes(item));\n}\n\nfunction withAll<TValue>(value: ReadonlyArray<TValue>, add: ReadonlyArray<TValue>): ReadonlyArray<TValue> {\n return [...value, ...add.filter((item: TValue): boolean => !value.includes(item))];\n}\n\n/**\n * Отметка строки. В каскаде ветка отмечена по своим листьям; без каскада и у листа — по тому,\n * лежит ли в выборе сам узел.\n */\nexport function rtTreeMark<TValue>(node: TNode<TValue>, value: ReadonlyArray<TValue>, cascade: boolean): IRtTree.Mark {\n if (cascade && isBranch(node)) {\n return rtTreeBranchState(node, value);\n }\n return value.includes(node.value) ? 'all' : 'none';\n}\n\n/**\n * Выбор после клика по узлу. Выключенный узел выбор не меняет. Одиночный режим держит один узел и\n * не снимает его повторным кликом. В каскаде ветка добавляет свои включённые листья или снимает\n * их, когда выбраны все; выключенные листья остаются как были.\n */\nexport function rtTreeChoose<TValue>(\n node: TNode<TValue>,\n value: ReadonlyArray<TValue>,\n mode: IRtTree.Mode,\n cascade: boolean\n): ReadonlyArray<TValue> {\n if (node.disabled || mode === 'none') {\n return value;\n }\n if (mode === 'single') {\n return [node.value];\n }\n if (cascade && isBranch(node)) {\n const leaves: ReadonlyArray<TValue> = rtTreeLeaves(node);\n return rtTreeBranchState(node, value) === 'all' ? without(value, leaves) : withAll(value, leaves);\n }\n return value.includes(node.value) ? without(value, [node.value]) : withAll(value, [node.value]);\n}\n\n/**\n * Включённые листья видимых строк. Раскрытая ветка отдаёт листья своими строками ниже, свёрнутая —\n * всеми листьями под собой: они видимы через неё.\n */\nexport function rtTreeVisibleLeaves<TValue>(rows: ReadonlyArray<IRtTree.Row<TValue>>): ReadonlyArray<TValue> {\n return rows.flatMap((row: IRtTree.Row<TValue>): ReadonlyArray<TValue> => (row.branch && row.open ? [] : rtTreeLeaves(row.option)));\n}\n\n/** Отметка «выбрать всё» по включённым листьям видимых строк. */\nexport function rtTreeSelectAllMark<TValue>(rows: ReadonlyArray<IRtTree.Row<TValue>>, value: ReadonlyArray<TValue>): IRtTree.Mark {\n const leaves: ReadonlyArray<TValue> = rtTreeVisibleLeaves(rows);\n const count: number = leaves.filter((leaf: TValue): boolean => value.includes(leaf)).length;\n if (count === 0) {\n return 'none';\n }\n return count === leaves.length ? 'all' : 'some';\n}\n\n/**\n * Выбор после клика по «выбрать всё»: включённые листья видимых строк добавляются, а когда выбраны\n * все — снимаются. Выключенные листья `rtTreeLeaves` не отдаёт, поэтому их состояние не меняется.\n */\nexport function rtTreeSelectAll<TValue>(rows: ReadonlyArray<IRtTree.Row<TValue>>, value: ReadonlyArray<TValue>): ReadonlyArray<TValue> {\n const leaves: ReadonlyArray<TValue> = rtTreeVisibleLeaves(rows);\n return rtTreeSelectAllMark(rows, value) === 'all' ? without(value, leaves) : withAll(value, leaves);\n}\n\n/**\n * Подпись, описание и метки узла, разрезанные по каждому слову запроса тем же резом, что у поиска\n * меню: приложение делит поиск по пробелам, и найденное слово видно там, где оно нашлось.\n */\nexport function rtTreeLabelParts<TValue>(node: TNode<TValue>, term: string): IRtTree.LabelParts {\n return {\n label: splitTitleByWords(node.label, term),\n description: splitTitleByWords(node.description ?? '', term),\n badges: (node.badges ?? []).map((badge: IRtTree.Badge): ReadonlyArray<IRtSideMenu.TitlePart> =>\n splitTitleByWords(badge.text, term)\n ),\n };\n}\n\n/** Значения узла и всех его потомков. */\nfunction covered<TValue>(node: TNode<TValue>): ReadonlyArray<TValue> {\n return [node.value, ...(node.children ?? []).flatMap((child: TNode<TValue>): ReadonlyArray<TValue> => covered(child))];\n}\n\n/** Значения выключенных узлов дерева: их состояние не меняет ни одно действие. */\nfunction disabledValues<TValue>(nodes: ReadonlyArray<TNode<TValue>>): ReadonlyArray<TValue> {\n return nodes.flatMap((node: TNode<TValue>): ReadonlyArray<TValue> => [\n ...(node.disabled ? [node.value] : []),\n ...disabledValues(node.children ?? []),\n ]);\n}\n\n/** Что остаётся от выбора перед кликом без Ctrl и Cmd: то, что покрывает сам узел, и выключенные узлы. */\nexport function rtTreeAloneBase<TValue>(\n nodes: ReadonlyArray<TNode<TValue>>,\n node: TNode<TValue>,\n value: ReadonlyArray<TValue>\n): ReadonlyArray<TValue> {\n const keep: ReadonlyArray<TValue> = [...covered(node), ...disabledValues(nodes)];\n return value.filter((item: TValue): boolean => keep.includes(item));\n}\n\n/**\n * Выбор после клика без Ctrl и Cmd в режиме, где клик выбирает один узел. Из выбора остаётся только\n * то, что покрывает сам узел, и выключенные узлы; дальше клик работает как обычно — поэтому\n * повторный клик по единственному выбранному снимает его.\n */\nexport function rtTreeChooseAlone<TValue>(\n nodes: ReadonlyArray<TNode<TValue>>,\n node: TNode<TValue>,\n value: ReadonlyArray<TValue>,\n cascade: boolean\n): ReadonlyArray<TValue> {\n if (node.disabled) {\n return value;\n }\n return rtTreeChoose(node, rtTreeAloneBase(nodes, node, value), 'multiple', cascade);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n computed,\n contentChild,\n inject,\n input,\n model,\n output,\n signal,\n ChangeDetectionStrategy,\n Component,\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n TemplateRef,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { IRtIcon, RT_KIT_LABELS, TRtKitLabelMap } from '@rt-tools/ui-kit-v2/core';\nimport { RtCheckboxComponent } from '@rt-tools/ui-kit-v2/checkbox';\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { RtRadioButtonComponent } from '@rt-tools/ui-kit-v2/radio-button';\nimport { RtTagComponent } from '@rt-tools/ui-kit-v2/tag';\nimport { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';\nimport { rtTreeOpenFor, rtTreeRows, rtTreeSideKey, rtTreeToggle } from '@rt-tools/ui-kit-v2/select';\nimport { IRtSelect } from '@rt-tools/ui-kit-v2/select';\nimport { RtTreeNodeEndDirective, RtTreeNodeMetaDirective } from './rt-tree.directives';\nimport { rtTreeChoose, rtTreeChooseAlone, rtTreeLabelParts, rtTreeMark, rtTreeSelectAll, rtTreeSelectAllMark } from './rt-tree.logic';\nimport { IRtTree } from './rt-tree.model';\n\nconst BEM_BLOCK: string = 'rt-tree';\n\n/** Видимая строка с тем, что разметке нужно о ней знать. */\ninterface IRtTreeView<TValue> {\n readonly row: IRtTree.Row<TValue>;\n readonly mark: IRtTree.Mark;\n /** Рисуется ли у строки флажок или радио: у групп без отметок его нет. */\n readonly marked: boolean;\n /** Радио вместо флажка. */\n readonly radio: boolean;\n /** Строка выключена: свой `disabled` у узла или выключено всё дерево. */\n readonly disabled: boolean;\n /** Число выбранного под группой в конце строки; `null` — числа нет. */\n readonly count: number | null;\n readonly parts: IRtTree.LabelParts;\n readonly highlighted: boolean;\n}\n\n/**\n * Дерево выбора, стоящее на странице само по себе.\n *\n * Строки, листья, отметки ветвей, отбор по слову и боковые стрелки считает модуль дерева выбора\n * из списка — тот же, что у `rt-select` и `rt-multiselect`. Выбор живёт в `value`; узлы не\n * меняются. Раскрытые ветки и подсвеченная строка — состояние самого дерева.\n *\n * Клавиатура идёт через `handleKeydown`: его зовёт и само дерево с фокуса на себе, и приложение\n * со своего поля поиска. Ответ — взята ли клавиша: чужую дерево не трогает.\n */\n@Component({\n selector: 'rt-tree',\n templateUrl: './rt-tree.component.html',\n styleUrl: './rt-tree.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n NgTemplateOutlet,\n FormsModule,\n RtCheckboxComponent,\n RtIconComponent,\n RtRadioButtonComponent,\n RtTagComponent,\n RtTooltipDirective,\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n host: {\n class: BEM_BLOCK,\n role: 'tree',\n '[attr.tabindex]': 'disabled() ? -1 : 0',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-multiselectable]': \"mode() === 'multiple'\",\n '(keydown)': 'handleKeydown($event)',\n },\n})\nexport class RtTreeComponent<TValue> {\n readonly #open: WritableSignal<ReadonlySet<TValue> | null> = signal<ReadonlySet<TValue> | null>(null);\n readonly #highlighted: WritableSignal<TValue | null> = signal<TValue | null>(null);\n\n protected readonly t: Signal<TRtKitLabelMap> = inject(RT_KIT_LABELS);\n\n protected readonly nodeEnd: Signal<RtTreeNodeEndDirective<TValue> | undefined> = contentChild(RtTreeNodeEndDirective);\n\n protected readonly nodeMeta: Signal<RtTreeNodeMetaDirective<TValue> | undefined> = contentChild(RtTreeNodeMetaDirective);\n\n /** Разметка в конце строки: вход раньше директивы — обёртка вроде селектора отдаёт её входом. */\n protected readonly endTemplate: Signal<TemplateRef<IRtTree.NodeContext<TValue>> | null> = computed(\n (): TemplateRef<IRtTree.NodeContext<TValue>> | null => this.nodeEndTemplate() ?? this.nodeEnd()?.templateRef ?? null\n );\n\n /** Разметка под подписью: вход раньше директивы. */\n protected readonly metaTemplate: Signal<TemplateRef<IRtTree.NodeContext<TValue>> | null> = computed(\n (): TemplateRef<IRtTree.NodeContext<TValue>> | null => this.nodeMetaTemplate() ?? this.nodeMeta()?.templateRef ?? null\n );\n\n /** Раскрытые ветки: до первого действия человека — ветки над выбранным. */\n protected readonly openBranches: Signal<ReadonlySet<TValue>> = computed(\n (): ReadonlySet<TValue> => this.#open() ?? rtTreeOpenFor(this.nodes(), this.value())\n );\n\n protected readonly rows: Signal<ReadonlyArray<IRtTree.Row<TValue>>> = computed((): ReadonlyArray<IRtTree.Row<TValue>> =>\n rtTreeRows(this.nodes(), this.openBranches(), this.filter() ? this.searchTerm() : '')\n );\n\n protected readonly views: Signal<ReadonlyArray<IRtTreeView<TValue>>> = computed((): ReadonlyArray<IRtTreeView<TValue>> => {\n const value: ReadonlyArray<TValue> = this.value();\n const cascade: boolean = this.cascade();\n const term: string = this.searchTerm();\n const highlighted: TValue | null = this.#highlighted();\n const mode: IRtTree.Mode = this.mode();\n const branchMarks: boolean = this.branchMarks();\n const treeDisabled: boolean = this.disabled();\n return this.rows().map((row: IRtTree.Row<TValue>): IRtTreeView<TValue> => {\n const marked: boolean = mode !== 'none' && (branchMarks || !row.branch);\n const state: IRtTree.RowState = this.rowState(row, value, cascade);\n return {\n row,\n marked,\n mark: state.mark,\n radio: state.radio,\n disabled: treeDisabled || !!row.option.disabled,\n count: marked ? null : state.count,\n parts: rtTreeLabelParts(row.option, term),\n highlighted: row.option.value === highlighted,\n };\n });\n });\n\n protected readonly selectAllMark: Signal<IRtTree.Mark> = computed((): IRtTree.Mark => this.selectAllMarkOf(this.rows(), this.value()));\n\n protected readonly isSelectAllShown: Signal<boolean> = computed(\n (): boolean => this.showSelectAll() && this.cascade() && this.mode() === 'multiple' && this.rows().length > 0\n );\n\n /** Отметка «выбрать всё» встаёт над отметкой первой строки; у строки без отметки — над стрелкой. */\n protected readonly isSelectAllUnderMark: Signal<boolean> = computed((): boolean => this.views()[0]?.marked ?? false);\n\n /** Первая строка — лист: там, где у листа нет места под стрелку, его нет и у «выбрать всё». */\n protected readonly isSelectAllOverLeaf: Signal<boolean> = computed((): boolean => this.views()[0]?.row.branch === false);\n\n protected readonly emptyText: Signal<string> = computed((): string =>\n this.nodes().length > 0 ? this.t().uiNothingFound : this.t().uiNoOptions\n );\n\n public readonly nodes: InputSignal<ReadonlyArray<IRtTree.Node<TValue>>> = input.required<ReadonlyArray<IRtTree.Node<TValue>>>();\n public readonly value: ModelSignal<ReadonlyArray<TValue>> = model<ReadonlyArray<TValue>>([]);\n public readonly mode: InputSignal<IRtTree.Mode> = input<IRtTree.Mode>('multiple');\n public readonly cascade: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, { transform: booleanAttribute });\n public readonly searchTerm: InputSignal<string> = input<string>('');\n public readonly showSelectAll: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** Отметки у групп. Без них клик, пробел и Enter по группе раскрывают и сворачивают её. */\n public readonly branchMarks: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n\n /** Клик без Ctrl и Cmd выбирает узел один; с Ctrl или Cmd добавляет к выбору. Только для флажков. */\n public readonly exclusive: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n /** Скрывает ли слово поиска строки. Без отбора строки отбирает приложение, а слово только отмечено. */\n public readonly filter: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n\n /** Выключенное дерево не меняет выбор ни кликом, ни клавишей, ни «выбрать всё»; ветки раскрываются стрелкой. */\n /** Значок кита над подписью пустого дерева. Без него пустое дерево — одна подпись. */\n public readonly emptyIcon: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n /**\n * Разметка в конце каждой строки, отданная входом. Нужна компоненту, который оборачивает дерево и\n * не может положить в него директиву `rtTreeNodeEnd`; вход сильнее директивы.\n */\n public readonly nodeEndTemplate: InputSignal<TemplateRef<IRtTree.NodeContext<TValue>> | null> = input<TemplateRef<\n IRtTree.NodeContext<TValue>\n > | null>(null);\n\n /** Разметка под подписью каждой строки, отданная входом; вход сильнее директивы `rtTreeNodeMeta`. */\n public readonly nodeMetaTemplate: InputSignal<TemplateRef<IRtTree.NodeContext<TValue>> | null> = input<TemplateRef<\n IRtTree.NodeContext<TValue>\n > | null>(null);\n\n public readonly disabled: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n\n public readonly picked: OutputEmitterRef<IRtTree.Node<TValue>> = output<IRtTree.Node<TValue>>();\n\n /**\n * Клавиша для дерева. Отвечает, взята ли она: не взятая идёт дальше нетронутой, поэтому\n * приложение может отдавать сюда каждую клавишу своего поля поиска.\n */\n public handleKeydown(event: KeyboardEvent): boolean {\n if (this.disabled()) {\n return false;\n }\n const taken: boolean = this.#takeKey(event.key, event.ctrlKey || event.metaKey);\n if (taken) {\n event.preventDefault();\n event.stopPropagation();\n }\n return taken;\n }\n\n public expandAll(): void {\n const all: Set<TValue> = new Set<TValue>();\n this.#collectBranches(this.nodes(), all);\n this.#open.set(all);\n }\n\n public collapseAll(): void {\n this.#open.set(new Set<TValue>());\n }\n\n public clearHighlight(): void {\n this.#highlighted.set(null);\n }\n\n protected onRowClick(row: IRtTree.Row<TValue>, event: MouseEvent): void {\n if (this.disabled()) {\n return;\n }\n this.#highlighted.set(row.option.value);\n if (row.option.disabled) {\n return;\n }\n if (this.#opensOnly(row)) {\n this.#toggleOrPick(row);\n return;\n }\n this.#choose(this.nextChoice(row.option, event.ctrlKey || event.metaKey));\n }\n\n protected onToggleClick(event: Event, value: TValue): void {\n event.stopPropagation();\n this.#toggle(value);\n }\n\n protected onSelectAll(): void {\n if (this.disabled()) {\n return;\n }\n this.#choose(this.selectAllChoice(this.rows(), this.value()));\n }\n\n /**\n * Отметка строки, её вид и число выбранного под ней. Дерево числа не рисует; наследник со своими\n * правилами выбора считает всё это по ним.\n */\n protected rowState(row: IRtTree.Row<TValue>, value: ReadonlyArray<TValue>, cascade: boolean): IRtTree.RowState {\n return { mark: rtTreeMark(row.option, value, cascade), radio: this.mode() === 'single', count: null };\n }\n\n protected selectAllMarkOf(rows: ReadonlyArray<IRtTree.Row<TValue>>, value: ReadonlyArray<TValue>): IRtTree.Mark {\n return rtTreeSelectAllMark(rows, value);\n }\n\n protected selectAllChoice(rows: ReadonlyArray<IRtTree.Row<TValue>>, value: ReadonlyArray<TValue>): ReadonlyArray<TValue> {\n return rtTreeSelectAll(rows, value);\n }\n\n /** Выбор после действия над узлом: в исключающем режиме без Ctrl и Cmd узел остаётся один. */\n protected nextChoice(node: IRtTree.Node<TValue>, additive: boolean): ReadonlyArray<TValue> {\n if (this.exclusive() && this.mode() === 'multiple' && !additive) {\n return rtTreeChooseAlone(this.nodes(), node, this.value(), this.cascade());\n }\n return rtTreeChoose(node, this.value(), this.mode(), this.cascade());\n }\n\n /** Строка, клик по которой ничего не отмечает: режим без отметок или группа без флажка. */\n #opensOnly(row: IRtTree.Row<TValue>): boolean {\n return this.mode() === 'none' || (row.branch && !this.branchMarks());\n }\n\n #toggleOrPick(row: IRtTree.Row<TValue>): void {\n if (row.branch) {\n this.#toggle(row.option.value);\n } else {\n this.picked.emit(row.option);\n }\n }\n\n #collectBranches(list: ReadonlyArray<IRtTree.Node<TValue>>, into: Set<TValue>): void {\n list.forEach((node: IRtTree.Node<TValue>): void => {\n if ((node.children ?? []).length > 0) {\n into.add(node.value);\n this.#collectBranches(node.children ?? [], into);\n }\n });\n }\n\n /**\n * Меняет выбор, не трогая раскрытие. Пока ветки никто не раскрывал руками, раскрытие считается из\n * выбора, и без этой фиксации отметка ветки сворачивала или раскрывала её саму.\n */\n #choose(next: ReadonlyArray<TValue>): void {\n this.#open.set(this.openBranches());\n this.value.set(next);\n }\n\n #toggle(value: TValue): void {\n this.#open.set(rtTreeToggle(this.openBranches(), value));\n }\n\n #highlightedIndex(): number {\n const highlighted: TValue | null = this.#highlighted();\n return this.rows().findIndex((row: IRtTree.Row<TValue>): boolean => row.option.value === highlighted);\n }\n\n #takeKey(key: string, additive: boolean): boolean {\n const rows: ReadonlyArray<IRtTree.Row<TValue>> = this.rows();\n const index: number = this.#highlightedIndex();\n if (key === 'ArrowDown' || key === 'ArrowUp') {\n return this.#move(rows, index, key === 'ArrowDown' ? 1 : -1);\n }\n if (index < 0) {\n return false;\n }\n if (key === 'ArrowRight' || key === 'ArrowLeft') {\n this.#side(rows, index, key);\n return true;\n }\n if (key === ' ') {\n this.#space(rows[index], additive);\n return true;\n }\n if (key === 'Enter') {\n this.#enter(rows[index], additive);\n return true;\n }\n return false;\n }\n\n #move(rows: ReadonlyArray<IRtTree.Row<TValue>>, index: number, step: number): boolean {\n if (rows.length === 0) {\n return false;\n }\n const next: number = index < 0 ? 0 : Math.min(rows.length - 1, Math.max(0, index + step));\n this.#highlighted.set(rows[next].option.value);\n return true;\n }\n\n #side(rows: ReadonlyArray<IRtTree.Row<TValue>>, index: number, key: string): void {\n const answer: IRtSelect.SideKeyAnswer<TValue> = rtTreeSideKey(rows, index, key);\n if (answer.toggle !== null) {\n this.#toggle(answer.toggle);\n }\n this.#highlighted.set(rows[answer.index].option.value);\n }\n\n #space(row: IRtTree.Row<TValue>, additive: boolean): void {\n if (this.#opensOnly(row) && row.branch) {\n this.#toggle(row.option.value);\n return;\n }\n if (!row.option.disabled && this.mode() !== 'none') {\n this.#choose(this.nextChoice(row.option, additive));\n }\n }\n\n #enter(row: IRtTree.Row<TValue>, additive: boolean): void {\n if (this.#opensOnly(row) && row.branch) {\n this.#toggle(row.option.value);\n return;\n }\n if (row.option.disabled) {\n return;\n }\n if (this.mode() !== 'none') {\n this.#choose(this.nextChoice(row.option, additive));\n }\n this.picked.emit(row.option);\n }\n}\n","<ng-container rtBlock=\"rt-tree\">\n <!--\n Строки выбираются мышью через (click); клавиатура — на самом дереве (handleKeydown), строки\n по отдельности фокус не берут: подсветка — третье состояние рядом с фокусом и выбором.\n -->\n <!-- eslint-disable @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\n @if (isSelectAllShown()) {\n <div\n rtElem=\"select-all\"\n qa-dataid=\"tree-select-all\"\n role=\"presentation\"\n [rtMod]=\"{ disabled: disabled(), 'over-leaf': isSelectAllOverLeaf() }\"\n (click)=\"onSelectAll()\">\n @if (isSelectAllUnderMark()) {\n <span rtElem=\"toggle-space\"></span>\n }\n <rt-checkbox\n rtElem=\"check\"\n inert\n [disabled]=\"disabled()\"\n [indeterminate]=\"selectAllMark() === 'some'\"\n [ngModel]=\"selectAllMark() === 'all'\"\n [ngModelOptions]=\"{ standalone: true }\" />\n <span rtElem=\"label\">{{ t().uiSelectAll }}</span>\n </div>\n }\n\n @for (view of views(); track view.row.option.value) {\n <div\n rtElem=\"row\"\n qa-dataid=\"tree-row\"\n role=\"treeitem\"\n [attr.data-value]=\"view.row.option.value\"\n [attr.aria-level]=\"view.row.level + 1\"\n [attr.aria-expanded]=\"view.row.branch ? view.row.open : null\"\n [attr.aria-selected]=\"view.marked ? view.mark === 'all' : null\"\n [attr.aria-disabled]=\"view.disabled\"\n [style.--rt-tree-level]=\"view.row.level\"\n [rtMod]=\"{ highlighted: view.highlighted, disabled: view.disabled, chosen: view.mark === 'all' }\"\n (click)=\"onRowClick(view.row, $event)\">\n @if (view.row.branch) {\n <button\n rtElem=\"toggle\"\n qa-dataid=\"tree-row-toggle\"\n type=\"button\"\n tabindex=\"-1\"\n [attr.aria-label]=\"view.row.open ? t().uiCollapse : t().uiExpand\"\n (click)=\"onToggleClick($event, view.row.option.value)\">\n <rt-icon size=\"sm\" color=\"muted\" [name]=\"view.row.open ? 'chevron-down' : 'chevron-right'\" />\n </button>\n } @else {\n <span rtElem=\"toggle-space\"></span>\n }\n\n @if (view.marked && !view.radio) {\n <rt-checkbox\n rtElem=\"check\"\n qa-dataid=\"tree-row-checkbox\"\n inert\n [disabled]=\"view.disabled\"\n [indeterminate]=\"view.mark === 'some'\"\n [ngModel]=\"view.mark === 'all'\"\n [ngModelOptions]=\"{ standalone: true }\" />\n } @else if (view.marked) {\n <rt-radio-button\n rtElem=\"check\"\n qa-dataid=\"tree-row-radio\"\n inert\n [value]=\"view.row.option.value\"\n [checked]=\"view.mark === 'all'\"\n [disabled]=\"view.disabled\" />\n }\n\n <span rtElem=\"text\">\n <span rtElem=\"label\" qa-dataid=\"tree-row-label\" rtTooltipWhenTruncated [rtTooltip]=\"view.row.option.label\">\n @for (part of view.parts.label; track $index) {\n <span rtElem=\"part\" [rtMod]=\"{ match: part.matched }\">{{ part.text }}</span>\n }\n </span>\n @if (view.parts.description.length > 0) {\n <span\n rtElem=\"description\"\n qa-dataid=\"tree-row-description\"\n rtTooltipWhenTruncated\n [rtTooltip]=\"view.row.option.description\">\n @for (part of view.parts.description; track $index) {\n <span rtElem=\"part\" [rtMod]=\"{ match: part.matched }\">{{ part.text }}</span>\n }\n </span>\n }\n @if (view.row.option.badges?.length || metaTemplate()) {\n <span rtElem=\"meta\" qa-dataid=\"tree-row-meta\">\n @for (badge of view.row.option.badges; track $index) {\n <rt-tag size=\"sm\" [value]=\"badge.text\" [severity]=\"badge.severity ?? 'neutral'\" [highlight]=\"searchTerm()\" />\n }\n @if (metaTemplate(); as meta) {\n <ng-container [ngTemplateOutlet]=\"meta\" [ngTemplateOutletContext]=\"{ $implicit: view.row.option }\" />\n }\n </span>\n }\n </span>\n\n @if (view.count) {\n <span rtElem=\"count\" qa-dataid=\"tree-row-count\">{{ view.count }}</span>\n }\n\n @if (endTemplate(); as end) {\n <span rtElem=\"end\" qa-dataid=\"tree-row-end\">\n <ng-container [ngTemplateOutlet]=\"end\" [ngTemplateOutletContext]=\"{ $implicit: view.row.option }\" />\n </span>\n }\n </div>\n } @empty {\n <div rtElem=\"empty\" qa-dataid=\"tree-empty\" [rtMod]=\"{ 'with-icon': !!emptyIcon() }\">\n @if (emptyIcon(); as icon) {\n <rt-icon rtElem=\"empty-icon\" qa-dataid=\"tree-empty-icon\" size=\"lg\" [name]=\"icon\" />\n }\n {{ emptyText() }}\n </div>\n }\n</ng-container>\n"],"mappings":"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"}
@@ -1,64 +1,119 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, computed, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
3
- import { BlockDirective, ElemDirective } from '@rt-tools/core';
4
- import { rtKitLabel, RT_KIT_LABELS } from '@rt-tools/ui-kit-v2/core';
5
- import { RtButtonDirective } from '@rt-tools/ui-kit-v2/button';
6
- import { RtDialogRef, RT_DIALOG_DATA, RtDialogComponent } from '@rt-tools/ui-kit-v2/dialog';
7
-
8
- const BEM_BLOCK = 'rt-welcome-dialog';
9
- /** Ключ подписи CTA по умолчанию: язык известен только после старта приложения */
10
- const DEFAULT_CTA_KEY = 'uiContinue';
11
- /**
12
- * Welcome-модалка первого входа: показывает настраиваемый текст приветствия роли.
13
- * Открывается программно через `RtDialogService.open(RtWelcomeDialogComponent, { data })`.
14
- *
15
- * Текст приходит многострочным: первый абзац (до пустой строки) рендерится
16
- * заголовком, остальные — параграфами описания. Без `rt-dialog-header` —
17
- * единственное действие закрытия — CTA-кнопка.
18
- */
19
- class RtWelcomeDialogComponent {
20
- #dialogRef;
21
- #data;
22
- #defaultCtaLabel;
23
- constructor() {
24
- this.#dialogRef = inject(RtDialogRef);
25
- this.#data = inject(RT_DIALOG_DATA, { optional: true });
26
- this.#defaultCtaLabel = rtKitLabel(DEFAULT_CTA_KEY);
27
- this.t = inject(RT_KIT_LABELS);
28
- /** Своя подпись важнее умолчания: роль знает, куда ведёт кнопка */
29
- this.ctaLabel = computed(() => this.#data?.ctaLabel || this.#defaultCtaLabel(), /* @ts-ignore */
30
- ...(ngDevMode ? [{ debugName: "ctaLabel" }] : /* istanbul ignore next */ []));
31
- const parts = (this.#data?.message ?? '')
32
- .split(/\n{2,}/)
33
- .map((part) => part.trim())
34
- .filter((part) => part.length > 0);
35
- this.title = parts[0] ?? '';
36
- this.paragraphs = parts.slice(1);
37
- }
38
- onClose() {
39
- this.#dialogRef.close();
40
- }
41
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtWelcomeDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
42
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: RtWelcomeDialogComponent, isStandalone: true, selector: "rt-welcome-dialog", host: { classAttribute: "rt-welcome-dialog" }, ngImport: i0, template: "<rt-dialog width=\"335px\" [ariaLabel]=\"t().uiWelcomeAria\">\n <div rtBlock=\"rt-welcome-dialog\">\n <div rtElem=\"text\">\n @if (title) {\n <h2 rtElem=\"title\" qa-dataid=\"welcome-dialog-title\">{{ title }}</h2>\n }\n @for (paragraph of paragraphs; track $index) {\n <p rtElem=\"description\" qa-dataid=\"welcome-dialog-description\">{{ paragraph }}</p>\n }\n </div>\n <!-- rtButton-\u0434\u0438\u0440\u0435\u043A\u0442\u0438\u0432\u0430 \u0440\u0435\u043D\u0434\u0435\u0440\u0438\u0442 label \u0447\u0435\u0440\u0435\u0437 Renderer2 \u0432 afterNextRender \u2014\n \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E child-\u043A\u043E\u043D\u0442\u0435\u043D\u0442\u0430 \u0432 template \u043D\u0435\u0442 \u043D\u0430\u043C\u0435\u0440\u0435\u043D\u043D\u043E. -->\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content -->\n <button\n rtButton\n rtElem=\"cta\"\n qa-dataid=\"welcome-dialog-cta\"\n type=\"button\"\n theme=\"primary\"\n appearance=\"filled\"\n [label]=\"ctaLabel()\"\n (click)=\"onClose()\"></button>\n </div>\n</rt-dialog>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-welcome-dialog{display:contents}rt-welcome-dialog .rt-welcome-dialog{display:flex;flex-direction:column;padding:var(--rt-space-16) var(--rt-space-5);gap:var(--rt-space-5)}rt-welcome-dialog .rt-welcome-dialog__text{display:flex;flex-direction:column;gap:var(--rt-space-2);text-align:center}rt-welcome-dialog .rt-welcome-dialog__title{margin:0;color:var(--rt-color-text-primary);font-family:var(--rt-font-family-sans);font-size:var(--rt-text-md);font-weight:var(--rt-font-weight-bold);line-height:var(--rt-leading-snug)}rt-welcome-dialog .rt-welcome-dialog__description{margin:0;color:var(--rt-color-text-primary);font-family:var(--rt-font-family-sans);font-size:var(--rt-text-xs);font-weight:var(--rt-font-weight-regular);line-height:var(--rt-leading-snug);white-space:pre-line}rt-welcome-dialog .rt-welcome-dialog__cta{--rt-btn-font-size: 14px;width:100%;letter-spacing:0}}\n"], dependencies: [{ kind: "directive", type:
43
- // standalone components / directives
44
- RtButtonDirective, selector: "button[rtButton], a[rtButton]", inputs: ["label", "icon", "iconPos", "theme", "appearance", "size", "loading", "loadingIcon", "loadingLabel", "pressed"] }, { kind: "component", type: RtDialogComponent, selector: "rt-dialog", inputs: ["size", "width", "ariaLabel"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
45
- }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtWelcomeDialogComponent, decorators: [{
47
- type: Component,
48
- args: [{ selector: 'rt-welcome-dialog', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
49
- // standalone components / directives
50
- RtButtonDirective,
51
- RtDialogComponent,
52
- BlockDirective,
53
- ElemDirective,
54
- ], host: {
55
- class: BEM_BLOCK,
56
- }, template: "<rt-dialog width=\"335px\" [ariaLabel]=\"t().uiWelcomeAria\">\n <div rtBlock=\"rt-welcome-dialog\">\n <div rtElem=\"text\">\n @if (title) {\n <h2 rtElem=\"title\" qa-dataid=\"welcome-dialog-title\">{{ title }}</h2>\n }\n @for (paragraph of paragraphs; track $index) {\n <p rtElem=\"description\" qa-dataid=\"welcome-dialog-description\">{{ paragraph }}</p>\n }\n </div>\n <!-- rtButton-\u0434\u0438\u0440\u0435\u043A\u0442\u0438\u0432\u0430 \u0440\u0435\u043D\u0434\u0435\u0440\u0438\u0442 label \u0447\u0435\u0440\u0435\u0437 Renderer2 \u0432 afterNextRender \u2014\n \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E child-\u043A\u043E\u043D\u0442\u0435\u043D\u0442\u0430 \u0432 template \u043D\u0435\u0442 \u043D\u0430\u043C\u0435\u0440\u0435\u043D\u043D\u043E. -->\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content -->\n <button\n rtButton\n rtElem=\"cta\"\n qa-dataid=\"welcome-dialog-cta\"\n type=\"button\"\n theme=\"primary\"\n appearance=\"filled\"\n [label]=\"ctaLabel()\"\n (click)=\"onClose()\"></button>\n </div>\n</rt-dialog>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-welcome-dialog{display:contents}rt-welcome-dialog .rt-welcome-dialog{display:flex;flex-direction:column;padding:var(--rt-space-16) var(--rt-space-5);gap:var(--rt-space-5)}rt-welcome-dialog .rt-welcome-dialog__text{display:flex;flex-direction:column;gap:var(--rt-space-2);text-align:center}rt-welcome-dialog .rt-welcome-dialog__title{margin:0;color:var(--rt-color-text-primary);font-family:var(--rt-font-family-sans);font-size:var(--rt-text-md);font-weight:var(--rt-font-weight-bold);line-height:var(--rt-leading-snug)}rt-welcome-dialog .rt-welcome-dialog__description{margin:0;color:var(--rt-color-text-primary);font-family:var(--rt-font-family-sans);font-size:var(--rt-text-xs);font-weight:var(--rt-font-weight-regular);line-height:var(--rt-leading-snug);white-space:pre-line}rt-welcome-dialog .rt-welcome-dialog__cta{--rt-btn-font-size: 14px;width:100%;letter-spacing:0}}\n"] }]
57
- }], ctorParameters: () => [] });
58
-
59
- /**
60
- * Generated bundle index. Do not edit.
61
- */
62
-
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject } from "@angular/core";
3
+ import { BlockDirective, ElemDirective } from "@rt-tools/core";
4
+ import { RT_KIT_LABELS, rtKitLabel } from "@rt-tools/ui-kit-v2/core";
5
+ import { RtButtonDirective } from "@rt-tools/ui-kit-v2/button";
6
+ import { RT_DIALOG_DATA, RtDialogComponent, RtDialogRef } from "@rt-tools/ui-kit-v2/dialog";
7
+ const BEM_BLOCK = "rt-welcome-dialog";
8
+ const DEFAULT_CTA_KEY = "uiContinue";
9
+ var RtWelcomeDialogComponent = class RtWelcomeDialogComponent {
10
+ #dialogRef;
11
+ #data;
12
+ #defaultCtaLabel;
13
+ constructor() {
14
+ this.#dialogRef = inject(RtDialogRef);
15
+ this.#data = inject(RT_DIALOG_DATA, { optional: true });
16
+ this.#defaultCtaLabel = rtKitLabel(DEFAULT_CTA_KEY);
17
+ this.t = inject(RT_KIT_LABELS);
18
+ this.ctaLabel = computed(() => this.#data?.ctaLabel || this.#defaultCtaLabel(), ...ngDevMode ? [{ debugName: "ctaLabel" }] : /* istanbul ignore next */ []);
19
+ const parts = (this.#data?.message ?? "").split(/\n{2,}/).map((part) => part.trim()).filter((part) => part.length > 0);
20
+ this.title = parts[0] ?? "";
21
+ this.paragraphs = parts.slice(1);
22
+ }
23
+ onClose() {
24
+ this.#dialogRef.close();
25
+ }
26
+ static {
27
+ this.ɵfac = i0.ɵɵngDeclareFactory({
28
+ minVersion: "12.0.0",
29
+ version: "22.2.2",
30
+ ngImport: i0,
31
+ type: RtWelcomeDialogComponent,
32
+ deps: [],
33
+ target: i0.ɵɵFactoryTarget.Component
34
+ });
35
+ }
36
+ static {
37
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
38
+ minVersion: "17.0.0",
39
+ version: "22.2.2",
40
+ type: RtWelcomeDialogComponent,
41
+ isStandalone: true,
42
+ selector: "rt-welcome-dialog",
43
+ host: { classAttribute: "rt-welcome-dialog" },
44
+ ngImport: i0,
45
+ template: "<rt-dialog width=\"335px\" [ariaLabel]=\"t().uiWelcomeAria\">\n <div rtBlock=\"rt-welcome-dialog\">\n <div rtElem=\"text\">\n @if (title) {\n <h2 rtElem=\"title\" qa-dataid=\"welcome-dialog-title\">{{ title }}</h2>\n }\n @for (paragraph of paragraphs; track $index) {\n <p rtElem=\"description\" qa-dataid=\"welcome-dialog-description\">{{ paragraph }}</p>\n }\n </div>\n <!-- rtButton-директива рендерит label через Renderer2 в afterNextRender —\n статического child-контента в template нет намеренно. -->\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content -->\n <button\n rtButton\n rtElem=\"cta\"\n qa-dataid=\"welcome-dialog-cta\"\n type=\"button\"\n theme=\"primary\"\n appearance=\"filled\"\n [label]=\"ctaLabel()\"\n (click)=\"onClose()\"></button>\n </div>\n</rt-dialog>\n",
46
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-welcome-dialog{display:contents}rt-welcome-dialog .rt-welcome-dialog{display:flex;flex-direction:column;padding:var(--rt-space-16) var(--rt-space-5);gap:var(--rt-space-5)}rt-welcome-dialog .rt-welcome-dialog__text{display:flex;flex-direction:column;gap:var(--rt-space-2);text-align:center}rt-welcome-dialog .rt-welcome-dialog__title{margin:0;color:var(--rt-color-text-primary);font-family:var(--rt-font-family-sans);font-size:var(--rt-text-md);font-weight:var(--rt-font-weight-bold);line-height:var(--rt-leading-snug)}rt-welcome-dialog .rt-welcome-dialog__description{margin:0;color:var(--rt-color-text-primary);font-family:var(--rt-font-family-sans);font-size:var(--rt-text-xs);font-weight:var(--rt-font-weight-regular);line-height:var(--rt-leading-snug);white-space:pre-line}rt-welcome-dialog .rt-welcome-dialog__cta{--rt-btn-font-size: 14px;width:100%;letter-spacing:0}}\n"],
47
+ dependencies: [
48
+ {
49
+ kind: "directive",
50
+ type: RtButtonDirective,
51
+ selector: "button[rtButton], a[rtButton]",
52
+ inputs: [
53
+ "label",
54
+ "icon",
55
+ "iconPos",
56
+ "theme",
57
+ "appearance",
58
+ "size",
59
+ "loading",
60
+ "loadingIcon",
61
+ "loadingLabel",
62
+ "pressed"
63
+ ]
64
+ },
65
+ {
66
+ kind: "component",
67
+ type: RtDialogComponent,
68
+ selector: "rt-dialog",
69
+ inputs: [
70
+ "size",
71
+ "width",
72
+ "ariaLabel"
73
+ ]
74
+ },
75
+ {
76
+ kind: "directive",
77
+ type: BlockDirective,
78
+ selector: "[rtBlock]",
79
+ inputs: ["rtMod"]
80
+ },
81
+ {
82
+ kind: "directive",
83
+ type: ElemDirective,
84
+ selector: "[rtElem]",
85
+ inputs: ["rtMod"]
86
+ }
87
+ ],
88
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
89
+ encapsulation: i0.ViewEncapsulation.None
90
+ });
91
+ }
92
+ };
93
+ i0.ɵɵngDeclareClassMetadata({
94
+ minVersion: "12.0.0",
95
+ version: "22.2.2",
96
+ ngImport: i0,
97
+ type: RtWelcomeDialogComponent,
98
+ decorators: [{
99
+ type: Component,
100
+ args: [{
101
+ selector: "rt-welcome-dialog",
102
+ changeDetection: ChangeDetectionStrategy.OnPush,
103
+ encapsulation: ViewEncapsulation.None,
104
+ imports: [
105
+ RtButtonDirective,
106
+ RtDialogComponent,
107
+ BlockDirective,
108
+ ElemDirective
109
+ ],
110
+ host: { class: BEM_BLOCK },
111
+ template: "<rt-dialog width=\"335px\" [ariaLabel]=\"t().uiWelcomeAria\">\n <div rtBlock=\"rt-welcome-dialog\">\n <div rtElem=\"text\">\n @if (title) {\n <h2 rtElem=\"title\" qa-dataid=\"welcome-dialog-title\">{{ title }}</h2>\n }\n @for (paragraph of paragraphs; track $index) {\n <p rtElem=\"description\" qa-dataid=\"welcome-dialog-description\">{{ paragraph }}</p>\n }\n </div>\n <!-- rtButton-директива рендерит label через Renderer2 в afterNextRender —\n статического child-контента в template нет намеренно. -->\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content -->\n <button\n rtButton\n rtElem=\"cta\"\n qa-dataid=\"welcome-dialog-cta\"\n type=\"button\"\n theme=\"primary\"\n appearance=\"filled\"\n [label]=\"ctaLabel()\"\n (click)=\"onClose()\"></button>\n </div>\n</rt-dialog>\n",
112
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-welcome-dialog{display:contents}rt-welcome-dialog .rt-welcome-dialog{display:flex;flex-direction:column;padding:var(--rt-space-16) var(--rt-space-5);gap:var(--rt-space-5)}rt-welcome-dialog .rt-welcome-dialog__text{display:flex;flex-direction:column;gap:var(--rt-space-2);text-align:center}rt-welcome-dialog .rt-welcome-dialog__title{margin:0;color:var(--rt-color-text-primary);font-family:var(--rt-font-family-sans);font-size:var(--rt-text-md);font-weight:var(--rt-font-weight-bold);line-height:var(--rt-leading-snug)}rt-welcome-dialog .rt-welcome-dialog__description{margin:0;color:var(--rt-color-text-primary);font-family:var(--rt-font-family-sans);font-size:var(--rt-text-xs);font-weight:var(--rt-font-weight-regular);line-height:var(--rt-leading-snug);white-space:pre-line}rt-welcome-dialog .rt-welcome-dialog__cta{--rt-btn-font-size: 14px;width:100%;letter-spacing:0}}\n"]
113
+ }]
114
+ }],
115
+ ctorParameters: () => []
116
+ });
63
117
  export { RtWelcomeDialogComponent };
64
- //# sourceMappingURL=rt-tools-ui-kit-v2-welcome-dialog.mjs.map
118
+
119
+ //# sourceMappingURL=rt-tools-ui-kit-v2-welcome-dialog.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rt-tools-ui-kit-v2-welcome-dialog.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/welcome-dialog/rt-welcome-dialog.component.ts","../../../projects/ui-kit-v2/src/lib/components/welcome-dialog/rt-welcome-dialog.component.html","../../../projects/ui-kit-v2/src/lib/components/welcome-dialog/rt-tools-ui-kit-v2-welcome-dialog.ts"],"sourcesContent":["import { computed, inject, ChangeDetectionStrategy, Component, Signal, ViewEncapsulation } from '@angular/core';\n\nimport { BlockDirective, ElemDirective } from '@rt-tools/core';\n\nimport { RT_KIT_LABELS, TRtKitLabelKey, TRtKitLabelMap, rtKitLabel } 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';\n\nconst BEM_BLOCK: string = 'rt-welcome-dialog';\n\n/** Ключ подписи CTA по умолчанию: язык известен только после старта приложения */\nconst DEFAULT_CTA_KEY: TRtKitLabelKey = 'uiContinue';\n\nexport namespace IRtWelcomeDialog {\n /** Payload модалки: настраиваемый текст приветствия + подпись CTA-кнопки. */\n export interface Data {\n message: string;\n ctaLabel?: string;\n }\n}\n\n/**\n * Welcome-модалка первого входа: показывает настраиваемый текст приветствия роли.\n * Открывается программно через `RtDialogService.open(RtWelcomeDialogComponent, { data })`.\n *\n * Текст приходит многострочным: первый абзац (до пустой строки) рендерится\n * заголовком, остальные — параграфами описания. Без `rt-dialog-header` —\n * единственное действие закрытия — CTA-кнопка.\n */\n@Component({\n selector: 'rt-welcome-dialog',\n templateUrl: './rt-welcome-dialog.component.html',\n styleUrl: './rt-welcome-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 RtWelcomeDialogComponent {\n readonly #dialogRef: RtDialogRef = inject(RtDialogRef);\n readonly #data: IRtWelcomeDialog.Data | null = inject<IRtWelcomeDialog.Data | null>(RT_DIALOG_DATA, { optional: true });\n\n readonly #defaultCtaLabel: Signal<string> = rtKitLabel(DEFAULT_CTA_KEY);\n\n protected readonly t: Signal<TRtKitLabelMap> = inject(RT_KIT_LABELS);\n\n protected readonly title: string;\n\n protected readonly paragraphs: string[];\n\n /** Своя подпись важнее умолчания: роль знает, куда ведёт кнопка */\n protected readonly ctaLabel: Signal<string> = computed((): string => this.#data?.ctaLabel || this.#defaultCtaLabel());\n\n constructor() {\n const parts: string[] = (this.#data?.message ?? '')\n .split(/\\n{2,}/)\n .map((part: string): string => part.trim())\n .filter((part: string): boolean => part.length > 0);\n this.title = parts[0] ?? '';\n this.paragraphs = parts.slice(1);\n }\n\n protected onClose(): void {\n this.#dialogRef.close();\n }\n}\n","<rt-dialog width=\"335px\" [ariaLabel]=\"t().uiWelcomeAria\">\n <div rtBlock=\"rt-welcome-dialog\">\n <div rtElem=\"text\">\n @if (title) {\n <h2 rtElem=\"title\" qa-dataid=\"welcome-dialog-title\">{{ title }}</h2>\n }\n @for (paragraph of paragraphs; track $index) {\n <p rtElem=\"description\" qa-dataid=\"welcome-dialog-description\">{{ paragraph }}</p>\n }\n </div>\n <!-- rtButton-директива рендерит label через Renderer2 в afterNextRender —\n статического child-контента в template нет намеренно. -->\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content -->\n <button\n rtButton\n rtElem=\"cta\"\n qa-dataid=\"welcome-dialog-cta\"\n type=\"button\"\n theme=\"primary\"\n appearance=\"filled\"\n [label]=\"ctaLabel()\"\n (click)=\"onClose()\"></button>\n </div>\n</rt-dialog>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rt-tools-ui-kit-v2-welcome-dialog.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/welcome-dialog/rt-welcome-dialog.component.ts","../../../projects/ui-kit-v2/src/lib/components/welcome-dialog/rt-welcome-dialog.component.html"],"sourcesContent":["import { computed, inject, ChangeDetectionStrategy, Component, Signal, ViewEncapsulation } from '@angular/core';\n\nimport { BlockDirective, ElemDirective } from '@rt-tools/core';\n\nimport { RT_KIT_LABELS, TRtKitLabelKey, TRtKitLabelMap, rtKitLabel } 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';\n\nconst BEM_BLOCK: string = 'rt-welcome-dialog';\n\n/** Ключ подписи CTA по умолчанию: язык известен только после старта приложения */\nconst DEFAULT_CTA_KEY: TRtKitLabelKey = 'uiContinue';\n\nexport namespace IRtWelcomeDialog {\n /** Payload модалки: настраиваемый текст приветствия + подпись CTA-кнопки. */\n export interface Data {\n message: string;\n ctaLabel?: string;\n }\n}\n\n/**\n * Welcome-модалка первого входа: показывает настраиваемый текст приветствия роли.\n * Открывается программно через `RtDialogService.open(RtWelcomeDialogComponent, { data })`.\n *\n * Текст приходит многострочным: первый абзац (до пустой строки) рендерится\n * заголовком, остальные — параграфами описания. Без `rt-dialog-header` —\n * единственное действие закрытия — CTA-кнопка.\n */\n@Component({\n selector: 'rt-welcome-dialog',\n templateUrl: './rt-welcome-dialog.component.html',\n styleUrl: './rt-welcome-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 RtWelcomeDialogComponent {\n readonly #dialogRef: RtDialogRef = inject(RtDialogRef);\n readonly #data: IRtWelcomeDialog.Data | null = inject<IRtWelcomeDialog.Data | null>(RT_DIALOG_DATA, { optional: true });\n\n readonly #defaultCtaLabel: Signal<string> = rtKitLabel(DEFAULT_CTA_KEY);\n\n protected readonly t: Signal<TRtKitLabelMap> = inject(RT_KIT_LABELS);\n\n protected readonly title: string;\n\n protected readonly paragraphs: string[];\n\n /** Своя подпись важнее умолчания: роль знает, куда ведёт кнопка */\n protected readonly ctaLabel: Signal<string> = computed((): string => this.#data?.ctaLabel || this.#defaultCtaLabel());\n\n constructor() {\n const parts: string[] = (this.#data?.message ?? '')\n .split(/\\n{2,}/)\n .map((part: string): string => part.trim())\n .filter((part: string): boolean => part.length > 0);\n this.title = parts[0] ?? '';\n this.paragraphs = parts.slice(1);\n }\n\n protected onClose(): void {\n this.#dialogRef.close();\n }\n}\n","<rt-dialog width=\"335px\" [ariaLabel]=\"t().uiWelcomeAria\">\n <div rtBlock=\"rt-welcome-dialog\">\n <div rtElem=\"text\">\n @if (title) {\n <h2 rtElem=\"title\" qa-dataid=\"welcome-dialog-title\">{{ title }}</h2>\n }\n @for (paragraph of paragraphs; track $index) {\n <p rtElem=\"description\" qa-dataid=\"welcome-dialog-description\">{{ paragraph }}</p>\n }\n </div>\n <!-- rtButton-директива рендерит label через Renderer2 в afterNextRender —\n статического child-контента в template нет намеренно. -->\n <!-- eslint-disable-next-line @angular-eslint/template/elements-content -->\n <button\n rtButton\n rtElem=\"cta\"\n qa-dataid=\"welcome-dialog-cta\"\n type=\"button\"\n theme=\"primary\"\n appearance=\"filled\"\n [label]=\"ctaLabel()\"\n (click)=\"onClose()\"></button>\n </div>\n</rt-dialog>\n"],"mappings":";;;;;;AAUA,MAAM,YAAoB;AAG1B,MAAM,kBAAkC;AAmCxC,IAAa,2BAAb,MAAa,yBAAwB;CACxB;CACA;CAEA;CAWT,cAAA;EAdS,KAAA,aAA0B,OAAO,WAAW;EAC5C,KAAA,QAAsC,OAAqC,gBAAgB,EAAE,UAAU,KAAI,CAAE;EAE7G,KAAA,mBAAmC,WAAW,eAAe;EAEnD,KAAA,IAA4B,OAAO,aAAa;EAOhD,KAAA,WAA2B,eAAuB,KAAK,OAAO,YAAY,KAAK,iBAAgB,GAAG,GAAA,YAAA,CAAA,EAAA,WAAA,WAAA,CAAA,+BAAA,CAAA,CAAA;EAGjH,MAAM,SAAmB,KAAK,OAAO,WAAW,GAAA,CAC3C,MAAM,QAAQ,CAAC,CACf,KAAK,SAAyB,KAAK,KAAI,CAAE,CAAC,CAC1C,QAAQ,SAA0B,KAAK,SAAS,CAAC;EACtD,KAAK,QAAQ,MAAM,MAAM;EACzB,KAAK,aAAa,MAAM,MAAM,CAAC;CACnC;CAEU,UAAO;EACb,KAAK,WAAW,MAAK;CACzB;CA1BS;EAAA,KAAA,OAAA,GAAA,mBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,UAAA;GAAA,MAAA;GAAwB,MAAA,CAAA;GAAA,QAAA,GAAA,gBAAA;EAAA,CAAA;CAAA;CAAxB;EAAA,KAAA,OAAA,GAAA,qBAAA;GAAA,YAAA;GAAA,SAAA;GAAA,MAAA;GAAwB,cAAA;GAAA,UAAA;GAAA,MAAA,EAAA,gBAAA,oBAAA;GAAA,UAAA;GAAA,UChDrC;GAwBA,QAAA,CAAA,45BAAA;GAAA,cAAA;IAAA;KAAA,MAAA;KAAA,MDeQ;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;CAAwB,YAAA,CAAA;EAjBpC,MAAA;EACa,MAAA,CAAA;GAAA,UAAA;GAAmB,iBAGZ,wBAAwB;GAAM,eAChC,kBAAkB;GAAI,SAC5B;IAEL;IACA;IACA;IACA;GACH;GAAA,MACK,EACF,OAAO,UACV;GAAA,UAAA;GAAA,QAAA,CAAA,45BAAA;EAAA,CAAA"}