@tailng-ui/components 0.1.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 (266) hide show
  1. package/README.md +26 -0
  2. package/package.json +14 -0
  3. package/src/index.d.ts +7 -0
  4. package/src/index.d.ts.map +1 -0
  5. package/src/index.js +7 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/feedback/empty/tng-empty.component.d.ts +14 -0
  8. package/src/lib/feedback/empty/tng-empty.component.d.ts.map +1 -0
  9. package/src/lib/feedback/empty/tng-empty.component.js +60 -0
  10. package/src/lib/feedback/empty/tng-empty.component.js.map +1 -0
  11. package/src/lib/feedback/index.d.ts +11 -0
  12. package/src/lib/feedback/index.d.ts.map +1 -0
  13. package/src/lib/feedback/index.js +11 -0
  14. package/src/lib/feedback/index.js.map +1 -0
  15. package/src/lib/feedback/progress-bar/tng-progress-bar.component.d.ts +10 -0
  16. package/src/lib/feedback/progress-bar/tng-progress-bar.component.d.ts.map +1 -0
  17. package/src/lib/feedback/progress-bar/tng-progress-bar.component.js +37 -0
  18. package/src/lib/feedback/progress-bar/tng-progress-bar.component.js.map +1 -0
  19. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.d.ts +14 -0
  20. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.d.ts.map +1 -0
  21. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.js +55 -0
  22. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.js.map +1 -0
  23. package/src/lib/feedback/skeleton/tng-skeleton.component.d.ts +10 -0
  24. package/src/lib/feedback/skeleton/tng-skeleton.component.d.ts.map +1 -0
  25. package/src/lib/feedback/skeleton/tng-skeleton.component.js +33 -0
  26. package/src/lib/feedback/skeleton/tng-skeleton.component.js.map +1 -0
  27. package/src/lib/feedback/toast/tng-toast.component.d.ts +40 -0
  28. package/src/lib/feedback/toast/tng-toast.component.d.ts.map +1 -0
  29. package/src/lib/feedback/toast/tng-toast.component.js +111 -0
  30. package/src/lib/feedback/toast/tng-toast.component.js.map +1 -0
  31. package/src/lib/form/autocomplete/tng-autocomplete.component.d.ts +26 -0
  32. package/src/lib/form/autocomplete/tng-autocomplete.component.d.ts.map +1 -0
  33. package/src/lib/form/autocomplete/tng-autocomplete.component.js +104 -0
  34. package/src/lib/form/autocomplete/tng-autocomplete.component.js.map +1 -0
  35. package/src/lib/form/button-toggle/tng-button-toggle-group.component.d.ts +44 -0
  36. package/src/lib/form/button-toggle/tng-button-toggle-group.component.d.ts.map +1 -0
  37. package/src/lib/form/button-toggle/tng-button-toggle-group.component.js +123 -0
  38. package/src/lib/form/button-toggle/tng-button-toggle-group.component.js.map +1 -0
  39. package/src/lib/form/button-toggle/tng-button-toggle.component.d.ts +14 -0
  40. package/src/lib/form/button-toggle/tng-button-toggle.component.d.ts.map +1 -0
  41. package/src/lib/form/button-toggle/tng-button-toggle.component.js +65 -0
  42. package/src/lib/form/button-toggle/tng-button-toggle.component.js.map +1 -0
  43. package/src/lib/form/checkbox/tng-checkbox.component.d.ts +38 -0
  44. package/src/lib/form/checkbox/tng-checkbox.component.d.ts.map +1 -0
  45. package/src/lib/form/checkbox/tng-checkbox.component.js +138 -0
  46. package/src/lib/form/checkbox/tng-checkbox.component.js.map +1 -0
  47. package/src/lib/form/chips/tng-chips.component.d.ts +4 -0
  48. package/src/lib/form/chips/tng-chips.component.d.ts.map +1 -0
  49. package/src/lib/form/chips/tng-chips.component.js +16 -0
  50. package/src/lib/form/chips/tng-chips.component.js.map +1 -0
  51. package/src/lib/form/combobox/tng-combobox.component.d.ts +4 -0
  52. package/src/lib/form/combobox/tng-combobox.component.d.ts.map +1 -0
  53. package/src/lib/form/combobox/tng-combobox.component.js +16 -0
  54. package/src/lib/form/combobox/tng-combobox.component.js.map +1 -0
  55. package/src/lib/form/index.d.ts +37 -0
  56. package/src/lib/form/index.d.ts.map +1 -0
  57. package/src/lib/form/index.js +37 -0
  58. package/src/lib/form/index.js.map +1 -0
  59. package/src/lib/form/input/tng-input.component.d.ts +16 -0
  60. package/src/lib/form/input/tng-input.component.d.ts.map +1 -0
  61. package/src/lib/form/input/tng-input.component.js +52 -0
  62. package/src/lib/form/input/tng-input.component.js.map +1 -0
  63. package/src/lib/form/input-otp/tng-input-otp.component.d.ts +13 -0
  64. package/src/lib/form/input-otp/tng-input-otp.component.d.ts.map +1 -0
  65. package/src/lib/form/input-otp/tng-input-otp.component.js +138 -0
  66. package/src/lib/form/input-otp/tng-input-otp.component.js.map +1 -0
  67. package/src/lib/form/label/tng-label.component.d.ts +8 -0
  68. package/src/lib/form/label/tng-label.component.d.ts.map +1 -0
  69. package/src/lib/form/label/tng-label.component.js +29 -0
  70. package/src/lib/form/label/tng-label.component.js.map +1 -0
  71. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.component.d.ts +55 -0
  72. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.component.d.ts.map +1 -0
  73. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.component.js +126 -0
  74. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.component.js.map +1 -0
  75. package/src/lib/form/multiselect/tng-multiselect.component.d.ts +49 -0
  76. package/src/lib/form/multiselect/tng-multiselect.component.d.ts.map +1 -0
  77. package/src/lib/form/multiselect/tng-multiselect.component.js +112 -0
  78. package/src/lib/form/multiselect/tng-multiselect.component.js.map +1 -0
  79. package/src/lib/form/radio/tng-radio.component.d.ts +12 -0
  80. package/src/lib/form/radio/tng-radio.component.d.ts.map +1 -0
  81. package/src/lib/form/radio/tng-radio.component.js +45 -0
  82. package/src/lib/form/radio/tng-radio.component.js.map +1 -0
  83. package/src/lib/form/select/tng-select.component.d.ts +40 -0
  84. package/src/lib/form/select/tng-select.component.d.ts.map +1 -0
  85. package/src/lib/form/select/tng-select.component.js +98 -0
  86. package/src/lib/form/select/tng-select.component.js.map +1 -0
  87. package/src/lib/form/select/tng-select.slots.d.ts +25 -0
  88. package/src/lib/form/select/tng-select.slots.d.ts.map +1 -0
  89. package/src/lib/form/select/tng-select.slots.js +23 -0
  90. package/src/lib/form/select/tng-select.slots.js.map +1 -0
  91. package/src/lib/form/slider/tng-slider.component.d.ts +11 -0
  92. package/src/lib/form/slider/tng-slider.component.d.ts.map +1 -0
  93. package/src/lib/form/slider/tng-slider.component.js +48 -0
  94. package/src/lib/form/slider/tng-slider.component.js.map +1 -0
  95. package/src/lib/form/switch/tng-switch.component.d.ts +18 -0
  96. package/src/lib/form/switch/tng-switch.component.d.ts.map +1 -0
  97. package/src/lib/form/switch/tng-switch.component.js +57 -0
  98. package/src/lib/form/switch/tng-switch.component.js.map +1 -0
  99. package/src/lib/form/textarea/tng-textarea.component.d.ts +17 -0
  100. package/src/lib/form/textarea/tng-textarea.component.d.ts.map +1 -0
  101. package/src/lib/form/textarea/tng-textarea.component.js +54 -0
  102. package/src/lib/form/textarea/tng-textarea.component.js.map +1 -0
  103. package/src/lib/form/toggle/tng-toggle.component.d.ts +39 -0
  104. package/src/lib/form/toggle/tng-toggle.component.d.ts.map +1 -0
  105. package/src/lib/form/toggle/tng-toggle.component.js +152 -0
  106. package/src/lib/form/toggle/tng-toggle.component.js.map +1 -0
  107. package/src/lib/form/toggle-group/tng-toggle-group.component.d.ts +3 -0
  108. package/src/lib/form/toggle-group/tng-toggle-group.component.d.ts.map +1 -0
  109. package/src/lib/form/toggle-group/tng-toggle-group.component.js +34 -0
  110. package/src/lib/form/toggle-group/tng-toggle-group.component.js.map +1 -0
  111. package/src/lib/layout/accordion/tng-accordion.component.d.ts +11 -0
  112. package/src/lib/layout/accordion/tng-accordion.component.d.ts.map +1 -0
  113. package/src/lib/layout/accordion/tng-accordion.component.js +158 -0
  114. package/src/lib/layout/accordion/tng-accordion.component.js.map +1 -0
  115. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.d.ts +4 -0
  116. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.d.ts.map +1 -0
  117. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.js +16 -0
  118. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.js.map +1 -0
  119. package/src/lib/layout/card/tng-card.component.d.ts +42 -0
  120. package/src/lib/layout/card/tng-card.component.d.ts.map +1 -0
  121. package/src/lib/layout/card/tng-card.component.js +186 -0
  122. package/src/lib/layout/card/tng-card.component.js.map +1 -0
  123. package/src/lib/layout/collapsible/tng-collapsible.component.d.ts +11 -0
  124. package/src/lib/layout/collapsible/tng-collapsible.component.d.ts.map +1 -0
  125. package/src/lib/layout/collapsible/tng-collapsible.component.js +40 -0
  126. package/src/lib/layout/collapsible/tng-collapsible.component.js.map +1 -0
  127. package/src/lib/layout/drawer/tng-drawer.component.d.ts +12 -0
  128. package/src/lib/layout/drawer/tng-drawer.component.d.ts.map +1 -0
  129. package/src/lib/layout/drawer/tng-drawer.component.js +77 -0
  130. package/src/lib/layout/drawer/tng-drawer.component.js.map +1 -0
  131. package/src/lib/layout/grid/tng-grid.component.d.ts +4 -0
  132. package/src/lib/layout/grid/tng-grid.component.d.ts.map +1 -0
  133. package/src/lib/layout/grid/tng-grid.component.js +16 -0
  134. package/src/lib/layout/grid/tng-grid.component.js.map +1 -0
  135. package/src/lib/layout/index.d.ts +16 -0
  136. package/src/lib/layout/index.d.ts.map +1 -0
  137. package/src/lib/layout/index.js +16 -0
  138. package/src/lib/layout/index.js.map +1 -0
  139. package/src/lib/layout/separator/tng-separator.component.d.ts +6 -0
  140. package/src/lib/layout/separator/tng-separator.component.d.ts.map +1 -0
  141. package/src/lib/layout/separator/tng-separator.component.js +19 -0
  142. package/src/lib/layout/separator/tng-separator.component.js.map +1 -0
  143. package/src/lib/layout/stepper/tng-stepper.component.d.ts +4 -0
  144. package/src/lib/layout/stepper/tng-stepper.component.d.ts.map +1 -0
  145. package/src/lib/layout/stepper/tng-stepper.component.js +16 -0
  146. package/src/lib/layout/stepper/tng-stepper.component.js.map +1 -0
  147. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.d.ts +28 -0
  148. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.d.ts.map +1 -0
  149. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.js +86 -0
  150. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.js.map +1 -0
  151. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.d.ts +10 -0
  152. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.d.ts.map +1 -0
  153. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.js +29 -0
  154. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.js.map +1 -0
  155. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.d.ts +3 -0
  156. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.d.ts.map +1 -0
  157. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.js +15 -0
  158. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.js.map +1 -0
  159. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.d.ts +6 -0
  160. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.d.ts.map +1 -0
  161. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.js +16 -0
  162. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.js.map +1 -0
  163. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.d.ts +6 -0
  164. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.d.ts.map +1 -0
  165. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.js +18 -0
  166. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.js.map +1 -0
  167. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.d.ts +23 -0
  168. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.d.ts.map +1 -0
  169. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.js +155 -0
  170. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.js.map +1 -0
  171. package/src/lib/navigation/context-menu/tng-context-menu.component.d.ts +4 -0
  172. package/src/lib/navigation/context-menu/tng-context-menu.component.d.ts.map +1 -0
  173. package/src/lib/navigation/context-menu/tng-context-menu.component.js +16 -0
  174. package/src/lib/navigation/context-menu/tng-context-menu.component.js.map +1 -0
  175. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.d.ts +10 -0
  176. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.d.ts.map +1 -0
  177. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.js +54 -0
  178. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.js.map +1 -0
  179. package/src/lib/navigation/index.d.ts +27 -0
  180. package/src/lib/navigation/index.d.ts.map +1 -0
  181. package/src/lib/navigation/index.js +27 -0
  182. package/src/lib/navigation/index.js.map +1 -0
  183. package/src/lib/navigation/menu/tng-menu-trigger-for.directive.d.ts +15 -0
  184. package/src/lib/navigation/menu/tng-menu-trigger-for.directive.d.ts.map +1 -0
  185. package/src/lib/navigation/menu/tng-menu-trigger-for.directive.js +85 -0
  186. package/src/lib/navigation/menu/tng-menu-trigger-for.directive.js.map +1 -0
  187. package/src/lib/navigation/menu/tng-menu.component.d.ts +13 -0
  188. package/src/lib/navigation/menu/tng-menu.component.d.ts.map +1 -0
  189. package/src/lib/navigation/menu/tng-menu.component.js +92 -0
  190. package/src/lib/navigation/menu/tng-menu.component.js.map +1 -0
  191. package/src/lib/navigation/menubar/tng-menubar.component.d.ts +5 -0
  192. package/src/lib/navigation/menubar/tng-menubar.component.d.ts.map +1 -0
  193. package/src/lib/navigation/menubar/tng-menubar.component.js +29 -0
  194. package/src/lib/navigation/menubar/tng-menubar.component.js.map +1 -0
  195. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.d.ts +4 -0
  196. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.d.ts.map +1 -0
  197. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.js +16 -0
  198. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.js.map +1 -0
  199. package/src/lib/navigation/tabs/tng-tabs.component.d.ts +5 -0
  200. package/src/lib/navigation/tabs/tng-tabs.component.d.ts.map +1 -0
  201. package/src/lib/navigation/tabs/tng-tabs.component.js +41 -0
  202. package/src/lib/navigation/tabs/tng-tabs.component.js.map +1 -0
  203. package/src/lib/navigation/toolbar/tng-toolbar.component.d.ts +4 -0
  204. package/src/lib/navigation/toolbar/tng-toolbar.component.d.ts.map +1 -0
  205. package/src/lib/navigation/toolbar/tng-toolbar.component.js +16 -0
  206. package/src/lib/navigation/toolbar/tng-toolbar.component.js.map +1 -0
  207. package/src/lib/overlay/dialog/tng-dialog.component.d.ts +43 -0
  208. package/src/lib/overlay/dialog/tng-dialog.component.d.ts.map +1 -0
  209. package/src/lib/overlay/dialog/tng-dialog.component.js +286 -0
  210. package/src/lib/overlay/dialog/tng-dialog.component.js.map +1 -0
  211. package/src/lib/overlay/index.d.ts +7 -0
  212. package/src/lib/overlay/index.d.ts.map +1 -0
  213. package/src/lib/overlay/index.js +7 -0
  214. package/src/lib/overlay/index.js.map +1 -0
  215. package/src/lib/overlay/popover/tng-popover.component.d.ts +28 -0
  216. package/src/lib/overlay/popover/tng-popover.component.d.ts.map +1 -0
  217. package/src/lib/overlay/popover/tng-popover.component.js +133 -0
  218. package/src/lib/overlay/popover/tng-popover.component.js.map +1 -0
  219. package/src/lib/overlay/tng-overlay-runtime.d.ts +11 -0
  220. package/src/lib/overlay/tng-overlay-runtime.d.ts.map +1 -0
  221. package/src/lib/overlay/tng-overlay-runtime.js +11 -0
  222. package/src/lib/overlay/tng-overlay-runtime.js.map +1 -0
  223. package/src/lib/overlay/tooltip/tng-tooltip.component.d.ts +31 -0
  224. package/src/lib/overlay/tooltip/tng-tooltip.component.d.ts.map +1 -0
  225. package/src/lib/overlay/tooltip/tng-tooltip.component.js +111 -0
  226. package/src/lib/overlay/tooltip/tng-tooltip.component.js.map +1 -0
  227. package/src/lib/utility/avatar/tng-avatar.component.d.ts +19 -0
  228. package/src/lib/utility/avatar/tng-avatar.component.d.ts.map +1 -0
  229. package/src/lib/utility/avatar/tng-avatar.component.js +66 -0
  230. package/src/lib/utility/avatar/tng-avatar.component.js.map +1 -0
  231. package/src/lib/utility/badge/tng-badge.component.d.ts +4 -0
  232. package/src/lib/utility/badge/tng-badge.component.d.ts.map +1 -0
  233. package/src/lib/utility/badge/tng-badge.component.js +13 -0
  234. package/src/lib/utility/badge/tng-badge.component.js.map +1 -0
  235. package/src/lib/utility/button/tng-button.component.d.ts +18 -0
  236. package/src/lib/utility/button/tng-button.component.d.ts.map +1 -0
  237. package/src/lib/utility/button/tng-button.component.js +32 -0
  238. package/src/lib/utility/button/tng-button.component.js.map +1 -0
  239. package/src/lib/utility/code-block/highlighting.d.ts +96 -0
  240. package/src/lib/utility/code-block/highlighting.d.ts.map +1 -0
  241. package/src/lib/utility/code-block/highlighting.js +220 -0
  242. package/src/lib/utility/code-block/highlighting.js.map +1 -0
  243. package/src/lib/utility/code-block/tng-code-block.component.d.ts +118 -0
  244. package/src/lib/utility/code-block/tng-code-block.component.d.ts.map +1 -0
  245. package/src/lib/utility/code-block/tng-code-block.component.js +586 -0
  246. package/src/lib/utility/code-block/tng-code-block.component.js.map +1 -0
  247. package/src/lib/utility/copy-button/tng-copy-button.component.d.ts +39 -0
  248. package/src/lib/utility/copy-button/tng-copy-button.component.d.ts.map +1 -0
  249. package/src/lib/utility/copy-button/tng-copy-button.component.js +127 -0
  250. package/src/lib/utility/copy-button/tng-copy-button.component.js.map +1 -0
  251. package/src/lib/utility/index.d.ts +17 -0
  252. package/src/lib/utility/index.d.ts.map +1 -0
  253. package/src/lib/utility/index.js +16 -0
  254. package/src/lib/utility/index.js.map +1 -0
  255. package/src/lib/utility/tag/tng-tag.component.d.ts +10 -0
  256. package/src/lib/utility/tag/tng-tag.component.d.ts.map +1 -0
  257. package/src/lib/utility/tag/tng-tag.component.js +18 -0
  258. package/src/lib/utility/tag/tng-tag.component.js.map +1 -0
  259. package/src/lib/utility/tree/tng-tree.component.d.ts +72 -0
  260. package/src/lib/utility/tree/tng-tree.component.d.ts.map +1 -0
  261. package/src/lib/utility/tree/tng-tree.component.js +336 -0
  262. package/src/lib/utility/tree/tng-tree.component.js.map +1 -0
  263. package/src/test-setup.d.ts +3 -0
  264. package/src/test-setup.d.ts.map +1 -0
  265. package/src/test-setup.js +10 -0
  266. package/src/test-setup.js.map +1 -0
