@rt-tools/ui-kit-v2 0.23.3 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/fesm2022/rt-tools-ui-kit-v2-accordion.mjs +142 -71
  2. package/fesm2022/rt-tools-ui-kit-v2-accordion.mjs.map +1 -1
  3. package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs +467 -231
  4. package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs.map +1 -1
  5. package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs +260 -91
  6. package/fesm2022/rt-tools-ui-kit-v2-ai-run-status.mjs.map +1 -1
  7. package/fesm2022/rt-tools-ui-kit-v2-aside-section.mjs +80 -46
  8. package/fesm2022/rt-tools-ui-kit-v2-aside-section.mjs.map +1 -1
  9. package/fesm2022/rt-tools-ui-kit-v2-aside.mjs +984 -697
  10. package/fesm2022/rt-tools-ui-kit-v2-aside.mjs.map +1 -1
  11. package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +452 -210
  12. package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
  13. package/fesm2022/rt-tools-ui-kit-v2-bar-list.mjs +143 -52
  14. package/fesm2022/rt-tools-ui-kit-v2-bar-list.mjs.map +1 -1
  15. package/fesm2022/rt-tools-ui-kit-v2-bottom-sheet.mjs +158 -83
  16. package/fesm2022/rt-tools-ui-kit-v2-bottom-sheet.mjs.map +1 -1
  17. package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs +335 -0
  18. package/fesm2022/rt-tools-ui-kit-v2-breadcrumbs.mjs.map +1 -0
  19. package/fesm2022/rt-tools-ui-kit-v2-button.mjs +437 -363
  20. package/fesm2022/rt-tools-ui-kit-v2-button.mjs.map +1 -1
  21. package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs +430 -149
  22. package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs.map +1 -1
  23. package/fesm2022/rt-tools-ui-kit-v2-card.mjs +155 -71
  24. package/fesm2022/rt-tools-ui-kit-v2-card.mjs.map +1 -1
  25. package/fesm2022/rt-tools-ui-kit-v2-carousel.mjs +155 -0
  26. package/fesm2022/rt-tools-ui-kit-v2-carousel.mjs.map +1 -0
  27. package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs +215 -110
  28. package/fesm2022/rt-tools-ui-kit-v2-checkbox.mjs.map +1 -1
  29. package/fesm2022/rt-tools-ui-kit-v2-collapsible-text.mjs +158 -75
  30. package/fesm2022/rt-tools-ui-kit-v2-collapsible-text.mjs.map +1 -1
  31. package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs +769 -0
  32. package/fesm2022/rt-tools-ui-kit-v2-color-palette.mjs.map +1 -0
  33. package/fesm2022/rt-tools-ui-kit-v2-confirm-popover.mjs +462 -253
  34. package/fesm2022/rt-tools-ui-kit-v2-confirm-popover.mjs.map +1 -1
  35. package/fesm2022/rt-tools-ui-kit-v2-container.mjs +1276 -1316
  36. package/fesm2022/rt-tools-ui-kit-v2-container.mjs.map +1 -1
  37. package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs +185 -80
  38. package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs.map +1 -1
  39. package/fesm2022/rt-tools-ui-kit-v2-core.mjs +2321 -2619
  40. package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
  41. package/fesm2022/rt-tools-ui-kit-v2-counter-row.mjs +100 -44
  42. package/fesm2022/rt-tools-ui-kit-v2-counter-row.mjs.map +1 -1
  43. package/fesm2022/rt-tools-ui-kit-v2-counter.mjs +290 -155
  44. package/fesm2022/rt-tools-ui-kit-v2-counter.mjs.map +1 -1
  45. package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +2097 -858
  46. package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -1
  47. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +2247 -1176
  48. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
  49. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +1043 -705
  50. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
  51. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +810 -525
  52. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
  53. package/fesm2022/rt-tools-ui-kit-v2-delta-view.mjs +158 -138
  54. package/fesm2022/rt-tools-ui-kit-v2-delta-view.mjs.map +1 -1
  55. package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs +177 -67
  56. package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs.map +1 -1
  57. package/fesm2022/rt-tools-ui-kit-v2-dialog.mjs +550 -477
  58. package/fesm2022/rt-tools-ui-kit-v2-dialog.mjs.map +1 -1
  59. package/fesm2022/rt-tools-ui-kit-v2-dot-field.mjs +185 -168
  60. package/fesm2022/rt-tools-ui-kit-v2-dot-field.mjs.map +1 -1
  61. package/fesm2022/rt-tools-ui-kit-v2-download-link.mjs +116 -43
  62. package/fesm2022/rt-tools-ui-kit-v2-download-link.mjs.map +1 -1
  63. package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs +585 -0
  64. package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs.map +1 -0
  65. package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs +755 -259
  66. package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs.map +1 -1
  67. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +3266 -1115
  68. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
  69. package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs +190 -55
  70. package/fesm2022/rt-tools-ui-kit-v2-empty-state.mjs.map +1 -1
  71. package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs +283 -103
  72. package/fesm2022/rt-tools-ui-kit-v2-expansion-panel.mjs.map +1 -1
  73. package/fesm2022/rt-tools-ui-kit-v2-field.mjs +393 -177
  74. package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -1
  75. package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +399 -207
  76. package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
  77. package/fesm2022/rt-tools-ui-kit-v2-file-drop.mjs +288 -212
  78. package/fesm2022/rt-tools-ui-kit-v2-file-drop.mjs.map +1 -1
  79. package/fesm2022/rt-tools-ui-kit-v2-file-input.mjs +262 -116
  80. package/fesm2022/rt-tools-ui-kit-v2-file-input.mjs.map +1 -1
  81. package/fesm2022/rt-tools-ui-kit-v2-file-list.mjs +57 -31
  82. package/fesm2022/rt-tools-ui-kit-v2-file-list.mjs.map +1 -1
  83. package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs +258 -90
  84. package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs.map +1 -1
  85. package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs +249 -215
  86. package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs.map +1 -1
  87. package/fesm2022/rt-tools-ui-kit-v2-header.mjs +199 -71
  88. package/fesm2022/rt-tools-ui-kit-v2-header.mjs.map +1 -1
  89. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs +231 -0
  90. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree-selector.mjs.map +1 -0
  91. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs +336 -0
  92. package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs.map +1 -0
  93. package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +451 -162
  94. package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
  95. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs +931 -686
  96. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs.map +1 -1
  97. package/fesm2022/rt-tools-ui-kit-v2-image-cropper.mjs +664 -491
  98. package/fesm2022/rt-tools-ui-kit-v2-image-cropper.mjs.map +1 -1
  99. package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +574 -222
  100. package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -1
  101. package/fesm2022/rt-tools-ui-kit-v2-info-item.mjs +150 -36
  102. package/fesm2022/rt-tools-ui-kit-v2-info-item.mjs.map +1 -1
  103. package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs +606 -0
  104. package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs.map +1 -0
  105. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +461 -355
  106. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
  107. package/fesm2022/rt-tools-ui-kit-v2-input.mjs +338 -143
  108. package/fesm2022/rt-tools-ui-kit-v2-input.mjs.map +1 -1
  109. package/fesm2022/rt-tools-ui-kit-v2-live-badge.mjs +135 -48
  110. package/fesm2022/rt-tools-ui-kit-v2-live-badge.mjs.map +1 -1
  111. package/fesm2022/rt-tools-ui-kit-v2-logo.mjs +166 -92
  112. package/fesm2022/rt-tools-ui-kit-v2-logo.mjs.map +1 -1
  113. package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs +118 -56
  114. package/fesm2022/rt-tools-ui-kit-v2-markdown-text.mjs.map +1 -1
  115. package/fesm2022/rt-tools-ui-kit-v2-menu.mjs +1054 -527
  116. package/fesm2022/rt-tools-ui-kit-v2-menu.mjs.map +1 -1
  117. package/fesm2022/rt-tools-ui-kit-v2-message.mjs +230 -104
  118. package/fesm2022/rt-tools-ui-kit-v2-message.mjs.map +1 -1
  119. package/fesm2022/rt-tools-ui-kit-v2-money-list.mjs +210 -70
  120. package/fesm2022/rt-tools-ui-kit-v2-money-list.mjs.map +1 -1
  121. package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +532 -311
  122. package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
  123. package/fesm2022/rt-tools-ui-kit-v2-night-grid.mjs +125 -50
  124. package/fesm2022/rt-tools-ui-kit-v2-night-grid.mjs.map +1 -1
  125. package/fesm2022/rt-tools-ui-kit-v2-note.mjs +73 -43
  126. package/fesm2022/rt-tools-ui-kit-v2-note.mjs.map +1 -1
  127. package/fesm2022/rt-tools-ui-kit-v2-notifications-bell.mjs +161 -53
  128. package/fesm2022/rt-tools-ui-kit-v2-notifications-bell.mjs.map +1 -1
  129. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +491 -310
  130. package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
  131. package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs +374 -174
  132. package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs.map +1 -1
  133. package/fesm2022/rt-tools-ui-kit-v2-photo-viewer.mjs +202 -159
  134. package/fesm2022/rt-tools-ui-kit-v2-photo-viewer.mjs.map +1 -1
  135. package/fesm2022/rt-tools-ui-kit-v2-popover.mjs +438 -309
  136. package/fesm2022/rt-tools-ui-kit-v2-popover.mjs.map +1 -1
  137. package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs +295 -0
  138. package/fesm2022/rt-tools-ui-kit-v2-profile-menu.mjs.map +1 -0
  139. package/fesm2022/rt-tools-ui-kit-v2-prompt-suggestion.mjs +135 -45
  140. package/fesm2022/rt-tools-ui-kit-v2-prompt-suggestion.mjs.map +1 -1
  141. package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs +293 -171
  142. package/fesm2022/rt-tools-ui-kit-v2-radio-button.mjs.map +1 -1
  143. package/fesm2022/rt-tools-ui-kit-v2-radius.mjs +62 -55
  144. package/fesm2022/rt-tools-ui-kit-v2-radius.mjs.map +1 -1
  145. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +3379 -1466
  146. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
  147. package/fesm2022/rt-tools-ui-kit-v2-ripple.mjs +114 -116
  148. package/fesm2022/rt-tools-ui-kit-v2-ripple.mjs.map +1 -1
  149. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +406 -299
  150. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
  151. package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs +137 -36
  152. package/fesm2022/rt-tools-ui-kit-v2-section-nav.mjs.map +1 -1
  153. package/fesm2022/rt-tools-ui-kit-v2-select.mjs +687 -468
  154. package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
  155. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +2195 -1569
  156. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
  157. package/fesm2022/rt-tools-ui-kit-v2-skeleton-wrapper.mjs +187 -48
  158. package/fesm2022/rt-tools-ui-kit-v2-skeleton-wrapper.mjs.map +1 -1
  159. package/fesm2022/rt-tools-ui-kit-v2-skeleton.mjs +242 -122
  160. package/fesm2022/rt-tools-ui-kit-v2-skeleton.mjs.map +1 -1
  161. package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs +439 -0
  162. package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs.map +1 -0
  163. package/fesm2022/rt-tools-ui-kit-v2-spinner.mjs +218 -69
  164. package/fesm2022/rt-tools-ui-kit-v2-spinner.mjs.map +1 -1
  165. package/fesm2022/rt-tools-ui-kit-v2-split-button.mjs +292 -91
  166. package/fesm2022/rt-tools-ui-kit-v2-split-button.mjs.map +1 -1
  167. package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs +225 -138
  168. package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs.map +1 -1
  169. package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs +150 -116
  170. package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs.map +1 -1
  171. package/fesm2022/rt-tools-ui-kit-v2-table.mjs +2462 -1583
  172. package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
  173. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +647 -346
  174. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
  175. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +335 -121
  176. package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
  177. package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs +217 -84
  178. package/fesm2022/rt-tools-ui-kit-v2-textarea.mjs.map +1 -1
  179. package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs +151 -72
  180. package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs.map +1 -1
  181. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +697 -226
  182. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
  183. package/fesm2022/rt-tools-ui-kit-v2-timeline.mjs +92 -38
  184. package/fesm2022/rt-tools-ui-kit-v2-timeline.mjs.map +1 -1
  185. package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +752 -338
  186. package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -1
  187. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs +310 -129
  188. package/fesm2022/rt-tools-ui-kit-v2-toggle-button-group.mjs.map +1 -1
  189. package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs +286 -158
  190. package/fesm2022/rt-tools-ui-kit-v2-toggle-switch.mjs.map +1 -1
  191. package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs +270 -134
  192. package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs.map +1 -1
  193. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +322 -202
  194. package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -1
  195. package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs +908 -0
  196. package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs.map +1 -0
  197. package/fesm2022/rt-tools-ui-kit-v2-tree.mjs +785 -0
  198. package/fesm2022/rt-tools-ui-kit-v2-tree.mjs.map +1 -0
  199. package/fesm2022/rt-tools-ui-kit-v2-welcome-dialog.mjs +118 -63
  200. package/fesm2022/rt-tools-ui-kit-v2-welcome-dialog.mjs.map +1 -1
  201. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +783 -262
  202. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
  203. package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs +633 -294
  204. package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs.map +1 -1
  205. package/fesm2022/rt-tools-ui-kit-v2.mjs +100 -103
  206. package/package.json +45 -1
  207. package/src/assets/icons/collapse-all.svg +9 -0
  208. package/src/assets/icons/expand-all.svg +9 -0
  209. package/src/assets/icons-material/collapse-all.fill.svg +5 -0
  210. package/src/assets/icons-material/collapse-all.svg +5 -0
  211. package/src/assets/icons-material/expand-all.fill.svg +5 -0
  212. package/src/assets/icons-material/expand-all.svg +5 -0
  213. package/src/assets/icons-material/undo.fill.svg +5 -0
  214. package/src/assets/icons-material/undo.svg +5 -0
  215. package/src/lib/components/bottom-sheet/CONTEXT.md +20 -2
  216. package/src/lib/components/bottom-sheet/rt-bottom-sheet.component.scss +36 -1
  217. package/src/lib/components/breadcrumbs/CONTEXT.md +37 -0
  218. package/src/lib/components/breadcrumbs/rt-breadcrumbs.component.scss +205 -0
  219. package/src/lib/components/carousel/CONTEXT.md +42 -0
  220. package/src/lib/components/carousel/rt-carousel.component.scss +117 -0
  221. package/src/lib/components/checkbox/CONTEXT.md +3 -0
  222. package/src/lib/components/checkbox/rt-checkbox.component.scss +9 -3
  223. package/src/lib/components/color-palette/CONTEXT.md +49 -0
  224. package/src/lib/components/color-palette/picker/rt-color-picker.component.scss +161 -0
  225. package/src/lib/components/color-palette/rt-color-palette.component.scss +132 -0
  226. package/src/lib/components/draggable-tree/CONTEXT.md +54 -0
  227. package/src/lib/components/draggable-tree/rt-draggable-tree.component.scss +219 -0
  228. package/src/lib/components/hybrid-tree/CONTEXT.md +31 -0
  229. package/src/lib/components/hybrid-tree-selector/CONTEXT.md +25 -0
  230. package/src/lib/components/icon-button/CONTEXT.md +3 -0
  231. package/src/lib/components/inline-edit/CONTEXT.md +41 -0
  232. package/src/lib/components/inline-edit/rt-inline-edit.component.scss +274 -0
  233. package/src/lib/components/popover/CONTEXT.md +3 -0
  234. package/src/lib/components/profile-menu/CONTEXT.md +32 -0
  235. package/src/lib/components/profile-menu/rt-profile-menu.component.scss +104 -0
  236. package/src/lib/components/speed-menu/CONTEXT.md +34 -0
  237. package/src/lib/components/speed-menu/rt-speed-menu.component.scss +118 -0
  238. package/src/lib/components/tag/rt-tag.component.scss +12 -0
  239. package/src/lib/components/thread-list/CONTEXT.md +1 -0
  240. package/src/lib/components/thread-list/rt-thread-list.component.scss +2 -1
  241. package/src/lib/components/toolbar/CONTEXT.md +9 -4
  242. package/src/lib/components/toolbar/rt-toolbar.component.scss +10 -2
  243. package/src/lib/components/tooltip/CONTEXT.md +8 -1
  244. package/src/lib/components/tree/CONTEXT.md +66 -0
  245. package/src/lib/components/tree/rt-tree.component.scss +313 -0
  246. package/src/lib/components/tree-selector/CONTEXT.md +47 -0
  247. package/src/lib/components/tree-selector/rt-tree-selector.component.scss +121 -0
  248. package/src/styles/_primitives.scss +4 -0
  249. package/src/styles/_semantic.scss +5 -0
  250. package/styles/tokens.css +43 -0
  251. package/types/rt-tools-ui-kit-v2-accordion.d.ts +31 -24
  252. package/types/rt-tools-ui-kit-v2-action-bar.d.ts +112 -91
  253. package/types/rt-tools-ui-kit-v2-ai-run-status.d.ts +64 -40
  254. package/types/rt-tools-ui-kit-v2-aside-section.d.ts +13 -10
  255. package/types/rt-tools-ui-kit-v2-aside.d.ts +268 -206
  256. package/types/rt-tools-ui-kit-v2-autocomplete.d.ts +102 -61
  257. package/types/rt-tools-ui-kit-v2-bar-list.d.ts +39 -27
  258. package/types/rt-tools-ui-kit-v2-bottom-sheet.d.ts +31 -20
  259. package/types/rt-tools-ui-kit-v2-breadcrumbs.d.ts +89 -0
  260. package/types/rt-tools-ui-kit-v2-button.d.ts +119 -59
  261. package/types/rt-tools-ui-kit-v2-calendar.d.ts +151 -86
  262. package/types/rt-tools-ui-kit-v2-card.d.ts +42 -21
  263. package/types/rt-tools-ui-kit-v2-carousel.d.ts +76 -0
  264. package/types/rt-tools-ui-kit-v2-checkbox.d.ts +48 -24
  265. package/types/rt-tools-ui-kit-v2-collapsible-text.d.ts +28 -20
  266. package/types/rt-tools-ui-kit-v2-color-palette.d.ts +208 -0
  267. package/types/rt-tools-ui-kit-v2-confirm-popover.d.ts +104 -47
  268. package/types/rt-tools-ui-kit-v2-container.d.ts +278 -221
  269. package/types/rt-tools-ui-kit-v2-copy-value.d.ts +39 -24
  270. package/types/rt-tools-ui-kit-v2-core.d.ts +862 -865
  271. package/types/rt-tools-ui-kit-v2-counter-row.d.ts +20 -12
  272. package/types/rt-tools-ui-kit-v2-counter.d.ts +70 -38
  273. package/types/rt-tools-ui-kit-v2-data-list.d.ts +429 -264
  274. package/types/rt-tools-ui-kit-v2-data-table.d.ts +500 -351
  275. package/types/rt-tools-ui-kit-v2-date-picker.d.ts +164 -138
  276. package/types/rt-tools-ui-kit-v2-date-range.d.ts +102 -84
  277. package/types/rt-tools-ui-kit-v2-delta-view.d.ts +16 -13
  278. package/types/rt-tools-ui-kit-v2-detail-list.d.ts +23 -16
  279. package/types/rt-tools-ui-kit-v2-dialog.d.ts +130 -101
  280. package/types/rt-tools-ui-kit-v2-dot-field.d.ts +10 -13
  281. package/types/rt-tools-ui-kit-v2-download-link.d.ts +22 -17
  282. package/types/rt-tools-ui-kit-v2-draggable-tree.d.ts +132 -0
  283. package/types/rt-tools-ui-kit-v2-dynamic-list.d.ts +185 -96
  284. package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +904 -404
  285. package/types/rt-tools-ui-kit-v2-empty-state.d.ts +48 -19
  286. package/types/rt-tools-ui-kit-v2-expansion-panel.d.ts +67 -39
  287. package/types/rt-tools-ui-kit-v2-field.d.ts +90 -49
  288. package/types/rt-tools-ui-kit-v2-file-card.d.ts +115 -75
  289. package/types/rt-tools-ui-kit-v2-file-drop.d.ts +75 -48
  290. package/types/rt-tools-ui-kit-v2-file-input.d.ts +53 -36
  291. package/types/rt-tools-ui-kit-v2-file-list.d.ts +5 -8
  292. package/types/rt-tools-ui-kit-v2-filter-control.d.ts +83 -49
  293. package/types/rt-tools-ui-kit-v2-form-control.d.ts +102 -74
  294. package/types/rt-tools-ui-kit-v2-header.d.ts +40 -22
  295. package/types/rt-tools-ui-kit-v2-hybrid-tree-selector.d.ts +14 -0
  296. package/types/rt-tools-ui-kit-v2-hybrid-tree.d.ts +72 -0
  297. package/types/rt-tools-ui-kit-v2-icon-button.d.ts +190 -90
  298. package/types/rt-tools-ui-kit-v2-icon.d.ts +160 -129
  299. package/types/rt-tools-ui-kit-v2-image-cropper.d.ts +151 -111
  300. package/types/rt-tools-ui-kit-v2-image-upload.d.ts +159 -85
  301. package/types/rt-tools-ui-kit-v2-info-item.d.ts +26 -13
  302. package/types/rt-tools-ui-kit-v2-inline-edit.d.ts +194 -0
  303. package/types/rt-tools-ui-kit-v2-input-number.d.ts +102 -53
  304. package/types/rt-tools-ui-kit-v2-input.d.ts +82 -43
  305. package/types/rt-tools-ui-kit-v2-live-badge.d.ts +30 -17
  306. package/types/rt-tools-ui-kit-v2-logo.d.ts +49 -32
  307. package/types/rt-tools-ui-kit-v2-markdown-text.d.ts +26 -17
  308. package/types/rt-tools-ui-kit-v2-menu.d.ts +272 -155
  309. package/types/rt-tools-ui-kit-v2-message.d.ts +59 -33
  310. package/types/rt-tools-ui-kit-v2-money-list.d.ts +36 -18
  311. package/types/rt-tools-ui-kit-v2-multiselect.d.ts +114 -80
  312. package/types/rt-tools-ui-kit-v2-night-grid.d.ts +34 -25
  313. package/types/rt-tools-ui-kit-v2-note.d.ts +12 -9
  314. package/types/rt-tools-ui-kit-v2-notifications-bell.d.ts +37 -16
  315. package/types/rt-tools-ui-kit-v2-page-header.d.ts +218 -150
  316. package/types/rt-tools-ui-kit-v2-pagination.d.ts +99 -63
  317. package/types/rt-tools-ui-kit-v2-photo-viewer.d.ts +61 -66
  318. package/types/rt-tools-ui-kit-v2-popover.d.ts +116 -55
  319. package/types/rt-tools-ui-kit-v2-profile-menu.d.ts +103 -0
  320. package/types/rt-tools-ui-kit-v2-prompt-suggestion.d.ts +26 -16
  321. package/types/rt-tools-ui-kit-v2-radio-button.d.ts +85 -43
  322. package/types/rt-tools-ui-kit-v2-radius.d.ts +18 -15
  323. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +931 -590
  324. package/types/rt-tools-ui-kit-v2-ripple.d.ts +28 -25
  325. package/types/rt-tools-ui-kit-v2-scroll-area.d.ts +60 -58
  326. package/types/rt-tools-ui-kit-v2-section-nav.d.ts +32 -22
  327. package/types/rt-tools-ui-kit-v2-select.d.ts +182 -139
  328. package/types/rt-tools-ui-kit-v2-side-menu.d.ts +452 -349
  329. package/types/rt-tools-ui-kit-v2-skeleton-wrapper.d.ts +53 -20
  330. package/types/rt-tools-ui-kit-v2-skeleton.d.ts +55 -26
  331. package/types/rt-tools-ui-kit-v2-speed-menu.d.ts +131 -0
  332. package/types/rt-tools-ui-kit-v2-spinner.d.ts +56 -28
  333. package/types/rt-tools-ui-kit-v2-split-button.d.ts +96 -55
  334. package/types/rt-tools-ui-kit-v2-stat-tile.d.ts +88 -60
  335. package/types/rt-tools-ui-kit-v2-stepper.d.ts +50 -37
  336. package/types/rt-tools-ui-kit-v2-table.d.ts +631 -480
  337. package/types/rt-tools-ui-kit-v2-tabs.d.ts +198 -113
  338. package/types/rt-tools-ui-kit-v2-tag.d.ts +106 -53
  339. package/types/rt-tools-ui-kit-v2-textarea.d.ts +48 -25
  340. package/types/rt-tools-ui-kit-v2-theme-toggle.d.ts +28 -26
  341. package/types/rt-tools-ui-kit-v2-thread-list.d.ts +154 -94
  342. package/types/rt-tools-ui-kit-v2-timeline.d.ts +30 -28
  343. package/types/rt-tools-ui-kit-v2-toast.d.ts +174 -98
  344. package/types/rt-tools-ui-kit-v2-toggle-button-group.d.ts +132 -86
  345. package/types/rt-tools-ui-kit-v2-toggle-switch.d.ts +88 -50
  346. package/types/rt-tools-ui-kit-v2-toolbar.d.ts +30 -27
  347. package/types/rt-tools-ui-kit-v2-tooltip.d.ts +65 -41
  348. package/types/rt-tools-ui-kit-v2-tree-selector.d.ts +257 -0
  349. package/types/rt-tools-ui-kit-v2-tree.d.ts +282 -0
  350. package/types/rt-tools-ui-kit-v2-welcome-dialog.d.ts +21 -24
  351. package/types/rt-tools-ui-kit-v2-workspace-details.d.ts +195 -124
  352. package/types/rt-tools-ui-kit-v2-workspace.d.ts +122 -79
  353. package/types/rt-tools-ui-kit-v2.d.ts +100 -90
  354. package/fesm2022/rt-tools-ui-kit-v2.mjs.map +0 -1
