@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,220 +1,254 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, DestroyRef, signal, computed, input, booleanAttribute, Directive } from '@angular/core';
3
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
- import { Validators, NgControl } from '@angular/forms';
5
-
6
- /** Состояние поля, которому форма ещё ничего не сказала. */
7
- const PRISTINE_STATE = { invalid: false, errors: null, required: false, interacted: false };
8
- /** Рассылает ли контрол своё состояние. Переходник сигнальной формы — не рассылает. */
1
+ import * as i0 from "@angular/core";
2
+ import { DestroyRef, Directive, booleanAttribute, computed, inject, input, signal } from "@angular/core";
3
+ import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
4
+ import { NgControl, Validators } from "@angular/forms";
5
+ const PRISTINE_STATE = {
6
+ invalid: false,
7
+ errors: null,
8
+ required: false,
9
+ interacted: false
10
+ };
9
11
  function emitsEvents(control) {
10
- return typeof control.events?.pipe === 'function';
12
+ return typeof control.events?.pipe === "function";
11
13
  }
12
- /** Состояние формы, снятое с контрола любого рода. */
13
14
  function stateOf(control) {
14
- return {
15
- invalid: !!control.invalid && (control.touched || control.dirty),
16
- errors: control.errors,
17
- required: control.hasValidator(Validators.required),
18
- interacted: control.touched || control.dirty,
19
- };
20
- }
21
- class RtFormControlBase {
22
- #ngControl;
23
- #destroyRef;
24
- #onChange;
25
- #onTouched;
26
- // Состояние, которым управляет родительский rt-field (через публичные сеттеры):
27
- // авто-id для связки label[for], read-only режим, зеркало ошибок/required.
28
- #controlIdAssigned;
29
- #readonlyAssigned;
30
- /**
31
- * Обязательность, объявленная полем. Шаблонная форма валидатора на контрол не кладёт, и без
32
- * этого признака её обязательное поле не получало бы ни звёздочки, ни ошибки.
33
- */
34
- #requiredAssigned;
35
- /** Состояние, разосланное прежней привязкой: её контрол сигналами не читается. */
36
- #pushedState;
37
- /**
38
- * Контрол сигнальной привязки. Его состояние не рассылается, а читается геттерами, и
39
- * внутри геттеров стоят вызовы сигналов формы — то есть из `computed` оно реактивно.
40
- */
41
- #signalControl;
42
- /** Отключение, назначенное формой через CVA (`setDisabledState`). */
43
- #disabledByForm;
44
- /** Состояние формы: у сигнальной привязки читается, у прежней берётся разосланное. */
45
- #state;
46
- /**
47
- * Пустое поле, обязательное по слову rt-field, которого уже коснулись. Валидатор формы здесь
48
- * не нужен: его ошибку контрол и так получает от формы.
49
- */
50
- #missingRequired;
51
- constructor() {
52
- this.#ngControl = inject(NgControl, { self: true, optional: true });
53
- this.#destroyRef = inject(DestroyRef);
54
- this.#onChange = () => undefined;
55
- this.#onTouched = () => undefined;
56
- // Состояние, которым управляет родительский rt-field (через публичные сеттеры):
57
- // авто-id для связки label[for], read-only режим, зеркало ошибок/required.
58
- this.#controlIdAssigned = signal(null, /* @ts-ignore */
59
- ...(ngDevMode ? [{ debugName: "#controlIdAssigned" }] : /* istanbul ignore next */ []));
60
- this.#readonlyAssigned = signal(false, /* @ts-ignore */
61
- ...(ngDevMode ? [{ debugName: "#readonlyAssigned" }] : /* istanbul ignore next */ []));
62
- /**
63
- * Обязательность, объявленная полем. Шаблонная форма валидатора на контрол не кладёт, и без
64
- * этого признака её обязательное поле не получало бы ни звёздочки, ни ошибки.
65
- */
66
- this.#requiredAssigned = signal(false, /* @ts-ignore */
67
- ...(ngDevMode ? [{ debugName: "#requiredAssigned" }] : /* istanbul ignore next */ []));
68
- /** Состояние, разосланное прежней привязкой: её контрол сигналами не читается. */
69
- this.#pushedState = signal(PRISTINE_STATE, /* @ts-ignore */
70
- ...(ngDevMode ? [{ debugName: "#pushedState" }] : /* istanbul ignore next */ []));
71
- /**
72
- * Контрол сигнальной привязки. Его состояние не рассылается, а читается геттерами, и
73
- * внутри геттеров стоят вызовы сигналов формы — то есть из `computed` оно реактивно.
74
- */
75
- this.#signalControl = signal(null, /* @ts-ignore */
76
- ...(ngDevMode ? [{ debugName: "#signalControl" }] : /* istanbul ignore next */ []));
77
- /** Отключение, назначенное формой через CVA (`setDisabledState`). */
78
- this.#disabledByForm = signal(false, /* @ts-ignore */
79
- ...(ngDevMode ? [{ debugName: "#disabledByForm" }] : /* istanbul ignore next */ []));
80
- /**
81
- * Отключение: вход и форма — два независимых источника, поле отключено,
82
- * если так сказал любой из них. Сводить их в один signal нельзя: форма
83
- * зовёт `setDisabledState` при связывании контрола, то есть раньше, чем
84
- * поле впервые обновит своё вью, и мирроринг входа затирал бы её слово —
85
- * контрол, созданный отключённым, оказывался бы редактируемым.
86
- */
87
- this.isDisabled = computed(() => this.disabled() || this.#disabledByForm(), /* @ts-ignore */
88
- ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
89
- /** Состояние формы: у сигнальной привязки читается, у прежней берётся разосланное. */
90
- this.#state = computed(() => {
91
- const control = this.#signalControl();
92
- return control === null ? this.#pushedState() : stateOf(control);
93
- }, /* @ts-ignore */
94
- ...(ngDevMode ? [{ debugName: "#state" }] : /* istanbul ignore next */ []));
95
- /**
96
- * Пустое поле, обязательное по слову rt-field, которого уже коснулись. Валидатор формы здесь
97
- * не нужен: его ошибку контрол и так получает от формы.
98
- */
99
- this.#missingRequired = computed(() => this.#requiredAssigned() && !this.#state().required && this.#state().interacted && !this.hasValue(), /* @ts-ignore */
100
- ...(ngDevMode ? [{ debugName: "#missingRequired" }] : /* istanbul ignore next */ []));
101
- this.isInvalid = computed(() => this.#state().invalid || this.#missingRequired(), /* @ts-ignore */
102
- ...(ngDevMode ? [{ debugName: "isInvalid" }] : /* istanbul ignore next */ []));
103
- /** Видимость кнопки очистки: включена, есть значение, поле активно. */
104
- this.showClearButton = computed(() => this.clearable() && this.hasValue() && !this.isDisabled(), /* @ts-ignore */
105
- ...(ngDevMode ? [{ debugName: "showClearButton" }] : /* istanbul ignore next */ []));
106
- this.size = input('md', /* @ts-ignore */
107
- ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
108
- this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
109
- this.controlId = input(null, /* @ts-ignore */
110
- ...(ngDevMode ? [{ debugName: "controlId" }] : /* istanbul ignore next */ []));
111
- this.ariaLabel = input(null, /* @ts-ignore */
112
- ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
113
- this.clearable = input(true, { ...(ngDevMode ? { debugName: "clearable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
114
- /**
115
- * Видимая resting-рамка контрола. По умолчанию `true` — рамка видна на обеих
116
- * темах. `false` снимает только resting-рамку; focus/invalid состояния свою
117
- * рамку показывают всё равно, read-only остаётся плоским.
118
- */
119
- this.bordered = input(true, { ...(ngDevMode ? { debugName: "bordered" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
120
- /** Итоговый id поля: явный input важнее авто-id, назначенного rt-field. */
121
- this.effectiveControlId = computed(() => this.controlId() ?? this.#controlIdAssigned(), /* @ts-ignore */
122
- ...(ngDevMode ? [{ debugName: "effectiveControlId" }] : /* istanbul ignore next */ []));
123
- /** Read-only режим (плоский текст вместо контрола); включается rt-field'ом. */
124
- this.isReadonly = this.#readonlyAssigned.asReadonly();
125
- /** Публичный invalid для rt-field (touched/dirty учтён в состоянии). */
126
- this.invalid = computed(() => this.isInvalid(), /* @ts-ignore */
127
- ...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
128
- /** Текущие ошибки связанного контрола — источник текста ошибки в rt-field. */
129
- this.errors = computed(() => this.#state().errors ?? (this.#missingRequired() ? { required: true } : null), /* @ts-ignore */
130
- ...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
131
- /** Обязателен ли контрол — по валидатору формы или по слову rt-field. Для авто-«*». */
132
- this.required = computed(() => this.#state().required || this.#requiredAssigned(), /* @ts-ignore */
133
- ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
134
- this.value = signal(this.getEmptyValue(), /* @ts-ignore */
135
- ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
136
- // Self-inject NgControl + ручная привязка valueAccessor: доступ к
137
- // control.invalid/touched без NG_VALUE_ACCESSOR provider'а (тот
138
- // спровоцировал бы NG0200 cycle при self-reference).
139
- if (this.#ngControl !== null) {
140
- this.#ngControl.valueAccessor = this;
141
- }
142
- }
143
- ngOnInit() {
144
- const control = this.#ngControl?.control ?? null;
145
- if (control === null) {
146
- return;
147
- }
148
- // Контрол, который состояния не рассылает, — переходник сигнальной формы: событий у
149
- // него нет вовсе, и подписка на них роняла поле из запуска вместе со всем поддеревом
150
- // разметки. Состояние у него читается геттерами, поэтому берётся вычислением.
151
- if (!emitsEvents(control)) {
152
- this.#signalControl.set(control);
153
- return;
154
- }
155
- // Авто-подсветка invalid + зеркало ошибок/required для rt-field.
156
- this.#pushedState.set(stateOf(control));
157
- control.events.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {
158
- this.#pushedState.set(stateOf(control));
159
- });
160
- }
161
- writeValue(value) {
162
- this.value.set(value ?? this.getEmptyValue());
163
- }
164
- registerOnChange(fn) {
165
- this.#onChange = fn;
166
- }
167
- registerOnTouched(fn) {
168
- this.#onTouched = fn;
169
- }
170
- setDisabledState(isDisabled) {
171
- this.#disabledByForm.set(isDisabled);
172
- }
173
- /** Назначить авто-id (rt-field), когда у контрола нет явного controlId. */
174
- assignControlId(id) {
175
- this.#controlIdAssigned.set(id);
176
- }
177
- /** Включить/выключить read-only режим — вызывает родительский rt-field. */
178
- setReadonly(value) {
179
- this.#readonlyAssigned.set(value);
180
- }
181
- /** Объявить контрол обязательным — вызывает родительский rt-field. */
182
- setRequired(value) {
183
- this.#requiredAssigned.set(value);
184
- }
185
- /** Очистка значения по кнопке-крестику + возврат фокуса в поле. */
186
- clear(event) {
187
- event?.stopPropagation();
188
- if (this.isDisabled()) {
189
- return;
190
- }
191
- this.clearValue();
192
- this.#onChange(this.value());
193
- this.#onTouched();
194
- this.focusAfterClear();
195
- }
196
- /** Сбрасывает значение к пустому. Поля с display-сигналом расширяют. */
197
- clearValue() {
198
- this.value.set(this.getEmptyValue());
199
- }
200
- /** Прокидывает change наружу — для обработчиков пользовательского ввода. */
201
- emitChange(value) {
202
- this.#onChange(value);
203
- }
204
- /** Помечает контрол touched — для blur/close-обработчиков. */
205
- markTouched() {
206
- this.#onTouched();
207
- }
208
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtFormControlBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
209
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: RtFormControlBase, isStandalone: true, inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, controlId: { classPropertyName: "controlId", publicName: "controlId", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
15
+ return {
16
+ invalid: !!control.invalid && (control.touched || control.dirty),
17
+ errors: control.errors,
18
+ required: control.hasValidator(Validators.required),
19
+ interacted: control.touched || control.dirty
20
+ };
210
21
  }
211
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtFormControlBase, decorators: [{
212
- type: Directive
213
- }], ctorParameters: () => [], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], controlId: [{ type: i0.Input, args: [{ isSignal: true, alias: "controlId", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], bordered: [{ type: i0.Input, args: [{ isSignal: true, alias: "bordered", required: false }] }] } });
214
-
215
- /**
216
- * Generated bundle index. Do not edit.
217
- */
218
-
22
+ var RtFormControlBase = class RtFormControlBase {
23
+ #ngControl;
24
+ #destroyRef;
25
+ #onChange;
26
+ #onTouched;
27
+ #controlIdAssigned;
28
+ #readonlyAssigned;
29
+ #requiredAssigned;
30
+ #pushedState;
31
+ #signalControl;
32
+ #disabledByForm;
33
+ #state;
34
+ #missingRequired;
35
+ constructor() {
36
+ this.#ngControl = inject(NgControl, {
37
+ self: true,
38
+ optional: true
39
+ });
40
+ this.#destroyRef = inject(DestroyRef);
41
+ this.#onChange = () => void 0;
42
+ this.#onTouched = () => void 0;
43
+ this.#controlIdAssigned = signal(null, ...ngDevMode ? [{ debugName: "#controlIdAssigned" }] : /* istanbul ignore next */ []);
44
+ this.#readonlyAssigned = signal(false, ...ngDevMode ? [{ debugName: "#readonlyAssigned" }] : /* istanbul ignore next */ []);
45
+ this.#requiredAssigned = signal(false, ...ngDevMode ? [{ debugName: "#requiredAssigned" }] : /* istanbul ignore next */ []);
46
+ this.#pushedState = signal(PRISTINE_STATE, ...ngDevMode ? [{ debugName: "#pushedState" }] : /* istanbul ignore next */ []);
47
+ this.#signalControl = signal(null, ...ngDevMode ? [{ debugName: "#signalControl" }] : /* istanbul ignore next */ []);
48
+ this.#disabledByForm = signal(false, ...ngDevMode ? [{ debugName: "#disabledByForm" }] : /* istanbul ignore next */ []);
49
+ this.isDisabled = computed(() => this.disabled() || this.#disabledByForm(), ...ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []);
50
+ this.#state = computed(() => {
51
+ const control = this.#signalControl();
52
+ return control === null ? this.#pushedState() : stateOf(control);
53
+ }, ...ngDevMode ? [{ debugName: "#state" }] : /* istanbul ignore next */ []);
54
+ this.#missingRequired = computed(() => this.#requiredAssigned() && !this.#state().required && this.#state().interacted && !this.hasValue(), ...ngDevMode ? [{ debugName: "#missingRequired" }] : /* istanbul ignore next */ []);
55
+ this.isInvalid = computed(() => this.#state().invalid || this.#missingRequired(), ...ngDevMode ? [{ debugName: "isInvalid" }] : /* istanbul ignore next */ []);
56
+ this.showClearButton = computed(() => this.clearable() && this.hasValue() && !this.isDisabled(), ...ngDevMode ? [{ debugName: "showClearButton" }] : /* istanbul ignore next */ []);
57
+ this.size = input("md", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
58
+ this.disabled = input(false, {
59
+ ...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
60
+ transform: booleanAttribute
61
+ });
62
+ this.controlId = input(null, ...ngDevMode ? [{ debugName: "controlId" }] : /* istanbul ignore next */ []);
63
+ this.ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
64
+ this.clearable = input(true, {
65
+ ...ngDevMode ? { debugName: "clearable" } : /* istanbul ignore next */ {},
66
+ transform: booleanAttribute
67
+ });
68
+ this.bordered = input(true, {
69
+ ...ngDevMode ? { debugName: "bordered" } : /* istanbul ignore next */ {},
70
+ transform: booleanAttribute
71
+ });
72
+ this.effectiveControlId = computed(() => this.controlId() ?? this.#controlIdAssigned(), ...ngDevMode ? [{ debugName: "effectiveControlId" }] : /* istanbul ignore next */ []);
73
+ this.isReadonly = this.#readonlyAssigned.asReadonly();
74
+ this.invalid = computed(() => this.isInvalid(), ...ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []);
75
+ this.errors = computed(() => this.#state().errors ?? (this.#missingRequired() ? { required: true } : null), ...ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []);
76
+ this.required = computed(() => this.#state().required || this.#requiredAssigned(), ...ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []);
77
+ this.value = signal(this.getEmptyValue(), ...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
78
+ if (this.#ngControl !== null) this.#ngControl.valueAccessor = this;
79
+ }
80
+ ngOnInit() {
81
+ const control = this.#ngControl?.control ?? null;
82
+ if (control === null) return;
83
+ if (!emitsEvents(control)) {
84
+ this.#signalControl.set(control);
85
+ return;
86
+ }
87
+ this.#pushedState.set(stateOf(control));
88
+ control.events.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {
89
+ this.#pushedState.set(stateOf(control));
90
+ });
91
+ }
92
+ writeValue(value) {
93
+ this.value.set(value ?? this.getEmptyValue());
94
+ }
95
+ registerOnChange(fn) {
96
+ this.#onChange = fn;
97
+ }
98
+ registerOnTouched(fn) {
99
+ this.#onTouched = fn;
100
+ }
101
+ setDisabledState(isDisabled) {
102
+ this.#disabledByForm.set(isDisabled);
103
+ }
104
+ assignControlId(id) {
105
+ this.#controlIdAssigned.set(id);
106
+ }
107
+ setReadonly(value) {
108
+ this.#readonlyAssigned.set(value);
109
+ }
110
+ setRequired(value) {
111
+ this.#requiredAssigned.set(value);
112
+ }
113
+ clear(event) {
114
+ event?.stopPropagation();
115
+ if (this.isDisabled()) return;
116
+ this.clearValue();
117
+ this.#onChange(this.value());
118
+ this.#onTouched();
119
+ this.focusAfterClear();
120
+ }
121
+ clearValue() {
122
+ this.value.set(this.getEmptyValue());
123
+ }
124
+ emitChange(value) {
125
+ this.#onChange(value);
126
+ }
127
+ markTouched() {
128
+ this.#onTouched();
129
+ }
130
+ static {
131
+ this.ɵfac = i0.ɵɵngDeclareFactory({
132
+ minVersion: "12.0.0",
133
+ version: "22.2.2",
134
+ ngImport: i0,
135
+ type: RtFormControlBase,
136
+ deps: [],
137
+ target: i0.ɵɵFactoryTarget.Directive
138
+ });
139
+ }
140
+ static {
141
+ this.ɵdir = i0.ɵɵngDeclareDirective({
142
+ minVersion: "17.1.0",
143
+ version: "22.2.2",
144
+ type: RtFormControlBase,
145
+ isStandalone: true,
146
+ inputs: {
147
+ size: {
148
+ classPropertyName: "size",
149
+ publicName: "size",
150
+ isSignal: true,
151
+ isRequired: false,
152
+ transformFunction: null
153
+ },
154
+ disabled: {
155
+ classPropertyName: "disabled",
156
+ publicName: "disabled",
157
+ isSignal: true,
158
+ isRequired: false,
159
+ transformFunction: null
160
+ },
161
+ controlId: {
162
+ classPropertyName: "controlId",
163
+ publicName: "controlId",
164
+ isSignal: true,
165
+ isRequired: false,
166
+ transformFunction: null
167
+ },
168
+ ariaLabel: {
169
+ classPropertyName: "ariaLabel",
170
+ publicName: "ariaLabel",
171
+ isSignal: true,
172
+ isRequired: false,
173
+ transformFunction: null
174
+ },
175
+ clearable: {
176
+ classPropertyName: "clearable",
177
+ publicName: "clearable",
178
+ isSignal: true,
179
+ isRequired: false,
180
+ transformFunction: null
181
+ },
182
+ bordered: {
183
+ classPropertyName: "bordered",
184
+ publicName: "bordered",
185
+ isSignal: true,
186
+ isRequired: false,
187
+ transformFunction: null
188
+ }
189
+ },
190
+ ngImport: i0
191
+ });
192
+ }
193
+ };
194
+ i0.ɵɵngDeclareClassMetadata({
195
+ minVersion: "12.0.0",
196
+ version: "22.2.2",
197
+ ngImport: i0,
198
+ type: RtFormControlBase,
199
+ decorators: [{ type: Directive }],
200
+ ctorParameters: () => [],
201
+ propDecorators: {
202
+ size: [{
203
+ type: i0.Input,
204
+ args: [{
205
+ isSignal: true,
206
+ alias: "size",
207
+ required: false
208
+ }]
209
+ }],
210
+ disabled: [{
211
+ type: i0.Input,
212
+ args: [{
213
+ isSignal: true,
214
+ alias: "disabled",
215
+ required: false
216
+ }]
217
+ }],
218
+ controlId: [{
219
+ type: i0.Input,
220
+ args: [{
221
+ isSignal: true,
222
+ alias: "controlId",
223
+ required: false
224
+ }]
225
+ }],
226
+ ariaLabel: [{
227
+ type: i0.Input,
228
+ args: [{
229
+ isSignal: true,
230
+ alias: "ariaLabel",
231
+ required: false
232
+ }]
233
+ }],
234
+ clearable: [{
235
+ type: i0.Input,
236
+ args: [{
237
+ isSignal: true,
238
+ alias: "clearable",
239
+ required: false
240
+ }]
241
+ }],
242
+ bordered: [{
243
+ type: i0.Input,
244
+ args: [{
245
+ isSignal: true,
246
+ alias: "bordered",
247
+ required: false
248
+ }]
249
+ }]
250
+ }
251
+ });
219
252
  export { RtFormControlBase };
220
- //# sourceMappingURL=rt-tools-ui-kit-v2-form-control.mjs.map
253
+
254
+ //# sourceMappingURL=rt-tools-ui-kit-v2-form-control.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rt-tools-ui-kit-v2-form-control.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/form-control/rt-form-control.base.ts","../../../projects/ui-kit-v2/src/lib/components/form-control/rt-tools-ui-kit-v2-form-control.ts"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n OnInit,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, NgControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { IRtInput } from '@rt-tools/ui-kit-v2/core';\n\n/**\n * Базовый класс input-семейства common/ui. Владеет единым CVA-ядром:\n * - self-injected `NgControl` + ручная привязка `valueAccessor` (без\n * `NG_VALUE_ACCESSOR` provider — иначе NG0200 cycle при self-reference),\n * что даёт доступ к `control.invalid/touched` для авто-подсветки ошибки;\n * - сигнал значения `value`, состояния `isDisabled`/`isInvalid` (отключение\n * складывается из входа `disabled` и слова формы — см. `isDisabled`);\n * - общие инпуты `size`/`disabled`/`controlId`/`ariaLabel`/`clearable`;\n * - оркестрацию очистки (`clear`) через абстрактные хуки конкретного поля.\n *\n * Конкретные поля реализуют `getEmptyValue`/`hasValue`/`focusAfterClear`. Поля\n * с отдельным display-состоянием (autocomplete, input-number) дополнительно\n * переопределяют `writeValue`/`clearValue`, синхронизируя свой display-сигнал.\n */\n/**\n * Состояние формы, каким его видит поле: негодность, ошибки и обязательность.\n *\n * Собрано одной записью затем, что источников у него два и говорят они по-разному. Прежняя\n * привязка рассылает состояние событиями контрола, сигнальная — не рассылает вовсе и отдаёт\n * его чтениями своего переходника. Порознь эти два пути дали бы полю два набора сигналов, и\n * обёртке пришлось бы знать, какой из них живой.\n */\ninterface IControlState {\n invalid: boolean;\n errors: ValidationErrors | null;\n required: boolean;\n /** Касались ли контрола или правили его: до этого пустое обязательное поле не краснеет. */\n interacted: boolean;\n}\n\n/** Состояние поля, которому форма ещё ничего не сказала. */\nconst PRISTINE_STATE: IControlState = { invalid: false, errors: null, required: false, interacted: false };\n\n/** Рассылает ли контрол своё состояние. Переходник сигнальной формы — не рассылает. */\nfunction emitsEvents(control: AbstractControl): boolean {\n return typeof (control.events as { pipe?: unknown } | undefined)?.pipe === 'function';\n}\n\n/** Состояние формы, снятое с контрола любого рода. */\nfunction stateOf(control: AbstractControl): IControlState {\n return {\n invalid: !!control.invalid && (control.touched || control.dirty),\n errors: control.errors,\n required: control.hasValidator(Validators.required),\n interacted: control.touched || control.dirty,\n };\n}\n\n@Directive()\nexport abstract class RtFormControlBase<TValue> implements ControlValueAccessor, OnInit {\n readonly #ngControl: NgControl | null = inject(NgControl, { self: true, optional: true });\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n #onChange: (value: TValue) => void = (): void => undefined;\n #onTouched: () => void = (): void => undefined;\n\n // Состояние, которым управляет родительский rt-field (через публичные сеттеры):\n // авто-id для связки label[for], read-only режим, зеркало ошибок/required.\n readonly #controlIdAssigned: WritableSignal<string | null> = signal<string | null>(null);\n readonly #readonlyAssigned: WritableSignal<boolean> = signal<boolean>(false);\n /**\n * Обязательность, объявленная полем. Шаблонная форма валидатора на контрол не кладёт, и без\n * этого признака её обязательное поле не получало бы ни звёздочки, ни ошибки.\n */\n readonly #requiredAssigned: WritableSignal<boolean> = signal<boolean>(false);\n /** Состояние, разосланное прежней привязкой: её контрол сигналами не читается. */\n readonly #pushedState: WritableSignal<IControlState> = signal<IControlState>(PRISTINE_STATE);\n /**\n * Контрол сигнальной привязки. Его состояние не рассылается, а читается геттерами, и\n * внутри геттеров стоят вызовы сигналов формы — то есть из `computed` оно реактивно.\n */\n readonly #signalControl: WritableSignal<AbstractControl | null> = signal<AbstractControl | null>(null);\n /** Отключение, назначенное формой через CVA (`setDisabledState`). */\n readonly #disabledByForm: WritableSignal<boolean> = signal<boolean>(false);\n\n protected readonly value: WritableSignal<TValue>;\n /**\n * Отключение: вход и форма — два независимых источника, поле отключено,\n * если так сказал любой из них. Сводить их в один signal нельзя: форма\n * зовёт `setDisabledState` при связывании контрола, то есть раньше, чем\n * поле впервые обновит своё вью, и мирроринг входа затирал бы её слово —\n * контрол, созданный отключённым, оказывался бы редактируемым.\n */\n protected readonly isDisabled: Signal<boolean> = computed((): boolean => this.disabled() || this.#disabledByForm());\n /** Состояние формы: у сигнальной привязки читается, у прежней берётся разосланное. */\n readonly #state: Signal<IControlState> = computed((): IControlState => {\n const control: AbstractControl | null = this.#signalControl();\n return control === null ? this.#pushedState() : stateOf(control);\n });\n\n /**\n * Пустое поле, обязательное по слову rt-field, которого уже коснулись. Валидатор формы здесь\n * не нужен: его ошибку контрол и так получает от формы.\n */\n readonly #missingRequired: Signal<boolean> = computed(\n (): boolean => this.#requiredAssigned() && !this.#state().required && this.#state().interacted && !this.hasValue()\n );\n\n protected readonly isInvalid: Signal<boolean> = computed((): boolean => this.#state().invalid || this.#missingRequired());\n\n /** Видимость кнопки очистки: включена, есть значение, поле активно. */\n protected readonly showClearButton: Signal<boolean> = computed(\n (): boolean => this.clearable() && this.hasValue() && !this.isDisabled()\n );\n\n /** Есть ли в поле значение — гейт видимости крестика. */\n protected abstract readonly hasValue: Signal<boolean>;\n\n public readonly size: InputSignal<IRtInput.Size> = input<IRtInput.Size>('md');\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly controlId: InputSignal<string | null> = input<string | null>(null);\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n public readonly clearable: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n transform: booleanAttribute,\n });\n\n /**\n * Видимая resting-рамка контрола. По умолчанию `true` — рамка видна на обеих\n * темах. `false` снимает только resting-рамку; focus/invalid состояния свою\n * рамку показывают всё равно, read-only остаётся плоским.\n */\n public readonly bordered: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n transform: booleanAttribute,\n });\n\n /** Итоговый id поля: явный input важнее авто-id, назначенного rt-field. */\n public readonly effectiveControlId: Signal<string | null> = computed(\n (): string | null => this.controlId() ?? this.#controlIdAssigned()\n );\n\n /** Read-only режим (плоский текст вместо контрола); включается rt-field'ом. */\n public readonly isReadonly: Signal<boolean> = this.#readonlyAssigned.asReadonly();\n\n /** Публичный invalid для rt-field (touched/dirty учтён в состоянии). */\n public readonly invalid: Signal<boolean> = computed((): boolean => this.isInvalid());\n\n /** Текущие ошибки связанного контрола — источник текста ошибки в rt-field. */\n public readonly errors: Signal<ValidationErrors | null> = computed(\n (): ValidationErrors | null => this.#state().errors ?? (this.#missingRequired() ? { required: true } : null)\n );\n\n /** Обязателен ли контрол — по валидатору формы или по слову rt-field. Для авто-«*». */\n public readonly required: Signal<boolean> = computed((): boolean => this.#state().required || this.#requiredAssigned());\n\n /** Текст read-only представления. Реализуется конкретным контролом. */\n public abstract readonly displayText: Signal<string>;\n\n constructor() {\n this.value = signal<TValue>(this.getEmptyValue());\n // Self-inject NgControl + ручная привязка valueAccessor: доступ к\n // control.invalid/touched без NG_VALUE_ACCESSOR provider'а (тот\n // спровоцировал бы NG0200 cycle при self-reference).\n if (this.#ngControl !== null) {\n this.#ngControl.valueAccessor = this;\n }\n }\n\n public ngOnInit(): void {\n const control: AbstractControl | null = this.#ngControl?.control ?? null;\n if (control === null) {\n return;\n }\n // Контрол, который состояния не рассылает, — переходник сигнальной формы: событий у\n // него нет вовсе, и подписка на них роняла поле из запуска вместе со всем поддеревом\n // разметки. Состояние у него читается геттерами, поэтому берётся вычислением.\n if (!emitsEvents(control)) {\n this.#signalControl.set(control);\n return;\n }\n // Авто-подсветка invalid + зеркало ошибок/required для rt-field.\n this.#pushedState.set(stateOf(control));\n control.events.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((): void => {\n this.#pushedState.set(stateOf(control));\n });\n }\n\n public writeValue(value: TValue | null): void {\n this.value.set(value ?? this.getEmptyValue());\n }\n\n public registerOnChange(fn: (value: TValue) => void): void {\n this.#onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.#disabledByForm.set(isDisabled);\n }\n\n /** Назначить авто-id (rt-field), когда у контрола нет явного controlId. */\n public assignControlId(id: string): void {\n this.#controlIdAssigned.set(id);\n }\n\n /** Включить/выключить read-only режим — вызывает родительский rt-field. */\n public setReadonly(value: boolean): void {\n this.#readonlyAssigned.set(value);\n }\n\n /** Объявить контрол обязательным — вызывает родительский rt-field. */\n public setRequired(value: boolean): void {\n this.#requiredAssigned.set(value);\n }\n\n /** Очистка значения по кнопке-крестику + возврат фокуса в поле. */\n protected clear(event?: Event): void {\n event?.stopPropagation();\n if (this.isDisabled()) {\n return;\n }\n this.clearValue();\n this.#onChange(this.value());\n this.#onTouched();\n this.focusAfterClear();\n }\n\n /** Сбрасывает значение к пустому. Поля с display-сигналом расширяют. */\n protected clearValue(): void {\n this.value.set(this.getEmptyValue());\n }\n\n /** Прокидывает change наружу — для обработчиков пользовательского ввода. */\n protected emitChange(value: TValue): void {\n this.#onChange(value);\n }\n\n /** Помечает контрол touched — для blur/close-обработчиков. */\n protected markTouched(): void {\n this.#onTouched();\n }\n\n /** Пустое значение поля (тип-специфично: \"\", null, []). */\n protected abstract getEmptyValue(): TValue;\n\n /** Возврат фокуса после очистки (в input или на trigger-кнопку). */\n protected abstract focusAfterClear(): void;\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-form-control.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/form-control/rt-form-control.base.ts"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n OnInit,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, NgControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { IRtInput } from '@rt-tools/ui-kit-v2/core';\n\n/**\n * Базовый класс input-семейства common/ui. Владеет единым CVA-ядром:\n * - self-injected `NgControl` + ручная привязка `valueAccessor` (без\n * `NG_VALUE_ACCESSOR` provider — иначе NG0200 cycle при self-reference),\n * что даёт доступ к `control.invalid/touched` для авто-подсветки ошибки;\n * - сигнал значения `value`, состояния `isDisabled`/`isInvalid` (отключение\n * складывается из входа `disabled` и слова формы — см. `isDisabled`);\n * - общие инпуты `size`/`disabled`/`controlId`/`ariaLabel`/`clearable`;\n * - оркестрацию очистки (`clear`) через абстрактные хуки конкретного поля.\n *\n * Конкретные поля реализуют `getEmptyValue`/`hasValue`/`focusAfterClear`. Поля\n * с отдельным display-состоянием (autocomplete, input-number) дополнительно\n * переопределяют `writeValue`/`clearValue`, синхронизируя свой display-сигнал.\n */\n/**\n * Состояние формы, каким его видит поле: негодность, ошибки и обязательность.\n *\n * Собрано одной записью затем, что источников у него два и говорят они по-разному. Прежняя\n * привязка рассылает состояние событиями контрола, сигнальная — не рассылает вовсе и отдаёт\n * его чтениями своего переходника. Порознь эти два пути дали бы полю два набора сигналов, и\n * обёртке пришлось бы знать, какой из них живой.\n */\ninterface IControlState {\n invalid: boolean;\n errors: ValidationErrors | null;\n required: boolean;\n /** Касались ли контрола или правили его: до этого пустое обязательное поле не краснеет. */\n interacted: boolean;\n}\n\n/** Состояние поля, которому форма ещё ничего не сказала. */\nconst PRISTINE_STATE: IControlState = { invalid: false, errors: null, required: false, interacted: false };\n\n/** Рассылает ли контрол своё состояние. Переходник сигнальной формы — не рассылает. */\nfunction emitsEvents(control: AbstractControl): boolean {\n return typeof (control.events as { pipe?: unknown } | undefined)?.pipe === 'function';\n}\n\n/** Состояние формы, снятое с контрола любого рода. */\nfunction stateOf(control: AbstractControl): IControlState {\n return {\n invalid: !!control.invalid && (control.touched || control.dirty),\n errors: control.errors,\n required: control.hasValidator(Validators.required),\n interacted: control.touched || control.dirty,\n };\n}\n\n@Directive()\nexport abstract class RtFormControlBase<TValue> implements ControlValueAccessor, OnInit {\n readonly #ngControl: NgControl | null = inject(NgControl, { self: true, optional: true });\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n #onChange: (value: TValue) => void = (): void => undefined;\n #onTouched: () => void = (): void => undefined;\n\n // Состояние, которым управляет родительский rt-field (через публичные сеттеры):\n // авто-id для связки label[for], read-only режим, зеркало ошибок/required.\n readonly #controlIdAssigned: WritableSignal<string | null> = signal<string | null>(null);\n readonly #readonlyAssigned: WritableSignal<boolean> = signal<boolean>(false);\n /**\n * Обязательность, объявленная полем. Шаблонная форма валидатора на контрол не кладёт, и без\n * этого признака её обязательное поле не получало бы ни звёздочки, ни ошибки.\n */\n readonly #requiredAssigned: WritableSignal<boolean> = signal<boolean>(false);\n /** Состояние, разосланное прежней привязкой: её контрол сигналами не читается. */\n readonly #pushedState: WritableSignal<IControlState> = signal<IControlState>(PRISTINE_STATE);\n /**\n * Контрол сигнальной привязки. Его состояние не рассылается, а читается геттерами, и\n * внутри геттеров стоят вызовы сигналов формы — то есть из `computed` оно реактивно.\n */\n readonly #signalControl: WritableSignal<AbstractControl | null> = signal<AbstractControl | null>(null);\n /** Отключение, назначенное формой через CVA (`setDisabledState`). */\n readonly #disabledByForm: WritableSignal<boolean> = signal<boolean>(false);\n\n protected readonly value: WritableSignal<TValue>;\n /**\n * Отключение: вход и форма — два независимых источника, поле отключено,\n * если так сказал любой из них. Сводить их в один signal нельзя: форма\n * зовёт `setDisabledState` при связывании контрола, то есть раньше, чем\n * поле впервые обновит своё вью, и мирроринг входа затирал бы её слово —\n * контрол, созданный отключённым, оказывался бы редактируемым.\n */\n protected readonly isDisabled: Signal<boolean> = computed((): boolean => this.disabled() || this.#disabledByForm());\n /** Состояние формы: у сигнальной привязки читается, у прежней берётся разосланное. */\n readonly #state: Signal<IControlState> = computed((): IControlState => {\n const control: AbstractControl | null = this.#signalControl();\n return control === null ? this.#pushedState() : stateOf(control);\n });\n\n /**\n * Пустое поле, обязательное по слову rt-field, которого уже коснулись. Валидатор формы здесь\n * не нужен: его ошибку контрол и так получает от формы.\n */\n readonly #missingRequired: Signal<boolean> = computed(\n (): boolean => this.#requiredAssigned() && !this.#state().required && this.#state().interacted && !this.hasValue()\n );\n\n protected readonly isInvalid: Signal<boolean> = computed((): boolean => this.#state().invalid || this.#missingRequired());\n\n /** Видимость кнопки очистки: включена, есть значение, поле активно. */\n protected readonly showClearButton: Signal<boolean> = computed(\n (): boolean => this.clearable() && this.hasValue() && !this.isDisabled()\n );\n\n /** Есть ли в поле значение — гейт видимости крестика. */\n protected abstract readonly hasValue: Signal<boolean>;\n\n public readonly size: InputSignal<IRtInput.Size> = input<IRtInput.Size>('md');\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n public readonly controlId: InputSignal<string | null> = input<string | null>(null);\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n public readonly clearable: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n transform: booleanAttribute,\n });\n\n /**\n * Видимая resting-рамка контрола. По умолчанию `true` — рамка видна на обеих\n * темах. `false` снимает только resting-рамку; focus/invalid состояния свою\n * рамку показывают всё равно, read-only остаётся плоским.\n */\n public readonly bordered: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(true, {\n transform: booleanAttribute,\n });\n\n /** Итоговый id поля: явный input важнее авто-id, назначенного rt-field. */\n public readonly effectiveControlId: Signal<string | null> = computed(\n (): string | null => this.controlId() ?? this.#controlIdAssigned()\n );\n\n /** Read-only режим (плоский текст вместо контрола); включается rt-field'ом. */\n public readonly isReadonly: Signal<boolean> = this.#readonlyAssigned.asReadonly();\n\n /** Публичный invalid для rt-field (touched/dirty учтён в состоянии). */\n public readonly invalid: Signal<boolean> = computed((): boolean => this.isInvalid());\n\n /** Текущие ошибки связанного контрола — источник текста ошибки в rt-field. */\n public readonly errors: Signal<ValidationErrors | null> = computed(\n (): ValidationErrors | null => this.#state().errors ?? (this.#missingRequired() ? { required: true } : null)\n );\n\n /** Обязателен ли контрол — по валидатору формы или по слову rt-field. Для авто-«*». */\n public readonly required: Signal<boolean> = computed((): boolean => this.#state().required || this.#requiredAssigned());\n\n /** Текст read-only представления. Реализуется конкретным контролом. */\n public abstract readonly displayText: Signal<string>;\n\n constructor() {\n this.value = signal<TValue>(this.getEmptyValue());\n // Self-inject NgControl + ручная привязка valueAccessor: доступ к\n // control.invalid/touched без NG_VALUE_ACCESSOR provider'а (тот\n // спровоцировал бы NG0200 cycle при self-reference).\n if (this.#ngControl !== null) {\n this.#ngControl.valueAccessor = this;\n }\n }\n\n public ngOnInit(): void {\n const control: AbstractControl | null = this.#ngControl?.control ?? null;\n if (control === null) {\n return;\n }\n // Контрол, который состояния не рассылает, — переходник сигнальной формы: событий у\n // него нет вовсе, и подписка на них роняла поле из запуска вместе со всем поддеревом\n // разметки. Состояние у него читается геттерами, поэтому берётся вычислением.\n if (!emitsEvents(control)) {\n this.#signalControl.set(control);\n return;\n }\n // Авто-подсветка invalid + зеркало ошибок/required для rt-field.\n this.#pushedState.set(stateOf(control));\n control.events.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((): void => {\n this.#pushedState.set(stateOf(control));\n });\n }\n\n public writeValue(value: TValue | null): void {\n this.value.set(value ?? this.getEmptyValue());\n }\n\n public registerOnChange(fn: (value: TValue) => void): void {\n this.#onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.#disabledByForm.set(isDisabled);\n }\n\n /** Назначить авто-id (rt-field), когда у контрола нет явного controlId. */\n public assignControlId(id: string): void {\n this.#controlIdAssigned.set(id);\n }\n\n /** Включить/выключить read-only режим — вызывает родительский rt-field. */\n public setReadonly(value: boolean): void {\n this.#readonlyAssigned.set(value);\n }\n\n /** Объявить контрол обязательным — вызывает родительский rt-field. */\n public setRequired(value: boolean): void {\n this.#requiredAssigned.set(value);\n }\n\n /** Очистка значения по кнопке-крестику + возврат фокуса в поле. */\n protected clear(event?: Event): void {\n event?.stopPropagation();\n if (this.isDisabled()) {\n return;\n }\n this.clearValue();\n this.#onChange(this.value());\n this.#onTouched();\n this.focusAfterClear();\n }\n\n /** Сбрасывает значение к пустому. Поля с display-сигналом расширяют. */\n protected clearValue(): void {\n this.value.set(this.getEmptyValue());\n }\n\n /** Прокидывает change наружу — для обработчиков пользовательского ввода. */\n protected emitChange(value: TValue): void {\n this.#onChange(value);\n }\n\n /** Помечает контрол touched — для blur/close-обработчиков. */\n protected markTouched(): void {\n this.#onTouched();\n }\n\n /** Пустое значение поля (тип-специфично: \"\", null, []). */\n protected abstract getEmptyValue(): TValue;\n\n /** Возврат фокуса после очистки (в input или на trigger-кнопку). */\n protected abstract focusAfterClear(): void;\n}\n"],"mappings":"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"}