@radix-ng/primitives 0.11.1 → 0.12.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 (449) hide show
  1. package/.compodocrc.json +12 -0
  2. package/CHANGELOG.md +182 -0
  3. package/LICENSE +21 -0
  4. package/accordion/__tests__/accordion-content.directive.spec.ts +8 -0
  5. package/accordion/__tests__/accordion-header.directive.spec.ts +8 -0
  6. package/accordion/__tests__/accordion-item.directive.spec.ts +8 -0
  7. package/accordion/__tests__/accordion-root.directive.spec.ts +8 -0
  8. package/accordion/__tests__/accordion-trigger.directive.spec.ts +8 -0
  9. package/accordion/ng-package.json +5 -0
  10. package/accordion/src/accordion-content.directive.ts +46 -0
  11. package/accordion/src/accordion-header.directive.ts +15 -0
  12. package/accordion/src/accordion-item.directive.ts +216 -0
  13. package/accordion/src/accordion-root.directive.ts +205 -0
  14. package/accordion/src/accordion-trigger.directive.ts +37 -0
  15. package/accordion/stories/accordion.docs.mdx +77 -0
  16. package/accordion/stories/accordion.stories.ts +340 -0
  17. package/alert-dialog/{index.d.ts → index.ts} +1 -0
  18. package/alert-dialog/ng-package.json +5 -0
  19. package/alert-dialog/src/alert-dialog-cancel.directive.ts +17 -0
  20. package/alert-dialog/src/alert-dialog-content.directive.ts +24 -0
  21. package/alert-dialog/src/alert-dialog-root.directive.ts +15 -0
  22. package/alert-dialog/src/alert-dialog-title.directive.ts +7 -0
  23. package/alert-dialog/src/alert-dialog-trigger.directive.ts +17 -0
  24. package/alert-dialog/src/alert-dialog.service.ts +51 -0
  25. package/alert-dialog/stories/alert-dialog.stories.ts +139 -0
  26. package/avatar/__tests__/avatar-fallback.directive.spec.ts +31 -0
  27. package/avatar/__tests__/avatar-image.directive.spec.ts +36 -0
  28. package/avatar/ng-package.json +5 -0
  29. package/avatar/src/avatar-fallback.directive.ts +62 -0
  30. package/avatar/src/avatar-image.directive.ts +55 -0
  31. package/avatar/src/avatar-root.directive.ts +35 -0
  32. package/avatar/src/avatar.config.ts +29 -0
  33. package/avatar/stories/avatar.docs.mdx +37 -0
  34. package/avatar/stories/avatar.stories.ts +87 -0
  35. package/button/__tests__/.gitkeep +0 -0
  36. package/button/src/button-abstract.directive.ts +46 -0
  37. package/checkbox/ng-package.json +5 -0
  38. package/checkbox/src/checkbox-button.directive.ts +26 -0
  39. package/checkbox/src/checkbox-indicator.directive.ts +16 -0
  40. package/checkbox/src/checkbox-input.directive.ts +36 -0
  41. package/checkbox/src/checkbox.directive.ts +146 -0
  42. package/checkbox/src/checkbox.token.ts +8 -0
  43. package/checkbox/stories/checkbox-group.component.ts +87 -0
  44. package/checkbox/stories/checkbox-group.styles.scss +49 -0
  45. package/checkbox/stories/checkbox-indeterminate.component.ts +52 -0
  46. package/checkbox/stories/checkbox.docs.mdx +58 -0
  47. package/checkbox/stories/checkbox.stories.ts +105 -0
  48. package/collapsible/__tests__/collapsible-content.directive.spec.ts +30 -0
  49. package/collapsible/__tests__/collapsible-root.directive.spec.ts +27 -0
  50. package/collapsible/__tests__/collapsible-trigger.directive.spec.ts +30 -0
  51. package/collapsible/ng-package.json +5 -0
  52. package/collapsible/src/collapsible-content.directive.ts +34 -0
  53. package/collapsible/src/collapsible-content.token.ts +6 -0
  54. package/collapsible/src/collapsible-root.directive.ts +120 -0
  55. package/collapsible/src/collapsible-trigger.directive.ts +44 -0
  56. package/collapsible/stories/collapsible-animation.component.ts +116 -0
  57. package/collapsible/stories/collapsible-external-triggering.component.ts +86 -0
  58. package/collapsible/stories/collapsible.docs.mdx +53 -0
  59. package/collapsible/stories/collapsible.stories.ts +151 -0
  60. package/context-menu/README.md +1 -0
  61. package/context-menu/index.ts +10 -0
  62. package/context-menu/ng-package.json +5 -0
  63. package/context-menu/src/context-menu-content.directive.ts +47 -0
  64. package/context-menu/src/context-menu-item-checkbox.directive.ts +30 -0
  65. package/context-menu/src/context-menu-item-indicator.directive.ts +14 -0
  66. package/context-menu/src/context-menu-item-radio-group.directive.ts +31 -0
  67. package/context-menu/src/context-menu-item-radio.directive.ts +69 -0
  68. package/context-menu/src/context-menu-item-selectable.ts +18 -0
  69. package/context-menu/src/context-menu-item.directive.ts +65 -0
  70. package/context-menu/src/context-menu-label.directive.ts +7 -0
  71. package/context-menu/src/context-menu-separator.directive.ts +13 -0
  72. package/context-menu/src/context-menu-trigger.directive.ts +82 -0
  73. package/context-menu/stories/context-menu.docs.mdx +23 -0
  74. package/context-menu/stories/context-menu.stories.ts +253 -0
  75. package/core/index.ts +3 -0
  76. package/core/src/accessor/provide-value-accessor.ts +20 -0
  77. package/core/src/auto-focus.directive.ts +81 -0
  78. package/core/src/inject-ng-control.ts +28 -0
  79. package/core/src/mount.ts +27 -0
  80. package/dialog/__tests__/dialog-content.directive.spec.ts +77 -0
  81. package/dialog/__tests__/dialog-trigger.directive.spec.ts +85 -0
  82. package/dialog/index.ts +31 -0
  83. package/dialog/ng-package.json +5 -0
  84. package/dialog/src/dialog-close.directive.ts +18 -0
  85. package/dialog/src/dialog-content.directive.ts +45 -0
  86. package/dialog/src/dialog-description.directive.ts +7 -0
  87. package/dialog/src/dialog-dismiss.directive.ts +18 -0
  88. package/dialog/src/dialog-ref.ts +70 -0
  89. package/dialog/src/dialog-title.directive.ts +7 -0
  90. package/dialog/src/dialog-trigger.directive.ts +52 -0
  91. package/dialog/src/dialog.config.ts +55 -0
  92. package/dialog/src/dialog.injectors.ts +12 -0
  93. package/dialog/src/dialog.providers.ts +27 -0
  94. package/dialog/src/dialog.service.ts +94 -0
  95. package/dialog/stories/dialog.docs.mdx +32 -0
  96. package/dialog/stories/dialog.stories.ts +233 -0
  97. package/dropdown-menu/ng-package.json +5 -0
  98. package/dropdown-menu/src/dropdown-menu-content.directive.ts +47 -0
  99. package/dropdown-menu/src/dropdown-menu-item-checkbox.directive.ts +30 -0
  100. package/dropdown-menu/src/dropdown-menu-item-indicator.directive.ts +14 -0
  101. package/dropdown-menu/src/dropdown-menu-item-radio-group.directive.ts +31 -0
  102. package/dropdown-menu/src/dropdown-menu-item-radio.directive.ts +72 -0
  103. package/dropdown-menu/src/dropdown-menu-item-selectable.ts +18 -0
  104. package/dropdown-menu/src/dropdown-menu-item.directive.ts +66 -0
  105. package/dropdown-menu/src/dropdown-menu-label.directive.ts +7 -0
  106. package/dropdown-menu/src/dropdown-menu-separator.directive.ts +13 -0
  107. package/dropdown-menu/src/dropdown-menu-trigger.directive.ts +185 -0
  108. package/dropdown-menu/stories/dropdown-menu-item-checkbox.component.ts +104 -0
  109. package/dropdown-menu/stories/dropdown-menu-item-checkbox.styles.scss +106 -0
  110. package/dropdown-menu/stories/dropdown-menu-item-radio.component.ts +95 -0
  111. package/dropdown-menu/stories/dropdown-menu-item-radio.styles.scss +106 -0
  112. package/dropdown-menu/stories/dropdown.docs.mdx +27 -0
  113. package/dropdown-menu/stories/dropdown.stories.ts +212 -0
  114. package/form-field/index.ts +1 -0
  115. package/form-field/src/.gitkeep +0 -0
  116. package/jest.config.ts +21 -0
  117. package/label/__tests__/label-root.directive.spec.ts +99 -0
  118. package/label/ng-package.json +5 -0
  119. package/label/src/label.directive.ts +58 -0
  120. package/label/stories/label.docs.mdx +40 -0
  121. package/label/stories/label.stories.ts +76 -0
  122. package/menu/index.ts +29 -0
  123. package/menu/ng-package.json +5 -0
  124. package/menu/src/menu-content.directive.ts +9 -0
  125. package/menu/src/menu-directive.ts +10 -0
  126. package/menu/src/menu-group.directive.ts +12 -0
  127. package/menu/src/menu-item.directive.ts +44 -0
  128. package/menu/src/menu-label.directive.ts +7 -0
  129. package/menu/src/menu-separator.directive.ts +13 -0
  130. package/menubar/index.ts +38 -0
  131. package/menubar/ng-package.json +5 -0
  132. package/menubar/src/menubar-content.directive.ts +9 -0
  133. package/menubar/src/menubar-item-checkbox.directive.ts +32 -0
  134. package/menubar/src/menubar-item-indicator.directive.ts +10 -0
  135. package/menubar/src/menubar-item-radio.directive.ts +33 -0
  136. package/menubar/src/menubar-item.directive.ts +12 -0
  137. package/menubar/src/menubar-radio-group.directive.ts +9 -0
  138. package/menubar/src/menubar-root.directive.ts +15 -0
  139. package/menubar/src/menubar-separator.directive.ts +9 -0
  140. package/menubar/src/menubar-trigger.directive.ts +40 -0
  141. package/menubar/stories/menubar.stories.ts +229 -0
  142. package/ng-package.json +8 -0
  143. package/package.json +4 -118
  144. package/portal/stories/portal.docs.mdx +85 -0
  145. package/presence/__test__/presence-test.component.ts +51 -0
  146. package/presence/__test__/presence.spec.ts +50 -0
  147. package/presence/index.ts +4 -0
  148. package/presence/src/presence.ts +119 -0
  149. package/presence/src/transitions/transition.collapse.ts +99 -0
  150. package/presence/src/transitions/transition.toast.ts +27 -0
  151. package/presence/src/types.ts +20 -0
  152. package/presence/src/utils.ts +63 -0
  153. package/presence/stories/presence-story.componen.ts +69 -0
  154. package/presence/stories/presence.docs.mdx +40 -0
  155. package/presence/stories/presence.stories.ts +29 -0
  156. package/progress/__test__/progress.spec.ts +55 -0
  157. package/progress/{index.d.ts → index.ts} +1 -0
  158. package/progress/ng-package.json +5 -0
  159. package/progress/src/progress-indicator.directive.ts +26 -0
  160. package/progress/src/progress-root.directive.ts +134 -0
  161. package/progress/stories/progress.docs.mdx +65 -0
  162. package/progress/stories/progress.stories.ts +66 -0
  163. package/project.json +39 -0
  164. package/radio/{index.d.ts → index.ts} +1 -0
  165. package/radio/ng-package.json +5 -0
  166. package/radio/src/radio-indicator.directive.ts +17 -0
  167. package/radio/src/radio-item.directive.ts +68 -0
  168. package/radio/src/radio-root.directive.ts +207 -0
  169. package/radio/src/{radio-tokens.d.ts → radio-tokens.ts} +5 -1
  170. package/radio/stories/radio-group.component.ts +39 -0
  171. package/radio/stories/radio-group.styles.scss +70 -0
  172. package/radio/stories/radio.docs.mdx +68 -0
  173. package/radio/stories/radio.stories.ts +155 -0
  174. package/separator/__tests__/separator.directive.spec.ts +58 -0
  175. package/separator/ng-package.json +5 -0
  176. package/separator/src/separator.directive.ts +35 -0
  177. package/separator/stories/separator.docs.mdx +37 -0
  178. package/separator/stories/separator.stories.ts +82 -0
  179. package/slider/src/slider-input.directive.ts +0 -0
  180. package/slider/src/slider-thumb.directives.ts +60 -0
  181. package/slider/src/slider-track.directive.ts +11 -0
  182. package/slider/src/slider.directive.ts +59 -0
  183. package/slider/src/slider.types.ts +4 -0
  184. package/switch/index.ts +22 -0
  185. package/switch/ng-package.json +5 -0
  186. package/switch/src/switch-input.directive.ts +24 -0
  187. package/switch/src/switch-root.directive.ts +127 -0
  188. package/switch/src/switch-thumb.directive.ts +15 -0
  189. package/switch/stories/switch.docs.mdx +83 -0
  190. package/switch/stories/switch.stories.ts +149 -0
  191. package/tabs/__tests__/tabs-context.service.spec.ts +35 -0
  192. package/tabs/index.ts +26 -0
  193. package/tabs/ng-package.json +5 -0
  194. package/tabs/src/tabs-content.directive.ts +23 -0
  195. package/tabs/src/tabs-context.service.ts +43 -0
  196. package/tabs/src/tabs-list.directive.ts +21 -0
  197. package/tabs/src/tabs-root.directive.ts +70 -0
  198. package/tabs/src/tabs-trigger.directive.ts +55 -0
  199. package/tabs/stories/tabs.stories.ts +213 -0
  200. package/test-setup.ts +1 -0
  201. package/toggle/__tests__/toggle.directive.spec.ts +87 -0
  202. package/toggle/ng-package.json +5 -0
  203. package/toggle/src/toggle.directive.ts +49 -0
  204. package/toggle/stories/toggle.docs.mdx +60 -0
  205. package/toggle/stories/toggle.stories.ts +84 -0
  206. package/toggle-group/ng-package.json +5 -0
  207. package/toggle-group/src/toggle-group-button.directive.ts +73 -0
  208. package/toggle-group/src/toggle-group-button.token.ts +8 -0
  209. package/toggle-group/src/toggle-group-multi.directive.ts +158 -0
  210. package/toggle-group/src/toggle-group.directive.ts +148 -0
  211. package/toggle-group/src/toggle-group.token.ts +11 -0
  212. package/toggle-group/stories/toggle-group.docs.mdx +87 -0
  213. package/toggle-group/stories/toggle-group.stories.ts +95 -0
  214. package/tsconfig.doc.json +11 -0
  215. package/tsconfig.json +29 -0
  216. package/tsconfig.lib.json +19 -0
  217. package/tsconfig.lib.prod.json +12 -0
  218. package/tsconfig.spec.json +11 -0
  219. package/visually-hidden/README.md +3 -0
  220. package/visually-hidden/stories/visually-hidden.docs.mdx +36 -0
  221. package/accordion/src/accordion-content.directive.d.ts +0 -11
  222. package/accordion/src/accordion-header.directive.d.ts +0 -7
  223. package/accordion/src/accordion-item.directive.d.ts +0 -64
  224. package/accordion/src/accordion-root.directive.d.ts +0 -78
  225. package/accordion/src/accordion-trigger.directive.d.ts +0 -15
  226. package/alert-dialog/src/alert-dialog-cancel.directive.d.ts +0 -7
  227. package/alert-dialog/src/alert-dialog-content.directive.d.ts +0 -9
  228. package/alert-dialog/src/alert-dialog-root.directive.d.ts +0 -9
  229. package/alert-dialog/src/alert-dialog-title.directive.d.ts +0 -5
  230. package/alert-dialog/src/alert-dialog-trigger.directive.d.ts +0 -7
  231. package/alert-dialog/src/alert-dialog.service.d.ts +0 -14
  232. package/avatar/src/avatar-fallback.directive.d.ts +0 -27
  233. package/avatar/src/avatar-image.directive.d.ts +0 -16
  234. package/avatar/src/avatar-root.directive.d.ts +0 -21
  235. package/avatar/src/avatar.config.d.ts +0 -13
  236. package/checkbox/src/checkbox-button.directive.d.ts +0 -8
  237. package/checkbox/src/checkbox-indicator.directive.d.ts +0 -6
  238. package/checkbox/src/checkbox-input.directive.d.ts +0 -9
  239. package/checkbox/src/checkbox.directive.d.ts +0 -75
  240. package/checkbox/src/checkbox.token.d.ts +0 -4
  241. package/collapsible/src/collapsible-content.directive.d.ts +0 -17
  242. package/collapsible/src/collapsible-content.token.d.ts +0 -3
  243. package/collapsible/src/collapsible-root.directive.d.ts +0 -55
  244. package/collapsible/src/collapsible-trigger.directive.d.ts +0 -26
  245. package/compodoc/documentation.json +0 -11759
  246. package/dropdown-menu/src/dropdown-menu-content.directive.d.ts +0 -15
  247. package/dropdown-menu/src/dropdown-menu-item-checkbox.directive.d.ts +0 -9
  248. package/dropdown-menu/src/dropdown-menu-item-indicator.directive.d.ts +0 -7
  249. package/dropdown-menu/src/dropdown-menu-item-radio-group.directive.d.ts +0 -12
  250. package/dropdown-menu/src/dropdown-menu-item-radio.directive.d.ts +0 -19
  251. package/dropdown-menu/src/dropdown-menu-item-selectable.d.ts +0 -12
  252. package/dropdown-menu/src/dropdown-menu-item.directive.d.ts +0 -17
  253. package/dropdown-menu/src/dropdown-menu-label.directive.d.ts +0 -5
  254. package/dropdown-menu/src/dropdown-menu-separator.directive.d.ts +0 -6
  255. package/dropdown-menu/src/dropdown-menu-trigger.directive.d.ts +0 -43
  256. package/esm2022/accordion/index.mjs +0 -6
  257. package/esm2022/accordion/radix-ng-primitives-accordion.mjs +0 -5
  258. package/esm2022/accordion/src/accordion-content.directive.mjs +0 -42
  259. package/esm2022/accordion/src/accordion-header.directive.mjs +0 -23
  260. package/esm2022/accordion/src/accordion-item.directive.mjs +0 -175
  261. package/esm2022/accordion/src/accordion-root.directive.mjs +0 -160
  262. package/esm2022/accordion/src/accordion-trigger.directive.mjs +0 -42
  263. package/esm2022/alert-dialog/index.mjs +0 -7
  264. package/esm2022/alert-dialog/radix-ng-primitives-alert-dialog.mjs +0 -5
  265. package/esm2022/alert-dialog/src/alert-dialog-cancel.directive.mjs +0 -24
  266. package/esm2022/alert-dialog/src/alert-dialog-content.directive.mjs +0 -34
  267. package/esm2022/alert-dialog/src/alert-dialog-root.directive.mjs +0 -25
  268. package/esm2022/alert-dialog/src/alert-dialog-title.directive.mjs +0 -14
  269. package/esm2022/alert-dialog/src/alert-dialog-trigger.directive.mjs +0 -24
  270. package/esm2022/alert-dialog/src/alert-dialog.service.mjs +0 -47
  271. package/esm2022/avatar/index.mjs +0 -5
  272. package/esm2022/avatar/radix-ng-primitives-avatar.mjs +0 -5
  273. package/esm2022/avatar/src/avatar-fallback.directive.mjs +0 -54
  274. package/esm2022/avatar/src/avatar-image.directive.mjs +0 -48
  275. package/esm2022/avatar/src/avatar-root.directive.mjs +0 -38
  276. package/esm2022/avatar/src/avatar.config.mjs +0 -17
  277. package/esm2022/checkbox/index.mjs +0 -6
  278. package/esm2022/checkbox/radix-ng-primitives-checkbox.mjs +0 -5
  279. package/esm2022/checkbox/src/checkbox-button.directive.mjs +0 -33
  280. package/esm2022/checkbox/src/checkbox-indicator.directive.mjs +0 -24
  281. package/esm2022/checkbox/src/checkbox-input.directive.mjs +0 -41
  282. package/esm2022/checkbox/src/checkbox.directive.mjs +0 -141
  283. package/esm2022/checkbox/src/checkbox.token.mjs +0 -6
  284. package/esm2022/collapsible/index.mjs +0 -4
  285. package/esm2022/collapsible/radix-ng-primitives-collapsible.mjs +0 -5
  286. package/esm2022/collapsible/src/collapsible-content.directive.mjs +0 -45
  287. package/esm2022/collapsible/src/collapsible-content.token.mjs +0 -3
  288. package/esm2022/collapsible/src/collapsible-root.directive.mjs +0 -118
  289. package/esm2022/collapsible/src/collapsible-trigger.directive.mjs +0 -49
  290. package/esm2022/dialog/index.mjs +0 -2
  291. package/esm2022/dialog/radix-ng-primitives-dialog.mjs +0 -5
  292. package/esm2022/dropdown-menu/index.mjs +0 -11
  293. package/esm2022/dropdown-menu/radix-ng-primitives-dropdown-menu.mjs +0 -5
  294. package/esm2022/dropdown-menu/src/dropdown-menu-content.directive.mjs +0 -56
  295. package/esm2022/dropdown-menu/src/dropdown-menu-item-checkbox.directive.mjs +0 -36
  296. package/esm2022/dropdown-menu/src/dropdown-menu-item-indicator.directive.mjs +0 -22
  297. package/esm2022/dropdown-menu/src/dropdown-menu-item-radio-group.directive.mjs +0 -37
  298. package/esm2022/dropdown-menu/src/dropdown-menu-item-radio.directive.mjs +0 -64
  299. package/esm2022/dropdown-menu/src/dropdown-menu-item-selectable.mjs +0 -31
  300. package/esm2022/dropdown-menu/src/dropdown-menu-item.directive.mjs +0 -71
  301. package/esm2022/dropdown-menu/src/dropdown-menu-label.directive.mjs +0 -14
  302. package/esm2022/dropdown-menu/src/dropdown-menu-separator.directive.mjs +0 -21
  303. package/esm2022/dropdown-menu/src/dropdown-menu-trigger.directive.mjs +0 -176
  304. package/esm2022/index.mjs +0 -2
  305. package/esm2022/label/index.mjs +0 -2
  306. package/esm2022/label/radix-ng-primitives-label.mjs +0 -5
  307. package/esm2022/label/src/label.directive.mjs +0 -59
  308. package/esm2022/menu/index.mjs +0 -45
  309. package/esm2022/menu/radix-ng-primitives-menu.mjs +0 -5
  310. package/esm2022/menu/src/menu-content.directive.mjs +0 -17
  311. package/esm2022/menu/src/menu-directive.mjs +0 -18
  312. package/esm2022/menu/src/menu-group.directive.mjs +0 -20
  313. package/esm2022/menu/src/menu-item.directive.mjs +0 -46
  314. package/esm2022/menu/src/menu-label.directive.mjs +0 -14
  315. package/esm2022/menu/src/menu-separator.directive.mjs +0 -21
  316. package/esm2022/menubar/index.mjs +0 -60
  317. package/esm2022/menubar/radix-ng-primitives-menubar.mjs +0 -5
  318. package/esm2022/menubar/src/menubar-content.directive.mjs +0 -17
  319. package/esm2022/menubar/src/menubar-item-checkbox.directive.mjs +0 -34
  320. package/esm2022/menubar/src/menubar-item-indicator.directive.mjs +0 -17
  321. package/esm2022/menubar/src/menubar-item-radio.directive.mjs +0 -35
  322. package/esm2022/menubar/src/menubar-item.directive.mjs +0 -20
  323. package/esm2022/menubar/src/menubar-radio-group.directive.mjs +0 -17
  324. package/esm2022/menubar/src/menubar-root.directive.mjs +0 -24
  325. package/esm2022/menubar/src/menubar-separator.directive.mjs +0 -17
  326. package/esm2022/menubar/src/menubar-trigger.directive.mjs +0 -45
  327. package/esm2022/progress/index.mjs +0 -3
  328. package/esm2022/progress/radix-ng-primitives-progress.mjs +0 -5
  329. package/esm2022/progress/src/progress-indicator.directive.mjs +0 -34
  330. package/esm2022/progress/src/progress-root.directive.mjs +0 -127
  331. package/esm2022/radio/index.mjs +0 -4
  332. package/esm2022/radio/radix-ng-primitives-radio.mjs +0 -5
  333. package/esm2022/radio/src/radio-indicator.directive.mjs +0 -25
  334. package/esm2022/radio/src/radio-item.directive.mjs +0 -70
  335. package/esm2022/radio/src/radio-root.directive.mjs +0 -194
  336. package/esm2022/radio/src/radio-tokens.mjs +0 -3
  337. package/esm2022/radix-ng-primitives.mjs +0 -5
  338. package/esm2022/separator/index.mjs +0 -2
  339. package/esm2022/separator/radix-ng-primitives-separator.mjs +0 -5
  340. package/esm2022/separator/src/separator.directive.mjs +0 -31
  341. package/esm2022/switch/index.mjs +0 -30
  342. package/esm2022/switch/radix-ng-primitives-switch.mjs +0 -5
  343. package/esm2022/switch/src/switch-input.directive.mjs +0 -32
  344. package/esm2022/switch/src/switch-root.directive.mjs +0 -95
  345. package/esm2022/switch/src/switch-thumb.directive.mjs +0 -23
  346. package/esm2022/tabs/index.mjs +0 -38
  347. package/esm2022/tabs/radix-ng-primitives-tabs.mjs +0 -5
  348. package/esm2022/tabs/src/tabs-content.directive.mjs +0 -29
  349. package/esm2022/tabs/src/tabs-context.service.mjs +0 -43
  350. package/esm2022/tabs/src/tabs-list.directive.mjs +0 -23
  351. package/esm2022/tabs/src/tabs-root.directive.mjs +0 -54
  352. package/esm2022/tabs/src/tabs-trigger.directive.mjs +0 -52
  353. package/esm2022/toggle/index.mjs +0 -2
  354. package/esm2022/toggle/radix-ng-primitives-toggle.mjs +0 -5
  355. package/esm2022/toggle/src/toggle.directive.mjs +0 -39
  356. package/esm2022/toggle-group/index.mjs +0 -6
  357. package/esm2022/toggle-group/radix-ng-primitives-toggle-group.mjs +0 -5
  358. package/esm2022/toggle-group/src/toggle-group-button.directive.mjs +0 -75
  359. package/esm2022/toggle-group/src/toggle-group-button.token.mjs +0 -6
  360. package/esm2022/toggle-group/src/toggle-group-multi.directive.mjs +0 -143
  361. package/esm2022/toggle-group/src/toggle-group.directive.mjs +0 -134
  362. package/esm2022/toggle-group/src/toggle-group.token.mjs +0 -6
  363. package/fesm2022/radix-ng-primitives-accordion.mjs +0 -431
  364. package/fesm2022/radix-ng-primitives-accordion.mjs.map +0 -1
  365. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +0 -161
  366. package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +0 -1
  367. package/fesm2022/radix-ng-primitives-avatar.mjs +0 -156
  368. package/fesm2022/radix-ng-primitives-avatar.mjs.map +0 -1
  369. package/fesm2022/radix-ng-primitives-checkbox.mjs +0 -241
  370. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +0 -1
  371. package/fesm2022/radix-ng-primitives-collapsible.mjs +0 -213
  372. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +0 -1
  373. package/fesm2022/radix-ng-primitives-dialog.mjs +0 -4
  374. package/fesm2022/radix-ng-primitives-dialog.mjs.map +0 -1
  375. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs +0 -502
  376. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs.map +0 -1
  377. package/fesm2022/radix-ng-primitives-label.mjs +0 -66
  378. package/fesm2022/radix-ng-primitives-label.mjs.map +0 -1
  379. package/fesm2022/radix-ng-primitives-menu.mjs +0 -158
  380. package/fesm2022/radix-ng-primitives-menu.mjs.map +0 -1
  381. package/fesm2022/radix-ng-primitives-menubar.mjs +0 -245
  382. package/fesm2022/radix-ng-primitives-menubar.mjs.map +0 -1
  383. package/fesm2022/radix-ng-primitives-progress.mjs +0 -165
  384. package/fesm2022/radix-ng-primitives-progress.mjs.map +0 -1
  385. package/fesm2022/radix-ng-primitives-radio.mjs +0 -289
  386. package/fesm2022/radix-ng-primitives-radio.mjs.map +0 -1
  387. package/fesm2022/radix-ng-primitives-separator.mjs +0 -38
  388. package/fesm2022/radix-ng-primitives-separator.mjs.map +0 -1
  389. package/fesm2022/radix-ng-primitives-switch.mjs +0 -173
  390. package/fesm2022/radix-ng-primitives-switch.mjs.map +0 -1
  391. package/fesm2022/radix-ng-primitives-tabs.mjs +0 -222
  392. package/fesm2022/radix-ng-primitives-tabs.mjs.map +0 -1
  393. package/fesm2022/radix-ng-primitives-toggle-group.mjs +0 -358
  394. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +0 -1
  395. package/fesm2022/radix-ng-primitives-toggle.mjs +0 -46
  396. package/fesm2022/radix-ng-primitives-toggle.mjs.map +0 -1
  397. package/fesm2022/radix-ng-primitives.mjs +0 -4
  398. package/fesm2022/radix-ng-primitives.mjs.map +0 -1
  399. package/index.d.ts +0 -1
  400. package/label/src/label.directive.d.ts +0 -29
  401. package/menu/index.d.ts +0 -18
  402. package/menu/src/menu-content.directive.d.ts +0 -6
  403. package/menu/src/menu-directive.d.ts +0 -6
  404. package/menu/src/menu-group.directive.d.ts +0 -6
  405. package/menu/src/menu-item.directive.d.ts +0 -12
  406. package/menu/src/menu-label.directive.d.ts +0 -5
  407. package/menu/src/menu-separator.directive.d.ts +0 -6
  408. package/menubar/index.d.ts +0 -24
  409. package/menubar/src/menubar-content.directive.d.ts +0 -6
  410. package/menubar/src/menubar-item-checkbox.directive.d.ts +0 -14
  411. package/menubar/src/menubar-item-indicator.directive.d.ts +0 -5
  412. package/menubar/src/menubar-item-radio.directive.d.ts +0 -14
  413. package/menubar/src/menubar-item.directive.d.ts +0 -8
  414. package/menubar/src/menubar-radio-group.directive.d.ts +0 -6
  415. package/menubar/src/menubar-root.directive.d.ts +0 -7
  416. package/menubar/src/menubar-separator.directive.d.ts +0 -6
  417. package/menubar/src/menubar-trigger.directive.d.ts +0 -11
  418. package/progress/src/progress-indicator.directive.d.ts +0 -16
  419. package/progress/src/progress-root.directive.d.ts +0 -63
  420. package/radio/src/radio-indicator.directive.d.ts +0 -9
  421. package/radio/src/radio-item.directive.d.ts +0 -21
  422. package/radio/src/radio-root.directive.d.ts +0 -72
  423. package/separator/src/separator.directive.d.ts +0 -22
  424. package/switch/index.d.ts +0 -13
  425. package/switch/src/switch-input.directive.d.ts +0 -6
  426. package/switch/src/switch-root.directive.d.ts +0 -51
  427. package/switch/src/switch-thumb.directive.d.ts +0 -6
  428. package/tabs/index.d.ts +0 -15
  429. package/tabs/src/tabs-content.directive.d.ts +0 -8
  430. package/tabs/src/tabs-context.service.d.ts +0 -22
  431. package/tabs/src/tabs-list.directive.d.ts +0 -6
  432. package/tabs/src/tabs-root.directive.d.ts +0 -37
  433. package/tabs/src/tabs-trigger.directive.d.ts +0 -19
  434. package/toggle/src/toggle.directive.d.ts +0 -30
  435. package/toggle-group/src/toggle-group-button.directive.d.ts +0 -39
  436. package/toggle-group/src/toggle-group-button.token.d.ts +0 -4
  437. package/toggle-group/src/toggle-group-multi.directive.d.ts +0 -93
  438. package/toggle-group/src/toggle-group.directive.d.ts +0 -84
  439. package/toggle-group/src/toggle-group.token.d.ts +0 -5
  440. /package/accordion/{index.d.ts → index.ts} +0 -0
  441. /package/avatar/{index.d.ts → index.ts} +0 -0
  442. /package/checkbox/{index.d.ts → index.ts} +0 -0
  443. /package/collapsible/{index.d.ts → index.ts} +0 -0
  444. /package/dropdown-menu/{index.d.ts → index.ts} +0 -0
  445. /package/{dialog/index.d.ts → index.ts} +0 -0
  446. /package/label/{index.d.ts → index.ts} +0 -0
  447. /package/separator/{index.d.ts → index.ts} +0 -0
  448. /package/toggle/{index.d.ts → index.ts} +0 -0
  449. /package/toggle-group/{index.d.ts → index.ts} +0 -0