@@ -1,162 +1,290 @@
1
- import * as i0 from '@angular/core';
2
- import { signal, computed, input, booleanAttribute, forwardRef, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
3
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
- import { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';
5
- import { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';
6
- import * as i1 from '@rt-tools/ui-kit-v2/radius';
7
- import { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';
8
-
9
- const BEM_BLOCK = 'rt-toggle-switch';
10
- /** Счётчик для авто-id (связка подписи с кнопкой, когда `inputId` не задан). */
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation, booleanAttribute, computed, forwardRef, input, signal } from "@angular/core";
3
+ import { NG_VALUE_ACCESSOR } from "@angular/forms";
4
+ import { BlockDirective, ElemDirective, ModDirective } from "@rt-tools/core";
5
+ import { RtIconComponent } from "@rt-tools/ui-kit-v2/icon";
6
+ import * as i1 from "@rt-tools/ui-kit-v2/radius";
7
+ import { RtRadiusDirective } from "@rt-tools/ui-kit-v2/radius";
8
+ const BEM_BLOCK = "rt-toggle-switch";
11
9
  let uidSeed = 0;
12
10
  function nextAutoId() {
13
- uidSeed += 1;
14
- return `rt-toggle-switch-${uidSeed}`;
15
- }
16
- /**
17
- * On/off switch с `role="switch"` + `aria-checked` — более правильный a11y
18
- * pattern чем `<input type="checkbox">` для toggle (screen readers произносят
19
- * "switch off/on" вместо "checkbox checked/unchecked").
20
- *
21
- * Реализует `ControlValueAccessor` для `boolean` value через
22
- * `useExisting: forwardRef(...)` — `useClass` на self-reference вызывает
23
- * NG0200 cycle при boot'е.
24
- *
25
- * Отключение складывается из двух независимых источников: входа `disabled` и
26
- * слова формы (CVA `setDisabledState`). Отключено, если так сказал любой из
27
- * них. Сводить их в один signal нельзя: форма зовёт `setDisabledState` при
28
- * связывании контрола, то есть раньше, чем переключатель впервые обновит своё
29
- * вью, и мирроринг входа затирал бы её слово — контрол, созданный отключённым,
30
- * оказывался бы кликабельным.
31
- *
32
- * Опциональные иконки `iconOff` / `iconOn` рисуются внутри трека статично:
33
- * off-иконка в начальной половине, on-иконка в конечной. Бегунок непрозрачен
34
- * и наезжает на иконку активного состояния, так что видна всегда иконка того
35
- * состояния, куда переключится контрол.
36
- *
37
- * Вход `label` рисует подпись после кнопки — элементом `<label>`, связанным с
38
- * кнопкой: нажатие на подпись переключает, и она же называет переключатель
39
- * скринридеру через `aria-labelledby`.
40
- *
41
- * Размер и отключение выводятся модификаторами и на хост: свойства размеров
42
- * объявлены на хосте, чтобы правило приложения на теге их переопределяло, а
43
- * прозрачность отключения гасит переключатель вместе с подписью.
44
- *
45
- * ViewEncapsulation.None — стили таргетируют имя элемента и BEM-класс блока.
46
- */
47
- class RtToggleSwitchComponent {
48
- constructor() {
49
- this.#onChange = () => undefined;
50
- this.#onTouched = () => undefined;
51
- /** Отключение, назначенное формой через CVA (`setDisabledState`). */
52
- this.#disabledByForm = signal(false, /* @ts-ignore */
53
- ...(ngDevMode ? [{ debugName: "#disabledByForm" }] : /* istanbul ignore next */ []));
54
- this.#autoId = nextAutoId();
55
- this.isOn = signal(false, /* @ts-ignore */
56
- ...(ngDevMode ? [{ debugName: "isOn" }] : /* istanbul ignore next */ []));
57
- this.isDisabled = computed(() => this.disabled() || this.#disabledByForm(), /* @ts-ignore */
58
- ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
59
- /** Id кнопки: заданный входом или свой — на него указывает подпись. */
60
- this.controlId = computed(() => this.inputId() ?? this.#autoId, /* @ts-ignore */
61
- ...(ngDevMode ? [{ debugName: "controlId" }] : /* istanbul ignore next */ []));
62
- this.labelId = `${this.#autoId}-label`;
63
- /**
64
- * BEM-модификаторы для `[rtMod]`. Собираем в .ts, потому что
65
- * Angular template-parser не поддерживает computed property keys
66
- * в inline-объектах, а размер приходит ключом.
67
- */
68
- this.bemMods = computed(() => ({
69
- [this.size()]: true,
70
- on: this.isOn(),
71
- disabled: this.isDisabled(),
72
- withIcons: this.iconOff() !== null || this.iconOn() !== null,
73
- }), /* @ts-ignore */
74
- ...(ngDevMode ? [{ debugName: "bemMods" }] : /* istanbul ignore next */ []));
75
- this.inputId = input(null, /* @ts-ignore */
76
- ...(ngDevMode ? [{ debugName: "inputId" }] : /* istanbul ignore next */ []));
77
- this.ariaLabel = input(null, /* @ts-ignore */
78
- ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
79
- /** Подпись после переключателя. Пусто — без подписи, как раньше. */
80
- this.label = input(null, /* @ts-ignore */
81
- ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
82
- /** Размерный тир трека. */
83
- this.size = input('sm', /* @ts-ignore */
84
- ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
85
- /** Иконка выключенного состояния — в начальной половине трека. Пусто — без иконки. */
86
- this.iconOff = input(null, /* @ts-ignore */
87
- ...(ngDevMode ? [{ debugName: "iconOff" }] : /* istanbul ignore next */ []));
88
- /** Иконка включённого состояния — в конечной половине трека. Пусто — без иконки. */
89
- this.iconOn = input(null, /* @ts-ignore */
90
- ...(ngDevMode ? [{ debugName: "iconOn" }] : /* istanbul ignore next */ []));
91
- this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
92
- }
93
- #onChange;
94
- #onTouched;
95
- /** Отключение, назначенное формой через CVA (`setDisabledState`). */
96
- #disabledByForm;
97
- #autoId;
98
- writeValue(value) {
99
- this.isOn.set(value === true);
100
- }
101
- registerOnChange(fn) {
102
- this.#onChange = fn;
103
- }
104
- registerOnTouched(fn) {
105
- this.#onTouched = fn;
106
- }
107
- setDisabledState(disabled) {
108
- this.#disabledByForm.set(disabled);
109
- }
110
- toggle() {
111
- if (this.isDisabled()) {
112
- return;
113
- }
114
- const next = !this.isOn();
115
- this.isOn.set(next);
116
- this.#onChange(next);
117
- this.#onTouched();
118
- }
119
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtToggleSwitchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
120
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: RtToggleSwitchComponent, isStandalone: true, selector: "rt-toggle-switch", inputs: { inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, iconOff: { classPropertyName: "iconOff", publicName: "iconOff", isSignal: true, isRequired: false, transformFunction: null }, iconOn: { classPropertyName: "iconOn", publicName: "iconOn", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.rt-toggle-switch--md": "size() === 'md'", "class.rt-toggle-switch--lg": "size() === 'lg'", "class.rt-toggle-switch--on": "isOn()", "class.rt-toggle-switch--disabled": "isDisabled()" }, classAttribute: "rt-toggle-switch" }, providers: [
121
- {
122
- provide: NG_VALUE_ACCESSOR,
123
- useExisting: forwardRef(() => RtToggleSwitchComponent),
124
- multi: true,
125
- },
126
- ], hostDirectives: [{ directive: i1.RtRadiusDirective, inputs: ["radius", "radius"] }], ngImport: i0, template: "<ng-container rtBlock=\"rt-toggle-switch\">\n <button\n rtBlock=\"rt-toggle-switch\"\n qa-dataid=\"toggle-switch-control\"\n type=\"button\"\n role=\"switch\"\n [rtMod]=\"bemMods()\"\n [attr.id]=\"label() ? controlId() : inputId()\"\n [attr.aria-checked]=\"isOn()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\">\n <span rtElem=\"track\">\n @if (iconOff(); as iconOffName) {\n <rt-icon rtElem=\"icon-off\" size=\"sm\" [name]=\"iconOffName\" />\n }\n @if (iconOn(); as iconOnName) {\n <rt-icon rtElem=\"icon-on\" size=\"sm\" [name]=\"iconOnName\" />\n }\n <span rtElem=\"thumb\"></span>\n </span>\n </button>\n @if (label(); as labelText) {\n <label rtElem=\"label\" qa-dataid=\"toggle-switch-label\" [attr.id]=\"labelId\" [attr.for]=\"controlId()\">{{ labelText }}</label>\n }\n</ng-container>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-toggle-switch{--rt-toggle-radius: var(--rt-radius-full);--rt-toggle-focus-shadow: var(--rt-shadow-focus-ring);--rt-toggle-transition-duration: var(--rt-duration-fast);--rt-toggle-disabled-opacity: .5;--rt-toggle-justify: flex-start;--rt-toggle-label-gap: var(--rt-space-2);--rt-toggle-label-size: var(--rt-text-sm);--rt-toggle-label-color-off: var(--rt-color-text-muted);--rt-toggle-label-color-on: var(--rt-color-text-primary);--rt-toggle-label-color-hover: var(--rt-color-text-primary);--rt-toggle-track-width: 42px;--rt-toggle-track-height: 24px;--rt-toggle-thumb-size: 18px;--rt-toggle-thumb-inset: 3px;--rt-toggle-thumb-travel: 18px;--rt-toggle-icon-inset: 4px;display:inline-flex;align-items:center;justify-content:var(--rt-toggle-justify);gap:var(--rt-toggle-label-gap)}rt-toggle-switch.rt-toggle-switch--md{--rt-toggle-track-width: 52px;--rt-toggle-thumb-travel: 28px}rt-toggle-switch.rt-toggle-switch--lg{--rt-toggle-track-width: 60px;--rt-toggle-track-height: 30px;--rt-toggle-thumb-size: 24px;--rt-toggle-thumb-travel: 30px;--rt-toggle-icon-inset: 6px}rt-toggle-switch.rt-toggle-switch--disabled{opacity:var(--rt-toggle-disabled-opacity)}rt-toggle-switch[data-rt-radius=none]{--rt-toggle-radius: var(--rt-radius-none)}rt-toggle-switch[data-rt-radius=xs]{--rt-toggle-radius: var(--rt-radius-xs)}rt-toggle-switch[data-rt-radius=sm]{--rt-toggle-radius: var(--rt-radius-sm)}rt-toggle-switch[data-rt-radius=ms]{--rt-toggle-radius: var(--rt-radius-ms)}rt-toggle-switch[data-rt-radius=md]{--rt-toggle-radius: var(--rt-radius-md)}rt-toggle-switch[data-rt-radius=lg]{--rt-toggle-radius: var(--rt-radius-lg)}rt-toggle-switch[data-rt-radius=xl]{--rt-toggle-radius: var(--rt-radius-xl)}rt-toggle-switch[data-rt-radius=\"2xl\"]{--rt-toggle-radius: var(--rt-radius-2xl)}rt-toggle-switch[data-rt-radius=full]{--rt-toggle-radius: var(--rt-radius-full)}rt-toggle-switch .rt-toggle-switch{display:inline-flex;padding:0;border:none;background:none;cursor:pointer}rt-toggle-switch .rt-toggle-switch:focus-visible{border-radius:var(--rt-toggle-radius);box-shadow:var(--rt-toggle-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-toggle-switch .rt-toggle-switch--disabled{cursor:not-allowed}rt-toggle-switch .rt-toggle-switch__track{position:relative;display:inline-block;width:var(--rt-toggle-track-width);height:var(--rt-toggle-track-height);border-radius:var(--rt-toggle-radius);background:var(--rt-toggle-color-track);box-shadow:var(--rt-toggle-shadow-border);color:var(--rt-toggle-color-icon);transition:background var(--rt-toggle-transition-duration) ease,box-shadow var(--rt-toggle-transition-duration) ease}rt-toggle-switch .rt-toggle-switch--on .rt-toggle-switch__track{background:var(--rt-toggle-color-track-on);box-shadow:none}rt-toggle-switch .rt-toggle-switch__icon-off,rt-toggle-switch .rt-toggle-switch__icon-on{position:absolute;inset-block-start:50%;transform:translateY(-50%)}rt-toggle-switch .rt-toggle-switch__icon-off{inset-inline-start:var(--rt-toggle-icon-inset)}rt-toggle-switch .rt-toggle-switch__icon-on{inset-inline-end:var(--rt-toggle-icon-inset)}rt-toggle-switch .rt-toggle-switch__thumb{position:absolute;width:var(--rt-toggle-thumb-size);height:var(--rt-toggle-thumb-size);border-radius:var(--rt-toggle-radius);background:var(--rt-toggle-color-thumb);box-shadow:var(--rt-toggle-shadow-thumb);inset-block-start:var(--rt-toggle-thumb-inset);inset-inline-start:var(--rt-toggle-thumb-inset);transition:transform var(--rt-toggle-transition-duration) ease}rt-toggle-switch .rt-toggle-switch--on .rt-toggle-switch__thumb{transform:translate(var(--rt-toggle-thumb-travel))}rt-toggle-switch .rt-toggle-switch__label{color:var(--rt-toggle-label-color-off);cursor:pointer;font-size:var(--rt-toggle-label-size);transition:color var(--rt-toggle-transition-duration) ease;-webkit-user-select:none;user-select:none}rt-toggle-switch.rt-toggle-switch--on .rt-toggle-switch__label{color:var(--rt-toggle-label-color-on)}rt-toggle-switch:not(.rt-toggle-switch--disabled):hover .rt-toggle-switch__label{color:var(--rt-toggle-label-color-hover)}rt-toggle-switch.rt-toggle-switch--disabled .rt-toggle-switch__label{cursor:not-allowed}}\n"], dependencies: [{ kind: "component", type:
127
- // standalone components / directives
128
- RtIconComponent, selector: "rt-icon", inputs: ["name", "glyph", "glyphStrategy", "size", "color", "fill", "spin", "rotate"] }, { kind: "directive", type: 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
+ uidSeed += 1;
12
+ return `rt-toggle-switch-${uidSeed}`;
129
13
  }
130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RtToggleSwitchComponent, decorators: [{
131
- type: Component,
132
- args: [{ selector: 'rt-toggle-switch', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [
133
- // standalone components / directives
134
- RtIconComponent,
135
- BlockDirective,
136
- ElemDirective,
137
- ModDirective,
138
- ], providers: [
139
- {
140
- provide: NG_VALUE_ACCESSOR,
141
- useExisting: forwardRef(() => RtToggleSwitchComponent),
142
- multi: true,
143
- },
144
- ], hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }], host: {
145
- class: BEM_BLOCK,
146
- '[class.rt-toggle-switch--md]': "size() === 'md'",
147
- '[class.rt-toggle-switch--lg]': "size() === 'lg'",
148
- '[class.rt-toggle-switch--on]': 'isOn()',
149
- '[class.rt-toggle-switch--disabled]': 'isDisabled()',
150
- }, template: "<ng-container rtBlock=\"rt-toggle-switch\">\n <button\n rtBlock=\"rt-toggle-switch\"\n qa-dataid=\"toggle-switch-control\"\n type=\"button\"\n role=\"switch\"\n [rtMod]=\"bemMods()\"\n [attr.id]=\"label() ? controlId() : inputId()\"\n [attr.aria-checked]=\"isOn()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\">\n <span rtElem=\"track\">\n @if (iconOff(); as iconOffName) {\n <rt-icon rtElem=\"icon-off\" size=\"sm\" [name]=\"iconOffName\" />\n }\n @if (iconOn(); as iconOnName) {\n <rt-icon rtElem=\"icon-on\" size=\"sm\" [name]=\"iconOnName\" />\n }\n <span rtElem=\"thumb\"></span>\n </span>\n </button>\n @if (label(); as labelText) {\n <label rtElem=\"label\" qa-dataid=\"toggle-switch-label\" [attr.id]=\"labelId\" [attr.for]=\"controlId()\">{{ labelText }}</label>\n }\n</ng-container>\n", styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-toggle-switch{--rt-toggle-radius: var(--rt-radius-full);--rt-toggle-focus-shadow: var(--rt-shadow-focus-ring);--rt-toggle-transition-duration: var(--rt-duration-fast);--rt-toggle-disabled-opacity: .5;--rt-toggle-justify: flex-start;--rt-toggle-label-gap: var(--rt-space-2);--rt-toggle-label-size: var(--rt-text-sm);--rt-toggle-label-color-off: var(--rt-color-text-muted);--rt-toggle-label-color-on: var(--rt-color-text-primary);--rt-toggle-label-color-hover: var(--rt-color-text-primary);--rt-toggle-track-width: 42px;--rt-toggle-track-height: 24px;--rt-toggle-thumb-size: 18px;--rt-toggle-thumb-inset: 3px;--rt-toggle-thumb-travel: 18px;--rt-toggle-icon-inset: 4px;display:inline-flex;align-items:center;justify-content:var(--rt-toggle-justify);gap:var(--rt-toggle-label-gap)}rt-toggle-switch.rt-toggle-switch--md{--rt-toggle-track-width: 52px;--rt-toggle-thumb-travel: 28px}rt-toggle-switch.rt-toggle-switch--lg{--rt-toggle-track-width: 60px;--rt-toggle-track-height: 30px;--rt-toggle-thumb-size: 24px;--rt-toggle-thumb-travel: 30px;--rt-toggle-icon-inset: 6px}rt-toggle-switch.rt-toggle-switch--disabled{opacity:var(--rt-toggle-disabled-opacity)}rt-toggle-switch[data-rt-radius=none]{--rt-toggle-radius: var(--rt-radius-none)}rt-toggle-switch[data-rt-radius=xs]{--rt-toggle-radius: var(--rt-radius-xs)}rt-toggle-switch[data-rt-radius=sm]{--rt-toggle-radius: var(--rt-radius-sm)}rt-toggle-switch[data-rt-radius=ms]{--rt-toggle-radius: var(--rt-radius-ms)}rt-toggle-switch[data-rt-radius=md]{--rt-toggle-radius: var(--rt-radius-md)}rt-toggle-switch[data-rt-radius=lg]{--rt-toggle-radius: var(--rt-radius-lg)}rt-toggle-switch[data-rt-radius=xl]{--rt-toggle-radius: var(--rt-radius-xl)}rt-toggle-switch[data-rt-radius=\"2xl\"]{--rt-toggle-radius: var(--rt-radius-2xl)}rt-toggle-switch[data-rt-radius=full]{--rt-toggle-radius: var(--rt-radius-full)}rt-toggle-switch .rt-toggle-switch{display:inline-flex;padding:0;border:none;background:none;cursor:pointer}rt-toggle-switch .rt-toggle-switch:focus-visible{border-radius:var(--rt-toggle-radius);box-shadow:var(--rt-toggle-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-toggle-switch .rt-toggle-switch--disabled{cursor:not-allowed}rt-toggle-switch .rt-toggle-switch__track{position:relative;display:inline-block;width:var(--rt-toggle-track-width);height:var(--rt-toggle-track-height);border-radius:var(--rt-toggle-radius);background:var(--rt-toggle-color-track);box-shadow:var(--rt-toggle-shadow-border);color:var(--rt-toggle-color-icon);transition:background var(--rt-toggle-transition-duration) ease,box-shadow var(--rt-toggle-transition-duration) ease}rt-toggle-switch .rt-toggle-switch--on .rt-toggle-switch__track{background:var(--rt-toggle-color-track-on);box-shadow:none}rt-toggle-switch .rt-toggle-switch__icon-off,rt-toggle-switch .rt-toggle-switch__icon-on{position:absolute;inset-block-start:50%;transform:translateY(-50%)}rt-toggle-switch .rt-toggle-switch__icon-off{inset-inline-start:var(--rt-toggle-icon-inset)}rt-toggle-switch .rt-toggle-switch__icon-on{inset-inline-end:var(--rt-toggle-icon-inset)}rt-toggle-switch .rt-toggle-switch__thumb{position:absolute;width:var(--rt-toggle-thumb-size);height:var(--rt-toggle-thumb-size);border-radius:var(--rt-toggle-radius);background:var(--rt-toggle-color-thumb);box-shadow:var(--rt-toggle-shadow-thumb);inset-block-start:var(--rt-toggle-thumb-inset);inset-inline-start:var(--rt-toggle-thumb-inset);transition:transform var(--rt-toggle-transition-duration) ease}rt-toggle-switch .rt-toggle-switch--on .rt-toggle-switch__thumb{transform:translate(var(--rt-toggle-thumb-travel))}rt-toggle-switch .rt-toggle-switch__label{color:var(--rt-toggle-label-color-off);cursor:pointer;font-size:var(--rt-toggle-label-size);transition:color var(--rt-toggle-transition-duration) ease;-webkit-user-select:none;user-select:none}rt-toggle-switch.rt-toggle-switch--on .rt-toggle-switch__label{color:var(--rt-toggle-label-color-on)}rt-toggle-switch:not(.rt-toggle-switch--disabled):hover .rt-toggle-switch__label{color:var(--rt-toggle-label-color-hover)}rt-toggle-switch.rt-toggle-switch--disabled .rt-toggle-switch__label{cursor:not-allowed}}\n"] }]
151
- }], propDecorators: { inputId: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputId", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], iconOff: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconOff", required: false }] }], iconOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconOn", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
152
-
153
- /**
154
- * Модель `<rt-toggle-switch>`: один корневой неймспейс с префиксом `I`.
155
- */
156
-
157
- /**
158
- * Generated bundle index. Do not edit.
159
- */
160
-
14
+ var RtToggleSwitchComponent = class RtToggleSwitchComponent {
15
+ constructor() {
16
+ this.#onChange = () => void 0;
17
+ this.#onTouched = () => void 0;
18
+ this.#disabledByForm = signal(false, ...ngDevMode ? [{ debugName: "#disabledByForm" }] : /* istanbul ignore next */ []);
19
+ this.#autoId = nextAutoId();
20
+ this.isOn = signal(false, ...ngDevMode ? [{ debugName: "isOn" }] : /* istanbul ignore next */ []);
21
+ this.isDisabled = computed(() => this.disabled() || this.#disabledByForm(), ...ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []);
22
+ this.controlId = computed(() => this.inputId() ?? this.#autoId, ...ngDevMode ? [{ debugName: "controlId" }] : /* istanbul ignore next */ []);
23
+ this.labelId = `${this.#autoId}-label`;
24
+ this.bemMods = computed(() => ({
25
+ [this.size()]: true,
26
+ on: this.isOn(),
27
+ disabled: this.isDisabled(),
28
+ withIcons: this.iconOff() !== null || this.iconOn() !== null
29
+ }), ...ngDevMode ? [{ debugName: "bemMods" }] : /* istanbul ignore next */ []);
30
+ this.inputId = input(null, ...ngDevMode ? [{ debugName: "inputId" }] : /* istanbul ignore next */ []);
31
+ this.ariaLabel = input(null, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
32
+ this.label = input(null, ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
33
+ this.size = input("sm", ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
34
+ this.iconOff = input(null, ...ngDevMode ? [{ debugName: "iconOff" }] : /* istanbul ignore next */ []);
35
+ this.iconOn = input(null, ...ngDevMode ? [{ debugName: "iconOn" }] : /* istanbul ignore next */ []);
36
+ this.disabled = input(false, {
37
+ ...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
38
+ transform: booleanAttribute
39
+ });
40
+ }
41
+ #onChange;
42
+ #onTouched;
43
+ #disabledByForm;
44
+ #autoId;
45
+ writeValue(value) {
46
+ this.isOn.set(value === true);
47
+ }
48
+ registerOnChange(fn) {
49
+ this.#onChange = fn;
50
+ }
51
+ registerOnTouched(fn) {
52
+ this.#onTouched = fn;
53
+ }
54
+ setDisabledState(disabled) {
55
+ this.#disabledByForm.set(disabled);
56
+ }
57
+ toggle() {
58
+ if (this.isDisabled()) return;
59
+ const next = !this.isOn();
60
+ this.isOn.set(next);
61
+ this.#onChange(next);
62
+ this.#onTouched();
63
+ }
64
+ static {
65
+ this.ɵfac = i0.ɵɵngDeclareFactory({
66
+ minVersion: "12.0.0",
67
+ version: "22.2.2",
68
+ ngImport: i0,
69
+ type: RtToggleSwitchComponent,
70
+ deps: [],
71
+ target: i0.ɵɵFactoryTarget.Component
72
+ });
73
+ }
74
+ static {
75
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
76
+ minVersion: "17.0.0",
77
+ version: "22.2.2",
78
+ type: RtToggleSwitchComponent,
79
+ isStandalone: true,
80
+ selector: "rt-toggle-switch",
81
+ inputs: {
82
+ inputId: {
83
+ classPropertyName: "inputId",
84
+ publicName: "inputId",
85
+ isSignal: true,
86
+ isRequired: false,
87
+ transformFunction: null
88
+ },
89
+ ariaLabel: {
90
+ classPropertyName: "ariaLabel",
91
+ publicName: "ariaLabel",
92
+ isSignal: true,
93
+ isRequired: false,
94
+ transformFunction: null
95
+ },
96
+ label: {
97
+ classPropertyName: "label",
98
+ publicName: "label",
99
+ isSignal: true,
100
+ isRequired: false,
101
+ transformFunction: null
102
+ },
103
+ size: {
104
+ classPropertyName: "size",
105
+ publicName: "size",
106
+ isSignal: true,
107
+ isRequired: false,
108
+ transformFunction: null
109
+ },
110
+ iconOff: {
111
+ classPropertyName: "iconOff",
112
+ publicName: "iconOff",
113
+ isSignal: true,
114
+ isRequired: false,
115
+ transformFunction: null
116
+ },
117
+ iconOn: {
118
+ classPropertyName: "iconOn",
119
+ publicName: "iconOn",
120
+ isSignal: true,
121
+ isRequired: false,
122
+ transformFunction: null
123
+ },
124
+ disabled: {
125
+ classPropertyName: "disabled",
126
+ publicName: "disabled",
127
+ isSignal: true,
128
+ isRequired: false,
129
+ transformFunction: null
130
+ }
131
+ },
132
+ host: {
133
+ properties: {
134
+ "class.rt-toggle-switch--md": "size() === 'md'",
135
+ "class.rt-toggle-switch--lg": "size() === 'lg'",
136
+ "class.rt-toggle-switch--on": "isOn()",
137
+ "class.rt-toggle-switch--disabled": "isDisabled()"
138
+ },
139
+ classAttribute: "rt-toggle-switch"
140
+ },
141
+ providers: [{
142
+ provide: NG_VALUE_ACCESSOR,
143
+ useExisting: forwardRef(() => RtToggleSwitchComponent),
144
+ multi: true
145
+ }],
146
+ hostDirectives: [{
147
+ directive: i1.RtRadiusDirective,
148
+ inputs: ["radius", "radius"]
149
+ }],
150
+ ngImport: i0,
151
+ template: "<ng-container rtBlock=\"rt-toggle-switch\">\n <button\n rtBlock=\"rt-toggle-switch\"\n qa-dataid=\"toggle-switch-control\"\n type=\"button\"\n role=\"switch\"\n [rtMod]=\"bemMods()\"\n [attr.id]=\"label() ? controlId() : inputId()\"\n [attr.aria-checked]=\"isOn()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\">\n <span rtElem=\"track\">\n @if (iconOff(); as iconOffName) {\n <rt-icon rtElem=\"icon-off\" size=\"sm\" [name]=\"iconOffName\" />\n }\n @if (iconOn(); as iconOnName) {\n <rt-icon rtElem=\"icon-on\" size=\"sm\" [name]=\"iconOnName\" />\n }\n <span rtElem=\"thumb\"></span>\n </span>\n </button>\n @if (label(); as labelText) {\n <label rtElem=\"label\" qa-dataid=\"toggle-switch-label\" [attr.id]=\"labelId\" [attr.for]=\"controlId()\">{{ labelText }}</label>\n }\n</ng-container>\n",
152
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-toggle-switch{--rt-toggle-radius: var(--rt-radius-full);--rt-toggle-focus-shadow: var(--rt-shadow-focus-ring);--rt-toggle-transition-duration: var(--rt-duration-fast);--rt-toggle-disabled-opacity: .5;--rt-toggle-justify: flex-start;--rt-toggle-label-gap: var(--rt-space-2);--rt-toggle-label-size: var(--rt-text-sm);--rt-toggle-label-color-off: var(--rt-color-text-muted);--rt-toggle-label-color-on: var(--rt-color-text-primary);--rt-toggle-label-color-hover: var(--rt-color-text-primary);--rt-toggle-track-width: 42px;--rt-toggle-track-height: 24px;--rt-toggle-thumb-size: 18px;--rt-toggle-thumb-inset: 3px;--rt-toggle-thumb-travel: 18px;--rt-toggle-icon-inset: 4px;display:inline-flex;align-items:center;justify-content:var(--rt-toggle-justify);gap:var(--rt-toggle-label-gap)}rt-toggle-switch.rt-toggle-switch--md{--rt-toggle-track-width: 52px;--rt-toggle-thumb-travel: 28px}rt-toggle-switch.rt-toggle-switch--lg{--rt-toggle-track-width: 60px;--rt-toggle-track-height: 30px;--rt-toggle-thumb-size: 24px;--rt-toggle-thumb-travel: 30px;--rt-toggle-icon-inset: 6px}rt-toggle-switch.rt-toggle-switch--disabled{opacity:var(--rt-toggle-disabled-opacity)}rt-toggle-switch[data-rt-radius=none]{--rt-toggle-radius: var(--rt-radius-none)}rt-toggle-switch[data-rt-radius=xs]{--rt-toggle-radius: var(--rt-radius-xs)}rt-toggle-switch[data-rt-radius=sm]{--rt-toggle-radius: var(--rt-radius-sm)}rt-toggle-switch[data-rt-radius=ms]{--rt-toggle-radius: var(--rt-radius-ms)}rt-toggle-switch[data-rt-radius=md]{--rt-toggle-radius: var(--rt-radius-md)}rt-toggle-switch[data-rt-radius=lg]{--rt-toggle-radius: var(--rt-radius-lg)}rt-toggle-switch[data-rt-radius=xl]{--rt-toggle-radius: var(--rt-radius-xl)}rt-toggle-switch[data-rt-radius=\"2xl\"]{--rt-toggle-radius: var(--rt-radius-2xl)}rt-toggle-switch[data-rt-radius=full]{--rt-toggle-radius: var(--rt-radius-full)}rt-toggle-switch .rt-toggle-switch{display:inline-flex;padding:0;border:none;background:none;cursor:pointer}rt-toggle-switch .rt-toggle-switch:focus-visible{border-radius:var(--rt-toggle-radius);box-shadow:var(--rt-toggle-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-toggle-switch .rt-toggle-switch--disabled{cursor:not-allowed}rt-toggle-switch .rt-toggle-switch__track{position:relative;display:inline-block;width:var(--rt-toggle-track-width);height:var(--rt-toggle-track-height);border-radius:var(--rt-toggle-radius);background:var(--rt-toggle-color-track);box-shadow:var(--rt-toggle-shadow-border);color:var(--rt-toggle-color-icon);transition:background var(--rt-toggle-transition-duration) ease,box-shadow var(--rt-toggle-transition-duration) ease}rt-toggle-switch .rt-toggle-switch--on .rt-toggle-switch__track{background:var(--rt-toggle-color-track-on);box-shadow:none}rt-toggle-switch .rt-toggle-switch__icon-off,rt-toggle-switch .rt-toggle-switch__icon-on{position:absolute;inset-block-start:50%;transform:translateY(-50%)}rt-toggle-switch .rt-toggle-switch__icon-off{inset-inline-start:var(--rt-toggle-icon-inset)}rt-toggle-switch .rt-toggle-switch__icon-on{inset-inline-end:var(--rt-toggle-icon-inset)}rt-toggle-switch .rt-toggle-switch__thumb{position:absolute;width:var(--rt-toggle-thumb-size);height:var(--rt-toggle-thumb-size);border-radius:var(--rt-toggle-radius);background:var(--rt-toggle-color-thumb);box-shadow:var(--rt-toggle-shadow-thumb);inset-block-start:var(--rt-toggle-thumb-inset);inset-inline-start:var(--rt-toggle-thumb-inset);transition:transform var(--rt-toggle-transition-duration) ease}rt-toggle-switch .rt-toggle-switch--on .rt-toggle-switch__thumb{transform:translate(var(--rt-toggle-thumb-travel))}rt-toggle-switch .rt-toggle-switch__label{color:var(--rt-toggle-label-color-off);cursor:pointer;font-size:var(--rt-toggle-label-size);transition:color var(--rt-toggle-transition-duration) ease;-webkit-user-select:none;user-select:none}rt-toggle-switch.rt-toggle-switch--on .rt-toggle-switch__label{color:var(--rt-toggle-label-color-on)}rt-toggle-switch:not(.rt-toggle-switch--disabled):hover .rt-toggle-switch__label{color:var(--rt-toggle-label-color-hover)}rt-toggle-switch.rt-toggle-switch--disabled .rt-toggle-switch__label{cursor:not-allowed}}\n"],
153
+ dependencies: [
154
+ {
155
+ kind: "component",
156
+ type: RtIconComponent,
157
+ selector: "rt-icon",
158
+ inputs: [
159
+ "name",
160
+ "glyph",
161
+ "glyphStrategy",
162
+ "size",
163
+ "color",
164
+ "fill",
165
+ "spin",
166
+ "rotate"
167
+ ]
168
+ },
169
+ {
170
+ kind: "directive",
171
+ type: BlockDirective,
172
+ selector: "[rtBlock]",
173
+ inputs: ["rtMod"]
174
+ },
175
+ {
176
+ kind: "directive",
177
+ type: ElemDirective,
178
+ selector: "[rtElem]",
179
+ inputs: ["rtMod"]
180
+ },
181
+ {
182
+ kind: "directive",
183
+ type: ModDirective,
184
+ selector: "[rtMod]"
185
+ }
186
+ ],
187
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
188
+ encapsulation: i0.ViewEncapsulation.None
189
+ });
190
+ }
191
+ };
192
+ i0.ɵɵngDeclareClassMetadata({
193
+ minVersion: "12.0.0",
194
+ version: "22.2.2",
195
+ ngImport: i0,
196
+ type: RtToggleSwitchComponent,
197
+ decorators: [{
198
+ type: Component,
199
+ args: [{
200
+ selector: "rt-toggle-switch",
201
+ changeDetection: ChangeDetectionStrategy.OnPush,
202
+ encapsulation: ViewEncapsulation.None,
203
+ imports: [
204
+ RtIconComponent,
205
+ BlockDirective,
206
+ ElemDirective,
207
+ ModDirective
208
+ ],
209
+ providers: [{
210
+ provide: NG_VALUE_ACCESSOR,
211
+ useExisting: forwardRef(() => RtToggleSwitchComponent),
212
+ multi: true
213
+ }],
214
+ hostDirectives: [{
215
+ directive: RtRadiusDirective,
216
+ inputs: ["radius"]
217
+ }],
218
+ host: {
219
+ class: BEM_BLOCK,
220
+ "[class.rt-toggle-switch--md]": "size() === 'md'",
221
+ "[class.rt-toggle-switch--lg]": "size() === 'lg'",
222
+ "[class.rt-toggle-switch--on]": "isOn()",
223
+ "[class.rt-toggle-switch--disabled]": "isDisabled()"
224
+ },
225
+ template: "<ng-container rtBlock=\"rt-toggle-switch\">\n <button\n rtBlock=\"rt-toggle-switch\"\n qa-dataid=\"toggle-switch-control\"\n type=\"button\"\n role=\"switch\"\n [rtMod]=\"bemMods()\"\n [attr.id]=\"label() ? controlId() : inputId()\"\n [attr.aria-checked]=\"isOn()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\">\n <span rtElem=\"track\">\n @if (iconOff(); as iconOffName) {\n <rt-icon rtElem=\"icon-off\" size=\"sm\" [name]=\"iconOffName\" />\n }\n @if (iconOn(); as iconOnName) {\n <rt-icon rtElem=\"icon-on\" size=\"sm\" [name]=\"iconOnName\" />\n }\n <span rtElem=\"thumb\"></span>\n </span>\n </button>\n @if (label(); as labelText) {\n <label rtElem=\"label\" qa-dataid=\"toggle-switch-label\" [attr.id]=\"labelId\" [attr.for]=\"controlId()\">{{ labelText }}</label>\n }\n</ng-container>\n",
226
+ styles: ["@charset \"UTF-8\";@layer rt-kit.components{rt-toggle-switch{--rt-toggle-radius: var(--rt-radius-full);--rt-toggle-focus-shadow: var(--rt-shadow-focus-ring);--rt-toggle-transition-duration: var(--rt-duration-fast);--rt-toggle-disabled-opacity: .5;--rt-toggle-justify: flex-start;--rt-toggle-label-gap: var(--rt-space-2);--rt-toggle-label-size: var(--rt-text-sm);--rt-toggle-label-color-off: var(--rt-color-text-muted);--rt-toggle-label-color-on: var(--rt-color-text-primary);--rt-toggle-label-color-hover: var(--rt-color-text-primary);--rt-toggle-track-width: 42px;--rt-toggle-track-height: 24px;--rt-toggle-thumb-size: 18px;--rt-toggle-thumb-inset: 3px;--rt-toggle-thumb-travel: 18px;--rt-toggle-icon-inset: 4px;display:inline-flex;align-items:center;justify-content:var(--rt-toggle-justify);gap:var(--rt-toggle-label-gap)}rt-toggle-switch.rt-toggle-switch--md{--rt-toggle-track-width: 52px;--rt-toggle-thumb-travel: 28px}rt-toggle-switch.rt-toggle-switch--lg{--rt-toggle-track-width: 60px;--rt-toggle-track-height: 30px;--rt-toggle-thumb-size: 24px;--rt-toggle-thumb-travel: 30px;--rt-toggle-icon-inset: 6px}rt-toggle-switch.rt-toggle-switch--disabled{opacity:var(--rt-toggle-disabled-opacity)}rt-toggle-switch[data-rt-radius=none]{--rt-toggle-radius: var(--rt-radius-none)}rt-toggle-switch[data-rt-radius=xs]{--rt-toggle-radius: var(--rt-radius-xs)}rt-toggle-switch[data-rt-radius=sm]{--rt-toggle-radius: var(--rt-radius-sm)}rt-toggle-switch[data-rt-radius=ms]{--rt-toggle-radius: var(--rt-radius-ms)}rt-toggle-switch[data-rt-radius=md]{--rt-toggle-radius: var(--rt-radius-md)}rt-toggle-switch[data-rt-radius=lg]{--rt-toggle-radius: var(--rt-radius-lg)}rt-toggle-switch[data-rt-radius=xl]{--rt-toggle-radius: var(--rt-radius-xl)}rt-toggle-switch[data-rt-radius=\"2xl\"]{--rt-toggle-radius: var(--rt-radius-2xl)}rt-toggle-switch[data-rt-radius=full]{--rt-toggle-radius: var(--rt-radius-full)}rt-toggle-switch .rt-toggle-switch{display:inline-flex;padding:0;border:none;background:none;cursor:pointer}rt-toggle-switch .rt-toggle-switch:focus-visible{border-radius:var(--rt-toggle-radius);box-shadow:var(--rt-toggle-focus-shadow);outline:2px solid transparent;outline-offset:2px}rt-toggle-switch .rt-toggle-switch--disabled{cursor:not-allowed}rt-toggle-switch .rt-toggle-switch__track{position:relative;display:inline-block;width:var(--rt-toggle-track-width);height:var(--rt-toggle-track-height);border-radius:var(--rt-toggle-radius);background:var(--rt-toggle-color-track);box-shadow:var(--rt-toggle-shadow-border);color:var(--rt-toggle-color-icon);transition:background var(--rt-toggle-transition-duration) ease,box-shadow var(--rt-toggle-transition-duration) ease}rt-toggle-switch .rt-toggle-switch--on .rt-toggle-switch__track{background:var(--rt-toggle-color-track-on);box-shadow:none}rt-toggle-switch .rt-toggle-switch__icon-off,rt-toggle-switch .rt-toggle-switch__icon-on{position:absolute;inset-block-start:50%;transform:translateY(-50%)}rt-toggle-switch .rt-toggle-switch__icon-off{inset-inline-start:var(--rt-toggle-icon-inset)}rt-toggle-switch .rt-toggle-switch__icon-on{inset-inline-end:var(--rt-toggle-icon-inset)}rt-toggle-switch .rt-toggle-switch__thumb{position:absolute;width:var(--rt-toggle-thumb-size);height:var(--rt-toggle-thumb-size);border-radius:var(--rt-toggle-radius);background:var(--rt-toggle-color-thumb);box-shadow:var(--rt-toggle-shadow-thumb);inset-block-start:var(--rt-toggle-thumb-inset);inset-inline-start:var(--rt-toggle-thumb-inset);transition:transform var(--rt-toggle-transition-duration) ease}rt-toggle-switch .rt-toggle-switch--on .rt-toggle-switch__thumb{transform:translate(var(--rt-toggle-thumb-travel))}rt-toggle-switch .rt-toggle-switch__label{color:var(--rt-toggle-label-color-off);cursor:pointer;font-size:var(--rt-toggle-label-size);transition:color var(--rt-toggle-transition-duration) ease;-webkit-user-select:none;user-select:none}rt-toggle-switch.rt-toggle-switch--on .rt-toggle-switch__label{color:var(--rt-toggle-label-color-on)}rt-toggle-switch:not(.rt-toggle-switch--disabled):hover .rt-toggle-switch__label{color:var(--rt-toggle-label-color-hover)}rt-toggle-switch.rt-toggle-switch--disabled .rt-toggle-switch__label{cursor:not-allowed}}\n"]
227
+ }]
228
+ }],
229
+ propDecorators: {
230
+ inputId: [{
231
+ type: i0.Input,
232
+ args: [{
233
+ isSignal: true,
234
+ alias: "inputId",
235
+ required: false
236
+ }]
237
+ }],
238
+ ariaLabel: [{
239
+ type: i0.Input,
240
+ args: [{
241
+ isSignal: true,
242
+ alias: "ariaLabel",
243
+ required: false
244
+ }]
245
+ }],
246
+ label: [{
247
+ type: i0.Input,
248
+ args: [{
249
+ isSignal: true,
250
+ alias: "label",
251
+ required: false
252
+ }]
253
+ }],
254
+ size: [{
255
+ type: i0.Input,
256
+ args: [{
257
+ isSignal: true,
258
+ alias: "size",
259
+ required: false
260
+ }]
261
+ }],
262
+ iconOff: [{
263
+ type: i0.Input,
264
+ args: [{
265
+ isSignal: true,
266
+ alias: "iconOff",
267
+ required: false
268
+ }]
269
+ }],
270
+ iconOn: [{
271
+ type: i0.Input,
272
+ args: [{
273
+ isSignal: true,
274
+ alias: "iconOn",
275
+ required: false
276
+ }]
277
+ }],
278
+ disabled: [{
279
+ type: i0.Input,
280
+ args: [{
281
+ isSignal: true,
282
+ alias: "disabled",
283
+ required: false
284
+ }]
285
+ }]
286
+ }
287
+ });
161
288
  export { RtToggleSwitchComponent };
162
- //# sourceMappingURL=rt-tools-ui-kit-v2-toggle-switch.mjs.map
289
+
290
+ //# sourceMappingURL=rt-tools-ui-kit-v2-toggle-switch.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"rt-tools-ui-kit-v2-toggle-switch.mjs","sources":["../../../projects/ui-kit-v2/src/lib/components/toggle-switch/rt-toggle-switch.component.ts","../../../projects/ui-kit-v2/src/lib/components/toggle-switch/rt-toggle-switch.component.html","../../../projects/ui-kit-v2/src/lib/components/toggle-switch/rt-toggle-switch.model.ts","../../../projects/ui-kit-v2/src/lib/components/toggle-switch/rt-tools-ui-kit-v2-toggle-switch.ts"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n InputSignal,\n InputSignalWithTransform,\n Signal,\n signal,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';\nimport { IRtToggleSwitch } from './rt-toggle-switch.model';\n\nconst BEM_BLOCK: string = 'rt-toggle-switch';\n\n/** Счётчик для авто-id (связка подписи с кнопкой, когда `inputId` не задан). */\nlet uidSeed: number = 0;\n\nfunction nextAutoId(): string {\n uidSeed += 1;\n return `rt-toggle-switch-${uidSeed}`;\n}\n\n/**\n * On/off switch с `role=\"switch\"` + `aria-checked` — более правильный a11y\n * pattern чем `<input type=\"checkbox\">` для toggle (screen readers произносят\n * \"switch off/on\" вместо \"checkbox checked/unchecked\").\n *\n * Реализует `ControlValueAccessor` для `boolean` value через\n * `useExisting: forwardRef(...)` — `useClass` на self-reference вызывает\n * NG0200 cycle при boot'е.\n *\n * Отключение складывается из двух независимых источников: входа `disabled` и\n * слова формы (CVA `setDisabledState`). Отключено, если так сказал любой из\n * них. Сводить их в один signal нельзя: форма зовёт `setDisabledState` при\n * связывании контрола, то есть раньше, чем переключатель впервые обновит своё\n * вью, и мирроринг входа затирал бы её слово — контрол, созданный отключённым,\n * оказывался бы кликабельным.\n *\n * Опциональные иконки `iconOff` / `iconOn` рисуются внутри трека статично:\n * off-иконка в начальной половине, on-иконка в конечной. Бегунок непрозрачен\n * и наезжает на иконку активного состояния, так что видна всегда иконка того\n * состояния, куда переключится контрол.\n *\n * Вход `label` рисует подпись после кнопки — элементом `<label>`, связанным с\n * кнопкой: нажатие на подпись переключает, и она же называет переключатель\n * скринридеру через `aria-labelledby`.\n *\n * Размер и отключение выводятся модификаторами и на хост: свойства размеров\n * объявлены на хосте, чтобы правило приложения на теге их переопределяло, а\n * прозрачность отключения гасит переключатель вместе с подписью.\n *\n * ViewEncapsulation.None — стили таргетируют имя элемента и BEM-класс блока.\n */\n@Component({\n selector: 'rt-toggle-switch',\n templateUrl: './rt-toggle-switch.component.html',\n styleUrl: './rt-toggle-switch.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone components / directives\n RtIconComponent,\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof RtToggleSwitchComponent => RtToggleSwitchComponent),\n multi: true,\n },\n ],\n hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }],\n host: {\n class: BEM_BLOCK,\n '[class.rt-toggle-switch--md]': \"size() === 'md'\",\n '[class.rt-toggle-switch--lg]': \"size() === 'lg'\",\n '[class.rt-toggle-switch--on]': 'isOn()',\n '[class.rt-toggle-switch--disabled]': 'isDisabled()',\n },\n})\nexport class RtToggleSwitchComponent implements ControlValueAccessor {\n #onChange: (value: boolean) => void = (): void => undefined;\n #onTouched: () => void = (): void => undefined;\n\n /** Отключение, назначенное формой через CVA (`setDisabledState`). */\n readonly #disabledByForm: WritableSignal<boolean> = signal<boolean>(false);\n\n readonly #autoId: string = nextAutoId();\n\n protected readonly isOn: WritableSignal<boolean> = signal<boolean>(false);\n protected readonly isDisabled: Signal<boolean> = computed((): boolean => this.disabled() || this.#disabledByForm());\n\n /** Id кнопки: заданный входом или свой — на него указывает подпись. */\n protected readonly controlId: Signal<string> = computed((): string => this.inputId() ?? this.#autoId);\n\n protected readonly labelId: string = `${this.#autoId}-label`;\n\n /**\n * BEM-модификаторы для `[rtMod]`. Собираем в .ts, потому что\n * Angular template-parser не поддерживает computed property keys\n * в inline-объектах, а размер приходит ключом.\n */\n protected readonly bemMods: Signal<Record<string, boolean>> = computed((): Record<string, boolean> => ({\n [this.size()]: true,\n on: this.isOn(),\n disabled: this.isDisabled(),\n withIcons: this.iconOff() !== null || this.iconOn() !== null,\n }));\n\n public readonly inputId: InputSignal<string | null> = input<string | null>(null);\n\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** Подпись после переключателя. Пусто — без подписи, как раньше. */\n public readonly label: InputSignal<string | null> = input<string | null>(null);\n\n /** Размерный тир трека. */\n public readonly size: InputSignal<IRtToggleSwitch.Size> = input<IRtToggleSwitch.Size>('sm');\n\n /** Иконка выключенного состояния — в начальной половине трека. Пусто — без иконки. */\n public readonly iconOff: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n /** Иконка включённого состояния — в конечной половине трека. Пусто — без иконки. */\n public readonly iconOn: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n public writeValue(value: boolean | null | undefined): void {\n this.isOn.set(value === true);\n }\n\n public registerOnChange(fn: (value: boolean) => void): void {\n this.#onChange = fn;\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 toggle(): void {\n if (this.isDisabled()) {\n return;\n }\n const next: boolean = !this.isOn();\n this.isOn.set(next);\n this.#onChange(next);\n this.#onTouched();\n }\n}\n","<ng-container rtBlock=\"rt-toggle-switch\">\n <button\n rtBlock=\"rt-toggle-switch\"\n qa-dataid=\"toggle-switch-control\"\n type=\"button\"\n role=\"switch\"\n [rtMod]=\"bemMods()\"\n [attr.id]=\"label() ? controlId() : inputId()\"\n [attr.aria-checked]=\"isOn()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\">\n <span rtElem=\"track\">\n @if (iconOff(); as iconOffName) {\n <rt-icon rtElem=\"icon-off\" size=\"sm\" [name]=\"iconOffName\" />\n }\n @if (iconOn(); as iconOnName) {\n <rt-icon rtElem=\"icon-on\" size=\"sm\" [name]=\"iconOnName\" />\n }\n <span rtElem=\"thumb\"></span>\n </span>\n </button>\n @if (label(); as labelText) {\n <label rtElem=\"label\" qa-dataid=\"toggle-switch-label\" [attr.id]=\"labelId\" [attr.for]=\"controlId()\">{{ labelText }}</label>\n }\n</ng-container>\n","/**\n * Модель `<rt-toggle-switch>`: один корневой неймспейс с префиксом `I`.\n */\n\nexport namespace IRtToggleSwitch {\n /**\n * Размерный тир трека. Маппинг на пиксели — в SCSS\n * (`--rt-toggle-track-width` / `-height` / `--rt-toggle-thumb-size`).\n * Default — `sm`: он совпадает по высоте с плотными контролами формы,\n * где тоггл стоит в ряду с текстом.\n */\n export type Size = 'sm' | 'md' | 'lg';\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rt-tools-ui-kit-v2-toggle-switch.mjs","names":[],"sources":["../../../projects/ui-kit-v2/src/lib/components/toggle-switch/rt-toggle-switch.component.ts","../../../projects/ui-kit-v2/src/lib/components/toggle-switch/rt-toggle-switch.component.html"],"sourcesContent":["import { BooleanInput } from '@angular/cdk/coercion';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n InputSignal,\n InputSignalWithTransform,\n Signal,\n signal,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { BlockDirective, ElemDirective, ModDirective } from '@rt-tools/core';\n\nimport { RtIconComponent } from '@rt-tools/ui-kit-v2/icon';\nimport { IRtIcon } from '@rt-tools/ui-kit-v2/core';\nimport { RtRadiusDirective } from '@rt-tools/ui-kit-v2/radius';\nimport { IRtToggleSwitch } from './rt-toggle-switch.model';\n\nconst BEM_BLOCK: string = 'rt-toggle-switch';\n\n/** Счётчик для авто-id (связка подписи с кнопкой, когда `inputId` не задан). */\nlet uidSeed: number = 0;\n\nfunction nextAutoId(): string {\n uidSeed += 1;\n return `rt-toggle-switch-${uidSeed}`;\n}\n\n/**\n * On/off switch с `role=\"switch\"` + `aria-checked` — более правильный a11y\n * pattern чем `<input type=\"checkbox\">` для toggle (screen readers произносят\n * \"switch off/on\" вместо \"checkbox checked/unchecked\").\n *\n * Реализует `ControlValueAccessor` для `boolean` value через\n * `useExisting: forwardRef(...)` — `useClass` на self-reference вызывает\n * NG0200 cycle при boot'е.\n *\n * Отключение складывается из двух независимых источников: входа `disabled` и\n * слова формы (CVA `setDisabledState`). Отключено, если так сказал любой из\n * них. Сводить их в один signal нельзя: форма зовёт `setDisabledState` при\n * связывании контрола, то есть раньше, чем переключатель впервые обновит своё\n * вью, и мирроринг входа затирал бы её слово — контрол, созданный отключённым,\n * оказывался бы кликабельным.\n *\n * Опциональные иконки `iconOff` / `iconOn` рисуются внутри трека статично:\n * off-иконка в начальной половине, on-иконка в конечной. Бегунок непрозрачен\n * и наезжает на иконку активного состояния, так что видна всегда иконка того\n * состояния, куда переключится контрол.\n *\n * Вход `label` рисует подпись после кнопки — элементом `<label>`, связанным с\n * кнопкой: нажатие на подпись переключает, и она же называет переключатель\n * скринридеру через `aria-labelledby`.\n *\n * Размер и отключение выводятся модификаторами и на хост: свойства размеров\n * объявлены на хосте, чтобы правило приложения на теге их переопределяло, а\n * прозрачность отключения гасит переключатель вместе с подписью.\n *\n * ViewEncapsulation.None — стили таргетируют имя элемента и BEM-класс блока.\n */\n@Component({\n selector: 'rt-toggle-switch',\n templateUrl: './rt-toggle-switch.component.html',\n styleUrl: './rt-toggle-switch.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n // standalone components / directives\n RtIconComponent,\n BlockDirective,\n ElemDirective,\n ModDirective,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef((): typeof RtToggleSwitchComponent => RtToggleSwitchComponent),\n multi: true,\n },\n ],\n hostDirectives: [{ directive: RtRadiusDirective, inputs: ['radius'] }],\n host: {\n class: BEM_BLOCK,\n '[class.rt-toggle-switch--md]': \"size() === 'md'\",\n '[class.rt-toggle-switch--lg]': \"size() === 'lg'\",\n '[class.rt-toggle-switch--on]': 'isOn()',\n '[class.rt-toggle-switch--disabled]': 'isDisabled()',\n },\n})\nexport class RtToggleSwitchComponent implements ControlValueAccessor {\n #onChange: (value: boolean) => void = (): void => undefined;\n #onTouched: () => void = (): void => undefined;\n\n /** Отключение, назначенное формой через CVA (`setDisabledState`). */\n readonly #disabledByForm: WritableSignal<boolean> = signal<boolean>(false);\n\n readonly #autoId: string = nextAutoId();\n\n protected readonly isOn: WritableSignal<boolean> = signal<boolean>(false);\n protected readonly isDisabled: Signal<boolean> = computed((): boolean => this.disabled() || this.#disabledByForm());\n\n /** Id кнопки: заданный входом или свой — на него указывает подпись. */\n protected readonly controlId: Signal<string> = computed((): string => this.inputId() ?? this.#autoId);\n\n protected readonly labelId: string = `${this.#autoId}-label`;\n\n /**\n * BEM-модификаторы для `[rtMod]`. Собираем в .ts, потому что\n * Angular template-parser не поддерживает computed property keys\n * в inline-объектах, а размер приходит ключом.\n */\n protected readonly bemMods: Signal<Record<string, boolean>> = computed((): Record<string, boolean> => ({\n [this.size()]: true,\n on: this.isOn(),\n disabled: this.isDisabled(),\n withIcons: this.iconOff() !== null || this.iconOn() !== null,\n }));\n\n public readonly inputId: InputSignal<string | null> = input<string | null>(null);\n\n public readonly ariaLabel: InputSignal<string | null> = input<string | null>(null);\n\n /** Подпись после переключателя. Пусто — без подписи, как раньше. */\n public readonly label: InputSignal<string | null> = input<string | null>(null);\n\n /** Размерный тир трека. */\n public readonly size: InputSignal<IRtToggleSwitch.Size> = input<IRtToggleSwitch.Size>('sm');\n\n /** Иконка выключенного состояния — в начальной половине трека. Пусто — без иконки. */\n public readonly iconOff: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n /** Иконка включённого состояния — в конечной половине трека. Пусто — без иконки. */\n public readonly iconOn: InputSignal<IRtIcon.Name | null> = input<IRtIcon.Name | null>(null);\n\n public readonly disabled: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n transform: booleanAttribute,\n });\n\n public writeValue(value: boolean | null | undefined): void {\n this.isOn.set(value === true);\n }\n\n public registerOnChange(fn: (value: boolean) => void): void {\n this.#onChange = fn;\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 toggle(): void {\n if (this.isDisabled()) {\n return;\n }\n const next: boolean = !this.isOn();\n this.isOn.set(next);\n this.#onChange(next);\n this.#onTouched();\n }\n}\n","<ng-container rtBlock=\"rt-toggle-switch\">\n <button\n rtBlock=\"rt-toggle-switch\"\n qa-dataid=\"toggle-switch-control\"\n type=\"button\"\n role=\"switch\"\n [rtMod]=\"bemMods()\"\n [attr.id]=\"label() ? controlId() : inputId()\"\n [attr.aria-checked]=\"isOn()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"label() ? labelId : null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\">\n <span rtElem=\"track\">\n @if (iconOff(); as iconOffName) {\n <rt-icon rtElem=\"icon-off\" size=\"sm\" [name]=\"iconOffName\" />\n }\n @if (iconOn(); as iconOnName) {\n <rt-icon rtElem=\"icon-on\" size=\"sm\" [name]=\"iconOnName\" />\n }\n <span rtElem=\"thumb\"></span>\n </span>\n </button>\n @if (label(); as labelText) {\n <label rtElem=\"label\" qa-dataid=\"toggle-switch-label\" [attr.id]=\"labelId\" [attr.for]=\"controlId()\">{{ labelText }}</label>\n }\n</ng-container>\n"],"mappings":"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"}