@taiga-ui/core 4.52.0-canary.e10b718 → 4.52.0-canary.e53e79e

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 (321) hide show
  1. package/README.md +1 -1
  2. package/classes/accessors.d.ts +2 -2
  3. package/components/button/button.directive.d.ts +2 -2
  4. package/components/calendar/calendar-sheet.component.d.ts +1 -1
  5. package/components/calendar/calendar-sheet.options.d.ts +1 -3
  6. package/{pipes/calendar-sheet → components/calendar}/calendar-sheet.pipe.d.ts +2 -2
  7. package/components/calendar/calendar-spin.component.d.ts +1 -0
  8. package/components/calendar/calendar-year.component.d.ts +1 -1
  9. package/components/calendar/calendar.options.d.ts +9 -0
  10. package/components/calendar/index.d.ts +3 -0
  11. package/{pipes/order-week-days → components/calendar}/order-week-days.pipe.d.ts +1 -1
  12. package/components/cell/cell.directive.d.ts +9 -0
  13. package/components/cell/cell.options.d.ts +6 -0
  14. package/components/cell/index.d.ts +2 -0
  15. package/components/data-list/data-list.component.d.ts +8 -12
  16. package/components/data-list/data-list.d.ts +3 -4
  17. package/components/data-list/data-list.tokens.d.ts +1 -23
  18. package/components/data-list/index.d.ts +3 -4
  19. package/components/data-list/opt-group.directive.d.ts +2 -2
  20. package/components/data-list/option-content.directive.d.ts +14 -0
  21. package/components/data-list/option-with-value.directive.d.ts +9 -0
  22. package/components/data-list/option.directive.d.ts +19 -0
  23. package/components/error/error.component.d.ts +6 -8
  24. package/components/error/error.d.ts +4 -0
  25. package/components/error/error.directive.d.ts +19 -0
  26. package/components/error/error.pipe.d.ts +10 -0
  27. package/components/error/index.d.ts +3 -0
  28. package/components/expand/expand.component.d.ts +9 -28
  29. package/components/expand/index.d.ts +0 -2
  30. package/components/icon/icon.component.d.ts +2 -2
  31. package/components/index.d.ts +3 -3
  32. package/components/input/index.d.ts +2 -0
  33. package/components/input/input.d.ts +5 -0
  34. package/components/input/input.directive.d.ts +30 -0
  35. package/components/label/label.directive.d.ts +1 -1
  36. package/components/link/index.d.ts +0 -1
  37. package/components/link/link.directive.d.ts +8 -6
  38. package/components/loader/loader.component.d.ts +7 -7
  39. package/components/loader/loader.options.d.ts +1 -3
  40. package/components/notification/index.d.ts +3 -0
  41. package/components/notification/notification.component.d.ts +14 -0
  42. package/components/notification/notification.d.ts +3 -0
  43. package/components/notification/notification.directive.d.ts +7 -12
  44. package/components/notification/notification.options.d.ts +10 -7
  45. package/components/notification/notification.service.d.ts +17 -0
  46. package/components/root/root.component.d.ts +2 -3
  47. package/components/scrollbar/scroll-into-view.directive.d.ts +3 -2
  48. package/components/scrollbar/scroll-ref.directive.d.ts +2 -0
  49. package/components/scrollbar/scrollbar.component.d.ts +1 -5
  50. package/components/scrollbar/scrollbar.directive.d.ts +2 -2
  51. package/components/spin-button/spin-button.component.d.ts +9 -10
  52. package/components/textfield/index.d.ts +1 -4
  53. package/components/textfield/textfield-multi/textfield-item.component.d.ts +3 -2
  54. package/components/textfield/textfield-multi/textfield-multi.component.d.ts +10 -15
  55. package/components/textfield/textfield.component.d.ts +23 -37
  56. package/components/textfield/textfield.d.ts +2 -4
  57. package/components/textfield/textfield.options.d.ts +8 -11
  58. package/{directives → components}/title/title.directive.d.ts +2 -3
  59. package/directives/appearance/appearance.directive.d.ts +1 -1
  60. package/directives/appearance/appearance.options.d.ts +1 -1
  61. package/directives/date-format/date-format.directive.d.ts +3 -7
  62. package/directives/group/group.directive.d.ts +7 -7
  63. package/directives/group/group.options.d.ts +1 -3
  64. package/directives/index.d.ts +0 -5
  65. package/directives/items-handlers/items-handlers.directive.d.ts +5 -9
  66. package/directives/items-handlers/items-handlers.tokens.d.ts +4 -4
  67. package/directives/number-format/number-format.directive.d.ts +3 -7
  68. package/fesm2022/taiga-ui-core-classes.mjs +9 -11
  69. package/fesm2022/taiga-ui-core-classes.mjs.map +1 -1
  70. package/fesm2022/taiga-ui-core-components-button.mjs +13 -20
  71. package/fesm2022/taiga-ui-core-components-button.mjs.map +1 -1
  72. package/fesm2022/taiga-ui-core-components-calendar.mjs +140 -36
  73. package/fesm2022/taiga-ui-core-components-calendar.mjs.map +1 -1
  74. package/fesm2022/taiga-ui-core-components-cell.mjs +45 -0
  75. package/fesm2022/taiga-ui-core-components-cell.mjs.map +1 -0
  76. package/fesm2022/taiga-ui-core-components-data-list.mjs +112 -281
  77. package/fesm2022/taiga-ui-core-components-data-list.mjs.map +1 -1
  78. package/fesm2022/taiga-ui-core-components-error.mjs +109 -24
  79. package/fesm2022/taiga-ui-core-components-error.mjs.map +1 -1
  80. package/fesm2022/taiga-ui-core-components-expand.mjs +33 -131
  81. package/fesm2022/taiga-ui-core-components-expand.mjs.map +1 -1
  82. package/fesm2022/taiga-ui-core-components-icon.mjs +9 -10
  83. package/fesm2022/taiga-ui-core-components-icon.mjs.map +1 -1
  84. package/fesm2022/taiga-ui-core-components-input.mjs +103 -0
  85. package/fesm2022/taiga-ui-core-components-input.mjs.map +1 -0
  86. package/fesm2022/taiga-ui-core-components-label.mjs +13 -18
  87. package/fesm2022/taiga-ui-core-components-label.mjs.map +1 -1
  88. package/fesm2022/taiga-ui-core-components-link.mjs +16 -36
  89. package/fesm2022/taiga-ui-core-components-link.mjs.map +1 -1
  90. package/fesm2022/taiga-ui-core-components-loader.mjs +16 -34
  91. package/fesm2022/taiga-ui-core-components-loader.mjs.map +1 -1
  92. package/fesm2022/taiga-ui-core-components-notification.mjs +108 -68
  93. package/fesm2022/taiga-ui-core-components-notification.mjs.map +1 -1
  94. package/fesm2022/taiga-ui-core-components-root.mjs +8 -22
  95. package/fesm2022/taiga-ui-core-components-root.mjs.map +1 -1
  96. package/fesm2022/taiga-ui-core-components-scrollbar.mjs +68 -82
  97. package/fesm2022/taiga-ui-core-components-scrollbar.mjs.map +1 -1
  98. package/fesm2022/taiga-ui-core-components-spin-button.mjs +18 -31
  99. package/fesm2022/taiga-ui-core-components-spin-button.mjs.map +1 -1
  100. package/fesm2022/taiga-ui-core-components-textfield.mjs +122 -421
  101. package/fesm2022/taiga-ui-core-components-textfield.mjs.map +1 -1
  102. package/fesm2022/taiga-ui-core-components-title.mjs +37 -0
  103. package/fesm2022/taiga-ui-core-components-title.mjs.map +1 -0
  104. package/fesm2022/taiga-ui-core-components.mjs +3 -3
  105. package/fesm2022/taiga-ui-core-directives-appearance.mjs +18 -21
  106. package/fesm2022/taiga-ui-core-directives-appearance.mjs.map +1 -1
  107. package/fesm2022/taiga-ui-core-directives-date-format.mjs +26 -20
  108. package/fesm2022/taiga-ui-core-directives-date-format.mjs.map +1 -1
  109. package/fesm2022/taiga-ui-core-directives-group.mjs +25 -40
  110. package/fesm2022/taiga-ui-core-directives-group.mjs.map +1 -1
  111. package/fesm2022/taiga-ui-core-directives-icons.mjs +14 -17
  112. package/fesm2022/taiga-ui-core-directives-icons.mjs.map +1 -1
  113. package/fesm2022/taiga-ui-core-directives-items-handlers.mjs +18 -42
  114. package/fesm2022/taiga-ui-core-directives-items-handlers.mjs.map +1 -1
  115. package/fesm2022/taiga-ui-core-directives-number-format.mjs +32 -20
  116. package/fesm2022/taiga-ui-core-directives-number-format.mjs.map +1 -1
  117. package/fesm2022/taiga-ui-core-directives.mjs +0 -5
  118. package/fesm2022/taiga-ui-core-directives.mjs.map +1 -1
  119. package/fesm2022/taiga-ui-core-pipes-format-number.mjs +21 -15
  120. package/fesm2022/taiga-ui-core-pipes-format-number.mjs.map +1 -1
  121. package/fesm2022/taiga-ui-core-pipes.mjs +0 -7
  122. package/fesm2022/taiga-ui-core-pipes.mjs.map +1 -1
  123. package/fesm2022/taiga-ui-core-portals-alert.mjs +73 -0
  124. package/fesm2022/taiga-ui-core-portals-alert.mjs.map +1 -0
  125. package/fesm2022/taiga-ui-core-portals-dialog.mjs +158 -0
  126. package/fesm2022/taiga-ui-core-portals-dialog.mjs.map +1 -0
  127. package/fesm2022/{taiga-ui-core-directives-dropdown.mjs → taiga-ui-core-portals-dropdown.mjs} +180 -332
  128. package/fesm2022/taiga-ui-core-portals-dropdown.mjs.map +1 -0
  129. package/fesm2022/taiga-ui-core-portals-hint.mjs +607 -0
  130. package/fesm2022/taiga-ui-core-portals-hint.mjs.map +1 -0
  131. package/fesm2022/taiga-ui-core-portals-modal.mjs +89 -0
  132. package/fesm2022/taiga-ui-core-portals-modal.mjs.map +1 -0
  133. package/fesm2022/taiga-ui-core-portals-popup.mjs +56 -0
  134. package/fesm2022/taiga-ui-core-portals-popup.mjs.map +1 -0
  135. package/fesm2022/taiga-ui-core-portals.mjs +11 -0
  136. package/fesm2022/taiga-ui-core-portals.mjs.map +1 -0
  137. package/fesm2022/taiga-ui-core-services.mjs +16 -55
  138. package/fesm2022/taiga-ui-core-services.mjs.map +1 -1
  139. package/fesm2022/taiga-ui-core-tokens.mjs +29 -51
  140. package/fesm2022/taiga-ui-core-tokens.mjs.map +1 -1
  141. package/fesm2022/taiga-ui-core-utils-format.mjs +1 -22
  142. package/fesm2022/taiga-ui-core-utils-format.mjs.map +1 -1
  143. package/fesm2022/taiga-ui-core-utils-miscellaneous.mjs +8 -18
  144. package/fesm2022/taiga-ui-core-utils-miscellaneous.mjs.map +1 -1
  145. package/fesm2022/taiga-ui-core.mjs +1 -1
  146. package/index.d.ts +1 -1
  147. package/package.json +58 -80
  148. package/pipes/format-number/format-number.pipe.d.ts +6 -4
  149. package/pipes/index.d.ts +0 -7
  150. package/portals/alert/alert.directive.d.ts +11 -0
  151. package/portals/alert/alert.service.d.ts +12 -0
  152. package/portals/alert/index.d.ts +2 -0
  153. package/portals/dialog/dialog.component.d.ts +14 -0
  154. package/portals/dialog/dialog.directive.d.ts +8 -0
  155. package/{components → portals}/dialog/dialog.factory.d.ts +1 -1
  156. package/portals/dialog/dialog.options.d.ts +25 -0
  157. package/{components/dialog/dialog-close.service.d.ts → portals/dialog/dialog.providers.d.ts} +2 -0
  158. package/portals/dialog/dialog.service.d.ts +10 -0
  159. package/portals/dialog/index.d.ts +6 -0
  160. package/portals/dropdown/dropdown-content.directive.d.ts +9 -0
  161. package/{directives → portals}/dropdown/dropdown-hover.directive.d.ts +5 -10
  162. package/{directives → portals}/dropdown/dropdown-hover.options.d.ts +1 -3
  163. package/{directives → portals}/dropdown/dropdown-manual.directive.d.ts +2 -2
  164. package/portals/dropdown/dropdown-open.directive.d.ts +30 -0
  165. package/{directives → portals}/dropdown/dropdown-position-sided.directive.d.ts +3 -3
  166. package/{directives → portals}/dropdown/dropdown-position.directive.d.ts +5 -5
  167. package/{directives → portals}/dropdown/dropdown-selection.directive.d.ts +4 -5
  168. package/{directives → portals}/dropdown/dropdown.bindings.d.ts +0 -1
  169. package/{directives → portals}/dropdown/dropdown.d.ts +2 -3
  170. package/{directives → portals}/dropdown/dropdown.directive.d.ts +6 -8
  171. package/{directives → portals}/dropdown/index.d.ts +1 -4
  172. package/{directives → portals}/hint/hint-describe.directive.d.ts +4 -6
  173. package/{directives → portals}/hint/hint-host.directive.d.ts +2 -2
  174. package/{directives → portals}/hint/hint-hover.directive.d.ts +3 -4
  175. package/{directives → portals}/hint/hint-manual.directive.d.ts +2 -2
  176. package/{directives → portals}/hint/hint-options.directive.d.ts +3 -3
  177. package/{directives → portals}/hint/hint-overflow.directive.d.ts +2 -2
  178. package/{directives → portals}/hint/hint-position.directive.d.ts +5 -6
  179. package/{directives → portals}/hint/hint-unstyled.component.d.ts +2 -7
  180. package/portals/hint/hint.component.d.ts +29 -0
  181. package/portals/hint/hint.directive.d.ts +24 -0
  182. package/{directives → portals}/hint/index.d.ts +0 -2
  183. package/portals/index.d.ts +6 -0
  184. package/portals/modal/index.d.ts +2 -0
  185. package/portals/modal/modal.component.d.ts +17 -0
  186. package/portals/modal/modal.service.d.ts +13 -0
  187. package/portals/popup/popup.directive.d.ts +12 -0
  188. package/{directives → portals}/popup/popup.service.d.ts +1 -1
  189. package/{directives → portals}/popup/popups.component.d.ts +2 -2
  190. package/services/index.d.ts +0 -2
  191. package/styles/components/link.less +9 -23
  192. package/styles/components/textfield.less +10 -7
  193. package/styles/mixins/appearance.less +2 -2
  194. package/styles/mixins/mixins.less +0 -5
  195. package/styles/mixins/mixins.scss +0 -5
  196. package/styles/mixins/slider.less +21 -16
  197. package/styles/mixins/slider.scss +1 -2
  198. package/styles/theme/variables.less +2 -4
  199. package/tokens/common-icons.d.ts +3 -3
  200. package/tokens/date-format.d.ts +2 -3
  201. package/tokens/i18n.d.ts +7 -7
  202. package/tokens/icon-resolver.d.ts +0 -4
  203. package/tokens/icons.d.ts +0 -4
  204. package/tokens/index.d.ts +1 -4
  205. package/tokens/number-format.d.ts +2 -3
  206. package/tokens/validation-errors.d.ts +4 -0
  207. package/types/index.d.ts +0 -3
  208. package/types/point.d.ts +1 -1
  209. package/types/size.d.ts +0 -11
  210. package/utils/format/index.d.ts +0 -1
  211. package/utils/miscellaneous/get-duration.d.ts +2 -0
  212. package/utils/miscellaneous/index.d.ts +1 -1
  213. package/animations/animations.d.ts +0 -109
  214. package/animations/index.d.ts +0 -1
  215. package/components/alert/alert.component.d.ts +0 -15
  216. package/components/alert/alert.directive.d.ts +0 -7
  217. package/components/alert/alert.interfaces.d.ts +0 -12
  218. package/components/alert/alert.service.d.ts +0 -7
  219. package/components/alert/alert.tokens.d.ts +0 -12
  220. package/components/alert/alerts.component.d.ts +0 -12
  221. package/components/alert/index.d.ts +0 -6
  222. package/components/data-list/data-list.directive.d.ts +0 -7
  223. package/components/data-list/option/option-content.d.ts +0 -16
  224. package/components/data-list/option/option-legacy.component.d.ts +0 -24
  225. package/components/data-list/option/option.directive.d.ts +0 -27
  226. package/components/dialog/active-zone-adapter.directive.d.ts +0 -11
  227. package/components/dialog/dialog.component.d.ts +0 -20
  228. package/components/dialog/dialog.directive.d.ts +0 -7
  229. package/components/dialog/dialog.interfaces.d.ts +0 -34
  230. package/components/dialog/dialog.service.d.ts +0 -7
  231. package/components/dialog/dialog.tokens.d.ts +0 -15
  232. package/components/dialog/dialogs.component.d.ts +0 -8
  233. package/components/dialog/index.d.ts +0 -8
  234. package/components/expand/expand-content.directive.d.ts +0 -8
  235. package/components/expand/expand.d.ts +0 -6
  236. package/components/fullscreen/fullscreen.component.d.ts +0 -14
  237. package/components/fullscreen/index.d.ts +0 -1
  238. package/components/link/link.options.d.ts +0 -12
  239. package/components/textfield/select.directive.d.ts +0 -19
  240. package/components/textfield/textfield-dropdown.directive.d.ts +0 -16
  241. package/components/textfield/textfield.directive.d.ts +0 -38
  242. package/directives/dropdown/dropdown-open-legacy.directive.d.ts +0 -12
  243. package/directives/dropdown/dropdown-open.directive.d.ts +0 -33
  244. package/directives/dropdown/dropdown-portal.directive.d.ts +0 -14
  245. package/directives/dropdown/dropdown.service.d.ts +0 -6
  246. package/directives/dropdown/dropdowns.component.d.ts +0 -9
  247. package/directives/hint/hint.component.d.ts +0 -30
  248. package/directives/hint/hint.directive.d.ts +0 -26
  249. package/directives/hint/hint.service.d.ts +0 -13
  250. package/directives/hint/hints.component.d.ts +0 -12
  251. package/directives/popup/popup.directive.d.ts +0 -11
  252. package/directives/surface/index.d.ts +0 -1
  253. package/directives/surface/surface.directive.d.ts +0 -8
  254. package/fesm2022/taiga-ui-core-animations.mjs +0 -370
  255. package/fesm2022/taiga-ui-core-animations.mjs.map +0 -1
  256. package/fesm2022/taiga-ui-core-components-alert.mjs +0 -149
  257. package/fesm2022/taiga-ui-core-components-alert.mjs.map +0 -1
  258. package/fesm2022/taiga-ui-core-components-dialog.mjs +0 -229
  259. package/fesm2022/taiga-ui-core-components-dialog.mjs.map +0 -1
  260. package/fesm2022/taiga-ui-core-components-fullscreen.mjs +0 -77
  261. package/fesm2022/taiga-ui-core-components-fullscreen.mjs.map +0 -1
  262. package/fesm2022/taiga-ui-core-directives-dropdown.mjs.map +0 -1
  263. package/fesm2022/taiga-ui-core-directives-hint.mjs +0 -709
  264. package/fesm2022/taiga-ui-core-directives-hint.mjs.map +0 -1
  265. package/fesm2022/taiga-ui-core-directives-popup.mjs +0 -63
  266. package/fesm2022/taiga-ui-core-directives-popup.mjs.map +0 -1
  267. package/fesm2022/taiga-ui-core-directives-surface.mjs +0 -50
  268. package/fesm2022/taiga-ui-core-directives-surface.mjs.map +0 -1
  269. package/fesm2022/taiga-ui-core-directives-title.mjs +0 -43
  270. package/fesm2022/taiga-ui-core-directives-title.mjs.map +0 -1
  271. package/fesm2022/taiga-ui-core-pipes-auto-color.mjs +0 -25
  272. package/fesm2022/taiga-ui-core-pipes-auto-color.mjs.map +0 -1
  273. package/fesm2022/taiga-ui-core-pipes-calendar-sheet.mjs +0 -94
  274. package/fesm2022/taiga-ui-core-pipes-calendar-sheet.mjs.map +0 -1
  275. package/fesm2022/taiga-ui-core-pipes-flag.mjs +0 -32
  276. package/fesm2022/taiga-ui-core-pipes-flag.mjs.map +0 -1
  277. package/fesm2022/taiga-ui-core-pipes-format-date.mjs +0 -28
  278. package/fesm2022/taiga-ui-core-pipes-format-date.mjs.map +0 -1
  279. package/fesm2022/taiga-ui-core-pipes-initials.mjs +0 -29
  280. package/fesm2022/taiga-ui-core-pipes-initials.mjs.map +0 -1
  281. package/fesm2022/taiga-ui-core-pipes-month.mjs +0 -29
  282. package/fesm2022/taiga-ui-core-pipes-month.mjs.map +0 -1
  283. package/fesm2022/taiga-ui-core-pipes-order-week-days.mjs +0 -36
  284. package/fesm2022/taiga-ui-core-pipes-order-week-days.mjs.map +0 -1
  285. package/pipes/auto-color/auto-color.pipe.d.ts +0 -7
  286. package/pipes/auto-color/index.d.ts +0 -1
  287. package/pipes/calendar-sheet/index.d.ts +0 -1
  288. package/pipes/calendar-sheet/utils.d.ts +0 -20
  289. package/pipes/flag/flag.pipe.d.ts +0 -14
  290. package/pipes/flag/index.d.ts +0 -1
  291. package/pipes/format-date/format-date.pipe.d.ts +0 -9
  292. package/pipes/format-date/index.d.ts +0 -1
  293. package/pipes/initials/index.d.ts +0 -1
  294. package/pipes/initials/initials.pipe.d.ts +0 -7
  295. package/pipes/month/index.d.ts +0 -1
  296. package/pipes/month/month.pipe.d.ts +0 -10
  297. package/pipes/order-week-days/index.d.ts +0 -1
  298. package/services/dark-theme.service.d.ts +0 -10
  299. package/services/format-date.service.d.ts +0 -8
  300. package/tokens/day-type-handler.d.ts +0 -7
  301. package/tokens/first-day-of-week.d.ts +0 -5
  302. package/tokens/scroll-ref.d.ts +0 -2
  303. package/tokens/spin-icons.d.ts +0 -6
  304. package/types/portal-item.d.ts +0 -9
  305. package/types/range-state.d.ts +0 -4
  306. package/types/value-content-context.d.ts +0 -4
  307. package/utils/format/string-hash-to-hsl.d.ts +0 -6
  308. package/utils/miscellaneous/to-animation-options.d.ts +0 -4
  309. /package/{directives → components}/title/index.d.ts +0 -0
  310. /package/{directives → portals}/dropdown/dropdown-context.directive.d.ts +0 -0
  311. /package/{directives → portals}/dropdown/dropdown-limit-width.d.ts +0 -0
  312. /package/{directives → portals}/dropdown/dropdown-options.directive.d.ts +0 -0
  313. /package/{directives → portals}/dropdown/dropdown.component.d.ts +0 -0
  314. /package/{directives → portals}/dropdown/dropdown.driver.d.ts +0 -0
  315. /package/{directives → portals}/dropdown/dropdown.providers.d.ts +0 -0
  316. /package/{directives → portals}/dropdown/with-dropdown-open.directive.d.ts +0 -0
  317. /package/{directives → portals}/hint/hint-driver.directive.d.ts +0 -0
  318. /package/{directives → portals}/hint/hint-pointer.directive.d.ts +0 -0
  319. /package/{directives → portals}/hint/hint.d.ts +0 -0
  320. /package/{directives → portals}/hint/hint.providers.d.ts +0 -0
  321. /package/{directives → portals}/popup/index.d.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Directive, InjectionToken, Optional, Self, SkipSelf, inject, Input, EventEmitter, Output, ChangeDetectorRef, INJECTOR, signal, TemplateRef, computed, ChangeDetectionStrategy, Component, ElementRef, ContentChild, ViewContainerRef } from '@angular/core';