@@ -0,0 +1,84 @@
1
+ import { componentWrapperDecorator, Meta, moduleMetadata, StoryObj } from '@storybook/angular';
2
+ import { Italic, LucideAngularModule } from 'lucide-angular';
3
+ import { RdxToggleDirective } from '../src/toggle.directive';
4
+
5
+ export default {
6
+ title: 'Primitives/Toggle',
7
+ decorators: [
8
+ moduleMetadata({
9
+ imports: [
10
+ RdxToggleDirective,
11
+ LucideAngularModule,
12
+ LucideAngularModule.pick({ Italic })
13
+ ]
14
+ }),
15
+ componentWrapperDecorator(
16
+ (story) =>
17
+ `<div class="radix-themes light light-theme"
18
+ data-radius="medium"
19
+ data-scaling="100%">${story}
20
+
21
+ <style>
22
+ button {
23
+ all: unset;
24
+ }
25
+ .Toggle {
26
+ background-color: white;
27
+ color: var(--mauve-11);
28
+ height: 35px;
29
+ width: 35px;
30
+ border-radius: 4px;
31
+ display: flex;
32
+ font-size: 15px;
33
+ line-height: 1;
34
+ align-items: center;
35
+ justify-content: center;
36
+ box-shadow: 0 2px 10px var(--black-a7);
37
+ }
38
+ .Toggle:hover {
39
+ background-color: var(--violet-3);
40
+ }
41
+ .Toggle[data-state='on'] {
42
+ background-color: var(--violet-6);
43
+ color: var(--violet-12);
44
+ }
45
+ .Toggle:focus {
46
+ box-shadow: 0 0 0 2px black;
47
+ }
48
+ </style>
49
+
50
+ </div>`
51
+ )
52
+ ],
53
+ argTypes: {
54
+ pressed: {
55
+ control: 'boolean'
56
+ }
57
+ }
58
+ } as Meta;
59
+
60
+ type Story = StoryObj;
61
+
62
+ export const Default: Story = {
63
+ render: () => ({
64
+ template: `
65
+ <button rdxToggle aria-label="Toggle italic" class="Toggle">
66
+ <lucide-angular name="italic" size="16"></lucide-angular>
67
+ </button>
68
+ `
69
+ })
70
+ };
71
+
72
+ export const State: Story = {
73
+ render: (args) => ({
74
+ props: {
75
+ ...args,
76
+ pressed: true
77
+ },
78
+ template: `
79
+ <button rdxToggle [pressed]="pressed" aria-label="Toggle italic" class="Toggle">
80
+ <lucide-angular name="italic" size="16"></lucide-angular>
81
+ </button>
82
+ `
83
+ })
84
+ };
@@ -0,0 +1,5 @@
1
+ {
2
+ "lib": {
3
+ "entryFile": "index.ts"
4
+ }
5
+ }
@@ -0,0 +1,73 @@
1
+ import { booleanAttribute, Directive, Input, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { RdxToggleGroupButtonToken } from './toggle-group-button.token';
3
+ import { injectToggleGroup } from './toggle-group.token';
4
+
5
+ @Directive({
6
+ selector: 'button[rdxToggleGroupButton]',
7
+ standalone: true,
8
+ providers: [{ provide: RdxToggleGroupButtonToken, useExisting: RdxToggleGroupButtonDirective }],
9
+ host: {
10
+ role: 'radio',
11
+ '[attr.aria-checked]': 'checked',
12
+ '[attr.aria-disabled]': 'disabled || toggleGroup.disabled',
13
+ '[attr.data-disabled]': 'disabled || toggleGroup.disabled',
14
+ '[attr.data-state]': 'checked ? "on" : "off"',
15
+ '[attr.data-orientation]': 'toggleGroup.orientation',
16
+
17
+ '(click)': 'toggle()'
18
+ }
19
+ })
20
+ export class RdxToggleGroupButtonDirective implements OnChanges {
21
+ /**
22
+ * Access the toggle group.
23
+ * @ignore
24
+ */
25
+ protected readonly toggleGroup = injectToggleGroup();
26
+
27
+ /**
28
+ * The value of this toggle button.
29
+ */
30
+ @Input({ required: true }) value!: string;
31
+
32
+ /**
33
+ * Whether this toggle button is disabled.
34
+ * @default false
35
+ */
36
+ @Input({ transform: booleanAttribute }) disabled = false;
37
+
38
+ /**
39
+ * Whether this toggle button is checked.
40
+ */
41
+ protected get checked(): boolean {
42
+ return this.toggleGroup.isSelected(this.value);
43
+ }
44
+
45
+ /**
46
+ * @ignore
47
+ */
48
+ ngOnChanges(changes: SimpleChanges): void {
49
+ if ('disabled' in changes) {
50
+ // TODO
51
+ }
52
+ }
53
+
54
+ /**
55
+ * @ignore
56
+ */
57
+ toggle(): void {
58
+ if (this.disabled) {
59
+ return;
60
+ }
61
+
62
+ this.toggleGroup.toggle(this.value);
63
+ }
64
+
65
+ /**
66
+ * Ensure the disabled state is propagated to the roving focus item.
67
+ * @internal
68
+ * @ignore
69
+ */
70
+ updateDisabled(): void {
71
+ // TODO
72
+ }
73
+ }
@@ -0,0 +1,8 @@
1
+ import { inject, InjectionToken } from '@angular/core';
2
+ import type { RdxToggleGroupButtonDirective } from './toggle-group-button.directive';
3
+
4
+ export const RdxToggleGroupButtonToken = new InjectionToken<RdxToggleGroupButtonDirective>('RdxToggleGroupButtonToken');
5
+
6
+ export function injectToggleGroupButton(): RdxToggleGroupButtonDirective {
7
+ return inject(RdxToggleGroupButtonToken);
8
+ }
@@ -0,0 +1,158 @@
1
+ import {
2
+ AfterContentInit,
3
+ booleanAttribute,
4
+ ContentChildren,
5
+ Directive,
6
+ EventEmitter,
7
+ Input,
8
+ OnChanges,
9
+ QueryList,
10
+ SimpleChanges
11
+ } from '@angular/core';
12
+ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
13
+ import type { RdxToggleGroupButtonDirective } from './toggle-group-button.directive';
14
+ import { RdxToggleGroupButtonToken } from './toggle-group-button.token';
15
+ import { RdxToggleGroupToken } from './toggle-group.token';
16
+
17
+ @Directive({
18
+ selector: '[rdxToggleGroupMulti]',
19
+ standalone: true,
20
+ providers: [
21
+ { provide: RdxToggleGroupToken, useExisting: RdxToggleGroupMultiDirective },
22
+ { provide: NG_VALUE_ACCESSOR, useExisting: RdxToggleGroupMultiDirective, multi: true }
23
+ ],
24
+ host: {
25
+ role: 'group',
26
+ '[attr.data-orientation]': 'orientation',
27
+ '(focusout)': 'onTouched?.()'
28
+ }
29
+ })
30
+ export class RdxToggleGroupMultiDirective implements OnChanges, AfterContentInit, ControlValueAccessor {
31
+ /**
32
+ * The selected toggle button.
33
+ */
34
+ @Input('rdxToggleGroupMultiValue') value: ReadonlyArray<string> = [];
35
+
36
+ /**
37
+ * The orientation of the toggle group.
38
+ * @default 'horizontal'
39
+ */
40
+ @Input('rdxToggleGroupMultiOrientation') orientation: 'horizontal' | 'vertical' = 'horizontal';
41
+
42
+ /**
43
+ * Whether the toggle group is disabled.
44
+ * @default false
45
+ */
46
+ @Input({ alias: 'rdxToggleGroupMultiDisabled', transform: booleanAttribute }) disabled = false;
47
+
48
+ /**
49
+ * Whether the toggle group roving focus should wrap.
50
+ * @default true
51
+ */
52
+ @Input({ alias: 'rdxToggleGroupMultiWrap', transform: booleanAttribute }) wrap = true;
53
+
54
+ /**
55
+ * Event emitted when the selected toggle button changes.
56
+ */
57
+ @Input('rdxToggleGroupMultiValueChange') readonly valueChange = new EventEmitter<ReadonlyArray<string>>();
58
+
59
+ /**
60
+ * Access the buttons in the toggle group.
61
+ * @ignore
62
+ */
63
+ @ContentChildren(RdxToggleGroupButtonToken)
64
+ protected buttons?: QueryList<RdxToggleGroupButtonDirective>;
65
+
66
+ /**
67
+ * The value change callback.
68
+ * @ignore
69
+ */
70
+ private onChange?: (value: ReadonlyArray<string>) => void;
71
+
72
+ /**
73
+ * onTouch function registered via registerOnTouch (ControlValueAccessor).
74
+ * @ignore
75
+ */
76
+ protected onTouched?: () => void;
77
+
78
+ /**
79
+ * @ignore
80
+ */
81
+ ngOnChanges(changes: SimpleChanges): void {
82
+ if ('disabled' in changes) {
83
+ this.buttons?.forEach((button) => button.updateDisabled());
84
+ }
85
+ }
86
+
87
+ /**
88
+ * @ignore
89
+ */
90
+ ngAfterContentInit(): void {
91
+ if (this.disabled) {
92
+ this.buttons?.forEach((button) => button.updateDisabled());
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Determine if a value is selected.
98
+ * @param value The value to check.
99
+ * @returns Whether the value is selected.
100
+ * @ignore
101
+ */
102
+ isSelected(value: string): boolean {
103
+ return this.value.includes(value);
104
+ }
105
+
106
+ /**
107
+ * Toggle a value.
108
+ * @param value The value to toggle.
109
+ * @ignore
110
+ */
111
+ toggle(value: string): void {
112
+ if (this.disabled) {
113
+ return;
114
+ }
115
+
116
+ this.value = this.value.includes(value) ? this.value.filter((v) => v !== value) : [...this.value, value];
117
+
118
+ this.valueChange.emit(this.value);
119
+ this.onChange?.(this.value);
120
+ }
121
+
122
+ /**
123
+ * Select a value from Angular forms.
124
+ * @param value The value to select.
125
+ * @ignore
126
+ */
127
+ writeValue(value: ReadonlyArray<string>): void {
128
+ this.value = value;
129
+ }
130
+
131
+ /**
132
+ * Register a callback to be called when the value changes.
133
+ * @param fn The callback to register.
134
+ * @ignore
135
+ */
136
+ registerOnChange(fn: (value: ReadonlyArray<string>) => void): void {
137
+ this.onChange = fn;
138
+ }
139
+
140
+ /**
141
+ * Register a callback to be called when the toggle group is touched.
142
+ * @param fn The callback to register.
143
+ * @ignore
144
+ */
145
+ registerOnTouched(fn: () => void): void {
146
+ this.onTouched = fn;
147
+ }
148
+
149
+ /**
150
+ * Set the disabled state of the toggle group.
151
+ * @param isDisabled Whether the toggle group is disabled.
152
+ * @ignore
153
+ */
154
+ setDisabledState(isDisabled: boolean): void {
155
+ this.disabled = isDisabled;
156
+ this.buttons?.forEach((button) => button.updateDisabled());
157
+ }
158
+ }
@@ -0,0 +1,148 @@
1
+ import {
2
+ AfterContentInit,
3
+ booleanAttribute,
4
+ ContentChildren,
5
+ Directive,
6
+ EventEmitter,
7
+ Input,
8
+ OnChanges,
9
+ QueryList,
10
+ SimpleChanges
11
+ } from '@angular/core';
12
+ import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
13
+ import type { RdxToggleGroupButtonDirective } from './toggle-group-button.directive';
14
+ import { RdxToggleGroupButtonToken } from './toggle-group-button.token';
15
+ import { RdxToggleGroupToken } from './toggle-group.token';
16
+
17
+ @Directive({
18
+ selector: '[rdxToggleGroup]',
19
+ standalone: true,
20
+ providers: [
21
+ { provide: RdxToggleGroupToken, useExisting: RdxToggleGroupDirective },
22
+ { provide: NG_VALUE_ACCESSOR, useExisting: RdxToggleGroupDirective, multi: true }
23
+ ],
24
+ host: {
25
+ role: 'group',
26
+ '[attr.data-orientation]': 'orientation',
27
+ '(focusout)': 'onTouched?.()'
28
+ }
29
+ })
30
+ export class RdxToggleGroupDirective implements OnChanges, AfterContentInit, ControlValueAccessor {
31
+ /**
32
+ * The selected toggle button.
33
+ */
34
+ @Input() value: string | null = null;
35
+
36
+ /**
37
+ * The orientation of the toggle group.
38
+ * @default 'horizontal'
39
+ */
40
+ @Input() orientation: 'horizontal' | 'vertical' = 'horizontal';
41
+
42
+ /**
43
+ * Whether the toggle group is disabled.
44
+ * @default false
45
+ */
46
+ @Input({ transform: booleanAttribute }) disabled = false;
47
+
48
+ /**
49
+ * Whether the toggle group roving focus should wrap.
50
+ * @default true
51
+ */
52
+ @Input({ transform: booleanAttribute }) wrap = true;
53
+
54
+ /**
55
+ * Event emitted when the selected toggle button changes.
56
+ */
57
+ @Input() readonly valueChange = new EventEmitter<string | null>();
58
+
59
+ /**
60
+ * Access the buttons in the toggle group.
61
+ */
62
+ @ContentChildren(RdxToggleGroupButtonToken)
63
+ protected buttons?: QueryList<RdxToggleGroupButtonDirective>;
64
+
65
+ /**
66
+ * The value change callback.
67
+ */
68
+ private onChange?: (value: string | null) => void;
69
+
70
+ /**
71
+ * onTouch function registered via registerOnTouch (ControlValueAccessor).
72
+ */
73
+ protected onTouched?: () => void;
74
+
75
+ ngOnChanges(changes: SimpleChanges): void {
76
+ if ('disabled' in changes) {
77
+ this.buttons?.forEach((button) => button.updateDisabled());
78
+ }
79
+ }
80
+
81
+ ngAfterContentInit(): void {
82
+ if (this.disabled) {
83
+ this.buttons?.forEach((button) => button.updateDisabled());
84
+ }
85
+ }
86
+
87
+ /**
88
+ * Determine if a value is selected.
89
+ * @param value The value to check.
90
+ * @returns Whether the value is selected.
91
+ * @internal
92
+ */
93
+ isSelected(value: string): boolean {
94
+ return this.value === value;
95
+ }
96
+
97
+ /**
98
+ * Toggle a value.
99
+ * @param value The value to toggle.
100
+ * @internal
101
+ */
102
+ toggle(value: string): void {
103
+ if (this.disabled) {
104
+ return;
105
+ }
106
+
107
+ this.value = this.value === value ? null : value;
108
+ this.valueChange.emit(this.value);
109
+ this.onChange?.(this.value);
110
+ }
111
+
112
+ /**
113
+ * Select a value from Angular forms.
114
+ * @param value The value to select.
115
+ * @internal
116
+ */
117
+ writeValue(value: string): void {
118
+ this.value = value;
119
+ }
120
+
121
+ /**
122
+ * Register a callback to be called when the value changes.
123
+ * @param fn The callback to register.
124
+ * @internal
125
+ */
126
+ registerOnChange(fn: (value: string | null) => void): void {
127
+ this.onChange = fn;
128
+ }
129
+
130
+ /**
131
+ * Register a callback to be called when the toggle group is touched.
132
+ * @param fn The callback to register.
133
+ * @internal
134
+ */
135
+ registerOnTouched(fn: () => void): void {
136
+ this.onTouched = fn;
137
+ }
138
+
139
+ /**
140
+ * Set the disabled state of the toggle group.
141
+ * @param isDisabled Whether the toggle group is disabled.
142
+ * @internal
143
+ */
144
+ setDisabledState(isDisabled: boolean): void {
145
+ this.disabled = isDisabled;
146
+ this.buttons?.forEach((button) => button.updateDisabled());
147
+ }
148
+ }
@@ -0,0 +1,11 @@
1
+ import { inject, InjectionToken } from '@angular/core';
2
+ import type { RdxToggleGroupMultiDirective } from './toggle-group-multi.directive';
3
+ import type { RdxToggleGroupDirective } from './toggle-group.directive';
4
+
5
+ export const RdxToggleGroupToken = new InjectionToken<RdxToggleGroupDirective | RdxToggleGroupMultiDirective>(
6
+ 'RdxToggleGroupToken'
7
+ );
8
+
9
+ export function injectToggleGroup(): RdxToggleGroupDirective | RdxToggleGroupMultiDirective {
10
+ return inject(RdxToggleGroupToken);
11
+ }
@@ -0,0 +1,87 @@
1
+ import { ArgTypes, Canvas, Markdown, Meta } from '@storybook/blocks';
2
+ import * as ToggleGroupDirectiveStories from './toggle-group.stories';
3
+ import { RdxToggleGroupDirective } from '../src/toggle-group.directive';
4
+ import { RdxToggleGroupButtonDirective } from '../src/toggle-group-button.directive';
5
+
6
+ <Meta title="Primitives/Toggle Group" />
7
+
8
+ # Toggle Group
9
+
10
+ #### A set of two-\_state buttons that can be toggled on or off.
11
+
12
+ <Canvas sourceState="hidden" of={ToggleGroupDirectiveStories.Default} />
13
+
14
+ ## Features
15
+
16
+ - ✅ Full keyboard navigation.
17
+ - ✅ Supports horizontal/vertical orientation.
18
+ - ✅ Support single and multiple pressed buttons.
19
+ - ✅ Can be controlled or uncontrolled.
20
+
21
+ ## Import
22
+
23
+ Get started with importing the directives:
24
+
25
+ ```typescript
26
+ import {
27
+ RdxToggleGroupDirective,
28
+ RdxToggleGroupButtonDirective,
29
+ RdxToggleGroupMultiDirective
30
+ } from '@radix-ng/primitives/toggle-group';
31
+ ```
32
+
33
+ ## Examples
34
+
35
+ ```html
36
+ <div class="ToggleGroup" rdxToggleGroup value="center" aria-label="Text alignment">
37
+ <button class="ToggleGroupItem" rdxToggleGroupButton value="left" aria-label="Left aligned">
38
+ <lucide-icon name="align-left" size="16"></lucide-icon>
39
+ </button>
40
+ <button class="ToggleGroupItem" rdxToggleGroupButton value="center" aria-label="Center aligned">
41
+ <lucide-icon name="align-center" size="16"></lucide-icon>
42
+ </button>
43
+ <button class="ToggleGroupItem" rdxToggleGroupButton value="right" aria-label="Right aligned">
44
+ <lucide-icon name="align-right" size="16"></lucide-icon>
45
+ </button>
46
+ </div>
47
+ ```
48
+
49
+ ## API Reference
50
+
51
+ ### RdxToggleGroupDirective
52
+
53
+ <ArgTypes of={RdxToggleGroupDirective} />
54
+
55
+ <Markdown>
56
+ {`
57
+ | Data Attribute | Value |
58
+ | ----------- | --------- |
59
+ | [data-orientation] | "vertical" or "horizontal" |
60
+ `}
61
+ </Markdown>
62
+
63
+ ### RdxToggleGroupButtonDirective
64
+
65
+ <ArgTypes of={RdxToggleGroupButtonDirective} />
66
+
67
+ ## Accessibility
68
+
69
+ Uses [roving tabindex](https://www.w3.org/TR/wai-aria-practices-1.2/examples/radio/radio.html) to manage focus movement among items.
70
+
71
+ ### Keyboard Interactions
72
+
73
+ <Markdown>
74
+ {`
75
+ | Key | Description |
76
+ | ----------- | --------- |
77
+ | Tab | Moves focus to either the pressed item or the first item in the group. |
78
+ | Space | Activates/deactivates the item. |
79
+ | Enter | Activates/deactivates the item. |
80
+ | ArrowDown | Moves focus to the next item in the group. |
81
+ | ArrowRight | Moves focus to the next item in the group. |
82
+ | ArrowUp | Moves focus to the previous item in the group. |
83
+ | ArrowLeft | Moves focus to the previous item in the group. |
84
+ | Home | Moves focus to the first item. |
85
+ | End | Moves focus to the last item. |
86
+ `}
87
+ </Markdown>
@@ -0,0 +1,95 @@
1
+ import { componentWrapperDecorator, Meta, moduleMetadata, StoryObj } from '@storybook/angular';
2
+ import { AlignCenter, AlignLeft, AlignRight, LucideAngularModule } from 'lucide-angular';
3
+ import { RdxToggleGroupButtonDirective } from '../src/toggle-group-button.directive';
4
+ import { RdxToggleGroupMultiDirective } from '../src/toggle-group-multi.directive';
5
+ import { RdxToggleGroupDirective } from '../src/toggle-group.directive';
6
+
7
+ export default {
8
+ title: 'Primitives/Toggle Group',
9
+ decorators: [
10
+ moduleMetadata({
11
+ imports: [
12
+ RdxToggleGroupDirective,
13
+ RdxToggleGroupButtonDirective,
14
+ RdxToggleGroupMultiDirective,
15
+ LucideAngularModule,
16
+ LucideAngularModule.pick({ AlignRight, AlignLeft, AlignCenter })
17
+ ]
18
+ }),
19
+ componentWrapperDecorator(
20
+ (story) =>
21
+ `<div class="radix-themes light light-theme"
22
+ data-radius="medium"
23
+ data-scaling="100%">${story}
24
+
25
+ <style>
26
+ button {
27
+ all: unset;
28
+ }
29
+ .ToggleGroup {
30
+ display: inline-flex;
31
+ background-color: var(--mauve-6);
32
+ border-radius: 4px;
33
+ box-shadow: 0 2px 10px var(--black-a7);
34
+ }
35
+
36
+ .ToggleGroupItem {
37
+ background-color: white;
38
+ color: var(--mauve-11);
39
+ height: 35px;
40
+ width: 35px;
41
+ display: flex;
42
+ font-size: 15px;
43
+ line-height: 1;
44
+ align-items: center;
45
+ justify-content: center;
46
+ margin-left: 1px;
47
+ }
48
+ .ToggleGroupItem:first-child {
49
+ margin-left: 0;
50
+ border-top-left-radius: 4px;
51
+ border-bottom-left-radius: 4px;
52
+ }
53
+ .ToggleGroupItem:last-child {
54
+ border-top-right-radius: 4px;
55
+ border-bottom-right-radius: 4px;
56
+ }
57
+ .ToggleGroupItem:hover {
58
+ background-color: var(--violet-3);
59
+ }
60
+ .ToggleGroupItem[data-state='on'] {
61
+ background-color: var(--violet-5);
62
+ color: var(--violet-11);
63
+ }
64
+ .ToggleGroupItem:focus {
65
+ position: relative;
66
+ box-shadow: 0 0 0 2px black;
67
+ }
68
+ </style>
69
+
70
+ </div>`
71
+ )
72
+ ]
73
+ } as Meta;
74
+
75
+ type Story = StoryObj;
76
+
77
+ export const Default: Story = {
78
+ render: () => ({
79
+ template: `
80
+
81
+ <div rdxToggleGroup value="center" aria-label="Text alignment" class="ToggleGroup">
82
+ <button rdxToggleGroupButton value="left" aria-label="Left aligned" class="ToggleGroupItem" >
83
+ <lucide-icon name="align-left" size="16"></lucide-icon>
84
+ </button>
85
+ <button rdxToggleGroupButton value="center" aria-label="Center aligned" class="ToggleGroupItem">
86
+ <lucide-icon name="align-center" size="16"></lucide-icon>
87
+ </button>
88
+ <button rdxToggleGroupButton value="right" aria-label="Right aligned" class="ToggleGroupItem">
89
+ <lucide-icon name="align-right" size="16"></lucide-icon>
90
+ </button>
91
+ </div>
92
+
93
+ `
94
+ })
95
+ };
@@ -0,0 +1,11 @@
1
+ {
2
+ "include": ["**/*.ts"],
3
+ "exclude": [
4
+ "**/*.spec.ts",
5
+ "test-setup.ts",
6
+ "jest.config.ts",
7
+ "**/*.test.ts",
8
+ "**/*.stories.ts",
9
+ "**/*.stories.js"
10
+ ]
11
+ }