@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,214 +1,334 @@
1
- import * as i0 from '@angular/core';
2
- import { signal, ViewEncapsulation, ChangeDetectionStrategy, Component, inject, ElementRef, input, booleanAttribute, Directive } from '@angular/core';
3
- import { FocusMonitor } from '@angular/cdk/a11y';
4
- import { Overlay, ScrollStrategyOptions, OverlayConfig } from '@angular/cdk/overlay';
5
- import { ComponentPortal } from '@angular/cdk/portal';
6
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
- import { carryThemeScope, materialPresetClassesOf } from '@rt-tools/ui-kit-v2/core';
8
-
9
- const BEM_BLOCK = 'rt-tooltip';
10
- /**
11
- * Презентационная панель tooltip'а. Рендерится директивой `[rtTooltip]` через
12
- * CDK `ComponentPortal` в overlay; текст выставляется императивно
13
- * (`ref.instance.text.set(...)`) — отдельного `input()` нет, т.к. компонент
14
- * создаётся вручную, а не в шаблоне.
15
- *
16
- * `ViewEncapsulation.None` — стили префиксованы `.rt-tooltip` (единообразно с
17
- * остальным common/ui). `role="tooltip"` — вспомогательный ярлык для AT.
18
- */
19
- class RtTooltipComponent {
20
- constructor() {
21
- this.text = signal('', /* @ts-ignore */
22
- ...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
23
- }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: RtTooltipComponent, isStandalone: true, selector: "rt-tooltip", host: { attributes: { "role": "tooltip" }, classAttribute: "rt-tooltip" }, ngImport: i0, template: '{{ text() }}', isInline: true, styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-tooltip{--rt-tooltip-radius: var(--rt-overlay-tooltip-radius);--rt-tooltip-shadow: var(--rt-overlay-tooltip-shadow);display:block;max-width:240px;padding:var(--rt-space-xs) var(--rt-space-sm);border-radius:var(--rt-tooltip-radius);background:var(--rt-color-bg-inverse);box-shadow:var(--rt-tooltip-shadow);color:var(--rt-color-text-inverse);font-size:var(--rt-text-xs);line-height:var(--rt-leading-snug);overflow-wrap:anywhere;pointer-events:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
26
- }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtTooltipComponent, decorators: [{
28
- type: Component,
29
- args: [{ selector: 'rt-tooltip', template: '{{ text() }}', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
30
- class: BEM_BLOCK,
31
- role: 'tooltip',
32
- }, styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-tooltip{--rt-tooltip-radius: var(--rt-overlay-tooltip-radius);--rt-tooltip-shadow: var(--rt-overlay-tooltip-shadow);display:block;max-width:240px;padding:var(--rt-space-xs) var(--rt-space-sm);border-radius:var(--rt-tooltip-radius);background:var(--rt-color-bg-inverse);box-shadow:var(--rt-tooltip-shadow);color:var(--rt-color-text-inverse);font-size:var(--rt-text-xs);line-height:var(--rt-leading-snug);overflow-wrap:anywhere;pointer-events:none}}\n"] }]
33
- }] });
34
-
35
- /** Зазор между подсказкой и host'ом. */
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, Directive, ElementRef, ViewEncapsulation, booleanAttribute, effect, inject, input, signal } from "@angular/core";
3
+ import { FocusMonitor } from "@angular/cdk/a11y";
4
+ import { Overlay, OverlayConfig, ScrollStrategyOptions } from "@angular/cdk/overlay";
5
+ import { ComponentPortal } from "@angular/cdk/portal";
6
+ import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
7
+ import { carryThemeScope, materialPresetClassesOf } from "@rt-tools/ui-kit-v2/core";
8
+ const BEM_BLOCK = "rt-tooltip";
9
+ var RtTooltipComponent = class RtTooltipComponent {
10
+ constructor() {
11
+ this.text = signal("", ...ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []);
12
+ }
13
+ static {
14
+ this.ɵfac = i0.ɵɵngDeclareFactory({
15
+ minVersion: "12.0.0",
16
+ version: "22.2.2",
17
+ ngImport: i0,
18
+ type: RtTooltipComponent,
19
+ deps: [],
20
+ target: i0.ɵɵFactoryTarget.Component
21
+ });
22
+ }
23
+ static {
24
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
25
+ minVersion: "14.0.0",
26
+ version: "22.2.2",
27
+ type: RtTooltipComponent,
28
+ isStandalone: true,
29
+ selector: "rt-tooltip",
30
+ host: {
31
+ attributes: { "role": "tooltip" },
32
+ classAttribute: "rt-tooltip"
33
+ },
34
+ ngImport: i0,
35
+ template: "{{ text() }}",
36
+ isInline: true,
37
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-tooltip{--rt-tooltip-radius: var(--rt-overlay-tooltip-radius);--rt-tooltip-shadow: var(--rt-overlay-tooltip-shadow);display:block;max-width:240px;padding:var(--rt-space-xs) var(--rt-space-sm);border-radius:var(--rt-tooltip-radius);background:var(--rt-color-bg-inverse);box-shadow:var(--rt-tooltip-shadow);color:var(--rt-color-text-inverse);font-size:var(--rt-text-xs);line-height:var(--rt-leading-snug);overflow-wrap:anywhere;pointer-events:none}}\n"],
38
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
39
+ encapsulation: i0.ViewEncapsulation.None
40
+ });
41
+ }
42
+ };
43
+ i0.ɵɵngDeclareClassMetadata({
44
+ minVersion: "12.0.0",
45
+ version: "22.2.2",
46
+ ngImport: i0,
47
+ type: RtTooltipComponent,
48
+ decorators: [{
49
+ type: Component,
50
+ args: [{
51
+ selector: "rt-tooltip",
52
+ template: "{{ text() }}",
53
+ changeDetection: ChangeDetectionStrategy.OnPush,
54
+ encapsulation: ViewEncapsulation.None,
55
+ host: {
56
+ class: BEM_BLOCK,
57
+ role: "tooltip"
58
+ },
59
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-tooltip{--rt-tooltip-radius: var(--rt-overlay-tooltip-radius);--rt-tooltip-shadow: var(--rt-overlay-tooltip-shadow);display:block;max-width:240px;padding:var(--rt-space-xs) var(--rt-space-sm);border-radius:var(--rt-tooltip-radius);background:var(--rt-color-bg-inverse);box-shadow:var(--rt-tooltip-shadow);color:var(--rt-color-text-inverse);font-size:var(--rt-text-xs);line-height:var(--rt-leading-snug);overflow-wrap:anywhere;pointer-events:none}}\n"]
60
+ }]
61
+ }]
62
+ });
36
63
  const TOOLTIP_GAP_PX = 6;