3
- import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
2
+ import { Injectable, Directive, InjectionToken, Optional, Self, SkipSelf, inject, Input, ChangeDetectorRef, effect, signal, INJECTOR, input, computed, TemplateRef, forwardRef, ChangeDetectionStrategy, Component, PLATFORM_ID, contentChild, ElementRef, model, ViewContainerRef } from '@angular/core';
3
+ import { outputFromObservable, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
4
4
  import { EMPTY_CLIENT_RECT, TUI_TRUE_HANDLER, CHAR_ZERO_WIDTH_SPACE, CHAR_NO_BREAK_SPACE } from '@taiga-ui/cdk/constants';
5
5
  import * as i1 from '@taiga-ui/cdk/directives/active-zone';
6
6
  import { TuiActiveZone } from '@taiga-ui/cdk/directives/active-zone';
@@ -8,24 +8,25 @@ import * as i2 from '@taiga-ui/cdk/directives/animated';
8
8
  import { TuiAnimated } from '@taiga-ui/cdk/directives/animated';
9
9
  import { tuiInjectElement, tuiGetActualTarget, tuiPointToClientRect, tuiIsElement, tuiIsHTMLElement, tuiIsElementEditable, tuiIsTextNode, tuiIsTextfield } from '@taiga-ui/cdk/utils/dom';
10
10
  import { tuiClamp } from '@taiga-ui/cdk/utils/math';
11
- import { tuiProvide, tuiPure, tuiPx, tuiProvideOptions, tuiIsString, tuiDirectiveBinding } from '@taiga-ui/cdk/utils/miscellaneous';
12
- import { TuiDriverDirective, TuiPositionAccessor, tuiFallbackAccessor, TuiRectAccessor, tuiAsRectAccessor, tuiAsVehicle, tuiPositionAccessorFor, tuiRectAccessorFor, tuiAsDriver, TuiDriver, tuiAsPositionAccessor } from '@taiga-ui/core/classes';
11
+ import { tuiPx, tuiSetSignal, tuiIsString } from '@taiga-ui/cdk/utils/miscellaneous';
12
+ import { TuiDriverDirective, TuiPositionAccessor, tuiFallbackAccessor, TuiRectAccessor, tuiAsVehicle, tuiPositionAccessorFor, tuiRectAccessorFor, tuiAsDriver, tuiAsRectAccessor, TuiDriver, tuiAsPositionAccessor } from '@taiga-ui/core/classes';
13
13
  import { TuiScrollbar } from '@taiga-ui/core/components/scrollbar';
14
14
  import { TuiVisualViewportService, TuiPositionService } from '@taiga-ui/core/services';
15
15
  import { TUI_VIEWPORT, TUI_DARK_MODE, TUI_SELECTION_STREAM } from '@taiga-ui/core/tokens';
16
16
  import { PolymorpheusComponent, PolymorpheusTemplate, PolymorpheusOutlet } from '@taiga-ui/polymorpheus';
17
- import { BehaviorSubject, Subject, throttleTime, takeWhile, map, merge, filter, fromEvent, switchMap, delay, startWith, takeUntil, distinctUntilChanged, of, tap, share, combineLatest } from 'rxjs';
17
+ import { BehaviorSubject, Subject, distinctUntilChanged, throttleTime, takeWhile, map, merge, filter, fromEvent, switchMap, delay, startWith, takeUntil, of, tap, share, combineLatest } from 'rxjs';
18
18
  import { coerceArray } from '@angular/cdk/coercion';
19
19
  import { tuiZonefreeScheduler, tuiTypedFromEvent, tuiZonefree, tuiIfMap, tuiCloseWatcher, tuiZonefull, tuiWatch, tuiZoneOptimized } from '@taiga-ui/cdk/observables';
20
+ import { TuiPopupService } from '@taiga-ui/core/portals/popup';
20
21
  import { tuiOverrideOptions, tuiCheckFixedPosition, tuiGetWordRange } from '@taiga-ui/core/utils';
21
- import { TuiPortalService, TuiPortals, tuiAsPortal } from '@taiga-ui/cdk/classes';
22
+ import { tuiProvide, tuiCreateOptions, tuiDirectiveBinding } from '@taiga-ui/cdk/utils/di';
23
+ import { isPlatformBrowser, DOCUMENT } from '@angular/common';
22
24
  import { __decorate } from 'tslib';
23
- import { DOCUMENT } from '@angular/common';
24
- import { TUI_IS_TOUCH, TUI_RANGE } from '@taiga-ui/cdk/tokens';
25
+ import { TUI_IS_TOUCH } from '@taiga-ui/cdk/tokens';
25
26
  import { shouldCall } from '@taiga-ui/event-plugins';
26
27
  import * as i1$1 from '@taiga-ui/cdk/directives/obscured';
27
28
  import { TuiObscured } from '@taiga-ui/cdk/directives/obscured';
28
- import { tuiIsNativeKeyboardFocusable, tuiGetClosestFocusable, tuiIsNativeFocusedIn, tuiGetNativeFocused } from '@taiga-ui/cdk/utils/focus';
29
+ import { tuiIsFocusable, tuiGetClosestFocusable, tuiIsFocusedIn, tuiGetFocused } from '@taiga-ui/cdk/utils/focus';
29
30
  import { tuiIsEditingKey, tuiOverrideOptions as tuiOverrideOptions$1 } from '@taiga-ui/core/utils/miscellaneous';
30
31
 
31
32
  class TuiDropdownDriver extends BehaviorSubject {
@@ -33,10 +34,10 @@ class TuiDropdownDriver extends BehaviorSubject {
33
34
  super(false);
34
35
  this.type = 'dropdown';
35
36
  }
36
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownDriver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
37
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownDriver }); }
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownDriver, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
38
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownDriver }); }
38
39
  }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownDriver, decorators: [{
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownDriver, decorators: [{
40
41
  type: Injectable
41
42
  }], ctorParameters: () => [] });
