@rt-tools/ui-kit-v2 0.17.0 → 0.19.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 (328) hide show
  1. package/README.md +21 -2
  2. package/fesm2022/rt-tools-ui-kit-v2-accordion.mjs +79 -0
  3. package/fesm2022/rt-tools-ui-kit-v2-accordion.mjs.map +1 -0
  4. package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs +233 -0
  5. package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs.map +1 -0
  6. package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +97 -0
  7. package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -0
  8. package/fesm2022/rt-tools-ui-kit-v2-aside-section.mjs +47 -0
  9. package/fesm2022/rt-tools-ui-kit-v2-aside-section.mjs.map +1 -0
  10. package/fesm2022/rt-tools-ui-kit-v2-aside.mjs +709 -0
  11. package/fesm2022/rt-tools-ui-kit-v2-aside.mjs.map +1 -0
  12. package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +214 -0
  13. package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -0
  14. package/fesm2022/rt-tools-ui-kit-v2-bar-list.mjs +53 -0
  15. package/fesm2022/rt-tools-ui-kit-v2-bar-list.mjs.map +1 -0
  16. package/fesm2022/rt-tools-ui-kit-v2-bottom-sheet.mjs +88 -0
  17. package/fesm2022/rt-tools-ui-kit-v2-bottom-sheet.mjs.map +1 -0
  18. package/fesm2022/rt-tools-ui-kit-v2-button.mjs +365 -0
  19. package/fesm2022/rt-tools-ui-kit-v2-button.mjs.map +1 -0
  20. package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs +152 -0
  21. package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs.map +1 -0
  22. package/fesm2022/rt-tools-ui-kit-v2-card.mjs +72 -0
  23. package/fesm2022/rt-tools-ui-kit-v2-card.mjs.map +1 -0
  24. package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs +111 -0
  25. package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs.map +1 -0
  26. package/fesm2022/rt-tools-ui-kit-v2-collapsible-text.mjs +76 -0
  27. package/fesm2022/rt-tools-ui-kit-v2-collapsible-text.mjs.map +1 -0
  28. package/fesm2022/rt-tools-ui-kit-v2-confirm-popover.mjs +255 -0
  29. package/fesm2022/rt-tools-ui-kit-v2-confirm-popover.mjs.map +1 -0
  30. package/fesm2022/rt-tools-ui-kit-v2-container.mjs +1326 -0
  31. package/fesm2022/rt-tools-ui-kit-v2-container.mjs.map +1 -0
  32. package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs +81 -0
  33. package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs.map +1 -0
  34. package/fesm2022/rt-tools-ui-kit-v2-core.mjs +2688 -0
  35. package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -0
  36. package/fesm2022/rt-tools-ui-kit-v2-counter-row.mjs +45 -0
  37. package/fesm2022/rt-tools-ui-kit-v2-counter-row.mjs.map +1 -0
  38. package/fesm2022/rt-tools-ui-kit-v2-counter.mjs +158 -0
  39. package/fesm2022/rt-tools-ui-kit-v2-counter.mjs.map +1 -0
  40. package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +894 -0
  41. package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -0
  42. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +1217 -0
  43. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -0
  44. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +779 -0
  45. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -0
  46. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +573 -0
  47. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -0
  48. package/fesm2022/rt-tools-ui-kit-v2-delta-view.mjs +141 -0
  49. package/fesm2022/rt-tools-ui-kit-v2-delta-view.mjs.map +1 -0
  50. package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs +68 -0
  51. package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs.map +1 -0
  52. package/fesm2022/rt-tools-ui-kit-v2-dialog.mjs +478 -0
  53. package/fesm2022/rt-tools-ui-kit-v2-dialog.mjs.map +1 -0
  54. package/fesm2022/rt-tools-ui-kit-v2-dot-field.mjs +183 -0
  55. package/fesm2022/rt-tools-ui-kit-v2-dot-field.mjs.map +1 -0
  56. package/fesm2022/rt-tools-ui-kit-v2-download-link.mjs +44 -0
  57. package/fesm2022/rt-tools-ui-kit-v2-download-link.mjs.map +1 -0
  58. package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs +260 -0
  59. package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs.map +1 -0
  60. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +1036 -0
  61. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -0
  62. package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs +56 -0
  63. package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs.map +1 -0
  64. package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs +107 -0
  65. package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs.map +1 -0
  66. package/fesm2022/rt-tools-ui-kit-v2-field.mjs +183 -0
  67. package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -0
  68. package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +219 -0
  69. package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -0
  70. package/fesm2022/rt-tools-ui-kit-v2-file-drop.mjs +214 -0
  71. package/fesm2022/rt-tools-ui-kit-v2-file-drop.mjs.map +1 -0
  72. package/fesm2022/rt-tools-ui-kit-v2-file-input.mjs +117 -0
  73. package/fesm2022/rt-tools-ui-kit-v2-file-input.mjs.map +1 -0
  74. package/fesm2022/rt-tools-ui-kit-v2-file-list.mjs +32 -0
  75. package/fesm2022/rt-tools-ui-kit-v2-file-list.mjs.map +1 -0
  76. package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs +91 -0
  77. package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs.map +1 -0
  78. package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs +220 -0
  79. package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs.map +1 -0
  80. package/fesm2022/rt-tools-ui-kit-v2-header.mjs +72 -0
  81. package/fesm2022/rt-tools-ui-kit-v2-header.mjs.map +1 -0
  82. package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +163 -0
  83. package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -0
  84. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs +711 -0
  85. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs.map +1 -0
  86. package/fesm2022/rt-tools-ui-kit-v2-image-cropper.mjs +540 -0
  87. package/fesm2022/rt-tools-ui-kit-v2-image-cropper.mjs.map +1 -0
  88. package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +227 -0
  89. package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -0
  90. package/fesm2022/rt-tools-ui-kit-v2-info-item.mjs +37 -0
  91. package/fesm2022/rt-tools-ui-kit-v2-info-item.mjs.map +1 -0
  92. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +361 -0
  93. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -0
  94. package/fesm2022/rt-tools-ui-kit-v2-input.mjs +143 -0
  95. package/fesm2022/rt-tools-ui-kit-v2-input.mjs.map +1 -0
  96. package/fesm2022/rt-tools-ui-kit-v2-live-badge.mjs +49 -0
  97. package/fesm2022/rt-tools-ui-kit-v2-live-badge.mjs.map +1 -0
  98. package/fesm2022/rt-tools-ui-kit-v2-logo.mjs +97 -0
  99. package/fesm2022/rt-tools-ui-kit-v2-logo.mjs.map +1 -0
  100. package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs +57 -0
  101. package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs.map +1 -0
  102. package/fesm2022/rt-tools-ui-kit-v2-menu.mjs +537 -0
  103. package/fesm2022/rt-tools-ui-kit-v2-menu.mjs.map +1 -0
  104. package/fesm2022/rt-tools-ui-kit-v2-message.mjs +105 -0
  105. package/fesm2022/rt-tools-ui-kit-v2-message.mjs.map +1 -0
  106. package/fesm2022/rt-tools-ui-kit-v2-money-list.mjs +71 -0
  107. package/fesm2022/rt-tools-ui-kit-v2-money-list.mjs.map +1 -0
  108. package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +315 -0
  109. package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -0
  110. package/fesm2022/rt-tools-ui-kit-v2-night-grid.mjs +51 -0
  111. package/fesm2022/rt-tools-ui-kit-v2-night-grid.mjs.map +1 -0
  112. package/fesm2022/rt-tools-ui-kit-v2-note.mjs +44 -0
  113. package/fesm2022/rt-tools-ui-kit-v2-note.mjs.map +1 -0
  114. package/fesm2022/rt-tools-ui-kit-v2-notifications-bell.mjs +54 -0
  115. package/fesm2022/rt-tools-ui-kit-v2-notifications-bell.mjs.map +1 -0
  116. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +339 -0
  117. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -0
  118. package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs +187 -0
  119. package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs.map +1 -0
  120. package/fesm2022/rt-tools-ui-kit-v2-photo-viewer.mjs +170 -0
  121. package/fesm2022/rt-tools-ui-kit-v2-photo-viewer.mjs.map +1 -0
  122. package/fesm2022/rt-tools-ui-kit-v2-popover.mjs +312 -0
  123. package/fesm2022/rt-tools-ui-kit-v2-popover.mjs.map +1 -0
  124. package/fesm2022/rt-tools-ui-kit-v2-prompt-suggestion.mjs +46 -0
  125. package/fesm2022/rt-tools-ui-kit-v2-prompt-suggestion.mjs.map +1 -0
  126. package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs +174 -0
  127. package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs.map +1 -0
  128. package/fesm2022/rt-tools-ui-kit-v2-radius.mjs +56 -0
  129. package/fesm2022/rt-tools-ui-kit-v2-radius.mjs.map +1 -0
  130. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +336 -12
  131. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
  132. package/fesm2022/rt-tools-ui-kit-v2-ripple.mjs +118 -0
  133. package/fesm2022/rt-tools-ui-kit-v2-ripple.mjs.map +1 -0
  134. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +290 -0
  135. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -0
  136. package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs +37 -0
  137. package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs.map +1 -0
  138. package/fesm2022/rt-tools-ui-kit-v2-select.mjs +495 -0
  139. package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -0
  140. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +1493 -0
  141. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -0
  142. package/fesm2022/rt-tools-ui-kit-v2-skeleton-wrapper.mjs +49 -0
  143. package/fesm2022/rt-tools-ui-kit-v2-skeleton-wrapper.mjs.map +1 -0
  144. package/fesm2022/rt-tools-ui-kit-v2-skeleton.mjs +123 -0
  145. package/fesm2022/rt-tools-ui-kit-v2-skeleton.mjs.map +1 -0
  146. package/fesm2022/rt-tools-ui-kit-v2-spinner.mjs +70 -0
  147. package/fesm2022/rt-tools-ui-kit-v2-spinner.mjs.map +1 -0
  148. package/fesm2022/rt-tools-ui-kit-v2-split-button.mjs +92 -0
  149. package/fesm2022/rt-tools-ui-kit-v2-split-button.mjs.map +1 -0
  150. package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs +147 -0
  151. package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs.map +1 -0
  152. package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs +117 -0
  153. package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs.map +1 -0
  154. package/fesm2022/rt-tools-ui-kit-v2-table.mjs +1636 -0
  155. package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -0
  156. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +350 -0
  157. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -0
  158. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +122 -0
  159. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -0
  160. package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs +85 -0
  161. package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs.map +1 -0
  162. package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs +73 -0
  163. package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs.map +1 -0
  164. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +222 -0
  165. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -0
  166. package/fesm2022/rt-tools-ui-kit-v2-timeline.mjs +39 -0
  167. package/fesm2022/rt-tools-ui-kit-v2-timeline.mjs.map +1 -0
  168. package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +338 -0
  169. package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -0
  170. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +132 -0
  171. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -0
  172. package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs +162 -0
  173. package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs.map +1 -0
  174. package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs +135 -0
  175. package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs.map +1 -0
  176. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +214 -0
  177. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -0
  178. package/fesm2022/rt-tools-ui-kit-v2-welcome-dialog.mjs +64 -0
  179. package/fesm2022/rt-tools-ui-kit-v2-welcome-dialog.mjs.map +1 -0
  180. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +263 -0
  181. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -0
  182. package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs +296 -0
  183. package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs.map +1 -0
  184. package/fesm2022/rt-tools-ui-kit-v2.mjs +94 -23819
  185. package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
  186. package/package.json +361 -1
  187. package/rt-tools-ui-kit-v2-0.19.0.tgz +0 -0
  188. package/src/assets/icons/sparkle.svg +9 -0
  189. package/src/assets/icons/thumb-down.svg +10 -0
  190. package/src/assets/icons/thumb-up.svg +9 -0
  191. package/src/assets/icons/trash-x.svg +7 -0
  192. package/src/assets/icons-material/sparkle.fill.svg +5 -0
  193. package/src/assets/icons-material/sparkle.svg +5 -0
  194. package/src/assets/icons-material/thumb-down.fill.svg +5 -0
  195. package/src/assets/icons-material/thumb-down.svg +5 -0
  196. package/src/assets/icons-material/thumb-up.fill.svg +5 -0
  197. package/src/assets/icons-material/thumb-up.svg +5 -0
  198. package/src/assets/icons-material/trash-x.fill.svg +5 -0
  199. package/src/assets/icons-material/trash-x.svg +5 -0
  200. package/src/lib/components/action-bar/CONTEXT.md +8 -2
  201. package/src/lib/components/action-bar/rt-action-bar-holder.component.scss +10 -7
  202. package/src/lib/components/action-bar/rt-action-bar.component.scss +82 -34
  203. package/src/lib/components/ai-run-status/CONTEXT.md +36 -0
  204. package/src/lib/components/ai-run-status/rt-ai-run-status.component.scss +119 -0
  205. package/src/lib/components/aside/CONTEXT.md +1 -0
  206. package/src/lib/components/aside/header/rt-aside-header.component.scss +27 -11
  207. package/src/lib/components/copy-value/CONTEXT.md +31 -0
  208. package/src/lib/components/copy-value/rt-copy-value.component.scss +39 -0
  209. package/src/lib/components/data-list/settings/rt-data-list-settings-aside.component.scss +5 -5
  210. package/src/lib/components/dot-field/CONTEXT.md +31 -0
  211. package/src/lib/components/dot-field/rt-dot-field.component.scss +20 -0
  212. package/src/lib/components/dot-field/stories/component/CONTEXT.md +14 -0
  213. package/src/lib/components/dot-field/stories/component/test-dot-field.component.scss +31 -0
  214. package/src/lib/components/dynamic-selector/CONTEXT.md +18 -0
  215. package/src/lib/components/dynamic-selector/list/rt-dynamic-selector-list.component.scss +29 -1
  216. package/src/lib/components/dynamic-selector/popup/rt-dynamic-selector-popup.component.scss +84 -25
  217. package/src/lib/components/empty-state/CONTEXT.md +2 -1
  218. package/src/lib/components/empty-state/rt-empty-state.component.scss +4 -2
  219. package/src/lib/components/field/CONTEXT.md +18 -2
  220. package/src/lib/components/icon/CONTEXT.md +16 -12
  221. package/src/lib/components/icon/rt-icon.component.scss +13 -3
  222. package/src/lib/components/prompt-suggestion/CONTEXT.md +29 -0
  223. package/src/lib/components/prompt-suggestion/rt-prompt-suggestion.component.scss +58 -0
  224. package/src/lib/components/select/rt-select.component.scss +4 -0
  225. package/src/lib/components/thread-list/CONTEXT.md +4 -0
  226. package/src/lib/components/thread-list/rt-thread-list.component.scss +29 -0
  227. package/src/lib/components/toolbar/CONTEXT.md +4 -0
  228. package/src/lib/components/toolbar/rt-toolbar.component.scss +7 -0
  229. package/src/rich-editor/lib/components/ai-chat/CONTEXT.md +58 -0
  230. package/src/rich-editor/lib/components/ai-chat/answer/rt-ai-chat-answer.component.scss +12 -0
  231. package/src/rich-editor/lib/components/ai-chat/rt-ai-chat.component.scss +222 -0
  232. package/src/rich-editor/lib/components/rich-editor/rt-rich-editor.component.scss +3 -0
  233. package/src/styles/_scrollbar.scss +9 -0
  234. package/src/styles/_semantic.scss +1 -1
  235. package/styles/tokens.css +11 -8
  236. package/types/rt-tools-ui-kit-v2-accordion.d.ts +30 -0
  237. package/types/rt-tools-ui-kit-v2-action-bar.d.ts +149 -0
  238. package/types/rt-tools-ui-kit-v2-ai-run-status.d.ts +49 -0
  239. package/types/rt-tools-ui-kit-v2-aside-section.d.ts +25 -0
  240. package/types/rt-tools-ui-kit-v2-aside.d.ts +444 -0
  241. package/types/rt-tools-ui-kit-v2-autocomplete.d.ts +78 -0
  242. package/types/rt-tools-ui-kit-v2-bar-list.d.ts +41 -0
  243. package/types/rt-tools-ui-kit-v2-bottom-sheet.d.ts +20 -0
  244. package/types/rt-tools-ui-kit-v2-button.d.ts +76 -0
  245. package/types/rt-tools-ui-kit-v2-calendar.d.ts +96 -0
  246. package/types/rt-tools-ui-kit-v2-card.d.ts +38 -0
  247. package/types/rt-tools-ui-kit-v2-checkbox.d.ts +46 -0
  248. package/types/rt-tools-ui-kit-v2-collapsible-text.d.ts +20 -0
  249. package/types/rt-tools-ui-kit-v2-confirm-popover.d.ts +85 -0
  250. package/types/rt-tools-ui-kit-v2-container.d.ts +425 -0
  251. package/types/rt-tools-ui-kit-v2-copy-value.d.ts +29 -0
  252. package/types/rt-tools-ui-kit-v2-core.d.ts +1262 -0
  253. package/types/rt-tools-ui-kit-v2-counter-row.d.ts +22 -0
  254. package/types/rt-tools-ui-kit-v2-counter.d.ts +70 -0
  255. package/types/rt-tools-ui-kit-v2-data-list.d.ts +334 -0
  256. package/types/rt-tools-ui-kit-v2-data-table.d.ts +494 -0
  257. package/types/rt-tools-ui-kit-v2-date-picker.d.ts +181 -0
  258. package/types/rt-tools-ui-kit-v2-date-range.d.ts +98 -0
  259. package/types/rt-tools-ui-kit-v2-delta-view.d.ts +20 -0
  260. package/types/rt-tools-ui-kit-v2-detail-list.d.ts +33 -0
  261. package/types/rt-tools-ui-kit-v2-dialog.d.ts +287 -0
  262. package/types/rt-tools-ui-kit-v2-dot-field.d.ts +17 -0
  263. package/types/rt-tools-ui-kit-v2-download-link.d.ts +17 -0
  264. package/types/rt-tools-ui-kit-v2-dynamic-list.d.ts +139 -0
  265. package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +423 -0
  266. package/types/rt-tools-ui-kit-v2-empty-state.d.ts +29 -0
  267. package/types/rt-tools-ui-kit-v2-expansion-panel.d.ts +57 -0
  268. package/types/rt-tools-ui-kit-v2-field.d.ts +82 -0
  269. package/types/rt-tools-ui-kit-v2-file-card.d.ts +114 -0
  270. package/types/rt-tools-ui-kit-v2-file-drop.d.ts +75 -0
  271. package/types/rt-tools-ui-kit-v2-file-input.d.ts +48 -0
  272. package/types/rt-tools-ui-kit-v2-file-list.d.ts +13 -0
  273. package/types/rt-tools-ui-kit-v2-filter-control.d.ts +72 -0
  274. package/types/rt-tools-ui-kit-v2-form-control.d.ts +74 -0
  275. package/types/rt-tools-ui-kit-v2-header.d.ts +40 -0
  276. package/types/rt-tools-ui-kit-v2-icon-button.d.ts +113 -0
  277. package/types/rt-tools-ui-kit-v2-icon.d.ts +246 -0
  278. package/types/rt-tools-ui-kit-v2-image-cropper.d.ts +168 -0
  279. package/types/rt-tools-ui-kit-v2-image-upload.d.ts +102 -0
  280. package/types/rt-tools-ui-kit-v2-info-item.d.ts +13 -0
  281. package/types/rt-tools-ui-kit-v2-input-number.d.ts +67 -0
  282. package/types/rt-tools-ui-kit-v2-input.d.ts +54 -0
  283. package/types/rt-tools-ui-kit-v2-live-badge.d.ts +23 -0
  284. package/types/rt-tools-ui-kit-v2-logo.d.ts +58 -0
  285. package/types/rt-tools-ui-kit-v2-markdown-text.d.ts +30 -0
  286. package/types/rt-tools-ui-kit-v2-menu.d.ts +217 -0
  287. package/types/rt-tools-ui-kit-v2-message.d.ts +56 -0
  288. package/types/rt-tools-ui-kit-v2-money-list.d.ts +34 -0
  289. package/types/rt-tools-ui-kit-v2-multiselect.d.ts +93 -0
  290. package/types/rt-tools-ui-kit-v2-night-grid.d.ts +39 -0
  291. package/types/rt-tools-ui-kit-v2-note.d.ts +21 -0
  292. package/types/rt-tools-ui-kit-v2-notifications-bell.d.ts +23 -0
  293. package/types/rt-tools-ui-kit-v2-page-header.d.ts +173 -0
  294. package/types/rt-tools-ui-kit-v2-pagination.d.ts +64 -0
  295. package/types/rt-tools-ui-kit-v2-photo-viewer.d.ts +98 -0
  296. package/types/rt-tools-ui-kit-v2-popover.d.ts +79 -0
  297. package/types/rt-tools-ui-kit-v2-prompt-suggestion.d.ts +21 -0
  298. package/types/rt-tools-ui-kit-v2-radio-button.d.ts +61 -0
  299. package/types/rt-tools-ui-kit-v2-radius.d.ts +37 -0
  300. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +186 -2
  301. package/types/rt-tools-ui-kit-v2-ripple.d.ts +39 -0
  302. package/types/rt-tools-ui-kit-v2-scroll-area.d.ts +91 -0
  303. package/types/rt-tools-ui-kit-v2-section-nav.d.ts +23 -0
  304. package/types/rt-tools-ui-kit-v2-select.d.ts +215 -0
  305. package/types/rt-tools-ui-kit-v2-side-menu.d.ts +483 -0
  306. package/types/rt-tools-ui-kit-v2-skeleton-wrapper.d.ts +32 -0
  307. package/types/rt-tools-ui-kit-v2-skeleton.d.ts +41 -0
  308. package/types/rt-tools-ui-kit-v2-spinner.d.ts +56 -0
  309. package/types/rt-tools-ui-kit-v2-split-button.d.ts +72 -0
  310. package/types/rt-tools-ui-kit-v2-stat-tile.d.ts +81 -0
  311. package/types/rt-tools-ui-kit-v2-stepper.d.ts +51 -0
  312. package/types/rt-tools-ui-kit-v2-table.d.ts +739 -0
  313. package/types/rt-tools-ui-kit-v2-tabs.d.ts +153 -0
  314. package/types/rt-tools-ui-kit-v2-tag.d.ts +70 -0
  315. package/types/rt-tools-ui-kit-v2-textarea.d.ts +36 -0
  316. package/types/rt-tools-ui-kit-v2-theme-toggle.d.ts +43 -0
  317. package/types/rt-tools-ui-kit-v2-thread-list.d.ts +124 -0
  318. package/types/rt-tools-ui-kit-v2-timeline.d.ts +35 -0
  319. package/types/rt-tools-ui-kit-v2-toast.d.ts +103 -0
  320. package/types/rt-tools-ui-kit-v2-toggle-button-group.d.ts +109 -0
  321. package/types/rt-tools-ui-kit-v2-toggle-switch.d.ts +85 -0
  322. package/types/rt-tools-ui-kit-v2-toolbar.d.ts +66 -0
  323. package/types/rt-tools-ui-kit-v2-tooltip.d.ts +74 -0
  324. package/types/rt-tools-ui-kit-v2-welcome-dialog.d.ts +33 -0
  325. package/types/rt-tools-ui-kit-v2-workspace-details.d.ts +128 -0
  326. package/types/rt-tools-ui-kit-v2-workspace.d.ts +84 -0
  327. package/types/rt-tools-ui-kit-v2.d.ts +90 -9599
  328. package/rt-tools-ui-kit-v2-0.17.0.tgz +0 -0
