@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 @@
1
+ {"version":3,"file":"tng-multi-autocomplete.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/multi-autocomplete/tng-multi-autocomplete.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ContentChild,\n TemplateRef,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport {\n TngMultiAutocomplete,\n TngMultiAutocompleteChip,\n TngMultiAutocompleteContent,\n TngMultiAutocompleteListbox,\n TngMultiAutocompleteOption,\n TngMultiAutocompleteOverlay,\n TngMultiAutocompleteTrigger,\n} from '@tailng-ui/primitives';\n\nexport type TngMultiAutocompleteGetValue<O, V> = (opt: O) => V;\nexport type TngMultiAutocompleteGetLabel<O> = (opt: O) => string;\nexport type TngMultiAutocompleteIsDisabled<O> = (opt: O) => boolean;\nexport type TngMultiAutocompleteTrackBy<O> = (index: number, opt: O) => unknown;\n\nexport type TngMultiAutocompleteChipContext<O, V> = {\n $implicit: {\n option: O | null;\n value: V;\n label: string;\n removeItem: (item: V) => void;\n };\n};\n\nexport type TngMultiAutocompleteOptionContext<O, V> = {\n $implicit: {\n option: O;\n value: V;\n label: string;\n disabled: boolean;\n selected: boolean;\n active: boolean;\n };\n};\n\ntype SelectedItem<O, V> = {\n option: O | null;\n value: V;\n label: string;\n trackId: unknown;\n};\n\n@Component({\n selector: 'tng-multi-autocomplete',\n standalone: true,\n imports: [\n NgTemplateOutlet,\n TngMultiAutocompleteChip,\n TngMultiAutocompleteTrigger,\n TngMultiAutocompleteContent,\n TngMultiAutocompleteOverlay,\n TngMultiAutocompleteListbox,\n TngMultiAutocompleteOption,\n ],\n hostDirectives: [\n {\n directive: TngMultiAutocomplete,\n inputs: ['open', 'value', 'disabled', 'loading', 'invalid'],\n outputs: ['openChange', 'valueChange'],\n },\n ],\n templateUrl: './tng-multi-autocomplete.component.html',\n styleUrl: './tng-multi-autocomplete.component.css',\n})\nexport class TngMultiAutocompleteComponent<O = unknown, V = unknown> {\n protected readonly primitive = inject<TngMultiAutocomplete<V>>(TngMultiAutocomplete);\n\n readonly options = input<readonly O[]>([]);\n readonly placeholder = input<string>('Type to search…');\n readonly emptyText = input<string>('No matches');\n readonly ariaLabel = input<string>('Multi autocomplete');\n\n readonly getOptionValue = input<TngMultiAutocompleteGetValue<O, V>>(\n ((opt: unknown) => (opt as { value?: V })?.value) as TngMultiAutocompleteGetValue<O, V>,\n );\n readonly getOptionLabel = input<TngMultiAutocompleteGetLabel<O>>(\n ((opt: unknown) =>\n String(\n (opt as { label?: string; value?: unknown })?.label ??\n (opt as { value?: unknown })?.value ??\n opt,\n )) as TngMultiAutocompleteGetLabel<O>,\n );\n readonly isOptionDisabled = input<TngMultiAutocompleteIsDisabled<O>>(\n ((opt: unknown) =>\n !!(opt as { disabled?: boolean })?.disabled) as TngMultiAutocompleteIsDisabled<O>,\n );\n readonly trackBy = input<TngMultiAutocompleteTrackBy<O>>((_, opt) => {\n const o = opt as Record<string, unknown> | null | undefined;\n return o?.['value'] ?? o?.['id'] ?? opt;\n });\n\n @ContentChild('tngMultiAutocompleteChipTpl', { read: TemplateRef })\n chipTpl?: TemplateRef<TngMultiAutocompleteChipContext<O, V>>;\n\n @ContentChild('tngMultiAutocompleteOptionTpl', { read: TemplateRef })\n optionTpl?: TemplateRef<TngMultiAutocompleteOptionContext<O, V>>;\n\n protected readonly selectedItems = computed<readonly SelectedItem<O, V>[]>(() => {\n const values = this.primitive.value();\n const getLabel = this.getOptionLabel();\n\n return values.map((value) => {\n const option = this.findOption(value);\n return {\n option,\n value,\n label: option ? getLabel(option) : String(value),\n trackId: value as unknown,\n };\n });\n });\n\n protected readonly filteredOptions = computed<readonly O[]>(() => {\n const q = this.primitive.query().toLowerCase().trim();\n const list = this.options();\n const getLabel = this.getOptionLabel();\n const getValue = this.getOptionValue();\n const selected = this.primitive.value();\n\n const matches = q\n ? list.filter((opt) => getLabel(opt).toLowerCase().includes(q))\n : list;\n\n const pinnedSelected = matches.filter((opt) =>\n this.hasSelectedValue(getValue(opt), selected),\n );\n const remaining = matches.filter(\n (opt) => !this.hasSelectedValue(getValue(opt), selected),\n );\n\n return [...pinnedSelected, ...remaining];\n });\n\n protected chipContext(item: SelectedItem<O, V>): TngMultiAutocompleteChipContext<O, V> {\n return {\n $implicit: {\n option: item.option,\n value: item.value,\n label: item.label,\n removeItem: (value: V) => this.removeSelectedItem(value),\n },\n };\n }\n\n protected optionContext(opt: O): TngMultiAutocompleteOptionContext<O, V> {\n const value = this.getOptionValue()(opt);\n\n return {\n $implicit: {\n option: opt,\n value,\n label: this.getOptionLabel()(opt),\n disabled: this.isOptionDisabled()(opt),\n selected: this.hasSelectedValue(value),\n active: false,\n },\n };\n }\n\n addSelectedItem(item: V): void {\n this.primitive.add(item);\n }\n\n removeSelectedItem(item: V): void {\n this.primitive.remove(item);\n }\n\n toggleSelectedItem(item: V): void {\n this.primitive.toggle(item);\n }\n\n clear(): void {\n this.primitive.clear();\n }\n\n private findOption(value: V): O | null {\n const getValue = this.getOptionValue();\n\n for (const opt of this.options()) {\n if (Object.is(getValue(opt), value)) return opt;\n }\n\n return null;\n }\n\n private hasSelectedValue(\n value: V,\n selected: readonly V[] = this.primitive.value(),\n ): boolean {\n return selected.some((entry) => Object.is(entry, value));\n }\n}\n"]}
@@ -0,0 +1,49 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { TngMultiSelect } from '@tailng-ui/primitives';
3
+ export type TngMultiSelectGetValue<O, V> = (opt: O) => V;
4
+ export type TngMultiSelectGetLabel<O> = (opt: O) => string;
5
+ export type TngMultiSelectIsDisabled<O> = (opt: O) => boolean;
6
+ export type TngMultiSelectTrackBy<O> = (index: number, opt: O) => unknown;
7
+ export type TngMultiSelectValueContext<O, V> = {
8
+ $implicit: {
9
+ value: readonly V[];
10
+ options: readonly O[];
11
+ label: string;
12
+ removeItem: (item: V) => void;
13
+ };
14
+ };
15
+ export type TngMultiSelectOptionContext<O, V> = {
16
+ $implicit: {
17
+ option: O;
18
+ value: V;
19
+ label: string;
20
+ disabled: boolean;
21
+ selected: boolean;
22
+ active: boolean;
23
+ };
24
+ };
25
+ export declare class TngMultiSelectComponent<O = unknown, V = unknown> {
26
+ protected readonly primitive: TngMultiSelect<V>;
27
+ readonly options: import("@angular/core").InputSignal<readonly O[]>;
28
+ readonly placeholder: import("@angular/core").InputSignal<string>;
29
+ readonly getOptionValue: import("@angular/core").InputSignal<TngMultiSelectGetValue<O, V>>;
30
+ readonly getOptionLabel: import("@angular/core").InputSignal<TngMultiSelectGetLabel<O>>;
31
+ readonly isOptionDisabled: import("@angular/core").InputSignal<TngMultiSelectIsDisabled<O>>;
32
+ readonly trackBy: import("@angular/core").InputSignal<TngMultiSelectTrackBy<O>>;
33
+ readonly iconText: import("@angular/core").InputSignal<string>;
34
+ valueTpl?: TemplateRef<TngMultiSelectValueContext<O, V>>;
35
+ optionTpl?: TemplateRef<TngMultiSelectOptionContext<O, V>>;
36
+ protected readonly selectedOptions: import("@angular/core").Signal<readonly O[]>;
37
+ protected readonly selectedLabel: import("@angular/core").Signal<string>;
38
+ protected valueContext(): TngMultiSelectValueContext<O, V>;
39
+ protected optionContext(opt: O): TngMultiSelectOptionContext<O, V>;
40
+ /** Adds an item to the selection. Delegates to primitive. */
41
+ addSelectedItem(item: V): void;
42
+ /** Removes an item from the selection. Delegates to primitive. */
43
+ removeSelectedItem(item: V): void;
44
+ /** Toggles an item in the selection. Delegates to primitive. */
45
+ toggleSelectedItem(item: V): void;
46
+ /** Clears the selection. Delegates to primitive. */
47
+ clear(): void;
48
+ }
49
+ //# sourceMappingURL=tng-multiselect.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-multiselect.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/multiselect/tng-multiselect.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,WAAW,EAIZ,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,cAAc,EAQf,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,sBAAsB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACzD,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;AAC3D,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;AAC9D,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;AAE1E,MAAM,MAAM,0BAA0B,CAAC,CAAC,EAAE,CAAC,IAAI;IAC7C,SAAS,EAAE;QACT,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;KAC/B,CAAC;CACH,CAAC;AACF,MAAM,MAAM,2BAA2B,CAAC,CAAC,EAAE,CAAC,IAAI;IAC9C,SAAS,EAAE;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;CAC1G,CAAC;AAEF,qBAgCa,uBAAuB,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IAC3D,SAAS,CAAC,QAAQ,CAAC,SAAS,oBAA6C;IAEzE,QAAQ,CAAC,OAAO,oDAA2B;IAC3C,QAAQ,CAAC,WAAW,8CAA4B;IAEhD,QAAQ,CAAC,cAAc,oEAErB;IACF,QAAQ,CAAC,cAAc,iEAErB;IACF,QAAQ,CAAC,gBAAgB,mEAEvB;IACF,QAAQ,CAAC,OAAO,gEAA+D;IAE/E,QAAQ,CAAC,QAAQ,8CAAsB;IAEwB,QAAQ,CAAC,EAAE,WAAW,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxD,SAAS,CAAC,EAAE,WAAW,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAE3H,SAAS,CAAC,QAAQ,CAAC,eAAe,+CAS/B;IAEH,SAAS,CAAC,QAAQ,CAAC,aAAa,yCAI7B;IAEH,SAAS,CAAC,YAAY,IAAI,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC;IAc1D,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,GAAG,2BAA2B,CAAC,CAAC,EAAE,CAAC,CAAC;IAUlE,6DAA6D;IAC7D,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAI9B,kEAAkE;IAClE,kBAAkB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAIjC,gEAAgE;IAChE,kBAAkB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAIjC,oDAAoD;IACpD,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,112 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, ContentChild, TemplateRef, computed, inject, input, } from '@angular/core';
3
+ import { NgTemplateOutlet } from '@angular/common';
4
+ import { TngMultiSelect, TngSelectTrigger, TngSelectValue, TngSelectIcon, TngSelectContent, TngSelectOverlay, TngMultiSelectListbox, TngMultiSelectOption, } from '@tailng-ui/primitives';
5
+ let TngMultiSelectComponent = class TngMultiSelectComponent {
6
+ primitive = inject(TngMultiSelect);
7
+ options = input([]);
8
+ placeholder = input('Select…');
9
+ getOptionValue = input(((opt) => opt?.value));
10
+ getOptionLabel = input(((opt) => String(opt?.label ?? opt?.value ?? opt)));
11
+ isOptionDisabled = input(((opt) => !!opt?.disabled));
12
+ trackBy = input((_, opt) => opt);
13
+ iconText = input('▾');
14
+ valueTpl;
15
+ optionTpl;
16
+ selectedOptions = computed(() => {
17
+ const v = this.primitive.value() ?? [];
18
+ const getV = this.getOptionValue();
19
+ const result = [];
20
+ for (const opt of this.options()) {
21
+ const optVal = getV(opt);
22
+ if (v.some((x) => Object.is(x, optVal)))
23
+ result.push(opt);
24
+ }
25
+ return result;
26
+ });
27
+ selectedLabel = computed(() => {
28
+ const opts = this.selectedOptions();
29
+ if (opts.length === 0)
30
+ return this.placeholder();
31
+ return opts.map((o) => this.getOptionLabel()(o)).join(', ');
32
+ });
33
+ valueContext() {
34
+ const opts = this.selectedOptions();
35
+ const v = this.primitive.value() ?? [];
36
+ const label = opts.length > 0 ? opts.map((o) => this.getOptionLabel()(o)).join(', ') : this.placeholder();
37
+ return {
38
+ $implicit: {
39
+ value: v,
40
+ options: opts,
41
+ label,
42
+ removeItem: (item) => this.removeSelectedItem(item),
43
+ },
44
+ };
45
+ }
46
+ optionContext(opt) {
47
+ const optVal = this.getOptionValue()(opt);
48
+ const label = this.getOptionLabel()(opt);
49
+ const disabled = this.isOptionDisabled()(opt);
50
+ const v = this.primitive.value() ?? [];
51
+ const selected = v.some((x) => Object.is(x, optVal));
52
+ return { $implicit: { option: opt, value: optVal, label, disabled, selected, active: false } };
53
+ }
54
+ /** Adds an item to the selection. Delegates to primitive. */
55
+ addSelectedItem(item) {
56
+ this.primitive.addSelectedItem(item);
57
+ }
58
+ /** Removes an item from the selection. Delegates to primitive. */
59
+ removeSelectedItem(item) {
60
+ this.primitive.removeSelectedItem(item);
61
+ }
62
+ /** Toggles an item in the selection. Delegates to primitive. */
63
+ toggleSelectedItem(item) {
64
+ this.primitive.toggleSelectedItem(item);
65
+ }
66
+ /** Clears the selection. Delegates to primitive. */
67
+ clear() {
68
+ this.primitive.clear();
69
+ }
70
+ };
71
+ __decorate([
72
+ ContentChild('tngMultiSelectValueTpl', { read: TemplateRef })
73
+ ], TngMultiSelectComponent.prototype, "valueTpl", void 0);
74
+ __decorate([
75
+ ContentChild('tngMultiSelectOptionTpl', { read: TemplateRef })
76
+ ], TngMultiSelectComponent.prototype, "optionTpl", void 0);
77
+ TngMultiSelectComponent = __decorate([
78
+ Component({
79
+ selector: 'tng-multiselect',
80
+ standalone: true,
81
+ imports: [
82
+ NgTemplateOutlet,
83
+ TngSelectTrigger,
84
+ TngSelectValue,
85
+ TngSelectIcon,
86
+ TngSelectContent,
87
+ TngSelectOverlay,
88
+ TngMultiSelectListbox,
89
+ TngMultiSelectOption,
90
+ ],
91
+ hostDirectives: [
92
+ {
93
+ directive: TngMultiSelect,
94
+ inputs: [
95
+ 'open',
96
+ 'value',
97
+ 'disabled',
98
+ 'loading',
99
+ 'invalid',
100
+ 'labelId',
101
+ 'descriptionId',
102
+ 'errorId',
103
+ ],
104
+ outputs: ['openChange', 'valueChange'],
105
+ },
106
+ ],
107
+ templateUrl: './tng-multiselect.component.html',
108
+ styleUrl: './tng-multiselect.component.css',
109
+ })
110
+ ], TngMultiSelectComponent);
111
+ export { TngMultiSelectComponent };
112
+ //# sourceMappingURL=tng-multiselect.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-multiselect.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/multiselect/tng-multiselect.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ContentChild,\n TemplateRef,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport {\n TngMultiSelect,\n TngSelectTrigger,\n TngSelectValue,\n TngSelectIcon,\n TngSelectContent,\n TngSelectOverlay,\n TngMultiSelectListbox,\n TngMultiSelectOption,\n} from '@tailng-ui/primitives';\n\nexport type TngMultiSelectGetValue<O, V> = (opt: O) => V;\nexport type TngMultiSelectGetLabel<O> = (opt: O) => string;\nexport type TngMultiSelectIsDisabled<O> = (opt: O) => boolean;\nexport type TngMultiSelectTrackBy<O> = (index: number, opt: O) => unknown;\n\nexport type TngMultiSelectValueContext<O, V> = {\n $implicit: {\n value: readonly V[];\n options: readonly O[];\n label: string;\n removeItem: (item: V) => void;\n };\n};\nexport type TngMultiSelectOptionContext<O, V> = {\n $implicit: { option: O; value: V; label: string; disabled: boolean; selected: boolean; active: boolean };\n};\n\n@Component({\n selector: 'tng-multiselect',\n standalone: true,\n imports: [\n NgTemplateOutlet,\n TngSelectTrigger,\n TngSelectValue,\n TngSelectIcon,\n TngSelectContent,\n TngSelectOverlay,\n TngMultiSelectListbox,\n TngMultiSelectOption,\n ],\n hostDirectives: [\n {\n directive: TngMultiSelect,\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-multiselect.component.html',\n styleUrl: './tng-multiselect.component.css',\n})\nexport class TngMultiSelectComponent<O = unknown, V = unknown> {\n protected readonly primitive = inject<TngMultiSelect<V>>(TngMultiSelect);\n\n readonly options = input<readonly O[]>([]);\n readonly placeholder = input<string>('Select…');\n\n readonly getOptionValue = input<TngMultiSelectGetValue<O, V>>(\n ((opt: unknown) => (opt as { value?: V })?.value) as TngMultiSelectGetValue<O, V>,\n );\n readonly getOptionLabel = input<TngMultiSelectGetLabel<O>>(\n ((opt: unknown) => String((opt as { label?: string; value?: unknown })?.label ?? (opt as { value?: unknown })?.value ?? opt)) as TngMultiSelectGetLabel<O>,\n );\n readonly isOptionDisabled = input<TngMultiSelectIsDisabled<O>>(\n ((opt: unknown) => !!(opt as { disabled?: boolean })?.disabled) as TngMultiSelectIsDisabled<O>,\n );\n readonly trackBy = input<TngMultiSelectTrackBy<O>>((_, opt) => opt as unknown);\n\n readonly iconText = input<string>('▾');\n\n @ContentChild('tngMultiSelectValueTpl', { read: TemplateRef }) valueTpl?: TemplateRef<TngMultiSelectValueContext<O, V>>;\n @ContentChild('tngMultiSelectOptionTpl', { read: TemplateRef }) optionTpl?: TemplateRef<TngMultiSelectOptionContext<O, V>>;\n\n protected readonly selectedOptions = computed<readonly O[]>(() => {\n const v = this.primitive.value() ?? [];\n const getV = this.getOptionValue();\n const result: O[] = [];\n for (const opt of this.options()) {\n const optVal = getV(opt);\n if (v.some((x) => Object.is(x, optVal))) result.push(opt);\n }\n return result;\n });\n\n protected readonly selectedLabel = computed<string>(() => {\n const opts = this.selectedOptions();\n if (opts.length === 0) return this.placeholder();\n return opts.map((o) => this.getOptionLabel()(o)).join(', ');\n });\n\n protected valueContext(): TngMultiSelectValueContext<O, V> {\n const opts = this.selectedOptions();\n const v = this.primitive.value() ?? [];\n const label = opts.length > 0 ? opts.map((o) => this.getOptionLabel()(o)).join(', ') : this.placeholder();\n return {\n $implicit: {\n value: v,\n options: opts,\n label,\n removeItem: (item: V) => this.removeSelectedItem(item),\n },\n };\n }\n\n protected optionContext(opt: O): TngMultiSelectOptionContext<O, V> {\n const optVal = this.getOptionValue()(opt);\n const label = this.getOptionLabel()(opt);\n const disabled = this.isOptionDisabled()(opt);\n const v = this.primitive.value() ?? [];\n const selected = v.some((x) => Object.is(x, optVal));\n\n return { $implicit: { option: opt, value: optVal, label, disabled, selected, active: false } };\n }\n\n /** Adds an item to the selection. Delegates to primitive. */\n addSelectedItem(item: V): void {\n this.primitive.addSelectedItem(item);\n }\n\n /** Removes an item from the selection. Delegates to primitive. */\n removeSelectedItem(item: V): void {\n this.primitive.removeSelectedItem(item);\n }\n\n /** Toggles an item in the selection. Delegates to primitive. */\n toggleSelectedItem(item: V): void {\n this.primitive.toggleSelectedItem(item);\n }\n\n /** Clears the selection. Delegates to primitive. */\n clear(): void {\n this.primitive.clear();\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ export declare function readTngRadioChecked(event: unknown): boolean | null;
2
+ export declare class TngRadioComponent {
3
+ readonly ariaDescribedBy: import("@angular/core").InputSignal<string | null>;
4
+ readonly checked: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
5
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
6
+ readonly name: import("@angular/core").InputSignal<string | null>;
7
+ readonly required: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
8
+ readonly value: import("@angular/core").InputSignal<string>;
9
+ readonly checkedChange: import("@angular/core").OutputEmitterRef<boolean>;
10
+ onChange(event: unknown): void;
11
+ }
12
+ //# sourceMappingURL=tng-radio.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-radio.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/radio/tng-radio.component.ts"],"names":[],"mappings":"AAGA,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAWlE;AAED,qBAMa,iBAAiB;IAC5B,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,OAAO,8EAEpB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,qDAA8B;IAClD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,8CAAuB;IAE5C,SAAgB,aAAa,oDAAqB;IAE3C,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAQtC"}
@@ -0,0 +1,45 @@
1
+ import { __decorate } from "tslib";
2
+ import { booleanAttribute, Component, input, output } from '@angular/core';
3
+ import { TngRadio as TngRadioPrimitive } from '@tailng-ui/primitives';
4
+ export function readTngRadioChecked(event) {
5
+ if (!(event instanceof Event)) {
6
+ return null;
7
+ }
8
+ const target = event.target;
9
+ if (!(target instanceof HTMLInputElement)) {
10
+ return null;
11
+ }
12
+ return target.checked;
13
+ }
14
+ let TngRadioComponent = class TngRadioComponent {
15
+ ariaDescribedBy = input(null);
16
+ checked = input(false, {
17
+ transform: booleanAttribute,
18
+ });
19
+ disabled = input(false, {
20
+ transform: booleanAttribute,
21
+ });
22
+ name = input(null);
23
+ required = input(false, {
24
+ transform: booleanAttribute,
25
+ });
26
+ value = input('on');
27
+ checkedChange = output();
28
+ onChange(event) {
29
+ const checked = readTngRadioChecked(event);
30
+ if (checked === null) {
31
+ return;
32
+ }
33
+ this.checkedChange.emit(checked);
34
+ }
35
+ };
36
+ TngRadioComponent = __decorate([
37
+ Component({
38
+ selector: 'tng-radio',
39
+ imports: [TngRadioPrimitive],
40
+ templateUrl: './tng-radio.component.html',
41
+ styleUrl: './tng-radio.component.css',
42
+ })
43
+ ], TngRadioComponent);
44
+ export { TngRadioComponent };
45
+ //# sourceMappingURL=tng-radio.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-radio.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/radio/tng-radio.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,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,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAQM,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IACZ,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,IAAI,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAClC,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;IAE3C,QAAQ,CAAC,KAAc;QAC5B,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AAxBY,iBAAiB;IAN7B,SAAS,CAAC;QACT,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,CAAC,iBAAiB,CAAC;QAC5B,WAAW,EAAE,4BAA4B;QACzC,QAAQ,EAAE,2BAA2B;KACtC,CAAC;GACW,iBAAiB,CAwB7B","sourcesContent":["import { booleanAttribute, Component, input, output } from '@angular/core';\nimport { TngRadio as TngRadioPrimitive } from '@tailng-ui/primitives';\n\nexport function readTngRadioChecked(event: unknown): boolean | 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 target.checked;\n}\n\n@Component({\n selector: 'tng-radio',\n imports: [TngRadioPrimitive],\n templateUrl: './tng-radio.component.html',\n styleUrl: './tng-radio.component.css',\n})\nexport class TngRadioComponent {\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 name = input<string | null>(null);\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\n public onChange(event: unknown): void {\n const checked = readTngRadioChecked(event);\n if (checked === null) {\n return;\n }\n\n this.checkedChange.emit(checked);\n }\n}\n"]}
@@ -0,0 +1,40 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { TngSelect } from '@tailng-ui/primitives';
3
+ export type TngSelectGetValue<O, V> = (opt: O) => V;
4
+ export type TngSelectGetLabel<O> = (opt: O) => string;
5
+ export type TngSelectIsDisabled<O> = (opt: O) => boolean;
6
+ export type TngSelectTrackBy<O> = (index: number, opt: O) => unknown;
7
+ export type TngSelectValueContext<O, V> = {
8
+ $implicit: {
9
+ value: V | readonly V[] | null;
10
+ option: O | null;
11
+ label: string;
12
+ };
13
+ };
14
+ export type TngSelectOptionContext<O, V> = {
15
+ $implicit: {
16
+ option: O;
17
+ value: V;
18
+ label: string;
19
+ disabled: boolean;
20
+ selected: boolean;
21
+ active: boolean;
22
+ };
23
+ };
24
+ export declare class TngSelectComponent<O = unknown, V = unknown> {
25
+ protected readonly primitive: TngSelect<V>;
26
+ readonly options: import("@angular/core").InputSignal<readonly O[]>;
27
+ readonly placeholder: import("@angular/core").InputSignal<string>;
28
+ readonly getOptionValue: import("@angular/core").InputSignal<TngSelectGetValue<O, V>>;
29
+ readonly getOptionLabel: import("@angular/core").InputSignal<TngSelectGetLabel<O>>;
30
+ readonly isOptionDisabled: import("@angular/core").InputSignal<TngSelectIsDisabled<O>>;
31
+ readonly trackBy: import("@angular/core").InputSignal<TngSelectTrackBy<O>>;
32
+ readonly iconText: import("@angular/core").InputSignal<string>;
33
+ valueTpl?: TemplateRef<TngSelectValueContext<O, V>>;
34
+ optionTpl?: TemplateRef<TngSelectOptionContext<O, V>>;
35
+ protected readonly selectedOption: import("@angular/core").Signal<O | null>;
36
+ protected readonly selectedLabel: import("@angular/core").Signal<string>;
37
+ protected valueContext(): TngSelectValueContext<O, V>;
38
+ protected optionContext(opt: O): TngSelectOptionContext<O, V>;
39
+ }
40
+ //# sourceMappingURL=tng-select.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-select.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/select/tng-select.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,WAAW,EAIZ,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,SAAS,EAQV,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACpD,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;AACtD,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;AACzD,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;AAGrE,MAAM,MAAM,qBAAqB,CAAC,CAAC,EAAE,CAAC,IAAI;IACxC,SAAS,EAAE;QAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAChF,CAAC;AACF,MAAM,MAAM,sBAAsB,CAAC,CAAC,EAAE,CAAC,IAAI;IACzC,SAAS,EAAE;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;CAC1G,CAAC;AAEF,qBAiCa,kBAAkB,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IAGtD,SAAS,CAAC,QAAQ,CAAC,SAAS,eAAmC;IAG/D,QAAQ,CAAC,OAAO,oDAA2B;IAC3C,QAAQ,CAAC,WAAW,8CAA4B;IAEhD,QAAQ,CAAC,cAAc,+DAErB;IACF,QAAQ,CAAC,cAAc,4DAErB;IACF,QAAQ,CAAC,gBAAgB,8DAEvB;IACF,QAAQ,CAAC,OAAO,2DAA0D;IAG1E,QAAQ,CAAC,QAAQ,8CAAsB;IAGmB,QAAQ,CAAC,EAAE,WAAW,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,SAAS,CAAC,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAGjH,SAAS,CAAC,QAAQ,CAAC,cAAc,2CAS9B;IAEH,SAAS,CAAC,QAAQ,CAAC,aAAa,yCAG7B;IAGH,SAAS,CAAC,YAAY,IAAI,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC;IAOrD,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,GAAG,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC;CAa9D"}
@@ -0,0 +1,98 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, ContentChild, TemplateRef, computed, inject, input, } from '@angular/core';
3
+ import { NgTemplateOutlet } from '@angular/common';
4
+ import { TngSelect, TngSelectTrigger, TngSelectValue, TngSelectIcon, TngSelectContent, TngSelectOverlay, TngSelectListbox, TngSelectOption, } from '@tailng-ui/primitives';
5
+ let TngSelectComponent = class TngSelectComponent {
6
+ // Access primitive instance for reading value/open state inside template.
7
+ // (This works because the primitive is attached via hostDirectives.)
8
+ primitive = inject(TngSelect);
9
+ // ----- data / accessors (recommended API) -----
10
+ options = input([]);
11
+ placeholder = input('Select…');
12
+ getOptionValue = input(((opt) => opt?.value));
13
+ getOptionLabel = input(((opt) => String(opt?.label ?? opt?.value ?? opt)));
14
+ isOptionDisabled = input(((opt) => !!opt?.disabled));
15
+ trackBy = input((_, opt) => opt);
16
+ // ----- optional: icon text/slot (still headless) -----
17
+ iconText = input('▾');
18
+ // ----- slots (optional) -----
19
+ valueTpl;
20
+ optionTpl;
21
+ // ----- derived state for default rendering -----
22
+ selectedOption = computed(() => {
23
+ const v = this.primitive.value();
24
+ if (v === null)
25
+ return null;
26
+ const getV = this.getOptionValue();
27
+ for (const opt of this.options()) {
28
+ if (Object.is(getV(opt), v))
29
+ return opt;
30
+ }
31
+ return null;
32
+ });
33
+ selectedLabel = computed(() => {
34
+ const opt = this.selectedOption();
35
+ return opt ? this.getOptionLabel()(opt) : this.placeholder();
36
+ });
37
+ // Context helpers for templates
38
+ valueContext() {
39
+ const v = this.primitive.value();
40
+ const opt = this.selectedOption();
41
+ const label = opt ? this.getOptionLabel()(opt) : this.placeholder();
42
+ return { $implicit: { value: v, option: opt, label } };
43
+ }
44
+ optionContext(opt) {
45
+ const v = this.getOptionValue()(opt);
46
+ const label = this.getOptionLabel()(opt);
47
+ const disabled = this.isOptionDisabled()(opt);
48
+ const selected = Object.is(this.primitive.value(), v);
49
+ // “active” styling is handled by listbox primitive via data-active on the element,
50
+ // but we include it in case the consumer’s template wants it.
51
+ // (We can’t reliably compute active here without reading listbox controller state.)
52
+ const active = false;
53
+ return { $implicit: { option: opt, value: v, label, disabled, selected, active } };
54
+ }
55
+ };
56
+ __decorate([
57
+ ContentChild('tngSelectValueTpl', { read: TemplateRef })
58
+ ], TngSelectComponent.prototype, "valueTpl", void 0);
59
+ __decorate([
60
+ ContentChild('tngSelectOptionTpl', { read: TemplateRef })
61
+ ], TngSelectComponent.prototype, "optionTpl", void 0);
62
+ TngSelectComponent = __decorate([
63
+ Component({
64
+ selector: 'tng-select',
65
+ standalone: true,
66
+ imports: [
67
+ NgTemplateOutlet,
68
+ // primitives used in template
69
+ TngSelectTrigger,
70
+ TngSelectValue,
71
+ TngSelectIcon,
72
+ TngSelectContent,
73
+ TngSelectOverlay,
74
+ TngSelectListbox,
75
+ TngSelectOption,
76
+ ],
77
+ // Attach primitive directive to host + re-expose its controlled API.
78
+ hostDirectives: [
79
+ {
80
+ directive: TngSelect,
81
+ inputs: [
82
+ 'open',
83
+ 'value',
84
+ 'disabled',
85
+ 'loading',
86
+ 'invalid',
87
+ 'labelId',
88
+ 'descriptionId',
89
+ 'errorId',
90
+ ],
91
+ outputs: ['openChange', 'valueChange'],
92
+ },
93
+ ],
94
+ templateUrl: './tng-select.component.html',
95
+ })
96
+ ], TngSelectComponent);
97
+ export { TngSelectComponent };
98
+ //# sourceMappingURL=tng-select.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-select.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/select/tng-select.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ContentChild,\n TemplateRef,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport {\n TngSelect,\n TngSelectTrigger,\n TngSelectValue,\n TngSelectIcon,\n TngSelectContent,\n TngSelectOverlay,\n TngSelectListbox,\n TngSelectOption,\n} from '@tailng-ui/primitives';\n\nexport type TngSelectGetValue<O, V> = (opt: O) => V;\nexport type TngSelectGetLabel<O> = (opt: O) => string;\nexport type TngSelectIsDisabled<O> = (opt: O) => boolean;\nexport type TngSelectTrackBy<O> = (index: number, opt: O) => unknown;\n\n// Slot templates (optional)\nexport type TngSelectValueContext<O, V> = {\n $implicit: { value: V | readonly V[] | null; option: O | null; label: string };\n};\nexport type TngSelectOptionContext<O, V> = {\n $implicit: { option: O; value: V; label: string; disabled: boolean; selected: boolean; active: boolean };\n};\n\n@Component({\n selector: 'tng-select',\n standalone: true,\n imports: [\n NgTemplateOutlet,\n // primitives used in template\n TngSelectTrigger,\n TngSelectValue,\n TngSelectIcon,\n TngSelectContent,\n TngSelectOverlay,\n TngSelectListbox,\n TngSelectOption,\n ],\n // Attach primitive directive to host + re-expose its controlled API.\n hostDirectives: [\n {\n directive: TngSelect,\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-select.component.html',\n})\nexport class TngSelectComponent<O = unknown, V = unknown> {\n // Access primitive instance for reading value/open state inside template.\n // (This works because the primitive is attached via hostDirectives.)\n protected readonly primitive = inject<TngSelect<V>>(TngSelect);\n\n // ----- data / accessors (recommended API) -----\n readonly options = input<readonly O[]>([]);\n readonly placeholder = input<string>('Select…');\n\n readonly getOptionValue = input<TngSelectGetValue<O, V>>(\n ((opt: any) => opt?.value) as TngSelectGetValue<O, V>,\n );\n readonly getOptionLabel = input<TngSelectGetLabel<O>>(\n ((opt: any) => String(opt?.label ?? opt?.value ?? opt)) as TngSelectGetLabel<O>,\n );\n readonly isOptionDisabled = input<TngSelectIsDisabled<O>>(\n ((opt: any) => !!opt?.disabled) as TngSelectIsDisabled<O>,\n );\n readonly trackBy = input<TngSelectTrackBy<O>>((_, opt) => opt as unknown);\n\n // ----- optional: icon text/slot (still headless) -----\n readonly iconText = input<string>('▾');\n\n // ----- slots (optional) -----\n @ContentChild('tngSelectValueTpl', { read: TemplateRef }) valueTpl?: TemplateRef<TngSelectValueContext<O, V>>;\n @ContentChild('tngSelectOptionTpl', { read: TemplateRef }) optionTpl?: TemplateRef<TngSelectOptionContext<O, V>>;\n\n // ----- derived state for default rendering -----\n protected readonly selectedOption = computed<O | null>(() => {\n const v = this.primitive.value();\n if (v === null) return null;\n\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 // Context helpers for templates\n protected valueContext(): TngSelectValueContext<O, V> {\n const v = this.primitive.value();\n const opt = this.selectedOption();\n const label = opt ? this.getOptionLabel()(opt) : this.placeholder();\n return { $implicit: { value: v, option: opt, label } };\n }\n\n protected optionContext(opt: O): TngSelectOptionContext<O, V> {\n const v = this.getOptionValue()(opt);\n const label = this.getOptionLabel()(opt);\n const disabled = this.isOptionDisabled()(opt);\n const selected = Object.is(this.primitive.value(), v);\n\n // “active” styling is handled by listbox primitive via data-active on the element,\n // but we include it in case the consumer’s template wants it.\n // (We can’t reliably compute active here without reading listbox controller state.)\n const active = false;\n\n return { $implicit: { option: opt, value: v, label, disabled, selected, active } };\n }\n}"]}
@@ -0,0 +1,25 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ export type TngSelectTriggerTplContext<O, V> = Readonly<{
3
+ value: V | null;
4
+ option: O | null;
5
+ label: string;
6
+ placeholder: string;
7
+ open: boolean;
8
+ disabled: boolean;
9
+ }>;
10
+ export declare class TngSelectTriggerTpl<O = unknown, V = unknown> {
11
+ readonly tpl: TemplateRef<any>;
12
+ }
13
+ export type TngSelectOptionTplContext<O, V> = Readonly<{
14
+ $implicit: O;
15
+ option: O;
16
+ value: V;
17
+ label: string;
18
+ selected: boolean;
19
+ active: boolean;
20
+ disabled: boolean;
21
+ }>;
22
+ export declare class TngSelectOptionTpl<O = unknown, V = unknown> {
23
+ readonly tpl: TemplateRef<any>;
24
+ }
25
+ //# sourceMappingURL=tng-select.slots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-select.slots.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/select/tng-select.slots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAU,MAAM,eAAe,CAAC;AAE/D,MAAM,MAAM,0BAA0B,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC;IACtD,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAChB,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH,qBAIa,mBAAmB,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IACvD,QAAQ,CAAC,GAAG,mBAAyD;CACtE;AAED,MAAM,MAAM,yBAAyB,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC;IACrD,SAAS,EAAE,CAAC,CAAC;IACb,MAAM,EAAE,CAAC,CAAC;IACV,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH,qBAIa,kBAAkB,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IACtD,QAAQ,CAAC,GAAG,mBAAwD;CACrE"}
@@ -0,0 +1,23 @@
1
+ import { __decorate } from "tslib";
2
+ import { Directive, TemplateRef, inject } from '@angular/core';
3
+ let TngSelectTriggerTpl = class TngSelectTriggerTpl {
4
+ tpl = inject((TemplateRef));
5
+ };
6
+ TngSelectTriggerTpl = __decorate([
7
+ Directive({
8
+ selector: 'ng-template[tngSelectTriggerTpl]',
9
+ standalone: true,
10
+ })
11
+ ], TngSelectTriggerTpl);
12
+ export { TngSelectTriggerTpl };
13
+ let TngSelectOptionTpl = class TngSelectOptionTpl {
14
+ tpl = inject((TemplateRef));
15
+ };
16
+ TngSelectOptionTpl = __decorate([
17
+ Directive({
18
+ selector: 'ng-template[tngSelectOptionTpl]',
19
+ standalone: true,
20
+ })
21
+ ], TngSelectOptionTpl);
22
+ export { TngSelectOptionTpl };
23
+ //# sourceMappingURL=tng-select.slots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-select.slots.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/select/tng-select.slots.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAexD,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IACrB,GAAG,GAAG,MAAM,CAAC,CAAA,WAA6C,CAAA,CAAC,CAAC;CACtE,CAAA;AAFY,mBAAmB;IAJ/B,SAAS,CAAC;QACT,QAAQ,EAAE,kCAAkC;QAC5C,UAAU,EAAE,IAAI;KACjB,CAAC;GACW,mBAAmB,CAE/B;;AAgBM,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACpB,GAAG,GAAG,MAAM,CAAC,CAAA,WAA4C,CAAA,CAAC,CAAC;CACrE,CAAA;AAFY,kBAAkB;IAJ9B,SAAS,CAAC;QACT,QAAQ,EAAE,iCAAiC;QAC3C,UAAU,EAAE,IAAI;KACjB,CAAC;GACW,kBAAkB,CAE9B","sourcesContent":["import { Directive, TemplateRef, inject } from '@angular/core';\n\nexport type TngSelectTriggerTplContext<O, V> = Readonly<{\n value: V | null;\n option: O | null;\n label: string;\n placeholder: string;\n open: boolean;\n disabled: boolean;\n}>;\n\n@Directive({\n selector: 'ng-template[tngSelectTriggerTpl]',\n standalone: true,\n})\nexport class TngSelectTriggerTpl<O = unknown, V = unknown> {\n readonly tpl = inject(TemplateRef<TngSelectTriggerTplContext<O, V>>);\n}\n\nexport type TngSelectOptionTplContext<O, V> = Readonly<{\n $implicit: O;\n option: O;\n value: V;\n label: string;\n selected: boolean;\n active: boolean;\n disabled: boolean;\n}>;\n\n@Directive({\n selector: 'ng-template[tngSelectOptionTpl]',\n standalone: true,\n})\nexport class TngSelectOptionTpl<O = unknown, V = unknown> {\n readonly tpl = inject(TemplateRef<TngSelectOptionTplContext<O, V>>);\n}"]}
@@ -0,0 +1,11 @@
1
+ export declare function readTngSliderEventValue(event: unknown): number | null;
2
+ export declare class TngSliderComponent {
3
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
4
+ readonly max: import("@angular/core").InputSignalWithTransform<number, string | number>;
5
+ readonly min: import("@angular/core").InputSignalWithTransform<number, string | number>;
6
+ readonly step: import("@angular/core").InputSignalWithTransform<number, string | number>;
7
+ readonly value: import("@angular/core").InputSignalWithTransform<number, string | number>;
8
+ readonly valueChange: import("@angular/core").OutputEmitterRef<number>;
9
+ onInput(event: unknown): void;
10
+ }
11
+ //# sourceMappingURL=tng-slider.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-slider.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/slider/tng-slider.component.ts"],"names":[],"mappings":"AAQA,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAWrE;AAED,qBAMa,kBAAkB;IAC7B,SAAgB,QAAQ,8EAErB;IACH,SAAgB,GAAG,4EAGhB;IACH,SAAgB,GAAG,4EAGhB;IACH,SAAgB,IAAI,4EAGjB;IACH,SAAgB,KAAK,4EAGlB;IAEH,SAAgB,WAAW,mDAAoB;IAExC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAQrC"}
@@ -0,0 +1,48 @@
1
+ import { __decorate } from "tslib";
2
+ import { booleanAttribute, Component, input, output } from '@angular/core';
3
+ import { normalizeTngSliderMax, normalizeTngSliderMin, normalizeTngSliderStep, TngSlider as TngSliderPrimitive, } from '@tailng-ui/primitives';
4
+ export function readTngSliderEventValue(event) {
5
+ if (!(event instanceof Event)) {
6
+ return null;
7
+ }
8
+ const target = event.target;
9
+ if (!(target instanceof HTMLInputElement)) {
10
+ return null;
11
+ }
12
+ return Number(target.value);
13
+ }
14
+ let TngSliderComponent = class TngSliderComponent {
15
+ disabled = input(false, {
16
+ transform: booleanAttribute,
17
+ });
18
+ max = input(100, {
19
+ transform: (value) => normalizeTngSliderMax(typeof value === 'number' ? value : Number(value)),
20
+ });
21
+ min = input(0, {
22
+ transform: (value) => normalizeTngSliderMin(typeof value === 'number' ? value : Number(value)),
23
+ });
24
+ step = input(1, {
25
+ transform: (value) => normalizeTngSliderStep(typeof value === 'number' ? value : Number(value)),
26
+ });
27
+ value = input(0, {
28
+ transform: (value) => typeof value === 'number' ? value : Number(value),
29
+ });
30
+ valueChange = output();
31
+ onInput(event) {
32
+ const nextValue = readTngSliderEventValue(event);
33
+ if (nextValue === null) {
34
+ return;
35
+ }
36
+ this.valueChange.emit(nextValue);
37
+ }
38
+ };
39
+ TngSliderComponent = __decorate([
40
+ Component({
41
+ selector: 'tng-slider',
42
+ imports: [TngSliderPrimitive],
43
+ templateUrl: './tng-slider.component.html',
44
+ styleUrl: './tng-slider.component.css',
45
+ })
46
+ ], TngSliderComponent);
47
+ export { TngSliderComponent };
48
+ //# sourceMappingURL=tng-slider.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-slider.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/slider/tng-slider.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,IAAI,kBAAkB,GAChC,MAAM,uBAAuB,CAAC;AAE/B,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,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,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAQM,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACb,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,GAAG,GAAG,KAAK,CAA0B,GAAG,EAAE;QACxD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAC5C,qBAAqB,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC3E,CAAC,CAAC;IACa,GAAG,GAAG,KAAK,CAA0B,CAAC,EAAE;QACtD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAC5C,qBAAqB,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC3E,CAAC,CAAC;IACa,IAAI,GAAG,KAAK,CAA0B,CAAC,EAAE;QACvD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAC5C,sBAAsB,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC5E,CAAC,CAAC;IACa,KAAK,GAAG,KAAK,CAA0B,CAAC,EAAE;QACxD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAC5C,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KACpD,CAAC,CAAC;IAEa,WAAW,GAAG,MAAM,EAAU,CAAC;IAExC,OAAO,CAAC,KAAc;QAC3B,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AA/BY,kBAAkB;IAN9B,SAAS,CAAC;QACT,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,CAAC,kBAAkB,CAAC;QAC7B,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE,4BAA4B;KACvC,CAAC;GACW,kBAAkB,CA+B9B","sourcesContent":["import { booleanAttribute, Component, input, output } from '@angular/core';\nimport {\n normalizeTngSliderMax,\n normalizeTngSliderMin,\n normalizeTngSliderStep,\n TngSlider as TngSliderPrimitive,\n} from '@tailng-ui/primitives';\n\nexport function readTngSliderEventValue(event: unknown): number | 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 Number(target.value);\n}\n\n@Component({\n selector: 'tng-slider',\n imports: [TngSliderPrimitive],\n templateUrl: './tng-slider.component.html',\n styleUrl: './tng-slider.component.css',\n})\nexport class TngSliderComponent {\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly max = input<number, number | string>(100, {\n transform: (value: number | string): number =>\n normalizeTngSliderMax(typeof value === 'number' ? value : Number(value)),\n });\n public readonly min = input<number, number | string>(0, {\n transform: (value: number | string): number =>\n normalizeTngSliderMin(typeof value === 'number' ? value : Number(value)),\n });\n public readonly step = input<number, number | string>(1, {\n transform: (value: number | string): number =>\n normalizeTngSliderStep(typeof value === 'number' ? value : Number(value)),\n });\n public readonly value = input<number, number | string>(0, {\n transform: (value: number | string): number =>\n typeof value === 'number' ? value : Number(value),\n });\n\n public readonly valueChange = output<number>();\n\n public onInput(event: unknown): void {\n const nextValue = readTngSliderEventValue(event);\n if (nextValue === null) {\n return;\n }\n\n this.valueChange.emit(nextValue);\n }\n}\n"]}
@@ -0,0 +1,18 @@
1
+ type TngSwitchKeyboardEvent = Readonly<Pick<KeyboardEvent, 'key'>> & Readonly<{
2
+ preventDefault: () => void;
3
+ }>;
4
+ export declare function toggleTngSwitchState(checked: boolean): boolean;
5
+ export declare function resolveTngSwitchArrowKey(key: string): boolean | null;
6
+ export declare class TngSwitchComponent {
7
+ readonly ariaLabel: import("@angular/core").InputSignal<string | null>;
8
+ readonly checked: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
9
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
10
+ readonly name: import("@angular/core").InputSignal<string | null>;
11
+ readonly required: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
12
+ readonly value: import("@angular/core").InputSignal<string>;
13
+ readonly checkedChange: import("@angular/core").OutputEmitterRef<boolean>;
14
+ onKeydown(event: TngSwitchKeyboardEvent): void;
15
+ onToggle(): void;
16
+ }
17
+ export {};
18
+ //# sourceMappingURL=tng-switch.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-switch.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/switch/tng-switch.component.ts"],"names":[],"mappings":"AAGA,KAAK,sBAAsB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,GAChE,QAAQ,CAAC;IAAE,cAAc,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CAAC;AAE3C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE9D;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAUpE;AAED,qBAMa,kBAAkB;IAC7B,SAAgB,SAAS,qDAA8B;IACvD,SAAgB,OAAO,8EAEpB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,qDAA8B;IAClD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,8CAAuB;IAE5C,SAAgB,aAAa,oDAAqB;IAE3C,SAAS,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAc9C,QAAQ,IAAI,IAAI;CAOxB"}