42
43
  class TuiDropdownDriverDirective extends TuiDriverDirective {
@@ -44,14 +45,11 @@ class TuiDropdownDriverDirective extends TuiDriverDirective {
44
45
  super(...arguments);
45
46
  this.type = 'dropdown';
46
47
  }
47
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownDriverDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
48
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownDriverDirective, isStandalone: true, usesInheritance: true, ngImport: i0 }); }
48
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownDriverDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
49
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.16", type: TuiDropdownDriverDirective, isStandalone: true, usesInheritance: true, ngImport: i0 }); }
49
50
  }
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownDriverDirective, decorators: [{
51
- type: Directive,
52
- args: [{
53
- standalone: true,
54
- }]
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownDriverDirective, decorators: [{
52
+ type: Directive
55
53
  }] });
56
54
 
57
55
  /**
@@ -62,17 +60,6 @@ const TUI_DROPDOWN_COMPONENT = new InjectionToken(ngDevMode ? 'TUI_DROPDOWN_COMP
62
60
  });
63
61
  const TUI_DROPDOWN_CONTEXT = new InjectionToken(ngDevMode ? 'TUI_DROPDOWN_CONTEXT' : '');
64
62
 
65
- class TuiDropdownService extends TuiPortalService {
66
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
67
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownService, providedIn: 'root' }); }
68
- }
69
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownService, decorators: [{
70
- type: Injectable,
71
- args: [{
72
- providedIn: 'root',
73
- }]
74
- }] });
75
-
76
63
  /** Default values for dropdown options */
77
64
  const TUI_DROPDOWN_DEFAULT_OPTIONS = {
78
65
  align: 'left',
@@ -108,13 +95,12 @@ class TuiDropdownOptionsDirective {
108
95
  this.maxHeight = this.options.maxHeight;
109
96
  this.offset = this.options.offset;
110
97
  }
111
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownOptionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
112
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownOptionsDirective, isStandalone: true, selector: "[tuiDropdownAlign], [tuiDropdownAppearance], [tuiDropdownDirection], [tuiDropdownLimitWidth], [tuiDropdownMinHeight], [tuiDropdownMaxHeight], [tuiDropdownOffset]", inputs: { align: ["tuiDropdownAlign", "align"], appearance: ["tuiDropdownAppearance", "appearance"], direction: ["tuiDropdownDirection", "direction"], limitWidth: ["tuiDropdownLimitWidth", "limitWidth"], minHeight: ["tuiDropdownMinHeight", "minHeight"], maxHeight: ["tuiDropdownMaxHeight", "maxHeight"], offset: ["tuiDropdownOffset", "offset"] }, providers: [tuiProvide(TUI_DROPDOWN_OPTIONS, TuiDropdownOptionsDirective)], ngImport: i0 }); }
98
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownOptionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
99
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.16", type: TuiDropdownOptionsDirective, isStandalone: true, selector: "[tuiDropdownAlign], [tuiDropdownAppearance], [tuiDropdownDirection], [tuiDropdownLimitWidth], [tuiDropdownMinHeight], [tuiDropdownMaxHeight], [tuiDropdownOffset]", inputs: { align: ["tuiDropdownAlign", "align"], appearance: ["tuiDropdownAppearance", "appearance"], direction: ["tuiDropdownDirection", "direction"], limitWidth: ["tuiDropdownLimitWidth", "limitWidth"], minHeight: ["tuiDropdownMinHeight", "minHeight"], maxHeight: ["tuiDropdownMaxHeight", "maxHeight"], offset: ["tuiDropdownOffset", "offset"] }, providers: [tuiProvide(TUI_DROPDOWN_OPTIONS, TuiDropdownOptionsDirective)], ngImport: i0 }); }
113
100
  }
