@taiga-ui/core 4.52.0-canary.ece97e9 → 4.52.0-canary.efbd0d4

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