@taiga-ui/core 4.52.0-canary.932d3ef → 4.52.0-canary.9c7b1f0

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