@@ -0,0 +1,46 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, booleanAttribute, output, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { BlockDirective, ElemDirective } from '@rt-tools/core';
4
+ import { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';
5
+
6
+ const BEM_BLOCK = 'rt-prompt-suggestion';
7
+ /**
8
+ * Карточка готового вопроса на пустом экране ассистента: подпись слева, стрелка справа на
9
+ * одинаковом отступе. Нажатие сообщает текст подсказки наружу — что с ним делать, решает
10
+ * приложение.
11
+ */
12
+ class RtPromptSuggestionComponent {
13
+ constructor() {
14
+ /** Текст вопроса: он и на карточке, и в выходе. */
15
+ this.label = input.required(/* @ts-ignore */
16
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
17
+ this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
18
+ /** Карточку нажали; значение — текст вопроса. */
19
+ this.picked = output();
20
+ }
21
+ onClick() {
22
+ this.picked.emit(this.label());
23
+ }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtPromptSuggestionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: RtPromptSuggestionComponent, isStandalone: true, selector: "rt-prompt-suggestion", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { picked: "picked" }, host: { classAttribute: "rt-prompt-suggestion" }, ngImport: i0, template: "<button rtBlock=\"rt-prompt-suggestion\" type=\"button\" qa-dataid=\"prompt-suggestion\" [disabled]=\"disabled()\" (click)=\"onClick()\">\n <span rtElem=\"label\" qa-dataid=\"prompt-suggestion-label\">{{ label() }}</span>\n <rt-icon rtElem=\"arrow\" name=\"arrow-right\" size=\"sm\" aria-hidden=\"true\" />\n</button>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-prompt-suggestion{display:block}rt-prompt-suggestion .rt-prompt-suggestion{--rt-prompt-suggestion-radius: var(--rt-radius-lg);--rt-prompt-suggestion-focus-shadow: var(--rt-shadow-focus-ring);--rt-prompt-suggestion-transition-duration: var(--rt-duration-fast);display:flex;box-sizing:border-box;align-items:center;justify-content:space-between;padding:var(--rt-space-sm) var(--rt-space-md);border:0;border-radius:var(--rt-prompt-suggestion-radius);margin:0;background:var(--rt-color-bg-hover);color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-size:var(--rt-text-sm);font-weight:var(--rt-font-weight-medium);gap:var(--rt-space-sm);inline-size:100%;line-height:var(--rt-leading-snug);text-align:start;transition:background-color var(--rt-prompt-suggestion-transition-duration) ease}rt-prompt-suggestion .rt-prompt-suggestion:hover:not(:disabled){background:var(--rt-color-bg-subtle)}rt-prompt-suggestion .rt-prompt-suggestion:focus-visible{box-shadow:var(--rt-prompt-suggestion-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-prompt-suggestion .rt-prompt-suggestion:disabled{color:var(--rt-color-text-disabled);cursor:default}rt-prompt-suggestion .rt-prompt-suggestion__label{min-inline-size:0}rt-prompt-suggestion .rt-prompt-suggestion__arrow{flex:none;color:var(--rt-color-text-muted)}}\n"], dependencies: [{ kind: "directive", type:
26
+ // standalone components / directives
27
+ BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "component", type: RtIconComponent, selector: "rt-icon", inputs: ["name", "glyph", "glyphStrategy", "size", "color", "fill", "spin", "rotate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtPromptSuggestionComponent, decorators: [{
30
+ type: Component,
31
+ args: [{ selector: 'rt-prompt-suggestion', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
32
+ // standalone components / directives
33
+ BlockDirective,
34
+ ElemDirective,
35
+ RtIconComponent,
36
+ ], host: {
37
+ class: BEM_BLOCK,
38
+ }, template: "<button rtBlock=\"rt-prompt-suggestion\" type=\"button\" qa-dataid=\"prompt-suggestion\" [disabled]=\"disabled()\" (click)=\"onClick()\">\n <span rtElem=\"label\" qa-dataid=\"prompt-suggestion-label\">{{ label() }}</span>\n <rt-icon rtElem=\"arrow\" name=\"arrow-right\" size=\"sm\" aria-hidden=\"true\" />\n</button>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-prompt-suggestion{display:block}rt-prompt-suggestion .rt-prompt-suggestion{--rt-prompt-suggestion-radius: var(--rt-radius-lg);--rt-prompt-suggestion-focus-shadow: var(--rt-shadow-focus-ring);--rt-prompt-suggestion-transition-duration: var(--rt-duration-fast);display:flex;box-sizing:border-box;align-items:center;justify-content:space-between;padding:var(--rt-space-sm) var(--rt-space-md);border:0;border-radius:var(--rt-prompt-suggestion-radius);margin:0;background:var(--rt-color-bg-hover);color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-size:var(--rt-text-sm);font-weight:var(--rt-font-weight-medium);gap:var(--rt-space-sm);inline-size:100%;line-height:var(--rt-leading-snug);text-align:start;transition:background-color var(--rt-prompt-suggestion-transition-duration) ease}rt-prompt-suggestion .rt-prompt-suggestion:hover:not(:disabled){background:var(--rt-color-bg-subtle)}rt-prompt-suggestion .rt-prompt-suggestion:focus-visible{box-shadow:var(--rt-prompt-suggestion-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-prompt-suggestion .rt-prompt-suggestion:disabled{color:var(--rt-color-text-disabled);cursor:default}rt-prompt-suggestion .rt-prompt-suggestion__label{min-inline-size:0}rt-prompt-suggestion .rt-prompt-suggestion__arrow{flex:none;color:var(--rt-color-text-muted)}}\n"] }]
39
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], picked: [{ type: i0.Output, args: ["picked"] }] } });
40
+
41
+ /**
42
+ * Generated bundle index. Do not edit.
43
+ */
44
+
45
+ export { RtPromptSuggestionComponent };
46
+ //# sourceMappingURL=rt-tools-ui-kit-v2-prompt-suggestion.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rt-tools-ui-kit-v2-prompt-suggestion.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/prompt-suggestion/rt-prompt-suggestion.component.ts","../../../projects/ui-kit-v2/src/lib/components/prompt-suggestion/rt-prompt-suggestion.component.html","../../../projects/ui-kit-v2/src/lib/components/prompt-suggestion/rt-tools-ui-kit-v2-prompt-suggestion.ts"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n input,\n InputSignal,\n InputSignalWithTransform,\n output,\n OutputEmitterRef,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { BlockDirective, ElemDirective } from '@rt-tools/core';\n\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\n\nconst BEM_BLOCK: string = 'rt-prompt-suggestion';\n\n/**\n * Карточка готового вопроса на пустом экране ассистента: подпись слева, стрелка справа на\n * одинаковом отступе. Нажатие сообщает текст подсказки наружу — что с ним делать, решает\n * приложение.\n */\n@Component({\n selector: 'rt-prompt-suggestion',\n templateUrl: './rt-prompt-suggestion.component.html',\n styleUrl: './rt-prompt-suggestion.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone components / directives\n BlockDirective,\n ElemDirective,\n RtIconComponent,\n ],\n host: {\n class: BEM_BLOCK,\n },\n})\nexport class RtPromptSuggestionComponent {\n /** Текст вопроса: он и на карточке, и в выходе. */\n public readonly label: InputSignal<string> = input.required<string>();\n\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n /** Карточку нажали; значение — текст вопроса. */\n public readonly picked: OutputEmitterRef<string> = output<string>();\n\n protected onClick(): void {\n this.picked.emit(this.label());\n }\n}\n","<button rtBlock=\"rt-prompt-suggestion\" type=\"button\" qa-dataid=\"prompt-suggestion\" [disabled]=\"disabled()\" (click)=\"onClick()\">\n <span rtElem=\"label\" qa-dataid=\"prompt-suggestion-label\">{{ label() }}</span>\n <rt-icon rtElem=\"arrow\" name=\"arrow-right\" size=\"sm\" aria-hidden=\"true\" />\n</button>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAiBA,MAAM,SAAS,GAAW,sBAAsB;AAEhD;;;;AAIG;MAiBU,2BAA2B,CAAA;AAhBxC,IAAA,WAAA,GAAA;;QAkBoB,IAAA,CAAA,KAAK,GAAwB,KAAK,CAAC,QAAQ;kFAAU;QAErD,IAAA,CAAA,QAAQ,GAAoD,KAAK,CAAwB,KAAK,gFAC1G,SAAS,EAAE,gBAAgB,EAAA,CAC7B;;QAGc,IAAA,CAAA,MAAM,GAA6B,MAAM,EAAU;AAKtE,IAAA;IAHa,OAAO,GAAA;QACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAClC;8GAbS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,qaCxCxC,uUAIA,EAAA,MAAA,EAAA,CAAA,41CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;gBD4BQ,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAMV,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAhBvC,SAAS;+BACI,sBAAsB,EAAA,eAAA,EAGf,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;;wBAEL,cAAc;wBACd,aAAa;wBACb,eAAe;qBAClB,EAAA,IAAA,EACK;AACF,wBAAA,KAAK,EAAE,SAAS;AACnB,qBAAA,EAAA,QAAA,EAAA,uUAAA,EAAA,MAAA,EAAA,CAAA,41CAAA,CAAA,EAAA;;;AEtCL;;AAEG;;;;"}
@@ -0,0 +1,174 @@
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`, и тогда выбранность решает форма. */
12
+ 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 }); }
150
+ }
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
+
173
+ export { RtRadioButtonComponent };
174
+ //# sourceMappingURL=rt-tools-ui-kit-v2-radio-button.mjs.map
@@ -0,0 +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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"}
@@ -0,0 +1,56 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, input, computed, Directive } from '@angular/core';
3
+ import { RT_RADIUS_DEFAULT } from '@rt-tools/ui-kit-v2/core';
4
+
5
+ /**
6
+ * Вход скругления, один на весь кит. Компонент с поверхностью берёт его
7
+ * хост-директивой, и у всех он называется одинаково — `radius`.
8
+ *
9
+ * Шаг ложится на хост атрибутом `data-rt-radius`, а не наследуемым свойством:
10
+ * свойство протекло бы в каждый вложенный компонент, и скруглённая карточка
11
+ * скруглила бы все кнопки в себе. Атрибут читают только правила своего хоста.
12
+ *
13
+ * Пустой вход атрибута не пишет: компонент остаётся со своим скруглением по
14
+ * умолчанию из собственных стилей.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * @Component({
19
+ * selector: 'rt-card',
20
+ * hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }],
21
+ * })
22
+ * ```
23
+ * ```html
24
+ * <rt-card radius="none">…</rt-card>
25
+ * ```
26
+ */
27
+ class RtRadiusDirective {
28
+ constructor() {
29
+ this.#fallback = inject(RT_RADIUS_DEFAULT, { optional: true }) ?? null;
30
+ /** Шаг шкалы. Пусто — скругление компонента по умолчанию. */
31
+ this.radius = input(null, /* @ts-ignore */
32
+ ...(ngDevMode ? [{ debugName: "radius" }] : /* istanbul ignore next */ []));
33
+ /** Шаг на хосте: названный входом, иначе умолчание хоста, если оно задано. */
34
+ this.step = computed(() => this.radius() ?? this.#fallback, /* @ts-ignore */
35
+ ...(ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []));
36
+ }
37
+ #fallback;
38
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtRadiusDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
39
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: RtRadiusDirective, isStandalone: true, selector: "[rtRadius]", inputs: { radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-rt-radius": "step()" } }, ngImport: i0 }); }
40
+ }
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtRadiusDirective, decorators: [{
42
+ type: Directive,
43
+ args: [{
44
+ selector: '[rtRadius]',
45
+ host: {
46
+ '[attr.data-rt-radius]': 'step()',
47
+ },
48
+ }]
49
+ }], propDecorators: { radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }] } });
50
+
51
+ /**
52
+ * Generated bundle index. Do not edit.
53
+ */
54
+
55
+ export { RtRadiusDirective };
56
+ //# sourceMappingURL=rt-tools-ui-kit-v2-radius.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rt-tools-ui-kit-v2-radius.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/radius/rt-radius.directive.ts","../../../projects/ui-kit-v2/src/lib/components/radius/rt-tools-ui-kit-v2-radius.ts"],"sourcesContent":["import { computed, Directive, inject, input, InputSignal, Signal } from '@angular/core';\n\nimport { RT_RADIUS_DEFAULT, TRtRadius } from '@rt-tools/ui-kit-v2/core';\n\n/**\n * Вход скругления, один на весь кит. Компонент с поверхностью берёт его\n * хост-директивой, и у всех он называется одинаково — `radius`.\n *\n * Шаг ложится на хост атрибутом `data-rt-radius`, а не наследуемым свойством:\n * свойство протекло бы в каждый вложенный компонент, и скруглённая карточка\n * скруглила бы все кнопки в себе. Атрибут читают только правила своего хоста.\n *\n * Пустой вход атрибута не пишет: компонент остаётся со своим скруглением по\n * умолчанию из собственных стилей.\n *\n * @example\n * ```ts\n * @Component({\n * selector: 'rt-card',\n * hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }],\n * })\n * ```\n * ```html\n * <rt-card radius=\"none\">…</rt-card>\n * ```\n */\n@Directive({\n selector: '[rtRadius]',\n host: {\n '[attr.data-rt-radius]': 'step()',\n },\n})\nexport class RtRadiusDirective {\n readonly #fallback: TRtRadius | null = inject(RT_RADIUS_DEFAULT, { optional: true }) ?? null;\n\n /** Шаг шкалы. Пусто — скругление компонента по умолчанию. */\n public readonly radius: InputSignal<TRtRadius | null | undefined> = input<TRtRadius | null | undefined>(null);\n\n /** Шаг на хосте: названный входом, иначе умолчание хоста, если оно задано. */\n public readonly step: Signal<TRtRadius | null> = computed((): TRtRadius | null => this.radius() ?? this.#fallback);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;;;;;AAqBG;MAOU,iBAAiB,CAAA;AAN9B,IAAA,WAAA,GAAA;AAOa,QAAA,IAAA,CAAA,SAAS,GAAqB,MAAM,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI;;QAG5E,IAAA,CAAA,MAAM,GAA8C,KAAK,CAA+B,IAAI;mFAAC;;AAG7F,QAAA,IAAA,CAAA,IAAI,GAA6B,QAAQ,CAAC,MAAwB,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS;iFAAC;AACrH,IAAA;AAPY,IAAA,SAAS;8GADT,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,IAAI,EAAE;AACF,wBAAA,uBAAuB,EAAE,QAAQ;AACpC,qBAAA;AACJ,iBAAA;;;AC/BD;;AAEG;;;;"}