114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownOptionsDirective, decorators: [{
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownOptionsDirective, decorators: [{
115
102
  type: Directive,
116
103
  args: [{
117
- standalone: true,
118
104
  selector: '[tuiDropdownAlign], [tuiDropdownAppearance], [tuiDropdownDirection], [tuiDropdownLimitWidth], [tuiDropdownMinHeight], [tuiDropdownMaxHeight], [tuiDropdownOffset]',
119
105
  providers: [tuiProvide(TUI_DROPDOWN_OPTIONS, TuiDropdownOptionsDirective)],
120
106
  }]
@@ -147,18 +133,16 @@ class TuiDropdownPosition extends TuiPositionAccessor {
147
133
  this.el = tuiInjectElement();
148
134
  this.options = inject(TUI_DROPDOWN_OPTIONS);
149
135
  this.viewport = inject(TUI_VIEWPORT);
150
- this.directionChange = new EventEmitter();
136
+ this.direction = new Subject();
151
137
  this.type = 'dropdown';
152
- this.accessor = tuiFallbackAccessor('dropdown')(inject(TuiRectAccessor), inject(TuiDropdownDirective, { optional: true }));
153
- }
154
- emitDirection(direction) {
155
- this.directionChange.emit(direction);
138
+ this.accessor = tuiFallbackAccessor('dropdown')(inject(TuiRectAccessor, { optional: true }), { getClientRect: () => this.el.getBoundingClientRect() });
139
+ this.tuiDropdownDirectionChange = outputFromObservable(this.direction.pipe(distinctUntilChanged()));
156
140
  }
157
141
  getPosition({ width, height }) {
158
142
  if (!width && !height) {
159
143
  this.previous = undefined;
160
144
  }
161
- const hostRect = this.accessor?.getClientRect() ?? EMPTY_CLIENT_RECT;
145
+ const hostRect = this.accessor.getClientRect();
162
146
  const viewportRect = this.viewport.getClientRect();
163
147
  const { minHeight, direction, offset, limitWidth } = this.options;
164
148
  const align = this.getAlign(this.options.align);
@@ -188,12 +172,12 @@ class TuiDropdownPosition extends TuiPositionAccessor {
188
172
  const better = available.top > available.bottom ? 'top' : 'bottom';
189
173
  if ((available[previous] > minHeight && direction) ||
190
174
  available[previous] > height) {
191
- this.emitDirection(previous);
192
- return [position[previous], position[align]];
175
+ this.direction.next(previous);
176
+ return [position[align], position[previous]];
193
177
  }
194
178
  this.previous = better;
195
- this.emitDirection(better);
196
- return [position[better], position[align]];
179
+ this.direction.next(better);
180
+ return [position[align], position[better]];
197
181
  }
198
182
  getAlign(align) {
199
183
  const rtl = this.el.matches('[dir="rtl"] :scope');
@@ -202,28 +186,18 @@ class TuiDropdownPosition extends TuiPositionAccessor {
202
186
  }
203
187
  return rtl && align === 'right' ? 'left' : align;
204
188
  }
205
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownPosition, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
206
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownPosition, isStandalone: true, outputs: { directionChange: "tuiDropdownDirectionChange" }, usesInheritance: true, ngImport: i0 }); }
189
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownPosition, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
190
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.16", type: TuiDropdownPosition, isStandalone: true, outputs: { tuiDropdownDirectionChange: "tuiDropdownDirectionChange" }, usesInheritance: true, ngImport: i0 }); }
207
191
  }
208
- __decorate([
209
- tuiPure
210
- ], TuiDropdownPosition.prototype, "emitDirection", null);
211
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownPosition, decorators: [{
212
- type: Directive,
213
- args: [{
214
- standalone: true,
215
- }]
216
- }], propDecorators: { directionChange: [{
217
- type: Output,
218
- args: ['tuiDropdownDirectionChange']
219
- }], emitDirection: [] } });
192
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownPosition, decorators: [{
193
+ type: Directive
194
+ }] });
220
195
 
221
196
  class TuiDropdownDirective {
222
197
  constructor() {
223
198
  this.refresh$ = new Subject();
224
- this.service = inject(TuiDropdownService);
199
+ this.service = inject(TuiPopupService);
225
200
  this.cdr = inject(ChangeDetectorRef);
226
- // TODO: think of a better solution later
227
201
  this.drivers = coerceArray(inject(TuiDropdownDriver, { self: true, optional: true }));
228
202
  this.sub = this.refresh$
229
203
  .pipe(throttleTime(0, tuiZonefreeScheduler()), takeUntilDestroyed())
@@ -231,33 +205,25 @@ class TuiDropdownDirective {
231
205
  this.ref()?.changeDetectorRef.detectChanges();
232
206
  this.ref()?.changeDetectorRef.markForCheck();
233
207
  });
208
+ this.autoClose = effect(() => {
209
+ if (!this.content()) {
210
+ this.toggle(false);
211
+ }
212
+ });
213
+ this.ref = signal(null);
234
214
  this.el = tuiInjectElement();
235
215
  this.type = 'dropdown';
236
216
  this.component = new PolymorpheusComponent(inject(TUI_DROPDOWN_COMPONENT), inject(INJECTOR));
237
- this.ref = signal(null);
238
- // TODO(v5): rename to `content`
239
- // eslint-disable-next-line @typescript-eslint/naming-convention
240
- this._content = signal(null);
241
- }
242
- set tuiDropdown(content) {
243
- this._content.set(content instanceof TemplateRef
244
- ? new PolymorpheusTemplate(content, this.cdr)
245
- : content);
246
- if (!this._content()) {
247
- this.toggle(false);
248
- }
217
+ this.tuiDropdown = input();
218
+ this.content = computed((content = this.tuiDropdown()) => {
219
+ return content instanceof TemplateRef
220
+ ? new PolymorpheusTemplate(content, this.cdr)
221
+ : content;
222
+ });
249
223
  }
250
224
  get position() {
251
225
  return tuiCheckFixedPosition(this.el) ? 'fixed' : 'absolute';
252
226
  }
253
- // TODO(v5): delete
254
- get content() {
255
- return this._content();
256
- }
257
- // TODO(v5): delete
258
- set content(x) {
259
- this._content.set(x);
260
- }
261
227
  ngAfterViewChecked() {
262
228
  this.refresh$.next();
263
229
  }
@@ -269,32 +235,25 @@ class TuiDropdownDirective {
269
235
  }
270
236
  toggle(show) {
271
237
  const ref = this.ref();
272
- if (show && this._content() && !ref) {
238
+ if (show && this.content() && !ref) {
273
239
  this.ref.set(this.service.add(this.component));
274
240
  }
275
241
  else if (!show && ref) {
276
242
  this.ref.set(null);
277
- this.service.remove(ref);
243
+ ref.destroy();
278
244
  }
279
- this.drivers.forEach((driver) => driver?.next(show));
280
245
  // TODO: Remove in v5, only needed in Angular 16
281
246
  this.cdr.markForCheck();
247
+ this.drivers.forEach((driver) => driver?.next(show));
282
248
  }
283
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
284
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownDirective, isStandalone: true, selector: "[tuiDropdown]:not(ng-container):not(ng-template)", inputs: { tuiDropdown: "tuiDropdown" }, host: { properties: { "class.tui-dropdown-open": "ref()" } }, providers: [
285
- tuiAsRectAccessor(TuiDropdownDirective),
286
- tuiAsVehicle(TuiDropdownDirective),
287
- ], exportAs: ["tuiDropdown"], hostDirectives: [{ directive: TuiDropdownDriverDirective }, { directive: TuiDropdownPosition, outputs: ["tuiDropdownDirectionChange", "tuiDropdownDirectionChange"] }], ngImport: i0 }); }
249
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
250
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.16", type: TuiDropdownDirective, isStandalone: true, selector: "[tuiDropdown]:not(ng-container):not(ng-template)", inputs: { tuiDropdown: { classPropertyName: "tuiDropdown", publicName: "tuiDropdown", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.tui-dropdown-open": "ref()" } }, providers: [tuiAsVehicle(TuiDropdownDirective)], exportAs: ["tuiDropdown"], hostDirectives: [{ directive: TuiDropdownDriverDirective }, { directive: TuiDropdownPosition, outputs: ["tuiDropdownDirectionChange", "tuiDropdownDirectionChange"] }], ngImport: i0 }); }
288
251
  }
289
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownDirective, decorators: [{
252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownDirective, decorators: [{
290
253
  type: Directive,
291
254
  args: [{
292
- standalone: true,
293
255
  selector: '[tuiDropdown]:not(ng-container):not(ng-template)',
294
- providers: [
295
- tuiAsRectAccessor(TuiDropdownDirective),
296
- tuiAsVehicle(TuiDropdownDirective),
297
- ],
256
+ providers: [tuiAsVehicle(TuiDropdownDirective)],
298
257
  exportAs: 'tuiDropdown',
299
258
  hostDirectives: [
300
259
  TuiDropdownDriverDirective,
@@ -307,9 +266,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
307
266
  '[class.tui-dropdown-open]': 'ref()',
308
267
  },
309
268
  }]
310
- }], propDecorators: { tuiDropdown: [{
311
- type: Input
312
- }] } });
269
+ }] });
313
270
 
