@ojiepermana/angular 21.3.3 → 22.0.1

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 (291) hide show
  1. package/README.md +10 -6
  2. package/component/accordion/README.md +195 -0
  3. package/component/alert/README.md +182 -0
  4. package/component/alert-dialog/README.md +239 -0
  5. package/component/aspect-ratio/README.md +112 -0
  6. package/component/avatar/README.md +176 -0
  7. package/component/badge/README.md +133 -0
  8. package/component/breadcrumb/README.md +216 -0
  9. package/component/button/README.md +139 -0
  10. package/component/button-group/README.md +208 -0
  11. package/component/calendar/README.md +132 -0
  12. package/component/card/README.md +220 -0
  13. package/component/carousel/README.md +276 -0
  14. package/component/checkbox/README.md +149 -0
  15. package/component/collapsible/README.md +195 -0
  16. package/component/combobox/README.md +198 -0
  17. package/component/command/README.md +275 -0
  18. package/component/composer/README.md +235 -0
  19. package/component/composer/package.json +4 -0
  20. package/component/context-menu/README.md +267 -0
  21. package/component/date-picker/README.md +177 -0
  22. package/component/dialog/README.md +237 -0
  23. package/component/drawer/README.md +145 -0
  24. package/component/dropdown-menu/README.md +311 -0
  25. package/component/editor/README.md +136 -0
  26. package/component/editor/package.json +4 -0
  27. package/component/empty/README.md +183 -0
  28. package/component/empty/package.json +4 -0
  29. package/component/form/README.md +210 -0
  30. package/component/hover-card/README.md +146 -0
  31. package/component/hover-card/package.json +4 -0
  32. package/component/input/README.md +159 -0
  33. package/component/input-group/README.md +239 -0
  34. package/component/input-otp/README.md +278 -0
  35. package/component/input-otp/package.json +4 -0
  36. package/component/item/README.md +247 -0
  37. package/component/kanban/README.md +81 -0
  38. package/component/kanban/package.json +4 -0
  39. package/component/kbd/README.md +139 -0
  40. package/component/kbd/package.json +4 -0
  41. package/component/label/README.md +136 -0
  42. package/component/menubar/README.md +269 -0
  43. package/component/menubar/package.json +4 -0
  44. package/component/native-select/README.md +176 -0
  45. package/component/native-select/package.json +4 -0
  46. package/component/navigation-menu/README.md +160 -0
  47. package/component/navigation-menu/package.json +4 -0
  48. package/component/pagination/README.md +144 -0
  49. package/component/pillbox/README.md +67 -0
  50. package/component/pillbox/package.json +4 -0
  51. package/component/popover/README.md +43 -0
  52. package/component/progress/README.md +160 -0
  53. package/component/radio/README.md +209 -0
  54. package/component/resizable/README.md +168 -0
  55. package/component/resizable/package.json +4 -0
  56. package/component/scroll-area/README.md +143 -0
  57. package/component/select/README.md +174 -0
  58. package/component/separator/README.md +170 -0
  59. package/component/sheet/README.md +183 -0
  60. package/component/skeleton/README.md +158 -0
  61. package/component/slider/README.md +207 -0
  62. package/component/spinner/README.md +160 -0
  63. package/component/spinner/package.json +4 -0
  64. package/component/switch/README.md +166 -0
  65. package/component/table/README.md +291 -0
  66. package/component/tabs/README.md +219 -0
  67. package/component/textarea/README.md +154 -0
  68. package/component/timeline/README.md +94 -0
  69. package/component/timeline/package.json +4 -0
  70. package/component/toast/README.md +321 -0
  71. package/component/toggle/README.md +131 -0
  72. package/component/toggle/package.json +4 -0
  73. package/component/toggle-group/README.md +206 -0
  74. package/component/toggle-group/package.json +4 -0
  75. package/component/tooltip/README.md +211 -0
  76. package/fesm2022/ojiepermana-angular-component-accordion.mjs +45 -30
  77. package/fesm2022/ojiepermana-angular-component-accordion.mjs.map +1 -1
  78. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs +95 -61
  79. package/fesm2022/ojiepermana-angular-component-alert-dialog.mjs.map +1 -1
  80. package/fesm2022/ojiepermana-angular-component-alert.mjs +30 -21
  81. package/fesm2022/ojiepermana-angular-component-alert.mjs.map +1 -1
  82. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs +11 -7
  83. package/fesm2022/ojiepermana-angular-component-aspect-ratio.mjs.map +1 -1
  84. package/fesm2022/ojiepermana-angular-component-avatar.mjs +50 -34
  85. package/fesm2022/ojiepermana-angular-component-avatar.mjs.map +1 -1
  86. package/fesm2022/ojiepermana-angular-component-badge.mjs +9 -6
  87. package/fesm2022/ojiepermana-angular-component-badge.mjs.map +1 -1
  88. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs +49 -35
  89. package/fesm2022/ojiepermana-angular-component-breadcrumb.mjs.map +1 -1
  90. package/fesm2022/ojiepermana-angular-component-button-group.mjs +25 -17
  91. package/fesm2022/ojiepermana-angular-component-button-group.mjs.map +1 -1
  92. package/fesm2022/ojiepermana-angular-component-button.mjs +11 -7
  93. package/fesm2022/ojiepermana-angular-component-button.mjs.map +1 -1
  94. package/fesm2022/ojiepermana-angular-component-calendar.mjs +23 -13
  95. package/fesm2022/ojiepermana-angular-component-calendar.mjs.map +1 -1
  96. package/fesm2022/ojiepermana-angular-component-card.mjs +51 -36
  97. package/fesm2022/ojiepermana-angular-component-card.mjs.map +1 -1
  98. package/fesm2022/ojiepermana-angular-component-carousel.mjs +66 -42
  99. package/fesm2022/ojiepermana-angular-component-carousel.mjs.map +1 -1
  100. package/fesm2022/ojiepermana-angular-component-chart.mjs +494 -283
  101. package/fesm2022/ojiepermana-angular-component-chart.mjs.map +1 -1
  102. package/fesm2022/ojiepermana-angular-component-checkbox.mjs +23 -13
  103. package/fesm2022/ojiepermana-angular-component-checkbox.mjs.map +1 -1
  104. package/fesm2022/ojiepermana-angular-component-collapsible.mjs +28 -20
  105. package/fesm2022/ojiepermana-angular-component-collapsible.mjs.map +1 -1
  106. package/fesm2022/ojiepermana-angular-component-combobox.mjs +27 -18
  107. package/fesm2022/ojiepermana-angular-component-combobox.mjs.map +1 -1
  108. package/fesm2022/ojiepermana-angular-component-command.mjs +77 -52
  109. package/fesm2022/ojiepermana-angular-component-command.mjs.map +1 -1
  110. package/fesm2022/ojiepermana-angular-component-composer.mjs +352 -0
  111. package/fesm2022/ojiepermana-angular-component-composer.mjs.map +1 -0
  112. package/fesm2022/ojiepermana-angular-component-context-menu.mjs +9 -6
  113. package/fesm2022/ojiepermana-angular-component-context-menu.mjs.map +1 -1
  114. package/fesm2022/ojiepermana-angular-component-date-picker.mjs +34 -19
  115. package/fesm2022/ojiepermana-angular-component-date-picker.mjs.map +1 -1
  116. package/fesm2022/ojiepermana-angular-component-dialog.mjs +55 -38
  117. package/fesm2022/ojiepermana-angular-component-dialog.mjs.map +1 -1
  118. package/fesm2022/ojiepermana-angular-component-drawer.mjs.map +1 -1
  119. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs +108 -74
  120. package/fesm2022/ojiepermana-angular-component-dropdown-menu.mjs.map +1 -1
  121. package/fesm2022/ojiepermana-angular-component-editor.mjs +717 -0
  122. package/fesm2022/ojiepermana-angular-component-editor.mjs.map +1 -0
  123. package/fesm2022/ojiepermana-angular-component-empty.mjs +145 -0
  124. package/fesm2022/ojiepermana-angular-component-empty.mjs.map +1 -0
  125. package/fesm2022/ojiepermana-angular-component-form.mjs +200 -42
  126. package/fesm2022/ojiepermana-angular-component-form.mjs.map +1 -1
  127. package/fesm2022/ojiepermana-angular-component-hover-card.mjs +297 -0
  128. package/fesm2022/ojiepermana-angular-component-hover-card.mjs.map +1 -0
  129. package/fesm2022/ojiepermana-angular-component-input-group.mjs +48 -33
  130. package/fesm2022/ojiepermana-angular-component-input-group.mjs.map +1 -1
  131. package/fesm2022/ojiepermana-angular-component-input-otp.mjs +514 -0
  132. package/fesm2022/ojiepermana-angular-component-input-otp.mjs.map +1 -0
  133. package/fesm2022/ojiepermana-angular-component-input.mjs +7 -5
  134. package/fesm2022/ojiepermana-angular-component-input.mjs.map +1 -1
  135. package/fesm2022/ojiepermana-angular-component-item.mjs +76 -53
  136. package/fesm2022/ojiepermana-angular-component-item.mjs.map +1 -1
  137. package/fesm2022/ojiepermana-angular-component-kanban.mjs +314 -0
  138. package/fesm2022/ojiepermana-angular-component-kanban.mjs.map +1 -0
  139. package/fesm2022/ojiepermana-angular-component-kbd.mjs +55 -0
  140. package/fesm2022/ojiepermana-angular-component-kbd.mjs.map +1 -0
  141. package/fesm2022/ojiepermana-angular-component-label.mjs +9 -6
  142. package/fesm2022/ojiepermana-angular-component-label.mjs.map +1 -1
  143. package/fesm2022/ojiepermana-angular-component-menubar.mjs +308 -0
  144. package/fesm2022/ojiepermana-angular-component-menubar.mjs.map +1 -0
  145. package/fesm2022/ojiepermana-angular-component-native-select.mjs +67 -0
  146. package/fesm2022/ojiepermana-angular-component-native-select.mjs.map +1 -0
  147. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs +413 -0
  148. package/fesm2022/ojiepermana-angular-component-navigation-menu.mjs.map +1 -0
  149. package/fesm2022/ojiepermana-angular-component-pagination.mjs +65 -31
  150. package/fesm2022/ojiepermana-angular-component-pagination.mjs.map +1 -1
  151. package/fesm2022/ojiepermana-angular-component-pillbox.mjs +812 -0
  152. package/fesm2022/ojiepermana-angular-component-pillbox.mjs.map +1 -0
  153. package/fesm2022/ojiepermana-angular-component-popover.mjs +18 -12
  154. package/fesm2022/ojiepermana-angular-component-popover.mjs.map +1 -1
  155. package/fesm2022/ojiepermana-angular-component-progress.mjs +17 -10
  156. package/fesm2022/ojiepermana-angular-component-progress.mjs.map +1 -1
  157. package/fesm2022/ojiepermana-angular-component-radio.mjs +47 -17
  158. package/fesm2022/ojiepermana-angular-component-radio.mjs.map +1 -1
  159. package/fesm2022/ojiepermana-angular-component-resizable.mjs +481 -0
  160. package/fesm2022/ojiepermana-angular-component-resizable.mjs.map +1 -0
  161. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs +15 -9
  162. package/fesm2022/ojiepermana-angular-component-scroll-area.mjs.map +1 -1
  163. package/fesm2022/ojiepermana-angular-component-select.mjs +71 -26
  164. package/fesm2022/ojiepermana-angular-component-select.mjs.map +1 -1
  165. package/fesm2022/ojiepermana-angular-component-separator.mjs +11 -7
  166. package/fesm2022/ojiepermana-angular-component-separator.mjs.map +1 -1
  167. package/fesm2022/ojiepermana-angular-component-sheet.mjs +91 -42
  168. package/fesm2022/ojiepermana-angular-component-sheet.mjs.map +1 -1
  169. package/fesm2022/ojiepermana-angular-component-skeleton.mjs +7 -5
  170. package/fesm2022/ojiepermana-angular-component-skeleton.mjs.map +1 -1
  171. package/fesm2022/ojiepermana-angular-component-slider.mjs +401 -7
  172. package/fesm2022/ojiepermana-angular-component-slider.mjs.map +1 -1
  173. package/fesm2022/ojiepermana-angular-component-spinner.mjs +60 -0
  174. package/fesm2022/ojiepermana-angular-component-spinner.mjs.map +1 -0
  175. package/fesm2022/ojiepermana-angular-component-switch.mjs +47 -15
  176. package/fesm2022/ojiepermana-angular-component-switch.mjs.map +1 -1
  177. package/fesm2022/ojiepermana-angular-component-table.mjs +56 -40
  178. package/fesm2022/ojiepermana-angular-component-table.mjs.map +1 -1
  179. package/fesm2022/ojiepermana-angular-component-tabs.mjs +58 -38
  180. package/fesm2022/ojiepermana-angular-component-tabs.mjs.map +1 -1
  181. package/fesm2022/ojiepermana-angular-component-textarea.mjs +8 -6
  182. package/fesm2022/ojiepermana-angular-component-textarea.mjs.map +1 -1
  183. package/fesm2022/ojiepermana-angular-component-timeline.mjs +237 -0
  184. package/fesm2022/ojiepermana-angular-component-timeline.mjs.map +1 -0
  185. package/fesm2022/ojiepermana-angular-component-toast.mjs +28 -4
  186. package/fesm2022/ojiepermana-angular-component-toast.mjs.map +1 -1
  187. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs +289 -0
  188. package/fesm2022/ojiepermana-angular-component-toggle-group.mjs.map +1 -0
  189. package/fesm2022/ojiepermana-angular-component-toggle.mjs +82 -0
  190. package/fesm2022/ojiepermana-angular-component-toggle.mjs.map +1 -0
  191. package/fesm2022/ojiepermana-angular-component-tooltip.mjs +304 -6
  192. package/fesm2022/ojiepermana-angular-component-tooltip.mjs.map +1 -1
  193. package/fesm2022/ojiepermana-angular-component-utils.mjs.map +1 -1
  194. package/fesm2022/ojiepermana-angular-layout-component.mjs +45 -24
  195. package/fesm2022/ojiepermana-angular-layout-component.mjs.map +1 -1
  196. package/fesm2022/ojiepermana-angular-layout-provider.mjs.map +1 -1
  197. package/fesm2022/ojiepermana-angular-layout-services.mjs +7 -5
  198. package/fesm2022/ojiepermana-angular-layout-services.mjs.map +1 -1
  199. package/fesm2022/ojiepermana-angular-layout-shell.mjs +3 -3
  200. package/fesm2022/ojiepermana-angular-layout-shell.mjs.map +1 -1
  201. package/fesm2022/ojiepermana-angular-layout-token-directive.mjs +9 -6
  202. package/fesm2022/ojiepermana-angular-layout-token-directive.mjs.map +1 -1
  203. package/fesm2022/ojiepermana-angular-layout-token.mjs.map +1 -1
  204. package/fesm2022/{ojiepermana-angular-layout-empty.mjs → ojiepermana-angular-layout-type-empty.mjs} +4 -4
  205. package/fesm2022/ojiepermana-angular-layout-type-empty.mjs.map +1 -0
  206. package/fesm2022/{ojiepermana-angular-layout-horizontal.mjs → ojiepermana-angular-layout-type-horizontal.mjs} +26 -17
  207. package/fesm2022/ojiepermana-angular-layout-type-horizontal.mjs.map +1 -0
  208. package/fesm2022/{ojiepermana-angular-layout-vertical.mjs → ojiepermana-angular-layout-type-vertical.mjs} +28 -18
  209. package/fesm2022/ojiepermana-angular-layout-type-vertical.mjs.map +1 -0
  210. package/fesm2022/ojiepermana-angular-layout.mjs +74 -50
  211. package/fesm2022/ojiepermana-angular-layout.mjs.map +1 -1
  212. package/fesm2022/ojiepermana-angular-navigation-demo-data.mjs.map +1 -1
  213. package/fesm2022/ojiepermana-angular-navigation-icon.mjs +11 -7
  214. package/fesm2022/ojiepermana-angular-navigation-icon.mjs.map +1 -1
  215. package/fesm2022/ojiepermana-angular-navigation-item.mjs +27 -16
  216. package/fesm2022/ojiepermana-angular-navigation-item.mjs.map +1 -1
  217. package/fesm2022/ojiepermana-angular-navigation-service.mjs +29 -20
  218. package/fesm2022/ojiepermana-angular-navigation-service.mjs.map +1 -1
  219. package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs +71 -43
  220. package/fesm2022/ojiepermana-angular-navigation-sidebar.mjs.map +1 -1
  221. package/fesm2022/ojiepermana-angular-navigation-topbar.mjs +261 -24
  222. package/fesm2022/ojiepermana-angular-navigation-topbar.mjs.map +1 -1
  223. package/fesm2022/ojiepermana-angular-theme-provider.mjs.map +1 -1
  224. package/fesm2022/ojiepermana-angular-theme-services.mjs +19 -11
  225. package/fesm2022/ojiepermana-angular-theme-services.mjs.map +1 -1
  226. package/fesm2022/ojiepermana-angular-theme-token.mjs.map +1 -1
  227. package/fesm2022/ojiepermana-angular-theme.mjs +19 -11
  228. package/fesm2022/ojiepermana-angular-theme.mjs.map +1 -1
  229. package/generator/api/README.md +8 -5
  230. package/generator/api/bin/src/emit/client.js +4 -2
  231. package/generator/api/bin/src/writer/index.js +47 -5
  232. package/generator/guide/bin/schematics/build/index.js +3 -2
  233. package/generator/guide/bin/src/engine/component.js +2 -2
  234. package/generator/guide/bin/src/engine/index.js +3 -3
  235. package/generator/guide/bin/src/engine/render.js +10 -5
  236. package/layout/type/empty/package.json +4 -0
  237. package/layout/type/horizontal/package.json +4 -0
  238. package/layout/type/vertical/package.json +4 -0
  239. package/navigation/topbar/README.md +196 -0
  240. package/package.json +89 -25
  241. package/theme/README.md +110 -3
  242. package/theme/styles/integrations/material/autocomplete.css +178 -0
  243. package/theme/styles/integrations/material/button.css +468 -0
  244. package/theme/styles/integrations/material/dialog.css +152 -0
  245. package/theme/styles/integrations/material/select.css +175 -0
  246. package/theme/styles/integrations/material/slide-toggle.css +234 -0
  247. package/theme/styles/integrations/material/slider.css +194 -0
  248. package/theme/styles/integrations/material/tabs.css +229 -0
  249. package/theme/styles/integrations/material.css +70 -60
  250. package/types/ojiepermana-angular-component-combobox.d.ts +1 -2
  251. package/types/ojiepermana-angular-component-composer.d.ts +90 -0
  252. package/types/ojiepermana-angular-component-dropdown-menu.d.ts +2 -0
  253. package/types/ojiepermana-angular-component-editor.d.ts +123 -0
  254. package/types/ojiepermana-angular-component-empty.d.ts +50 -0
  255. package/types/ojiepermana-angular-component-form.d.ts +52 -3
  256. package/types/ojiepermana-angular-component-hover-card.d.ts +74 -0
  257. package/types/ojiepermana-angular-component-input-otp.d.ts +136 -0
  258. package/types/ojiepermana-angular-component-kanban.d.ts +70 -0
  259. package/types/ojiepermana-angular-component-kbd.d.ts +16 -0
  260. package/types/ojiepermana-angular-component-menubar.d.ts +67 -0
  261. package/types/ojiepermana-angular-component-native-select.d.ts +26 -0
  262. package/types/ojiepermana-angular-component-navigation-menu.d.ts +96 -0
  263. package/types/ojiepermana-angular-component-pagination.d.ts +10 -4
  264. package/types/ojiepermana-angular-component-pillbox.d.ts +157 -0
  265. package/types/ojiepermana-angular-component-radio.d.ts +7 -1
  266. package/types/ojiepermana-angular-component-resizable.d.ts +99 -0
  267. package/types/ojiepermana-angular-component-select.d.ts +17 -5
  268. package/types/ojiepermana-angular-component-sheet.d.ts +3 -1
  269. package/types/ojiepermana-angular-component-slider.d.ts +59 -1
  270. package/types/ojiepermana-angular-component-spinner.d.ts +13 -0
  271. package/types/ojiepermana-angular-component-switch.d.ts +13 -3
  272. package/types/ojiepermana-angular-component-timeline.d.ts +63 -0
  273. package/types/ojiepermana-angular-component-toast.d.ts +12 -3
  274. package/types/ojiepermana-angular-component-toggle-group.d.ts +89 -0
  275. package/types/ojiepermana-angular-component-toggle.d.ts +25 -0
  276. package/types/ojiepermana-angular-component-tooltip.d.ts +72 -5
  277. package/types/{ojiepermana-angular-layout-horizontal.d.ts → ojiepermana-angular-layout-type-horizontal.d.ts} +3 -3
  278. package/types/{ojiepermana-angular-layout-vertical.d.ts → ojiepermana-angular-layout-type-vertical.d.ts} +3 -3
  279. package/types/ojiepermana-angular-layout.d.ts +5 -5
  280. package/types/ojiepermana-angular-navigation-item.d.ts +1 -1
  281. package/types/ojiepermana-angular-navigation-service.d.ts +7 -7
  282. package/types/ojiepermana-angular-navigation-sidebar.d.ts +8 -8
  283. package/types/ojiepermana-angular-navigation-topbar.d.ts +24 -4
  284. package/types/ojiepermana-angular-navigation-types.d.ts +14 -8
  285. package/fesm2022/ojiepermana-angular-layout-empty.mjs.map +0 -1
  286. package/fesm2022/ojiepermana-angular-layout-horizontal.mjs.map +0 -1
  287. package/fesm2022/ojiepermana-angular-layout-vertical.mjs.map +0 -1
  288. package/layout/empty/package.json +0 -4
  289. package/layout/horizontal/package.json +0 -4
  290. package/layout/vertical/package.json +0 -4
  291. /package/types/{ojiepermana-angular-layout-empty.d.ts → ojiepermana-angular-layout-type-empty.d.ts} +0 -0
