@rt-tools/ui-kit-v2 0.23.2 → 0.23.4

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 (348) 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 +2309 -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-prompt-suggestion.mjs +135 -45
  138. package/fesm2022/rt-tools-ui-kit-v2-prompt-suggestion.mjs.map +1 -1
  139. package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs +293 -171
  140. package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs.map +1 -1
  141. package/fesm2022/rt-tools-ui-kit-v2-radius.mjs +62 -55
  142. package/fesm2022/rt-tools-ui-kit-v2-radius.mjs.map +1 -1
  143. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +3379 -1466
  144. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
  145. package/fesm2022/rt-tools-ui-kit-v2-ripple.mjs +114 -116
  146. package/fesm2022/rt-tools-ui-kit-v2-ripple.mjs.map +1 -1
  147. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +406 -299
  148. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
  149. package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs +137 -36
  150. package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs.map +1 -1
  151. package/fesm2022/rt-tools-ui-kit-v2-select.mjs +687 -468
  152. package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
  153. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +2195 -1569
  154. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
  155. package/fesm2022/rt-tools-ui-kit-v2-skeleton-wrapper.mjs +187 -48
  156. package/fesm2022/rt-tools-ui-kit-v2-skeleton-wrapper.mjs.map +1 -1
  157. package/fesm2022/rt-tools-ui-kit-v2-skeleton.mjs +242 -122
  158. package/fesm2022/rt-tools-ui-kit-v2-skeleton.mjs.map +1 -1
  159. package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs +439 -0
  160. package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs.map +1 -0
  161. package/fesm2022/rt-tools-ui-kit-v2-spinner.mjs +218 -69
  162. package/fesm2022/rt-tools-ui-kit-v2-spinner.mjs.map +1 -1
  163. package/fesm2022/rt-tools-ui-kit-v2-split-button.mjs +292 -91
  164. package/fesm2022/rt-tools-ui-kit-v2-split-button.mjs.map +1 -1
  165. package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs +225 -138
  166. package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs.map +1 -1
  167. package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs +150 -116
  168. package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs.map +1 -1
  169. package/fesm2022/rt-tools-ui-kit-v2-table.mjs +2462 -1583
  170. package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
  171. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +647 -346
  172. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
  173. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +335 -121
  174. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
  175. package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs +217 -84
  176. package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs.map +1 -1
  177. package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs +151 -72
  178. package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs.map +1 -1
  179. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +697 -226
  180. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
  181. package/fesm2022/rt-tools-ui-kit-v2-timeline.mjs +92 -38
  182. package/fesm2022/rt-tools-ui-kit-v2-timeline.mjs.map +1 -1
  183. package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +752 -338
  184. package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -1
  185. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +310 -129
  186. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
  187. package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs +286 -158
  188. package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs.map +1 -1
  189. package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs +270 -134
  190. package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs.map +1 -1
  191. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +322 -202
  192. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -1
  193. package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs +908 -0
  194. package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs.map +1 -0
  195. package/fesm2022/rt-tools-ui-kit-v2-tree.mjs +785 -0
  196. package/fesm2022/rt-tools-ui-kit-v2-tree.mjs.map +1 -0
  197. package/fesm2022/rt-tools-ui-kit-v2-welcome-dialog.mjs +118 -63
  198. package/fesm2022/rt-tools-ui-kit-v2-welcome-dialog.mjs.map +1 -1
  199. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +783 -262
  200. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
  201. package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs +633 -294
  202. package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs.map +1 -1
  203. package/fesm2022/rt-tools-ui-kit-v2.mjs +100 -103
  204. package/package.json +41 -1
  205. package/src/assets/icons/collapse-all.svg +9 -0
  206. package/src/assets/icons/expand-all.svg +9 -0
  207. package/src/assets/icons-material/collapse-all.fill.svg +5 -0
  208. package/src/assets/icons-material/collapse-all.svg +5 -0
  209. package/src/assets/icons-material/expand-all.fill.svg +5 -0
  210. package/src/assets/icons-material/expand-all.svg +5 -0
  211. package/src/assets/icons-material/undo.fill.svg +5 -0
  212. package/src/assets/icons-material/undo.svg +5 -0
  213. package/src/lib/components/bottom-sheet/CONTEXT.md +20 -2
  214. package/src/lib/components/bottom-sheet/rt-bottom-sheet.component.scss +35 -1
  215. package/src/lib/components/breadcrumbs/CONTEXT.md +37 -0
  216. package/src/lib/components/breadcrumbs/rt-breadcrumbs.component.scss +205 -0
  217. package/src/lib/components/carousel/CONTEXT.md +42 -0
  218. package/src/lib/components/carousel/rt-carousel.component.scss +117 -0
  219. package/src/lib/components/checkbox/CONTEXT.md +3 -0
  220. package/src/lib/components/checkbox/rt-checkbox.component.scss +9 -3
  221. package/src/lib/components/color-palette/CONTEXT.md +49 -0
  222. package/src/lib/components/color-palette/picker/rt-color-picker.component.scss +161 -0
  223. package/src/lib/components/color-palette/rt-color-palette.component.scss +132 -0
  224. package/src/lib/components/draggable-tree/CONTEXT.md +54 -0
  225. package/src/lib/components/draggable-tree/rt-draggable-tree.component.scss +219 -0
  226. package/src/lib/components/hybrid-tree/CONTEXT.md +31 -0
  227. package/src/lib/components/hybrid-tree-selector/CONTEXT.md +25 -0
  228. package/src/lib/components/icon-button/CONTEXT.md +3 -0
  229. package/src/lib/components/inline-edit/CONTEXT.md +41 -0
  230. package/src/lib/components/inline-edit/rt-inline-edit.component.scss +274 -0
  231. package/src/lib/components/popover/CONTEXT.md +3 -0
  232. package/src/lib/components/speed-menu/CONTEXT.md +34 -0
  233. package/src/lib/components/speed-menu/rt-speed-menu.component.scss +118 -0
  234. package/src/lib/components/tag/rt-tag.component.scss +12 -0
  235. package/src/lib/components/thread-list/CONTEXT.md +1 -0
  236. package/src/lib/components/thread-list/rt-thread-list.component.scss +2 -1
  237. package/src/lib/components/toolbar/CONTEXT.md +10 -0
  238. package/src/lib/components/toolbar/rt-toolbar.component.scss +18 -0
  239. package/src/lib/components/tooltip/CONTEXT.md +8 -1
  240. package/src/lib/components/tree/CONTEXT.md +66 -0
  241. package/src/lib/components/tree/rt-tree.component.scss +313 -0
  242. package/src/lib/components/tree-selector/CONTEXT.md +47 -0
  243. package/src/lib/components/tree-selector/rt-tree-selector.component.scss +121 -0
  244. package/src/styles/_primitives.scss +4 -0
  245. package/styles/tokens.css +3 -0
  246. package/types/rt-tools-ui-kit-v2-accordion.d.ts +31 -24
  247. package/types/rt-tools-ui-kit-v2-action-bar.d.ts +112 -91
  248. package/types/rt-tools-ui-kit-v2-ai-run-status.d.ts +64 -40
  249. package/types/rt-tools-ui-kit-v2-aside-section.d.ts +13 -10
  250. package/types/rt-tools-ui-kit-v2-aside.d.ts +268 -206
  251. package/types/rt-tools-ui-kit-v2-autocomplete.d.ts +102 -61
  252. package/types/rt-tools-ui-kit-v2-bar-list.d.ts +39 -27
  253. package/types/rt-tools-ui-kit-v2-bottom-sheet.d.ts +31 -20
  254. package/types/rt-tools-ui-kit-v2-breadcrumbs.d.ts +89 -0
  255. package/types/rt-tools-ui-kit-v2-button.d.ts +119 -59
  256. package/types/rt-tools-ui-kit-v2-calendar.d.ts +151 -86
  257. package/types/rt-tools-ui-kit-v2-card.d.ts +42 -21
  258. package/types/rt-tools-ui-kit-v2-carousel.d.ts +76 -0
  259. package/types/rt-tools-ui-kit-v2-checkbox.d.ts +48 -24
  260. package/types/rt-tools-ui-kit-v2-collapsible-text.d.ts +28 -20
  261. package/types/rt-tools-ui-kit-v2-color-palette.d.ts +208 -0
  262. package/types/rt-tools-ui-kit-v2-confirm-popover.d.ts +104 -47
  263. package/types/rt-tools-ui-kit-v2-container.d.ts +278 -221
  264. package/types/rt-tools-ui-kit-v2-copy-value.d.ts +39 -24
  265. package/types/rt-tools-ui-kit-v2-core.d.ts +856 -865
  266. package/types/rt-tools-ui-kit-v2-counter-row.d.ts +20 -12
  267. package/types/rt-tools-ui-kit-v2-counter.d.ts +70 -38
  268. package/types/rt-tools-ui-kit-v2-data-list.d.ts +429 -264
  269. package/types/rt-tools-ui-kit-v2-data-table.d.ts +500 -351
  270. package/types/rt-tools-ui-kit-v2-date-picker.d.ts +164 -138
  271. package/types/rt-tools-ui-kit-v2-date-range.d.ts +102 -84
  272. package/types/rt-tools-ui-kit-v2-delta-view.d.ts +16 -13
  273. package/types/rt-tools-ui-kit-v2-detail-list.d.ts +23 -16
  274. package/types/rt-tools-ui-kit-v2-dialog.d.ts +130 -101
  275. package/types/rt-tools-ui-kit-v2-dot-field.d.ts +10 -13
  276. package/types/rt-tools-ui-kit-v2-download-link.d.ts +22 -17
  277. package/types/rt-tools-ui-kit-v2-draggable-tree.d.ts +132 -0
  278. package/types/rt-tools-ui-kit-v2-dynamic-list.d.ts +185 -96
  279. package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +904 -404
  280. package/types/rt-tools-ui-kit-v2-empty-state.d.ts +48 -19
  281. package/types/rt-tools-ui-kit-v2-expansion-panel.d.ts +67 -39
  282. package/types/rt-tools-ui-kit-v2-field.d.ts +90 -49
  283. package/types/rt-tools-ui-kit-v2-file-card.d.ts +115 -75
  284. package/types/rt-tools-ui-kit-v2-file-drop.d.ts +75 -48
  285. package/types/rt-tools-ui-kit-v2-file-input.d.ts +53 -36
  286. package/types/rt-tools-ui-kit-v2-file-list.d.ts +5 -8
  287. package/types/rt-tools-ui-kit-v2-filter-control.d.ts +83 -49
  288. package/types/rt-tools-ui-kit-v2-form-control.d.ts +102 -74
  289. package/types/rt-tools-ui-kit-v2-header.d.ts +40 -22
  290. package/types/rt-tools-ui-kit-v2-hybrid-tree-selector.d.ts +14 -0
  291. package/types/rt-tools-ui-kit-v2-hybrid-tree.d.ts +72 -0
  292. package/types/rt-tools-ui-kit-v2-icon-button.d.ts +190 -90
  293. package/types/rt-tools-ui-kit-v2-icon.d.ts +160 -129
  294. package/types/rt-tools-ui-kit-v2-image-cropper.d.ts +151 -111
  295. package/types/rt-tools-ui-kit-v2-image-upload.d.ts +159 -85
  296. package/types/rt-tools-ui-kit-v2-info-item.d.ts +26 -13
  297. package/types/rt-tools-ui-kit-v2-inline-edit.d.ts +194 -0
  298. package/types/rt-tools-ui-kit-v2-input-number.d.ts +102 -53
  299. package/types/rt-tools-ui-kit-v2-input.d.ts +82 -43
  300. package/types/rt-tools-ui-kit-v2-live-badge.d.ts +30 -17
  301. package/types/rt-tools-ui-kit-v2-logo.d.ts +49 -32
  302. package/types/rt-tools-ui-kit-v2-markdown-text.d.ts +26 -17
  303. package/types/rt-tools-ui-kit-v2-menu.d.ts +272 -155
  304. package/types/rt-tools-ui-kit-v2-message.d.ts +59 -33
  305. package/types/rt-tools-ui-kit-v2-money-list.d.ts +36 -18
  306. package/types/rt-tools-ui-kit-v2-multiselect.d.ts +114 -80
  307. package/types/rt-tools-ui-kit-v2-night-grid.d.ts +34 -25
  308. package/types/rt-tools-ui-kit-v2-note.d.ts +12 -9
  309. package/types/rt-tools-ui-kit-v2-notifications-bell.d.ts +37 -16
  310. package/types/rt-tools-ui-kit-v2-page-header.d.ts +218 -150
  311. package/types/rt-tools-ui-kit-v2-pagination.d.ts +99 -63
  312. package/types/rt-tools-ui-kit-v2-photo-viewer.d.ts +61 -66
  313. package/types/rt-tools-ui-kit-v2-popover.d.ts +116 -55
  314. package/types/rt-tools-ui-kit-v2-prompt-suggestion.d.ts +26 -16
  315. package/types/rt-tools-ui-kit-v2-radio-button.d.ts +85 -43
  316. package/types/rt-tools-ui-kit-v2-radius.d.ts +18 -15
  317. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +931 -590
  318. package/types/rt-tools-ui-kit-v2-ripple.d.ts +28 -25
  319. package/types/rt-tools-ui-kit-v2-scroll-area.d.ts +60 -58
  320. package/types/rt-tools-ui-kit-v2-section-nav.d.ts +32 -22
  321. package/types/rt-tools-ui-kit-v2-select.d.ts +182 -139
  322. package/types/rt-tools-ui-kit-v2-side-menu.d.ts +452 -349
  323. package/types/rt-tools-ui-kit-v2-skeleton-wrapper.d.ts +53 -20
  324. package/types/rt-tools-ui-kit-v2-skeleton.d.ts +55 -26
  325. package/types/rt-tools-ui-kit-v2-speed-menu.d.ts +131 -0
  326. package/types/rt-tools-ui-kit-v2-spinner.d.ts +56 -28
  327. package/types/rt-tools-ui-kit-v2-split-button.d.ts +96 -55
  328. package/types/rt-tools-ui-kit-v2-stat-tile.d.ts +88 -60
  329. package/types/rt-tools-ui-kit-v2-stepper.d.ts +50 -37
  330. package/types/rt-tools-ui-kit-v2-table.d.ts +631 -480
  331. package/types/rt-tools-ui-kit-v2-tabs.d.ts +198 -113
  332. package/types/rt-tools-ui-kit-v2-tag.d.ts +106 -53
  333. package/types/rt-tools-ui-kit-v2-textarea.d.ts +48 -25
  334. package/types/rt-tools-ui-kit-v2-theme-toggle.d.ts +28 -26
  335. package/types/rt-tools-ui-kit-v2-thread-list.d.ts +154 -94
  336. package/types/rt-tools-ui-kit-v2-timeline.d.ts +30 -28
  337. package/types/rt-tools-ui-kit-v2-toast.d.ts +174 -98
  338. package/types/rt-tools-ui-kit-v2-toggle-button-group.d.ts +132 -86
  339. package/types/rt-tools-ui-kit-v2-toggle-switch.d.ts +88 -50
  340. package/types/rt-tools-ui-kit-v2-toolbar.d.ts +30 -27
  341. package/types/rt-tools-ui-kit-v2-tooltip.d.ts +65 -41
  342. package/types/rt-tools-ui-kit-v2-tree-selector.d.ts +257 -0
  343. package/types/rt-tools-ui-kit-v2-tree.d.ts +282 -0
  344. package/types/rt-tools-ui-kit-v2-welcome-dialog.d.ts +21 -24
  345. package/types/rt-tools-ui-kit-v2-workspace-details.d.ts +195 -124
  346. package/types/rt-tools-ui-kit-v2-workspace.d.ts +122 -79
  347. package/types/rt-tools-ui-kit-v2.d.ts +100 -90
  348. package/fesm2022/rt-tools-ui-kit-v2.mjs.map +0 -1