37
64
  const POSITION_BY_PLACEMENT = {
38
- top: { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -TOOLTIP_GAP_PX },
39
- bottom: { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: TOOLTIP_GAP_PX },
40
- left: { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -TOOLTIP_GAP_PX },
41
- right: { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: TOOLTIP_GAP_PX },
65
+ top: {
66
+ originX: "center",
67
+ originY: "top",
68
+ overlayX: "center",
69
+ overlayY: "bottom",
70
+ offsetY: -6
71
+ },
72
+ bottom: {
73
+ originX: "center",
74
+ originY: "bottom",
75
+ overlayX: "center",
76
+ overlayY: "top",
77
+ offsetY: TOOLTIP_GAP_PX
78
+ },
79
+ left: {
80
+ originX: "start",
81
+ originY: "center",
82
+ overlayX: "end",
83
+ overlayY: "center",
84
+ offsetX: -6
85
+ },
86
+ right: {
87
+ originX: "end",
88
+ originY: "center",
89
+ overlayX: "start",
90
+ overlayY: "center",
91
+ offsetX: TOOLTIP_GAP_PX
92
+ }
42
93
  };
43
94
  const FALLBACKS = {
44
- top: ['top', 'bottom'],
45
- bottom: ['bottom', 'top'],
46
- left: ['left', 'right', 'top', 'bottom'],
47
- right: ['right', 'left', 'top', 'bottom'],
95
+ top: ["top", "bottom"],
96
+ bottom: ["bottom", "top"],
97
+ left: [
98
+ "left",
99
+ "right",
100
+ "top",
101
+ "bottom"
102
+ ],
103
+ right: [
104
+ "right",
105
+ "left",
106
+ "top",
107
+ "bottom"
108
+ ]
48
109
  };
49
- /**
50
- * Позиции подсказки по порядку попыток: заданная сторона, противоположная, а у боковой ещё
51
- * верх и низ — на узком экране сбоку не помещается ни одна сторона, и подсказка, придвинутая
52
- * к краю, легла бы на сам host. Бока заданы логическими `start`/`end`: в письме справа налево
53
- * `left` встаёт справа — как и вся раскладка кита.
54
- */
55
110
  function tooltipPositions(placement) {
56
- return FALLBACKS[placement].map((side) => ({ ...POSITION_BY_PLACEMENT[side] }));
111
+ return FALLBACKS[placement].map((side) => ({ ...POSITION_BY_PLACEMENT[side] }));
57
112
  }
58
- /**
59
- * Текст узла обрезан: содержимое шире видимой коробки. Высота не судится — узел с видимым
60
- * переполнением по высоте показывает всё, и его подсказка только повторяла бы текст.
61
- */
62
113
  function isTooltipTextCut(box) {
63
- return box.scrollWidth > box.clientWidth;
114
+ return box.scrollWidth > box.clientWidth;
64
115
  }
65
-
66
116
  const SHOW_DELAY_MS = 300;
67
117
  const VIEWPORT_MARGIN = 8;