@@ -0,0 +1,812 @@
1
+ import { DOCUMENT, NgTemplateOutlet } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, TemplateRef, Directive, ElementRef, contentChild, input, booleanAttribute, output, computed, ChangeDetectionStrategy, Component, numberAttribute, DestroyRef, signal, viewChild, contentChildren, forwardRef } from '@angular/core';
4
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
+ import { cn } from '@ojiepermana/angular/component/utils';
6
+
7
+ class PillboxContext {
8
+ }
9
+ let nextPillboxId = 0;
10
+ const pillboxTriggerSizeClasses = {
11
+ default: 'min-h-10 px-3 py-2 text-sm',
12
+ sm: 'min-h-8 px-2.5 py-1.5 text-xs',
13
+ };
14
+ const pillboxPillSizeClasses = {
15
+ default: 'min-h-6 px-2 text-xs',
16
+ sm: 'min-h-5 px-1.5 text-[0.6875rem]',
17
+ };
18
+ class PillboxSelectedDirective {
19
+ template = inject(TemplateRef);
20
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: PillboxSelectedDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
21
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.0", type: PillboxSelectedDirective, isStandalone: true, selector: "ng-template[uiPillboxSelected]", exportAs: ["uiPillboxSelected"], ngImport: i0 });
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: PillboxSelectedDirective, decorators: [{
24
+ type: Directive,
25
+ args: [{
26
+ selector: 'ng-template[uiPillboxSelected]',
27
+ exportAs: 'uiPillboxSelected',
28
+ }]
29
+ }] });
30
+ class PillboxOptionComponent {
31
+ context = inject(PillboxContext);
32
+ element = inject(ElementRef);
33
+ selectedTemplate = contentChild(PillboxSelectedDirective, /* @ts-ignore */
34
+ ...(ngDevMode ? [{ debugName: "selectedTemplate" }] : /* istanbul ignore next */ []));
35
+ value = input.required(/* @ts-ignore */
36
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
37
+ label = input('', /* @ts-ignore */
38
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
39
+ selectedLabel = input('', /* @ts-ignore */
40
+ ...(ngDevMode ? [{ debugName: "selectedLabel" }] : /* istanbul ignore next */ []));
41
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
42
+ filterable = input(true, { ...(ngDevMode ? { debugName: "filterable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
43
+ class = input('', /* @ts-ignore */
44
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
45
+ selectedChange = output();
46
+ selected = computed(() => this.context.optionSelected(this), /* @ts-ignore */
47
+ ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
48
+ visible = computed(() => this.context.optionVisible(this), /* @ts-ignore */
49
+ ...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
50
+ classes = computed(() => cn('relative flex w-full cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors', 'hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground', 'data-[selected]:bg-accent data-[selected]:text-accent-foreground', 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50', this.class()), /* @ts-ignore */
51
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
52
+ textLabel() {
53
+ return (this.label() || this.element.nativeElement.textContent || String(this.value())).trim();
54
+ }
55
+ pillLabel() {
56
+ return (this.selectedLabel() || this.textLabel()).trim();
57
+ }
58
+ pillTemplate() {
59
+ return this.selectedTemplate()?.template ?? null;
60
+ }
61
+ handleClick(event) {
62
+ this.context.chooseOption(this, event);
63
+ }
64
+ handleKeydown(event) {
65
+ event.preventDefault();
66
+ this.context.chooseOption(this, event);
67
+ }
68
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: PillboxOptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
69
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: PillboxOptionComponent, isStandalone: true, selector: "ui-pillbox-option, button[ui-pillbox-option]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, selectedLabel: { classPropertyName: "selectedLabel", publicName: "selectedLabel", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, filterable: { classPropertyName: "filterable", publicName: "filterable", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedChange: "selectedChange" }, host: { attributes: { "type": "button" }, listeners: { "click": "handleClick($event)", "keydown.enter": "handleKeydown($any($event))", "keydown.space": "handleKeydown($any($event))" }, properties: { "class": "classes()", "attr.data-slot": "\"pillbox-option\"", "attr.data-selected": "selected() ? \"\" : null", "attr.data-disabled": "disabled() ? \"\" : null", "attr.role": "\"option\"", "attr.aria-selected": "selected()", "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.tabindex": "disabled() ? -1 : 0", "hidden": "!visible()" } }, queries: [{ propertyName: "selectedTemplate", first: true, predicate: PillboxSelectedDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
70
+ <span class="min-w-0 flex-1 truncate text-left"><ng-content /></span>
71
+ @if (selected()) {
72
+ <svg
73
+ aria-hidden="true"
74
+ class="ml-auto size-4 shrink-0"
75
+ viewBox="0 0 24 24"
76
+ fill="none"
77
+ stroke="currentColor"
78
+ stroke-width="1.75"
79
+ stroke-linecap="round"
80
+ stroke-linejoin="round">
81
+ <path d="M20 6 9 17l-5-5" />
82
+ </svg>
83
+ }
84
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
85
+ }
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: PillboxOptionComponent, decorators: [{
87
+ type: Component,
88
+ args: [{
89
+ selector: 'ui-pillbox-option, button[ui-pillbox-option]',
90
+ changeDetection: ChangeDetectionStrategy.OnPush,
91
+ host: {
92
+ type: 'button',
93
+ '[class]': 'classes()',
94
+ '[attr.data-slot]': '"pillbox-option"',
95
+ '[attr.data-selected]': 'selected() ? "" : null',
96
+ '[attr.data-disabled]': 'disabled() ? "" : null',
97
+ '[attr.role]': '"option"',
98
+ '[attr.aria-selected]': 'selected()',
99
+ '[attr.aria-disabled]': 'disabled() ? "true" : null',
100
+ '[attr.tabindex]': 'disabled() ? -1 : 0',
101
+ '[hidden]': '!visible()',
102
+ '(click)': 'handleClick($event)',
103
+ '(keydown.enter)': 'handleKeydown($any($event))',
104
+ '(keydown.space)': 'handleKeydown($any($event))',
105
+ },
106
+ template: `
107
+ <span class="min-w-0 flex-1 truncate text-left"><ng-content /></span>
108
+ @if (selected()) {
109
+ <svg
110
+ aria-hidden="true"
111
+ class="ml-auto size-4 shrink-0"
112
+ viewBox="0 0 24 24"
113
+ fill="none"
114
+ stroke="currentColor"
115
+ stroke-width="1.75"
116
+ stroke-linecap="round"
117
+ stroke-linejoin="round">
118
+ <path d="M20 6 9 17l-5-5" />
119
+ </svg>
120
+ }
121
+ `,
122
+ }]
123
+ }], propDecorators: { selectedTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => PillboxSelectedDirective), { isSignal: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], selectedLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedLabel", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], filterable: [{ type: i0.Input, args: [{ isSignal: true, alias: "filterable", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], selectedChange: [{ type: i0.Output, args: ["selectedChange"] }] } });
124
+ class PillboxOptionCreateComponent {
125
+ context = inject(PillboxContext);
126
+ minLength = input(1, { ...(ngDevMode ? { debugName: "minLength" } : /* istanbul ignore next */ {}), transform: numberAttribute });
127
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
128
+ class = input('', /* @ts-ignore */
129
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
130
+ selected = output();
131
+ visible = computed(() => this.context.createVisible(this), /* @ts-ignore */
132
+ ...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
133
+ classes = computed(() => cn('relative flex w-full cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm font-medium text-primary outline-none transition-colors', 'hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground', 'aria-disabled:pointer-events-none aria-disabled:opacity-50', this.class()), /* @ts-ignore */
134
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
135
+ handleClick(event) {
136
+ this.context.chooseCreate(this, event);
137
+ }
138
+ handleKeydown(event) {
139
+ event.preventDefault();
140
+ this.context.chooseCreate(this, event);
141
+ }
142
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: PillboxOptionCreateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
143
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", type: PillboxOptionCreateComponent, isStandalone: true, selector: "ui-pillbox-option-create, button[ui-pillbox-option-create]", inputs: { minLength: { classPropertyName: "minLength", publicName: "minLength", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected" }, host: { attributes: { "type": "button" }, listeners: { "click": "handleClick($event)", "keydown.enter": "handleKeydown($any($event))", "keydown.space": "handleKeydown($any($event))" }, properties: { "class": "classes()", "attr.data-slot": "\"pillbox-option-create\"", "attr.role": "\"option\"", "attr.tabindex": "disabled() ? -1 : 0", "attr.aria-disabled": "disabled() ? \"true\" : null", "hidden": "!visible()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
144
+ }
145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: PillboxOptionCreateComponent, decorators: [{
146
+ type: Component,
147
+ args: [{
148
+ selector: 'ui-pillbox-option-create, button[ui-pillbox-option-create]',
149
+ changeDetection: ChangeDetectionStrategy.OnPush,
150
+ host: {
151
+ type: 'button',
152
+ '[class]': 'classes()',
153
+ '[attr.data-slot]': '"pillbox-option-create"',
154
+ '[attr.role]': '"option"',
155
+ '[attr.tabindex]': 'disabled() ? -1 : 0',
156
+ '[attr.aria-disabled]': 'disabled() ? "true" : null',
157
+ '[hidden]': '!visible()',
158
+ '(click)': 'handleClick($event)',
159
+ '(keydown.enter)': 'handleKeydown($any($event))',
160
+ '(keydown.space)': 'handleKeydown($any($event))',
161
+ },
162
+ template: `<ng-content />`,
163
+ }]
164
+ }], propDecorators: { minLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minLength", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], selected: [{ type: i0.Output, args: ["selected"] }] } });
165
+ class PillboxOptionEmptyComponent {
166
+ context = inject(PillboxContext);
167
+ whenLoading = input('', /* @ts-ignore */
168
+ ...(ngDevMode ? [{ debugName: "whenLoading" }] : /* istanbul ignore next */ []));
169
+ class = input('', /* @ts-ignore */
170
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
171
+ classes = computed(() => cn('px-2 py-6 text-center text-sm text-muted-foreground', this.class()), /* @ts-ignore */
172
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
173
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: PillboxOptionEmptyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
174
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: PillboxOptionEmptyComponent, isStandalone: true, selector: "ui-pillbox-option-empty", inputs: { whenLoading: { classPropertyName: "whenLoading", publicName: "whenLoading", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "presentation" }, properties: { "class": "classes()", "attr.data-slot": "\"pillbox-option-empty\"", "hidden": "!context.emptyVisible()" } }, ngImport: i0, template: `
175
+ @if (context.emptyMessage()) {
176
+ {{ context.emptyMessage() }}
177
+ } @else {
178
+ <ng-content />
179
+ }
180
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
181
+ }
182
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: PillboxOptionEmptyComponent, decorators: [{
183
+ type: Component,
184
+ args: [{
185
+ selector: 'ui-pillbox-option-empty',
186
+ changeDetection: ChangeDetectionStrategy.OnPush,
187
+ host: {
188
+ '[class]': 'classes()',
189
+ '[attr.data-slot]': '"pillbox-option-empty"',
190
+ role: 'presentation',
191
+ '[hidden]': '!context.emptyVisible()',
192
+ },
193
+ template: `
194
+ @if (context.emptyMessage()) {
195
+ {{ context.emptyMessage() }}
196
+ } @else {
197
+ <ng-content />
198
+ }
199
+ `,
200
+ }]
201
+ }], propDecorators: { whenLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "whenLoading", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
202
+ class PillboxComponent extends PillboxContext {
203
+ element = inject(ElementRef);
204
+ document = inject(DOCUMENT);
205
+ destroyRef = inject(DestroyRef);
206
+ id = input(null, /* @ts-ignore */
207
+ ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
208
+ placeholder = input('Choose options...', /* @ts-ignore */
209
+ ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
210
+ searchPlaceholder = input('Search...', /* @ts-ignore */
211
+ ...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
212
+ size = input('default', /* @ts-ignore */
213
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
214
+ variant = input('default', /* @ts-ignore */
215
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
216
+ multiple = input(false, { ...(ngDevMode ? { debugName: "multiple" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
217
+ searchable = input(false, { ...(ngDevMode ? { debugName: "searchable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
218
+ filter = input(true, { ...(ngDevMode ? { debugName: "filter" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
219
+ clearable = input(true, { ...(ngDevMode ? { debugName: "clearable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
220
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
221
+ invalid = input(false, { ...(ngDevMode ? { debugName: "invalid" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
222
+ loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
223
+ emptyText = input('No options found.', /* @ts-ignore */
224
+ ...(ngDevMode ? [{ debugName: "emptyText" }] : /* istanbul ignore next */ []));
225
+ loadingText = input('Loading...', /* @ts-ignore */
226
+ ...(ngDevMode ? [{ debugName: "loadingText" }] : /* istanbul ignore next */ []));
227
+ ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
228
+ ariaDescribedby = input(null, { ...(ngDevMode ? { debugName: "ariaDescribedby" } : /* istanbul ignore next */ {}), alias: 'aria-describedby' });
229
+ ariaLabelledby = input(null, { ...(ngDevMode ? { debugName: "ariaLabelledby" } : /* istanbul ignore next */ {}), alias: 'aria-labelledby' });
230
+ class = input('', /* @ts-ignore */
231
+ ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
232
+ valueChange = output();
233
+ searchChange = output();
234
+ create = output();
235
+ openedChange = output();
236
+ query = signal('', /* @ts-ignore */
237
+ ...(ngDevMode ? [{ debugName: "query" }] : /* istanbul ignore next */ []));
238
+ openState = signal(false, /* @ts-ignore */
239
+ ...(ngDevMode ? [{ debugName: "openState" }] : /* istanbul ignore next */ []));
240
+ selectedValues = signal([], /* @ts-ignore */
241
+ ...(ngDevMode ? [{ debugName: "selectedValues" }] : /* istanbul ignore next */ []));
242
+ disabledFromControl = signal(false, /* @ts-ignore */
243
+ ...(ngDevMode ? [{ debugName: "disabledFromControl" }] : /* istanbul ignore next */ []));
244
+ generatedId = `ui-pillbox-${++nextPillboxId}`;
245
+ trigger = viewChild.required('trigger');
246
+ inlineSearch = viewChild('inlineSearch', /* @ts-ignore */
247
+ ...(ngDevMode ? [{ debugName: "inlineSearch" }] : /* istanbul ignore next */ []));
248
+ panelSearch = viewChild('panelSearch', /* @ts-ignore */
249
+ ...(ngDevMode ? [{ debugName: "panelSearch" }] : /* istanbul ignore next */ []));
250
+ options = contentChildren(PillboxOptionComponent, { ...(ngDevMode ? { debugName: "options" } : /* istanbul ignore next */ {}), descendants: true });
251
+ createOptions = contentChildren(PillboxOptionCreateComponent, { ...(ngDevMode ? { debugName: "createOptions" } : /* istanbul ignore next */ {}), descendants: true });
252
+ emptyOptions = contentChildren(PillboxOptionEmptyComponent, { ...(ngDevMode ? { debugName: "emptyOptions" } : /* istanbul ignore next */ {}), descendants: true });
253
+ removeDocumentListener = null;
254
+ onChange = () => { };
255
+ onTouched = () => { };
256
+ panelId = `${this.generatedId}-panel`;
257
+ resolvedId = computed(() => this.id() ?? this.generatedId, /* @ts-ignore */
258
+ ...(ngDevMode ? [{ debugName: "resolvedId" }] : /* istanbul ignore next */ []));
259
+ disabledState = computed(() => this.disabled() || this.disabledFromControl(), /* @ts-ignore */
260
+ ...(ngDevMode ? [{ debugName: "disabledState" }] : /* istanbul ignore next */ []));
261
+ classes = computed(() => cn('relative block w-full min-w-0 text-sm text-foreground', this.class()), /* @ts-ignore */
262
+ ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
263
+ triggerClasses = computed(() => cn('flex w-full min-w-0 cursor-default items-center gap-2 rounded-md border border-input bg-background shadow-sm transition-colors', 'focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 focus-within:ring-offset-background', 'hover:bg-accent/20', pillboxTriggerSizeClasses[this.size()], this.invalid() ? 'border-destructive ring-1 ring-destructive' : '', this.disabledState() ? 'pointer-events-none cursor-not-allowed opacity-50' : ''), /* @ts-ignore */
264
+ ...(ngDevMode ? [{ debugName: "triggerClasses" }] : /* istanbul ignore next */ []));
265
+ pillClasses = computed(() => cn('inline-flex max-w-full shrink-0 items-center gap-1 rounded-md border border-border bg-muted font-medium text-muted-foreground', pillboxPillSizeClasses[this.size()]), /* @ts-ignore */
266
+ ...(ngDevMode ? [{ debugName: "pillClasses" }] : /* istanbul ignore next */ []));
267
+ panelClasses = computed(() => cn('absolute left-0 right-0 z-50 mt-1 overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md', 'min-w-full'), /* @ts-ignore */
268
+ ...(ngDevMode ? [{ debugName: "panelClasses" }] : /* istanbul ignore next */ []));
269
+ selectedItems = computed(() => this.selectedValues().map((value, index) => {
270
+ const option = this.findOption(value);
271
+ return {
272
+ value,
273
+ label: option?.pillLabel() || String(value),
274
+ template: option?.pillTemplate() ?? null,
275
+ track: this.trackValue(value, index),
276
+ };
277
+ }), /* @ts-ignore */
278
+ ...(ngDevMode ? [{ debugName: "selectedItems" }] : /* istanbul ignore next */ []));
279
+ constructor() {
280
+ super();
281
+ this.destroyRef.onDestroy(() => this.removeOutsideListener());
282
+ }
283
+ optionVisible(option) {
284
+ if (!this.filter() || !option.filterable()) {
285
+ return true;
286
+ }
287
+ const query = this.query().trim().toLowerCase();
288
+ if (!query) {
289
+ return true;
290
+ }
291
+ return option.textLabel().toLowerCase().includes(query);
292
+ }
293
+ optionSelected(option) {
294
+ return this.hasValue(option.value());
295
+ }
296
+ chooseOption(option, event) {
297
+ event.preventDefault();
298
+ event.stopPropagation();
299
+ if (this.disabledState() || option.disabled()) {
300
+ return;
301
+ }
302
+ if (this.multiple()) {
303
+ const value = option.value();
304
+ this.selectedValues.update((values) => values.some((entry) => this.sameValue(entry, value))
305
+ ? values.filter((entry) => !this.sameValue(entry, value))
306
+ : [...values, value]);
307
+ }
308
+ else {
309
+ this.selectedValues.set([option.value()]);
310
+ this.close();
311
+ }
312
+ option.selectedChange.emit(option.value());
313
+ this.query.set('');
314
+ this.emitValue();
315
+ }
316
+ createVisible(option) {
317
+ const query = this.query().trim();
318
+ if (option.disabled() || query.length < option.minLength()) {
319
+ return false;
320
+ }
321
+ return !this.options().some((entry) => entry.textLabel().trim().toLowerCase() === query.toLowerCase());
322
+ }
323
+ chooseCreate(option, event) {
324
+ event.preventDefault();
325
+ event.stopPropagation();
326
+ const query = this.query().trim();
327
+ if (this.disabledState() || option.disabled() || !this.createVisible(option)) {
328
+ return;
329
+ }
330
+ option.selected.emit(query);
331
+ this.create.emit(query);
332
+ }
333
+ emptyVisible() {
334
+ return this.options().length > 0 && !this.hasVisibleOptions() && !this.hasVisibleCreateOption();
335
+ }
336
+ emptyMessage() {
337
+ const customEmptyOption = this.emptyOptions()[0];
338
+ if (this.loading()) {
339
+ return customEmptyOption?.whenLoading() || this.loadingText();
340
+ }
341
+ return customEmptyOption ? '' : this.emptyText();
342
+ }
343
+ handleTriggerClick() {
344
+ this.open();
345
+ }
346
+ handleTriggerKeydown(event) {
347
+ if (this.disabledState()) {
348
+ return;
349
+ }
350
+ event.preventDefault();
351
+ this.open();
352
+ }
353
+ handleSearchInput(event) {
354
+ const inputElement = event.target;
355
+ this.query.set(inputElement.value);
356
+ this.searchChange.emit(inputElement.value);
357
+ this.open();
358
+ }
359
+ handleInlineBackspace(event) {
360
+ if (event.target.value.length > 0 || this.selectedValues().length === 0) {
361
+ return;
362
+ }
363
+ event.preventDefault();
364
+ this.selectedValues.update((values) => values.slice(0, -1));
365
+ this.emitValue();
366
+ }
367
+ clearSearch(event) {
368
+ event.preventDefault();
369
+ event.stopPropagation();
370
+ this.query.set('');
371
+ this.searchChange.emit('');
372
+ this.focusSearchInput();
373
+ }
374
+ clear(event) {
375
+ event.preventDefault();
376
+ event.stopPropagation();
377
+ this.selectedValues.set([]);
378
+ this.emitValue();
379
+ }
380
+ removeSelected(value, event) {
381
+ event.preventDefault();
382
+ event.stopPropagation();
383
+ this.selectedValues.update((values) => values.filter((entry) => !this.sameValue(entry, value)));
384
+ this.emitValue();
385
+ }
386
+ open() {
387
+ if (this.disabledState() || this.openState()) {
388
+ return;
389
+ }
390
+ this.openState.set(true);
391
+ this.openedChange.emit(true);
392
+ queueMicrotask(() => {
393
+ this.focusSearchInput();
394
+ this.bindOutsideListener();
395
+ });
396
+ }
397
+ close() {
398
+ if (!this.openState()) {
399
+ return;
400
+ }
401
+ this.openState.set(false);
402
+ this.openedChange.emit(false);
403
+ this.removeOutsideListener();
404
+ this.onTouched();
405
+ }
406
+ focus() {
407
+ this.trigger().nativeElement.focus();
408
+ }
409
+ writeValue(value) {
410
+ if (this.multiple()) {
411
+ this.selectedValues.set(Array.isArray(value) ? value : []);
412
+ return;
413
+ }
414
+ this.selectedValues.set(value === null || value === undefined ? [] : [value]);
415
+ }
416
+ registerOnChange(fn) {
417
+ this.onChange = fn;
418
+ }
419
+ registerOnTouched(fn) {
420
+ this.onTouched = fn;
421
+ }
422
+ setDisabledState(disabled) {
423
+ this.disabledFromControl.set(disabled);
424
+ }
425
+ emitValue() {
426
+ const nextValue = this.multiple() ? [...this.selectedValues()] : (this.selectedValues()[0] ?? null);
427
+ this.onChange(nextValue);
428
+ this.valueChange.emit(nextValue);
429
+ }
430
+ hasValue(value) {
431
+ return this.selectedValues().some((entry) => this.sameValue(entry, value));
432
+ }
433
+ findOption(value) {
434
+ return this.options().find((option) => this.sameValue(option.value(), value));
435
+ }
436
+ hasVisibleOptions() {
437
+ return this.options().some((option) => this.optionVisible(option));
438
+ }
439
+ hasVisibleCreateOption() {
440
+ return this.createOptions().some((option) => this.createVisible(option));
441
+ }
442
+ sameValue(left, right) {
443
+ return Object.is(left, right);
444
+ }
445
+ trackValue(value, index) {
446
+ return typeof value === 'object' && value !== null ? index : value;
447
+ }
448
+ focusSearchInput() {
449
+ const searchInput = this.variant() === 'combobox' ? this.inlineSearch()?.nativeElement : this.panelSearch()?.nativeElement;
450
+ searchInput?.focus();
451
+ }
452
+ bindOutsideListener() {
453
+ this.removeOutsideListener();
454
+ const listener = (event) => {
455
+ if (!this.element.nativeElement.contains(event.target)) {
456
+ this.close();
457
+ }
458
+ };
459
+ this.document.addEventListener('pointerdown', listener, true);
460
+ this.removeDocumentListener = () => this.document.removeEventListener('pointerdown', listener, true);
461
+ }
462
+ removeOutsideListener() {
463
+ this.removeDocumentListener?.();
464
+ this.removeDocumentListener = null;
465
+ }
466
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: PillboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
467
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: PillboxComponent, isStandalone: true, selector: "ui-pillbox", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, emptyText: { classPropertyName: "emptyText", publicName: "emptyText", isSignal: true, isRequired: false, transformFunction: null }, loadingText: { classPropertyName: "loadingText", publicName: "loadingText", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedby: { classPropertyName: "ariaDescribedby", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", searchChange: "searchChange", create: "create", openedChange: "openedChange" }, host: { properties: { "class": "classes()", "attr.data-slot": "\"pillbox\"", "attr.data-open": "openState() ? \"\" : null", "attr.data-size": "size()", "attr.data-variant": "variant()" } }, providers: [
468
+ { provide: PillboxContext, useExisting: forwardRef(() => PillboxComponent) },
469
+ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => PillboxComponent), multi: true },
470
+ ], queries: [{ propertyName: "options", predicate: PillboxOptionComponent, descendants: true, isSignal: true }, { propertyName: "createOptions", predicate: PillboxOptionCreateComponent, descendants: true, isSignal: true }, { propertyName: "emptyOptions", predicate: PillboxOptionEmptyComponent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true, isSignal: true }, { propertyName: "inlineSearch", first: true, predicate: ["inlineSearch"], descendants: true, isSignal: true }, { propertyName: "panelSearch", first: true, predicate: ["panelSearch"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
471
+ <div
472
+ #trigger
473
+ [attr.id]="resolvedId()"
474
+ role="combobox"
475
+ aria-haspopup="listbox"
476
+ [attr.aria-expanded]="openState()"
477
+ [attr.aria-controls]="openState() ? panelId : null"
478
+ [attr.aria-label]="ariaLabel()"
479
+ [attr.aria-labelledby]="ariaLabelledby()"
480
+ [attr.aria-describedby]="ariaDescribedby()"
481
+ [attr.aria-invalid]="invalid() ? 'true' : null"
482
+ [attr.aria-disabled]="disabledState() ? 'true' : null"
483
+ [attr.tabindex]="disabledState() ? -1 : 0"
484
+ [class]="triggerClasses()"
485
+ (click)="handleTriggerClick()"
486
+ (keydown.enter)="handleTriggerKeydown($any($event))"
487
+ (keydown.space)="handleTriggerKeydown($any($event))"
488
+ (keydown.arrowDown)="handleTriggerKeydown($any($event))"
489
+ (keydown.escape)="close()">
490
+ <div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5">
491
+ @if (selectedItems().length > 0) {
492
+ @for (item of selectedItems(); track item.track) {
493
+ <span [class]="pillClasses()">
494
+ @if (item.template; as template) {
495
+ <span class="inline-flex min-w-0 max-w-40 items-center gap-1 truncate">
496
+ <ng-container *ngTemplateOutlet="template" />
497
+ </span>
498
+ } @else {
499
+ <span class="max-w-40 truncate">{{ item.label }}</span>
500
+ }
501
+ <button
502
+ type="button"
503
+ class="-mr-1 inline-flex size-4 items-center justify-center rounded-full text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
504
+ [attr.aria-label]="'Remove ' + item.label"
505
+ [disabled]="disabledState() || null"
506
+ (click)="removeSelected(item.value, $event)">
507
+ <svg
508
+ aria-hidden="true"
509
+ class="size-3"
510
+ viewBox="0 0 24 24"
511
+ fill="none"
512
+ stroke="currentColor"
513
+ stroke-width="2"
514
+ stroke-linecap="round"
515
+ stroke-linejoin="round">
516
+ <path d="M18 6 6 18" />
517
+ <path d="m6 6 12 12" />
518
+ </svg>
519
+ </button>
520
+ </span>
521
+ }
522
+ }
523
+
524
+ @if (variant() === 'combobox') {
525
+ <input
526
+ #inlineSearch
527
+ class="min-w-28 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed"
528
+ [placeholder]="selectedItems().length === 0 ? placeholder() : ''"
529
+ [value]="query()"
530
+ [disabled]="disabledState() || null"
531
+ (click)="$event.stopPropagation(); open()"
532
+ (focus)="open()"
533
+ (input)="handleSearchInput($event)"
534
+ (keydown.backspace)="handleInlineBackspace($any($event))"
535
+ (keydown.escape)="close()" />
536
+ } @else if (selectedItems().length === 0) {
537
+ <span class="truncate text-muted-foreground">{{ placeholder() }}</span>
538
+ }
539
+ </div>
540
+
541
+ @if (clearable() && selectedItems().length > 0 && !disabledState()) {
542
+ <button
543
+ type="button"
544
+ class="inline-flex size-5 shrink-0 items-center justify-center rounded-full text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
545
+ aria-label="Clear selected options"
546
+ (click)="clear($event)">
547
+ <svg
548
+ aria-hidden="true"
549
+ class="size-3.5"
550
+ viewBox="0 0 24 24"
551
+ fill="none"
552
+ stroke="currentColor"
553
+ stroke-width="2"
554
+ stroke-linecap="round"
555
+ stroke-linejoin="round">
556
+ <path d="M18 6 6 18" />
557
+ <path d="m6 6 12 12" />
558
+ </svg>
559
+ </button>
560
+ }
561
+
562
+ <svg
563
+ aria-hidden="true"
564
+ class="size-4 shrink-0 text-muted-foreground transition-transform"
565
+ [class.rotate-180]="openState()"
566
+ viewBox="0 0 24 24"
567
+ fill="none"
568
+ stroke="currentColor"
569
+ stroke-width="1.75"
570
+ stroke-linecap="round"
571
+ stroke-linejoin="round">
572
+ <path d="m6 9 6 6 6-6" />
573
+ </svg>
574
+ </div>
575
+
576
+ <div [attr.id]="panelId" [class]="panelClasses()" [hidden]="!openState()" role="listbox">
577
+ @if (searchable() && variant() !== 'combobox') {
578
+ <div class="border-b border-border p-2">
579
+ <div class="flex items-center gap-2 rounded-md border border-input bg-background px-2">
580
+ <svg
581
+ aria-hidden="true"
582
+ class="size-4 shrink-0 text-muted-foreground"
583
+ viewBox="0 0 24 24"
584
+ fill="none"
585
+ stroke="currentColor"
586
+ stroke-width="1.75"
587
+ stroke-linecap="round"
588
+ stroke-linejoin="round">
589
+ <circle cx="11" cy="11" r="8" />
590
+ <path d="m21 21-4.35-4.35" />
591
+ </svg>
592
+ <input
593
+ #panelSearch
594
+ class="h-9 min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground"
595
+ [placeholder]="searchPlaceholder()"
596
+ [value]="query()"
597
+ (input)="handleSearchInput($event)"
598
+ (keydown.escape)="close()" />
599
+ @if (query().length > 0) {
600
+ <button
601
+ type="button"
602
+ class="inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground"
603
+ aria-label="Clear search"
604
+ (click)="clearSearch($event)">
605
+ <svg
606
+ aria-hidden="true"
607
+ class="size-3.5"
608
+ viewBox="0 0 24 24"
609
+ fill="none"
610
+ stroke="currentColor"
611
+ stroke-width="2"
612
+ stroke-linecap="round"
613
+ stroke-linejoin="round">
614
+ <path d="M18 6 6 18" />
615
+ <path d="m6 6 12 12" />
616
+ </svg>
617
+ </button>
618
+ }
619
+ </div>
620
+ </div>
621
+ }
622
+
623
+ <div class="max-h-72 overflow-y-auto p-1">
624
+ <ng-content />
625
+ </div>
626
+ </div>
627
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
628
+ }
629
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: PillboxComponent, decorators: [{
630
+ type: Component,
631
+ args: [{
632
+ selector: 'ui-pillbox',
633
+ changeDetection: ChangeDetectionStrategy.OnPush,
634
+ imports: [NgTemplateOutlet],
635
+ providers: [
636
+ { provide: PillboxContext, useExisting: forwardRef(() => PillboxComponent) },
637
+ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => PillboxComponent), multi: true },
638
+ ],
639
+ host: {
640
+ '[class]': 'classes()',
641
+ '[attr.data-slot]': '"pillbox"',
642
+ '[attr.data-open]': 'openState() ? "" : null',
643
+ '[attr.data-size]': 'size()',
644
+ '[attr.data-variant]': 'variant()',
645
+ },
646
+ template: `
647
+ <div
648
+ #trigger
649
+ [attr.id]="resolvedId()"
650
+ role="combobox"
651
+ aria-haspopup="listbox"
652
+ [attr.aria-expanded]="openState()"
653
+ [attr.aria-controls]="openState() ? panelId : null"
654
+ [attr.aria-label]="ariaLabel()"
655
+ [attr.aria-labelledby]="ariaLabelledby()"
656
+ [attr.aria-describedby]="ariaDescribedby()"
657
+ [attr.aria-invalid]="invalid() ? 'true' : null"
658
+ [attr.aria-disabled]="disabledState() ? 'true' : null"
659
+ [attr.tabindex]="disabledState() ? -1 : 0"
660
+ [class]="triggerClasses()"
661
+ (click)="handleTriggerClick()"
662
+ (keydown.enter)="handleTriggerKeydown($any($event))"
663
+ (keydown.space)="handleTriggerKeydown($any($event))"
664
+ (keydown.arrowDown)="handleTriggerKeydown($any($event))"
665
+ (keydown.escape)="close()">
666
+ <div class="flex min-w-0 flex-1 flex-wrap items-center gap-1.5">
667
+ @if (selectedItems().length > 0) {
668
+ @for (item of selectedItems(); track item.track) {
669
+ <span [class]="pillClasses()">
670
+ @if (item.template; as template) {
671
+ <span class="inline-flex min-w-0 max-w-40 items-center gap-1 truncate">
672
+ <ng-container *ngTemplateOutlet="template" />
673
+ </span>
674
+ } @else {
675
+ <span class="max-w-40 truncate">{{ item.label }}</span>
676
+ }
677
+ <button
678
+ type="button"
679
+ class="-mr-1 inline-flex size-4 items-center justify-center rounded-full text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
680
+ [attr.aria-label]="'Remove ' + item.label"
681
+ [disabled]="disabledState() || null"
682
+ (click)="removeSelected(item.value, $event)">
683
+ <svg
684
+ aria-hidden="true"
685
+ class="size-3"
686
+ viewBox="0 0 24 24"
687
+ fill="none"
688
+ stroke="currentColor"
689
+ stroke-width="2"
690
+ stroke-linecap="round"
691
+ stroke-linejoin="round">
692
+ <path d="M18 6 6 18" />
693
+ <path d="m6 6 12 12" />
694
+ </svg>
695
+ </button>
696
+ </span>
697
+ }
698
+ }
699
+
700
+ @if (variant() === 'combobox') {
701
+ <input
702
+ #inlineSearch
703
+ class="min-w-28 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed"
704
+ [placeholder]="selectedItems().length === 0 ? placeholder() : ''"
705
+ [value]="query()"
706
+ [disabled]="disabledState() || null"
707
+ (click)="$event.stopPropagation(); open()"
708
+ (focus)="open()"
709
+ (input)="handleSearchInput($event)"
710
+ (keydown.backspace)="handleInlineBackspace($any($event))"
711
+ (keydown.escape)="close()" />
712
+ } @else if (selectedItems().length === 0) {
713
+ <span class="truncate text-muted-foreground">{{ placeholder() }}</span>
714
+ }
715
+ </div>
716
+
717
+ @if (clearable() && selectedItems().length > 0 && !disabledState()) {
718
+ <button
719
+ type="button"
720
+ class="inline-flex size-5 shrink-0 items-center justify-center rounded-full text-muted-foreground hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
721
+ aria-label="Clear selected options"
722
+ (click)="clear($event)">
723
+ <svg
724
+ aria-hidden="true"
725
+ class="size-3.5"
726
+ viewBox="0 0 24 24"
727
+ fill="none"
728
+ stroke="currentColor"
729
+ stroke-width="2"
730
+ stroke-linecap="round"
731
+ stroke-linejoin="round">
732
+ <path d="M18 6 6 18" />
733
+ <path d="m6 6 12 12" />
734
+ </svg>
735
+ </button>
736
+ }
737
+
738
+ <svg
739
+ aria-hidden="true"
740
+ class="size-4 shrink-0 text-muted-foreground transition-transform"
741
+ [class.rotate-180]="openState()"
742
+ viewBox="0 0 24 24"
743
+ fill="none"
744
+ stroke="currentColor"
745
+ stroke-width="1.75"
746
+ stroke-linecap="round"
747
+ stroke-linejoin="round">
748
+ <path d="m6 9 6 6 6-6" />
749
+ </svg>
750
+ </div>
751
+
752
+ <div [attr.id]="panelId" [class]="panelClasses()" [hidden]="!openState()" role="listbox">
753
+ @if (searchable() && variant() !== 'combobox') {
754
+ <div class="border-b border-border p-2">
755
+ <div class="flex items-center gap-2 rounded-md border border-input bg-background px-2">
756
+ <svg
757
+ aria-hidden="true"
758
+ class="size-4 shrink-0 text-muted-foreground"
759
+ viewBox="0 0 24 24"
760
+ fill="none"
761
+ stroke="currentColor"
762
+ stroke-width="1.75"
763
+ stroke-linecap="round"
764
+ stroke-linejoin="round">
765
+ <circle cx="11" cy="11" r="8" />
766
+ <path d="m21 21-4.35-4.35" />
767
+ </svg>
768
+ <input
769
+ #panelSearch
770
+ class="h-9 min-w-0 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground"
771
+ [placeholder]="searchPlaceholder()"
772
+ [value]="query()"
773
+ (input)="handleSearchInput($event)"
774
+ (keydown.escape)="close()" />
775
+ @if (query().length > 0) {
776
+ <button
777
+ type="button"
778
+ class="inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground"
779
+ aria-label="Clear search"
780
+ (click)="clearSearch($event)">
781
+ <svg
782
+ aria-hidden="true"
783
+ class="size-3.5"
784
+ viewBox="0 0 24 24"
785
+ fill="none"
786
+ stroke="currentColor"
787
+ stroke-width="2"
788
+ stroke-linecap="round"
789
+ stroke-linejoin="round">
790
+ <path d="M18 6 6 18" />
791
+ <path d="m6 6 12 12" />
792
+ </svg>
793
+ </button>
794
+ }
795
+ </div>
796
+ </div>
797
+ }
798
+
799
+ <div class="max-h-72 overflow-y-auto p-1">
800
+ <ng-content />
801
+ </div>
802
+ </div>
803
+ `,
804
+ }]
805
+ }], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], filter: [{ type: i0.Input, args: [{ isSignal: true, alias: "filter", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], emptyText: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyText", required: false }] }], loadingText: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingText", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaDescribedby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-describedby", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], searchChange: [{ type: i0.Output, args: ["searchChange"] }], create: [{ type: i0.Output, args: ["create"] }], openedChange: [{ type: i0.Output, args: ["openedChange"] }], trigger: [{ type: i0.ViewChild, args: ['trigger', { isSignal: true }] }], inlineSearch: [{ type: i0.ViewChild, args: ['inlineSearch', { isSignal: true }] }], panelSearch: [{ type: i0.ViewChild, args: ['panelSearch', { isSignal: true }] }], options: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => PillboxOptionComponent), { ...{ descendants: true }, isSignal: true }] }], createOptions: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => PillboxOptionCreateComponent), { ...{ descendants: true }, isSignal: true }] }], emptyOptions: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => PillboxOptionEmptyComponent), { ...{ descendants: true }, isSignal: true }] }] } });
806
+
807
+ /**
808
+ * Generated bundle index. Do not edit.
809
+ */
810
+
811
+ export { PillboxComponent, PillboxOptionComponent, PillboxOptionCreateComponent, PillboxOptionEmptyComponent, PillboxSelectedDirective };
812
+ //# sourceMappingURL=ojiepermana-angular-component-pillbox.mjs.map