@ng-cn/core 1.0.15 → 1.0.17

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 (380) hide show
  1. package/package.json +34 -33
  2. package/schematics/component/index.js +454 -95
  3. package/schematics/component/index.ts +459 -98
  4. package/schematics/ng-add/index.js +539 -55
  5. package/schematics/ng-add/index.ts +555 -62
  6. package/schematics/ng-add/schema.json +8 -2
  7. package/schematics/test-schematic.js +1 -2
  8. package/src/app/lib/components/ui/.gitkeep +0 -0
  9. package/src/app/lib/components/ui/accordion/accordion-content.component.ts +16 -24
  10. package/src/app/lib/components/ui/accordion/accordion-context.ts +4 -9
  11. package/src/app/lib/components/ui/accordion/accordion-item.component.ts +33 -29
  12. package/src/app/lib/components/ui/accordion/accordion-trigger.component.ts +11 -14
  13. package/src/app/lib/components/ui/accordion/accordion.component.ts +60 -49
  14. package/src/app/lib/components/ui/accordion/index.ts +5 -6
  15. package/src/app/lib/components/ui/alert/alert-description.component.ts +3 -8
  16. package/src/app/lib/components/ui/alert/alert-title.component.ts +2 -7
  17. package/src/app/lib/components/ui/alert/alert-variants.ts +19 -5
  18. package/src/app/lib/components/ui/alert/alert.component.ts +2 -10
  19. package/src/app/lib/components/ui/alert/index.ts +0 -1
  20. package/src/app/lib/components/ui/alert-dialog/alert-dialog-action.component.ts +5 -12
  21. package/src/app/lib/components/ui/alert-dialog/alert-dialog-cancel.component.ts +5 -11
  22. package/src/app/lib/components/ui/alert-dialog/alert-dialog-content.component.ts +63 -66
  23. package/src/app/lib/components/ui/alert-dialog/alert-dialog-context.ts +10 -5
  24. package/src/app/lib/components/ui/alert-dialog/alert-dialog-description.component.ts +5 -10
  25. package/src/app/lib/components/ui/alert-dialog/alert-dialog-footer.component.ts +3 -7
  26. package/src/app/lib/components/ui/alert-dialog/alert-dialog-header.component.ts +3 -7
  27. package/src/app/lib/components/ui/alert-dialog/alert-dialog-title.component.ts +5 -12
  28. package/src/app/lib/components/ui/alert-dialog/alert-dialog-trigger.component.ts +8 -12
  29. package/src/app/lib/components/ui/alert-dialog/alert-dialog.component.ts +28 -34
  30. package/src/app/lib/components/ui/alert-dialog/index.ts +0 -1
  31. package/src/app/lib/components/ui/aspect-ratio/aspect-ratio.component.ts +3 -9
  32. package/src/app/lib/components/ui/avatar/avatar-context.ts +9 -0
  33. package/src/app/lib/components/ui/avatar/avatar-fallback.component.ts +7 -18
  34. package/src/app/lib/components/ui/avatar/avatar-image.component.ts +39 -17
  35. package/src/app/lib/components/ui/avatar/avatar.component.ts +17 -20
  36. package/src/app/lib/components/ui/avatar/index.ts +1 -1
  37. package/src/app/lib/components/ui/avatar/ui-avatar.component.ts +9 -30
  38. package/src/app/lib/components/ui/badge/badge-variants.ts +5 -5
  39. package/src/app/lib/components/ui/badge/badge.component.ts +4 -8
  40. package/src/app/lib/components/ui/badge/index.ts +0 -1
  41. package/src/app/lib/components/ui/breadcrumb/breadcrumb-ellipsis.component.ts +3 -7
  42. package/src/app/lib/components/ui/breadcrumb/breadcrumb-item.component.ts +5 -14
  43. package/src/app/lib/components/ui/breadcrumb/breadcrumb-link.component.ts +6 -18
  44. package/src/app/lib/components/ui/breadcrumb/breadcrumb-list.component.ts +6 -15
  45. package/src/app/lib/components/ui/breadcrumb/breadcrumb-page.component.ts +3 -7
  46. package/src/app/lib/components/ui/breadcrumb/breadcrumb-separator.component.ts +22 -31
  47. package/src/app/lib/components/ui/breadcrumb/breadcrumb.component.ts +3 -9
  48. package/src/app/lib/components/ui/breadcrumb/index.ts +0 -1
  49. package/src/app/lib/components/ui/button/button-variants.ts +6 -8
  50. package/src/app/lib/components/ui/button/button.component.ts +4 -8
  51. package/src/app/lib/components/ui/button/index.ts +0 -1
  52. package/src/app/lib/components/ui/button-group/button-group-variants.ts +12 -15
  53. package/src/app/lib/components/ui/button-group/button-group.component.ts +6 -14
  54. package/src/app/lib/components/ui/button-group/index.ts +1 -5
  55. package/src/app/lib/components/ui/calendar/calendar.component.ts +103 -115
  56. package/src/app/lib/components/ui/card/card-action.component.ts +2 -10
  57. package/src/app/lib/components/ui/card/card-content.component.ts +1 -6
  58. package/src/app/lib/components/ui/card/card-description.component.ts +2 -7
  59. package/src/app/lib/components/ui/card/card-footer.component.ts +2 -7
  60. package/src/app/lib/components/ui/card/card-header.component.ts +3 -8
  61. package/src/app/lib/components/ui/card/card-title.component.ts +2 -9
  62. package/src/app/lib/components/ui/card/card.component.ts +3 -8
  63. package/src/app/lib/components/ui/card/index.ts +0 -1
  64. package/src/app/lib/components/ui/carousel/carousel-content.component.ts +3 -9
  65. package/src/app/lib/components/ui/carousel/carousel-item.component.ts +5 -5
  66. package/src/app/lib/components/ui/carousel/carousel-next.component.ts +9 -8
  67. package/src/app/lib/components/ui/carousel/carousel-previous.component.ts +9 -8
  68. package/src/app/lib/components/ui/carousel/carousel.component.ts +14 -25
  69. package/src/app/lib/components/ui/carousel/index.ts +5 -2
  70. package/src/app/lib/components/ui/chart/chart-container.component.ts +20 -26
  71. package/src/app/lib/components/ui/chart/chart-legend-content.component.ts +6 -16
  72. package/src/app/lib/components/ui/chart/chart-legend.component.ts +2 -7
  73. package/src/app/lib/components/ui/chart/chart-tooltip-content.component.ts +2 -9
  74. package/src/app/lib/components/ui/chart/chart-tooltip.component.ts +2 -7
  75. package/src/app/lib/components/ui/chart/chart.component.ts +12 -32
  76. package/src/app/lib/components/ui/chart/index.ts +7 -8
  77. package/src/app/lib/components/ui/checkbox/checkbox.component.ts +55 -74
  78. package/src/app/lib/components/ui/collapsible/collapsible-content.component.ts +16 -25
  79. package/src/app/lib/components/ui/collapsible/collapsible-context.ts +0 -8
  80. package/src/app/lib/components/ui/collapsible/collapsible-trigger.component.ts +6 -16
  81. package/src/app/lib/components/ui/collapsible/collapsible.component.ts +29 -33
  82. package/src/app/lib/components/ui/collapsible/index.ts +0 -1
  83. package/src/app/lib/components/ui/combobox/combobox-content.component.ts +8 -15
  84. package/src/app/lib/components/ui/combobox/combobox-context.ts +5 -4
  85. package/src/app/lib/components/ui/combobox/combobox-empty.component.ts +5 -12
  86. package/src/app/lib/components/ui/combobox/combobox-group.component.ts +3 -7
  87. package/src/app/lib/components/ui/combobox/combobox-input.component.ts +25 -25
  88. package/src/app/lib/components/ui/combobox/combobox-item.component.ts +45 -44
  89. package/src/app/lib/components/ui/combobox/combobox-list.component.ts +14 -12
  90. package/src/app/lib/components/ui/combobox/combobox-trigger.component.ts +24 -14
  91. package/src/app/lib/components/ui/combobox/combobox-value.component.ts +27 -22
  92. package/src/app/lib/components/ui/combobox/combobox.component.ts +74 -54
  93. package/src/app/lib/components/ui/combobox/index.ts +1 -6
  94. package/src/app/lib/components/ui/command/command-context.ts +1 -5
  95. package/src/app/lib/components/ui/command/command-dialog.component.ts +12 -14
  96. package/src/app/lib/components/ui/command/command-empty.component.ts +2 -3
  97. package/src/app/lib/components/ui/command/command-group.component.ts +32 -25
  98. package/src/app/lib/components/ui/command/command-input.component.ts +29 -28
  99. package/src/app/lib/components/ui/command/command-item.component.ts +46 -58
  100. package/src/app/lib/components/ui/command/command-list.component.ts +5 -4
  101. package/src/app/lib/components/ui/command/command-separator.component.ts +2 -3
  102. package/src/app/lib/components/ui/command/command-shortcut.component.ts +2 -1
  103. package/src/app/lib/components/ui/command/command.component.ts +33 -22
  104. package/src/app/lib/components/ui/command/index.ts +0 -1
  105. package/src/app/lib/components/ui/context-menu/context-menu-checkbox-item.component.ts +20 -11
  106. package/src/app/lib/components/ui/context-menu/context-menu-content.component.ts +36 -43
  107. package/src/app/lib/components/ui/context-menu/context-menu-context.ts +1 -1
  108. package/src/app/lib/components/ui/context-menu/context-menu-item.component.ts +12 -13
  109. package/src/app/lib/components/ui/context-menu/context-menu-label.component.ts +2 -5
  110. package/src/app/lib/components/ui/context-menu/context-menu-radio-group.component.ts +9 -2
  111. package/src/app/lib/components/ui/context-menu/context-menu-radio-item.component.ts +14 -14
  112. package/src/app/lib/components/ui/context-menu/context-menu-separator.component.ts +2 -3
  113. package/src/app/lib/components/ui/context-menu/context-menu-shortcut.component.ts +2 -1
  114. package/src/app/lib/components/ui/context-menu/context-menu-sub-content.component.ts +5 -5
  115. package/src/app/lib/components/ui/context-menu/context-menu-sub-trigger.component.ts +8 -7
  116. package/src/app/lib/components/ui/context-menu/context-menu-sub.component.ts +9 -2
  117. package/src/app/lib/components/ui/context-menu/context-menu-trigger.component.ts +8 -7
  118. package/src/app/lib/components/ui/context-menu/context-menu.component.ts +1 -0
  119. package/src/app/lib/components/ui/context-menu/index.ts +15 -4
  120. package/src/app/lib/components/ui/data-table/data-table-content.component.ts +22 -28
  121. package/src/app/lib/components/ui/data-table/data-table-context.ts +1 -3
  122. package/src/app/lib/components/ui/data-table/data-table-pagination.component.ts +17 -27
  123. package/src/app/lib/components/ui/data-table/data-table-search.component.ts +6 -14
  124. package/src/app/lib/components/ui/data-table/data-table-toolbar.component.ts +3 -7
  125. package/src/app/lib/components/ui/data-table/data-table-view-options.component.ts +11 -20
  126. package/src/app/lib/components/ui/data-table/data-table.component.ts +41 -49
  127. package/src/app/lib/components/ui/data-table/index.ts +7 -8
  128. package/src/app/lib/components/ui/date-picker/date-picker.component.ts +24 -24
  129. package/src/app/lib/components/ui/dialog/dialog-close.component.ts +4 -8
  130. package/src/app/lib/components/ui/dialog/dialog-content.component.ts +72 -73
  131. package/src/app/lib/components/ui/dialog/dialog-context.ts +7 -5
  132. package/src/app/lib/components/ui/dialog/dialog-description.component.ts +5 -10
  133. package/src/app/lib/components/ui/dialog/dialog-footer.component.ts +3 -7
  134. package/src/app/lib/components/ui/dialog/dialog-header.component.ts +3 -7
  135. package/src/app/lib/components/ui/dialog/dialog-title.component.ts +5 -10
  136. package/src/app/lib/components/ui/dialog/dialog-trigger.component.ts +7 -11
  137. package/src/app/lib/components/ui/dialog/dialog.component.ts +29 -34
  138. package/src/app/lib/components/ui/dialog/index.ts +0 -1
  139. package/src/app/lib/components/ui/drawer/drawer-close.component.ts +4 -8
  140. package/src/app/lib/components/ui/drawer/drawer-content.component.ts +39 -35
  141. package/src/app/lib/components/ui/drawer/drawer-description.component.ts +5 -10
  142. package/src/app/lib/components/ui/drawer/drawer-footer.component.ts +3 -7
  143. package/src/app/lib/components/ui/drawer/drawer-header.component.ts +3 -7
  144. package/src/app/lib/components/ui/drawer/drawer-title.component.ts +5 -10
  145. package/src/app/lib/components/ui/drawer/drawer-trigger.component.ts +7 -11
  146. package/src/app/lib/components/ui/drawer/drawer.component.ts +25 -26
  147. package/src/app/lib/components/ui/drawer/index.ts +0 -1
  148. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.component.ts +20 -11
  149. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu-content.component.ts +96 -61
  150. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu-context.ts +1 -1
  151. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu-group.component.ts +1 -0
  152. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu-item.component.ts +10 -11
  153. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu-label.component.ts +2 -5
  154. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.component.ts +14 -5
  155. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.component.ts +14 -14
  156. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu-separator.component.ts +2 -3
  157. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.component.ts +2 -1
  158. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.component.ts +5 -5
  159. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.component.ts +8 -7
  160. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu-sub.component.ts +9 -2
  161. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu-trigger.component.ts +6 -5
  162. package/src/app/lib/components/ui/dropdown-menu/dropdown-menu.component.ts +1 -0
  163. package/src/app/lib/components/ui/dropdown-menu/index.ts +10 -3
  164. package/src/app/lib/components/ui/empty/empty-action.component.ts +2 -9
  165. package/src/app/lib/components/ui/empty/empty-description.component.ts +2 -10
  166. package/src/app/lib/components/ui/empty/empty-icon.component.ts +3 -8
  167. package/src/app/lib/components/ui/empty/empty-title.component.ts +2 -9
  168. package/src/app/lib/components/ui/empty/empty.component.ts +3 -8
  169. package/src/app/lib/components/ui/empty/index.ts +0 -1
  170. package/src/app/lib/components/ui/form/form-context.ts +1 -11
  171. package/src/app/lib/components/ui/form/form-control.component.ts +22 -22
  172. package/src/app/lib/components/ui/form/form-description.component.ts +4 -10
  173. package/src/app/lib/components/ui/form/form-field.component.ts +7 -10
  174. package/src/app/lib/components/ui/form/form-item.component.ts +2 -12
  175. package/src/app/lib/components/ui/form/form-label.component.ts +15 -15
  176. package/src/app/lib/components/ui/form/form-message.component.ts +7 -15
  177. package/src/app/lib/components/ui/form/form.component.ts +9 -20
  178. package/src/app/lib/components/ui/form/index.ts +4 -5
  179. package/src/app/lib/components/ui/hover-card/hover-card-content.component.ts +21 -33
  180. package/src/app/lib/components/ui/hover-card/hover-card-context.ts +0 -8
  181. package/src/app/lib/components/ui/hover-card/hover-card-trigger.component.ts +17 -26
  182. package/src/app/lib/components/ui/hover-card/hover-card.component.ts +18 -28
  183. package/src/app/lib/components/ui/hover-card/index.ts +9 -6
  184. package/src/app/lib/components/ui/input/input.component.ts +57 -75
  185. package/src/app/lib/components/ui/input-group/index.ts +0 -1
  186. package/src/app/lib/components/ui/input-group/input-group-addon.component.ts +4 -11
  187. package/src/app/lib/components/ui/input-group/input-group-input.component.ts +3 -8
  188. package/src/app/lib/components/ui/input-group/input-group.component.ts +4 -9
  189. package/src/app/lib/components/ui/input-otp/index.ts +4 -5
  190. package/src/app/lib/components/ui/input-otp/input-otp-context.ts +0 -8
  191. package/src/app/lib/components/ui/input-otp/input-otp-group.component.ts +2 -3
  192. package/src/app/lib/components/ui/input-otp/input-otp-separator.component.ts +4 -3
  193. package/src/app/lib/components/ui/input-otp/input-otp-slot.component.ts +8 -10
  194. package/src/app/lib/components/ui/input-otp/input-otp.component.ts +27 -45
  195. package/src/app/lib/components/ui/kbd/index.ts +0 -1
  196. package/src/app/lib/components/ui/kbd/kbd-variants.ts +1 -1
  197. package/src/app/lib/components/ui/kbd/kbd.component.ts +4 -8
  198. package/src/app/lib/components/ui/label/label.component.ts +15 -28
  199. package/src/app/lib/components/ui/menubar/index.ts +11 -8
  200. package/src/app/lib/components/ui/menubar/menubar-checkbox-item.component.ts +21 -12
  201. package/src/app/lib/components/ui/menubar/menubar-content.component.ts +46 -53
  202. package/src/app/lib/components/ui/menubar/menubar-context.ts +3 -9
  203. package/src/app/lib/components/ui/menubar/menubar-item.component.ts +13 -14
  204. package/src/app/lib/components/ui/menubar/menubar-label.component.ts +2 -5
  205. package/src/app/lib/components/ui/menubar/menubar-menu.component.ts +14 -2
  206. package/src/app/lib/components/ui/menubar/menubar-radio-group.component.ts +9 -2
  207. package/src/app/lib/components/ui/menubar/menubar-radio-item.component.ts +13 -13
  208. package/src/app/lib/components/ui/menubar/menubar-separator.component.ts +2 -3
  209. package/src/app/lib/components/ui/menubar/menubar-shortcut.component.ts +2 -1
  210. package/src/app/lib/components/ui/menubar/menubar-sub-content.component.ts +5 -5
  211. package/src/app/lib/components/ui/menubar/menubar-sub-trigger.component.ts +7 -6
  212. package/src/app/lib/components/ui/menubar/menubar-sub.component.ts +8 -1
  213. package/src/app/lib/components/ui/menubar/menubar-trigger.component.ts +26 -21
  214. package/src/app/lib/components/ui/menubar/menubar.component.ts +6 -13
  215. package/src/app/lib/components/ui/native-select/index.ts +1 -5
  216. package/src/app/lib/components/ui/native-select/native-select-variants.ts +1 -1
  217. package/src/app/lib/components/ui/native-select/native-select.component.ts +14 -15
  218. package/src/app/lib/components/ui/navigation-menu/index.ts +10 -8
  219. package/src/app/lib/components/ui/navigation-menu/navigation-menu-content.component.ts +18 -13
  220. package/src/app/lib/components/ui/navigation-menu/navigation-menu-context.ts +2 -10
  221. package/src/app/lib/components/ui/navigation-menu/navigation-menu-indicator.component.ts +3 -2
  222. package/src/app/lib/components/ui/navigation-menu/navigation-menu-item.component.ts +6 -1
  223. package/src/app/lib/components/ui/navigation-menu/navigation-menu-link.component.ts +3 -8
  224. package/src/app/lib/components/ui/navigation-menu/navigation-menu-list.component.ts +2 -4
  225. package/src/app/lib/components/ui/navigation-menu/navigation-menu-trigger-style.ts +1 -1
  226. package/src/app/lib/components/ui/navigation-menu/navigation-menu-trigger.component.ts +8 -7
  227. package/src/app/lib/components/ui/navigation-menu/navigation-menu-viewport.component.ts +3 -2
  228. package/src/app/lib/components/ui/navigation-menu/navigation-menu.component.ts +8 -15
  229. package/src/app/lib/components/ui/pagination/index.ts +0 -1
  230. package/src/app/lib/components/ui/pagination/pagination-content.component.ts +3 -7
  231. package/src/app/lib/components/ui/pagination/pagination-ellipsis.component.ts +3 -7
  232. package/src/app/lib/components/ui/pagination/pagination-item.component.ts +3 -9
  233. package/src/app/lib/components/ui/pagination/pagination-link.component.ts +4 -8
  234. package/src/app/lib/components/ui/pagination/pagination-next.component.ts +3 -11
  235. package/src/app/lib/components/ui/pagination/pagination-previous.component.ts +3 -11
  236. package/src/app/lib/components/ui/pagination/pagination.component.ts +3 -7
  237. package/src/app/lib/components/ui/popover/index.ts +9 -6
  238. package/src/app/lib/components/ui/popover/popover-anchor.component.ts +2 -13
  239. package/src/app/lib/components/ui/popover/popover-content.component.ts +119 -69
  240. package/src/app/lib/components/ui/popover/popover-context.ts +0 -8
  241. package/src/app/lib/components/ui/popover/popover-trigger.component.ts +22 -22
  242. package/src/app/lib/components/ui/popover/popover.component.ts +20 -33
  243. package/src/app/lib/components/ui/progress/index.ts +1 -6
  244. package/src/app/lib/components/ui/progress/progress.component.ts +15 -30
  245. package/src/app/lib/components/ui/radio-group/index.ts +1 -4
  246. package/src/app/lib/components/ui/radio-group/radio-group-context.ts +1 -7
  247. package/src/app/lib/components/ui/radio-group/radio-group-item.component.ts +36 -69
  248. package/src/app/lib/components/ui/radio-group/radio-group.component.ts +38 -67
  249. package/src/app/lib/components/ui/resizable/index.ts +0 -1
  250. package/src/app/lib/components/ui/resizable/resizable-handle.component.ts +25 -39
  251. package/src/app/lib/components/ui/resizable/resizable-panel-group.component.ts +15 -18
  252. package/src/app/lib/components/ui/resizable/resizable-panel.component.ts +12 -31
  253. package/src/app/lib/components/ui/scroll-area/index.ts +4 -5
  254. package/src/app/lib/components/ui/scroll-area/scroll-area.component.ts +5 -19
  255. package/src/app/lib/components/ui/scroll-area/scroll-bar.component.ts +8 -27
  256. package/src/app/lib/components/ui/segmented/index.ts +5 -9
  257. package/src/app/lib/components/ui/segmented/segmented-context.ts +1 -3
  258. package/src/app/lib/components/ui/segmented/segmented-item.component.ts +21 -29
  259. package/src/app/lib/components/ui/segmented/segmented-variants.ts +2 -2
  260. package/src/app/lib/components/ui/segmented/segmented.component.ts +24 -32
  261. package/src/app/lib/components/ui/select/index.ts +5 -6
  262. package/src/app/lib/components/ui/select/select-content.component.ts +34 -62
  263. package/src/app/lib/components/ui/select/select-context.ts +4 -14
  264. package/src/app/lib/components/ui/select/select-group.component.ts +6 -7
  265. package/src/app/lib/components/ui/select/select-item.component.ts +46 -55
  266. package/src/app/lib/components/ui/select/select-label.component.ts +2 -7
  267. package/src/app/lib/components/ui/select/select-separator.component.ts +3 -8
  268. package/src/app/lib/components/ui/select/select-trigger.component.ts +28 -25
  269. package/src/app/lib/components/ui/select/select-value.component.ts +7 -13
  270. package/src/app/lib/components/ui/select/select.component.ts +52 -64
  271. package/src/app/lib/components/ui/separator/index.ts +1 -6
  272. package/src/app/lib/components/ui/separator/separator.component.ts +4 -19
  273. package/src/app/lib/components/ui/sheet/index.ts +0 -1
  274. package/src/app/lib/components/ui/sheet/sheet-close.component.ts +4 -8
  275. package/src/app/lib/components/ui/sheet/sheet-content.component.ts +31 -36
  276. package/src/app/lib/components/ui/sheet/sheet-description.component.ts +5 -10
  277. package/src/app/lib/components/ui/sheet/sheet-footer.component.ts +3 -7
  278. package/src/app/lib/components/ui/sheet/sheet-header.component.ts +3 -7
  279. package/src/app/lib/components/ui/sheet/sheet-title.component.ts +5 -10
  280. package/src/app/lib/components/ui/sheet/sheet-trigger.component.ts +7 -11
  281. package/src/app/lib/components/ui/sheet/sheet-variants.ts +1 -1
  282. package/src/app/lib/components/ui/sheet/sheet.component.ts +36 -36
  283. package/src/app/lib/components/ui/sidebar/index.ts +14 -15
  284. package/src/app/lib/components/ui/sidebar/sidebar-content.component.ts +4 -8
  285. package/src/app/lib/components/ui/sidebar/sidebar-context.ts +1 -3
  286. package/src/app/lib/components/ui/sidebar/sidebar-footer.component.ts +3 -9
  287. package/src/app/lib/components/ui/sidebar/sidebar-group-action.component.ts +4 -8
  288. package/src/app/lib/components/ui/sidebar/sidebar-group-content.component.ts +3 -9
  289. package/src/app/lib/components/ui/sidebar/sidebar-group-label.component.ts +4 -8
  290. package/src/app/lib/components/ui/sidebar/sidebar-group.component.ts +3 -7
  291. package/src/app/lib/components/ui/sidebar/sidebar-header.component.ts +3 -9
  292. package/src/app/lib/components/ui/sidebar/sidebar-input.component.ts +4 -8
  293. package/src/app/lib/components/ui/sidebar/sidebar-inset.component.ts +4 -8
  294. package/src/app/lib/components/ui/sidebar/sidebar-menu-action.component.ts +4 -8
  295. package/src/app/lib/components/ui/sidebar/sidebar-menu-badge.component.ts +4 -8
  296. package/src/app/lib/components/ui/sidebar/sidebar-menu-button.component.ts +4 -9
  297. package/src/app/lib/components/ui/sidebar/sidebar-menu-item.component.ts +3 -9
  298. package/src/app/lib/components/ui/sidebar/sidebar-menu-skeleton.component.ts +6 -11
  299. package/src/app/lib/components/ui/sidebar/sidebar-menu-sub-button.component.ts +4 -8
  300. package/src/app/lib/components/ui/sidebar/sidebar-menu-sub-item.component.ts +2 -6
  301. package/src/app/lib/components/ui/sidebar/sidebar-menu-sub.component.ts +4 -8
  302. package/src/app/lib/components/ui/sidebar/sidebar-menu.component.ts +3 -7
  303. package/src/app/lib/components/ui/sidebar/sidebar-provider.component.ts +46 -52
  304. package/src/app/lib/components/ui/sidebar/sidebar-rail.component.ts +6 -11
  305. package/src/app/lib/components/ui/sidebar/sidebar-route-active.service.ts +17 -17
  306. package/src/app/lib/components/ui/sidebar/sidebar-separator.component.ts +3 -7
  307. package/src/app/lib/components/ui/sidebar/sidebar-trigger.component.ts +6 -11
  308. package/src/app/lib/components/ui/sidebar/sidebar.component.ts +20 -31
  309. package/src/app/lib/components/ui/skeleton/skeleton.component.ts +3 -8
  310. package/src/app/lib/components/ui/slider/index.ts +1 -6
  311. package/src/app/lib/components/ui/slider/slider.component.ts +73 -138
  312. package/src/app/lib/components/ui/spinner/index.ts +0 -1
  313. package/src/app/lib/components/ui/spinner/spinner-variants.ts +19 -22
  314. package/src/app/lib/components/ui/spinner/spinner.component.ts +4 -8
  315. package/src/app/lib/components/ui/switch/index.ts +1 -6
  316. package/src/app/lib/components/ui/switch/switch.component.ts +83 -108
  317. package/src/app/lib/components/ui/table/index.ts +0 -1
  318. package/src/app/lib/components/ui/table/table-body.component.ts +6 -10
  319. package/src/app/lib/components/ui/table/table-caption.component.ts +6 -8
  320. package/src/app/lib/components/ui/table/table-cell.component.ts +4 -8
  321. package/src/app/lib/components/ui/table/table-footer.component.ts +6 -8
  322. package/src/app/lib/components/ui/table/table-head.component.ts +4 -8
  323. package/src/app/lib/components/ui/table/table-header.component.ts +6 -10
  324. package/src/app/lib/components/ui/table/table-row.component.ts +6 -11
  325. package/src/app/lib/components/ui/table/table.component.ts +4 -8
  326. package/src/app/lib/components/ui/tabs/index.ts +14 -7
  327. package/src/app/lib/components/ui/tabs/tabs-content.component.ts +11 -36
  328. package/src/app/lib/components/ui/tabs/tabs-context.ts +0 -8
  329. package/src/app/lib/components/ui/tabs/tabs-list.component.ts +54 -60
  330. package/src/app/lib/components/ui/tabs/tabs-trigger.component.ts +20 -35
  331. package/src/app/lib/components/ui/tabs/tabs.component.ts +32 -49
  332. package/src/app/lib/components/ui/textarea/textarea.component.ts +3 -8
  333. package/src/app/lib/components/ui/toast/index.ts +6 -7
  334. package/src/app/lib/components/ui/toast/toast-action.component.ts +7 -18
  335. package/src/app/lib/components/ui/toast/toast-description.component.ts +2 -11
  336. package/src/app/lib/components/ui/toast/toast-title.component.ts +2 -9
  337. package/src/app/lib/components/ui/toast/toast-variants.ts +1 -1
  338. package/src/app/lib/components/ui/toast/toast.component.ts +18 -24
  339. package/src/app/lib/components/ui/toast/toast.service.ts +22 -37
  340. package/src/app/lib/components/ui/toast/toaster.component.ts +6 -16
  341. package/src/app/lib/components/ui/toggle/index.ts +1 -5
  342. package/src/app/lib/components/ui/toggle/toggle-variants.ts +2 -2
  343. package/src/app/lib/components/ui/toggle/toggle.component.ts +32 -51
  344. package/src/app/lib/components/ui/toggle-group/index.ts +1 -4
  345. package/src/app/lib/components/ui/toggle-group/toggle-group-context.ts +1 -7
  346. package/src/app/lib/components/ui/toggle-group/toggle-group-item.component.ts +38 -59
  347. package/src/app/lib/components/ui/toggle-group/toggle-group.component.ts +33 -51
  348. package/src/app/lib/components/ui/tooltip/index.ts +9 -6
  349. package/src/app/lib/components/ui/tooltip/tooltip-content.component.ts +6 -24
  350. package/src/app/lib/components/ui/tooltip/tooltip-context.ts +0 -8
  351. package/src/app/lib/components/ui/tooltip/tooltip-provider.component.ts +12 -24
  352. package/src/app/lib/components/ui/tooltip/tooltip-trigger.component.ts +4 -21
  353. package/src/app/lib/components/ui/tooltip/tooltip.component.ts +21 -33
  354. package/src/app/lib/components/ui/typography/index.ts +0 -1
  355. package/src/app/lib/components/ui/typography/typography-blockquote.component.ts +3 -7
  356. package/src/app/lib/components/ui/typography/typography-h1.component.ts +3 -10
  357. package/src/app/lib/components/ui/typography/typography-h2.component.ts +3 -10
  358. package/src/app/lib/components/ui/typography/typography-h3.component.ts +3 -7
  359. package/src/app/lib/components/ui/typography/typography-h4.component.ts +3 -7
  360. package/src/app/lib/components/ui/typography/typography-inline-code.component.ts +4 -8
  361. package/src/app/lib/components/ui/typography/typography-large.component.ts +3 -9
  362. package/src/app/lib/components/ui/typography/typography-lead.component.ts +3 -7
  363. package/src/app/lib/components/ui/typography/typography-list.component.ts +3 -7
  364. package/src/app/lib/components/ui/typography/typography-muted.component.ts +3 -7
  365. package/src/app/lib/components/ui/typography/typography-p.component.ts +3 -7
  366. package/src/app/lib/components/ui/typography/typography-small.component.ts +3 -7
  367. package/src/app/lib/utils/accessibility/click-outside.directive.ts +1 -8
  368. package/src/app/lib/utils/accessibility/focus-management.service.ts +4 -15
  369. package/src/app/lib/utils/accessibility/focus-trap.directive.ts +32 -106
  370. package/src/app/lib/utils/accessibility/index.ts +16 -5
  371. package/src/app/lib/utils/accessibility/keyboard-navigation.directive.ts +5 -8
  372. package/src/app/lib/utils/accessibility/live-region.directive.ts +10 -13
  373. package/src/app/lib/utils/accessibility/touch-target.directive.ts +1 -8
  374. package/src/app/lib/utils/animation/animation.utils.ts +4 -7
  375. package/src/app/lib/utils/animation/index.ts +15 -5
  376. package/src/app/lib/utils/animation/presence.component.ts +1 -1
  377. package/src/app/lib/utils/animation/presence.directive.ts +2 -2
  378. package/src/app/lib/utils/positioning/index.ts +40 -18
  379. package/src/app/lib/components/ui/index.ts +0 -551
  380. package/src/app/lib/index.ts +0 -7