@@ -1,174 +1,296 @@
1
- import * as i0 from '@angular/core';
2
- import { booleanAttribute, inject, Injector, DestroyRef, signal, computed, input, output, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
3
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
- import { NgControl, NG_VALUE_ACCESSOR } from '@angular/forms';
5
- import { Subject, distinctUntilChanged, switchMap, EMPTY } from 'rxjs';
6
- import { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';
7
- import * as i1 from '@rt-tools/ui-kit-v2/radius';
8
- import { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';
9
-
10
- const BEM_BLOCK = 'rt-radio-button';
11
- /** Вход выбранности: не заданный вход — `null`, и тогда выбранность решает форма. */
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, DestroyRef, Injector, ViewEncapsulation, booleanAttribute, computed, forwardRef, inject, input, output, signal } from "@angular/core";
3
+ import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
4
+ import { NG_VALUE_ACCESSOR, NgControl } from "@angular/forms";
5
+ import { EMPTY, Subject, distinctUntilChanged, switchMap } from "rxjs";
6
+ import { BlockDirective, ElemDirective, ModDirective } from "@rt-tools/core";
7
+ import * as i1 from "@rt-tools/ui-kit-v2/radius";
8
+ import { RtRadiusDirective } from "@rt-tools/ui-kit-v2/radius";
9
+ const BEM_BLOCK = "rt-radio-button";
12
10
  function checkedAttribute(value) {
13
- return value === null || value === undefined ? null : booleanAttribute(value);
14
- }
15
- /**
16
- * Радиокнопка: `role="radio"` с `aria-checked` и `aria-disabled`, выбор нажатием, пробелом и Enter.
17
- *
18
- * Выбор приходит двумя путями. Форма пишет модель через `ControlValueAccessor`, и радиокнопка
19
- * выбрана, когда её значение — сама модель, а не равное ей. Без формы выбранность ставится входом
20
- * `checked`, а выбор сообщается выходом `checkedChange`: так строку отмечает таблица. Заданный вход
21
- * решает раньше модели формы.
22
- *
23
- * Нажатие на выбранную выбор не снимает — радиокнопку покидают только выбором другой. Каждое
24
- * нажатие сообщается наружу `clickAction` и дальше обёртки не идёт: строка таблицы под кружком не
25
- * открывается. Выбор клавишей наружу нажатием не сообщается.
26
- *
27
- * Отключение складывается из входа `disabled` и слова формы: форма зовёт `setDisabledState`
28
- * раньше первого обновления вида, и один общий signal затёр бы её слово.
29
- *
30
- * Каждая радиокнопка — свой `ControlValueAccessor`, и значение, отданное одной, форма соседям на
31
- * том же контроле не пишет: поэтому модель берётся и у самого контрола.
32
- */
33
- class RtRadioButtonComponent {
34
- #injector;
35
- #destroyRef;
36
- #onChange;
37
- #onTouched;
38
- /**
39
- * Контрол, к которому радиокнопка привязана сейчас. Директива формы меняет его, не пересоздавая
40
- * себя: `[formControl]` получил другой контрол, `[formGroup]` — другую группу. Слушать надо
41
- * только нынешний — прежний, оставшись под подпиской, зажёг бы точку из мёртвой формы, и
42
- * нажатие по ней уже не дошло бы до живой.
43
- */
44
- #controlSource;
45
- /** Модель, записанная формой. */
46
- #model;
47
- /** Отключение, назначенное формой через `setDisabledState`. */
48
- #disabledByForm;
49
- constructor() {
50
- this.#injector = inject(Injector);
51
- this.#destroyRef = inject(DestroyRef);
52
- this.#onChange = () => undefined;
53
- this.#onTouched = () => undefined;
54
- /**
55
- * Контрол, к которому радиокнопка привязана сейчас. Директива формы меняет его, не пересоздавая
56
- * себя: `[formControl]` получил другой контрол, `[formGroup]` — другую группу. Слушать надо
57
- * только нынешний — прежний, оставшись под подпиской, зажёг бы точку из мёртвой формы, и
58
- * нажатие по ней уже не дошло бы до живой.
59
- */
60
- this.#controlSource = new Subject();
61
- /** Модель, записанная формой. */
62
- this.#model = signal(null, /* @ts-ignore */
63
- ...(ngDevMode ? [{ debugName: "#model" }] : /* istanbul ignore next */ []));
64
- /** Отключение, назначенное формой через `setDisabledState`. */
65
- this.#disabledByForm = signal(false, /* @ts-ignore */
66
- ...(ngDevMode ? [{ debugName: "#disabledByForm" }] : /* istanbul ignore next */ []));
67
- this.isChecked = computed(() => this.checked() ?? this.value() === this.#model(), /* @ts-ignore */
68
- ...(ngDevMode ? [{ debugName: "isChecked" }] : /* istanbul ignore next */ []));
69
- this.isDisabled = computed(() => this.disabled() || this.#disabledByForm(), /* @ts-ignore */
70
- ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
71
- /** Значение радиокнопки: выбрана та, чьё значение — модель формы. */
72
- this.value = input.required(/* @ts-ignore */
73
- ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
74
- /** Выбранность без формы; не заданный вход оставляет решение форме. */
75
- this.checked = input(null, { ...(ngDevMode ? { debugName: "checked" } : /* istanbul ignore next */ {}), transform: checkedAttribute });
76
- this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
77
- /** Вид «карточка»: рамка, содержимое слева, кружок справа. */
78
- this.card = input(false, { ...(ngDevMode ? { debugName: "card" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
79
- this.label = input('', /* @ts-ignore */
80
- ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
81
- this.description = input('', /* @ts-ignore */
82
- ...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
83
- /** Имя для вспомогательных средств, когда видимой подписи нет — кружок в строке таблицы. */
84
- this.ariaLabel = input(null, /* @ts-ignore */
85
- ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
86
- /** Каждое нажатие указателем, сменило оно выбор или нет. */
87
- this.clickAction = output();
88
- /** Радиокнопка стала выбранной. */
89
- this.checkedChange = output();
90
- // Значение, отданное соседкой, форма этой радиокнопке не пишет — модель берётся у самого
91
- // контрола, иначе точка осталась бы у двух сразу. Подписка идёт за сменой контрола и
92
- // бросает прежний.
93
- this.#controlSource
94
- .pipe(distinctUntilChanged(), switchMap((control) => control?.valueChanges ?? EMPTY), takeUntilDestroyed(this.#destroyRef))
95
- .subscribe((value) => this.#model.set(value));
96
- }
97
- writeValue(value) {
98
- this.#model.set(value);
99
- }
100
- /**
101
- * Директива формы зовёт это при каждой привязке к контролу — и первой, и после смены контрола,
102
- * — уже поставив новый контрол себе. Здесь радиокнопка и узнаёт, кого слушать. Спросить
103
- * директиву в конструкторе нельзя: она берёт радиокнопку своим accessor, и это круговая
104
- * зависимость.
105
- */
106
- registerOnChange(fn) {
107
- this.#onChange = fn;
108
- this.#controlSource.next(this.#injector.get(NgControl, null, { self: true, optional: true })?.control ?? null);
109
- }
110
- registerOnTouched(fn) {
111
- this.#onTouched = fn;
112
- }
113
- setDisabledState(disabled) {
114
- this.#disabledByForm.set(disabled);
115
- }
116
- onClick(event) {
117
- this.#select();
118
- this.clickAction.emit(event);
119
- event.stopPropagation();
120
- event.preventDefault();
121
- }
122
- onKeydown(event) {
123
- if (event.key !== ' ' && event.key !== 'Enter') {
124
- return;
125
- }
126
- event.preventDefault();
127
- this.#select();
128
- }
129
- #select() {
130
- if (this.isDisabled()) {
131
- return;
132
- }
133
- if (!this.isChecked()) {
134
- this.#model.set(this.value());
135
- this.#onChange(this.value());
136
- this.checkedChange.emit(true);
137
- }
138
- this.#onTouched();
139
- }
140
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtRadioButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
141
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: RtRadioButtonComponent, isStandalone: true, selector: "rt-radio-button", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, card: { classPropertyName: "card", publicName: "card", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickAction: "clickAction", checkedChange: "checkedChange" }, host: { classAttribute: "rt-radio-button" }, providers: [
142
- {
143
- provide: NG_VALUE_ACCESSOR,
144
- useExisting: forwardRef(() => RtRadioButtonComponent),
145
- multi: true,
146
- },
147
- ], hostDirectives: [{ directive: i1.RtRadiusDirective, inputs: ["radius", "radius"] }], ngImport: i0, template: "<div\n rtBlock=\"rt-radio-button\"\n qa-dataid=\"radio-button-control\"\n role=\"radio\"\n tabindex=\"0\"\n [rtMod]=\"{ checked: isChecked(), disabled: isDisabled(), card: card() }\"\n [attr.aria-checked]=\"isChecked()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"onClick($event)\"\n (keydown)=\"onKeydown($event)\">\n <span rtElem=\"indicator\">\n @if (isChecked()) {\n <span rtElem=\"dot\"></span>\n }\n </span>\n\n @if (label() || description()) {\n <span rtElem=\"content\">\n @if (label()) {\n <span rtElem=\"label\" qa-dataid=\"radio-button-label\">{{ label() }}</span>\n }\n @if (description()) {\n <span rtElem=\"description\" qa-dataid=\"radio-button-description\">{{ description() }}</span>\n }\n </span>\n }\n</div>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-radio-button{display:inline-block}rt-radio-button[data-rt-radius=none]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-none)}rt-radio-button[data-rt-radius=xs]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-xs)}rt-radio-button[data-rt-radius=sm]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-sm)}rt-radio-button[data-rt-radius=ms]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-ms)}rt-radio-button[data-rt-radius=md]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-md)}rt-radio-button[data-rt-radius=lg]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-lg)}rt-radio-button[data-rt-radius=xl]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-xl)}rt-radio-button[data-rt-radius=\"2xl\"]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-2xl)}rt-radio-button[data-rt-radius=full]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-full)}rt-radio-button .rt-radio-button{--rt-radio-button-size: var(--rt-size-4);--rt-radio-button-dot-size: var(--rt-size-2);--rt-radio-button-rim-width: var(--rt-border-width-medium);--rt-radio-button-round: var(--rt-radius-full);--rt-radio-button-focus-radius: var(--rt-radius-sm);--rt-radio-button-focus-shadow: var(--rt-shadow-focus-ring);--rt-radio-button-card-radius: var(--rt-radius-md);--rt-radio-button-card-border-width: var(--rt-border-width-thin);--rt-radio-button-transition-duration: var(--rt-duration-fast);display:flex;align-items:center;cursor:pointer;gap:var(--rt-space-sm);text-align:start}rt-radio-button .rt-radio-button:focus-visible{border-radius:var(--rt-radio-button-focus-radius);box-shadow:var(--rt-radio-button-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-radio-button .rt-radio-button__indicator{display:inline-flex;width:var(--rt-radio-button-size);height:var(--rt-radio-button-size);flex-shrink:0;align-items:center;justify-content:center;border:var(--rt-radio-button-rim-width) solid var(--rt-color-border-strong);border-radius:var(--rt-radio-button-round);transition:border-color var(--rt-radio-button-transition-duration) ease}rt-radio-button .rt-radio-button__dot{width:var(--rt-radio-button-dot-size);height:var(--rt-radio-button-dot-size);border-radius:var(--rt-radio-button-round);background:var(--rt-color-action-primary)}rt-radio-button .rt-radio-button__content{display:flex;min-width:0;flex:1;flex-direction:column;gap:var(--rt-space-xs)}rt-radio-button .rt-radio-button__label{color:var(--rt-color-text-primary);font-size:var(--rt-text-sm);-webkit-user-select:none;user-select:none}rt-radio-button .rt-radio-button__description{color:var(--rt-color-text-muted);font-size:var(--rt-text-xs)}rt-radio-button .rt-radio-button--checked .rt-radio-button__indicator{border-color:var(--rt-color-action-primary)}rt-radio-button .rt-radio-button--card{flex-direction:row-reverse;align-items:flex-start;justify-content:space-between;padding:var(--rt-space-sm) var(--rt-space-md);border:var(--rt-radio-button-card-border-width) solid var(--rt-color-border-subtle);border-radius:var(--rt-radio-button-card-radius);transition:border-color var(--rt-radio-button-transition-duration) ease}rt-radio-button .rt-radio-button--card .rt-radio-button__label{font-weight:var(--rt-font-weight-medium)}rt-radio-button .rt-radio-button--card.rt-radio-button--checked{border-color:var(--rt-color-action-primary)}rt-radio-button .rt-radio-button--disabled{cursor:not-allowed;opacity:var(--rt-opacity-disabled);pointer-events:none}}\n"], dependencies: [{ kind: "directive", type:
148
- // standalone directives
149
- BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: ModDirective, selector: "[rtMod]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
11
+ return value === null || value === void 0 ? null : booleanAttribute(value);
150
12
  }
151
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtRadioButtonComponent, decorators: [{
152
- type: Component,
153
- args: [{ selector: 'rt-radio-button', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
154
- // standalone directives
155
- BlockDirective,
156
- ElemDirective,
157
- ModDirective,
158
- ], providers: [
159
- {
160
- provide: NG_VALUE_ACCESSOR,
161
- useExisting: forwardRef(() => RtRadioButtonComponent),
162
- multi: true,
163
- },
164
- ], hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }], host: {
165
- class: BEM_BLOCK,
166
- }, template: "<div\n rtBlock=\"rt-radio-button\"\n qa-dataid=\"radio-button-control\"\n role=\"radio\"\n tabindex=\"0\"\n [rtMod]=\"{ checked: isChecked(), disabled: isDisabled(), card: card() }\"\n [attr.aria-checked]=\"isChecked()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"onClick($event)\"\n (keydown)=\"onKeydown($event)\">\n <span rtElem=\"indicator\">\n @if (isChecked()) {\n <span rtElem=\"dot\"></span>\n }\n </span>\n\n @if (label() || description()) {\n <span rtElem=\"content\">\n @if (label()) {\n <span rtElem=\"label\" qa-dataid=\"radio-button-label\">{{ label() }}</span>\n }\n @if (description()) {\n <span rtElem=\"description\" qa-dataid=\"radio-button-description\">{{ description() }}</span>\n }\n </span>\n }\n</div>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-radio-button{display:inline-block}rt-radio-button[data-rt-radius=none]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-none)}rt-radio-button[data-rt-radius=xs]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-xs)}rt-radio-button[data-rt-radius=sm]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-sm)}rt-radio-button[data-rt-radius=ms]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-ms)}rt-radio-button[data-rt-radius=md]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-md)}rt-radio-button[data-rt-radius=lg]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-lg)}rt-radio-button[data-rt-radius=xl]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-xl)}rt-radio-button[data-rt-radius=\"2xl\"]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-2xl)}rt-radio-button[data-rt-radius=full]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-full)}rt-radio-button .rt-radio-button{--rt-radio-button-size: var(--rt-size-4);--rt-radio-button-dot-size: var(--rt-size-2);--rt-radio-button-rim-width: var(--rt-border-width-medium);--rt-radio-button-round: var(--rt-radius-full);--rt-radio-button-focus-radius: var(--rt-radius-sm);--rt-radio-button-focus-shadow: var(--rt-shadow-focus-ring);--rt-radio-button-card-radius: var(--rt-radius-md);--rt-radio-button-card-border-width: var(--rt-border-width-thin);--rt-radio-button-transition-duration: var(--rt-duration-fast);display:flex;align-items:center;cursor:pointer;gap:var(--rt-space-sm);text-align:start}rt-radio-button .rt-radio-button:focus-visible{border-radius:var(--rt-radio-button-focus-radius);box-shadow:var(--rt-radio-button-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-radio-button .rt-radio-button__indicator{display:inline-flex;width:var(--rt-radio-button-size);height:var(--rt-radio-button-size);flex-shrink:0;align-items:center;justify-content:center;border:var(--rt-radio-button-rim-width) solid var(--rt-color-border-strong);border-radius:var(--rt-radio-button-round);transition:border-color var(--rt-radio-button-transition-duration) ease}rt-radio-button .rt-radio-button__dot{width:var(--rt-radio-button-dot-size);height:var(--rt-radio-button-dot-size);border-radius:var(--rt-radio-button-round);background:var(--rt-color-action-primary)}rt-radio-button .rt-radio-button__content{display:flex;min-width:0;flex:1;flex-direction:column;gap:var(--rt-space-xs)}rt-radio-button .rt-radio-button__label{color:var(--rt-color-text-primary);font-size:var(--rt-text-sm);-webkit-user-select:none;user-select:none}rt-radio-button .rt-radio-button__description{color:var(--rt-color-text-muted);font-size:var(--rt-text-xs)}rt-radio-button .rt-radio-button--checked .rt-radio-button__indicator{border-color:var(--rt-color-action-primary)}rt-radio-button .rt-radio-button--card{flex-direction:row-reverse;align-items:flex-start;justify-content:space-between;padding:var(--rt-space-sm) var(--rt-space-md);border:var(--rt-radio-button-card-border-width) solid var(--rt-color-border-subtle);border-radius:var(--rt-radio-button-card-radius);transition:border-color var(--rt-radio-button-transition-duration) ease}rt-radio-button .rt-radio-button--card .rt-radio-button__label{font-weight:var(--rt-font-weight-medium)}rt-radio-button .rt-radio-button--card.rt-radio-button--checked{border-color:var(--rt-color-action-primary)}rt-radio-button .rt-radio-button--disabled{cursor:not-allowed;opacity:var(--rt-opacity-disabled);pointer-events:none}}\n"] }]
167
- }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], card: [{ type: i0.Input, args: [{ isSignal: true, alias: "card", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], clickAction: [{ type: i0.Output, args: ["clickAction"] }], checkedChange: [{ type: i0.Output, args: ["checkedChange"] }] } });
168
-
169
- /**
170
- * Generated bundle index. Do not edit.
171
- */
172
-
13
+ var RtRadioButtonComponent = class RtRadioButtonComponent {
14
+ #injector;
15
+ #destroyRef;
16
+ #onChange;
17
+ #onTouched;
18
+ #controlSource;
19
+ #model;
20
+ #disabledByForm;
21
+ constructor() {
22
+ this.#injector = inject(Injector);
23
+ this.#destroyRef = inject(DestroyRef);
24
+ this.#onChange = () => void 0;
25
+ this.#onTouched = () => void 0;
26
+ this.#controlSource = new Subject();
27
+ this.#model = signal(null, ...ngDevMode ? [{ debugName: "#model" }] : /* istanbul ignore next */ []);
28
+ this.#disabledByForm = signal(false, ...ngDevMode ? [{ debugName: "#disabledByForm" }] : /* istanbul ignore next */ []);
29
+ this.isChecked = computed(() => this.checked() ?? this.value() === this.#model(), ...ngDevMode ? [{ debugName: "isChecked" }] : /* istanbul ignore next */ []);
30
+ this.isDisabled = computed(() => this.disabled() || this.#disabledByForm(), ...ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []);
31
+ this.value = input.required(...ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []);
32
+ this.checked = input(null, {
33
+ ...ngDevMode ? { debugName: "checked" } : /* istanbul ignore next */ {},
34
+ transform: checkedAttribute
35
+ });
36
+ this.disabled = input(false, {
37
+ ...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
38
+ transform: booleanAttribute
39
+ });
40
+ this.card = input(false, {
41
+ ...ngDevMode ? { debugName: "card" } : /* istanbul ignore next */ {},
42
+ transform: booleanAttribute
43
+ });
44
+ this.label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
45
+ this.description = input("", ...ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []);
46
+ this.ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
47
+ this.clickAction = output();
48
+ this.checkedChange = output();
49
+ this.#controlSource.pipe(distinctUntilChanged(), switchMap((control) => control?.valueChanges ?? EMPTY), takeUntilDestroyed(this.#destroyRef)).subscribe((value) => this.#model.set(value));
50
+ }
51
+ writeValue(value) {
52
+ this.#model.set(value);
53
+ }
54
+ registerOnChange(fn) {
55
+ this.#onChange = fn;
56
+ this.#controlSource.next(this.#injector.get(NgControl, null, {
57
+ self: true,
58
+ optional: true
59
+ })?.control ?? null);
60
+ }
61
+ registerOnTouched(fn) {
62
+ this.#onTouched = fn;
63
+ }
64
+ setDisabledState(disabled) {
65
+ this.#disabledByForm.set(disabled);
66
+ }
67
+ onClick(event) {
68
+ this.#select();
69
+ this.clickAction.emit(event);
70
+ event.stopPropagation();
71
+ event.preventDefault();
72
+ }
73
+ onKeydown(event) {
74
+ if (event.key !== " " && event.key !== "Enter") return;
75
+ event.preventDefault();
76
+ this.#select();
77
+ }
78
+ #select() {
79
+ if (this.isDisabled()) return;
80
+ if (!this.isChecked()) {
81
+ this.#model.set(this.value());
82
+ this.#onChange(this.value());
83
+ this.checkedChange.emit(true);
84
+ }
85
+ this.#onTouched();
86
+ }
87
+ static {
88
+ this.ɵfac = i0.ɵɵngDeclareFactory({
89
+ minVersion: "12.0.0",
90
+ version: "22.2.2",
91
+ ngImport: i0,
92
+ type: RtRadioButtonComponent,
93
+ deps: [],
94
+ target: i0.ɵɵFactoryTarget.Component
95
+ });
96
+ }
97
+ static {
98
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
99
+ minVersion: "17.0.0",
100
+ version: "22.2.2",
101
+ type: RtRadioButtonComponent,
102
+ isStandalone: true,
103
+ selector: "rt-radio-button",
104
+ inputs: {
105
+ value: {
106
+ classPropertyName: "value",
107
+ publicName: "value",
108
+ isSignal: true,
109
+ isRequired: true,
110
+ transformFunction: null
111
+ },
112
+ checked: {
113
+ classPropertyName: "checked",
114
+ publicName: "checked",
115
+ isSignal: true,
116
+ isRequired: false,
117
+ transformFunction: null
118
+ },
119
+ disabled: {
120
+ classPropertyName: "disabled",
121
+ publicName: "disabled",
122
+ isSignal: true,
123
+ isRequired: false,
124
+ transformFunction: null
125
+ },
126
+ card: {
127
+ classPropertyName: "card",
128
+ publicName: "card",
129
+ isSignal: true,
130
+ isRequired: false,
131
+ transformFunction: null
132
+ },
133
+ label: {
134
+ classPropertyName: "label",
135
+ publicName: "label",
136
+ isSignal: true,
137
+ isRequired: false,
138
+ transformFunction: null
139
+ },
140
+ description: {
141
+ classPropertyName: "description",
142
+ publicName: "description",
143
+ isSignal: true,
144
+ isRequired: false,
145
+ transformFunction: null
146
+ },
147
+ ariaLabel: {
148
+ classPropertyName: "ariaLabel",
149
+ publicName: "ariaLabel",
150
+ isSignal: true,
151
+ isRequired: false,
152
+ transformFunction: null
153
+ }
154
+ },
155
+ outputs: {
156
+ clickAction: "clickAction",
157
+ checkedChange: "checkedChange"
158
+ },
159
+ host: { classAttribute: "rt-radio-button" },
160
+ providers: [{
161
+ provide: NG_VALUE_ACCESSOR,
162
+ useExisting: forwardRef(() => RtRadioButtonComponent),
163
+ multi: true
164
+ }],
165
+ hostDirectives: [{
166
+ directive: i1.RtRadiusDirective,
167
+ inputs: ["radius", "radius"]
168
+ }],
169
+ ngImport: i0,
170
+ template: "<div\n rtBlock=\"rt-radio-button\"\n qa-dataid=\"radio-button-control\"\n role=\"radio\"\n tabindex=\"0\"\n [rtMod]=\"{ checked: isChecked(), disabled: isDisabled(), card: card() }\"\n [attr.aria-checked]=\"isChecked()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"onClick($event)\"\n (keydown)=\"onKeydown($event)\">\n <span rtElem=\"indicator\">\n @if (isChecked()) {\n <span rtElem=\"dot\"></span>\n }\n </span>\n\n @if (label() || description()) {\n <span rtElem=\"content\">\n @if (label()) {\n <span rtElem=\"label\" qa-dataid=\"radio-button-label\">{{ label() }}</span>\n }\n @if (description()) {\n <span rtElem=\"description\" qa-dataid=\"radio-button-description\">{{ description() }}</span>\n }\n </span>\n }\n</div>\n",
171
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-radio-button{display:inline-block}rt-radio-button[data-rt-radius=none]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-none)}rt-radio-button[data-rt-radius=xs]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-xs)}rt-radio-button[data-rt-radius=sm]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-sm)}rt-radio-button[data-rt-radius=ms]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-ms)}rt-radio-button[data-rt-radius=md]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-md)}rt-radio-button[data-rt-radius=lg]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-lg)}rt-radio-button[data-rt-radius=xl]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-xl)}rt-radio-button[data-rt-radius=\"2xl\"]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-2xl)}rt-radio-button[data-rt-radius=full]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-full)}rt-radio-button .rt-radio-button{--rt-radio-button-size: var(--rt-size-4);--rt-radio-button-dot-size: var(--rt-size-2);--rt-radio-button-rim-width: var(--rt-border-width-medium);--rt-radio-button-round: var(--rt-radius-full);--rt-radio-button-focus-radius: var(--rt-radius-sm);--rt-radio-button-focus-shadow: var(--rt-shadow-focus-ring);--rt-radio-button-card-radius: var(--rt-radius-md);--rt-radio-button-card-border-width: var(--rt-border-width-thin);--rt-radio-button-transition-duration: var(--rt-duration-fast);display:flex;align-items:center;cursor:pointer;gap:var(--rt-space-sm);text-align:start}rt-radio-button .rt-radio-button:focus-visible{border-radius:var(--rt-radio-button-focus-radius);box-shadow:var(--rt-radio-button-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-radio-button .rt-radio-button__indicator{display:inline-flex;width:var(--rt-radio-button-size);height:var(--rt-radio-button-size);flex-shrink:0;align-items:center;justify-content:center;border:var(--rt-radio-button-rim-width) solid var(--rt-color-border-strong);border-radius:var(--rt-radio-button-round);transition:border-color var(--rt-radio-button-transition-duration) ease}rt-radio-button .rt-radio-button__dot{width:var(--rt-radio-button-dot-size);height:var(--rt-radio-button-dot-size);border-radius:var(--rt-radio-button-round);background:var(--rt-color-action-primary)}rt-radio-button .rt-radio-button__content{display:flex;min-width:0;flex:1;flex-direction:column;gap:var(--rt-space-xs)}rt-radio-button .rt-radio-button__label{color:var(--rt-color-text-primary);font-size:var(--rt-text-sm);-webkit-user-select:none;user-select:none}rt-radio-button .rt-radio-button__description{color:var(--rt-color-text-muted);font-size:var(--rt-text-xs)}rt-radio-button .rt-radio-button--checked .rt-radio-button__indicator{border-color:var(--rt-color-action-primary)}rt-radio-button .rt-radio-button--card{flex-direction:row-reverse;align-items:flex-start;justify-content:space-between;padding:var(--rt-space-sm) var(--rt-space-md);border:var(--rt-radio-button-card-border-width) solid var(--rt-color-border-subtle);border-radius:var(--rt-radio-button-card-radius);transition:border-color var(--rt-radio-button-transition-duration) ease}rt-radio-button .rt-radio-button--card .rt-radio-button__label{font-weight:var(--rt-font-weight-medium)}rt-radio-button .rt-radio-button--card.rt-radio-button--checked{border-color:var(--rt-color-action-primary)}rt-radio-button .rt-radio-button--disabled{cursor:not-allowed;opacity:var(--rt-opacity-disabled);pointer-events:none}}\n"],
172
+ dependencies: [
173
+ {
174
+ kind: "directive",
175
+ type: BlockDirective,
176
+ selector: "[rtBlock]",
177
+ inputs: ["rtMod"]
178
+ },
179
+ {
180
+ kind: "directive",
181
+ type: ElemDirective,
182
+ selector: "[rtElem]",
183
+ inputs: ["rtMod"]
184
+ },
185
+ {
186
+ kind: "directive",
187
+ type: ModDirective,
188
+ selector: "[rtMod]"
189
+ }
190
+ ],
191
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
192
+ encapsulation: i0.ViewEncapsulation.None
193
+ });
194
+ }
195
+ };
196
+ i0.ɵɵngDeclareClassMetadata({
197
+ minVersion: "12.0.0",
198
+ version: "22.2.2",
199
+ ngImport: i0,
200
+ type: RtRadioButtonComponent,
201
+ decorators: [{
202
+ type: Component,
203
+ args: [{
204
+ selector: "rt-radio-button",
205
+ changeDetection: ChangeDetectionStrategy.OnPush,
206
+ encapsulation: ViewEncapsulation.None,
207
+ imports: [
208
+ BlockDirective,
209
+ ElemDirective,
210
+ ModDirective
211
+ ],
212
+ providers: [{
213
+ provide: NG_VALUE_ACCESSOR,
214
+ useExisting: forwardRef(() => RtRadioButtonComponent),
215
+ multi: true
216
+ }],
217
+ hostDirectives: [{
218
+ directive: RtRadiusDirective,
219
+ inputs: ["radius"]
220
+ }],
221
+ host: { class: BEM_BLOCK },
222
+ template: "<div\n rtBlock=\"rt-radio-button\"\n qa-dataid=\"radio-button-control\"\n role=\"radio\"\n tabindex=\"0\"\n [rtMod]=\"{ checked: isChecked(), disabled: isDisabled(), card: card() }\"\n [attr.aria-checked]=\"isChecked()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"onClick($event)\"\n (keydown)=\"onKeydown($event)\">\n <span rtElem=\"indicator\">\n @if (isChecked()) {\n <span rtElem=\"dot\"></span>\n }\n </span>\n\n @if (label() || description()) {\n <span rtElem=\"content\">\n @if (label()) {\n <span rtElem=\"label\" qa-dataid=\"radio-button-label\">{{ label() }}</span>\n }\n @if (description()) {\n <span rtElem=\"description\" qa-dataid=\"radio-button-description\">{{ description() }}</span>\n }\n </span>\n }\n</div>\n",
223
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-radio-button{display:inline-block}rt-radio-button[data-rt-radius=none]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-none)}rt-radio-button[data-rt-radius=xs]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-xs)}rt-radio-button[data-rt-radius=sm]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-sm)}rt-radio-button[data-rt-radius=ms]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-ms)}rt-radio-button[data-rt-radius=md]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-md)}rt-radio-button[data-rt-radius=lg]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-lg)}rt-radio-button[data-rt-radius=xl]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-xl)}rt-radio-button[data-rt-radius=\"2xl\"]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-2xl)}rt-radio-button[data-rt-radius=full]>.rt-radio-button{--rt-radio-button-card-radius: var(--rt-radius-full)}rt-radio-button .rt-radio-button{--rt-radio-button-size: var(--rt-size-4);--rt-radio-button-dot-size: var(--rt-size-2);--rt-radio-button-rim-width: var(--rt-border-width-medium);--rt-radio-button-round: var(--rt-radius-full);--rt-radio-button-focus-radius: var(--rt-radius-sm);--rt-radio-button-focus-shadow: var(--rt-shadow-focus-ring);--rt-radio-button-card-radius: var(--rt-radius-md);--rt-radio-button-card-border-width: var(--rt-border-width-thin);--rt-radio-button-transition-duration: var(--rt-duration-fast);display:flex;align-items:center;cursor:pointer;gap:var(--rt-space-sm);text-align:start}rt-radio-button .rt-radio-button:focus-visible{border-radius:var(--rt-radio-button-focus-radius);box-shadow:var(--rt-radio-button-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-radio-button .rt-radio-button__indicator{display:inline-flex;width:var(--rt-radio-button-size);height:var(--rt-radio-button-size);flex-shrink:0;align-items:center;justify-content:center;border:var(--rt-radio-button-rim-width) solid var(--rt-color-border-strong);border-radius:var(--rt-radio-button-round);transition:border-color var(--rt-radio-button-transition-duration) ease}rt-radio-button .rt-radio-button__dot{width:var(--rt-radio-button-dot-size);height:var(--rt-radio-button-dot-size);border-radius:var(--rt-radio-button-round);background:var(--rt-color-action-primary)}rt-radio-button .rt-radio-button__content{display:flex;min-width:0;flex:1;flex-direction:column;gap:var(--rt-space-xs)}rt-radio-button .rt-radio-button__label{color:var(--rt-color-text-primary);font-size:var(--rt-text-sm);-webkit-user-select:none;user-select:none}rt-radio-button .rt-radio-button__description{color:var(--rt-color-text-muted);font-size:var(--rt-text-xs)}rt-radio-button .rt-radio-button--checked .rt-radio-button__indicator{border-color:var(--rt-color-action-primary)}rt-radio-button .rt-radio-button--card{flex-direction:row-reverse;align-items:flex-start;justify-content:space-between;padding:var(--rt-space-sm) var(--rt-space-md);border:var(--rt-radio-button-card-border-width) solid var(--rt-color-border-subtle);border-radius:var(--rt-radio-button-card-radius);transition:border-color var(--rt-radio-button-transition-duration) ease}rt-radio-button .rt-radio-button--card .rt-radio-button__label{font-weight:var(--rt-font-weight-medium)}rt-radio-button .rt-radio-button--card.rt-radio-button--checked{border-color:var(--rt-color-action-primary)}rt-radio-button .rt-radio-button--disabled{cursor:not-allowed;opacity:var(--rt-opacity-disabled);pointer-events:none}}\n"]
224
+ }]
225
+ }],
226
+ ctorParameters: () => [],
227
+ propDecorators: {
228
+ value: [{
229
+ type: i0.Input,
230
+ args: [{
231
+ isSignal: true,
232
+ alias: "value",
233
+ required: true
234
+ }]
235
+ }],
236
+ checked: [{
237
+ type: i0.Input,
238
+ args: [{
239
+ isSignal: true,
240
+ alias: "checked",
241
+ required: false
242
+ }]
243
+ }],
244
+ disabled: [{
245
+ type: i0.Input,
246
+ args: [{
247
+ isSignal: true,
248
+ alias: "disabled",
249
+ required: false
250
+ }]
251
+ }],
252
+ card: [{
253
+ type: i0.Input,
254
+ args: [{
255
+ isSignal: true,
256
+ alias: "card",
257
+ required: false
258
+ }]
259
+ }],
260
+ label: [{
261
+ type: i0.Input,
262
+ args: [{
263
+ isSignal: true,
264
+ alias: "label",
265
+ required: false
266
+ }]
267
+ }],
268
+ description: [{
269
+ type: i0.Input,
270
+ args: [{
271
+ isSignal: true,
272
+ alias: "description",
273
+ required: false
274
+ }]
275
+ }],
276
+ ariaLabel: [{
277
+ type: i0.Input,
278
+ args: [{
279
+ isSignal: true,
280
+ alias: "ariaLabel",
281
+ required: false
282
+ }]
283
+ }],
284
+ clickAction: [{
285
+ type: i0.Output,
286
+ args: ["clickAction"]
287
+ }],
288
+ checkedChange: [{
289
+ type: i0.Output,
290
+ args: ["checkedChange"]
291
+ }]
292
+ }
293
+ });
173
294
  export { RtRadioButtonComponent };