314
271
  /**
315
272
  * @description:
@@ -323,7 +280,7 @@ class TuiDropdownComponent {
323
280
  this.viewport = inject(TUI_VIEWPORT);
324
281
  this.vvs = inject(TuiVisualViewportService);
325
282
  this.styles$ = inject(TuiPositionService).pipe(takeWhile(() => this.directive.el.isConnected &&
326
- !!this.directive.el.getBoundingClientRect().height), map((v) => (this.position === 'fixed' ? this.vvs.correct(v) : v)), map(([top, left]) => this.getStyles(left, top)), takeUntilDestroyed());
283
+ !!this.directive.el.getBoundingClientRect().height), map((v) => (this.position === 'fixed' ? this.vvs.correct(v) : v)), map((point) => this.getStyles(...point)), takeUntilDestroyed());
327
284
  this.options = inject(TUI_DROPDOWN_OPTIONS);
328
285
  this.directive = inject(TuiDropdownDirective);
329
286
  this.context = inject(TUI_DROPDOWN_CONTEXT, { optional: true });
@@ -362,25 +319,47 @@ class TuiDropdownComponent {
362
319
  maxWidth: tuiPx(Math.round(viewport.width) - 16), // 8px min gap from each side
363
320
  };
364
321
  }
365
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
366
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownComponent, isStandalone: true, selector: "tui-dropdown", host: { properties: { "attr.data-appearance": "options.appearance", "attr.tuiTheme": "theme()" } }, providers: [
322
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
323
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.16", type: TuiDropdownComponent, isStandalone: true, selector: "tui-dropdown", host: { properties: { "attr.data-appearance": "options.appearance", "attr.tuiTheme": "theme()" } }, providers: [
367
324
  TuiPositionService,
368
325
  tuiPositionAccessorFor('dropdown', TuiDropdownPosition),
369
- tuiRectAccessorFor('dropdown', TuiDropdownDirective),
370
- ], hostDirectives: [{ directive: i1.TuiActiveZone }, { directive: i2.TuiAnimated }], ngImport: i0, template: "<tui-scrollbar class=\"t-scroll\">\n <div\n *polymorpheusOutlet=\"directive._content() as text; context: {$implicit: close}\"\n class=\"t-primitive\"\n >\n {{ text }}\n </div>\n</tui-scrollbar>\n", styles: [":host{position:absolute;display:flex;box-shadow:var(--tui-shadow-medium);color:var(--tui-text-primary);background:var(--tui-background-elevation-3);border-radius:var(--tui-radius-m);overflow:hidden;border:1px solid var(--tui-border-normal);box-sizing:border-box;isolation:isolate;pointer-events:auto;--tui-from: translateY(-1rem)}:host.tui-enter,:host.tui-leave{animation-name:tuiFade,tuiSlide}:host:not([style*=top]){visibility:hidden}.t-scroll{flex-grow:1;max-inline-size:100%;inline-size:max-content;overscroll-behavior:none}.t-primitive{padding:1rem}\n"], dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "component", type: TuiScrollbar, selector: "tui-scrollbar", inputs: ["hidden"] }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
326
+ tuiRectAccessorFor('dropdown', forwardRef(() => TuiDropdownDirective)),
327
+ ], hostDirectives: [{ directive: i1.TuiActiveZone }, { directive: i2.TuiAnimated }], ngImport: i0, template: "<tui-scrollbar class=\"t-scroll\">\n <div\n *polymorpheusOutlet=\"directive.content() as text; context: {$implicit: close}\"\n class=\"t-primitive\"\n >\n {{ text }}\n </div>\n</tui-scrollbar>\n", styles: [":host{position:absolute;display:flex;box-shadow:var(--tui-shadow-medium);color:var(--tui-text-primary);background:var(--tui-background-elevation-3);border-radius:var(--tui-radius-m);overflow:hidden;border:1px solid var(--tui-border-normal);box-sizing:border-box;isolation:isolate;pointer-events:auto;--tui-from: translateY(-1rem)}:host.tui-enter,:host.tui-leave{animation-name:tuiFade,tuiSlide}:host:not([style*=top]){visibility:hidden}.t-scroll{flex-grow:1;max-inline-size:100%;inline-size:max-content;overscroll-behavior:none}.t-primitive{padding:1rem}\n"], dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "component", type: TuiScrollbar, selector: "tui-scrollbar" }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
371
328
  }
372
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownComponent, decorators: [{
329
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownComponent, decorators: [{
373
330
  type: Component,
374
331
  args: [{ selector: 'tui-dropdown', imports: [PolymorpheusOutlet, TuiScrollbar], changeDetection: ChangeDetectionStrategy.Default, providers: [
375
332
  TuiPositionService,
376
333
  tuiPositionAccessorFor('dropdown', TuiDropdownPosition),
377
- tuiRectAccessorFor('dropdown', TuiDropdownDirective),
334
+ tuiRectAccessorFor('dropdown', forwardRef(() => TuiDropdownDirective)),
378
335
  ], hostDirectives: [TuiActiveZone, TuiAnimated], host: {
379
336
  '[attr.data-appearance]': 'options.appearance',
380
337
  '[attr.tuiTheme]': 'theme()',
381
- }, template: "<tui-scrollbar class=\"t-scroll\">\n <div\n *polymorpheusOutlet=\"directive._content() as text; context: {$implicit: close}\"\n class=\"t-primitive\"\n >\n {{ text }}\n </div>\n</tui-scrollbar>\n", styles: [":host{position:absolute;display:flex;box-shadow:var(--tui-shadow-medium);color:var(--tui-text-primary);background:var(--tui-background-elevation-3);border-radius:var(--tui-radius-m);overflow:hidden;border:1px solid var(--tui-border-normal);box-sizing:border-box;isolation:isolate;pointer-events:auto;--tui-from: translateY(-1rem)}:host.tui-enter,:host.tui-leave{animation-name:tuiFade,tuiSlide}:host:not([style*=top]){visibility:hidden}.t-scroll{flex-grow:1;max-inline-size:100%;inline-size:max-content;overscroll-behavior:none}.t-primitive{padding:1rem}\n"] }]
338
+ }, template: "<tui-scrollbar class=\"t-scroll\">\n <div\n *polymorpheusOutlet=\"directive.content() as text; context: {$implicit: close}\"\n class=\"t-primitive\"\n >\n {{ text }}\n </div>\n</tui-scrollbar>\n", styles: [":host{position:absolute;display:flex;box-shadow:var(--tui-shadow-medium);color:var(--tui-text-primary);background:var(--tui-background-elevation-3);border-radius:var(--tui-radius-m);overflow:hidden;border:1px solid var(--tui-border-normal);box-sizing:border-box;isolation:isolate;pointer-events:auto;--tui-from: translateY(-1rem)}:host.tui-enter,:host.tui-leave{animation-name:tuiFade,tuiSlide}:host:not([style*=top]){visibility:hidden}.t-scroll{flex-grow:1;max-inline-size:100%;inline-size:max-content;overscroll-behavior:none}.t-primitive{padding:1rem}\n"] }]
382
339
  }] });
383
340
 
341
+ class TuiDropdownContent {
342
+ constructor() {
343
+ this.directive = inject(TuiDropdownDirective);
344
+ tuiSetSignal(this.directive.tuiDropdown, inject(TemplateRef));
345
+ if (isPlatformBrowser(inject(PLATFORM_ID)) &&
346
+ this.directive.el.matches(':focus-within')) {
347
+ this.directive.toggle(true);
348
+ }
349
+ }
350
+ ngOnDestroy() {
351
+ tuiSetSignal(this.directive.tuiDropdown, null);
352
+ }
353
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownContent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
354
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.16", type: TuiDropdownContent, isStandalone: true, selector: "ng-template[tuiDropdown]", ngImport: i0 }); }
355
+ }
356
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownContent, decorators: [{
357
+ type: Directive,
358
+ args: [{
359
+ selector: 'ng-template[tuiDropdown]',
360
+ }]
361
+ }], ctorParameters: () => [] });
362
+
384
363
  function activeZoneFilter(event) {
385
364
  return (!event ||
386
365
  (this.driver.value && !this.activeZone.contains(tuiGetActualTarget(event))));
@@ -410,8 +389,8 @@ class TuiDropdownContext extends TuiRectAccessor {
410
389
  this.currentRect = tuiPointToClientRect(x, y);
411
390
  this.driver.next(true);
412
391
  }
413
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownContext, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
414
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownContext, isStandalone: true, selector: "[tuiDropdownContext]", host: { listeners: { "document:keydown.esc": "closeDropdown()", "longtap": "onContextMenu($event.detail.clientX, $event.detail.clientY)" }, properties: { "style.user-select": "userSelect()", "style.-webkit-user-select": "userSelect()", "style.-webkit-touch-callout": "userSelect()" } }, providers: [
392
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownContext, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
393
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.16", type: TuiDropdownContext, isStandalone: true, selector: "[tuiDropdownContext]", host: { listeners: { "document:keydown.esc": "closeDropdown()", "longtap": "onContextMenu($event.detail.clientX, $event.detail.clientY)" }, properties: { "style.user-select": "userSelect()", "style.-webkit-user-select": "userSelect()", "style.-webkit-touch-callout": "userSelect()" } }, providers: [
415
394
  TuiActiveZone,
416
395
  TuiDropdownDriver,
417
396
  tuiAsDriver(TuiDropdownDriver),
@@ -421,10 +400,9 @@ class TuiDropdownContext extends TuiRectAccessor {
421
400
  __decorate([
422
401
  shouldCall(activeZoneFilter)
423
402
  ], TuiDropdownContext.prototype, "closeDropdown", null);
424
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownContext, decorators: [{
403
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownContext, decorators: [{
425
404
  type: Directive,
426
405
  args: [{
427
- standalone: true,
428
406
  selector: '[tuiDropdownContext]',
429
407
  providers: [
430
408
  TuiActiveZone,
@@ -450,48 +428,40 @@ const TUI_DROPDOWN_HOVER_DEFAULT_OPTIONS = {
450
428
  /**
451
429
  * Default parameters for dropdown hover directive
452
430
  */
453
- const TUI_DROPDOWN_HOVER_OPTIONS = new InjectionToken(ngDevMode ? 'TUI_DROPDOWN_HOVER_OPTIONS' : '', {
454
- factory: () => TUI_DROPDOWN_HOVER_DEFAULT_OPTIONS,
455
- });
456
- function tuiDropdownHoverOptionsProvider(options) {
457
- return tuiProvideOptions(TUI_DROPDOWN_HOVER_OPTIONS, options, TUI_DROPDOWN_HOVER_DEFAULT_OPTIONS);
458
- }
431
+ const [TUI_DROPDOWN_HOVER_OPTIONS, tuiDropdownHoverOptionsProvider] = tuiCreateOptions(TUI_DROPDOWN_HOVER_DEFAULT_OPTIONS);
459
432
 
460
433
  function shouldClose(event) {
461
434
  return (
462
435
  // @ts-ignore
463
436
  typeof CloseWatcher === 'undefined' &&
464
- // ?. for auto fill events
437
+ // ?. for autofill events
465
438
  event.key?.toLowerCase() === 'escape' &&
466
- this.tuiDropdownEnabled &&
467
- !!this.tuiDropdownOpen &&
439
+ this.enabled() &&
440
+ this.open() &&
468
441
  !this['dropdown']()?.nextElementSibling);
469
442
  }