@@ -1,22 +1,18 @@
1
1
  import { cn } from '@/lib/utils';
2
2
  import {
3
- ChangeDetectionStrategy,
4
- Component,
5
- computed,
6
- ElementRef,
7
- forwardRef,
8
- input,
9
- model,
10
- output,
11
- signal,
12
- viewChild,
3
+ ChangeDetectionStrategy,
4
+ Component,
5
+ computed,
6
+ ElementRef,
7
+ forwardRef,
8
+ input,
9
+ model,
10
+ output,
11
+ signal,
12
+ viewChild,
13
13
  } from '@angular/core';
14
14
  import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
15
15
 
16
- // ============================================================================
17
- // Types
18
- // ============================================================================
19
-
20
16
  export type SwitchState = 'checked' | 'unchecked';
21
17
 
22
18
  export type SwitchProps = {
@@ -38,10 +34,6 @@ export type SwitchProps = {
38
34
  class?: string;
39
35
  };
40
36
 
41
- // ============================================================================
42
- // Switch Component
43
- // ============================================================================
44
-
45
37
  /**
46
38
  * Switch component for toggling between on/off states.
47
39
  * Based on Radix UI Switch primitive with shadcn/ui styling.
@@ -111,14 +103,11 @@ export type SwitchProps = {
111
103
  [attr.data-disabled]="isDisabled() ? '' : null"
112
104
  [disabled]="isDisabled()"
113
105
  [class]="trackClass()"
106
+ [style.backgroundColor]="checked() ? checkedBgColor() : 'var(--color-input)'"
114
107
  (click)="toggle()"
115
108
  (keydown)="onKeyDown($event)"
116
109
  >
117
- <span
118
- data-slot="switch-thumb"
119
- [class]="thumbClass()"
120
- [attr.data-state]="state()"
121
- ></span>
110
+ <span data-slot="switch-thumb" [class]="thumbClass()" [attr.data-state]="state()"></span>
122
111
  </button>
123
112
  <!-- Hidden input for form submission -->
124
113
  @if (name()) {
@@ -148,63 +137,104 @@ export type SwitchProps = {
148
137
  changeDetection: ChangeDetectionStrategy.OnPush,
149
138
  })
150
139
  export class Switch implements ControlValueAccessor {
151
- private readonly buttonElement =
152
- viewChild<ElementRef<HTMLButtonElement>>('buttonElement');
140
+ constructor() {
141
+ // Initialize from defaultChecked if provided
142
+ if (this.defaultChecked()) {
143
+ this.checked.set(true);
144
+ }
145
+ }
153
146
 
154
- /** The id for the switch button - used for label association */
155
- readonly id = input<string>();
147
+ private readonly buttonElement = viewChild<ElementRef<HTMLButtonElement>>('buttonElement');
148
+
149
+ /** Emitted when checked state changes */
150
+ readonly checkedChange = output<boolean>();
156
151
 
157
152
  /** Whether the switch is checked/on */
158
153
  readonly checked = model<boolean>(false);
159
154
 
155
+ /** The id for the switch button - used for label association */
156
+ readonly id = input<string>();
160
157
  /** Whether the switch starts checked (uncontrolled mode) */
161
158
  readonly defaultChecked = input<boolean>(false);
162
-
163
159
  /** Whether the switch is disabled via input */
164
160
  readonly disabled = input<boolean>(false);
165
-
166
161
  /** Whether the switch is required */
167
162
  readonly required = input<boolean>(false);
168
-
169
163
  /** The name for the hidden input (form submission) */
170
164
  readonly name = input<string>();
171
-
172
165
  /** The value for the hidden input (form submission) */
173
166
  readonly value = input<string>('on');
174
-
175
167
  /** Additional CSS classes to apply */
176
168
  readonly class = input<string>('');
169
+ /** Additional CSS classes to apply to the inner track button */
170
+ readonly buttonClass = input<string>('');
171
+ /** Background color for checked state (hex, rgb, or CSS color name) */
172
+ readonly checkedBgColor = input<string>('rgb(59, 130, 246)');
177
173
 
178
- /** Emitted when checked state changes */
179
- readonly checkedChange = output<boolean>();
174
+ /** Current state for data attribute */
175
+ protected readonly state = computed(
176
+ (): SwitchState => (this.checked() ? 'checked' : 'unchecked'),
177
+ );
178
+ /** Input value for form submission */
179
+ protected readonly inputValue = computed(() => (this.checked() ? this.value() : undefined));
180
+ /** Computed class combining base styles and custom classes */
181
+ protected readonly computedClass = computed(() => cn('relative inline-flex', this.class()));
182
+ /** Computed track class */
183
+ protected readonly trackClass = computed(() =>
184
+ cn(
185
+ // Custom overrides first (higher specificity)
186
+ this.buttonClass(),
187
+ // Base styles
188
+ 'inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent',
189
+ 'shadow-xs transition-colors duration-200',
190
+ // Focus styles
191
+ 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',
192
+ // State styles
193
+ 'data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',
194
+ 'dark:data-[state=unchecked]:bg-input/80',
195
+ // Disabled styles
196
+ 'disabled:cursor-not-allowed disabled:opacity-50',
197
+ ),
198
+ );
199
+ /** Computed thumb class */
200
+ protected readonly thumbClass = computed(() =>
201
+ cn(
202
+ // Base styles
203
+ 'pointer-events-none block size-4 rounded-full bg-background shadow-lg ring-0',
204
+ // Transition
205
+ 'transition-transform duration-200',
206
+ // Position based on state
207
+ 'data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0',
208
+ ),
209
+ );
210
+ /** Whether the switch is disabled (either via input or forms) */
211
+ readonly isDisabled = computed(() => this.disabled() || this.isFormsDisabled());
180
212
 
181
213
  /** Whether the switch is disabled via forms */
182
- private readonly formsDisabled = signal<boolean>(false);
183
-
184
- /** Whether the switch is disabled (either via input or forms) */
185
- readonly isDisabled = computed(() => this.disabled() || this.formsDisabled());
214
+ private readonly isFormsDisabled = signal<boolean>(false);
186
215
 
187
216
  /** ControlValueAccessor callbacks */
188
217
  private onChange: (value: boolean) => void = () => {};
189
218
  private onTouched: () => void = () => {};
190
219
 
191
- /** Current state for data attribute */
192
- protected readonly state = computed((): SwitchState =>
193
- this.checked() ? 'checked' : 'unchecked'
194
- );
195
-
196
- /** Input value for form submission */
197
- protected readonly inputValue = computed(() =>
198
- this.checked() ? this.value() : undefined
199
- );
200
-
201
- constructor() {
202
- // Initialize from defaultChecked if provided
203
- if (this.defaultChecked()) {
204
- this.checked.set(true);
205
- }
220
+ // ControlValueAccessor implementation
221
+ writeValue(value: boolean): void {
222
+ this.checked.set(value ?? false);
223
+ }
224
+ registerOnChange(fn: (value: boolean) => void): void {
225
+ this.onChange = fn;
226
+ }
227
+ registerOnTouched(fn: () => void): void {
228
+ this.onTouched = fn;
229
+ }
230
+ setDisabledState(isDisabled: boolean): void {
231
+ this.isFormsDisabled.set(isDisabled);
206
232
  }
207
233
 
234
+ /** Focus the switch button */
235
+ focus(): void {
236
+ this.buttonElement()?.nativeElement.focus();
237
+ }
208
238
  /** Toggle the switch state */
209
239
  toggle(): void {
210
240
  if (!this.isDisabled()) {
@@ -224,59 +254,4 @@ export class Switch implements ControlValueAccessor {
224
254
  return;
225
255
  }
226
256
  }
227
-
228
- /** Focus the switch button */
229
- focus(): void {
230
- this.buttonElement()?.nativeElement.focus();
231
- }
232
-
233
- // ControlValueAccessor implementation
234
- writeValue(value: boolean): void {
235
- this.checked.set(value ?? false);
236
- }
237
-
238
- registerOnChange(fn: (value: boolean) => void): void {
239
- this.onChange = fn;
240
- }
241
-
242
- registerOnTouched(fn: () => void): void {
243
- this.onTouched = fn;
244
- }
245
-
246
- setDisabledState(isDisabled: boolean): void {
247
- this.formsDisabled.set(isDisabled);
248
- }
249
-
250
- /** Computed class combining base styles and custom classes */
251
- protected readonly computedClass = computed(() =>
252
- cn('relative inline-flex', this.class())
253
- );
254
-
255
- /** Computed track class */
256
- protected readonly trackClass = computed(() =>
257
- cn(
258
- // Base styles
259
- 'inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent',
260
- 'shadow-xs transition-colors duration-200',
261
- // Focus styles
262
- 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',
263
- // State styles
264
- 'data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',
265
- 'dark:data-[state=unchecked]:bg-input/80',
266
- // Disabled styles
267
- 'disabled:cursor-not-allowed disabled:opacity-50'
268
- )
269
- );
270
-
271
- /** Computed thumb class */
272
- protected readonly thumbClass = computed(() =>
273
- cn(
274
- // Base styles
275
- 'pointer-events-none block size-4 rounded-full bg-background shadow-lg ring-0',
276
- // Transition
277
- 'transition-transform duration-200',
278
- // Position based on state
279
- 'data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0'
280
- )
281
- );
282
257
  }
@@ -6,4 +6,3 @@ export { TableHead } from './table-head.component';
6
6
  export { TableHeader } from './table-header.component';
7
7
  export { TableRow } from './table-row.component';
8
8
  export { Table } from './table.component';
9
-
@@ -1,10 +1,5 @@
1
1
  import { cn } from '@/lib/utils';
2
- import {
3
- ChangeDetectionStrategy,
4
- Component,
5
- computed,
6
- input,
7
- } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
8
3
 
9
4
  /**
10
5
  * TableBody component - tbody wrapper.
@@ -12,8 +7,11 @@ import {
12
7
  */
13
8
  @Component({
14
9
  selector: 'TableBody',
15
- template: `<tbody [class]="computedClass()"><ng-content /></tbody>`,
10
+ template: `<tbody [class]="computedClass()">
11
+ <ng-content />
12
+ </tbody>`,
16
13
  host: {
14
+ 'attr.data-slot': '"table-body"',
17
15
  class: 'contents',
18
16
  },
19
17
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -22,7 +20,5 @@ export class TableBody {
22
20
  /** Additional CSS classes */
23
21
  readonly class = input<string>('');
24
22
 
25
- protected readonly computedClass = computed(() =>
26
- cn('[&_tr:last-child]:border-0', this.class())
27
- );
23
+ protected readonly computedClass = computed(() => cn('[&_tr:last-child]:border-0', this.class()));
28
24
  }
@@ -1,10 +1,5 @@
1
1
  import { cn } from '@/lib/utils';
2
- import {
3
- ChangeDetectionStrategy,
4
- Component,
5
- computed,
6
- input,
7
- } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
8
3
 
9
4
  /**
10
5
  * TableCaption component - caption wrapper.
@@ -12,8 +7,11 @@ import {
12
7
  */
13
8
  @Component({
14
9
  selector: 'TableCaption',
15
- template: `<caption [class]="computedClass()"><ng-content /></caption>`,
10
+ template: `<caption [class]="computedClass()">
11
+ <ng-content />
12
+ </caption>`,
16
13
  host: {
14
+ 'attr.data-slot': '"table-caption"',
17
15
  class: 'contents',
18
16
  },
19
17
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -23,6 +21,6 @@ export class TableCaption {
23
21
  readonly class = input<string>('');
24
22
 
25
23
  protected readonly computedClass = computed(() =>
26
- cn('mt-4 text-sm text-muted-foreground', this.class())
24
+ cn('mt-4 text-sm text-muted-foreground', this.class()),
27
25
  );
28
26
  }
@@ -1,10 +1,5 @@
1
1
  import { cn } from '@/lib/utils';
2
- import {
3
- ChangeDetectionStrategy,
4
- Component,
5
- computed,
6
- input,
7
- } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
8
3
 
9
4
  /**
10
5
  * TableCell component - td wrapper.
@@ -14,6 +9,7 @@ import {
14
9
  selector: 'TableCell',
15
10
  template: `<td [class]="computedClass()"><ng-content /></td>`,
16
11
  host: {
12
+ 'attr.data-slot': '"table-cell"',
17
13
  class: 'contents',
18
14
  },
19
15
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -25,7 +21,7 @@ export class TableCell {
25
21
  protected readonly computedClass = computed(() =>
26
22
  cn(
27
23
  'p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',
28
- this.class()
29
- )
24
+ this.class(),
25
+ ),
30
26
  );
31
27
  }
@@ -1,10 +1,5 @@
1
1
  import { cn } from '@/lib/utils';
2
- import {
3
- ChangeDetectionStrategy,
4
- Component,
5
- computed,
6
- input,
7
- } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
8
3
 
9
4
  /**
10
5
  * TableFooter component - tfoot wrapper.
@@ -12,8 +7,11 @@ import {
12
7
  */
13
8
  @Component({
14
9
  selector: 'TableFooter',
15
- template: `<tfoot [class]="computedClass()"><ng-content /></tfoot>`,
10
+ template: `<tfoot [class]="computedClass()">
11
+ <ng-content />
12
+ </tfoot>`,
16
13
  host: {
14
+ 'attr.data-slot': '"table-footer"',
17
15
  class: 'contents',
18
16
  },
19
17
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -23,6 +21,6 @@ export class TableFooter {
23
21
  readonly class = input<string>('');
24
22
 
25
23
  protected readonly computedClass = computed(() =>
26
- cn('border-t bg-muted/50 font-medium [&>tr]:last:border-b-0', this.class())
24
+ cn('border-t bg-muted/50 font-medium [&>tr]:last:border-b-0', this.class()),
27
25
  );
28
26
  }
@@ -1,10 +1,5 @@
1
1
  import { cn } from '@/lib/utils';
2
- import {
3
- ChangeDetectionStrategy,
4
- Component,
5
- computed,
6
- input,
7
- } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
8
3
 
9
4
  /**
10
5
  * TableHead component - th wrapper.
@@ -16,6 +11,7 @@ import {
16
11
  selector: 'TableHead',
17
12
  template: `<th [scope]="scope()" [class]="computedClass()"><ng-content /></th>`,
18
13
  host: {
14
+ 'attr.data-slot': '"table-head"',
19
15
  class: 'contents',
20
16
  },
21
17
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -30,7 +26,7 @@ export class TableHead {
30
26
  protected readonly computedClass = computed(() =>
31
27
  cn(
32
28
  'h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',
33
- this.class()
34
- )
29
+ this.class(),
30
+ ),
35
31
  );
36
32
  }
@@ -1,10 +1,5 @@
1
1
  import { cn } from '@/lib/utils';
2
- import {
3
- ChangeDetectionStrategy,
4
- Component,
5
- computed,
6
- input,
7
- } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
8
3
 
9
4
  /**
10
5
  * TableHeader component - thead wrapper.
@@ -12,8 +7,11 @@ import {
12
7
  */
13
8
  @Component({
14
9
  selector: 'TableHeader',
15
- template: `<thead [class]="computedClass()"><ng-content /></thead>`,
10
+ template: `<thead [class]="computedClass()">
11
+ <ng-content />
12
+ </thead>`,
16
13
  host: {
14
+ 'attr.data-slot': '"table-header"',
17
15
  class: 'contents',
18
16
  },
19
17
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -22,7 +20,5 @@ export class TableHeader {
22
20
  /** Additional CSS classes */
23
21
  readonly class = input<string>('');
24
22
 
25
- protected readonly computedClass = computed(() =>
26
- cn('[&_tr]:border-b', this.class())
27
- );
23
+ protected readonly computedClass = computed(() => cn('[&_tr]:border-b', this.class()));
28
24
  }
@@ -1,10 +1,5 @@
1
1
  import { cn } from '@/lib/utils';
2
- import {
3
- ChangeDetectionStrategy,
4
- Component,
5
- computed,
6
- input,
7
- } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
8
3
 
9
4
  /**
10
5
  * TableRow component - tr wrapper.
@@ -12,8 +7,11 @@ import {
12
7
  */
13
8
  @Component({
14
9
  selector: 'TableRow',
15
- template: `<tr [class]="computedClass()" [attr.data-state]="selected() ? 'selected' : null"><ng-content /></tr>`,
10
+ template: `<tr [class]="computedClass()" [attr.data-state]="selected() ? 'selected' : null">
11
+ <ng-content />
12
+ </tr>`,
16
13
  host: {
14
+ 'attr.data-slot': '"table-row"',
17
15
  class: 'contents',
18
16
  },
19
17
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -26,9 +24,6 @@ export class TableRow {
26
24
  readonly selected = input<boolean>(false);
27
25
 
28
26
  protected readonly computedClass = computed(() =>
29
- cn(
30
- 'border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted',
31
- this.class()
32
- )
27
+ cn('border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted', this.class()),
33
28
  );
34
29
  }
@@ -1,10 +1,5 @@
1
1
  import { cn } from '@/lib/utils';
2
- import {
3
- ChangeDetectionStrategy,
4
- Component,
5
- computed,
6
- input,
7
- } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
8
3
 
9
4
  /**
10
5
  * Table component - base table wrapper.
@@ -34,6 +29,7 @@ import {
34
29
  </table>
35
30
  `,
36
31
  host: {
32
+ 'attr.data-slot': '"table"',
37
33
  '[class]': 'computedClass()',
38
34
  },
39
35
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -43,10 +39,10 @@ export class Table {
43
39
  readonly class = input<string>('');
44
40
 
45
41
  protected readonly computedClass = computed(() =>
46
- cn('relative w-full overflow-auto', this.class())
42
+ cn('relative w-full overflow-auto', this.class()),
47
43
  );
48
44
 
49
45
  protected readonly tableClass = computed(() =>
50
- cn('w-full caption-bottom text-sm border-collapse')
46
+ cn('w-full caption-bottom text-sm border-collapse'),
51
47
  );
52
48
  }
@@ -1,14 +1,21 @@
1
1
  // Context and types
2
2
  export {
3
- TABS_CONTEXT,
4
- type TabsActivationMode,
5
- type TabsContext,
6
- type TabsOrientation
3
+ TABS_CONTEXT,
4
+ type TabsActivationMode,
5
+ type TabsContext,
6
+ type TabsOrientation,
7
7
  } from './tabs-context';
8
8
 
9
9
  // Components and their types
10
- export { TabsContent, type TabsContentProps, type TabsContentState } from './tabs-content.component';
10
+ export {
11
+ TabsContent,
12
+ type TabsContentProps,
13
+ type TabsContentState,
14
+ } from './tabs-content.component';
11
15
  export { TabsList, type TabsListProps } from './tabs-list.component';
12
- export { TabsTrigger, type TabsTriggerProps, type TabsTriggerState } from './tabs-trigger.component';
16
+ export {
17
+ TabsTrigger,
18
+ type TabsTriggerProps,
19
+ type TabsTriggerState,
20
+ } from './tabs-trigger.component';
13
21
  export { Tabs, type TabsProps } from './tabs.component';
14
-
@@ -1,17 +1,7 @@
1
1
  import { cn } from '@/lib/utils';
2
- import {
3
- ChangeDetectionStrategy,
4
- Component,
5
- computed,
6
- inject,
7
- input,
8
- } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';
9
3
  import { TABS_CONTEXT } from './tabs-context';
10
4
 
11
- // ============================================================================
12
- // Types
13
- // ============================================================================
14
-
15
5
  export type TabsContentState = 'active' | 'inactive';
16
6
 
17
7
  /**
@@ -28,10 +18,6 @@ export interface TabsContentProps {
28
18
  class?: string;
29
19
  }
30
20
 
31
- // ============================================================================
32
- // Component
33
- // ============================================================================
34
-
35
21
  /**
36
22
  * @component TabsContent
37
23
  *
@@ -73,60 +59,49 @@ export interface TabsContentProps {
73
59
  */
74
60
  @Component({
75
61
  selector: 'TabsContent',
76
- template: `
77
- @if (shouldRender()) {
78
- <ng-content />
79
- }
80
- `,
62
+ template: `<ng-content />`,
81
63
  host: {
64
+ 'attr.data-slot': '"tabs-content"',
82
65
  '[class]': 'computedClass()',
83
66
  '[attr.id]': 'panelId()',
84
67
  '[attr.data-state]': 'state()',
85
68
  '[attr.data-orientation]': 'tabs.orientation()',
86
69
  '[attr.aria-labelledby]': 'tabId()',
87
- '[attr.hidden]': '!isActive() ? true : null',
70
+ '[attr.hidden]': '!isActive() && !forceMount() ? true : null',
88
71
  '[attr.tabindex]': 'isActive() ? 0 : -1',
89
- 'role': 'tabpanel',
72
+ role: 'tabpanel',
90
73
  },
91
74
  changeDetection: ChangeDetectionStrategy.OnPush,
92
75
  })
93
76
  export class TabsContent {
94
- protected readonly tabs = inject(TABS_CONTEXT);
95
-
96
77
  /** A unique value that associates the content with a trigger */
97
78
  readonly value = input.required<string>();
98
79
 
99
80
  /** Used to force mounting when more control is needed */
100
81
  readonly forceMount = input<boolean>(false);
101
-
102
82
  /** Additional CSS classes */
103
83
  readonly class = input<string>('');
104
84
 
85
+ protected readonly tabs = inject(TABS_CONTEXT);
86
+
105
87
  /** Check if this content should be visible */
106
88
  protected readonly isActive = computed(() => this.tabs.value() === this.value());
107
-
108
89
  /** Current state: active or inactive */
109
90
  protected readonly state = computed<TabsContentState>(() =>
110
- this.isActive() ? 'active' : 'inactive'
91
+ this.isActive() ? 'active' : 'inactive',
111
92
  );
112
-
113
93
  /** Whether content should be rendered (force mount or active) */
114
- protected readonly shouldRender = computed(() =>
115
- this.forceMount() || this.isActive()
116
- );
117
-
94
+ protected readonly shouldRender = computed(() => this.forceMount() || this.isActive());
118
95
  /** Generate panel ID */
119
96
  protected readonly panelId = computed(() => this.tabs.getPanelId(this.value()));
120
-
121
97
  /** Generate tab ID for aria-labelledby */
122
98
  protected readonly tabId = computed(() => this.tabs.getTabId(this.value()));
123
-
124
99
  protected readonly computedClass = computed(() =>
125
100
  cn(
126
101
  'flex-1 outline-none',
127
102
  'ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
128
103
  'mt-2',
129
- this.class()
130
- )
104
+ this.class(),
105
+ ),
131
106
  );
132
107
  }
@@ -1,9 +1,5 @@
1
1
  import { InjectionToken, WritableSignal } from '@angular/core';
2
2
 
3
- // ============================================================================
4
- // Types
5
- // ============================================================================
6
-
7
3
  export type TabsOrientation = 'horizontal' | 'vertical';
8
4
  export type TabsActivationMode = 'automatic' | 'manual';
9
5
 
@@ -26,8 +22,4 @@ export interface TabsContext {
26
22
  tabValues: WritableSignal<string[]>;
27
23
  }
28
24
 
29
- // ============================================================================
30
- // Injection Tokens
31
- // ============================================================================
32
-
33
25
  export const TABS_CONTEXT = new InjectionToken<TabsContext>('TabsContext');