@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,301 +1,408 @@
1
- import { NgTemplateOutlet } from '@angular/common';
2
- import * as i0 from '@angular/core';
3
- import { inject, TemplateRef, Directive, viewChild, signal, contentChild, input, booleanAttribute, DestroyRef, afterRenderEffect, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
4
- import { BlockDirective, ElemDirective } from '@rt-tools/core';
5
- import { RT_KIT_LABELS } from '@rt-tools/ui-kit-v2/core';
6
- import { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';
7
- import { RtTooltipDirective } from '@rt-tools/ui-kit-v2/tooltip';
8
-
9
- /**
10
- * Маркеры частей области прокрутки — своим файлом, как у соседних семей.
11
- *
12
- * Каждый маркер держит свой шаблон и не знает об области ничего: область читает маркеры среди
13
- * своего содержимого и берёт у них шаблон. Часть, которую потребитель не объявил, для области
14
- * просто отсутствует — рисовать нечего.
15
- */
16
- /**
17
- * Шапка области: стоит сверху и не прокручивается.
18
- *
19
- * @example
20
- * ```html
21
- * <rt-scroll-area>
22
- * <ng-container *rtScrollAreaHeader>
23
- * <h3>Заголовок</h3>
24
- * </ng-container>
25
- * </rt-scroll-area>
26
- * ```
27
- */
28
- class RtScrollAreaHeaderDirective {
29
- constructor() {
30
- this.templateRef = inject(TemplateRef);
31
- }
32
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtScrollAreaHeaderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
33
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.6", type: RtScrollAreaHeaderDirective, isStandalone: true, selector: "[rtScrollAreaHeader]", ngImport: i0 }); }
34
- }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtScrollAreaHeaderDirective, decorators: [{
36
- type: Directive,
37
- args: [{
38
- selector: '[rtScrollAreaHeader]',
39
- }]
40
- }] });
41
- /** Тело области: единственная часть, которая прокручивается. */
42
- class RtScrollAreaContentDirective {
43
- constructor() {
44
- this.templateRef = inject(TemplateRef);
45
- }
46
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtScrollAreaContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
47
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.6", type: RtScrollAreaContentDirective, isStandalone: true, selector: "[rtScrollAreaContent]", ngImport: i0 }); }
48
- }
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtScrollAreaContentDirective, decorators: [{
50
- type: Directive,
51
- args: [{
52
- selector: '[rtScrollAreaContent]',
53
- }]
54
- }] });
55
- /** Подвал области: стоит снизу и не прокручивается. */
56
- class RtScrollAreaFooterDirective {
57
- constructor() {
58
- this.templateRef = inject(TemplateRef);
59
- }
60
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtScrollAreaFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
61
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.6", type: RtScrollAreaFooterDirective, isStandalone: true, selector: "[rtScrollAreaFooter]", ngImport: i0 }); }
62
- }
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtScrollAreaFooterDirective, decorators: [{
64
- type: Directive,
65
- args: [{
66
- selector: '[rtScrollAreaFooter]',
67
- }]
68
- }] });
69
-
70
- const BEM_BLOCK = 'rt-scroll-area';
71
- /**
72
- * Целый пункт запаса при сравнении прокрутки с высотой.
73
- *
74
- * Дробная высота строки оставляет остаток, при котором прокрутка уже в самом низу, а разность
75
- * всё ещё больше нуля: без запаса признак непоказанного висел бы навсегда.
76
- */
1
+ import { NgTemplateOutlet } from "@angular/common";
2
+ import * as i0 from "@angular/core";
3
+ import { ChangeDetectionStrategy, Component, DestroyRef, Directive, TemplateRef, ViewEncapsulation, afterRenderEffect, booleanAttribute, contentChild, inject, input, signal, viewChild } from "@angular/core";
4
+ import { BlockDirective, ElemDirective } from "@rt-tools/core";
5
+ import { RT_KIT_LABELS } from "@rt-tools/ui-kit-v2/core";
6
+ import { RtIconComponent } from "@rt-tools/ui-kit-v2/icon";
7
+ import { RtTooltipDirective } from "@rt-tools/ui-kit-v2/tooltip";
8
+ var RtScrollAreaHeaderDirective = class RtScrollAreaHeaderDirective {
9
+ constructor() {
10
+ this.templateRef = inject(TemplateRef);
11
+ }
12
+ static {
13
+ this.ɵfac = i0.ɵɵngDeclareFactory({
14
+ minVersion: "12.0.0",
15
+ version: "22.2.2",
16
+ ngImport: i0,
17
+ type: RtScrollAreaHeaderDirective,
18
+ deps: [],
19
+ target: i0.ɵɵFactoryTarget.Directive
20
+ });
21
+ }
22
+ static {
23
+ this.ɵdir = i0.ɵɵngDeclareDirective({
24
+ minVersion: "14.0.0",
25
+ version: "22.2.2",
26
+ type: RtScrollAreaHeaderDirective,
27
+ isStandalone: true,
28
+ selector: "[rtScrollAreaHeader]",
29
+ ngImport: i0
30
+ });
31
+ }
32
+ };
33
+ i0.ɵɵngDeclareClassMetadata({
34
+ minVersion: "12.0.0",
35
+ version: "22.2.2",
36
+ ngImport: i0,
37
+ type: RtScrollAreaHeaderDirective,
38
+ decorators: [{
39
+ type: Directive,
40
+ args: [{ selector: "[rtScrollAreaHeader]" }]
41
+ }]
42
+ });
43
+ var RtScrollAreaContentDirective = class RtScrollAreaContentDirective {
44
+ constructor() {
45
+ this.templateRef = inject(TemplateRef);
46
+ }
47
+ static {
48
+ this.ɵfac = i0.ɵɵngDeclareFactory({
49
+ minVersion: "12.0.0",
50
+ version: "22.2.2",
51
+ ngImport: i0,
52
+ type: RtScrollAreaContentDirective,
53
+ deps: [],
54
+ target: i0.ɵɵFactoryTarget.Directive
55
+ });
56
+ }
57
+ static {
58
+ this.ɵdir = i0.ɵɵngDeclareDirective({
59
+ minVersion: "14.0.0",
60
+ version: "22.2.2",
61
+ type: RtScrollAreaContentDirective,
62
+ isStandalone: true,
63
+ selector: "[rtScrollAreaContent]",
64
+ ngImport: i0
65
+ });
66
+ }
67
+ };
68
+ i0.ɵɵngDeclareClassMetadata({
69
+ minVersion: "12.0.0",
70
+ version: "22.2.2",
71
+ ngImport: i0,
72
+ type: RtScrollAreaContentDirective,
73
+ decorators: [{
74
+ type: Directive,
75
+ args: [{ selector: "[rtScrollAreaContent]" }]
76
+ }]
77
+ });
78
+ var RtScrollAreaFooterDirective = class RtScrollAreaFooterDirective {
79
+ constructor() {
80
+ this.templateRef = inject(TemplateRef);
81
+ }
82
+ static {
83
+ this.ɵfac = i0.ɵɵngDeclareFactory({
84
+ minVersion: "12.0.0",
85
+ version: "22.2.2",
86
+ ngImport: i0,
87
+ type: RtScrollAreaFooterDirective,
88
+ deps: [],
89
+ target: i0.ɵɵFactoryTarget.Directive
90
+ });
91
+ }
92
+ static {
93
+ this.ɵdir = i0.ɵɵngDeclareDirective({
94
+ minVersion: "14.0.0",
95
+ version: "22.2.2",
96
+ type: RtScrollAreaFooterDirective,
97
+ isStandalone: true,
98
+ selector: "[rtScrollAreaFooter]",
99
+ ngImport: i0
100
+ });
101
+ }
102
+ };
103
+ i0.ɵɵngDeclareClassMetadata({
104
+ minVersion: "12.0.0",
105
+ version: "22.2.2",
106
+ ngImport: i0,
107
+ type: RtScrollAreaFooterDirective,
108
+ decorators: [{
109
+ type: Directive,
110
+ args: [{ selector: "[rtScrollAreaFooter]" }]
111
+ }]
112
+ });
113
+ const BEM_BLOCK = "rt-scroll-area";
77
114
  const BOTTOM_SLACK_PX = 1;