470
443
  class TuiDropdownOpen {
471
444
  constructor() {
445
+ this.dropdownHost = contentChild('tuiDropdownHost', {
446
+ descendants: true,
447
+ read: ElementRef,
448
+ });
472
449
  this.directive = inject(TuiDropdownDirective);
473
450
  this.el = tuiInjectElement();
474
451
  this.obscured = inject(TuiObscured);
475
452
  this.activeZone = inject(TuiActiveZone);
476
- this.dropdown = computed(() => this.directive.ref()?.location.nativeElement);
477
- this.tuiDropdownEnabled = true;
478
- this.tuiDropdownOpen = false;
479
- this.tuiDropdownOpenChange = new EventEmitter();
480
- // TODO: make it private when all legacy controls will be deleted from @taiga-ui/legacy (5.0)
481
453
  this.driver = inject(TuiDropdownDriver);
482
- this.sub = this.driver
483
- .pipe(tuiIfMap(() => merge(tuiCloseWatcher(), this.obscured.tuiObscured.pipe(filter(Boolean)), this.activeZone.tuiActiveZoneChange.pipe(filter((a) => !a)), fromEvent(this.el, 'focusin').pipe(filter((event) => !this.host.contains(tuiGetActualTarget(event)) ||
454
+ this.dropdown = computed(() => this.directive.ref()?.location.nativeElement);
455
+ this.enabled = input(true, { alias: 'tuiDropdownEnabled' });
456
+ this.open = model(false, { alias: 'tuiDropdownOpen' });
457
+ this.driveEffect = effect(() => this.drive(this.open()));
458
+ this.syncSub = this.driver
459
+ .pipe(filter((open) => open !== this.open()), takeUntilDestroyed())
460
+ .subscribe((open) => this.update(open));
461
+ this.closeSub = this.driver
462
+ .pipe(tuiIfMap(() => merge(tuiCloseWatcher(), this.obscured.tuiObscured$.pipe(filter(Boolean)), this.activeZone.tuiActiveZoneChange.pipe(filter((a) => !a)), fromEvent(this.el, 'focusin').pipe(filter((event) => !this.host.contains(tuiGetActualTarget(event)) ||
484
463
  !this.directive.ref())))), tuiZonefull(), tuiWatch(), takeUntilDestroyed())
485
464
  .subscribe(() => this.toggle(false));
486
- this.sync = this.driver.pipe(takeUntilDestroyed()).subscribe((open) => {
487
- if (open !== this.tuiDropdownOpen) {
488
- this.update(open);
489
- }
490
- });
491
- }
492
- ngOnChanges() {
493
- this.drive(!!this.tuiDropdownOpen);
494
- this.tuiDropdownOpenChange.emit(!!this.tuiDropdownOpen);
495
465
  }
496
466
  toggle(open) {
497
467
  if (this.focused && !open) {
@@ -505,14 +475,14 @@ class TuiDropdownOpen {
505
475
  }
506
476
  onClick(target) {
507
477
  if (!this.editable && this.host.contains(target)) {
508
- this.update(!this.tuiDropdownOpen);
478
+ this.update(!this.open());
509
479
  }
510
480
  }
511
481
  onArrow(event, up) {
512
482
  if (!tuiIsElement(event.target) ||
513
483
  !this.host.contains(event.target) ||
514
- !this.tuiDropdownEnabled ||
515
- !this.directive._content()) {
484
+ !this.enabled() ||
485
+ !this.directive.content()) {
516
486
  return;
517
487
  }
518
488
  event.preventDefault();
@@ -530,28 +500,27 @@ class TuiDropdownOpen {
530
500
  }
531
501
  }
532
502
  get host() {
533
- const initial = this.dropdownHost?.nativeElement || this.el;
534
- const focusable = tuiIsNativeKeyboardFocusable(initial)
503
+ const initial = this.dropdownHost()?.nativeElement || this.el;
504
+ const focusable = tuiIsFocusable(initial)
535
505
  ? initial
536
506
  : tuiGetClosestFocusable({ initial, root: this.el });
537
- return this.dropdownHost?.nativeElement || focusable || this.el;
507
+ return this.dropdownHost()?.nativeElement || focusable || this.el;
538
508
  }
539
509
  get editable() {
540
510
  return tuiIsElementEditable(this.host);
541
511
  }
542
512
  get focused() {
543
- return tuiIsNativeFocusedIn(this.host) || tuiIsNativeFocusedIn(this.dropdown());
513
+ return tuiIsFocusedIn(this.host) || tuiIsFocusedIn(this.dropdown());
544
514
  }
545
515
  update(open) {
546
- if (open && !this.tuiDropdownEnabled) {
516
+ if (open && !this.enabled()) {
547
517
  return this.drive();
548
518
  }
549
- this.tuiDropdownOpen = open;
550
- this.tuiDropdownOpenChange.emit(open);
519
+ this.open.set(open);
551
520
  this.drive();
552
521
  }
553
- drive(open = !!this.tuiDropdownOpen && this.tuiDropdownEnabled) {
554
- this.obscured.tuiObscuredEnabled = open;
522
+ drive(open = this.open() && this.enabled()) {
523
+ tuiSetSignal(this.obscured.tuiObscuredEnabled, open);
555
524
  this.driver.next(open);
556
525
  }
557
526
  focusDropdown(previous) {
@@ -567,17 +536,16 @@ class TuiDropdownOpen {
567
536
  child.remove();
568
537
  focusable?.focus();
569
538
  }
570
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownOpen, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
571
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownOpen, isStandalone: true, selector: "[tuiDropdown][tuiDropdownOpen],[tuiDropdown][tuiDropdownOpenChange]", inputs: { tuiDropdownEnabled: "tuiDropdownEnabled", tuiDropdownOpen: "tuiDropdownOpen" }, outputs: { tuiDropdownOpenChange: "tuiDropdownOpenChange" }, host: { listeners: { "click": "onClick($event.target)", "keydown.arrowDown": "onArrow($event, false)", "keydown.arrowUp": "onArrow($event, true)", "document:keydown.zoneless.capture": "onEsc($event)", "document:keydown.zoneless": "onKeydown($event)", "tuiActiveZoneChange": "0" } }, providers: [TuiDropdownDriver, tuiAsDriver(TuiDropdownDriver)], queries: [{ propertyName: "dropdownHost", first: true, predicate: ["tuiDropdownHost"], descendants: true, read: ElementRef }], usesOnChanges: true, hostDirectives: [{ directive: i1$1.TuiObscured }, { directive: i1.TuiActiveZone, inputs: ["tuiActiveZoneParent", "tuiActiveZoneParent"], outputs: ["tuiActiveZoneChange", "tuiActiveZoneChange"] }], ngImport: i0 }); }
539
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownOpen, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
540
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "19.2.16", type: TuiDropdownOpen, isStandalone: true, selector: "[tuiDropdown][tuiDropdownAuto],[tuiDropdown][tuiDropdownOpen],[tuiDropdown][tuiDropdownOpenChange]", inputs: { enabled: { classPropertyName: "enabled", publicName: "tuiDropdownEnabled", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "tuiDropdownOpen", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "tuiDropdownOpenChange" }, host: { listeners: { "click": "onClick($event.target)", "keydown.arrowDown": "onArrow($event, false)", "keydown.arrowUp": "onArrow($event, true)", "document:keydown.zoneless.capture": "onEsc($event)", "document:keydown.zoneless": "onKeydown($event)", "tuiActiveZoneChange": "0" } }, providers: [TuiDropdownDriver, tuiAsDriver(TuiDropdownDriver)], queries: [{ propertyName: "dropdownHost", first: true, predicate: ["tuiDropdownHost"], descendants: true, read: ElementRef, isSignal: true }], hostDirectives: [{ directive: i1$1.TuiObscured }, { directive: i1.TuiActiveZone, inputs: ["tuiActiveZoneParent", "tuiActiveZoneParent"], outputs: ["tuiActiveZoneChange", "tuiActiveZoneChange"] }], ngImport: i0 }); }
572
541
  }
573
542
  __decorate([
574
543
  shouldCall(shouldClose)
575
544
  ], TuiDropdownOpen.prototype, "onEsc", null);
576
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownOpen, decorators: [{
545
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownOpen, decorators: [{
577
546
  type: Directive,
578
547
  args: [{
579
- standalone: true,
580
- selector: '[tuiDropdown][tuiDropdownOpen],[tuiDropdown][tuiDropdownOpenChange]',
548
+ selector: '[tuiDropdown][tuiDropdownAuto],[tuiDropdown][tuiDropdownOpen],[tuiDropdown][tuiDropdownOpenChange]',
581
549
  providers: [TuiDropdownDriver, tuiAsDriver(TuiDropdownDriver)],
582
550
  hostDirectives: [
583
551
  TuiObscured,
@@ -597,37 +565,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
597
565
  '(tuiActiveZoneChange)': '0',
598
566
  },
599
567
  }]
600
- }], propDecorators: { dropdownHost: [{
601
- type: ContentChild,
602
- args: ['tuiDropdownHost', { descendants: true, read: ElementRef }]
603
- }], tuiDropdownEnabled: [{
604
- type: Input
605
- }], tuiDropdownOpen: [{
606
- type: Input
607
- }], tuiDropdownOpenChange: [{
608
- type: Output
609
- }], onEsc: [] } });
568
+ }], propDecorators: { onEsc: [] } });
610
569
 
611
570
  class TuiDropdownHover extends TuiDriver {
612
571
  constructor() {
613
572
  super((subscriber) => this.stream$.subscribe(subscriber));
573
+ this.dropdownHost = contentChild('tuiDropdownHost', {
574
+ descendants: true,
575
+ read: ElementRef,
576
+ });
577
+ this.hovered = false;
614
578
  this.el = tuiInjectElement();
615
579
  this.doc = inject(DOCUMENT);
616
580
  this.options = inject(TUI_DROPDOWN_HOVER_OPTIONS);
617
581
  this.activeZone = inject(TuiActiveZone);
618
582
  this.open = inject(TuiDropdownOpen, { optional: true });
583
+ this.stream$ = merge(
619
584
  /**
620
585
  * Dropdown can be removed not only via click/touch –
621
586
  * swipe on mobile devices removes dropdown sheet without triggering new mouseover / mouseout events.
622
587
  */
623
- this.dropdownExternalRemoval$ = toObservable(inject(TuiDropdownDirective).ref).pipe(filter((x) => !x && this.hovered));
624
- this.stream$ = merge(this.dropdownExternalRemoval$.pipe(switchMap(() => tuiTypedFromEvent(this.doc, 'pointerdown').pipe(map(tuiGetActualTarget), delay(this.hideDelay), startWith(null), takeUntil(fromEvent(this.doc, 'mouseover'))))), tuiTypedFromEvent(this.doc, 'mouseover').pipe(map(tuiGetActualTarget)), tuiTypedFromEvent(this.doc, 'mouseout').pipe(map((e) => e.relatedTarget))).pipe(map((element) => tuiIsElement(element) && this.isHovered(element)), distinctUntilChanged(), switchMap((v) => of(v).pipe(delay(v ? this.showDelay : this.hideDelay))), tuiZoneOptimized(), tap((hovered) => {
588
+ toObservable(inject(TuiDropdownDirective).ref).pipe(filter((x) => !x && this.hovered), switchMap(() => tuiTypedFromEvent(this.doc, 'pointerdown').pipe(map(tuiGetActualTarget), delay(this.tuiDropdownHideDelay()), startWith(null), takeUntil(fromEvent(this.doc, 'mouseover'))))), tuiTypedFromEvent(this.doc, 'mouseover').pipe(map(tuiGetActualTarget)), tuiTypedFromEvent(this.doc, 'mouseout').pipe(map((e) => e.relatedTarget))).pipe(map((element) => tuiIsElement(element) && this.isHovered(element)), distinctUntilChanged(), switchMap((v) => of(v).pipe(delay(v ? this.tuiDropdownShowDelay() : this.tuiDropdownHideDelay()))), tuiZoneOptimized(), tap((hovered) => {
625
589
  this.hovered = hovered;
626
590
  this.open?.toggle(hovered);
627
591
  }), share());
628
- this.showDelay = this.options.showDelay;
629
- this.hideDelay = this.options.hideDelay;
630
- this.hovered = false;
592
+ this.tuiDropdownShowDelay = input(this.options.showDelay);
593
+ this.tuiDropdownHideDelay = input(this.options.hideDelay);
631
594
  this.type = 'dropdown';
632
595
  }
633
596
  onClick(event) {
@@ -636,115 +599,43 @@ class TuiDropdownHover extends TuiDriver {
636
599
  }
637
600
  }
638
601
  isHovered(element) {
639
- const host = this.dropdownHost?.nativeElement || this.el;
602
+ const host = this.dropdownHost()?.nativeElement || this.el;
640
603
  const hovered = host.contains(element);
641
604
  const child = !this.el.contains(element) && this.activeZone.contains(element);
642
605
  return hovered || child;
643
606
  }
644
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownHover, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
645
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownHover, isStandalone: true, selector: "[tuiDropdownHover]", inputs: { showDelay: ["tuiDropdownShowDelay", "showDelay"], hideDelay: ["tuiDropdownHideDelay", "hideDelay"] }, host: { listeners: { "click.capture": "onClick($event)" } }, providers: [TuiActiveZone, tuiAsDriver(TuiDropdownHover)], queries: [{ propertyName: "dropdownHost", first: true, predicate: ["tuiDropdownHost"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0 }); }
607
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownHover, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
608
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "19.2.16", type: TuiDropdownHover, isStandalone: true, selector: "[tuiDropdownHover]", inputs: { tuiDropdownShowDelay: { classPropertyName: "tuiDropdownShowDelay", publicName: "tuiDropdownShowDelay", isSignal: true, isRequired: false, transformFunction: null }, tuiDropdownHideDelay: { classPropertyName: "tuiDropdownHideDelay", publicName: "tuiDropdownHideDelay", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click.capture": "onClick($event)" } }, providers: [TuiActiveZone, tuiAsDriver(TuiDropdownHover)], queries: [{ propertyName: "dropdownHost", first: true, predicate: ["tuiDropdownHost"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0 }); }
646
609
  }
647
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownHover, decorators: [{
610
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownHover, decorators: [{
648
611
  type: Directive,
649
612
  args: [{
650
- standalone: true,
651
613
  selector: '[tuiDropdownHover]',
652
614
  providers: [TuiActiveZone, tuiAsDriver(TuiDropdownHover)],
653
615
  host: {
654
616
  '(click.capture)': 'onClick($event)',
655
617
  },
656
618
  }]
657
- }], ctorParameters: () => [], propDecorators: { dropdownHost: [{
658
- type: ContentChild,
659
- args: ['tuiDropdownHost', { descendants: true, read: ElementRef }]
660
- }], showDelay: [{
661
- type: Input,
662
- args: ['tuiDropdownShowDelay']
663
- }], hideDelay: [{
664
- type: Input,
665
- args: ['tuiDropdownHideDelay']
666
- }] } });
619
+ }], ctorParameters: () => [] });
667
620
 
668
621
  class TuiDropdownManual {
669
622
  constructor() {
670
623
  this.driver = inject(TuiDropdownDriver);
671
- this.tuiDropdownManual = false;
624
+ this.tuiDropdownManual = input(false);
672
625
  }
673
626
  ngOnChanges() {
674
- this.driver.next(!!this.tuiDropdownManual);
627
+ this.driver.next(!!this.tuiDropdownManual());
675
628
  }
676
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownManual, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
677
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownManual, isStandalone: true, selector: "[tuiDropdownManual]", inputs: { tuiDropdownManual: "tuiDropdownManual" }, providers: [TuiDropdownDriver, tuiAsDriver(TuiDropdownDriver)], usesOnChanges: true, ngImport: i0 }); }
629
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownManual, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
630
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.16", type: TuiDropdownManual, isStandalone: true, selector: "[tuiDropdownManual]", inputs: { tuiDropdownManual: { classPropertyName: "tuiDropdownManual", publicName: "tuiDropdownManual", isSignal: true, isRequired: false, transformFunction: null } }, providers: [TuiDropdownDriver, tuiAsDriver(TuiDropdownDriver)], usesOnChanges: true, ngImport: i0 }); }
678
631
  }