174
- //# sourceMappingURL=rt-tools-ui-kit-v2-radio-button.mjs.map
295
+
296
+ //# sourceMappingURL=rt-tools-ui-kit-v2-radio-button.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rt-tools-ui-kit-v2-radio-button.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/radio-button/rt-radio-button.component.ts","../../../projects/ui-kit-v2/src/lib/components/radio-button/rt-radio-button.component.html","../../../projects/ui-kit-v2/src/lib/components/radio-button/rt-tools-ui-kit-v2-radio-button.ts"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n forwardRef,\n inject,\n Injector,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\n signal,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\nimport { distinctUntilChanged, EMPTY, Observable, Subject, switchMap } from 'rxjs';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';\n\nconst BEM_BLOCK: string = 'rt-radio-button';\n\n/** Вход выбранности: не заданный вход — `null`, и тогда выбранность решает форма. */\nfunction checkedAttribute(value: BooleanInput | null | undefined): boolean | null {\n return value === null || value === undefined ? null : booleanAttribute(value);\n}\n\n/**\n * Радиокнопка: `role=\"radio\"` с `aria-checked` и `aria-disabled`, выбор нажатием, пробелом и Enter.\n *\n * Выбор приходит двумя путями. Форма пишет модель через `ControlValueAccessor`, и радиокнопка\n * выбрана, когда её значение — сама модель, а не равное ей. Без формы выбранность ставится входом\n * `checked`, а выбор сообщается выходом `checkedChange`: так строку отмечает таблица. Заданный вход\n * решает раньше модели формы.\n *\n * Нажатие на выбранную выбор не снимает — радиокнопку покидают только выбором другой. Каждое\n * нажатие сообщается наружу `clickAction` и дальше обёртки не идёт: строка таблицы под кружком не\n * открывается. Выбор клавишей наружу нажатием не сообщается.\n *\n * Отключение складывается из входа `disabled` и слова формы: форма зовёт `setDisabledState`\n * раньше первого обновления вида, и один общий signal затёр бы её слово.\n *\n * Каждая радиокнопка — свой `ControlValueAccessor`, и значение, отданное одной, форма соседям на\n * том же контроле не пишет: поэтому модель берётся и у самого контрола.\n */\n@Component({\n selector: 'rt-radio-button',\n templateUrl: './rt-radio-button.component.html',\n styleUrl: './rt-radio-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof RtRadioButtonComponent => RtRadioButtonComponent),\n multi: true,\n },\n ],\n hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }],\n host: {\n class: BEM_BLOCK,\n },\n})\nexport class RtRadioButtonComponent implements ControlValueAccessor {\n readonly #injector: Injector = inject(Injector);\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n #onChange: (value: unknown) => void = (): void => undefined;\n #onTouched: () => void = (): void => undefined;\n\n /**\n * Контрол, к которому радиокнопка привязана сейчас. Директива формы меняет его, не пересоздавая\n * себя: `[formControl]` получил другой контрол, `[formGroup]` — другую группу. Слушать надо\n * только нынешний — прежний, оставшись под подпиской, зажёг бы точку из мёртвой формы, и\n * нажатие по ней уже не дошло бы до живой.\n */\n readonly #controlSource: Subject<AbstractControl | null> = new Subject<AbstractControl | null>();\n\n /** Модель, записанная формой. */\n readonly #model: WritableSignal<unknown> = signal<unknown>(null);\n\n /** Отключение, назначенное формой через `setDisabledState`. */\n readonly #disabledByForm: WritableSignal<boolean> = signal<boolean>(false);\n\n protected readonly isChecked: Signal<boolean> = computed((): boolean => this.checked() ?? this.value() === this.#model());\n protected readonly isDisabled: Signal<boolean> = computed((): boolean => this.disabled() || this.#disabledByForm());\n\n /** Значение радиокнопки: выбрана та, чьё значение — модель формы. */\n public readonly value: InputSignal<unknown> = input.required<unknown>();\n\n /** Выбранность без формы; не заданный вход оставляет решение форме. */\n public readonly checked: InputSignalWithTransform<boolean | null, BooleanInput | null | undefined> = input<\n boolean | null,\n BooleanInput | null | undefined\n >(null, { transform: checkedAttribute });\n\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Вид «карточка»: рамка, содержимое слева, кружок справа. */\n public readonly card: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n public readonly label: InputSignal<string> = input<string>('');\n public readonly description: InputSignal<string> = input<string>('');\n\n /** Имя для вспомогательных средств, когда видимой подписи нет — кружок в строке таблицы. */\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** Каждое нажатие указателем, сменило оно выбор или нет. */\n public readonly clickAction: OutputEmitterRef<MouseEvent> = output<MouseEvent>();\n\n /** Радиокнопка стала выбранной. */\n public readonly checkedChange: OutputEmitterRef<boolean> = output<boolean>();\n\n constructor() {\n // Значение, отданное соседкой, форма этой радиокнопке не пишет — модель берётся у самого\n // контрола, иначе точка осталась бы у двух сразу. Подписка идёт за сменой контрола и\n // бросает прежний.\n this.#controlSource\n .pipe(\n distinctUntilChanged(),\n switchMap((control: AbstractControl | null): Observable<unknown> => control?.valueChanges ?? EMPTY),\n takeUntilDestroyed(this.#destroyRef)\n )\n .subscribe((value: unknown): void => this.#model.set(value));\n }\n\n public writeValue(value: unknown): void {\n this.#model.set(value);\n }\n\n /**\n * Директива формы зовёт это при каждой привязке к контролу — и первой, и после смены контрола,\n * — уже поставив новый контрол себе. Здесь радиокнопка и узнаёт, кого слушать. Спросить\n * директиву в конструкторе нельзя: она берёт радиокнопку своим accessor, и это круговая\n * зависимость.\n */\n public registerOnChange(fn: (value: unknown) => void): void {\n this.#onChange = fn;\n this.#controlSource.next(this.#injector.get(NgControl, null, { self: true, optional: true })?.control ?? null);\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n\n public setDisabledState(disabled: boolean): void {\n this.#disabledByForm.set(disabled);\n }\n\n protected onClick(event: MouseEvent): void {\n this.#select();\n this.clickAction.emit(event);\n event.stopPropagation();\n event.preventDefault();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key !== ' ' && event.key !== 'Enter') {\n return;\n }\n event.preventDefault();\n this.#select();\n }\n\n #select(): void {\n if (this.isDisabled()) {\n return;\n }\n if (!this.isChecked()) {\n this.#model.set(this.value());\n this.#onChange(this.value());\n this.checkedChange.emit(true);\n }\n this.#onTouched();\n }\n}\n","<div\n rtBlock=\"rt-radio-button\"\n qa-dataid=\"radio-button-control\"\n role=\"radio\"\n tabindex=\"0\"\n [rtMod]=\"{ checked: isChecked(), disabled: isDisabled(), card: card() }\"\n [attr.aria-checked]=\"isChecked()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"onClick($event)\"\n (keydown)=\"onKeydown($event)\">\n <span rtElem=\"indicator\">\n @if (isChecked()) {\n <span rtElem=\"dot\"></span>\n }\n </span>\n\n @if (label() || description()) {\n <span rtElem=\"content\">\n @if (label()) {\n <span rtElem=\"label\" qa-dataid=\"radio-button-label\">{{ label() }}</span>\n }\n @if (description()) {\n <span rtElem=\"description\" qa-dataid=\"radio-button-description\">{{ description() }}</span>\n }\n </span>\n }\n</div>\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-radio-button.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/radio-button/rt-radio-button.component.ts","../../../projects/ui-kit-v2/src/lib/components/radio-button/rt-radio-button.component.html"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n forwardRef,\n inject,\n Injector,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n Signal,\n signal,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\nimport { distinctUntilChanged, EMPTY, Observable, Subject, switchMap } from 'rxjs';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';\n\nconst BEM_BLOCK: string = 'rt-radio-button';\n\n/** Вход выбранности: не заданный вход — `null`, и тогда выбранность решает форма. */\nfunction checkedAttribute(value: BooleanInput | null | undefined): boolean | null {\n return value === null || value === undefined ? null : booleanAttribute(value);\n}\n\n/**\n * Радиокнопка: `role=\"radio\"` с `aria-checked` и `aria-disabled`, выбор нажатием, пробелом и Enter.\n *\n * Выбор приходит двумя путями. Форма пишет модель через `ControlValueAccessor`, и радиокнопка\n * выбрана, когда её значение — сама модель, а не равное ей. Без формы выбранность ставится входом\n * `checked`, а выбор сообщается выходом `checkedChange`: так строку отмечает таблица. Заданный вход\n * решает раньше модели формы.\n *\n * Нажатие на выбранную выбор не снимает — радиокнопку покидают только выбором другой. Каждое\n * нажатие сообщается наружу `clickAction` и дальше обёртки не идёт: строка таблицы под кружком не\n * открывается. Выбор клавишей наружу нажатием не сообщается.\n *\n * Отключение складывается из входа `disabled` и слова формы: форма зовёт `setDisabledState`\n * раньше первого обновления вида, и один общий signal затёр бы её слово.\n *\n * Каждая радиокнопка — свой `ControlValueAccessor`, и значение, отданное одной, форма соседям на\n * том же контроле не пишет: поэтому модель берётся и у самого контрола.\n */\n@Component({\n selector: 'rt-radio-button',\n templateUrl: './rt-radio-button.component.html',\n styleUrl: './rt-radio-button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone directives\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof RtRadioButtonComponent => RtRadioButtonComponent),\n multi: true,\n },\n ],\n hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }],\n host: {\n class: BEM_BLOCK,\n },\n})\nexport class RtRadioButtonComponent implements ControlValueAccessor {\n readonly #injector: Injector = inject(Injector);\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n #onChange: (value: unknown) => void = (): void => undefined;\n #onTouched: () => void = (): void => undefined;\n\n /**\n * Контрол, к которому радиокнопка привязана сейчас. Директива формы меняет его, не пересоздавая\n * себя: `[formControl]` получил другой контрол, `[formGroup]` — другую группу. Слушать надо\n * только нынешний — прежний, оставшись под подпиской, зажёг бы точку из мёртвой формы, и\n * нажатие по ней уже не дошло бы до живой.\n */\n readonly #controlSource: Subject<AbstractControl | null> = new Subject<AbstractControl | null>();\n\n /** Модель, записанная формой. */\n readonly #model: WritableSignal<unknown> = signal<unknown>(null);\n\n /** Отключение, назначенное формой через `setDisabledState`. */\n readonly #disabledByForm: WritableSignal<boolean> = signal<boolean>(false);\n\n protected readonly isChecked: Signal<boolean> = computed((): boolean => this.checked() ?? this.value() === this.#model());\n protected readonly isDisabled: Signal<boolean> = computed((): boolean => this.disabled() || this.#disabledByForm());\n\n /** Значение радиокнопки: выбрана та, чьё значение — модель формы. */\n public readonly value: InputSignal<unknown> = input.required<unknown>();\n\n /** Выбранность без формы; не заданный вход оставляет решение форме. */\n public readonly checked: InputSignalWithTransform<boolean | null, BooleanInput | null | undefined> = input<\n boolean | null,\n BooleanInput | null | undefined\n >(null, { transform: checkedAttribute });\n\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Вид «карточка»: рамка, содержимое слева, кружок справа. */\n public readonly card: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n public readonly label: InputSignal<string> = input<string>('');\n public readonly description: InputSignal<string> = input<string>('');\n\n /** Имя для вспомогательных средств, когда видимой подписи нет — кружок в строке таблицы. */\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** Каждое нажатие указателем, сменило оно выбор или нет. */\n public readonly clickAction: OutputEmitterRef<MouseEvent> = output<MouseEvent>();\n\n /** Радиокнопка стала выбранной. */\n public readonly checkedChange: OutputEmitterRef<boolean> = output<boolean>();\n\n constructor() {\n // Значение, отданное соседкой, форма этой радиокнопке не пишет — модель берётся у самого\n // контрола, иначе точка осталась бы у двух сразу. Подписка идёт за сменой контрола и\n // бросает прежний.\n this.#controlSource\n .pipe(\n distinctUntilChanged(),\n switchMap((control: AbstractControl | null): Observable<unknown> => control?.valueChanges ?? EMPTY),\n takeUntilDestroyed(this.#destroyRef)\n )\n .subscribe((value: unknown): void => this.#model.set(value));\n }\n\n public writeValue(value: unknown): void {\n this.#model.set(value);\n }\n\n /**\n * Директива формы зовёт это при каждой привязке к контролу — и первой, и после смены контрола,\n * — уже поставив новый контрол себе. Здесь радиокнопка и узнаёт, кого слушать. Спросить\n * директиву в конструкторе нельзя: она берёт радиокнопку своим accessor, и это круговая\n * зависимость.\n */\n public registerOnChange(fn: (value: unknown) => void): void {\n this.#onChange = fn;\n this.#controlSource.next(this.#injector.get(NgControl, null, { self: true, optional: true })?.control ?? null);\n }\n\n public registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n\n public setDisabledState(disabled: boolean): void {\n this.#disabledByForm.set(disabled);\n }\n\n protected onClick(event: MouseEvent): void {\n this.#select();\n this.clickAction.emit(event);\n event.stopPropagation();\n event.preventDefault();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key !== ' ' && event.key !== 'Enter') {\n return;\n }\n event.preventDefault();\n this.#select();\n }\n\n #select(): void {\n if (this.isDisabled()) {\n return;\n }\n if (!this.isChecked()) {\n this.#model.set(this.value());\n this.#onChange(this.value());\n this.checkedChange.emit(true);\n }\n this.#onTouched();\n }\n}\n","<div\n rtBlock=\"rt-radio-button\"\n qa-dataid=\"radio-button-control\"\n role=\"radio\"\n tabindex=\"0\"\n [rtMod]=\"{ checked: isChecked(), disabled: isDisabled(), card: card() }\"\n [attr.aria-checked]=\"isChecked()\"\n [attr.aria-disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n (click)=\"onClick($event)\"\n (keydown)=\"onKeydown($event)\">\n <span rtElem=\"indicator\">\n @if (isChecked()) {\n <span rtElem=\"dot\"></span>\n }\n </span>\n\n @if (label() || description()) {\n <span rtElem=\"content\">\n @if (label()) {\n <span rtElem=\"label\" qa-dataid=\"radio-button-label\">{{ label() }}</span>\n }\n @if (description()) {\n <span rtElem=\"description\" qa-dataid=\"radio-button-description\">{{ description() }}</span>\n }\n </span>\n }\n</div>\n"],"mappings":"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"}