@@ -0,0 +1,104 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, computed, effect, inject, input, signal, } from '@angular/core';
3
+ import { TngAutocomplete, TngAutocompleteTrigger, TngAutocompleteTriggerContainer, TngAutocompleteIcon, TngAutocompleteContent, TngAutocompleteOverlay, TngAutocompleteListbox, TngAutocompleteOption, } from '@tailng-ui/primitives';
4
+ let TngAutocompleteComponent = class TngAutocompleteComponent {
5
+ primitive = inject(TngAutocomplete);
6
+ options = input([]);
7
+ placeholder = input('Type to search…');
8
+ getOptionValue = input(((opt) => opt?.value));
9
+ getOptionLabel = input(((opt) => String(opt?.label ??
10
+ opt?.value ??
11
+ opt)));
12
+ isOptionDisabled = input(((opt) => !!opt?.disabled));
13
+ /** Default: track by value, id, or option (stable identity for async/replaced options). */
14
+ trackBy = input((_, opt) => {
15
+ const o = opt;
16
+ return o?.['value'] ?? o?.['id'] ?? opt;
17
+ });
18
+ iconText = input('▾');
19
+ ariaLabel = input('Autocomplete');
20
+ query = signal('');
21
+ constructor() {
22
+ effect(() => {
23
+ const v = this.primitive.value();
24
+ const open = this.primitive.open();
25
+ if (!open) {
26
+ const opt = this.findOption(v);
27
+ this.query.set(opt ? this.getOptionLabel()(opt) : '');
28
+ }
29
+ });
30
+ }
31
+ selectedOption = computed(() => {
32
+ const v = this.primitive.value();
33
+ if (v === null)
34
+ return null;
35
+ const getV = this.getOptionValue();
36
+ for (const opt of this.options()) {
37
+ if (Object.is(getV(opt), v))
38
+ return opt;
39
+ }
40
+ return null;
41
+ });
42
+ selectedLabel = computed(() => {
43
+ const opt = this.selectedOption();
44
+ return opt ? this.getOptionLabel()(opt) : this.placeholder();
45
+ });
46
+ filteredOptions = computed(() => {
47
+ const q = this.query().toLowerCase().trim();
48
+ const list = this.options();
49
+ if (!q)
50
+ return list;
51
+ const getLabel = this.getOptionLabel();
52
+ return list.filter((opt) => getLabel(opt).toLowerCase().includes(q));
53
+ });
54
+ displayText = computed(() => this.primitive.open() ? this.query() : this.selectedLabel());
55
+ onInput(ev) {
56
+ const val = ev.target.value;
57
+ this.query.set(val);
58
+ }
59
+ findOption(value) {
60
+ if (value === null)
61
+ return null;
62
+ const getV = this.getOptionValue();
63
+ for (const opt of this.options()) {
64
+ if (Object.is(getV(opt), value))
65
+ return opt;
66
+ }
67
+ return null;
68
+ }
69
+ };
70
+ TngAutocompleteComponent = __decorate([
71
+ Component({
72
+ selector: 'tng-autocomplete',
73
+ standalone: true,
74
+ imports: [
75
+ TngAutocompleteTrigger,
76
+ TngAutocompleteTriggerContainer,
77
+ TngAutocompleteIcon,
78
+ TngAutocompleteContent,
79
+ TngAutocompleteOverlay,
80
+ TngAutocompleteListbox,
81
+ TngAutocompleteOption,
82
+ ],
83
+ hostDirectives: [
84
+ {
85
+ directive: TngAutocomplete,
86
+ inputs: [
87
+ 'open',
88
+ 'value',
89
+ 'disabled',
90
+ 'loading',
91
+ 'invalid',
92
+ 'labelId',
93
+ 'descriptionId',
94
+ 'errorId',
95
+ ],
96
+ outputs: ['openChange', 'valueChange'],
97
+ },
98
+ ],
99
+ templateUrl: './tng-autocomplete.component.html',
100
+ styleUrl: './tng-autocomplete.component.css',
101
+ })
102
+ ], TngAutocompleteComponent);
103
+ export { TngAutocompleteComponent };
104
+ //# sourceMappingURL=tng-autocomplete.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-autocomplete.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/autocomplete/tng-autocomplete.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\n\nimport {\n TngAutocomplete,\n TngAutocompleteTrigger,\n TngAutocompleteTriggerContainer,\n TngAutocompleteIcon,\n TngAutocompleteContent,\n TngAutocompleteOverlay,\n TngAutocompleteListbox,\n TngAutocompleteOption,\n} from '@tailng-ui/primitives';\n\nexport type TngAutocompleteGetValue<O, V> = (opt: O) => V;\nexport type TngAutocompleteGetLabel<O> = (opt: O) => string;\nexport type TngAutocompleteIsDisabled<O> = (opt: O) => boolean;\nexport type TngAutocompleteTrackBy<O> = (index: number, opt: O) => unknown;\n\n@Component({\n selector: 'tng-autocomplete',\n standalone: true,\n imports: [\n TngAutocompleteTrigger,\n TngAutocompleteTriggerContainer,\n TngAutocompleteIcon,\n TngAutocompleteContent,\n TngAutocompleteOverlay,\n TngAutocompleteListbox,\n TngAutocompleteOption,\n ],\n hostDirectives: [\n {\n directive: TngAutocomplete,\n inputs: [\n 'open',\n 'value',\n 'disabled',\n 'loading',\n 'invalid',\n 'labelId',\n 'descriptionId',\n 'errorId',\n ],\n outputs: ['openChange', 'valueChange'],\n },\n ],\n templateUrl: './tng-autocomplete.component.html',\n styleUrl: './tng-autocomplete.component.css',\n})\nexport class TngAutocompleteComponent<O = unknown, V = unknown> {\n protected readonly primitive = inject<TngAutocomplete<V>>(TngAutocomplete);\n\n readonly options = input<readonly O[]>([]);\n readonly placeholder = input<string>('Type to search…');\n\n readonly getOptionValue = input<TngAutocompleteGetValue<O, V>>(\n ((opt: unknown) => (opt as { value?: V })?.value) as TngAutocompleteGetValue<O, V>,\n );\n readonly getOptionLabel = input<TngAutocompleteGetLabel<O>>(\n ((opt: unknown) =>\n String(\n (opt as { label?: string; value?: unknown })?.label ??\n (opt as { value?: unknown })?.value ??\n opt,\n )) as TngAutocompleteGetLabel<O>,\n );\n readonly isOptionDisabled = input<TngAutocompleteIsDisabled<O>>(\n ((opt: unknown) => !!(opt as { disabled?: boolean })?.disabled) as TngAutocompleteIsDisabled<O>,\n );\n /** Default: track by value, id, or option (stable identity for async/replaced options). */\n readonly trackBy = input<TngAutocompleteTrackBy<O>>((_, opt) => {\n const o = opt as Record<string, unknown> | null | undefined;\n return o?.['value'] ?? o?.['id'] ?? opt;\n });\n\n readonly iconText = input<string>('▾');\n\n readonly ariaLabel = input<string>('Autocomplete');\n\n protected readonly query = signal('');\n\n constructor() {\n effect(() => {\n const v = this.primitive.value();\n const open = this.primitive.open();\n if (!open) {\n const opt = this.findOption(v);\n this.query.set(opt ? this.getOptionLabel()(opt) : '');\n }\n });\n }\n\n protected readonly selectedOption = computed<O | null>(() => {\n const v = this.primitive.value();\n if (v === null) return null;\n const getV = this.getOptionValue();\n for (const opt of this.options()) {\n if (Object.is(getV(opt), v)) return opt;\n }\n return null;\n });\n\n protected readonly selectedLabel = computed<string>(() => {\n const opt = this.selectedOption();\n return opt ? this.getOptionLabel()(opt) : this.placeholder();\n });\n\n protected readonly filteredOptions = computed<readonly O[]>(() => {\n const q = this.query().toLowerCase().trim();\n const list = this.options();\n if (!q) return list;\n const getLabel = this.getOptionLabel();\n return list.filter((opt) =>\n getLabel(opt).toLowerCase().includes(q),\n );\n });\n\n protected readonly displayText = computed<string>(() =>\n this.primitive.open() ? this.query() : this.selectedLabel(),\n );\n\n protected onInput(ev: Event): void {\n const val = (ev.target as HTMLInputElement).value;\n this.query.set(val);\n }\n\n private findOption(value: V | null): O | null {\n if (value === null) return null;\n const getV = this.getOptionValue();\n for (const opt of this.options()) {\n if (Object.is(getV(opt), value)) return opt;\n }\n return null;\n }\n}\n"]}
@@ -0,0 +1,44 @@
1
+ import { type TngButtonToggleValue } from '@tailng-ui/primitives';
2
+ type TngButtonToggleDirection = 'auto' | 'ltr' | 'rtl';
3
+ type TngButtonToggleOrientation = 'horizontal' | 'vertical';
4
+ type TngButtonToggleType = 'multiple' | 'single';
5
+ type TngButtonToggleActivationMode = 'auto' | 'manual';
6
+ export declare class TngButtonToggleGroupComponent {
7
+ readonly ariaLabel: import("@angular/core").InputSignal<string>;
8
+ readonly type: import("@angular/core").InputSignal<TngButtonToggleType>;
9
+ readonly activation: import("@angular/core").InputSignal<TngButtonToggleActivationMode>;
10
+ readonly orientation: import("@angular/core").InputSignal<TngButtonToggleOrientation>;
11
+ readonly dir: import("@angular/core").InputSignal<TngButtonToggleDirection>;
12
+ readonly allowEmpty: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
13
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
14
+ readonly loop: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
15
+ readonly valueInput: import("@angular/core").InputSignalWithTransform<TngButtonToggleValue | null | undefined, unknown>;
16
+ readonly valuesInput: import("@angular/core").InputSignalWithTransform<readonly TngButtonToggleValue[] | undefined, unknown>;
17
+ readonly defaultValueInput: import("@angular/core").InputSignalWithTransform<TngButtonToggleValue | null | undefined, unknown>;
18
+ readonly defaultValuesInput: import("@angular/core").InputSignalWithTransform<readonly TngButtonToggleValue[] | undefined, unknown>;
19
+ readonly valueFallbackInput: import("@angular/core").InputSignalWithTransform<TngButtonToggleValue | null | undefined, unknown>;
20
+ readonly valuesFallbackInput: import("@angular/core").InputSignalWithTransform<readonly TngButtonToggleValue[] | undefined, unknown>;
21
+ readonly defaultValueFallbackInput: import("@angular/core").InputSignalWithTransform<TngButtonToggleValue | null | undefined, unknown>;
22
+ readonly defaultValuesFallbackInput: import("@angular/core").InputSignalWithTransform<readonly TngButtonToggleValue[] | undefined, unknown>;
23
+ readonly valueChange: import("@angular/core").OutputEmitterRef<TngButtonToggleValue | null>;
24
+ readonly valuesChange: import("@angular/core").OutputEmitterRef<readonly TngButtonToggleValue[]>;
25
+ readonly toggleChange: import("@angular/core").OutputEmitterRef<Readonly<{
26
+ value: TngButtonToggleValue;
27
+ selected: boolean;
28
+ previousValue: TngButtonToggleValue | null;
29
+ previousValues: readonly TngButtonToggleValue[];
30
+ values: readonly TngButtonToggleValue[];
31
+ trigger: "programmatic" | "pointer" | "keyboard";
32
+ }>>;
33
+ readonly focusChange: import("@angular/core").OutputEmitterRef<Readonly<{
34
+ value: TngButtonToggleValue;
35
+ previousValue: TngButtonToggleValue | null;
36
+ trigger: "programmatic" | "pointer" | "keyboard";
37
+ }>>;
38
+ protected resolvedValue(): TngButtonToggleValue | null | undefined;
39
+ protected resolvedValues(): readonly TngButtonToggleValue[] | undefined;
40
+ protected resolvedDefaultValue(): TngButtonToggleValue | null | undefined;
41
+ protected resolvedDefaultValues(): readonly TngButtonToggleValue[] | undefined;
42
+ }
43
+ export {};
44
+ //# sourceMappingURL=tng-button-toggle-group.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-button-toggle-group.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/button-toggle/tng-button-toggle-group.component.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAE/B,KAAK,wBAAwB,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AACvD,KAAK,0BAA0B,GAAG,YAAY,GAAG,UAAU,CAAC;AAC5D,KAAK,mBAAmB,GAAG,UAAU,GAAG,QAAQ,CAAC;AACjD,KAAK,6BAA6B,GAAG,MAAM,GAAG,QAAQ,CAAC;AA6CvD,qBAMa,6BAA6B;IACxC,SAAgB,SAAS,8CAAwC;IAEjE,SAAgB,IAAI,2DAAwC;IAC5D,SAAgB,UAAU,qEAAgD;IAC1E,SAAgB,WAAW,kEAAmD;IAC9E,SAAgB,GAAG,gEAA2C;IAC9D,SAAgB,UAAU,qEAEvB;IACH,SAAgB,QAAQ,qEAErB;IACH,SAAgB,IAAI,qEAEjB;IAEH,SAAgB,UAAU,qGAGvB;IACH,SAAgB,WAAW,yGAMzB;IACF,SAAgB,iBAAiB,qGAM/B;IACF,SAAgB,kBAAkB,yGAMhC;IAEF,SAAgB,kBAAkB,qGAMhC;IACF,SAAgB,mBAAmB,yGAMjC;IACF,SAAgB,yBAAyB,qGAMvC;IACF,SAAgB,0BAA0B,yGAMvC;IAEH,SAAgB,WAAW,wEAAyC;IACpE,SAAgB,YAAY,4EAA6C;IACzE,SAAgB,YAAY;;;;;;;QAAwC;IACpE,SAAgB,WAAW;;;;QAA6C;IAExE,SAAS,CAAC,aAAa,IAAI,oBAAoB,GAAG,IAAI,GAAG,SAAS;IASlE,SAAS,CAAC,cAAc,IAAI,SAAS,oBAAoB,EAAE,GAAG,SAAS;IASvE,SAAS,CAAC,oBAAoB,IAAI,oBAAoB,GAAG,IAAI,GAAG,SAAS;IASzE,SAAS,CAAC,qBAAqB,IAAI,SAAS,oBAAoB,EAAE,GAAG,SAAS;CAQ/E"}
@@ -0,0 +1,123 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, booleanAttribute, input, output, } from '@angular/core';
3
+ import { TngButtonToggleGroup as TngButtonToggleGroupPrimitive, } from '@tailng-ui/primitives';
4
+ function normalizeOptionalButtonToggleValue(value) {
5
+ if (value === undefined) {
6
+ return undefined;
7
+ }
8
+ if (value === null) {
9
+ return null;
10
+ }
11
+ if (typeof value === 'number' || typeof value === 'string') {
12
+ return value;
13
+ }
14
+ return String(value);
15
+ }
16
+ function normalizeOptionalButtonToggleValues(value) {
17
+ if (value === undefined) {
18
+ return undefined;
19
+ }
20
+ if (value === null) {
21
+ return [];
22
+ }
23
+ if (Array.isArray(value)) {
24
+ return value
25
+ .map((item) => normalizeOptionalButtonToggleValue(item))
26
+ .filter((item) => item !== null && item !== undefined);
27
+ }
28
+ const normalized = normalizeOptionalButtonToggleValue(value);
29
+ if (normalized === null || normalized === undefined) {
30
+ return [];
31
+ }
32
+ return [normalized];
33
+ }
34
+ let TngButtonToggleGroupComponent = class TngButtonToggleGroupComponent {
35
+ ariaLabel = input('Button Toggle Group');
36
+ type = input('single');
37
+ activation = input('auto');
38
+ orientation = input('horizontal');
39
+ dir = input('auto');
40
+ allowEmpty = input(false, {
41
+ transform: booleanAttribute,
42
+ });
43
+ disabled = input(false, {
44
+ transform: booleanAttribute,
45
+ });
46
+ loop = input(true, {
47
+ transform: booleanAttribute,
48
+ });
49
+ valueInput = input(undefined, {
50
+ alias: 'tngButtonToggleValue',
51
+ transform: normalizeOptionalButtonToggleValue,
52
+ });
53
+ valuesInput = input(undefined, {
54
+ alias: 'tngButtonToggleValues',
55
+ transform: normalizeOptionalButtonToggleValues,
56
+ });
57
+ defaultValueInput = input(undefined, {
58
+ alias: 'tngButtonToggleDefaultValue',
59
+ transform: normalizeOptionalButtonToggleValue,
60
+ });
61
+ defaultValuesInput = input(undefined, {
62
+ alias: 'tngButtonToggleDefaultValues',
63
+ transform: normalizeOptionalButtonToggleValues,
64
+ });
65
+ valueFallbackInput = input(undefined, {
66
+ alias: 'value',
67
+ transform: normalizeOptionalButtonToggleValue,
68
+ });
69
+ valuesFallbackInput = input(undefined, {
70
+ alias: 'values',
71
+ transform: normalizeOptionalButtonToggleValues,
72
+ });
73
+ defaultValueFallbackInput = input(undefined, {
74
+ alias: 'defaultValue',
75
+ transform: normalizeOptionalButtonToggleValue,
76
+ });
77
+ defaultValuesFallbackInput = input(undefined, {
78
+ alias: 'defaultValues',
79
+ transform: normalizeOptionalButtonToggleValues,
80
+ });
81
+ valueChange = output();
82
+ valuesChange = output();
83
+ toggleChange = output();
84
+ focusChange = output();
85
+ resolvedValue() {
86
+ const explicit = this.valueInput();
87
+ if (explicit !== undefined) {
88
+ return explicit;
89
+ }
90
+ return this.valueFallbackInput();
91
+ }
92
+ resolvedValues() {
93
+ const explicit = this.valuesInput();
94
+ if (explicit !== undefined) {
95
+ return explicit;
96
+ }
97
+ return this.valuesFallbackInput();
98
+ }
99
+ resolvedDefaultValue() {
100
+ const explicit = this.defaultValueInput();
101
+ if (explicit !== undefined) {
102
+ return explicit;
103
+ }
104
+ return this.defaultValueFallbackInput();
105
+ }
106
+ resolvedDefaultValues() {
107
+ const explicit = this.defaultValuesInput();
108
+ if (explicit !== undefined) {
109
+ return explicit;
110
+ }
111
+ return this.defaultValuesFallbackInput();
112
+ }
113
+ };
114
+ TngButtonToggleGroupComponent = __decorate([
115
+ Component({
116
+ selector: 'tng-button-toggle-group',
117
+ imports: [TngButtonToggleGroupPrimitive],
118
+ templateUrl: './tng-button-toggle-group.component.html',
119
+ styleUrl: './tng-button-toggle-group.component.css',
120
+ })
121
+ ], TngButtonToggleGroupComponent);
122
+ export { TngButtonToggleGroupComponent };
123
+ //# sourceMappingURL=tng-button-toggle-group.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-button-toggle-group.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/button-toggle/tng-button-toggle-group.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n booleanAttribute,\n input,\n output,\n} from '@angular/core';\nimport {\n TngButtonToggleChangeEvent,\n TngButtonToggleFocusChangeEvent,\n TngButtonToggleGroup as TngButtonToggleGroupPrimitive,\n type TngButtonToggleValue,\n} from '@tailng-ui/primitives';\n\ntype TngButtonToggleDirection = 'auto' | 'ltr' | 'rtl';\ntype TngButtonToggleOrientation = 'horizontal' | 'vertical';\ntype TngButtonToggleType = 'multiple' | 'single';\ntype TngButtonToggleActivationMode = 'auto' | 'manual';\n\nfunction normalizeOptionalButtonToggleValue(\n value: unknown,\n): TngButtonToggleValue | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === null) {\n return null;\n }\n\n if (typeof value === 'number' || typeof value === 'string') {\n return value;\n }\n\n return String(value);\n}\n\nfunction normalizeOptionalButtonToggleValues(\n value: unknown,\n): readonly TngButtonToggleValue[] | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === null) {\n return [];\n }\n\n if (Array.isArray(value)) {\n return value\n .map((item) => normalizeOptionalButtonToggleValue(item))\n .filter((item): item is TngButtonToggleValue => item !== null && item !== undefined);\n }\n\n const normalized = normalizeOptionalButtonToggleValue(value);\n if (normalized === null || normalized === undefined) {\n return [];\n }\n\n return [normalized];\n}\n\n@Component({\n selector: 'tng-button-toggle-group',\n imports: [TngButtonToggleGroupPrimitive],\n templateUrl: './tng-button-toggle-group.component.html',\n styleUrl: './tng-button-toggle-group.component.css',\n})\nexport class TngButtonToggleGroupComponent {\n public readonly ariaLabel = input<string>('Button Toggle Group');\n\n public readonly type = input<TngButtonToggleType>('single');\n public readonly activation = input<TngButtonToggleActivationMode>('auto');\n public readonly orientation = input<TngButtonToggleOrientation>('horizontal');\n public readonly dir = input<TngButtonToggleDirection>('auto');\n public readonly allowEmpty = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n public readonly loop = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n\n public readonly valueInput = input<TngButtonToggleValue | null | undefined, unknown>(undefined, {\n alias: 'tngButtonToggleValue',\n transform: normalizeOptionalButtonToggleValue,\n });\n public readonly valuesInput = input<readonly TngButtonToggleValue[] | undefined, unknown>(\n undefined,\n {\n alias: 'tngButtonToggleValues',\n transform: normalizeOptionalButtonToggleValues,\n },\n );\n public readonly defaultValueInput = input<TngButtonToggleValue | null | undefined, unknown>(\n undefined,\n {\n alias: 'tngButtonToggleDefaultValue',\n transform: normalizeOptionalButtonToggleValue,\n },\n );\n public readonly defaultValuesInput = input<readonly TngButtonToggleValue[] | undefined, unknown>(\n undefined,\n {\n alias: 'tngButtonToggleDefaultValues',\n transform: normalizeOptionalButtonToggleValues,\n },\n );\n\n public readonly valueFallbackInput = input<TngButtonToggleValue | null | undefined, unknown>(\n undefined,\n {\n alias: 'value',\n transform: normalizeOptionalButtonToggleValue,\n },\n );\n public readonly valuesFallbackInput = input<readonly TngButtonToggleValue[] | undefined, unknown>(\n undefined,\n {\n alias: 'values',\n transform: normalizeOptionalButtonToggleValues,\n },\n );\n public readonly defaultValueFallbackInput = input<TngButtonToggleValue | null | undefined, unknown>(\n undefined,\n {\n alias: 'defaultValue',\n transform: normalizeOptionalButtonToggleValue,\n },\n );\n public readonly defaultValuesFallbackInput = input<\n readonly TngButtonToggleValue[] | undefined,\n unknown\n >(undefined, {\n alias: 'defaultValues',\n transform: normalizeOptionalButtonToggleValues,\n });\n\n public readonly valueChange = output<TngButtonToggleValue | null>();\n public readonly valuesChange = output<readonly TngButtonToggleValue[]>();\n public readonly toggleChange = output<TngButtonToggleChangeEvent>();\n public readonly focusChange = output<TngButtonToggleFocusChangeEvent>();\n\n protected resolvedValue(): TngButtonToggleValue | null | undefined {\n const explicit = this.valueInput();\n if (explicit !== undefined) {\n return explicit;\n }\n\n return this.valueFallbackInput();\n }\n\n protected resolvedValues(): readonly TngButtonToggleValue[] | undefined {\n const explicit = this.valuesInput();\n if (explicit !== undefined) {\n return explicit;\n }\n\n return this.valuesFallbackInput();\n }\n\n protected resolvedDefaultValue(): TngButtonToggleValue | null | undefined {\n const explicit = this.defaultValueInput();\n if (explicit !== undefined) {\n return explicit;\n }\n\n return this.defaultValueFallbackInput();\n }\n\n protected resolvedDefaultValues(): readonly TngButtonToggleValue[] | undefined {\n const explicit = this.defaultValuesInput();\n if (explicit !== undefined) {\n return explicit;\n }\n\n return this.defaultValuesFallbackInput();\n }\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import { type TngButtonToggleValue } from '@tailng-ui/primitives';
2
+ export declare function toggleTngButtonToggleState(pressed: boolean): boolean;
3
+ export declare class TngButtonToggleComponent {
4
+ private readonly hostRef;
5
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
6
+ readonly pressed: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
7
+ readonly toggleValueInput: import("@angular/core").InputSignalWithTransform<TngButtonToggleValue | null | undefined, unknown>;
8
+ readonly valueInput: import("@angular/core").InputSignalWithTransform<TngButtonToggleValue | null | undefined, unknown>;
9
+ readonly pressedChange: import("@angular/core").OutputEmitterRef<boolean>;
10
+ onToggle(): void;
11
+ protected resolvedValue(): TngButtonToggleValue | null | undefined;
12
+ private isInsideToggleGroup;
13
+ }
14
+ //# sourceMappingURL=tng-button-toggle.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-button-toggle.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/button-toggle/tng-button-toggle.component.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAE/B,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEpE;AAoBD,qBAMa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IAEvE,SAAgB,QAAQ,8EAErB;IACH,SAAgB,OAAO,8EAEpB;IACH,SAAgB,gBAAgB,qGAM9B;IACF,SAAgB,UAAU,qGAGvB;IAEH,SAAgB,aAAa,oDAAqB;IAE3C,QAAQ,IAAI,IAAI;IAYvB,SAAS,CAAC,aAAa,IAAI,oBAAoB,GAAG,IAAI,GAAG,SAAS;IASlE,OAAO,CAAC,mBAAmB;CAG5B"}
@@ -0,0 +1,65 @@
1
+ import { __decorate } from "tslib";
2
+ import { ElementRef, booleanAttribute, Component, inject, input, output, } from '@angular/core';
3
+ import { TngButtonToggle as TngButtonTogglePrimitive, } from '@tailng-ui/primitives';
4
+ export function toggleTngButtonToggleState(pressed) {
5
+ return !pressed;
6
+ }
7
+ function normalizeOptionalButtonToggleValue(value) {
8
+ if (value === undefined) {
9
+ return undefined;
10
+ }
11
+ if (value === null) {
12
+ return null;
13
+ }
14
+ if (typeof value === 'number' || typeof value === 'string') {
15
+ return value;
16
+ }
17
+ return String(value);
18
+ }
19
+ let TngButtonToggleComponent = class TngButtonToggleComponent {
20
+ hostRef = inject(ElementRef);
21
+ disabled = input(false, {
22
+ transform: booleanAttribute,
23
+ });
24
+ pressed = input(false, {
25
+ transform: booleanAttribute,
26
+ });
27
+ toggleValueInput = input(undefined, {
28
+ alias: 'tngButtonToggleValue',
29
+ transform: normalizeOptionalButtonToggleValue,
30
+ });
31
+ valueInput = input(undefined, {
32
+ alias: 'value',
33
+ transform: normalizeOptionalButtonToggleValue,
34
+ });
35
+ pressedChange = output();
36
+ onToggle() {
37
+ if (this.disabled()) {
38
+ return;
39
+ }
40
+ if (this.isInsideToggleGroup()) {
41
+ return;
42
+ }
43
+ this.pressedChange.emit(toggleTngButtonToggleState(this.pressed()));
44
+ }
45
+ resolvedValue() {
46
+ const explicit = this.toggleValueInput();
47
+ if (explicit !== undefined) {
48
+ return explicit;
49
+ }
50
+ return this.valueInput();
51
+ }
52
+ isInsideToggleGroup() {
53
+ return this.hostRef.nativeElement.closest('[data-slot="button-toggle-group"]') !== null;
54
+ }
55
+ };
56
+ TngButtonToggleComponent = __decorate([
57
+ Component({
58
+ selector: 'tng-button-toggle',
59
+ imports: [TngButtonTogglePrimitive],
60
+ templateUrl: './tng-button-toggle.component.html',
61
+ styleUrl: './tng-button-toggle.component.css',
62
+ })
63
+ ], TngButtonToggleComponent);
64
+ export { TngButtonToggleComponent };
65
+ //# sourceMappingURL=tng-button-toggle.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-button-toggle.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/button-toggle/tng-button-toggle.component.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,MAAM,EACN,KAAK,EACL,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,IAAI,wBAAwB,GAE5C,MAAM,uBAAuB,CAAC;AAE/B,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,OAAO,CAAC,OAAO,CAAC;AAClB,CAAC;AAED,SAAS,kCAAkC,CACzC,KAAc;IAEd,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAQM,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAClB,OAAO,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;IAEvD,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,OAAO,GAAG,KAAK,CAA4B,KAAK,EAAE;QAChE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,gBAAgB,GAAG,KAAK,CACtC,SAAS,EACT;QACE,KAAK,EAAE,sBAAsB;QAC7B,SAAS,EAAE,kCAAkC;KAC9C,CACF,CAAC;IACc,UAAU,GAAG,KAAK,CAAmD,SAAS,EAAE;QAC9F,KAAK,EAAE,OAAO;QACd,SAAS,EAAE,kCAAkC;KAC9C,CAAC,CAAC;IAEa,aAAa,GAAG,MAAM,EAAW,CAAC;IAE3C,QAAQ;QACb,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAES,aAAa;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAEO,mBAAmB;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,mCAAmC,CAAC,KAAK,IAAI,CAAC;IAC1F,CAAC;CACF,CAAA;AA/CY,wBAAwB;IANpC,SAAS,CAAC;QACT,QAAQ,EAAE,mBAAmB;QAC7B,OAAO,EAAE,CAAC,wBAAwB,CAAC;QACnC,WAAW,EAAE,oCAAoC;QACjD,QAAQ,EAAE,mCAAmC;KAC9C,CAAC;GACW,wBAAwB,CA+CpC","sourcesContent":["import {\n ElementRef,\n booleanAttribute,\n Component,\n inject,\n input,\n output,\n} from '@angular/core';\nimport {\n TngButtonToggle as TngButtonTogglePrimitive,\n type TngButtonToggleValue,\n} from '@tailng-ui/primitives';\n\nexport function toggleTngButtonToggleState(pressed: boolean): boolean {\n return !pressed;\n}\n\nfunction normalizeOptionalButtonToggleValue(\n value: unknown,\n): TngButtonToggleValue | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === null) {\n return null;\n }\n\n if (typeof value === 'number' || typeof value === 'string') {\n return value;\n }\n\n return String(value);\n}\n\n@Component({\n selector: 'tng-button-toggle',\n imports: [TngButtonTogglePrimitive],\n templateUrl: './tng-button-toggle.component.html',\n styleUrl: './tng-button-toggle.component.css',\n})\nexport class TngButtonToggleComponent {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly pressed = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly toggleValueInput = input<TngButtonToggleValue | null | undefined, unknown>(\n undefined,\n {\n alias: 'tngButtonToggleValue',\n transform: normalizeOptionalButtonToggleValue,\n },\n );\n public readonly valueInput = input<TngButtonToggleValue | null | undefined, unknown>(undefined, {\n alias: 'value',\n transform: normalizeOptionalButtonToggleValue,\n });\n\n public readonly pressedChange = output<boolean>();\n\n public onToggle(): void {\n if (this.disabled()) {\n return;\n }\n\n if (this.isInsideToggleGroup()) {\n return;\n }\n\n this.pressedChange.emit(toggleTngButtonToggleState(this.pressed()));\n }\n\n protected resolvedValue(): TngButtonToggleValue | null | undefined {\n const explicit = this.toggleValueInput();\n if (explicit !== undefined) {\n return explicit;\n }\n\n return this.valueInput();\n }\n\n private isInsideToggleGroup(): boolean {\n return this.hostRef.nativeElement.closest('[data-slot=\"button-toggle-group\"]') !== null;\n }\n}\n"]}
@@ -0,0 +1,38 @@
1
+ import { type ControlValueAccessor } from '@angular/forms';
2
+ export type TngCheckboxChange = Readonly<{
3
+ checked: boolean;
4
+ indeterminate: boolean;
5
+ }>;
6
+ export type TngCheckboxModelValue = 'mixed' | boolean;
7
+ export declare function coerceTngCheckboxModelValue(value: unknown): TngCheckboxChange;
8
+ export declare function readTngCheckboxChange(event: unknown): TngCheckboxChange | null;
9
+ export declare class TngCheckboxComponent implements ControlValueAccessor {
10
+ readonly ariaDescribedBy: import("@angular/core").InputSignal<string | null>;
11
+ readonly checked: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
12
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
13
+ readonly invalid: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
14
+ readonly indeterminate: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
15
+ readonly name: import("@angular/core").InputSignal<string | null>;
16
+ readonly readonly: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
17
+ readonly required: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
18
+ readonly value: import("@angular/core").InputSignal<string>;
19
+ readonly checkedChange: import("@angular/core").OutputEmitterRef<boolean>;
20
+ readonly indeterminateChange: import("@angular/core").OutputEmitterRef<boolean>;
21
+ private readonly internalChecked;
22
+ private readonly internalIndeterminate;
23
+ private readonly cvaModeEnabled;
24
+ private readonly cvaDisabled;
25
+ private onControlChange;
26
+ private onControlTouched;
27
+ protected readonly resolvedChecked: import("@angular/core").Signal<boolean>;
28
+ protected readonly resolvedDisabled: import("@angular/core").Signal<boolean>;
29
+ protected readonly resolvedIndeterminate: import("@angular/core").Signal<boolean>;
30
+ constructor();
31
+ onBlur(): void;
32
+ onChange(event: unknown): void;
33
+ registerOnChange(fn: (value: TngCheckboxModelValue) => void): void;
34
+ registerOnTouched(fn: () => void): void;
35
+ setDisabledState(isDisabled: boolean): void;
36
+ writeValue(value: unknown): void;
37
+ }
38
+ //# sourceMappingURL=tng-checkbox.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-checkbox.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/checkbox/tng-checkbox.component.ts"],"names":[],"mappings":"AAUA,OAAO,EAAqB,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG9E,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,OAAO,CAAC;AAEtD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAU7E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAc9E;AAKD,qBAaa,oBAAqB,YAAW,oBAAoB;IAC/D,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,OAAO,8EAEpB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,OAAO,8EAEpB;IACH,SAAgB,aAAa,8EAE1B;IACH,SAAgB,IAAI,qDAA8B;IAClD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,8CAAuB;IAE5C,SAAgB,aAAa,oDAAqB;IAClD,SAAgB,mBAAmB,oDAAqB;IAExD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAiB;IACvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAE7C,OAAO,CAAC,eAAe,CAA2D;IAClF,OAAO,CAAC,gBAAgB,CAA8B;IAEtD,SAAS,CAAC,QAAQ,CAAC,eAAe,0CAM/B;IAEH,SAAS,CAAC,QAAQ,CAAC,gBAAgB,0CAMhC;IAEH,SAAS,CAAC,QAAQ,CAAC,qBAAqB,0CAMrC;;IAgBI,MAAM,IAAI,IAAI;IAId,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAkB9B,gBAAgB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,IAAI;IAKlE,iBAAiB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAKvC,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAK3C,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAMxC"}
@@ -0,0 +1,138 @@
1
+ import { __decorate } from "tslib";
2
+ import { booleanAttribute, Component, computed, effect, forwardRef, input, output, signal, } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { TngCheckbox as TngCheckboxPrimitive } from '@tailng-ui/primitives';
5
+ export function coerceTngCheckboxModelValue(value) {
6
+ if (value === 'mixed') {
7
+ return { checked: false, indeterminate: true };
8
+ }
9
+ if (value === true) {
10
+ return { checked: true, indeterminate: false };
11
+ }
12
+ return { checked: false, indeterminate: false };
13
+ }
14
+ export function readTngCheckboxChange(event) {
15
+ if (!(event instanceof Event)) {
16
+ return null;
17
+ }
18
+ const target = event.target;
19
+ if (!(target instanceof HTMLInputElement)) {
20
+ return null;
21
+ }
22
+ return {
23
+ checked: target.checked,
24
+ indeterminate: target.indeterminate,
25
+ };
26
+ }
27
+ const noControlChange = (_value) => undefined;
28
+ const noControlTouch = () => undefined;
29
+ let TngCheckboxComponent = class TngCheckboxComponent {
30
+ ariaDescribedBy = input(null);
31
+ checked = input(false, {
32
+ transform: booleanAttribute,
33
+ });
34
+ disabled = input(false, {
35
+ transform: booleanAttribute,
36
+ });
37
+ invalid = input(false, {
38
+ transform: booleanAttribute,
39
+ });
40
+ indeterminate = input(false, {
41
+ transform: booleanAttribute,
42
+ });
43
+ name = input(null);
44
+ readonly = input(false, {
45
+ transform: booleanAttribute,
46
+ });
47
+ required = input(false, {
48
+ transform: booleanAttribute,
49
+ });
50
+ value = input('on');
51
+ checkedChange = output();
52
+ indeterminateChange = output();
53
+ internalChecked = signal(false);
54
+ internalIndeterminate = signal(false);
55
+ cvaModeEnabled = signal(false);
56
+ cvaDisabled = signal(false);
57
+ onControlChange = noControlChange;
58
+ onControlTouched = noControlTouch;
59
+ resolvedChecked = computed(() => {
60
+ if (this.cvaModeEnabled()) {
61
+ return this.internalChecked();
62
+ }
63
+ return this.checked();
64
+ });
65
+ resolvedDisabled = computed(() => {
66
+ if (this.cvaModeEnabled()) {
67
+ return this.cvaDisabled();
68
+ }
69
+ return this.disabled();
70
+ });
71
+ resolvedIndeterminate = computed(() => {
72
+ if (this.cvaModeEnabled()) {
73
+ return this.internalIndeterminate();
74
+ }
75
+ return this.indeterminate();
76
+ });
77
+ constructor() {
78
+ effect(() => {
79
+ if (this.cvaModeEnabled()) {
80
+ return;
81
+ }
82
+ this.internalChecked.set(this.checked());
83
+ this.internalIndeterminate.set(this.indeterminate());
84
+ }, { allowSignalWrites: true });
85
+ }
86
+ onBlur() {
87
+ this.onControlTouched();
88
+ }
89
+ onChange(event) {
90
+ const change = readTngCheckboxChange(event);
91
+ if (change === null) {
92
+ return;
93
+ }
94
+ if (this.readonly() || this.resolvedDisabled()) {
95
+ return;
96
+ }
97
+ this.internalChecked.set(change.checked);
98
+ this.internalIndeterminate.set(change.indeterminate);
99
+ this.checkedChange.emit(change.checked);
100
+ this.indeterminateChange.emit(change.indeterminate);
101
+ this.onControlChange(change.indeterminate ? 'mixed' : change.checked);
102
+ }
103
+ registerOnChange(fn) {
104
+ this.cvaModeEnabled.set(true);
105
+ this.onControlChange = fn;
106
+ }
107
+ registerOnTouched(fn) {
108
+ this.cvaModeEnabled.set(true);
109
+ this.onControlTouched = fn;
110
+ }
111
+ setDisabledState(isDisabled) {
112
+ this.cvaModeEnabled.set(true);
113
+ this.cvaDisabled.set(isDisabled);
114
+ }
115
+ writeValue(value) {
116
+ this.cvaModeEnabled.set(true);
117
+ const normalized = coerceTngCheckboxModelValue(value);
118
+ this.internalChecked.set(normalized.checked);
119
+ this.internalIndeterminate.set(normalized.indeterminate);
120
+ }
121
+ };
122
+ TngCheckboxComponent = __decorate([
123
+ Component({
124
+ selector: 'tng-checkbox',
125
+ imports: [TngCheckboxPrimitive],
126
+ templateUrl: './tng-checkbox.component.html',
127
+ styleUrl: './tng-checkbox.component.css',
128
+ providers: [
129
+ {
130
+ provide: NG_VALUE_ACCESSOR,
131
+ useExisting: forwardRef(() => TngCheckboxComponent),
132
+ multi: true,
133
+ },
134
+ ],
135
+ })
136
+ ], TngCheckboxComponent);
137
+ export { TngCheckboxComponent };
138
+ //# sourceMappingURL=tng-checkbox.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-checkbox.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/checkbox/tng-checkbox.component.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,MAAM,EACN,UAAU,EACV,KAAK,EACL,MAAM,EACN,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAA6B,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAS5E,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACjD,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAI,CAAC,CAAC,MAAM,YAAY,gBAAgB,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,MAA6B,EAAQ,EAAE,CAAC,SAAS,CAAC;AAC3E,MAAM,cAAc,GAAG,GAAS,EAAE,CAAC,SAAS,CAAC;AAetC,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IACf,eAAe,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAC7C,OAAO,GAAG,KAAK,CAA4B,KAAK,EAAE;QAChE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,OAAO,GAAG,KAAK,CAA4B,KAAK,EAAE;QAChE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,aAAa,GAAG,KAAK,CAA4B,KAAK,EAAE;QACtE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,IAAI,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAClC,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,KAAK,GAAG,KAAK,CAAS,IAAI,CAAC,CAAC;IAE5B,aAAa,GAAG,MAAM,EAAW,CAAC;IAClC,mBAAmB,GAAG,MAAM,EAAW,CAAC;IAEvC,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAErC,eAAe,GAA2C,eAAe,CAAC;IAC1E,gBAAgB,GAAe,cAAc,CAAC;IAEnC,eAAe,GAAG,QAAQ,CAAU,GAAG,EAAE;QAC1D,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEgB,gBAAgB,GAAG,QAAQ,CAAU,GAAG,EAAE;QAC3D,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEgB,qBAAqB,GAAG,QAAQ,CAAU,GAAG,EAAE;QAChE,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACtC,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH;QACE,MAAM,CACJ,GAAG,EAAE;YACH,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC1B,OAAO;YACT,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACvD,CAAC,EACD,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAC5B,CAAC;IACJ,CAAC;IAEM,MAAM;QACX,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEM,QAAQ,CAAC,KAAc;QAC5B,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAErD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC;IAEM,gBAAgB,CAAC,EAA0C;QAChE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC5B,CAAC;IAEM,iBAAiB,CAAC,EAAc;QACrC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC7B,CAAC;IAEM,gBAAgB,CAAC,UAAmB;QACzC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;IAEM,UAAU,CAAC,KAAc;QAC9B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,UAAU,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC;CACF,CAAA;AAnHY,oBAAoB;IAbhC,SAAS,CAAC;QACT,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,CAAC,oBAAoB,CAAC;QAC/B,WAAW,EAAE,+BAA+B;QAC5C,QAAQ,EAAE,8BAA8B;QACxC,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC;gBACnD,KAAK,EAAE,IAAI;aACZ;SACF;KACF,CAAC;GACW,oBAAoB,CAmHhC","sourcesContent":["import {\n booleanAttribute,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\nimport { TngCheckbox as TngCheckboxPrimitive } from '@tailng-ui/primitives';\n\nexport type TngCheckboxChange = Readonly<{\n checked: boolean;\n indeterminate: boolean;\n}>;\n\nexport type TngCheckboxModelValue = 'mixed' | boolean;\n\nexport function coerceTngCheckboxModelValue(value: unknown): TngCheckboxChange {\n if (value === 'mixed') {\n return { checked: false, indeterminate: true };\n }\n\n if (value === true) {\n return { checked: true, indeterminate: false };\n }\n\n return { checked: false, indeterminate: false };\n}\n\nexport function readTngCheckboxChange(event: unknown): TngCheckboxChange | null {\n if (!(event instanceof Event)) {\n return null;\n }\n\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) {\n return null;\n }\n\n return {\n checked: target.checked,\n indeterminate: target.indeterminate,\n };\n}\n\nconst noControlChange = (_value: TngCheckboxModelValue): void => undefined;\nconst noControlTouch = (): void => undefined;\n\n@Component({\n selector: 'tng-checkbox',\n imports: [TngCheckboxPrimitive],\n templateUrl: './tng-checkbox.component.html',\n styleUrl: './tng-checkbox.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TngCheckboxComponent),\n multi: true,\n },\n ],\n})\nexport class TngCheckboxComponent implements ControlValueAccessor {\n public readonly ariaDescribedBy = input<string | null>(null);\n public readonly checked = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly invalid = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly indeterminate = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly name = input<string | null>(null);\n public readonly readonly = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly required = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly value = input<string>('on');\n\n public readonly checkedChange = output<boolean>();\n public readonly indeterminateChange = output<boolean>();\n\n private readonly internalChecked = signal(false);\n private readonly internalIndeterminate = signal(false);\n private readonly cvaModeEnabled = signal(false);\n private readonly cvaDisabled = signal(false);\n\n private onControlChange: (value: TngCheckboxModelValue) => void = noControlChange;\n private onControlTouched: () => void = noControlTouch;\n\n protected readonly resolvedChecked = computed<boolean>(() => {\n if (this.cvaModeEnabled()) {\n return this.internalChecked();\n }\n\n return this.checked();\n });\n\n protected readonly resolvedDisabled = computed<boolean>(() => {\n if (this.cvaModeEnabled()) {\n return this.cvaDisabled();\n }\n\n return this.disabled();\n });\n\n protected readonly resolvedIndeterminate = computed<boolean>(() => {\n if (this.cvaModeEnabled()) {\n return this.internalIndeterminate();\n }\n\n return this.indeterminate();\n });\n\n public constructor() {\n effect(\n () => {\n if (this.cvaModeEnabled()) {\n return;\n }\n\n this.internalChecked.set(this.checked());\n this.internalIndeterminate.set(this.indeterminate());\n },\n { allowSignalWrites: true },\n );\n }\n\n public onBlur(): void {\n this.onControlTouched();\n }\n\n public onChange(event: unknown): void {\n const change = readTngCheckboxChange(event);\n if (change === null) {\n return;\n }\n\n if (this.readonly() || this.resolvedDisabled()) {\n return;\n }\n\n this.internalChecked.set(change.checked);\n this.internalIndeterminate.set(change.indeterminate);\n\n this.checkedChange.emit(change.checked);\n this.indeterminateChange.emit(change.indeterminate);\n this.onControlChange(change.indeterminate ? 'mixed' : change.checked);\n }\n\n public registerOnChange(fn: (value: TngCheckboxModelValue) => void): void {\n this.cvaModeEnabled.set(true);\n this.onControlChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.cvaModeEnabled.set(true);\n this.onControlTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.cvaModeEnabled.set(true);\n this.cvaDisabled.set(isDisabled);\n }\n\n public writeValue(value: unknown): void {\n this.cvaModeEnabled.set(true);\n const normalized = coerceTngCheckboxModelValue(value);\n this.internalChecked.set(normalized.checked);\n this.internalIndeterminate.set(normalized.indeterminate);\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export declare class TngChipsComponent {
2
+ readonly ariaLabel: import("@angular/core").InputSignal<string>;
3
+ }
4
+ //# sourceMappingURL=tng-chips.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-chips.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/chips/tng-chips.component.ts"],"names":[],"mappings":"AAGA,qBAMa,iBAAiB;IAC5B,SAAgB,SAAS,8CAA0B;CACpD"}
@@ -0,0 +1,16 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, input } from '@angular/core';
3
+ import { TngChips as TngChipsPrimitive } from '@tailng-ui/primitives';
4
+ let TngChipsComponent = class TngChipsComponent {
5
+ ariaLabel = input('Chips');
6
+ };
7
+ TngChipsComponent = __decorate([
8
+ Component({
9
+ selector: 'tng-chips',
10
+ imports: [TngChipsPrimitive],
11
+ templateUrl: './tng-chips.component.html',
12
+ styleUrl: './tng-chips.component.css',
13
+ })
14
+ ], TngChipsComponent);
15
+ export { TngChipsComponent };
16
+ //# sourceMappingURL=tng-chips.component.js.map