679
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownManual, decorators: [{
632
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownManual, decorators: [{
680
633
  type: Directive,
681
634
  args: [{
682
- standalone: true,
683
635
  selector: '[tuiDropdownManual]',
684
636
  providers: [TuiDropdownDriver, tuiAsDriver(TuiDropdownDriver)],
685
637
  }]
686
- }], propDecorators: { tuiDropdownManual: [{
687
- type: Input
688
- }] } });
689
-
690
- /**
691
- * @deprecated TODO: remove in v.5 when legacy controls are dropped
692
- */
693
- class TuiDropdownOpenLegacy {
694
- constructor() {
695
- this.openStateSub = new Subject();
696
- this.tuiDropdownOpenChange = this.openStateSub.pipe(distinctUntilChanged());
697
- }
698
- set tuiDropdownOpen(open) {
699
- this.emitOpenChange(open);
700
- }
701
- emitOpenChange(open) {
702
- this.openStateSub.next(open);
703
- }
704
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownOpenLegacy, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
705
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownOpenLegacy, isStandalone: true, selector: "[tuiDropdownOpen]:not([tuiDropdown]),[tuiDropdownOpenChange]:not([tuiDropdown])", inputs: { tuiDropdownOpen: "tuiDropdownOpen" }, outputs: { tuiDropdownOpenChange: "tuiDropdownOpenChange" }, ngImport: i0 }); }
706
- }
707
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownOpenLegacy, decorators: [{
708
- type: Directive,
709
- args: [{
710
- standalone: true,
711
- selector: '[tuiDropdownOpen]:not([tuiDropdown]),[tuiDropdownOpenChange]:not([tuiDropdown])',
712
- }]
713
- }], propDecorators: { tuiDropdownOpenChange: [{
714
- type: Output
715
- }], tuiDropdownOpen: [{
716
- type: Input
717
- }] } });
718
-
719
- /**
720
- * @deprecated use {@link TuiPopup} directive instead
721
- */
722
- class TuiDropdownPortal {
723
- constructor() {
724
- this.template = inject(TemplateRef);
725
- this.service = inject(TuiDropdownService);
726
- }
727
- set tuiDropdown(show) {
728
- this.viewRef?.destroy();
729
- if (show) {
730
- this.viewRef = this.service.addTemplate(this.template);
731
- }
732
- }
733
- ngOnDestroy() {
734
- this.viewRef?.destroy();
735
- }
736
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownPortal, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
737
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownPortal, isStandalone: true, selector: "ng-template[tuiDropdown]", inputs: { tuiDropdown: "tuiDropdown" }, ngImport: i0 }); }
738
- }
739
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownPortal, decorators: [{
740
- type: Directive,
741
- args: [{
742
- standalone: true,
743
- selector: 'ng-template[tuiDropdown]',
744
- }]
745
- }], propDecorators: { tuiDropdown: [{
746
- type: Input
747
- }] } });
638
+ }] });
748
639
 
749
640
  class TuiDropdownPositionSided extends TuiPositionAccessor {
750
641
  constructor() {
@@ -753,12 +644,12 @@ class TuiDropdownPositionSided extends TuiPositionAccessor {
753
644
  this.viewport = inject(TUI_VIEWPORT);
754
645
  this.vertical = inject(TuiDropdownPosition);
755
646
  this.previous = this.options.direction || 'bottom';
756
- this.tuiDropdownSided = '';
757
- this.tuiDropdownSidedOffset = 4;
647
+ this.tuiDropdownSided = input('');
648
+ this.tuiDropdownSidedOffset = input(4);
758
649
  this.type = 'dropdown';
759
650
  }
760
651
  getPosition(rect) {
761
- if (this.tuiDropdownSided === false) {
652
+ if (this.tuiDropdownSided() === false) {
762
653
  return this.vertical.getPosition(rect);
763
654
  }
764
655
  const { height, width } = rect;
@@ -774,38 +665,33 @@ class TuiDropdownPositionSided extends TuiPositionAccessor {
774
665
  bottom: viewport.bottom - hostRect.top,
775
666
  };
776
667
  const position = {
777
- top: hostRect.bottom - height + this.tuiDropdownSidedOffset + 1, // 1 for border
668
+ top: hostRect.bottom - height + this.tuiDropdownSidedOffset() + 1, // 1 for border
778
669
  left: hostRect.left - width - offset,
779
670
  right: hostRect.right + offset,
780
- bottom: hostRect.top - this.tuiDropdownSidedOffset - 1, // 1 for border
671
+ bottom: hostRect.top - this.tuiDropdownSidedOffset() - 1, // 1 for border
781
672
  };
782
673
  const better = available.top > available.bottom ? 'top' : 'bottom';
783
674
  const maxLeft = available.left > available.right ? position.left : position.right;
784
675
  const left = available[align] > width ? position[align] : maxLeft;
785
676
  if ((available[this.previous] > height && direction) ||
786
677
  this.previous === better) {
787
- this.vertical.emitDirection(this.previous);
788
- return [position[this.previous], left];
678
+ this.vertical.direction.next(this.previous);
679
+ return [left, position[this.previous]];
789
680
  }
790
681
  this.previous = better;
791
- this.vertical.emitDirection(better);
792
- return [position[better], left];
682
+ this.vertical.direction.next(better);
683
+ return [left, position[better]];
793
684
  }
794
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownPositionSided, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
795
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownPositionSided, isStandalone: true, selector: "[tuiDropdownSided]", inputs: { tuiDropdownSided: "tuiDropdownSided", tuiDropdownSidedOffset: "tuiDropdownSidedOffset" }, providers: [TuiDropdownPosition, tuiAsPositionAccessor(TuiDropdownPositionSided)], usesInheritance: true, ngImport: i0 }); }
685
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownPositionSided, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
686
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.16", type: TuiDropdownPositionSided, isStandalone: true, selector: "[tuiDropdownSided]", inputs: { tuiDropdownSided: { classPropertyName: "tuiDropdownSided", publicName: "tuiDropdownSided", isSignal: true, isRequired: false, transformFunction: null }, tuiDropdownSidedOffset: { classPropertyName: "tuiDropdownSidedOffset", publicName: "tuiDropdownSidedOffset", isSignal: true, isRequired: false, transformFunction: null } }, providers: [TuiDropdownPosition, tuiAsPositionAccessor(TuiDropdownPositionSided)], usesInheritance: true, ngImport: i0 }); }
796
687
  }
797
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownPositionSided, decorators: [{
688
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownPositionSided, decorators: [{
798
689
  type: Directive,
799
690
  args: [{
800
- standalone: true,
801
691
  selector: '[tuiDropdownSided]',
802
692
  providers: [TuiDropdownPosition, tuiAsPositionAccessor(TuiDropdownPositionSided)],
803
693
  }]
804
- }], propDecorators: { tuiDropdownSided: [{
805
- type: Input
806
- }], tuiDropdownSidedOffset: [{
807
- type: Input
808
- }] } });
694
+ }] });
809
695
 