68
- /**
69
- * Tooltip-директива поверх CDK Overlay. Показывает короткую подсказку
70
- * (`rtTooltip` = строка) на hover/focus host'а. Движок — CDK `flexibleConnectedTo`
71
- * (авто-flip у края viewport, reposition при скролле), так что подсказка не
72
- * режется `overflow: hidden` предками (таблицы, aside, карточки).
73
- *
74
- * Триггеры: `mouseenter` и фокус с клавиатуры показывают (с задержкой `SHOW_DELAY_MS`),
75
- * `mouseleave`/`focusout`/`click` прячут. Фокус, поставленный мышью или кодом, подсказку не
76
- * показывает, как у Material: меню возвращает фокус кнопке после выбора пункта мышью, и
77
- * подсказка кнопки всплывала поверх того, что пункт открыл. Пустой текст → no-op (директива
78
- * выключена), поэтому её можно безусловно вешать на icon-кнопки и включать
79
- * выставлением строки.
80
- *
81
- * @example
82
- * ```html
83
- * <rt-icon-button icon="ico-trash" ariaLabel="Удалить" tooltip="Удалить" />
84
- * <button rtButton [rtTooltip]="'Подсказка'">…</button>
85
- * ```
86
- */
87
- class RtTooltipDirective {
88
- #overlay;
89
- #elementRef;
90
- #scrollStrategies;
91
- #focusMonitor;
92
- #overlayRef;
93
- #tooltipRef;
94
- #showTimer;
95
- constructor() {
96
- this.#overlay = inject(Overlay);
97
- this.#elementRef = inject(ElementRef);
98
- this.#scrollStrategies = inject(ScrollStrategyOptions);
99
- this.#focusMonitor = inject(FocusMonitor);
100
- this.#overlayRef = null;
101
- this.#tooltipRef = null;
102
- this.#showTimer = null;
103
- /**
104
- * Текст подсказки. Принимает `null`/`undefined` (частый результат date-пайпа
105
- * или nullable-полей модели) и нормализует их в пустую строку — иначе
106
- * биндинги вида `value | date` ломали бы строгую типизацию шаблона. Пустая
107
- * строка → no-op (директива выключена).
108
- */
109
- this.text = input('', { ...(ngDevMode ? { debugName: "text" } : /* istanbul ignore next */ {}), alias: 'rtTooltip',
110
- transform: (value) => value ?? '' });
111
- /** Сторона подсказки. Не задана — сверху, а под материальным набором снизу, как у первого кита. */
112
- this.placement = input(null, { ...(ngDevMode ? { debugName: "placement" } : /* istanbul ignore next */ {}), alias: 'rtTooltipPlacement' });
113
- /**
114
- * Подсказка только у обрезанного текста: хост меряется в момент показа, и подсказка не
115
- * появляется, пока его содержимое помещается целиком. Мерить заранее не нужно — показ идёт
116
- * только отсюда, и признак в эту минуту всегда свежий.
117
- */
118
- this.whenTruncated = input(false, { ...(ngDevMode ? { debugName: "whenTruncated" } : /* istanbul ignore next */ {}), alias: 'rtTooltipWhenTruncated',
119
- transform: booleanAttribute });
120
- this.#focusMonitor
121
- .monitor(this.#elementRef, true)
122
- .pipe(takeUntilDestroyed())
123
- .subscribe((origin) => {
124
- if (origin === 'keyboard') {
125
- this.show();
126
- }
127
- });
128
- }
129
- ngOnDestroy() {
130
- this.#focusMonitor.stopMonitoring(this.#elementRef);
131
- this.#clearTimer();
132
- this.#disposeOverlay();
133
- }
134
- show() {
135
- if (this.text().trim() === '' || this.#tooltipRef !== null) {
136
- return;
137
- }
138
- this.#clearTimer();
139
- this.#showTimer = setTimeout(() => this.#attach(), SHOW_DELAY_MS);
140
- }
141
- hide() {
142
- this.#clearTimer();
143
- this.#overlayRef?.detach();
144
- this.#tooltipRef = null;
145
- }
146
- #attach() {
147
- if (this.text().trim() === '' || (this.whenTruncated() && !isTooltipTextCut(this.#elementRef.nativeElement))) {
148
- return;
149
- }
150
- const overlayRef = this.#ensureOverlay();
151
- // Коробка переживает закрытие, а кусок темы вокруг host'а мог смениться — переносим на каждом показе.
152
- carryThemeScope(overlayRef.overlayElement, this.#elementRef.nativeElement);
153
- const portal = new ComponentPortal(RtTooltipComponent);
154
- this.#tooltipRef = overlayRef.attach(portal);
155
- this.#tooltipRef.instance.text.set(this.text());
156
- this.#tooltipRef.changeDetectorRef.markForCheck();
157
- }
158
- #ensureOverlay() {
159
- if (this.#overlayRef !== null) {
160
- return this.#overlayRef;
161
- }
162
- const presetClasses = materialPresetClassesOf(this.#elementRef.nativeElement);
163
- const placement = this.placement() ?? (presetClasses.length > 0 ? 'bottom' : 'top');
164
- const positions = tooltipPositions(placement);
165
- const positionStrategy = this.#overlay
166
- .position()
167
- .flexibleConnectedTo(this.#elementRef)
168
- .withPush(true)
169
- .withViewportMargin(VIEWPORT_MARGIN)
170
- .withFlexibleDimensions(false)
171
- .withPositions(positions);
172
- const config = new OverlayConfig({
173
- positionStrategy,
174
- scrollStrategy: this.#scrollStrategies.reposition(),
175
- hasBackdrop: false,
176
- panelClass: ['rt-tooltip-panel', ...presetClasses],
177
- });
178
- this.#overlayRef = this.#overlay.create(config);
179
- return this.#overlayRef;
180
- }
181
- #clearTimer() {
182
- if (this.#showTimer !== null) {
183
- clearTimeout(this.#showTimer);
184
- this.#showTimer = null;
185
- }
186
- }
187
- #disposeOverlay() {
188
- this.#overlayRef?.dispose();
189
- this.#overlayRef = null;
190
- this.#tooltipRef = null;
191
- }
192
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtTooltipDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
193
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: RtTooltipDirective, isStandalone: true, selector: "[rtTooltip]", inputs: { text: { classPropertyName: "text", publicName: "rtTooltip", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "rtTooltipPlacement", isSignal: true, isRequired: false, transformFunction: null }, whenTruncated: { classPropertyName: "whenTruncated", publicName: "rtTooltipWhenTruncated", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "show()", "mouseleave": "hide()", "focusout": "hide()", "click": "hide()" } }, exportAs: ["rtTooltip"], ngImport: i0 }); }
194
- }
195
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtTooltipDirective, decorators: [{
196
- type: Directive,
197
- args: [{
198
- selector: '[rtTooltip]',
199
- exportAs: 'rtTooltip',
200
- host: {
201
- '(mouseenter)': 'show()',
202
- '(mouseleave)': 'hide()',
203
- '(focusout)': 'hide()',
204
- '(click)': 'hide()',
205
- },
206
- }]
207
- }], ctorParameters: () => [], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "rtTooltip", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "rtTooltipPlacement", required: false }] }], whenTruncated: [{ type: i0.Input, args: [{ isSignal: true, alias: "rtTooltipWhenTruncated", required: false }] }] } });
208
-
209
- /**
210
- * Generated bundle index. Do not edit.
211
- */
212
-
118
+ var RtTooltipDirective = class RtTooltipDirective {
119
+ #overlay;
120
+ #elementRef;
121
+ #scrollStrategies;
122
+ #focusMonitor;
123
+ #overlayRef;
124
+ #tooltipRef;
125
+ #showTimer;
126
+ constructor() {
127
+ this.#overlay = inject(Overlay);
128
+ this.#elementRef = inject(ElementRef);
129
+ this.#scrollStrategies = inject(ScrollStrategyOptions);
130
+ this.#focusMonitor = inject(FocusMonitor);
131
+ this.#overlayRef = null;
132
+ this.#tooltipRef = null;
133
+ this.#showTimer = null;
134
+ this.text = input("", {
135
+ ...ngDevMode ? { debugName: "text" } : /* istanbul ignore next */ {},
136
+ alias: "rtTooltip",
137
+ transform: (value) => value ?? ""
138
+ });
139
+ this.placement = input(null, {
140
+ ...ngDevMode ? { debugName: "placement" } : /* istanbul ignore next */ {},
141
+ alias: "rtTooltipPlacement"
142
+ });
143
+ this.whenTruncated = input(false, {
144
+ ...ngDevMode ? { debugName: "whenTruncated" } : /* istanbul ignore next */ {},
145
+ alias: "rtTooltipWhenTruncated",
146
+ transform: booleanAttribute
147
+ });
148
+ this.hideOnClick = input(true, {
149
+ ...ngDevMode ? { debugName: "hideOnClick" } : /* istanbul ignore next */ {},
150
+ alias: "rtTooltipHideOnClick",
151
+ transform: booleanAttribute
152
+ });
153
+ effect(() => this.#syncText(this.text()));
154
+ this.#focusMonitor.monitor(this.#elementRef, true).pipe(takeUntilDestroyed()).subscribe((origin) => {
155
+ if (origin === "keyboard") this.show();
156
+ });
157
+ }
158
+ ngOnDestroy() {
159
+ this.#focusMonitor.stopMonitoring(this.#elementRef);
160
+ this.#clearTimer();
161
+ this.#disposeOverlay();
162
+ }
163
+ show() {
164
+ if (this.text().trim() === "" || this.#tooltipRef !== null) return;
165
+ this.#clearTimer();
166
+ this.#showTimer = setTimeout(() => this.#attach(), SHOW_DELAY_MS);
167
+ }
168
+ hide() {
169
+ this.#clearTimer();
170
+ this.#overlayRef?.detach();
171
+ this.#tooltipRef = null;
172
+ }
173
+ onClick() {
174
+ if (this.hideOnClick() || this.#tooltipRef === null) this.hide();
175
+ }
176
+ #syncText(text) {
177
+ if (this.#tooltipRef === null) return;
178
+ if (text.trim() === "") {
179
+ this.hide();
180
+ return;
181
+ }
182
+ this.#tooltipRef.instance.text.set(text);
183
+ this.#tooltipRef.changeDetectorRef.markForCheck();
184
+ this.#overlayRef?.updatePosition();
185
+ }
186
+ #attach() {
187
+ if (this.text().trim() === "" || this.whenTruncated() && !isTooltipTextCut(this.#elementRef.nativeElement)) return;
188
+ const overlayRef = this.#ensureOverlay();
189
+ carryThemeScope(overlayRef.overlayElement, this.#elementRef.nativeElement);
190
+ const portal = new ComponentPortal(RtTooltipComponent);
191
+ this.#tooltipRef = overlayRef.attach(portal);
192
+ this.#tooltipRef.instance.text.set(this.text());
193
+ this.#tooltipRef.changeDetectorRef.markForCheck();
194
+ }
195
+ #ensureOverlay() {
196
+ if (this.#overlayRef !== null) return this.#overlayRef;
197
+ const presetClasses = materialPresetClassesOf(this.#elementRef.nativeElement);
198
+ const positions = tooltipPositions(this.placement() ?? (presetClasses.length > 0 ? "bottom" : "top"));
199
+ const positionStrategy = this.#overlay.position().flexibleConnectedTo(this.#elementRef).withPush(true).withViewportMargin(VIEWPORT_MARGIN).withFlexibleDimensions(false).withPositions(positions);
200
+ const config = new OverlayConfig({
201
+ positionStrategy,
202
+ scrollStrategy: this.#scrollStrategies.reposition(),
203
+ hasBackdrop: false,
204
+ panelClass: ["rt-tooltip-panel", ...presetClasses]
205
+ });
206
+ this.#overlayRef = this.#overlay.create(config);
207
+ return this.#overlayRef;
208
+ }
209
+ #clearTimer() {
210
+ if (this.#showTimer !== null) {
211
+ clearTimeout(this.#showTimer);
212
+ this.#showTimer = null;
213
+ }
214
+ }
215
+ #disposeOverlay() {
216
+ this.#overlayRef?.dispose();
217
+ this.#overlayRef = null;
218
+ this.#tooltipRef = null;
219
+ }
220
+ static {
221
+ this.ɵfac = i0.ɵɵngDeclareFactory({
222
+ minVersion: "12.0.0",
223
+ version: "22.2.2",
224
+ ngImport: i0,
225
+ type: RtTooltipDirective,
226
+ deps: [],
227
+ target: i0.ɵɵFactoryTarget.Directive
228
+ });
229
+ }
230
+ static {
231
+ this.ɵdir = i0.ɵɵngDeclareDirective({
232
+ minVersion: "17.1.0",
233
+ version: "22.2.2",
234
+ type: RtTooltipDirective,
235
+ isStandalone: true,
236
+ selector: "[rtTooltip]",
237
+ inputs: {
238
+ text: {
239
+ classPropertyName: "text",
240
+ publicName: "rtTooltip",
241
+ isSignal: true,
242
+ isRequired: false,
243
+ transformFunction: null
244
+ },
245
+ placement: {
246
+ classPropertyName: "placement",
247
+ publicName: "rtTooltipPlacement",
248
+ isSignal: true,
249
+ isRequired: false,
250
+ transformFunction: null
251
+ },
252
+ whenTruncated: {
253
+ classPropertyName: "whenTruncated",
254
+ publicName: "rtTooltipWhenTruncated",
255
+ isSignal: true,
256
+ isRequired: false,
257
+ transformFunction: null
258
+ },
259
+ hideOnClick: {
260
+ classPropertyName: "hideOnClick",
261
+ publicName: "rtTooltipHideOnClick",
262
+ isSignal: true,
263
+ isRequired: false,
264
+ transformFunction: null
265
+ }
266
+ },
267
+ host: { listeners: {
268
+ "mouseenter": "show()",
269
+ "mouseleave": "hide()",
270
+ "focusout": "hide()",
271
+ "click": "onClick()"
272
+ } },
273
+ exportAs: ["rtTooltip"],
274
+ ngImport: i0
275
+ });
276
+ }
277
+ };
278
+ i0.ɵɵngDeclareClassMetadata({
279
+ minVersion: "12.0.0",
280
+ version: "22.2.2",
281
+ ngImport: i0,
282
+ type: RtTooltipDirective,
283
+ decorators: [{
284
+ type: Directive,
285
+ args: [{
286
+ selector: "[rtTooltip]",
287
+ exportAs: "rtTooltip",
288
+ host: {
289
+ "(mouseenter)": "show()",
290
+ "(mouseleave)": "hide()",
291
+ "(focusout)": "hide()",
292
+ "(click)": "onClick()"
293
+ }
294
+ }]
295
+ }],
296
+ ctorParameters: () => [],
297
+ propDecorators: {
298
+ text: [{
299
+ type: i0.Input,
300
+ args: [{
301
+ isSignal: true,
302
+ alias: "rtTooltip",
303
+ required: false
304
+ }]
305
+ }],
306
+ placement: [{
307
+ type: i0.Input,
308
+ args: [{
309
+ isSignal: true,
310
+ alias: "rtTooltipPlacement",
311
+ required: false
312
+ }]
313
+ }],
314
+ whenTruncated: [{
315
+ type: i0.Input,
316
+ args: [{
317
+ isSignal: true,
318
+ alias: "rtTooltipWhenTruncated",
319
+ required: false
320
+ }]
321
+ }],
322
+ hideOnClick: [{
323
+ type: i0.Input,
324
+ args: [{
325
+ isSignal: true,
326
+ alias: "rtTooltipHideOnClick",
327
+ required: false
328
+ }]
329
+ }]
330
+ }
331
+ });
213
332
  export { RtTooltipComponent, RtTooltipDirective };
214
- //# sourceMappingURL=rt-tools-ui-kit-v2-tooltip.mjs.map
333
+
334
+ //# sourceMappingURL=rt-tools-ui-kit-v2-tooltip.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rt-tools-ui-kit-v2-tooltip.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/tooltip/rt-tooltip.component.ts","../../../projects/ui-kit-v2/src/lib/components/tooltip/rt-tooltip.logic.ts","../../../projects/ui-kit-v2/src/lib/components/tooltip/rt-tooltip.directive.ts","../../../projects/ui-kit-v2/src/lib/components/tooltip/rt-tools-ui-kit-v2-tooltip.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, signal, ViewEncapsulation, WritableSignal } from '@angular/core';\n\nconst BEM_BLOCK: string = 'rt-tooltip';\n\n/**\n * Презентационная панель tooltip'а. Рендерится директивой `[rtTooltip]` через\n * CDK `ComponentPortal` в overlay; текст выставляется императивно\n * (`ref.instance.text.set(...)`) — отдельного `input()` нет, т.к. компонент\n * создаётся вручную, а не в шаблоне.\n *\n * `ViewEncapsulation.None` — стили префиксованы `.rt-tooltip` (единообразно с\n * остальным common/ui). `role=\"tooltip\"` — вспомогательный ярлык для AT.\n */\n@Component({\n selector: 'rt-tooltip',\n template: '{{ text() }}',\n styleUrl: './rt-tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: BEM_BLOCK,\n role: 'tooltip',\n },\n})\nexport class RtTooltipComponent {\n public readonly text: WritableSignal<string> = signal<string>('');\n}\n","import { ConnectedPosition } from '@angular/cdk/overlay';\n\nimport { IRtTooltip } from './rt-tooltip.model';\n\n/** Зазор между подсказкой и host'ом. */\nconst TOOLTIP_GAP_PX: number = 6;\n\nconst POSITION_BY_PLACEMENT: Readonly<Record<IRtTooltip.Placement, ConnectedPosition>> = {\n top: { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -TOOLTIP_GAP_PX },\n bottom: { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: TOOLTIP_GAP_PX },\n left: { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -TOOLTIP_GAP_PX },\n right: { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: TOOLTIP_GAP_PX },\n};\n\nconst FALLBACKS: Readonly<Record<IRtTooltip.Placement, readonly IRtTooltip.Placement[]>> = {\n top: ['top', 'bottom'],\n bottom: ['bottom', 'top'],\n left: ['left', 'right', 'top', 'bottom'],\n right: ['right', 'left', 'top', 'bottom'],\n};\n\n/**\n * Позиции подсказки по порядку попыток: заданная сторона, противоположная, а у боковой ещё\n * верх и низ — на узком экране сбоку не помещается ни одна сторона, и подсказка, придвинутая\n * к краю, легла бы на сам host. Бока заданы логическими `start`/`end`: в письме справа налево\n * `left` встаёт справа — как и вся раскладка кита.\n */\nexport function tooltipPositions(placement: IRtTooltip.Placement): ConnectedPosition[] {\n return FALLBACKS[placement].map((side: IRtTooltip.Placement): ConnectedPosition => ({ ...POSITION_BY_PLACEMENT[side] }));\n}\n\n/** Размеры узла, по которым судят об обрезке: видимая ширина и ширина содержимого. */\nexport interface IRtTooltipBox {\n readonly clientWidth: number;\n readonly scrollWidth: number;\n}\n\n/**\n * Текст узла обрезан: содержимое шире видимой коробки. Высота не судится — узел с видимым\n * переполнением по высоте показывает всё, и его подсказка только повторяла бы текст.\n */\nexport function isTooltipTextCut(box: IRtTooltipBox): boolean {\n return box.scrollWidth > box.clientWidth;\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport {\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayRef,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n booleanAttribute,\n ComponentRef,\n Directive,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n OnDestroy,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { carryThemeScope, materialPresetClassesOf } from '@rt-tools/ui-kit-v2/core';\nimport { RtTooltipComponent } from './rt-tooltip.component';\nimport { isTooltipTextCut, tooltipPositions } from './rt-tooltip.logic';\nimport { IRtTooltip } from './rt-tooltip.model';\n\nconst SHOW_DELAY_MS: number = 300;\nconst VIEWPORT_MARGIN: number = 8;\n\n/**\n * Tooltip-директива поверх CDK Overlay. Показывает короткую подсказку\n * (`rtTooltip` = строка) на hover/focus host'а. Движок — CDK `flexibleConnectedTo`\n * (авто-flip у края viewport, reposition при скролле), так что подсказка не\n * режется `overflow: hidden` предками (таблицы, aside, карточки).\n *\n * Триггеры: `mouseenter` и фокус с клавиатуры показывают (с задержкой `SHOW_DELAY_MS`),\n * `mouseleave`/`focusout`/`click` прячут. Фокус, поставленный мышью или кодом, подсказку не\n * показывает, как у Material: меню возвращает фокус кнопке после выбора пункта мышью, и\n * подсказка кнопки всплывала поверх того, что пункт открыл. Пустой текст → no-op (директива\n * выключена), поэтому её можно безусловно вешать на icon-кнопки и включать\n * выставлением строки.\n *\n * @example\n * ```html\n * <rt-icon-button icon=\"ico-trash\" ariaLabel=\"Удалить\" tooltip=\"Удалить\" />\n * <button rtButton [rtTooltip]=\"'Подсказка'\">…</button>\n * ```\n */\n@Directive({\n selector: '[rtTooltip]',\n exportAs: 'rtTooltip',\n host: {\n '(mouseenter)': 'show()',\n '(mouseleave)': 'hide()',\n '(focusout)': 'hide()',\n '(click)': 'hide()',\n },\n})\nexport class RtTooltipDirective implements OnDestroy {\n readonly #overlay: Overlay = inject(Overlay);\n readonly #elementRef: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #scrollStrategies: ScrollStrategyOptions = inject(ScrollStrategyOptions);\n readonly #focusMonitor: FocusMonitor = inject(FocusMonitor);\n\n #overlayRef: OverlayRef | null = null;\n #tooltipRef: ComponentRef<RtTooltipComponent> | null = null;\n #showTimer: ReturnType<typeof setTimeout> | null = null;\n\n /**\n * Текст подсказки. Принимает `null`/`undefined` (частый результат date-пайпа\n * или nullable-полей модели) и нормализует их в пустую строку — иначе\n * биндинги вида `value | date` ломали бы строгую типизацию шаблона. Пустая\n * строка → no-op (директива выключена).\n */\n public readonly text: InputSignalWithTransform<string, string | null | undefined> = input<string, string | null | undefined>('', {\n alias: 'rtTooltip',\n transform: (value: string | null | undefined): string => value ?? '',\n });\n\n /** Сторона подсказки. Не задана — сверху, а под материальным набором снизу, как у первого кита. */\n public readonly placement: InputSignal<IRtTooltip.Placement | null> = input<IRtTooltip.Placement | null>(null, {\n alias: 'rtTooltipPlacement',\n });\n\n /**\n * Подсказка только у обрезанного текста: хост меряется в момент показа, и подсказка не\n * появляется, пока его содержимое помещается целиком. Мерить заранее не нужно — показ идёт\n * только отсюда, и признак в эту минуту всегда свежий.\n */\n public readonly whenTruncated: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n alias: 'rtTooltipWhenTruncated',\n transform: booleanAttribute,\n });\n\n constructor() {\n this.#focusMonitor\n .monitor(this.#elementRef, true)\n .pipe(takeUntilDestroyed())\n .subscribe((origin: FocusOrigin): void => {\n if (origin === 'keyboard') {\n this.show();\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.#focusMonitor.stopMonitoring(this.#elementRef);\n this.#clearTimer();\n this.#disposeOverlay();\n }\n\n protected show(): void {\n if (this.text().trim() === '' || this.#tooltipRef !== null) {\n return;\n }\n this.#clearTimer();\n this.#showTimer = setTimeout((): void => this.#attach(), SHOW_DELAY_MS);\n }\n\n protected hide(): void {\n this.#clearTimer();\n this.#overlayRef?.detach();\n this.#tooltipRef = null;\n }\n\n #attach(): void {\n if (this.text().trim() === '' || (this.whenTruncated() && !isTooltipTextCut(this.#elementRef.nativeElement))) {\n return;\n }\n const overlayRef: OverlayRef = this.#ensureOverlay();\n // Коробка переживает закрытие, а кусок темы вокруг host'а мог смениться — переносим на каждом показе.\n carryThemeScope(overlayRef.overlayElement, this.#elementRef.nativeElement);\n const portal: ComponentPortal<RtTooltipComponent> = new ComponentPortal(RtTooltipComponent);\n this.#tooltipRef = overlayRef.attach(portal);\n this.#tooltipRef.instance.text.set(this.text());\n this.#tooltipRef.changeDetectorRef.markForCheck();\n }\n\n #ensureOverlay(): OverlayRef {\n if (this.#overlayRef !== null) {\n return this.#overlayRef;\n }\n const presetClasses: string[] = materialPresetClassesOf(this.#elementRef.nativeElement);\n const placement: IRtTooltip.Placement = this.placement() ?? (presetClasses.length > 0 ? 'bottom' : 'top');\n const positions: ConnectedPosition[] = tooltipPositions(placement);\n\n const positionStrategy: FlexibleConnectedPositionStrategy = this.#overlay\n .position()\n .flexibleConnectedTo(this.#elementRef)\n .withPush(true)\n .withViewportMargin(VIEWPORT_MARGIN)\n .withFlexibleDimensions(false)\n .withPositions(positions);\n\n const config: OverlayConfig = new OverlayConfig({\n positionStrategy,\n scrollStrategy: this.#scrollStrategies.reposition(),\n hasBackdrop: false,\n panelClass: ['rt-tooltip-panel', ...presetClasses],\n });\n this.#overlayRef = this.#overlay.create(config);\n return this.#overlayRef;\n }\n\n #clearTimer(): void {\n if (this.#showTimer !== null) {\n clearTimeout(this.#showTimer);\n this.#showTimer = null;\n }\n }\n\n #disposeOverlay(): void {\n this.#overlayRef?.dispose();\n this.#overlayRef = null;\n this.#tooltipRef = null;\n }\n}\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-tooltip.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/tooltip/rt-tooltip.component.ts","../../../projects/ui-kit-v2/src/lib/components/tooltip/rt-tooltip.logic.ts","../../../projects/ui-kit-v2/src/lib/components/tooltip/rt-tooltip.directive.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, signal, ViewEncapsulation, WritableSignal } from '@angular/core';\n\nconst BEM_BLOCK: string = 'rt-tooltip';\n\n/**\n * Презентационная панель tooltip'а. Рендерится директивой `[rtTooltip]` через\n * CDK `ComponentPortal` в overlay; текст выставляется императивно\n * (`ref.instance.text.set(...)`) — отдельного `input()` нет, т.к. компонент\n * создаётся вручную, а не в шаблоне.\n *\n * `ViewEncapsulation.None` — стили префиксованы `.rt-tooltip` (единообразно с\n * остальным common/ui). `role=\"tooltip\"` — вспомогательный ярлык для AT.\n */\n@Component({\n selector: 'rt-tooltip',\n template: '{{ text() }}',\n styleUrl: './rt-tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: BEM_BLOCK,\n role: 'tooltip',\n },\n})\nexport class RtTooltipComponent {\n public readonly text: WritableSignal<string> = signal<string>('');\n}\n","import { ConnectedPosition } from '@angular/cdk/overlay';\n\nimport { IRtTooltip } from './rt-tooltip.model';\n\n/** Зазор между подсказкой и host'ом. */\nconst TOOLTIP_GAP_PX: number = 6;\n\nconst POSITION_BY_PLACEMENT: Readonly<Record<IRtTooltip.Placement, ConnectedPosition>> = {\n top: { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -TOOLTIP_GAP_PX },\n bottom: { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: TOOLTIP_GAP_PX },\n left: { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -TOOLTIP_GAP_PX },\n right: { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: TOOLTIP_GAP_PX },\n};\n\nconst FALLBACKS: Readonly<Record<IRtTooltip.Placement, readonly IRtTooltip.Placement[]>> = {\n top: ['top', 'bottom'],\n bottom: ['bottom', 'top'],\n left: ['left', 'right', 'top', 'bottom'],\n right: ['right', 'left', 'top', 'bottom'],\n};\n\n/**\n * Позиции подсказки по порядку попыток: заданная сторона, противоположная, а у боковой ещё\n * верх и низ — на узком экране сбоку не помещается ни одна сторона, и подсказка, придвинутая\n * к краю, легла бы на сам host. Бока заданы логическими `start`/`end`: в письме справа налево\n * `left` встаёт справа — как и вся раскладка кита.\n */\nexport function tooltipPositions(placement: IRtTooltip.Placement): ConnectedPosition[] {\n return FALLBACKS[placement].map((side: IRtTooltip.Placement): ConnectedPosition => ({ ...POSITION_BY_PLACEMENT[side] }));\n}\n\n/** Размеры узла, по которым судят об обрезке: видимая ширина и ширина содержимого. */\nexport interface IRtTooltipBox {\n readonly clientWidth: number;\n readonly scrollWidth: number;\n}\n\n/**\n * Текст узла обрезан: содержимое шире видимой коробки. Высота не судится — узел с видимым\n * переполнением по высоте показывает всё, и его подсказка только повторяла бы текст.\n */\nexport function isTooltipTextCut(box: IRtTooltipBox): boolean {\n return box.scrollWidth > box.clientWidth;\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport {\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayConfig,\n OverlayRef,\n ScrollStrategyOptions,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n booleanAttribute,\n ComponentRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n OnDestroy,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { carryThemeScope, materialPresetClassesOf } from '@rt-tools/ui-kit-v2/core';\nimport { RtTooltipComponent } from './rt-tooltip.component';\nimport { isTooltipTextCut, tooltipPositions } from './rt-tooltip.logic';\nimport { IRtTooltip } from './rt-tooltip.model';\n\nconst SHOW_DELAY_MS: number = 300;\nconst VIEWPORT_MARGIN: number = 8;\n\n/**\n * Tooltip-директива поверх CDK Overlay. Показывает короткую подсказку\n * (`rtTooltip` = строка) на hover/focus host'а. Движок — CDK `flexibleConnectedTo`\n * (авто-flip у края viewport, reposition при скролле), так что подсказка не\n * режется `overflow: hidden` предками (таблицы, aside, карточки).\n *\n * Триггеры: `mouseenter` и фокус с клавиатуры показывают (с задержкой `SHOW_DELAY_MS`),\n * `mouseleave`/`focusout`/`click` прячут. Фокус, поставленный мышью или кодом, подсказку не\n * показывает, как у Material: меню возвращает фокус кнопке после выбора пункта мышью, и\n * подсказка кнопки всплывала поверх того, что пункт открыл. Пустой текст → no-op (директива\n * выключена), поэтому её можно безусловно вешать на icon-кнопки и включать\n * выставлением строки.\n *\n * @example\n * ```html\n * <rt-icon-button icon=\"ico-trash\" ariaLabel=\"Удалить\" tooltip=\"Удалить\" />\n * <button rtButton [rtTooltip]=\"'Подсказка'\">…</button>\n * ```\n */\n@Directive({\n selector: '[rtTooltip]',\n exportAs: 'rtTooltip',\n host: {\n '(mouseenter)': 'show()',\n '(mouseleave)': 'hide()',\n '(focusout)': 'hide()',\n '(click)': 'onClick()',\n },\n})\nexport class RtTooltipDirective implements OnDestroy {\n readonly #overlay: Overlay = inject(Overlay);\n readonly #elementRef: ElementRef<HTMLElement> = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #scrollStrategies: ScrollStrategyOptions = inject(ScrollStrategyOptions);\n readonly #focusMonitor: FocusMonitor = inject(FocusMonitor);\n\n #overlayRef: OverlayRef | null = null;\n #tooltipRef: ComponentRef<RtTooltipComponent> | null = null;\n #showTimer: ReturnType<typeof setTimeout> | null = null;\n\n /**\n * Текст подсказки. Принимает `null`/`undefined` (частый результат date-пайпа\n * или nullable-полей модели) и нормализует их в пустую строку — иначе\n * биндинги вида `value | date` ломали бы строгую типизацию шаблона. Пустая\n * строка → no-op (директива выключена).\n */\n public readonly text: InputSignalWithTransform<string, string | null | undefined> = input<string, string | null | undefined>('', {\n alias: 'rtTooltip',\n transform: (value: string | null | undefined): string => value ?? '',\n });\n\n /** Сторона подсказки. Не задана — сверху, а под материальным набором снизу, как у первого кита. */\n public readonly placement: InputSignal<IRtTooltip.Placement | null> = input<IRtTooltip.Placement | null>(null, {\n alias: 'rtTooltipPlacement',\n });\n\n /**\n * Подсказка только у обрезанного текста: хост меряется в момент показа, и подсказка не\n * появляется, пока его содержимое помещается целиком. Мерить заранее не нужно — показ идёт\n * только отсюда, и признак в эту минуту всегда свежий.\n */\n public readonly whenTruncated: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(false, {\n alias: 'rtTooltipWhenTruncated',\n transform: booleanAttribute,\n });\n\n /**\n * Клик прячет открытую подсказку — по умолчанию, как раньше. `false` оставляет её открытой:\n * кнопка-переключатель показывает в ней новое состояние сразу после нажатия. Отложенный показ\n * клик снимает при любом значении — касание на тач-экране (mouseenter + click) подсказку не\n * показывает.\n */\n public readonly hideOnClick: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(true, {\n alias: 'rtTooltipHideOnClick',\n transform: booleanAttribute,\n });\n\n constructor() {\n // Новый текст доходит до открытой панели на месте, без повторного наведения.\n effect((): void => this.#syncText(this.text()));\n this.#focusMonitor\n .monitor(this.#elementRef, true)\n .pipe(takeUntilDestroyed())\n .subscribe((origin: FocusOrigin): void => {\n if (origin === 'keyboard') {\n this.show();\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.#focusMonitor.stopMonitoring(this.#elementRef);\n this.#clearTimer();\n this.#disposeOverlay();\n }\n\n protected show(): void {\n if (this.text().trim() === '' || this.#tooltipRef !== null) {\n return;\n }\n this.#clearTimer();\n this.#showTimer = setTimeout((): void => this.#attach(), SHOW_DELAY_MS);\n }\n\n protected hide(): void {\n this.#clearTimer();\n this.#overlayRef?.detach();\n this.#tooltipRef = null;\n }\n\n protected onClick(): void {\n if (this.hideOnClick() || this.#tooltipRef === null) {\n this.hide();\n }\n }\n\n #syncText(text: string): void {\n if (this.#tooltipRef === null) {\n return;\n }\n if (text.trim() === '') {\n this.hide();\n return;\n }\n this.#tooltipRef.instance.text.set(text);\n this.#tooltipRef.changeDetectorRef.markForCheck();\n this.#overlayRef?.updatePosition();\n }\n\n #attach(): void {\n if (this.text().trim() === '' || (this.whenTruncated() && !isTooltipTextCut(this.#elementRef.nativeElement))) {\n return;\n }\n const overlayRef: OverlayRef = this.#ensureOverlay();\n // Коробка переживает закрытие, а кусок темы вокруг host'а мог смениться — переносим на каждом показе.\n carryThemeScope(overlayRef.overlayElement, this.#elementRef.nativeElement);\n const portal: ComponentPortal<RtTooltipComponent> = new ComponentPortal(RtTooltipComponent);\n this.#tooltipRef = overlayRef.attach(portal);\n this.#tooltipRef.instance.text.set(this.text());\n this.#tooltipRef.changeDetectorRef.markForCheck();\n }\n\n #ensureOverlay(): OverlayRef {\n if (this.#overlayRef !== null) {\n return this.#overlayRef;\n }\n const presetClasses: string[] = materialPresetClassesOf(this.#elementRef.nativeElement);\n const placement: IRtTooltip.Placement = this.placement() ?? (presetClasses.length > 0 ? 'bottom' : 'top');\n const positions: ConnectedPosition[] = tooltipPositions(placement);\n\n const positionStrategy: FlexibleConnectedPositionStrategy = this.#overlay\n .position()\n .flexibleConnectedTo(this.#elementRef)\n .withPush(true)\n .withViewportMargin(VIEWPORT_MARGIN)\n .withFlexibleDimensions(false)\n .withPositions(positions);\n\n const config: OverlayConfig = new OverlayConfig({\n positionStrategy,\n scrollStrategy: this.#scrollStrategies.reposition(),\n hasBackdrop: false,\n panelClass: ['rt-tooltip-panel', ...presetClasses],\n });\n this.#overlayRef = this.#overlay.create(config);\n return this.#overlayRef;\n }\n\n #clearTimer(): void {\n if (this.#showTimer !== null) {\n clearTimeout(this.#showTimer);\n this.#showTimer = null;\n }\n }\n\n #disposeOverlay(): void {\n this.#overlayRef?.dispose();\n this.#overlayRef = null;\n this.#tooltipRef = null;\n }\n}\n"],"mappings":"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"}