78
- /**
79
- * Область прокрутки: шапка и подвал стоят, тело прокручивается.
80
- *
81
- * Части объявляет потребитель — по директиве на каждую. Необъявленная часть не рисуется вовсе:
82
- * пустая шапка это полоса отступа над списком, а высоту она забирает у тела, ради которого
83
- * область и открыли.
84
- *
85
- * Договорённость — `docs/specs/ui-kit-v2/scroll-area/`.
86
- */
87
- class RtScrollAreaComponent {
88
- #destroyRef;
89
- /**
90
- * Наблюдатель за размером тела, его содержимого и подвала. Событие прокрутки приходит только
91
- * после движения руки, а список не влезает уже в первую минуту показа: без наблюдателя признак
92
- * появлялся бы у того, кто и так догадался прокрутить, и молчал у того, кому он нужен.
93
- */
94
- #sizeWatch;
95
- /**
96
- * Наблюдатель за составом тела. Тело — окно постоянной высоты, и когда список дорастает под ним,
97
- * размер тела не меняется: наблюдатель размера молчит. Пришедшие узлы ставятся под наблюдение
98
- * размера здесь же — их высота меняется и после того, как они легли.
99
- */
100
- #contentWatch;
101
- /** Узлы, за которыми наблюдают сейчас: пересозданное тело или подвал ставятся под наблюдение заново. */
102
- #watchedBody;
103
- #watchedFooter;
104
- /** Наблюдение поставлено: тело и подвал могут быть и пустыми, флаг отличает «снято» от «нечего смотреть». */
105
- #isWatching;
106
- /** Перемер по концу перехода или анимации внутри тела; одна ссылка — чтобы снять тот же слушатель. */
107
- #onSettled;
108
- constructor() {
109
- this.t = inject(RT_KIT_LABELS);
110
- this.bodyRef = viewChild('body', /* @ts-ignore */
111
- ...(ngDevMode ? [{ debugName: "bodyRef" }] : /* istanbul ignore next */ []));
112
- this.footerRef = viewChild('foot', /* @ts-ignore */
113
- ...(ngDevMode ? [{ debugName: "footerRef" }] : /* istanbul ignore next */ []));
114
- /**
115
- * Ниже окна области ещё есть содержимое. Считается по трём числам самого узла, а не по числу
116
- * пунктов: область не знает, что ей подали, и высота строки у каждого потребителя своя.
117
- */
118
- this.hasMoreBelow = signal(false, /* @ts-ignore */
119
- ...(ngDevMode ? [{ debugName: "hasMoreBelow" }] : /* istanbul ignore next */ []));
120
- /**
121
- * На сколько полоса растушёвки поднята над низом области. Она обязана кончиться там, где
122
- * начинается содержимое подвала: разделитель потребитель рисует первой его строкой, и полоса,
123
- * оборвавшаяся выше, оставляет до него чистый фон. Считается замером — верхний отступ подвала
124
- * потребитель пишет как хочет, и вычесть его в стилях не из чего. Без подвала полоса стоит у
125
- * самого низа.
126
- */
127
- this.hintBottom = signal(0, /* @ts-ignore */
128
- ...(ngDevMode ? [{ debugName: "hintBottom" }] : /* istanbul ignore next */ []));
129
- this.headerTpl = contentChild(RtScrollAreaHeaderDirective, /* @ts-ignore */
130
- ...(ngDevMode ? [{ debugName: "headerTpl" }] : /* istanbul ignore next */ []));
131
- this.contentTpl = contentChild(RtScrollAreaContentDirective, /* @ts-ignore */
132
- ...(ngDevMode ? [{ debugName: "contentTpl" }] : /* istanbul ignore next */ []));
133
- this.footerTpl = contentChild(RtScrollAreaFooterDirective, /* @ts-ignore */
134
- ...(ngDevMode ? [{ debugName: "footerTpl" }] : /* istanbul ignore next */ []));
135
- /**
136
- * Признак того, что снизу осталось непоказанное. Выключен по умолчанию: область рисуют
137
- * десятки экранов, и признак, поставленный безусловно, сдвинул бы вид каждому из них.
138
- */
139
- this.isScrollHintShown = input(false, { ...(ngDevMode ? { debugName: "isScrollHintShown" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
140
- this.#destroyRef = inject(DestroyRef);
141
- /**
142
- * Наблюдатель за размером тела, его содержимого и подвала. Событие прокрутки приходит только
143
- * после движения руки, а список не влезает уже в первую минуту показа: без наблюдателя признак
144
- * появлялся бы у того, кто и так догадался прокрутить, и молчал у того, кому он нужен.
145
- */
146
- this.#sizeWatch = null;
147
- /**
148
- * Наблюдатель за составом тела. Тело — окно постоянной высоты, и когда список дорастает под ним,
149
- * размер тела не меняется: наблюдатель размера молчит. Пришедшие узлы ставятся под наблюдение
150
- * размера здесь же — их высота меняется и после того, как они легли.
151
- */
152
- this.#contentWatch = null;
153
- /** Узлы, за которыми наблюдают сейчас: пересозданное тело или подвал ставятся под наблюдение заново. */
154
- this.#watchedBody = null;
155
- this.#watchedFooter = null;
156
- /** Наблюдение поставлено: тело и подвал могут быть и пустыми, флаг отличает «снято» от «нечего смотреть». */
157
- this.#isWatching = false;
158
- /** Перемер по концу перехода или анимации внутри тела; одна ссылка — чтобы снять тот же слушатель. */
159
- this.#onSettled = () => this.onBodyScroll();
160
- // Наблюдатели живут, только пока признак включён: выключенный признак ничего не рисует, а
161
- // наблюдатель состава с поддеревом заставлял бы браузер пересчитывать раскладку на каждую
162
- // правку внутри тела у каждой области экрана. Включение ставит их, выключение снимает.
163
- afterRenderEffect(() => {
164
- const body = this.bodyRef()?.nativeElement ?? null;
165
- const footer = this.footerRef()?.nativeElement ?? null;
166
- if (!this.isScrollHintShown()) {
167
- this.#unwatch();
168
- this.hasMoreBelow.set(false);
169
- return;
170
- }
171
- this.onBodyScroll();
172
- if (!this.#isWatching || body !== this.#watchedBody || footer !== this.#watchedFooter) {
173
- this.#watch(body, footer);
174
- }
175
- });
176
- this.#destroyRef.onDestroy(() => this.#unwatch());
177
- }
178
- /**
179
- * Нажатие на значок уводит тело к самому низу. Нажатие останавливается здесь и в содержимое
180
- * под значком не уходит: под ним живой пункт, и человек, целившийся в подсказку, уехал бы на
181
- * чужой экран.
182
- */
183
- onScrollHintClick(event) {
184
- event.preventDefault();
185
- event.stopPropagation();
186
- const body = this.bodyRef();
187
- if (!body) {
188
- return;
189
- }
190
- body.nativeElement.scrollTo({ top: body.nativeElement.scrollHeight, behavior: 'smooth' });
191
- }
192
- onBodyScroll() {
193
- // Выключенный признак не рисуется, и замер для него — чтение раскладки на каждое движение.
194
- if (!this.isScrollHintShown()) {
195
- return;
196
- }
197
- this.#measureHintBottom();
198
- const body = this.bodyRef();
199
- if (!body) {
200
- this.hasMoreBelow.set(false);
201
- return;
202
- }
203
- const node = body.nativeElement;
204
- this.hasMoreBelow.set(node.scrollHeight - node.scrollTop - node.clientHeight > BOTTOM_SLACK_PX);
205
- }
206
- /**
207
- * Подъём полосы над низом области: высота подвала без его верхнего отступа. Ровно на этом
208
- * месте начинается содержимое подвала, и до него полоса и должна доходить.
209
- */
210
- #measureHintBottom() {
211
- const footer = this.footerRef();
212
- if (!footer) {
213
- this.hintBottom.set(0);
214
- return;
215
- }
216
- const node = footer.nativeElement;
217
- const paddingTop = parseFloat(getComputedStyle(node).paddingTop) || 0;
218
- this.hintBottom.set(Math.max(node.offsetHeight - paddingTop, 0));
219
- }
220
- /** Ставит под наблюдение нынешние тело и подвал; прежние наблюдатели снимаются. */
221
- #watch(body, footer) {
222
- this.#unwatch();
223
- this.#watchedBody = body;
224
- this.#watchedFooter = footer;
225
- this.#isWatching = true;
226
- if (!body) {
227
- return;
228
- }
229
- if (typeof ResizeObserver !== 'undefined') {
230
- this.#sizeWatch = new ResizeObserver(() => this.onBodyScroll());
231
- this.#observeSizes();
232
- }
233
- if (typeof MutationObserver !== 'undefined') {
234
- this.#contentWatch = new MutationObserver(() => {
235
- this.#observeSizes();
236
- this.onBodyScroll();
237
- });
238
- this.#contentWatch.observe(body, { childList: true, subtree: true, characterData: true });
239
- }
240
- // Раскрытая папка дорастает переходом высоты от нуля: состав меняется в миг вставки, когда
241
- // высота ещё ноль, а наблюдатель размера пропускал конец роста. Конец перехода и анимации
242
- // всплывает к телу и перемеряет его по вставшей высоте.
243
- body.addEventListener('transitionend', this.#onSettled);
244
- body.addEventListener('animationend', this.#onSettled);
245
- }
246
- /**
247
- * Размер наблюдается у тела, у каждого его прямого потомка и у подвала. Подвал — наравне с
248
- * телом: от его высоты считается подъём полосы, и не наблюдавшаяся, она осталась бы стоять по
249
- * прежней высоте подвала и наехала бы на его первую строку.
250
- */
251
- #observeSizes() {
252
- const watch = this.#sizeWatch;
253
- const body = this.#watchedBody;
254
- if (!watch || !body) {
255
- return;
256
- }
257
- // Состав тела сменился — ушедшие узлы снимаются вместе со всеми, пришедшие ставятся заново.
258
- watch.disconnect();
259
- watch.observe(body);
260
- Array.from(body.children).forEach((child) => watch.observe(child));
261
- if (this.#watchedFooter) {
262
- watch.observe(this.#watchedFooter);
263
- }
264
- }
265
- #unwatch() {
266
- this.#watchedBody?.removeEventListener('transitionend', this.#onSettled);
267
- this.#watchedBody?.removeEventListener('animationend', this.#onSettled);
268
- this.#sizeWatch?.disconnect();
269
- this.#sizeWatch = null;
270
- this.#contentWatch?.disconnect();
271
- this.#contentWatch = null;
272
- this.#watchedBody = null;
273
- this.#watchedFooter = null;
274
- this.#isWatching = false;
275
- }
276
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtScrollAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
277
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: RtScrollAreaComponent, isStandalone: true, selector: "rt-scroll-area", inputs: { isScrollHintShown: { classPropertyName: "isScrollHintShown", publicName: "isScrollHintShown", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "rt-scroll-area" }, queries: [{ propertyName: "headerTpl", first: true, predicate: RtScrollAreaHeaderDirective, descendants: true, isSignal: true }, { propertyName: "contentTpl", first: true, predicate: RtScrollAreaContentDirective, descendants: true, isSignal: true }, { propertyName: "footerTpl", first: true, predicate: RtScrollAreaFooterDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "bodyRef", first: true, predicate: ["body"], descendants: true, isSignal: true }, { propertyName: "footerRef", first: true, predicate: ["foot"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-container rtBlock=\"rt-scroll-area\">\n @if (headerTpl()) {\n <div rtElem=\"header\" qa-dataid=\"scroll-area-header\">\n <ng-container [ngTemplateOutlet]=\"headerTpl()?.templateRef ?? null\" />\n </div>\n }\n\n @if (contentTpl()) {\n <div #body rtElem=\"body\" qa-dataid=\"scroll-area-body\" (scroll)=\"onBodyScroll()\">\n <ng-container [ngTemplateOutlet]=\"contentTpl()?.templateRef ?? null\" />\n </div>\n }\n\n @if (footerTpl()) {\n <div #foot rtElem=\"footer\" qa-dataid=\"scroll-area-footer\">\n <ng-container [ngTemplateOutlet]=\"footerTpl()?.templateRef ?? null\" />\n </div>\n }\n\n <!--\n \u041F\u0440\u0438\u0437\u043D\u0430\u043A \u0442\u043E\u0433\u043E, \u0447\u0442\u043E \u0441\u043D\u0438\u0437\u0443 \u043E\u0441\u0442\u0430\u043B\u043E\u0441\u044C \u043D\u0435\u043F\u043E\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u0435: \u043A\u0440\u0430\u0439 \u0441\u043F\u0438\u0441\u043A\u0430, \u0440\u043E\u0432\u043D\u043E \u043E\u0431\u0440\u0435\u0437\u0430\u043D\u043D\u044B\u0439 \u043F\u043E\u0434\u0432\u0430\u043B\u043E\u043C,\n \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u043A\u043E\u043D\u0435\u0446 \u0441\u043F\u0438\u0441\u043A\u0430, \u0438 \u0447\u0435\u043B\u043E\u0432\u0435\u043A \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043E \u043F\u0443\u043D\u043A\u0442 \u043F\u0440\u043E\u043F\u0430\u043B. \u041F\u043E\u043B\u043E\u0441\u0430 \u0436\u0438\u0432\u0451\u0442 \u043D\u0430 \u0445\u043E\u0441\u0442\u0435, \u0430\n \u043D\u0435 \u0432\u043D\u0443\u0442\u0440\u0438 \u0442\u0435\u043B\u0430: \u0442\u0435\u043B\u043E \u043E\u0431\u0440\u0435\u0437\u0430\u0435\u0442 \u0432\u0441\u0451 \u043F\u043E \u0441\u0432\u043E\u0435\u043C\u0443 \u043A\u0440\u0430\u044E, \u0438 \u043F\u043E\u043B\u043E\u0441\u0430 \u043E\u0431\u0440\u044B\u0432\u0430\u043B\u0430\u0441\u044C \u0431\u044B \u043D\u0430 \u0432\u0435\u0440\u0445\u043D\u0435\u043C\n \u043E\u0442\u0441\u0442\u0443\u043F\u0435 \u043F\u043E\u0434\u0432\u0430\u043B\u0430 \u2014 \u043C\u0435\u0436\u0434\u0443 \u043D\u0435\u0439 \u0438 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u0435\u043C, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u043F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u044C \u0440\u0438\u0441\u0443\u0435\u0442 \u043F\u0435\u0440\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u043E\u0439\n \u043F\u043E\u0434\u0432\u0430\u043B\u0430, \u043E\u0441\u0442\u0430\u0432\u0430\u043B\u0430\u0441\u044C \u0431\u044B \u043F\u043E\u043B\u043E\u0441\u0430 \u0447\u0438\u0441\u0442\u043E\u0433\u043E \u0444\u043E\u043D\u0430.\n -->\n @if (isScrollHintShown() && hasMoreBelow()) {\n <div rtElem=\"scroll-hint\" qa-dataid=\"scroll-area-scroll-hint\" [style.bottom.px]=\"hintBottom()\">\n <rt-icon\n rtElem=\"scroll-hint-icon\"\n qa-dataid=\"scroll-area-scroll-hint-icon\"\n name=\"chevron-down\"\n size=\"md\"\n role=\"button\"\n tabindex=\"0\"\n rtTooltipPlacement=\"top\"\n [rtTooltip]=\"t().uiScrollDown\"\n [attr.aria-label]=\"t().uiScrollDown\"\n (click)=\"onScrollHintClick($event)\"\n (keydown.enter)=\"onScrollHintClick($event)\" />\n </div>\n }\n</ng-container>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{:where(.rt-scroll-area){background:var(--rt-scroll-area-bg)}.rt-scroll-area{--rt-scroll-area-hint-height: var(--rt-space-10);--rt-scroll-area-hint-color: var(--rt-color-bg-surface);--rt-scroll-area-hint-radius: var(--rt-radius-full);--rt-scroll-area-header-padding: var(--rt-space-2) var(--rt-space-4);--rt-scroll-area-body-padding: var(--rt-space-4);--rt-scroll-area-footer-padding: var(--rt-space-4);--rt-scroll-area-bg: transparent;--rt-scroll-area-header-bg: transparent;--rt-scroll-area-body-bg: transparent;--rt-scroll-area-footer-bg: transparent;position:relative;display:flex;flex-direction:column;block-size:100%;inline-size:100%;min-block-size:0}.rt-scroll-area__header{flex:0 0 auto;padding:var(--rt-scroll-area-header-padding);background:var(--rt-scroll-area-header-bg)}.rt-scroll-area__body{display:flex;overflow:auto;flex:1 1 auto;flex-direction:column;padding:var(--rt-scroll-area-body-padding);background:var(--rt-scroll-area-body-bg);min-block-size:0}.rt-scroll-area__footer{flex:0 0 auto;padding:var(--rt-scroll-area-footer-padding);background:var(--rt-scroll-area-footer-bg)}.rt-scroll-area__scroll-hint{position:absolute;z-index:1;display:flex;align-items:flex-end;justify-content:center;background:linear-gradient(to bottom,rgb(from var(--rt-scroll-area-hint-color) r g b/0%),var(--rt-scroll-area-hint-color));block-size:var(--rt-scroll-area-hint-height);inset-inline:0;pointer-events:none}.rt-scroll-area__scroll-hint-icon{display:flex;align-items:center;justify-content:center;border-radius:var(--rt-scroll-area-hint-radius);background-color:var(--rt-color-bg-surface);color:var(--rt-color-text-muted);cursor:pointer;pointer-events:auto}}\n"], dependencies: [{ kind: "directive", type:
278
- // Angular
279
- NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type:
280
- // standalone components / directives
281
- RtIconComponent, selector: "rt-icon", inputs: ["name", "glyph", "glyphStrategy", "size", "color", "fill", "spin", "rotate"] }, { kind: "directive", type: RtTooltipDirective, selector: "[rtTooltip]", inputs: ["rtTooltip", "rtTooltipPlacement", "rtTooltipWhenTruncated"], exportAs: ["rtTooltip"] }, { kind: "directive", type: BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
282
- }
283
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtScrollAreaComponent, decorators: [{
284
- type: Component,
285
- args: [{ selector: 'rt-scroll-area', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
286
- // Angular
287
- NgTemplateOutlet,
288
- // standalone components / directives
289
- RtIconComponent,
290
- RtTooltipDirective,
291
- BlockDirective,
292
- ElemDirective,
293
- ], host: { class: BEM_BLOCK }, template: "<ng-container rtBlock=\"rt-scroll-area\">\n @if (headerTpl()) {\n <div rtElem=\"header\" qa-dataid=\"scroll-area-header\">\n <ng-container [ngTemplateOutlet]=\"headerTpl()?.templateRef ?? null\" />\n </div>\n }\n\n @if (contentTpl()) {\n <div #body rtElem=\"body\" qa-dataid=\"scroll-area-body\" (scroll)=\"onBodyScroll()\">\n <ng-container [ngTemplateOutlet]=\"contentTpl()?.templateRef ?? null\" />\n </div>\n }\n\n @if (footerTpl()) {\n <div #foot rtElem=\"footer\" qa-dataid=\"scroll-area-footer\">\n <ng-container [ngTemplateOutlet]=\"footerTpl()?.templateRef ?? null\" />\n </div>\n }\n\n <!--\n \u041F\u0440\u0438\u0437\u043D\u0430\u043A \u0442\u043E\u0433\u043E, \u0447\u0442\u043E \u0441\u043D\u0438\u0437\u0443 \u043E\u0441\u0442\u0430\u043B\u043E\u0441\u044C \u043D\u0435\u043F\u043E\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u0435: \u043A\u0440\u0430\u0439 \u0441\u043F\u0438\u0441\u043A\u0430, \u0440\u043E\u0432\u043D\u043E \u043E\u0431\u0440\u0435\u0437\u0430\u043D\u043D\u044B\u0439 \u043F\u043E\u0434\u0432\u0430\u043B\u043E\u043C,\n \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u043A\u043E\u043D\u0435\u0446 \u0441\u043F\u0438\u0441\u043A\u0430, \u0438 \u0447\u0435\u043B\u043E\u0432\u0435\u043A \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043E \u043F\u0443\u043D\u043A\u0442 \u043F\u0440\u043E\u043F\u0430\u043B. \u041F\u043E\u043B\u043E\u0441\u0430 \u0436\u0438\u0432\u0451\u0442 \u043D\u0430 \u0445\u043E\u0441\u0442\u0435, \u0430\n \u043D\u0435 \u0432\u043D\u0443\u0442\u0440\u0438 \u0442\u0435\u043B\u0430: \u0442\u0435\u043B\u043E \u043E\u0431\u0440\u0435\u0437\u0430\u0435\u0442 \u0432\u0441\u0451 \u043F\u043E \u0441\u0432\u043E\u0435\u043C\u0443 \u043A\u0440\u0430\u044E, \u0438 \u043F\u043E\u043B\u043E\u0441\u0430 \u043E\u0431\u0440\u044B\u0432\u0430\u043B\u0430\u0441\u044C \u0431\u044B \u043D\u0430 \u0432\u0435\u0440\u0445\u043D\u0435\u043C\n \u043E\u0442\u0441\u0442\u0443\u043F\u0435 \u043F\u043E\u0434\u0432\u0430\u043B\u0430 \u2014 \u043C\u0435\u0436\u0434\u0443 \u043D\u0435\u0439 \u0438 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u0435\u043C, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u043F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u044C \u0440\u0438\u0441\u0443\u0435\u0442 \u043F\u0435\u0440\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u043E\u0439\n \u043F\u043E\u0434\u0432\u0430\u043B\u0430, \u043E\u0441\u0442\u0430\u0432\u0430\u043B\u0430\u0441\u044C \u0431\u044B \u043F\u043E\u043B\u043E\u0441\u0430 \u0447\u0438\u0441\u0442\u043E\u0433\u043E \u0444\u043E\u043D\u0430.\n -->\n @if (isScrollHintShown() && hasMoreBelow()) {\n <div rtElem=\"scroll-hint\" qa-dataid=\"scroll-area-scroll-hint\" [style.bottom.px]=\"hintBottom()\">\n <rt-icon\n rtElem=\"scroll-hint-icon\"\n qa-dataid=\"scroll-area-scroll-hint-icon\"\n name=\"chevron-down\"\n size=\"md\"\n role=\"button\"\n tabindex=\"0\"\n rtTooltipPlacement=\"top\"\n [rtTooltip]=\"t().uiScrollDown\"\n [attr.aria-label]=\"t().uiScrollDown\"\n (click)=\"onScrollHintClick($event)\"\n (keydown.enter)=\"onScrollHintClick($event)\" />\n </div>\n }\n</ng-container>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{:where(.rt-scroll-area){background:var(--rt-scroll-area-bg)}.rt-scroll-area{--rt-scroll-area-hint-height: var(--rt-space-10);--rt-scroll-area-hint-color: var(--rt-color-bg-surface);--rt-scroll-area-hint-radius: var(--rt-radius-full);--rt-scroll-area-header-padding: var(--rt-space-2) var(--rt-space-4);--rt-scroll-area-body-padding: var(--rt-space-4);--rt-scroll-area-footer-padding: var(--rt-space-4);--rt-scroll-area-bg: transparent;--rt-scroll-area-header-bg: transparent;--rt-scroll-area-body-bg: transparent;--rt-scroll-area-footer-bg: transparent;position:relative;display:flex;flex-direction:column;block-size:100%;inline-size:100%;min-block-size:0}.rt-scroll-area__header{flex:0 0 auto;padding:var(--rt-scroll-area-header-padding);background:var(--rt-scroll-area-header-bg)}.rt-scroll-area__body{display:flex;overflow:auto;flex:1 1 auto;flex-direction:column;padding:var(--rt-scroll-area-body-padding);background:var(--rt-scroll-area-body-bg);min-block-size:0}.rt-scroll-area__footer{flex:0 0 auto;padding:var(--rt-scroll-area-footer-padding);background:var(--rt-scroll-area-footer-bg)}.rt-scroll-area__scroll-hint{position:absolute;z-index:1;display:flex;align-items:flex-end;justify-content:center;background:linear-gradient(to bottom,rgb(from var(--rt-scroll-area-hint-color) r g b/0%),var(--rt-scroll-area-hint-color));block-size:var(--rt-scroll-area-hint-height);inset-inline:0;pointer-events:none}.rt-scroll-area__scroll-hint-icon{display:flex;align-items:center;justify-content:center;border-radius:var(--rt-scroll-area-hint-radius);background-color:var(--rt-color-bg-surface);color:var(--rt-color-text-muted);cursor:pointer;pointer-events:auto}}\n"] }]
294
- }], ctorParameters: () => [], propDecorators: { bodyRef: [{ type: i0.ViewChild, args: ['body', { isSignal: true }] }], footerRef: [{ type: i0.ViewChild, args: ['foot', { isSignal: true }] }], headerTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtScrollAreaHeaderDirective), { isSignal: true }] }], contentTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtScrollAreaContentDirective), { isSignal: true }] }], footerTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtScrollAreaFooterDirective), { isSignal: true }] }], isScrollHintShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isScrollHintShown", required: false }] }] } });
295
-
296
- /**
297
- * Generated bundle index. Do not edit.
298
- */
299
-
115
+ var RtScrollAreaComponent = class RtScrollAreaComponent {
116
+ #destroyRef;
117
+ #sizeWatch;
118
+ #contentWatch;
119
+ #watchedBody;
120
+ #watchedFooter;
121
+ #isWatching;
122
+ #onSettled;
123
+ constructor() {
124
+ this.t = inject(RT_KIT_LABELS);
125
+ this.bodyRef = viewChild("body", ...ngDevMode ? [{ debugName: "bodyRef" }] : /* istanbul ignore next */ []);
126
+ this.footerRef = viewChild("foot", ...ngDevMode ? [{ debugName: "footerRef" }] : /* istanbul ignore next */ []);
127
+ this.hasMoreBelow = signal(false, ...ngDevMode ? [{ debugName: "hasMoreBelow" }] : /* istanbul ignore next */ []);
128
+ this.hintBottom = signal(0, ...ngDevMode ? [{ debugName: "hintBottom" }] : /* istanbul ignore next */ []);
129
+ this.headerTpl = contentChild(RtScrollAreaHeaderDirective, ...ngDevMode ? [{ debugName: "headerTpl" }] : /* istanbul ignore next */ []);
130
+ this.contentTpl = contentChild(RtScrollAreaContentDirective, ...ngDevMode ? [{ debugName: "contentTpl" }] : /* istanbul ignore next */ []);
131
+ this.footerTpl = contentChild(RtScrollAreaFooterDirective, ...ngDevMode ? [{ debugName: "footerTpl" }] : /* istanbul ignore next */ []);
132
+ this.isScrollHintShown = input(false, {
133
+ ...ngDevMode ? { debugName: "isScrollHintShown" } : /* istanbul ignore next */ {},
134
+ transform: booleanAttribute
135
+ });
136
+ this.#destroyRef = inject(DestroyRef);
137
+ this.#sizeWatch = null;
138
+ this.#contentWatch = null;
139
+ this.#watchedBody = null;
140
+ this.#watchedFooter = null;
141
+ this.#isWatching = false;
142
+ this.#onSettled = () => this.onBodyScroll();
143
+ afterRenderEffect(() => {
144
+ const body = this.bodyRef()?.nativeElement ?? null;
145
+ const footer = this.footerRef()?.nativeElement ?? null;
146
+ if (!this.isScrollHintShown()) {
147
+ this.#unwatch();
148
+ this.hasMoreBelow.set(false);
149
+ return;
150
+ }
151
+ this.onBodyScroll();
152
+ if (!this.#isWatching || body !== this.#watchedBody || footer !== this.#watchedFooter) this.#watch(body, footer);
153
+ });
154
+ this.#destroyRef.onDestroy(() => this.#unwatch());
155
+ }
156
+ onScrollHintClick(event) {
157
+ event.preventDefault();
158
+ event.stopPropagation();
159
+ const body = this.bodyRef();
160
+ if (!body) return;
161
+ body.nativeElement.scrollTo({
162
+ top: body.nativeElement.scrollHeight,
163
+ behavior: "smooth"
164
+ });
165
+ }
166
+ onBodyScroll() {
167
+ if (!this.isScrollHintShown()) return;
168
+ this.#measureHintBottom();
169
+ const body = this.bodyRef();
170
+ if (!body) {
171
+ this.hasMoreBelow.set(false);
172
+ return;
173
+ }
174
+ const node = body.nativeElement;
175
+ this.hasMoreBelow.set(node.scrollHeight - node.scrollTop - node.clientHeight > BOTTOM_SLACK_PX);
176
+ }
177
+ #measureHintBottom() {
178
+ const footer = this.footerRef();
179
+ if (!footer) {
180
+ this.hintBottom.set(0);
181
+ return;
182
+ }
183
+ const node = footer.nativeElement;
184
+ const paddingTop = parseFloat(getComputedStyle(node).paddingTop) || 0;
185
+ this.hintBottom.set(Math.max(node.offsetHeight - paddingTop, 0));
186
+ }
187
+ #watch(body, footer) {
188
+ this.#unwatch();
189
+ this.#watchedBody = body;
190
+ this.#watchedFooter = footer;
191
+ this.#isWatching = true;
192
+ if (!body) return;
193
+ if (typeof ResizeObserver !== "undefined") {
194
+ this.#sizeWatch = new ResizeObserver(() => this.onBodyScroll());
195
+ this.#observeSizes();
196
+ }
197
+ if (typeof MutationObserver !== "undefined") {
198
+ this.#contentWatch = new MutationObserver(() => {
199
+ this.#observeSizes();
200
+ this.onBodyScroll();
201
+ });
202
+ this.#contentWatch.observe(body, {
203
+ childList: true,
204
+ subtree: true,
205
+ characterData: true
206
+ });
207
+ }
208
+ body.addEventListener("transitionend", this.#onSettled);
209
+ body.addEventListener("animationend", this.#onSettled);
210
+ }
211
+ #observeSizes() {
212
+ const watch = this.#sizeWatch;
213
+ const body = this.#watchedBody;
214
+ if (!watch || !body) return;
215
+ watch.disconnect();
216
+ watch.observe(body);
217
+ Array.from(body.children).forEach((child) => watch.observe(child));
218
+ if (this.#watchedFooter) watch.observe(this.#watchedFooter);
219
+ }
220
+ #unwatch() {
221
+ this.#watchedBody?.removeEventListener("transitionend", this.#onSettled);
222
+ this.#watchedBody?.removeEventListener("animationend", this.#onSettled);
223
+ this.#sizeWatch?.disconnect();
224
+ this.#sizeWatch = null;
225
+ this.#contentWatch?.disconnect();
226
+ this.#contentWatch = null;
227
+ this.#watchedBody = null;
228
+ this.#watchedFooter = null;
229
+ this.#isWatching = false;
230
+ }
231
+ static {
232
+ this.ɵfac = i0.ɵɵngDeclareFactory({
233
+ minVersion: "12.0.0",
234
+ version: "22.2.2",
235
+ ngImport: i0,
236
+ type: RtScrollAreaComponent,
237
+ deps: [],
238
+ target: i0.ɵɵFactoryTarget.Component
239
+ });
240
+ }
241
+ static {
242
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
243
+ minVersion: "17.0.0",
244
+ version: "22.2.2",
245
+ type: RtScrollAreaComponent,
246
+ isStandalone: true,
247
+ selector: "rt-scroll-area",
248
+ inputs: { isScrollHintShown: {
249
+ classPropertyName: "isScrollHintShown",
250
+ publicName: "isScrollHintShown",
251
+ isSignal: true,
252
+ isRequired: false,
253
+ transformFunction: null
254
+ } },
255
+ host: { classAttribute: "rt-scroll-area" },
256
+ queries: [
257
+ {
258
+ propertyName: "headerTpl",
259
+ first: true,
260
+ predicate: RtScrollAreaHeaderDirective,
261
+ descendants: true,
262
+ isSignal: true
263
+ },
264
+ {
265
+ propertyName: "contentTpl",
266
+ first: true,
267
+ predicate: RtScrollAreaContentDirective,
268
+ descendants: true,
269
+ isSignal: true
270
+ },
271
+ {
272
+ propertyName: "footerTpl",
273
+ first: true,
274
+ predicate: RtScrollAreaFooterDirective,
275
+ descendants: true,
276
+ isSignal: true
277
+ }
278
+ ],
279
+ viewQueries: [{
280
+ propertyName: "bodyRef",
281
+ first: true,
282
+ predicate: ["body"],
283
+ descendants: true,
284
+ isSignal: true
285
+ }, {
286
+ propertyName: "footerRef",
287
+ first: true,
288
+ predicate: ["foot"],
289
+ descendants: true,
290
+ isSignal: true
291
+ }],
292
+ ngImport: i0,
293
+ template: "<ng-container rtBlock=\"rt-scroll-area\">\n @if (headerTpl()) {\n <div rtElem=\"header\" qa-dataid=\"scroll-area-header\">\n <ng-container [ngTemplateOutlet]=\"headerTpl()?.templateRef ?? null\" />\n </div>\n }\n\n @if (contentTpl()) {\n <div #body rtElem=\"body\" qa-dataid=\"scroll-area-body\" (scroll)=\"onBodyScroll()\">\n <ng-container [ngTemplateOutlet]=\"contentTpl()?.templateRef ?? null\" />\n </div>\n }\n\n @if (footerTpl()) {\n <div #foot rtElem=\"footer\" qa-dataid=\"scroll-area-footer\">\n <ng-container [ngTemplateOutlet]=\"footerTpl()?.templateRef ?? null\" />\n </div>\n }\n\n <!--\n Признак того, что снизу осталось непоказанное: край списка, ровно обрезанный подвалом,\n читается как конец списка, и человек считает, что пункт пропал. Полоса живёт на хосте, а\n не внутри тела: тело обрезает всё по своему краю, и полоса обрывалась бы на верхнем\n отступе подвала — между ней и разделителем, который потребитель рисует первой строкой\n подвала, оставалась бы полоса чистого фона.\n -->\n @if (isScrollHintShown() && hasMoreBelow()) {\n <div rtElem=\"scroll-hint\" qa-dataid=\"scroll-area-scroll-hint\" [style.bottom.px]=\"hintBottom()\">\n <rt-icon\n rtElem=\"scroll-hint-icon\"\n qa-dataid=\"scroll-area-scroll-hint-icon\"\n name=\"chevron-down\"\n size=\"md\"\n role=\"button\"\n tabindex=\"0\"\n rtTooltipPlacement=\"top\"\n [rtTooltip]=\"t().uiScrollDown\"\n [attr.aria-label]=\"t().uiScrollDown\"\n (click)=\"onScrollHintClick($event)\"\n (keydown.enter)=\"onScrollHintClick($event)\" />\n </div>\n }\n</ng-container>\n",
294
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{:where(.rt-scroll-area){background:var(--rt-scroll-area-bg)}.rt-scroll-area{--rt-scroll-area-hint-height: var(--rt-space-10);--rt-scroll-area-hint-color: var(--rt-color-bg-surface);--rt-scroll-area-hint-radius: var(--rt-radius-full);--rt-scroll-area-header-padding: var(--rt-space-2) var(--rt-space-4);--rt-scroll-area-body-padding: var(--rt-space-4);--rt-scroll-area-footer-padding: var(--rt-space-4);--rt-scroll-area-bg: transparent;--rt-scroll-area-header-bg: transparent;--rt-scroll-area-body-bg: transparent;--rt-scroll-area-footer-bg: transparent;position:relative;display:flex;flex-direction:column;block-size:100%;inline-size:100%;min-block-size:0}.rt-scroll-area__header{flex:0 0 auto;padding:var(--rt-scroll-area-header-padding);background:var(--rt-scroll-area-header-bg)}.rt-scroll-area__body{display:flex;overflow:auto;flex:1 1 auto;flex-direction:column;padding:var(--rt-scroll-area-body-padding);background:var(--rt-scroll-area-body-bg);min-block-size:0}.rt-scroll-area__footer{flex:0 0 auto;padding:var(--rt-scroll-area-footer-padding);background:var(--rt-scroll-area-footer-bg)}.rt-scroll-area__scroll-hint{position:absolute;z-index:1;display:flex;align-items:flex-end;justify-content:center;background:linear-gradient(to bottom,rgb(from var(--rt-scroll-area-hint-color) r g b/0%),var(--rt-scroll-area-hint-color));block-size:var(--rt-scroll-area-hint-height);inset-inline:0;pointer-events:none}.rt-scroll-area__scroll-hint-icon{display:flex;align-items:center;justify-content:center;border-radius:var(--rt-scroll-area-hint-radius);background-color:var(--rt-color-bg-surface);color:var(--rt-color-text-muted);cursor:pointer;pointer-events:auto}}\n"],
295
+ dependencies: [
296
+ {
297
+ kind: "directive",
298
+ type: NgTemplateOutlet,
299
+ selector: "[ngTemplateOutlet]",
300
+ inputs: [
301
+ "ngTemplateOutletContext",
302
+ "ngTemplateOutlet",
303
+ "ngTemplateOutletInjector"
304
+ ]
305
+ },
306
+ {
307
+ kind: "component",
308
+ type: RtIconComponent,
309
+ selector: "rt-icon",
310
+ inputs: [
311
+ "name",
312
+ "glyph",
313
+ "glyphStrategy",
314
+ "size",
315
+ "color",
316
+ "fill",
317
+ "spin",
318
+ "rotate"
319
+ ]
320
+ },
321
+ {
322
+ kind: "directive",
323
+ type: RtTooltipDirective,
324
+ selector: "[rtTooltip]",
325
+ inputs: [
326
+ "rtTooltip",
327
+ "rtTooltipPlacement",
328
+ "rtTooltipWhenTruncated",
329
+ "rtTooltipHideOnClick"
330
+ ],
331
+ exportAs: ["rtTooltip"]
332
+ },
333
+ {
334
+ kind: "directive",
335
+ type: BlockDirective,
336
+ selector: "[rtBlock]",
337
+ inputs: ["rtMod"]
338
+ },
339
+ {
340
+ kind: "directive",
341
+ type: ElemDirective,
342
+ selector: "[rtElem]",
343
+ inputs: ["rtMod"]
344
+ }
345
+ ],
346
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
347
+ encapsulation: i0.ViewEncapsulation.None
348
+ });
349
+ }
350
+ };
351
+ i0.ɵɵngDeclareClassMetadata({
352
+ minVersion: "12.0.0",
353
+ version: "22.2.2",
354
+ ngImport: i0,
355
+ type: RtScrollAreaComponent,
356
+ decorators: [{
357
+ type: Component,
358
+ args: [{
359
+ selector: "rt-scroll-area",
360
+ changeDetection: ChangeDetectionStrategy.OnPush,
361
+ encapsulation: ViewEncapsulation.None,
362
+ imports: [
363
+ NgTemplateOutlet,
364
+ RtIconComponent,
365
+ RtTooltipDirective,
366
+ BlockDirective,
367
+ ElemDirective
368
+ ],
369
+ host: { class: BEM_BLOCK },
370
+ template: "<ng-container rtBlock=\"rt-scroll-area\">\n @if (headerTpl()) {\n <div rtElem=\"header\" qa-dataid=\"scroll-area-header\">\n <ng-container [ngTemplateOutlet]=\"headerTpl()?.templateRef ?? null\" />\n </div>\n }\n\n @if (contentTpl()) {\n <div #body rtElem=\"body\" qa-dataid=\"scroll-area-body\" (scroll)=\"onBodyScroll()\">\n <ng-container [ngTemplateOutlet]=\"contentTpl()?.templateRef ?? null\" />\n </div>\n }\n\n @if (footerTpl()) {\n <div #foot rtElem=\"footer\" qa-dataid=\"scroll-area-footer\">\n <ng-container [ngTemplateOutlet]=\"footerTpl()?.templateRef ?? null\" />\n </div>\n }\n\n <!--\n Признак того, что снизу осталось непоказанное: край списка, ровно обрезанный подвалом,\n читается как конец списка, и человек считает, что пункт пропал. Полоса живёт на хосте, а\n не внутри тела: тело обрезает всё по своему краю, и полоса обрывалась бы на верхнем\n отступе подвала — между ней и разделителем, который потребитель рисует первой строкой\n подвала, оставалась бы полоса чистого фона.\n -->\n @if (isScrollHintShown() && hasMoreBelow()) {\n <div rtElem=\"scroll-hint\" qa-dataid=\"scroll-area-scroll-hint\" [style.bottom.px]=\"hintBottom()\">\n <rt-icon\n rtElem=\"scroll-hint-icon\"\n qa-dataid=\"scroll-area-scroll-hint-icon\"\n name=\"chevron-down\"\n size=\"md\"\n role=\"button\"\n tabindex=\"0\"\n rtTooltipPlacement=\"top\"\n [rtTooltip]=\"t().uiScrollDown\"\n [attr.aria-label]=\"t().uiScrollDown\"\n (click)=\"onScrollHintClick($event)\"\n (keydown.enter)=\"onScrollHintClick($event)\" />\n </div>\n }\n</ng-container>\n",
371
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{:where(.rt-scroll-area){background:var(--rt-scroll-area-bg)}.rt-scroll-area{--rt-scroll-area-hint-height: var(--rt-space-10);--rt-scroll-area-hint-color: var(--rt-color-bg-surface);--rt-scroll-area-hint-radius: var(--rt-radius-full);--rt-scroll-area-header-padding: var(--rt-space-2) var(--rt-space-4);--rt-scroll-area-body-padding: var(--rt-space-4);--rt-scroll-area-footer-padding: var(--rt-space-4);--rt-scroll-area-bg: transparent;--rt-scroll-area-header-bg: transparent;--rt-scroll-area-body-bg: transparent;--rt-scroll-area-footer-bg: transparent;position:relative;display:flex;flex-direction:column;block-size:100%;inline-size:100%;min-block-size:0}.rt-scroll-area__header{flex:0 0 auto;padding:var(--rt-scroll-area-header-padding);background:var(--rt-scroll-area-header-bg)}.rt-scroll-area__body{display:flex;overflow:auto;flex:1 1 auto;flex-direction:column;padding:var(--rt-scroll-area-body-padding);background:var(--rt-scroll-area-body-bg);min-block-size:0}.rt-scroll-area__footer{flex:0 0 auto;padding:var(--rt-scroll-area-footer-padding);background:var(--rt-scroll-area-footer-bg)}.rt-scroll-area__scroll-hint{position:absolute;z-index:1;display:flex;align-items:flex-end;justify-content:center;background:linear-gradient(to bottom,rgb(from var(--rt-scroll-area-hint-color) r g b/0%),var(--rt-scroll-area-hint-color));block-size:var(--rt-scroll-area-hint-height);inset-inline:0;pointer-events:none}.rt-scroll-area__scroll-hint-icon{display:flex;align-items:center;justify-content:center;border-radius:var(--rt-scroll-area-hint-radius);background-color:var(--rt-color-bg-surface);color:var(--rt-color-text-muted);cursor:pointer;pointer-events:auto}}\n"]
372
+ }]
373
+ }],
374
+ ctorParameters: () => [],
375
+ propDecorators: {
376
+ bodyRef: [{
377
+ type: i0.ViewChild,
378
+ args: ["body", { isSignal: true }]
379
+ }],
380
+ footerRef: [{
381
+ type: i0.ViewChild,
382
+ args: ["foot", { isSignal: true }]
383
+ }],
384
+ headerTpl: [{
385
+ type: i0.ContentChild,
386
+ args: [i0.forwardRef(() => RtScrollAreaHeaderDirective), { isSignal: true }]
387
+ }],
388
+ contentTpl: [{
389
+ type: i0.ContentChild,
390
+ args: [i0.forwardRef(() => RtScrollAreaContentDirective), { isSignal: true }]
391
+ }],
392
+ footerTpl: [{
393
+ type: i0.ContentChild,
394
+ args: [i0.forwardRef(() => RtScrollAreaFooterDirective), { isSignal: true }]
395
+ }],
396
+ isScrollHintShown: [{
397
+ type: i0.Input,
398
+ args: [{
399
+ isSignal: true,
400
+ alias: "isScrollHintShown",
401
+ required: false
402
+ }]
403
+ }]
404
+ }
405
+ });
300
406
  export { RtScrollAreaComponent, RtScrollAreaContentDirective, RtScrollAreaFooterDirective, RtScrollAreaHeaderDirective };
301
- //# sourceMappingURL=rt-tools-ui-kit-v2-scroll-area.mjs.map
407
+
408
+ //# sourceMappingURL=rt-tools-ui-kit-v2-scroll-area.mjs.map