810
696
  class TuiDropdownSelection extends TuiDriver {
811
697
  constructor() {
@@ -814,9 +700,9 @@ class TuiDropdownSelection extends TuiDriver {
814
700
  this.vcr = inject(ViewContainerRef);
815
701
  this.dropdown = inject(TuiDropdownDirective);
816
702
  this.el = tuiInjectElement();
817
- this.handler$ = new BehaviorSubject(TUI_TRUE_HANDLER);
703
+ this.handler = computed((visible = this.tuiDropdownSelection()) => tuiIsString(visible) ? TUI_TRUE_HANDLER : visible);
818
704
  this.stream$ = combineLatest([
819
- this.handler$,
705
+ toObservable(this.handler),
820
706
  inject(TUI_SELECTION_STREAM).pipe(map(() => this.getRange()), filter((range) => this.isValid(range)), distinctUntilChanged((x, y) => x.startOffset === y.startOffset &&
821
707
  x.endOffset === y.endOffset &&
822
708
  x.commonAncestorContainer === y.commonAncestorContainer)),
@@ -828,17 +714,15 @@ class TuiDropdownSelection extends TuiDriver {
828
714
  : this.range;
829
715
  return (contained && handler(this.range)) || this.inDropdown(range);
830
716
  }));
831
- this.range = inject(TUI_RANGE);
832
- this.position = 'selection';
717
+ this.range = isPlatformBrowser(inject(PLATFORM_ID))
718
+ ? new Range()
719
+ : {};
833
720
  this.type = 'dropdown';
834
- }
835
- set tuiDropdownSelection(visible) {
836
- if (!tuiIsString(visible)) {
837
- this.handler$.next(visible);
838
- }
721
+ this.tuiDropdownSelection = input('');
722
+ this.tuiDropdownSelectionPosition = input('selection');
839
723
  }
840
724
  getClientRect() {
841
- switch (this.position) {
725
+ switch (this.tuiDropdownSelectionPosition()) {
842
726
  case 'tag': {
843
727
  const { commonAncestorContainer } = this.range;
844
728
  const element = tuiIsElement(commonAncestorContainer)
@@ -863,7 +747,7 @@ class TuiDropdownSelection extends TuiDriver {
863
747
  return this.el.querySelector('tui-textfield .t-ghost') || this.el;
864
748
  }
865
749
  getRange() {
866
- const active = tuiGetNativeFocused(this.doc);
750
+ const active = tuiGetFocused(this.doc);
867
751
  const selection = this.doc.getSelection();
868
752
  const range = active && tuiIsTextfield(active) && this.el.contains(active)
869
753
  ? this.veryVerySadInputFix(active)
@@ -929,28 +813,22 @@ class TuiDropdownSelection extends TuiDriver {
929
813
  this.ghost = ghost;
930
814
  return ghost;
931
815
  }
932
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownSelection, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
933
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownSelection, isStandalone: true, selector: "[tuiDropdownSelection]", inputs: { position: ["tuiDropdownSelectionPosition", "position"], tuiDropdownSelection: "tuiDropdownSelection" }, providers: [
816
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownSelection, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
817
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.16", type: TuiDropdownSelection, isStandalone: true, selector: "[tuiDropdownSelection]", inputs: { tuiDropdownSelection: { classPropertyName: "tuiDropdownSelection", publicName: "tuiDropdownSelection", isSignal: true, isRequired: false, transformFunction: null }, tuiDropdownSelectionPosition: { classPropertyName: "tuiDropdownSelectionPosition", publicName: "tuiDropdownSelectionPosition", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
934
818
  tuiAsDriver(TuiDropdownSelection),
935
819
  tuiAsRectAccessor(TuiDropdownSelection),
936
820
  ], usesInheritance: true, ngImport: i0 }); }
937
821
  }
938
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownSelection, decorators: [{
822
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownSelection, decorators: [{
939
823
  type: Directive,
940
824
  args: [{
941
- standalone: true,
942
825
  selector: '[tuiDropdownSelection]',
943
826
  providers: [
944
827
  tuiAsDriver(TuiDropdownSelection),
945
828
  tuiAsRectAccessor(TuiDropdownSelection),
946
829
  ],
947
830
  }]
948
- }], ctorParameters: () => [], propDecorators: { position: [{
949
- type: Input,
950
- args: ['tuiDropdownSelectionPosition']
951
- }], tuiDropdownSelection: [{
952
- type: Input
953
- }] } });
831
+ }], ctorParameters: () => [] });
954
832
 
955
833
  const TuiDropdown = [
956
834
  TuiDropdownOptionsDirective,
@@ -958,10 +836,9 @@ const TuiDropdown = [
958
836
  TuiDropdownDirective,
959
837
  TuiDropdownComponent,
960
838
  TuiDropdownOpen,
961
- TuiDropdownOpenLegacy,
962
- TuiDropdownPortal,
963
839
  TuiDropdownManual,
964
840
  TuiDropdownHover,
841
+ TuiDropdownContent,
965
842
  TuiDropdownContext,
966
843
  TuiDropdownPosition,
967
844
  TuiDropdownPositionSided,
@@ -972,14 +849,7 @@ function tuiDropdown(value) {
972
849
  return tuiDirectiveBinding(TuiDropdownDirective, 'tuiDropdown', value, {});
973
850
  }
974
851
  function tuiDropdownEnabled(value) {
975
- return tuiDirectiveBinding(TuiDropdownOpen, 'tuiDropdownEnabled', value, {});
976
- }
977
- function tuiDropdownOpen() {
978
- const open = tuiDirectiveBinding(TuiDropdownOpen, 'tuiDropdownOpen', false, {});
979
- inject(TuiDropdownOpen)
980
- .tuiDropdownOpenChange.pipe(takeUntilDestroyed())
981
- .subscribe((value) => open.set(value));
982
- return open;
852
+ return tuiDirectiveBinding(TuiDropdownOpen, 'enabled', value, {});
983
853
  }
984
854
 
985
855
  class TuiDropdownFixed {
@@ -987,13 +857,12 @@ class TuiDropdownFixed {
987
857
  const override = tuiOverrideOptions$1({ limitWidth: 'fixed' }, TUI_DROPDOWN_DEFAULT_OPTIONS);
988
858
  override(inject(TUI_DROPDOWN_OPTIONS, { self: true, optional: true }), null);
989
859
  }
990
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownFixed, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
991
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownFixed, isStandalone: true, providers: [tuiDropdownOptionsProvider({})], ngImport: i0 }); }
860
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownFixed, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
861
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.16", type: TuiDropdownFixed, isStandalone: true, providers: [tuiDropdownOptionsProvider({})], ngImport: i0 }); }
992
862
  }
993
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownFixed, decorators: [{
863
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownFixed, decorators: [{
994
864
  type: Directive,
995
865
  args: [{
996
- standalone: true,
997
866
  providers: [tuiDropdownOptionsProvider({})],
998
867
  }]
999
868
  }], ctorParameters: () => [] });
@@ -1005,41 +874,20 @@ class TuiDropdownAuto {
1005
874
  */
1006
875
  inject(TUI_DROPDOWN_OPTIONS).limitWidth = 'auto';
1007
876
  }
1008
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownAuto, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1009
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdownAuto, isStandalone: true, ngImport: i0 }); }
877
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownAuto, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
878
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.16", type: TuiDropdownAuto, isStandalone: true, ngImport: i0 }); }
1010
879
  }
1011
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdownAuto, decorators: [{
1012
- type: Directive,
1013
- args: [{ standalone: true }]
880
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiDropdownAuto, decorators: [{
881
+ type: Directive
1014
882
  }], ctorParameters: () => [] });
1015
883
 
1016
- /**
1017
- * Host element for dynamically created portals, for example using {@link TuiDropdownDirective}.
1018
- */
1019
- class TuiDropdowns extends TuiPortals {
1020
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdowns, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1021
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: TuiDropdowns, isStandalone: true, selector: "tui-dropdowns", host: { styleAttribute: "position: absolute; width: 100%; top: 0" }, providers: [tuiAsPortal(TuiDropdownService)], usesInheritance: true, ngImport: i0, template: '<ng-container #viewContainer />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1022
- }
1023
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiDropdowns, decorators: [{
1024
- type: Component,
1025
- args: [{
1026
- standalone: true,
1027
- selector: 'tui-dropdowns',
1028
- template: '<ng-container #viewContainer />',
1029
- changeDetection: ChangeDetectionStrategy.OnPush,
1030
- providers: [tuiAsPortal(TuiDropdownService)],
1031
- host: { style: 'position: absolute; width: 100%; top: 0' },
1032
- }]
1033
- }] });
1034
-
1035
884
  class TuiWithDropdownOpen {
1036
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiWithDropdownOpen, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1037
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiWithDropdownOpen, isStandalone: true, hostDirectives: [{ directive: TuiDropdownOpen, inputs: ["tuiDropdownOpen", "open", "tuiDropdownEnabled", "tuiDropdownEnabled"], outputs: ["tuiDropdownOpenChange", "openChange"] }], ngImport: i0 }); }
885
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiWithDropdownOpen, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
886
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.16", type: TuiWithDropdownOpen, isStandalone: true, hostDirectives: [{ directive: TuiDropdownOpen, inputs: ["tuiDropdownOpen", "open", "tuiDropdownEnabled", "tuiDropdownEnabled"], outputs: ["tuiDropdownOpenChange", "openChange"] }], ngImport: i0 }); }
1038
887
  }
1039
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiWithDropdownOpen, decorators: [{
888
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiWithDropdownOpen, decorators: [{
1040
889
  type: Directive,
1041
890
  args: [{
1042
- standalone: true,
1043
891
  hostDirectives: [
1044
892
  {
1045
893
  directive: TuiDropdownOpen,
@@ -1054,5 +902,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
1054
902
  * Generated bundle index. Do not edit.
1055
903
  */
1056
904
 
1057
- export { TUI_DROPDOWN_COMPONENT, TUI_DROPDOWN_CONTEXT, TUI_DROPDOWN_DEFAULT_OPTIONS, TUI_DROPDOWN_HOVER_DEFAULT_OPTIONS, TUI_DROPDOWN_HOVER_OPTIONS, TUI_DROPDOWN_OPTIONS, TuiDropdown, TuiDropdownAuto, TuiDropdownComponent, TuiDropdownContext, TuiDropdownDirective, TuiDropdownDriver, TuiDropdownDriverDirective, TuiDropdownFixed, TuiDropdownHover, TuiDropdownManual, TuiDropdownOpen, TuiDropdownOpenLegacy, TuiDropdownOptionsDirective, TuiDropdownPortal, TuiDropdownPosition, TuiDropdownPositionSided, TuiDropdownSelection, TuiDropdownService, TuiDropdowns, TuiWithDropdownOpen, tuiDropdown, tuiDropdownEnabled, tuiDropdownHoverOptionsProvider, tuiDropdownOpen, tuiDropdownOptionsProvider };
1058
- //# sourceMappingURL=taiga-ui-core-directives-dropdown.mjs.map
905
+ export { TUI_DROPDOWN_COMPONENT, TUI_DROPDOWN_CONTEXT, TUI_DROPDOWN_DEFAULT_OPTIONS, TUI_DROPDOWN_HOVER_DEFAULT_OPTIONS, TUI_DROPDOWN_HOVER_OPTIONS, TUI_DROPDOWN_OPTIONS, TuiDropdown, TuiDropdownAuto, TuiDropdownComponent, TuiDropdownContent, TuiDropdownContext, TuiDropdownDirective, TuiDropdownDriver, TuiDropdownDriverDirective, TuiDropdownFixed, TuiDropdownHover, TuiDropdownManual, TuiDropdownOpen, TuiDropdownOptionsDirective, TuiDropdownPosition, TuiDropdownPositionSided, TuiDropdownSelection, TuiWithDropdownOpen, tuiDropdown, tuiDropdownEnabled, tuiDropdownHoverOptionsProvider, tuiDropdownOptionsProvider };
906
+ //# sourceMappingURL=taiga-ui-core-portals-dropdown.mjs.map