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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/README.md +1 -1
  2. package/classes/control.d.ts +4 -6
  3. package/classes/index.d.ts +0 -1
  4. package/constants/index.d.ts +0 -1
  5. package/constants/used-icons.d.ts +2 -2
  6. package/constants/version.d.ts +1 -1
  7. package/constants/version.js +1 -1
  8. package/date-time/date-fillers.d.ts +5 -5
  9. package/date-time/day-range.d.ts +1 -1
  10. package/date-time/day.d.ts +4 -4
  11. package/date-time/time.d.ts +2 -2
  12. package/date-time/types.d.ts +1 -12
  13. package/directives/active-zone/active-zone.directive.d.ts +3 -4
  14. package/directives/animated/animated.directive.d.ts +1 -3
  15. package/directives/animated/index.d.ts +0 -1
  16. package/directives/auto-focus/autofocus.directive.d.ts +2 -3
  17. package/directives/auto-focus/autofocus.options.d.ts +1 -1
  18. package/directives/copy-processor/copy-processor.directive.d.ts +2 -2
  19. package/directives/hovered/hovered.directive.d.ts +1 -2
  20. package/directives/index.d.ts +1 -5
  21. package/directives/media/media.directive.d.ts +8 -12
  22. package/directives/native-validator/native-validator.directive.d.ts +2 -2
  23. package/directives/obscured/obscured.directive.d.ts +4 -4
  24. package/directives/pan/pan.directive.d.ts +1 -2
  25. package/directives/platform/platform.directive.d.ts +2 -2
  26. package/directives/resizer/resizer.directive.d.ts +3 -4
  27. package/directives/swipe/swipe.directive.d.ts +1 -2
  28. package/directives/transitioned/transitioned.directive.d.ts +1 -0
  29. package/directives/value-changes/value-changes.directive.d.ts +2 -2
  30. package/directives/with-styles/index.d.ts +1 -0
  31. package/directives/with-styles/with-styles.directive.d.ts +10 -0
  32. package/fesm2022/taiga-ui-cdk-classes.mjs +8 -91
  33. package/fesm2022/taiga-ui-cdk-classes.mjs.map +1 -1
  34. package/fesm2022/taiga-ui-cdk-constants.mjs +15 -17
  35. package/fesm2022/taiga-ui-cdk-constants.mjs.map +1 -1
  36. package/fesm2022/taiga-ui-cdk-date-time.mjs +35 -23
  37. package/fesm2022/taiga-ui-cdk-date-time.mjs.map +1 -1
  38. package/fesm2022/taiga-ui-cdk-directives-active-zone.mjs +24 -32
  39. package/fesm2022/taiga-ui-cdk-directives-active-zone.mjs.map +1 -1
  40. package/fesm2022/taiga-ui-cdk-directives-animated.mjs +23 -72
  41. package/fesm2022/taiga-ui-cdk-directives-animated.mjs.map +1 -1
  42. package/fesm2022/taiga-ui-cdk-directives-auto-focus.mjs +10 -13
  43. package/fesm2022/taiga-ui-cdk-directives-auto-focus.mjs.map +1 -1
  44. package/fesm2022/taiga-ui-cdk-directives-control.mjs +3 -4
  45. package/fesm2022/taiga-ui-cdk-directives-control.mjs.map +1 -1
  46. package/fesm2022/taiga-ui-cdk-directives-copy-processor.mjs +7 -10
  47. package/fesm2022/taiga-ui-cdk-directives-copy-processor.mjs.map +1 -1
  48. package/fesm2022/taiga-ui-cdk-directives-element.mjs +3 -4
  49. package/fesm2022/taiga-ui-cdk-directives-element.mjs.map +1 -1
  50. package/fesm2022/taiga-ui-cdk-directives-focus-trap.mjs +8 -11
  51. package/fesm2022/taiga-ui-cdk-directives-focus-trap.mjs.map +1 -1
  52. package/fesm2022/taiga-ui-cdk-directives-font-size.mjs +4 -7
  53. package/fesm2022/taiga-ui-cdk-directives-font-size.mjs.map +1 -1
  54. package/fesm2022/taiga-ui-cdk-directives-high-dpi.mjs +3 -4
  55. package/fesm2022/taiga-ui-cdk-directives-high-dpi.mjs.map +1 -1
  56. package/fesm2022/taiga-ui-cdk-directives-hovered.mjs +10 -13
  57. package/fesm2022/taiga-ui-cdk-directives-hovered.mjs.map +1 -1
  58. package/fesm2022/taiga-ui-cdk-directives-item.mjs +3 -4
  59. package/fesm2022/taiga-ui-cdk-directives-item.mjs.map +1 -1
  60. package/fesm2022/taiga-ui-cdk-directives-media.mjs +32 -57
  61. package/fesm2022/taiga-ui-cdk-directives-media.mjs.map +1 -1
  62. package/fesm2022/taiga-ui-cdk-directives-native-validator.mjs +7 -10
  63. package/fesm2022/taiga-ui-cdk-directives-native-validator.mjs.map +1 -1
  64. package/fesm2022/taiga-ui-cdk-directives-obscured.mjs +14 -22
  65. package/fesm2022/taiga-ui-cdk-directives-obscured.mjs.map +1 -1
  66. package/fesm2022/taiga-ui-cdk-directives-pan.mjs +10 -12
  67. package/fesm2022/taiga-ui-cdk-directives-pan.mjs.map +1 -1
  68. package/fesm2022/taiga-ui-cdk-directives-platform.mjs +9 -12
  69. package/fesm2022/taiga-ui-cdk-directives-platform.mjs.map +1 -1
  70. package/fesm2022/taiga-ui-cdk-directives-resizer.mjs +19 -23
  71. package/fesm2022/taiga-ui-cdk-directives-resizer.mjs.map +1 -1
  72. package/fesm2022/taiga-ui-cdk-directives-swipe.mjs +10 -12
  73. package/fesm2022/taiga-ui-cdk-directives-swipe.mjs.map +1 -1
  74. package/fesm2022/taiga-ui-cdk-directives-transitioned.mjs +7 -14
  75. package/fesm2022/taiga-ui-cdk-directives-transitioned.mjs.map +1 -1
  76. package/fesm2022/taiga-ui-cdk-directives-validator.mjs +3 -4
  77. package/fesm2022/taiga-ui-cdk-directives-validator.mjs.map +1 -1
  78. package/fesm2022/taiga-ui-cdk-directives-value-changes.mjs +8 -9
  79. package/fesm2022/taiga-ui-cdk-directives-value-changes.mjs.map +1 -1
  80. package/fesm2022/taiga-ui-cdk-directives-visual-viewport.mjs +3 -4
  81. package/fesm2022/taiga-ui-cdk-directives-visual-viewport.mjs.map +1 -1
  82. package/fesm2022/taiga-ui-cdk-directives-with-styles.mjs +29 -0
  83. package/fesm2022/taiga-ui-cdk-directives-with-styles.mjs.map +1 -0
  84. package/fesm2022/taiga-ui-cdk-directives-zoom.mjs +6 -7
  85. package/fesm2022/taiga-ui-cdk-directives-zoom.mjs.map +1 -1
  86. package/fesm2022/taiga-ui-cdk-directives.mjs +1 -5
  87. package/fesm2022/taiga-ui-cdk-directives.mjs.map +1 -1
  88. package/fesm2022/taiga-ui-cdk-observables.mjs +10 -28
  89. package/fesm2022/taiga-ui-cdk-observables.mjs.map +1 -1
  90. package/fesm2022/taiga-ui-cdk-pipes-filter.mjs +3 -4
  91. package/fesm2022/taiga-ui-cdk-pipes-filter.mjs.map +1 -1
  92. package/fesm2022/taiga-ui-cdk-pipes-mapper.mjs +3 -4
  93. package/fesm2022/taiga-ui-cdk-pipes-mapper.mjs.map +1 -1
  94. package/fesm2022/taiga-ui-cdk-pipes-obfuscate.mjs +5 -5
  95. package/fesm2022/taiga-ui-cdk-pipes-obfuscate.mjs.map +1 -1
  96. package/fesm2022/taiga-ui-cdk-pipes.mjs +0 -6
  97. package/fesm2022/taiga-ui-cdk-pipes.mjs.map +1 -1
  98. package/fesm2022/taiga-ui-cdk-portals.mjs +126 -0
  99. package/fesm2022/taiga-ui-cdk-portals.mjs.map +1 -0
  100. package/fesm2022/taiga-ui-cdk-tokens.mjs +13 -47
  101. package/fesm2022/taiga-ui-cdk-tokens.mjs.map +1 -1
  102. package/fesm2022/taiga-ui-cdk-utils-browser.mjs +3 -26
  103. package/fesm2022/taiga-ui-cdk-utils-browser.mjs.map +1 -1
  104. package/fesm2022/taiga-ui-cdk-utils-di.mjs +45 -4
  105. package/fesm2022/taiga-ui-cdk-utils-di.mjs.map +1 -1
  106. package/fesm2022/taiga-ui-cdk-utils-dom.mjs +16 -96
  107. package/fesm2022/taiga-ui-cdk-utils-dom.mjs.map +1 -1
  108. package/fesm2022/taiga-ui-cdk-utils-focus.mjs +27 -44
  109. package/fesm2022/taiga-ui-cdk-utils-focus.mjs.map +1 -1
  110. package/fesm2022/taiga-ui-cdk-utils-math.mjs +1 -12
  111. package/fesm2022/taiga-ui-cdk-utils-math.mjs.map +1 -1
  112. package/fesm2022/taiga-ui-cdk-utils-miscellaneous.mjs +45 -124
  113. package/fesm2022/taiga-ui-cdk-utils-miscellaneous.mjs.map +1 -1
  114. package/fesm2022/taiga-ui-cdk-utils.mjs +0 -1
  115. package/fesm2022/taiga-ui-cdk-utils.mjs.map +1 -1
  116. package/fesm2022/taiga-ui-cdk.mjs +1 -1
  117. package/index.d.ts +1 -1
  118. package/observables/index.d.ts +0 -2
  119. package/package.json +21 -63
  120. package/pipes/index.d.ts +0 -6
  121. package/pipes/obfuscate/obfuscate.options.d.ts +1 -1
  122. package/portals/directive.d.ts +11 -0
  123. package/portals/index.d.ts +4 -0
  124. package/portals/portal.d.ts +24 -0
  125. package/portals/portals.d.ts +12 -0
  126. package/portals/service.d.ts +15 -0
  127. package/schematics/collection.json +2 -1
  128. package/schematics/migrate-tui-let/index.js +4 -3
  129. package/schematics/migrate-tui-let/index.js.map +1 -1
  130. package/schematics/migrate-tui-let/schema.json +7 -0
  131. package/schematics/ng-add/constants/versions.d.ts +1 -1
  132. package/schematics/ng-update/interfaces/html-comment.d.ts +1 -1
  133. package/schematics/ng-update/interfaces/removable-input.d.ts +1 -1
  134. package/schematics/ng-update/interfaces/replacement-attribute-to-directive.d.ts +1 -1
  135. package/schematics/ng-update/interfaces/replacement-attribute-value.d.ts +1 -1
  136. package/schematics/ng-update/interfaces/replacement-attribute.d.ts +1 -1
  137. package/schematics/ng-update/interfaces/replacement-tag.d.ts +1 -1
  138. package/schematics/ng-update/{v4/steps → utils}/replace-functions.d.ts +1 -1
  139. package/schematics/ng-update/{v4/steps → utils}/replace-functions.js +1 -1
  140. package/schematics/ng-update/utils/replace-functions.js.map +1 -0
  141. package/schematics/ng-update/v4/index.js +1 -1
  142. package/schematics/ng-update/v4/index.js.map +1 -1
  143. package/schematics/ng-update/v4/migrate-css-vars/rename-css-vars.js +1 -1
  144. package/schematics/ng-update/v4/migrate-css-vars/rename-css-vars.js.map +1 -1
  145. package/schematics/ng-update/v4/steps/constants/migration-warnings.js +1 -1
  146. package/schematics/ng-update/v4/steps/constants/migration-warnings.js.map +1 -1
  147. package/schematics/ng-update/v4/steps/migrate-templates.d.ts +2 -2
  148. package/schematics/ng-update/v4/steps/restore-tui-mapper.js +1 -1
  149. package/schematics/ng-update/v4/steps/restore-tui-mapper.js.map +1 -1
  150. package/schematics/ng-update/v4/steps/restore-tui-matcher.js +1 -1
  151. package/schematics/ng-update/v4/steps/restore-tui-matcher.js.map +1 -1
  152. package/schematics/ng-update/v4/steps/styles/migrate-space-mixins.js +1 -1
  153. package/schematics/ng-update/v4/steps/styles/migrate-space-mixins.js.map +1 -1
  154. package/schematics/ng-update/v5/index.js +12 -0
  155. package/schematics/ng-update/v5/index.js.map +1 -1
  156. package/schematics/ng-update/v5/steps/constants/attrs-to-replace.d.ts +2 -0
  157. package/schematics/ng-update/v5/steps/constants/attrs-to-replace.js +22 -0
  158. package/schematics/ng-update/v5/steps/constants/attrs-to-replace.js.map +1 -0
  159. package/schematics/ng-update/v5/steps/constants/functions.d.ts +2 -0
  160. package/schematics/ng-update/v5/steps/constants/functions.js +67 -0
  161. package/schematics/ng-update/v5/steps/constants/functions.js.map +1 -0
  162. package/schematics/ng-update/v5/steps/constants/html-comments.d.ts +2 -0
  163. package/schematics/ng-update/v5/steps/constants/html-comments.js +11 -0
  164. package/schematics/ng-update/v5/steps/constants/html-comments.js.map +1 -0
  165. package/schematics/ng-update/v5/steps/constants/identifiers-to-replace.d.ts +2 -0
  166. package/schematics/ng-update/v5/steps/constants/identifiers-to-replace.js +22 -0
  167. package/schematics/ng-update/v5/steps/constants/identifiers-to-replace.js.map +1 -0
  168. package/schematics/ng-update/v5/steps/migrate-templates.d.ts +17 -0
  169. package/schematics/ng-update/v5/steps/migrate-templates.js +46 -0
  170. package/schematics/ng-update/v5/steps/migrate-templates.js.map +1 -0
  171. package/schematics/ng-update/v5/steps/templates/migrate-avatar.d.ts +8 -0
  172. package/schematics/ng-update/v5/steps/templates/migrate-avatar.js +111 -0
  173. package/schematics/ng-update/v5/steps/templates/migrate-avatar.js.map +1 -0
  174. package/schematics/ng-update/v5/steps/templates/migrate-input-year.d.ts +8 -0
  175. package/schematics/ng-update/v5/steps/templates/migrate-input-year.js +52 -0
  176. package/schematics/ng-update/v5/steps/templates/migrate-input-year.js.map +1 -0
  177. package/schematics/utils/angular-json-manipulations.js +0 -2
  178. package/schematics/utils/angular-json-manipulations.js.map +1 -1
  179. package/schematics/utils/run-migration.d.ts +14 -0
  180. package/schematics/utils/run-migration.js +27 -0
  181. package/schematics/utils/run-migration.js.map +1 -0
  182. package/schematics/utils/templates/elements.js +4 -12
  183. package/schematics/utils/templates/elements.js.map +1 -1
  184. package/schematics/utils/templates/ng-component-input-manipulations.d.ts +3 -3
  185. package/schematics/utils/templates/ng-component-input-manipulations.js +1 -3
  186. package/schematics/utils/templates/ng-component-input-manipulations.js.map +1 -1
  187. package/tokens/environment.d.ts +0 -13
  188. package/tokens/index.d.ts +0 -2
  189. package/tokens/removed-element.d.ts +0 -3
  190. package/types/index.d.ts +0 -2
  191. package/utils/browser/index.d.ts +0 -2
  192. package/utils/di/index.d.ts +3 -0
  193. package/utils/dom/get-element-obscurers.d.ts +1 -1
  194. package/utils/dom/index.d.ts +0 -6
  195. package/utils/focus/get-closest-focusable.d.ts +1 -6
  196. package/utils/focus/{get-native-focused.d.ts → get-focused.d.ts} +1 -1
  197. package/utils/focus/index.d.ts +4 -6
  198. package/utils/focus/{is-native-keyboard-focusable.d.ts → is-focusable.d.ts} +1 -1
  199. package/utils/focus/{is-native-focused-in.d.ts → is-focused-in.d.ts} +1 -1
  200. package/utils/focus/{is-native-focused.d.ts → is-focused.d.ts} +1 -1
  201. package/utils/index.d.ts +0 -1
  202. package/utils/math/index.d.ts +0 -2
  203. package/utils/miscellaneous/generate-id.d.ts +1 -0
  204. package/utils/miscellaneous/index.d.ts +2 -11
  205. package/utils/miscellaneous/sanitize-text.d.ts +23 -0
  206. package/classes/portals.d.ts +0 -33
  207. package/constants/allow-signal-writes.d.ts +0 -2
  208. package/directives/animated/animated-parent.directive.d.ts +0 -10
  209. package/directives/click-outside/click-outside.directive.d.ts +0 -14
  210. package/directives/click-outside/index.d.ts +0 -1
  211. package/directives/droppable/droppable.directive.d.ts +0 -8
  212. package/directives/droppable/index.d.ts +0 -1
  213. package/directives/let/index.d.ts +0 -2
  214. package/directives/let/let-context.d.ts +0 -11
  215. package/directives/let/let.directive.d.ts +0 -18
  216. package/directives/popover/index.d.ts +0 -1
  217. package/directives/popover/popover.directive.d.ts +0 -14
  218. package/directives/repeat-times/index.d.ts +0 -1
  219. package/directives/repeat-times/repeat-times.directive.d.ts +0 -22
  220. package/fesm2022/taiga-ui-cdk-directives-click-outside.mjs +0 -39
  221. package/fesm2022/taiga-ui-cdk-directives-click-outside.mjs.map +0 -1
  222. package/fesm2022/taiga-ui-cdk-directives-droppable.mjs +0 -37
  223. package/fesm2022/taiga-ui-cdk-directives-droppable.mjs.map +0 -1
  224. package/fesm2022/taiga-ui-cdk-directives-let.mjs +0 -53
  225. package/fesm2022/taiga-ui-cdk-directives-let.mjs.map +0 -1
  226. package/fesm2022/taiga-ui-cdk-directives-popover.mjs +0 -32
  227. package/fesm2022/taiga-ui-cdk-directives-popover.mjs.map +0 -1
  228. package/fesm2022/taiga-ui-cdk-directives-repeat-times.mjs +0 -61
  229. package/fesm2022/taiga-ui-cdk-directives-repeat-times.mjs.map +0 -1
  230. package/fesm2022/taiga-ui-cdk-pipes-animation.mjs +0 -33
  231. package/fesm2022/taiga-ui-cdk-pipes-animation.mjs.map +0 -1
  232. package/fesm2022/taiga-ui-cdk-pipes-is-present.mjs +0 -25
  233. package/fesm2022/taiga-ui-cdk-pipes-is-present.mjs.map +0 -1
  234. package/fesm2022/taiga-ui-cdk-pipes-keys.mjs +0 -24
  235. package/fesm2022/taiga-ui-cdk-pipes-keys.mjs.map +0 -1
  236. package/fesm2022/taiga-ui-cdk-pipes-repeat-times.mjs +0 -25
  237. package/fesm2022/taiga-ui-cdk-pipes-repeat-times.mjs.map +0 -1
  238. package/fesm2022/taiga-ui-cdk-pipes-replace.mjs +0 -26
  239. package/fesm2022/taiga-ui-cdk-pipes-replace.mjs.map +0 -1
  240. package/fesm2022/taiga-ui-cdk-pipes-to-array.mjs +0 -24
  241. package/fesm2022/taiga-ui-cdk-pipes-to-array.mjs.map +0 -1
  242. package/fesm2022/taiga-ui-cdk-services.mjs +0 -151
  243. package/fesm2022/taiga-ui-cdk-services.mjs.map +0 -1
  244. package/fesm2022/taiga-ui-cdk-utils-color.mjs +0 -195
  245. package/fesm2022/taiga-ui-cdk-utils-color.mjs.map +0 -1
  246. package/observables/must-be-present.d.ts +0 -5
  247. package/observables/query-list-observable.d.ts +0 -6
  248. package/pipes/animation/animation.pipe.d.ts +0 -13
  249. package/pipes/animation/index.d.ts +0 -1
  250. package/pipes/is-present/index.d.ts +0 -1
  251. package/pipes/is-present/is-present.pipe.d.ts +0 -7
  252. package/pipes/keys/index.d.ts +0 -1
  253. package/pipes/keys/keys.pipe.d.ts +0 -7
  254. package/pipes/repeat-times/index.d.ts +0 -7
  255. package/pipes/replace/index.d.ts +0 -1
  256. package/pipes/replace/replace.pipe.d.ts +0 -7
  257. package/pipes/to-array/index.d.ts +0 -1
  258. package/pipes/to-array/to-array.pipe.d.ts +0 -7
  259. package/schematics/ng-update/v4/steps/replace-functions.js.map +0 -1
  260. package/services/id.service.d.ts +0 -8
  261. package/services/index.d.ts +0 -4
  262. package/services/popover.service.d.ts +0 -25
  263. package/services/scroll.service.d.ts +0 -13
  264. package/services/theme-color.service.d.ts +0 -18
  265. package/tokens/base-href.d.ts +0 -2
  266. package/tokens/range.d.ts +0 -5
  267. package/types/safe-html.d.ts +0 -2
  268. package/types/values-of.d.ts +0 -1
  269. package/utils/browser/is-apple.d.ts +0 -11
  270. package/utils/browser/is-ios.d.ts +0 -6
  271. package/utils/color/get-gradient-data.d.ts +0 -1
  272. package/utils/color/hex-to-rgb.d.ts +0 -1
  273. package/utils/color/hex-to-rgba.d.ts +0 -3
  274. package/utils/color/hsv-to-rgb.d.ts +0 -4
  275. package/utils/color/index.d.ts +0 -9
  276. package/utils/color/parse-color.d.ts +0 -1
  277. package/utils/color/parse-gradient.d.ts +0 -10
  278. package/utils/color/rgb-to-hex.d.ts +0 -1
  279. package/utils/color/rgb-to-hsv.d.ts +0 -1
  280. package/utils/color/rgba-to-hex.d.ts +0 -2
  281. package/utils/dom/get-element-point.d.ts +0 -2
  282. package/utils/dom/is-current-target.d.ts +0 -1
  283. package/utils/dom/is-inside-iframe.d.ts +0 -4
  284. package/utils/dom/is-node-in.d.ts +0 -8
  285. package/utils/dom/retarget-boundary-crossing.d.ts +0 -1
  286. package/utils/dom/value-binding.d.ts +0 -3
  287. package/utils/focus/blur-native-focused.d.ts +0 -4
  288. package/utils/focus/is-native-mouse-focusable.d.ts +0 -1
  289. package/utils/math/to-integer.d.ts +0 -1
  290. package/utils/math/to-radians.d.ts +0 -4
  291. package/utils/miscellaneous/change-date-separator.d.ts +0 -1
  292. package/utils/miscellaneous/create-token.d.ts +0 -9
  293. package/utils/miscellaneous/directive-listener.d.ts +0 -9
  294. package/utils/miscellaneous/flat-length.d.ts +0 -6
  295. package/utils/miscellaneous/get-original-array-from-query-list.d.ts +0 -8
  296. package/utils/miscellaneous/is-falsy.d.ts +0 -1
  297. package/utils/miscellaneous/is-valid-url.d.ts +0 -4
  298. package/utils/miscellaneous/uniq-by.d.ts +0 -1
  299. /package/utils/{miscellaneous → di}/directive-binding.d.ts +0 -0
  300. /package/utils/{miscellaneous → di}/provide-options.d.ts +0 -0
  301. /package/utils/{miscellaneous → di}/provide.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-pipes-mapper.mjs","sources":["../../../projects/cdk/pipes/mapper/mapper.pipe.ts","../../../projects/cdk/pipes/mapper/taiga-ui-cdk-pipes-mapper.ts"],"sourcesContent":["import {Pipe, type PipeTransform} from '@angular/core';\nimport {type TuiMapper} from '@taiga-ui/cdk/types';\n\n@Pipe({\n standalone: true,\n name: 'tuiMapper',\n})\nexport class TuiMapperPipe implements PipeTransform {\n /**\n * Maps object to an arbitrary result through a mapper function\n *\n * @param value an item to transform\n * @param mapper a mapping function\n * @param args arbitrary number of additional arguments\n */\n public transform<T extends unknown[], U, G>(\n value: U,\n mapper: TuiMapper<[U, ...T], G>,\n ...args: T\n ): G {\n return mapper(value, ...args);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAOa,aAAa,CAAA;AACtB;;;;;;AAMG;AACI,IAAA,SAAS,CACZ,KAAQ,EACR,MAA+B,EAC/B,GAAG,IAAO,EAAA;AAEV,QAAA,OAAO,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC;;+GAbxB,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,WAAW;AACpB,iBAAA;;;ACND;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-cdk-pipes-mapper.mjs","sources":["../../../projects/cdk/pipes/mapper/mapper.pipe.ts","../../../projects/cdk/pipes/mapper/taiga-ui-cdk-pipes-mapper.ts"],"sourcesContent":["import {Pipe, type PipeTransform} from '@angular/core';\nimport {type TuiMapper} from '@taiga-ui/cdk/types';\n\n@Pipe({\n name: 'tuiMapper',\n})\nexport class TuiMapperPipe implements PipeTransform {\n /**\n * Maps object to an arbitrary result through a mapper function\n *\n * @param value an item to transform\n * @param mapper a mapping function\n * @param args arbitrary number of additional arguments\n */\n public transform<T extends unknown[], U, G>(\n value: U,\n mapper: TuiMapper<[U, ...T], G>,\n ...args: T\n ): G {\n return mapper(value, ...args);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAMa,aAAa,CAAA;AACtB;;;;;;AAMG;AACI,IAAA,SAAS,CACZ,KAAQ,EACR,MAA+B,EAC/B,GAAG,IAAO,EAAA;AAEV,QAAA,OAAO,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC;;+GAbxB,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,WAAW;AACpB,iBAAA;;;ACLD;;AAEG;;;;"}
@@ -1,4 +1,5 @@
1
- import { tuiObfuscate, tuiCreateOptions } from '@taiga-ui/cdk/utils';
1
+ import { tuiCreateOptions } from '@taiga-ui/cdk/utils/di';
2
+ import { tuiObfuscate } from '@taiga-ui/cdk/utils/miscellaneous';
2
3
  import * as i0 from '@angular/core';
3
4
  import { inject, Pipe } from '@angular/core';
4
5
 
@@ -40,13 +41,12 @@ class TuiObfuscatePipe {
40
41
  const availableRecipes = Object.keys(this.option.recipes).sort();
41
42
  throw new Error(`Obfuscate recipe "${recipe}" not found. Available recipes: [${availableRecipes}]`);
42
43
  }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiObfuscatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
44
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: TuiObfuscatePipe, isStandalone: true, name: "tuiObfuscate" }); }
44
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiObfuscatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
45
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.16", ngImport: i0, type: TuiObfuscatePipe, isStandalone: true, name: "tuiObfuscate" }); }
45
46
  }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiObfuscatePipe, decorators: [{
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiObfuscatePipe, decorators: [{
47
48
  type: Pipe,
48
49
  args: [{
49
- standalone: true,
50
50
  name: 'tuiObfuscate',
51
51
  }]
52
52
  }] });
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-pipes-obfuscate.mjs","sources":["../../../projects/cdk/pipes/obfuscate/obfuscate.options.ts","../../../projects/cdk/pipes/obfuscate/obfuscate.pipe.ts","../../../projects/cdk/pipes/obfuscate/taiga-ui-cdk-pipes-obfuscate.ts"],"sourcesContent":["import {tuiCreateOptions, tuiObfuscate} from '@taiga-ui/cdk/utils';\n\n/**\n * Defines the options for obfuscation.\n */\nexport interface TuiObfuscateOptions {\n /**\n * Default function used to obfuscate a string\n * if no recipe was found.\n */\n readonly default: (value: string, symbol?: string) => string;\n\n /**\n * Collection of named recipes for different obfuscation scenarios.\n */\n readonly recipes: Record<string, (value: string) => string>;\n}\n\nexport const TUI_OBFUSCATE_DEFAULT_OPTIONS: TuiObfuscateOptions = {\n default: (value, symbol = '*') => tuiObfuscate(value, symbol),\n recipes: {},\n};\n\n/**\n * Injection token for obfuscation options.\n */\nexport const [TUI_OBFUSCATE_OPTIONS, tuiObfuscateOptionsProvider] = tuiCreateOptions(\n TUI_OBFUSCATE_DEFAULT_OPTIONS,\n);\n","import {inject, Pipe, type PipeTransform} from '@angular/core';\n\nimport {TUI_OBFUSCATE_OPTIONS} from './obfuscate.options';\n\n@Pipe({\n standalone: true,\n name: 'tuiObfuscate',\n})\nexport class TuiObfuscatePipe implements PipeTransform {\n private readonly option = inject(TUI_OBFUSCATE_OPTIONS);\n\n /**\n * Transforms the input value by obfuscating it according to the specified recipe or symbol.\n *\n * @param value The value to be obfuscated should be a string.\n * @param recipe The name of the recipe to use for obfuscation or a single character symbol for custom obfuscation.\n * @returns The obfuscated string.\n * @throws Will throw an error if the specified recipe is not found.\n */\n public transform(value: string, recipe = ''): string {\n if (!value) {\n return value;\n }\n\n if (!recipe) {\n return this.option.default(value);\n }\n\n const obfuscate = this.option.recipes[recipe];\n\n if (obfuscate) {\n return obfuscate(value);\n }\n\n if (recipe.length === 1) {\n return this.option.default(value, recipe[0]);\n }\n\n const availableRecipes = Object.keys(this.option.recipes).sort();\n\n throw new Error(\n `Obfuscate recipe \"${recipe}\" not found. Available recipes: [${availableRecipes}]`,\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAkBa,MAAA,6BAA6B,GAAwB;AAC9D,IAAA,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,KAAK,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC;AAC7D,IAAA,OAAO,EAAE,EAAE;;AAGf;;AAEG;AACI,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC,GAAG,gBAAgB,CAChF,6BAA6B;;MCnBpB,gBAAgB,CAAA;AAJ7B,IAAA,WAAA,GAAA;AAKqB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAmC1D;AAjCG;;;;;;;AAOG;AACI,IAAA,SAAS,CAAC,KAAa,EAAE,MAAM,GAAG,EAAE,EAAA;QACvC,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,OAAO,KAAK;;QAGhB,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;;QAGrC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAE7C,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,SAAS,CAAC,KAAK,CAAC;;AAG3B,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;;AAGhD,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;QAEhE,MAAM,IAAI,KAAK,CACX,CAAA,kBAAA,EAAqB,MAAM,CAAoC,iCAAA,EAAA,gBAAgB,CAAG,CAAA,CAAA,CACrF;;+GAlCI,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,cAAc;AACvB,iBAAA;;;ACPD;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-cdk-pipes-obfuscate.mjs","sources":["../../../projects/cdk/pipes/obfuscate/obfuscate.options.ts","../../../projects/cdk/pipes/obfuscate/obfuscate.pipe.ts","../../../projects/cdk/pipes/obfuscate/taiga-ui-cdk-pipes-obfuscate.ts"],"sourcesContent":["import {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\nimport {tuiObfuscate} from '@taiga-ui/cdk/utils/miscellaneous';\n\n/**\n * Defines the options for obfuscation.\n */\nexport interface TuiObfuscateOptions {\n /**\n * Default function used to obfuscate a string\n * if no recipe was found.\n */\n default(value: string, symbol?: string): string;\n\n /**\n * Collection of named recipes for different obfuscation scenarios.\n */\n readonly recipes: Record<string, (value: string) => string>;\n}\n\nexport const TUI_OBFUSCATE_DEFAULT_OPTIONS: TuiObfuscateOptions = {\n default: (value, symbol = '*') => tuiObfuscate(value, symbol),\n recipes: {},\n};\n\n/**\n * Injection token for obfuscation options.\n */\nexport const [TUI_OBFUSCATE_OPTIONS, tuiObfuscateOptionsProvider] = tuiCreateOptions(\n TUI_OBFUSCATE_DEFAULT_OPTIONS,\n);\n","import {inject, Pipe, type PipeTransform} from '@angular/core';\n\nimport {TUI_OBFUSCATE_OPTIONS} from './obfuscate.options';\n\n@Pipe({\n name: 'tuiObfuscate',\n})\nexport class TuiObfuscatePipe implements PipeTransform {\n private readonly option = inject(TUI_OBFUSCATE_OPTIONS);\n\n /**\n * Transforms the input value by obfuscating it according to the specified recipe or symbol.\n *\n * @param value The value to be obfuscated should be a string.\n * @param recipe The name of the recipe to use for obfuscation or a single character symbol for custom obfuscation.\n * @returns The obfuscated string.\n * @throws Will throw an error if the specified recipe is not found.\n */\n public transform(value: string, recipe = ''): string {\n if (!value) {\n return value;\n }\n\n if (!recipe) {\n return this.option.default(value);\n }\n\n const obfuscate = this.option.recipes[recipe];\n\n if (obfuscate) {\n return obfuscate(value);\n }\n\n if (recipe.length === 1) {\n return this.option.default(value, recipe[0]);\n }\n\n const availableRecipes = Object.keys(this.option.recipes).sort();\n\n throw new Error(\n `Obfuscate recipe \"${recipe}\" not found. Available recipes: [${availableRecipes}]`,\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAmBa,MAAA,6BAA6B,GAAwB;AAC9D,IAAA,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,KAAK,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC;AAC7D,IAAA,OAAO,EAAE,EAAE;;AAGf;;AAEG;AACI,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC,GAAG,gBAAgB,CAChF,6BAA6B;;MCrBpB,gBAAgB,CAAA;AAH7B,IAAA,WAAA,GAAA;AAIqB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAmC1D;AAjCG;;;;;;;AAOG;AACI,IAAA,SAAS,CAAC,KAAa,EAAE,MAAM,GAAG,EAAE,EAAA;QACvC,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,OAAO,KAAK;;QAGhB,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;;QAGrC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAE7C,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,SAAS,CAAC,KAAK,CAAC;;AAG3B,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;;AAGhD,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;QAEhE,MAAM,IAAI,KAAK,CACX,CAAA,kBAAA,EAAqB,MAAM,CAAoC,iCAAA,EAAA,gBAAgB,CAAG,CAAA,CAAA,CACrF;;+GAlCI,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,cAAc;AACvB,iBAAA;;;ACND;;AAEG;;;;"}
@@ -1,12 +1,6 @@
1
- export * from '@taiga-ui/cdk/pipes/animation';
2
1
  export * from '@taiga-ui/cdk/pipes/filter';
3
- export * from '@taiga-ui/cdk/pipes/is-present';
4
- export * from '@taiga-ui/cdk/pipes/keys';
5
2
  export * from '@taiga-ui/cdk/pipes/mapper';
6
3
  export * from '@taiga-ui/cdk/pipes/obfuscate';
7
- export * from '@taiga-ui/cdk/pipes/repeat-times';
8
- export * from '@taiga-ui/cdk/pipes/replace';
9
- export * from '@taiga-ui/cdk/pipes/to-array';
10
4
 
11
5
  /**
12
6
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-pipes.mjs","sources":["../../../projects/cdk/pipes/taiga-ui-cdk-pipes.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAAA;;AAEG"}
1
+ {"version":3,"file":"taiga-ui-cdk-pipes.mjs","sources":["../../../projects/cdk/pipes/taiga-ui-cdk-pipes.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;AAEG"}
@@ -0,0 +1,126 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, INJECTOR, Injector, Injectable, input, Directive, viewChild, ViewContainerRef } from '@angular/core';
3
+ import { outputFromObservable, toObservable } from '@angular/core/rxjs-interop';
4
+ import { tuiIfMap } from '@taiga-ui/cdk/observables';
5
+ import { PolymorpheusComponent, POLYMORPHEUS_CONTEXT, PolymorpheusTemplate } from '@taiga-ui/polymorpheus';
6
+ import { Observable, ignoreElements, endWith, share } from 'rxjs';
7
+ import { tuiProvide } from '@taiga-ui/cdk/utils/di';
8
+ import { tuiGenerateId } from '@taiga-ui/cdk/utils/miscellaneous';
9
+
10
+ class TuiPortal {
11
+ // eslint-disable-next-line @angular-eslint/prefer-inject
12
+ constructor(service) {
13
+ this.service = service;
14
+ this.injector = inject(INJECTOR);
15
+ }
16
+ open(content, options = {}) {
17
+ return new Observable(($implicit) => this.add(new PolymorpheusComponent(this.component, Injector.create({
18
+ parent: this.injector,
19
+ providers: [
20
+ {
21
+ provide: POLYMORPHEUS_CONTEXT,
22
+ useValue: {
23
+ ...this.options,
24
+ ...options,
25
+ content,
26
+ $implicit,
27
+ createdAt: Date.now(),
28
+ id: tuiGenerateId(),
29
+ completeWith: (v) => {
30
+ $implicit.next(v);
31
+ $implicit.complete();
32
+ },
33
+ },
34
+ },
35
+ ],
36
+ }))));
37
+ }
38
+ add(component) {
39
+ const ref = this.service.add(component);
40
+ return () => ref.destroy();
41
+ }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiPortal, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable }); }
43
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiPortal }); }
44
+ }
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiPortal, decorators: [{
46
+ type: Injectable
47
+ }], ctorParameters: () => [{ type: undefined }] });
48
+ function tuiAsPortal(portal) {
49
+ return tuiProvide(TuiPortal, portal);
50
+ }
51
+
52
+ class TuiPortalDirective extends PolymorpheusTemplate {
53
+ constructor() {
54
+ super(...arguments);
55
+ this.service = inject((TuiPortal));
56
+ this.options = input({});
57
+ this.open = input(false);
58
+ this.openChange = outputFromObservable(toObservable(this.open).pipe(tuiIfMap(() => this.service
59
+ .open(this, this.options())
60
+ .pipe(ignoreElements(), endWith(false))), share()));
61
+ }
62
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiPortalDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
63
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.16", type: TuiPortalDirective, isStandalone: true, inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openChange: "openChange" }, usesInheritance: true, ngImport: i0 }); }
64
+ }
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiPortalDirective, decorators: [{
66
+ type: Directive
67
+ }] });
68
+
69
+ /// <reference types="@taiga-ui/tsconfig/ng-dev-mode" />
70
+ class TuiPortalService {
71
+ attach(host) {
72
+ this.host = host;
73
+ }
74
+ add(content, context) {
75
+ if (!this.host) {
76
+ throw new TuiNoHostException();
77
+ }
78
+ return content instanceof PolymorpheusComponent
79
+ ? this.host.addComponent(content)
80
+ : this.host.addTemplate(content, context);
81
+ }
82
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiPortalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
83
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiPortalService }); }
84
+ }
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiPortalService, decorators: [{
86
+ type: Injectable
87
+ }] });
88
+ class TuiNoHostException extends Error {
89
+ constructor() {
90
+ super(ngDevMode
91
+ ? 'Portals cannot be used without TuiPortals component; perhaps you forgot to wrap your application with tui-root.'
92
+ : '');
93
+ }
94
+ }
95
+
96
+ /// <reference types="@taiga-ui/tsconfig/ng-dev-mode" />
97
+ class TuiPortals {
98
+ constructor() {
99
+ this.vcr = viewChild.required('vcr', { read: ViewContainerRef });
100
+ this.injector = inject(INJECTOR);
101
+ inject(TuiPortalService).attach(this);
102
+ }
103
+ addComponent(component) {
104
+ // TODO: Remove after updating to polymorpheus v5
105
+ const context = component['i'].get(POLYMORPHEUS_CONTEXT, { optional: true });
106
+ const injector = component.createInjector(this.injector, context || undefined);
107
+ const ref = this.vcr().createComponent(component.component, { injector });
108
+ ref.changeDetectorRef.detectChanges();
109
+ return ref;
110
+ }
111
+ addTemplate(templateRef, context) {
112
+ return this.vcr().createEmbeddedView(templateRef, context);
113
+ }
114
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiPortals, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
115
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "19.2.16", type: TuiPortals, isStandalone: true, viewQueries: [{ propertyName: "vcr", first: true, predicate: ["vcr"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0 }); }
116
+ }
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiPortals, decorators: [{
118
+ type: Directive
119
+ }], ctorParameters: () => [] });
120
+
121
+ /**
122
+ * Generated bundle index. Do not edit.
123
+ */
124
+
125
+ export { TuiNoHostException, TuiPortal, TuiPortalDirective, TuiPortalService, TuiPortals, tuiAsPortal };
126
+ //# sourceMappingURL=taiga-ui-cdk-portals.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taiga-ui-cdk-portals.mjs","sources":["../../../projects/cdk/portals/portal.ts","../../../projects/cdk/portals/directive.ts","../../../projects/cdk/portals/service.ts","../../../projects/cdk/portals/portals.ts","../../../projects/cdk/portals/taiga-ui-cdk-portals.ts"],"sourcesContent":["import {\n inject,\n Injectable,\n INJECTOR,\n Injector,\n type Provider,\n type Type,\n} from '@angular/core';\nimport {type TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiProvide} from '@taiga-ui/cdk/utils/di';\nimport {tuiGenerateId} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {\n // eslint-disable-next-line no-restricted-imports\n POLYMORPHEUS_CONTEXT,\n PolymorpheusComponent,\n type PolymorpheusContent,\n} from '@taiga-ui/polymorpheus';\nimport {Observable, type Observer} from 'rxjs';\n\nimport {type TuiPortalService} from './service';\n\nexport type TuiPortalContext<T, O = void> = T &\n TuiContext<Observer<O>> & {\n readonly content: PolymorpheusContent<TuiPortalContext<T, O>>;\n readonly createdAt: number;\n readonly id: string;\n completeWith(value: O): void;\n };\n\n@Injectable()\nexport abstract class TuiPortal<T, K = void> {\n protected abstract readonly component: Type<any>;\n protected abstract readonly options: T;\n\n private readonly injector = inject(INJECTOR);\n\n // eslint-disable-next-line @angular-eslint/prefer-inject\n constructor(protected readonly service: TuiPortalService) {}\n\n public open<G = void>(\n content: PolymorpheusContent<TuiPortalContext<T, K extends void ? G : K>>,\n options: Partial<T> = {},\n ): Observable<K extends void ? G : K> {\n return new Observable(($implicit) =>\n this.add(\n new PolymorpheusComponent(\n this.component,\n Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: POLYMORPHEUS_CONTEXT,\n useValue: {\n ...this.options,\n ...options,\n content,\n $implicit,\n createdAt: Date.now(),\n id: tuiGenerateId(),\n completeWith: (v: K extends void ? G : K): void => {\n $implicit.next(v);\n $implicit.complete();\n },\n } satisfies TuiPortalContext<T, K extends void ? G : K>,\n },\n ],\n }),\n ),\n ),\n );\n }\n\n protected add(component: PolymorpheusComponent<unknown>): () => void {\n const ref = this.service.add(component);\n\n return () => ref.destroy();\n }\n}\n\nexport function tuiAsPortal(portal: typeof TuiPortal<any>): Provider {\n return tuiProvide(TuiPortal, portal);\n}\n","import {Directive, inject, input} from '@angular/core';\nimport {outputFromObservable, toObservable} from '@angular/core/rxjs-interop';\nimport {tuiIfMap} from '@taiga-ui/cdk/observables';\nimport {PolymorpheusTemplate} from '@taiga-ui/polymorpheus';\nimport {endWith, ignoreElements, share} from 'rxjs';\n\nimport {TuiPortal, type TuiPortalContext} from './portal';\n\n@Directive()\nexport class TuiPortalDirective<T> extends PolymorpheusTemplate<TuiPortalContext<T>> {\n private readonly service = inject(TuiPortal<T>);\n\n public readonly options = input<Partial<T>>({});\n public readonly open = input(false);\n public readonly openChange = outputFromObservable(\n toObservable(this.open).pipe(\n tuiIfMap(() =>\n this.service\n .open(this, this.options())\n .pipe(ignoreElements(), endWith(false)),\n ),\n share(),\n ),\n );\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\nimport {\n type ComponentRef,\n type EmbeddedViewRef,\n Injectable,\n type TemplateRef,\n} from '@angular/core';\nimport {PolymorpheusComponent} from '@taiga-ui/polymorpheus';\n\nimport {type TuiPortals} from './portals';\n\n@Injectable()\nexport abstract class TuiPortalService {\n protected host?: TuiPortals;\n\n public attach(host: TuiPortals): void {\n this.host = host;\n }\n\n public add<C>(content: PolymorpheusComponent<C>): ComponentRef<C>;\n public add<C>(content: TemplateRef<C>, context?: C): EmbeddedViewRef<C>;\n public add<C>(\n content: PolymorpheusComponent<C> | TemplateRef<C>,\n context?: C,\n ): ComponentRef<C> | EmbeddedViewRef<C> {\n if (!this.host) {\n throw new TuiNoHostException();\n }\n\n return content instanceof PolymorpheusComponent\n ? this.host.addComponent(content)\n : this.host.addTemplate(content, context);\n }\n}\n\nexport class TuiNoHostException extends Error {\n constructor() {\n super(\n ngDevMode\n ? 'Portals cannot be used without TuiPortals component; perhaps you forgot to wrap your application with tui-root.'\n : '',\n );\n }\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\nimport {\n type ComponentRef,\n Directive,\n type EmbeddedViewRef,\n inject,\n INJECTOR,\n type TemplateRef,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\n// eslint-disable-next-line no-restricted-imports\nimport {POLYMORPHEUS_CONTEXT, type PolymorpheusComponent} from '@taiga-ui/polymorpheus';\n\nimport {TuiPortalService} from './service';\n\n@Directive()\nexport abstract class TuiPortals {\n private readonly vcr = viewChild.required('vcr', {read: ViewContainerRef});\n private readonly injector = inject(INJECTOR);\n\n constructor() {\n inject(TuiPortalService).attach(this);\n }\n\n public addComponent<C>(component: PolymorpheusComponent<C>): ComponentRef<C> {\n // TODO: Remove after updating to polymorpheus v5\n const context = component['i'].get(POLYMORPHEUS_CONTEXT, {optional: true});\n const injector = component.createInjector(this.injector, context || undefined);\n const ref = this.vcr().createComponent(component.component, {injector});\n\n ref.changeDetectorRef.detectChanges();\n\n return ref;\n }\n\n public addTemplate<C>(templateRef: TemplateRef<C>, context?: C): EmbeddedViewRef<C> {\n return this.vcr().createEmbeddedView(templateRef, context);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,26 +1,22 @@
1
- import { DOCUMENT, isPlatformBrowser } from '@angular/common';
2
- import { InjectionToken, inject, NgZone, PLATFORM_ID } from '@angular/core';
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { InjectionToken, inject, RendererFactory2, NgZone } from '@angular/core';
3
3
  import { WA_WINDOW, WA_USER_AGENT, WA_NAVIGATOR } from '@ng-web-apis/common';
4
4
  import { tuiTypedFromEvent, tuiZonefreeScheduler } from '@taiga-ui/cdk/observables';
5
- import { tuiIsNativeMouseFocusable, tuiGetDocumentOrShadowRoot, tuiGetActualTarget } from '@taiga-ui/cdk/utils';
5
+ import { tuiIsFocusable, tuiGetDocumentOrShadowRoot, tuiGetActualTarget } from '@taiga-ui/cdk/utils';
6
6
  import { Subject, startWith, switchMap, timer, map, share, merge, filter, takeUntil, repeat, withLatestFrom, of, take, distinctUntilChanged, fromEvent, shareReplay } from 'rxjs';
7
- import { ɵAnimationEngine as _AnimationEngine } from '@angular/animations/browser';
8
7
  import { toSignal } from '@angular/core/rxjs-interop';
9
8
  import { isIos } from '@ng-web-apis/platform';
10
- import { TUI_FALSE_HANDLER } from '@taiga-ui/cdk/constants';
11
9
 
12
- /**
13
- * Element currently being removed by AnimationEngine
14
- */
10
+ // TODO: Remove when fixed: https://issues.chromium.org/issues/41484175
15
11
  const TUI_REMOVED_ELEMENT = new InjectionToken(ngDevMode ? 'TUI_REMOVED_ELEMENT' : '', {
16
12
  factory: () => {
17
- const stub = { onRemovalComplete: () => { } };
18
13
  const element$ = new Subject();
19
- const engine = inject(_AnimationEngine, { optional: true }) || stub;
20
- const { onRemovalComplete = stub.onRemovalComplete } = engine;
21
- engine.onRemovalComplete = (element, context) => {
22
- element$.next(element);
23
- onRemovalComplete.call(engine, element, context);
14
+ const renderer = inject(RendererFactory2).createRenderer(null, null);
15
+ const proto = Object.getPrototypeOf(renderer.delegate ?? renderer);
16
+ const { removeChild } = proto;
17
+ proto.removeChild = function (...args) {
18
+ element$.next(args[1]);
19
+ removeChild.apply(this, args);
24
20
  };
25
21
  return element$.pipe(startWith(null), switchMap((element) => timer(0).pipe(map(() => null), startWith(element))), share());
26
22
  },
@@ -36,7 +32,7 @@ function isValidFocusout(target, removedElement = null) {
36
32
  // Not due to element being removed from DOM
37
33
  !removedElement?.contains(target) &&
38
34
  // Not due to scrollable element became non-scrollable
39
- tuiIsNativeMouseFocusable(target));
35
+ (target.getAttribute('tabIndex') === '-1' || tuiIsFocusable(target)));
40
36
  }
41
37
  function shadowRootActiveElement(root) {
42
38
  return merge(tuiTypedFromEvent(root, 'focusin').pipe(map(({ target }) => target)), tuiTypedFromEvent(root, 'focusout').pipe(filter(({ target, relatedTarget }) => !!relatedTarget && isValidFocusout(target)), map(({ relatedTarget }) => relatedTarget)));
@@ -75,10 +71,6 @@ const TUI_ACTIVE_ELEMENT = new InjectionToken(ngDevMode ? 'TUI_ACTIVE_ELEMENT' :
75
71
  },
76
72
  });
77
73
 
78
- const TUI_BASE_HREF = new InjectionToken(ngDevMode ? 'TUI_BASE_HREF' : '', {
79
- factory: () => inject(DOCUMENT).querySelector('base')?.href ?? '',
80
- });
81
-
82
74
  /**
83
75
  * Unified mobile detection regex.
84
76
  * https://stackoverflow.com/a/11381730/2706426 http://detectmobilebrowsers.com/
@@ -112,30 +104,11 @@ const TUI_IS_TOUCH = new InjectionToken(ngDevMode ? 'TUI_IS_TOUCH' : '', {
112
104
  });
113
105
  },
114
106
  });
115
- /**
116
- * @deprecated: use only {@link TUI_IS_E2E}
117
- * Detect if app is running under Cypress
118
- * {@link https://docs.cypress.io/faq/questions/using-cypress-faq#Is-there-any-way-to-detect-if-my-app-is-running-under-Cypress Cypress docs}
119
- * TODO: remove in v5
120
- */
121
- const TUI_IS_CYPRESS = new InjectionToken(ngDevMode ? 'TUI_IS_CYPRESS' : '', {
122
- factory: () => !!inject(WA_WINDOW).Cypress,
123
- });
124
- /**
125
- * @deprecated: use only {@link TUI_IS_E2E}
126
- * Manually provide `true` when running tests in Playwright
127
- * TODO: remove in v5
128
- */
129
- const TUI_IS_PLAYWRIGHT = new InjectionToken(ngDevMode ? 'TUI_IS_PLAYWRIGHT' : '', {
130
- factory: TUI_FALSE_HANDLER,
131
- });
132
107
  /**
133
108
  * Detect if app is running under any of test frameworks
134
109
  */
135
110
  const TUI_IS_E2E = new InjectionToken(ngDevMode ? 'TUI_IS_E2E' : '', {
136
- factory: () => inject(TUI_IS_CYPRESS) ||
137
- inject(TUI_IS_PLAYWRIGHT) ||
138
- inject(WA_NAVIGATOR).webdriver,
111
+ factory: () => !!inject(WA_WINDOW).Cypress || inject(WA_NAVIGATOR).webdriver,
139
112
  });
140
113
 
141
114
  const TUI_FALLBACK_VALUE = new InjectionToken(ngDevMode ? 'TUI_FALLBACK_VALUE' : '', {
@@ -148,13 +121,6 @@ function tuiFallbackValueProvider(useValue) {
148
121
  };
149
122
  }
150
123
 
151
- /**
152
- * SSR safe default empty Range
153
- */
154
- const TUI_RANGE = new InjectionToken(ngDevMode ? 'TUI_RANGE' : '', {
155
- factory: () => isPlatformBrowser(inject(PLATFORM_ID)) ? new Range() : {},
156
- });
157
-
158
124
  const TUI_WINDOW_SIZE = new InjectionToken(ngDevMode ? 'TUI_WINDOW_SIZE' : '', {
159
125
  factory: () => {
160
126
  const w = inject(WA_WINDOW);
@@ -183,5 +149,5 @@ const TUI_WINDOW_SIZE = new InjectionToken(ngDevMode ? 'TUI_WINDOW_SIZE' : '', {
183
149
  * Generated bundle index. Do not edit.
184
150
  */
185
151
 
186
- export { TUI_ACTIVE_ELEMENT, TUI_BASE_HREF, TUI_FALLBACK_VALUE, TUI_IS_ANDROID, TUI_IS_CYPRESS, TUI_IS_E2E, TUI_IS_IOS, TUI_IS_MOBILE, TUI_IS_PLAYWRIGHT, TUI_IS_TOUCH, TUI_IS_WEBKIT, TUI_MOBILE_REGEXP, TUI_PLATFORM, TUI_RANGE, TUI_REMOVED_ELEMENT, TUI_WINDOW_SIZE, tuiFallbackValueProvider };
152
+ export { TUI_ACTIVE_ELEMENT, TUI_FALLBACK_VALUE, TUI_IS_ANDROID, TUI_IS_E2E, TUI_IS_IOS, TUI_IS_MOBILE, TUI_IS_TOUCH, TUI_IS_WEBKIT, TUI_MOBILE_REGEXP, TUI_PLATFORM, TUI_REMOVED_ELEMENT, TUI_WINDOW_SIZE, tuiFallbackValueProvider };
187
153
  //# sourceMappingURL=taiga-ui-cdk-tokens.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-tokens.mjs","sources":["../../../projects/cdk/tokens/removed-element.ts","../../../projects/cdk/tokens/active-element.ts","../../../projects/cdk/tokens/base-href.ts","../../../projects/cdk/tokens/environment.ts","../../../projects/cdk/tokens/fallback-value.ts","../../../projects/cdk/tokens/range.ts","../../../projects/cdk/tokens/window-size.ts","../../../projects/cdk/tokens/taiga-ui-cdk-tokens.ts"],"sourcesContent":["import {ɵAnimationEngine as AnimationEngine} from '@angular/animations/browser';\nimport {inject, InjectionToken} from '@angular/core';\nimport {map, share, startWith, Subject, switchMap, timer} from 'rxjs';\n\n/**\n * Element currently being removed by AnimationEngine\n */\nexport const TUI_REMOVED_ELEMENT = new InjectionToken(\n ngDevMode ? 'TUI_REMOVED_ELEMENT' : '',\n {\n factory: () => {\n const stub = {onRemovalComplete: () => {}};\n const element$ = new Subject<Element | null>();\n const engine = inject(AnimationEngine, {optional: true}) || stub;\n const {onRemovalComplete = stub.onRemovalComplete} = engine;\n\n engine.onRemovalComplete = (element, context) => {\n element$.next(element);\n onRemovalComplete.call(engine, element, context);\n };\n\n return element$.pipe(\n startWith(null),\n switchMap((element) =>\n timer(0).pipe(\n map(() => null),\n startWith(element),\n ),\n ),\n share(),\n );\n },\n },\n);\n","import {DOCUMENT} from '@angular/common';\nimport {inject, InjectionToken, NgZone} from '@angular/core';\nimport {WA_WINDOW} from '@ng-web-apis/common';\nimport {tuiTypedFromEvent, tuiZonefreeScheduler} from '@taiga-ui/cdk/observables';\nimport {\n tuiGetActualTarget,\n tuiGetDocumentOrShadowRoot,\n tuiIsNativeMouseFocusable,\n} from '@taiga-ui/cdk/utils';\nimport {\n distinctUntilChanged,\n filter,\n map,\n merge,\n type Observable,\n of,\n repeat,\n share,\n startWith,\n switchMap,\n take,\n takeUntil,\n timer,\n withLatestFrom,\n} from 'rxjs';\n\nimport {TUI_REMOVED_ELEMENT} from './removed-element';\n\n// Checks if focusout event should be considered leaving active zone\nfunction isValidFocusout(target: any, removedElement: Element | null = null): boolean {\n return (\n // Not due to switching tabs/going to DevTools\n tuiGetDocumentOrShadowRoot(target).activeElement !== target &&\n // Not due to button/input becoming disabled or under disabled fieldset\n !target.matches(':disabled') &&\n // Not due to element being removed from DOM\n !removedElement?.contains(target) &&\n // Not due to scrollable element became non-scrollable\n tuiIsNativeMouseFocusable(target)\n );\n}\n\nfunction shadowRootActiveElement(root: Document): Observable<EventTarget | null> {\n return merge(\n tuiTypedFromEvent(root, 'focusin').pipe(map(({target}) => target)),\n tuiTypedFromEvent(root, 'focusout').pipe(\n filter(\n ({target, relatedTarget}) => !!relatedTarget && isValidFocusout(target),\n ),\n map(({relatedTarget}) => relatedTarget),\n ),\n );\n}\n\n/**\n * Active element on the document for ActiveZone\n */\nexport const TUI_ACTIVE_ELEMENT = new InjectionToken<Observable<EventTarget | null>>(\n ngDevMode ? 'TUI_ACTIVE_ELEMENT' : '',\n {\n factory: () => {\n const removedElement$ = inject(TUI_REMOVED_ELEMENT);\n const win = inject(WA_WINDOW);\n const doc = inject(DOCUMENT);\n const zone = inject(NgZone);\n const focusout$ = tuiTypedFromEvent(win, 'focusout', {capture: true});\n const focusin$ = tuiTypedFromEvent(win, 'focusin', {capture: true});\n const blur$ = tuiTypedFromEvent(win, 'blur');\n const mousedown$ = tuiTypedFromEvent(win, 'mousedown');\n const mouseup$ = tuiTypedFromEvent(win, 'mouseup');\n\n return merge(\n focusout$.pipe(\n takeUntil(mousedown$),\n repeat({delay: () => mouseup$}),\n withLatestFrom(removedElement$),\n filter(([event, removedElement]) =>\n isValidFocusout(tuiGetActualTarget(event), removedElement),\n ),\n map(([{relatedTarget}]) => relatedTarget),\n ),\n blur$.pipe(\n map(() => doc.activeElement),\n filter((element) => !!element?.matches('iframe')),\n ),\n focusin$.pipe(\n switchMap((event) => {\n const target = tuiGetActualTarget(event);\n const root = tuiGetDocumentOrShadowRoot(target) || doc;\n\n return root === doc\n ? of(target)\n : shadowRootActiveElement(root as Document).pipe(\n startWith(target),\n );\n }),\n ),\n mousedown$.pipe(\n switchMap((event) => {\n const actualTargetInCurrentTime = tuiGetActualTarget(event);\n\n return !doc.activeElement || doc.activeElement === doc.body\n ? of(actualTargetInCurrentTime)\n : focusout$.pipe(\n take(1),\n map(\n /**\n * Do not use `map(() => tuiGetActualTarget(event))`\n * because we have different result in runtime\n */\n () => actualTargetInCurrentTime,\n ),\n takeUntil(timer(0, tuiZonefreeScheduler(zone))),\n );\n }),\n ),\n ).pipe(distinctUntilChanged(), share());\n },\n },\n);\n","import {DOCUMENT} from '@angular/common';\nimport {inject, InjectionToken} from '@angular/core';\n\nexport const TUI_BASE_HREF = new InjectionToken(ngDevMode ? 'TUI_BASE_HREF' : '', {\n factory: () => inject(DOCUMENT).querySelector('base')?.href ?? '',\n});\n","import {inject, InjectionToken} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {WA_NAVIGATOR, WA_USER_AGENT, WA_WINDOW} from '@ng-web-apis/common';\nimport {isIos} from '@ng-web-apis/platform';\nimport {TUI_FALSE_HANDLER} from '@taiga-ui/cdk/constants';\nimport {fromEvent, map} from 'rxjs';\n\n/**\n * Unified mobile detection regex.\n * https://stackoverflow.com/a/11381730/2706426 http://detectmobilebrowsers.com/\n */\nexport const TUI_MOBILE_REGEXP =\n /(?:android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series([46])0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|^(?:1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br([ev])w|bumb|bw-([nu])|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do([cp])o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly([-_])|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-([mpt])|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c([- _agpst])|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac([ \\-/])|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja([tv])a|jbro|jemu|jigs|kddi|keji|kgt([ /])|klon|kpt |kwc-|kyo([ck])|le(no|xi)|lg( g|\\/([klu])|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t([- ov])|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30([02])|n50([025])|n7(0([01])|10)|ne(([cm])-|on|tf|wf|wg|wt)|nok([6i])|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan([adt])|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c([-01])|47|mc|nd|ri)|sgh-|shar|sie([-m])|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel([im])|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c([- ])|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-)/i;\n\nexport const TUI_IS_MOBILE = new InjectionToken(ngDevMode ? 'TUI_IS_MOBILE' : '', {\n factory: () => TUI_MOBILE_REGEXP.test(inject(WA_USER_AGENT)),\n});\n\nexport const TUI_IS_IOS = new InjectionToken(ngDevMode ? 'TUI_IS_IOS' : '', {\n factory: () => isIos(inject(WA_NAVIGATOR)),\n});\n\nexport const TUI_IS_ANDROID = new InjectionToken(ngDevMode ? 'TUI_IS_ANDROID' : '', {\n factory: () => inject(TUI_IS_MOBILE) && !inject(TUI_IS_IOS),\n});\n\nexport const TUI_IS_WEBKIT = new InjectionToken(ngDevMode ? 'TUI_IS_WEBKIT' : '', {\n factory: () => !!inject<any>(WA_WINDOW)?.webkitConvertPointFromNodeToPage,\n});\n\nexport const TUI_PLATFORM = new InjectionToken<'android' | 'ios' | 'web'>(\n ngDevMode ? 'TUI_PLATFORM' : '',\n {\n factory: () => {\n if (inject(TUI_IS_IOS)) {\n return 'ios';\n }\n\n return inject(TUI_IS_ANDROID) ? 'android' : 'web';\n },\n },\n);\n\nexport const TUI_IS_TOUCH = new InjectionToken(ngDevMode ? 'TUI_IS_TOUCH' : '', {\n factory: () => {\n const media = inject(WA_WINDOW).matchMedia('(pointer: coarse)');\n\n return toSignal(fromEvent(media, 'change').pipe(map(() => media.matches)), {\n initialValue: media.matches,\n });\n },\n});\n\n/**\n * @deprecated: use only {@link TUI_IS_E2E}\n * Detect if app is running under Cypress\n * {@link https://docs.cypress.io/faq/questions/using-cypress-faq#Is-there-any-way-to-detect-if-my-app-is-running-under-Cypress Cypress docs}\n * TODO: remove in v5\n */\nexport const TUI_IS_CYPRESS = new InjectionToken(ngDevMode ? 'TUI_IS_CYPRESS' : '', {\n factory: () => !!inject<any>(WA_WINDOW).Cypress,\n});\n\n/**\n * @deprecated: use only {@link TUI_IS_E2E}\n * Manually provide `true` when running tests in Playwright\n * TODO: remove in v5\n */\nexport const TUI_IS_PLAYWRIGHT = new InjectionToken<boolean>(\n ngDevMode ? 'TUI_IS_PLAYWRIGHT' : '',\n {\n factory: TUI_FALSE_HANDLER,\n },\n);\n\n/**\n * Detect if app is running under any of test frameworks\n */\nexport const TUI_IS_E2E = new InjectionToken(ngDevMode ? 'TUI_IS_E2E' : '', {\n factory: () =>\n inject(TUI_IS_CYPRESS) ||\n inject(TUI_IS_PLAYWRIGHT) ||\n inject(WA_NAVIGATOR).webdriver,\n});\n","import {InjectionToken, type ValueProvider} from '@angular/core';\n\nexport const TUI_FALLBACK_VALUE = new InjectionToken<any>(\n ngDevMode ? 'TUI_FALLBACK_VALUE' : '',\n {\n factory: () => null,\n },\n);\n\nexport function tuiFallbackValueProvider<T>(useValue: T): ValueProvider {\n return {\n provide: TUI_FALLBACK_VALUE,\n useValue,\n };\n}\n","import {isPlatformBrowser} from '@angular/common';\nimport {inject, InjectionToken, PLATFORM_ID} from '@angular/core';\n\n/**\n * SSR safe default empty Range\n */\nexport const TUI_RANGE = new InjectionToken(ngDevMode ? 'TUI_RANGE' : '', {\n factory: () =>\n isPlatformBrowser(inject(PLATFORM_ID)) ? new Range() : ({} as unknown as Range),\n});\n","import {inject, InjectionToken} from '@angular/core';\nimport {WA_WINDOW} from '@ng-web-apis/common';\nimport {tuiTypedFromEvent} from '@taiga-ui/cdk/observables';\nimport {map, type Observable, shareReplay, startWith} from 'rxjs';\n\nexport const TUI_WINDOW_SIZE = new InjectionToken<Observable<DOMRect>>(\n ngDevMode ? 'TUI_WINDOW_SIZE' : '',\n {\n factory: () => {\n const w = inject(WA_WINDOW);\n\n return tuiTypedFromEvent(w, 'resize').pipe(\n startWith(null),\n map(() => {\n const width = Math.max(\n w.document.documentElement.clientWidth || 0,\n w.innerWidth || 0,\n w.visualViewport?.width || 0,\n );\n const height = Math.max(\n w.document.documentElement.clientHeight || 0,\n w.innerHeight || 0,\n w.visualViewport?.height || 0,\n );\n const rect = {\n width,\n height,\n top: 0,\n left: 0,\n right: width,\n bottom: height,\n x: 0,\n y: 0,\n };\n\n return {\n ...rect,\n toJSON: () => JSON.stringify(rect),\n };\n }),\n shareReplay({bufferSize: 1, refCount: true}),\n );\n },\n },\n);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["AnimationEngine"],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-cdk-tokens.mjs","sources":["../../../projects/cdk/tokens/removed-element.ts","../../../projects/cdk/tokens/active-element.ts","../../../projects/cdk/tokens/environment.ts","../../../projects/cdk/tokens/fallback-value.ts","../../../projects/cdk/tokens/window-size.ts","../../../projects/cdk/tokens/taiga-ui-cdk-tokens.ts"],"sourcesContent":["import {inject, InjectionToken, RendererFactory2} from '@angular/core';\nimport {map, share, startWith, Subject, switchMap, timer} from 'rxjs';\n\n// TODO: Remove when fixed: https://issues.chromium.org/issues/41484175\nexport const TUI_REMOVED_ELEMENT = new InjectionToken(\n ngDevMode ? 'TUI_REMOVED_ELEMENT' : '',\n {\n factory: () => {\n const element$ = new Subject<Element | null>();\n const renderer = inject(RendererFactory2).createRenderer(null, null);\n const proto = Object.getPrototypeOf((renderer as any).delegate ?? renderer);\n const {removeChild} = proto;\n\n proto.removeChild = function (...args: any[]): void {\n element$.next(args[1]);\n removeChild.apply(this, args);\n };\n\n return element$.pipe(\n startWith(null),\n switchMap((element) =>\n timer(0).pipe(\n map(() => null),\n startWith(element),\n ),\n ),\n share(),\n );\n },\n },\n);\n","import {DOCUMENT} from '@angular/common';\nimport {inject, InjectionToken, NgZone} from '@angular/core';\nimport {WA_WINDOW} from '@ng-web-apis/common';\nimport {tuiTypedFromEvent, tuiZonefreeScheduler} from '@taiga-ui/cdk/observables';\nimport {\n tuiGetActualTarget,\n tuiGetDocumentOrShadowRoot,\n tuiIsFocusable,\n} from '@taiga-ui/cdk/utils';\nimport {\n distinctUntilChanged,\n filter,\n map,\n merge,\n type Observable,\n of,\n repeat,\n share,\n startWith,\n switchMap,\n take,\n takeUntil,\n timer,\n withLatestFrom,\n} from 'rxjs';\n\nimport {TUI_REMOVED_ELEMENT} from './removed-element';\n\n// Checks if focusout event should be considered leaving active zone\nfunction isValidFocusout(target: any, removedElement: Element | null = null): boolean {\n return (\n // Not due to switching tabs/going to DevTools\n tuiGetDocumentOrShadowRoot(target).activeElement !== target &&\n // Not due to button/input becoming disabled or under disabled fieldset\n !target.matches(':disabled') &&\n // Not due to element being removed from DOM\n !removedElement?.contains(target) &&\n // Not due to scrollable element became non-scrollable\n (target.getAttribute('tabIndex') === '-1' || tuiIsFocusable(target))\n );\n}\n\nfunction shadowRootActiveElement(root: Document): Observable<EventTarget | null> {\n return merge(\n tuiTypedFromEvent(root, 'focusin').pipe(map(({target}) => target)),\n tuiTypedFromEvent(root, 'focusout').pipe(\n filter(\n ({target, relatedTarget}) => !!relatedTarget && isValidFocusout(target),\n ),\n map(({relatedTarget}) => relatedTarget),\n ),\n );\n}\n\n/**\n * Active element on the document for ActiveZone\n */\nexport const TUI_ACTIVE_ELEMENT = new InjectionToken<Observable<EventTarget | null>>(\n ngDevMode ? 'TUI_ACTIVE_ELEMENT' : '',\n {\n factory: () => {\n const removedElement$ = inject(TUI_REMOVED_ELEMENT);\n const win = inject(WA_WINDOW);\n const doc = inject(DOCUMENT);\n const zone = inject(NgZone);\n const focusout$ = tuiTypedFromEvent(win, 'focusout', {capture: true});\n const focusin$ = tuiTypedFromEvent(win, 'focusin', {capture: true});\n const blur$ = tuiTypedFromEvent(win, 'blur');\n const mousedown$ = tuiTypedFromEvent(win, 'mousedown');\n const mouseup$ = tuiTypedFromEvent(win, 'mouseup');\n\n return merge(\n focusout$.pipe(\n takeUntil(mousedown$),\n repeat({delay: () => mouseup$}),\n withLatestFrom(removedElement$),\n filter(([event, removedElement]) =>\n isValidFocusout(tuiGetActualTarget(event), removedElement),\n ),\n map(([{relatedTarget}]) => relatedTarget),\n ),\n blur$.pipe(\n map(() => doc.activeElement),\n filter((element) => !!element?.matches('iframe')),\n ),\n focusin$.pipe(\n switchMap((event) => {\n const target = tuiGetActualTarget(event);\n const root = tuiGetDocumentOrShadowRoot(target) || doc;\n\n return root === doc\n ? of(target)\n : shadowRootActiveElement(root as Document).pipe(\n startWith(target),\n );\n }),\n ),\n mousedown$.pipe(\n switchMap((event) => {\n const actualTargetInCurrentTime = tuiGetActualTarget(event);\n\n return !doc.activeElement || doc.activeElement === doc.body\n ? of(actualTargetInCurrentTime)\n : focusout$.pipe(\n take(1),\n map(\n /**\n * Do not use `map(() => tuiGetActualTarget(event))`\n * because we have different result in runtime\n */\n () => actualTargetInCurrentTime,\n ),\n takeUntil(timer(0, tuiZonefreeScheduler(zone))),\n );\n }),\n ),\n ).pipe(distinctUntilChanged(), share());\n },\n },\n);\n","import {inject, InjectionToken} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {WA_NAVIGATOR, WA_USER_AGENT, WA_WINDOW} from '@ng-web-apis/common';\nimport {isIos} from '@ng-web-apis/platform';\nimport {fromEvent, map} from 'rxjs';\n\n/**\n * Unified mobile detection regex.\n * https://stackoverflow.com/a/11381730/2706426 http://detectmobilebrowsers.com/\n */\nexport const TUI_MOBILE_REGEXP =\n /(?:android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series([46])0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|^(?:1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br([ev])w|bumb|bw-([nu])|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do([cp])o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly([-_])|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-([mpt])|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c([- _agpst])|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac([ \\-/])|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja([tv])a|jbro|jemu|jigs|kddi|keji|kgt([ /])|klon|kpt |kwc-|kyo([ck])|le(no|xi)|lg( g|\\/([klu])|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t([- ov])|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30([02])|n50([025])|n7(0([01])|10)|ne(([cm])-|on|tf|wf|wg|wt)|nok([6i])|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan([adt])|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c([-01])|47|mc|nd|ri)|sgh-|shar|sie([-m])|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel([im])|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c([- ])|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-)/i;\n\nexport const TUI_IS_MOBILE = new InjectionToken(ngDevMode ? 'TUI_IS_MOBILE' : '', {\n factory: () => TUI_MOBILE_REGEXP.test(inject(WA_USER_AGENT)),\n});\n\nexport const TUI_IS_IOS = new InjectionToken(ngDevMode ? 'TUI_IS_IOS' : '', {\n factory: () => isIos(inject(WA_NAVIGATOR)),\n});\n\nexport const TUI_IS_ANDROID = new InjectionToken(ngDevMode ? 'TUI_IS_ANDROID' : '', {\n factory: () => inject(TUI_IS_MOBILE) && !inject(TUI_IS_IOS),\n});\n\nexport const TUI_IS_WEBKIT = new InjectionToken(ngDevMode ? 'TUI_IS_WEBKIT' : '', {\n factory: () => !!inject<any>(WA_WINDOW)?.webkitConvertPointFromNodeToPage,\n});\n\nexport const TUI_PLATFORM = new InjectionToken<'android' | 'ios' | 'web'>(\n ngDevMode ? 'TUI_PLATFORM' : '',\n {\n factory: () => {\n if (inject(TUI_IS_IOS)) {\n return 'ios';\n }\n\n return inject(TUI_IS_ANDROID) ? 'android' : 'web';\n },\n },\n);\n\nexport const TUI_IS_TOUCH = new InjectionToken(ngDevMode ? 'TUI_IS_TOUCH' : '', {\n factory: () => {\n const media = inject(WA_WINDOW).matchMedia('(pointer: coarse)');\n\n return toSignal(fromEvent(media, 'change').pipe(map(() => media.matches)), {\n initialValue: media.matches,\n });\n },\n});\n\n/**\n * Detect if app is running under any of test frameworks\n */\nexport const TUI_IS_E2E = new InjectionToken(ngDevMode ? 'TUI_IS_E2E' : '', {\n factory: () => !!inject<any>(WA_WINDOW).Cypress || inject(WA_NAVIGATOR).webdriver,\n});\n","import {InjectionToken, type ValueProvider} from '@angular/core';\n\nexport const TUI_FALLBACK_VALUE = new InjectionToken<any>(\n ngDevMode ? 'TUI_FALLBACK_VALUE' : '',\n {\n factory: () => null,\n },\n);\n\nexport function tuiFallbackValueProvider<T>(useValue: T): ValueProvider {\n return {\n provide: TUI_FALLBACK_VALUE,\n useValue,\n };\n}\n","import {inject, InjectionToken} from '@angular/core';\nimport {WA_WINDOW} from '@ng-web-apis/common';\nimport {tuiTypedFromEvent} from '@taiga-ui/cdk/observables';\nimport {map, type Observable, shareReplay, startWith} from 'rxjs';\n\nexport const TUI_WINDOW_SIZE = new InjectionToken<Observable<DOMRect>>(\n ngDevMode ? 'TUI_WINDOW_SIZE' : '',\n {\n factory: () => {\n const w = inject(WA_WINDOW);\n\n return tuiTypedFromEvent(w, 'resize').pipe(\n startWith(null),\n map(() => {\n const width = Math.max(\n w.document.documentElement.clientWidth || 0,\n w.innerWidth || 0,\n w.visualViewport?.width || 0,\n );\n const height = Math.max(\n w.document.documentElement.clientHeight || 0,\n w.innerHeight || 0,\n w.visualViewport?.height || 0,\n );\n const rect = {\n width,\n height,\n top: 0,\n left: 0,\n right: width,\n bottom: height,\n x: 0,\n y: 0,\n };\n\n return {\n ...rect,\n toJSON: () => JSON.stringify(rect),\n };\n }),\n shareReplay({bufferSize: 1, refCount: true}),\n );\n },\n },\n);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,19 +1,3 @@
1
- import { isIos } from '@ng-web-apis/platform';
2
-
3
- /**
4
- * @description:
5
- * All Chrome / Chromium-based browsers will return MacIntel on macOS,
6
- * no matter what the hardware architecture is. See the source code here:
7
- * https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/core/frame/navigator_id.cc;l=64;drc=703d3c472cf27470dad21a3f2c8972aca3732cd6
8
- * But maybe in future years, it will be changed to MacM1
9
- *
10
- * Documentation:
11
- * https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform
12
- */
13
- function tuiIsApple(navigator) {
14
- return navigator.platform.startsWith('Mac') || navigator.platform === 'iPhone';
15
- }
16
-
17
1
  function tuiIsEdge(userAgent) {
18
2
  return userAgent.toLowerCase().includes('edge');
19
3
  }
@@ -22,21 +6,14 @@ function tuiIsFirefox(userAgent) {
22
6
  return userAgent.toLowerCase().includes('firefox');
23
7
  }
24
8
 
25
- /**
26
- * @deprecated: drop in v5, use import {isApple} from '@ng-web-apis/platform';
27
- * @param navigator
28
- */
29
- const tuiIsIos = isIos;
30
-
31
9
  // TODO: Drop change to Document in v5
32
10
  function tuiIsSafari({ ownerDocument: doc }) {
33
11
  const win = doc?.defaultView;
34
12
  const isMacOsSafari = win.safari !== undefined &&
35
13
  win.safari?.pushNotification?.toString() === '[object SafariRemoteNotification]';
36
- const isIosSafari = (win.navigator?.vendor?.includes('Apple') &&
14
+ const isIosSafari = win.navigator?.vendor?.includes('Apple') &&
37
15
  !win.navigator?.userAgent?.includes('CriOS') &&
38
- !win.navigator?.userAgent?.includes('FxiOS')) ??
39
- false;
16
+ !win.navigator?.userAgent?.includes('FxiOS');
40
17
  return isMacOsSafari || isIosSafari;
41
18
  }
42
19
 
@@ -44,5 +21,5 @@ function tuiIsSafari({ ownerDocument: doc }) {
44
21
  * Generated bundle index. Do not edit.
45
22
  */
46
23
 
47
- export { tuiIsApple, tuiIsEdge, tuiIsFirefox, tuiIsIos, tuiIsSafari };
24
+ export { tuiIsEdge, tuiIsFirefox, tuiIsSafari };
48
25
  //# sourceMappingURL=taiga-ui-cdk-utils-browser.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-utils-browser.mjs","sources":["../../../projects/cdk/utils/browser/is-apple.ts","../../../projects/cdk/utils/browser/is-edge.ts","../../../projects/cdk/utils/browser/is-firefox.ts","../../../projects/cdk/utils/browser/is-ios.ts","../../../projects/cdk/utils/browser/is-safari.ts","../../../projects/cdk/utils/browser/taiga-ui-cdk-utils-browser.ts"],"sourcesContent":["/**\n * @description:\n * All Chrome / Chromium-based browsers will return MacIntel on macOS,\n * no matter what the hardware architecture is. See the source code here:\n * https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/core/frame/navigator_id.cc;l=64;drc=703d3c472cf27470dad21a3f2c8972aca3732cd6\n * But maybe in future years, it will be changed to MacM1\n *\n * Documentation:\n * https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform\n */\nexport function tuiIsApple(navigator: Navigator): boolean {\n return navigator.platform.startsWith('Mac') || navigator.platform === 'iPhone';\n}\n","export function tuiIsEdge(userAgent: string): boolean {\n return userAgent.toLowerCase().includes('edge');\n}\n","export function tuiIsFirefox(userAgent: string): boolean {\n return userAgent.toLowerCase().includes('firefox');\n}\n","import {isIos} from '@ng-web-apis/platform';\n\n/**\n * @deprecated: drop in v5, use import {isApple} from '@ng-web-apis/platform';\n * @param navigator\n */\nexport const tuiIsIos = isIos;\n","// TODO: Drop change to Document in v5\nexport function tuiIsSafari({ownerDocument: doc}: Element): boolean {\n const win = doc?.defaultView as unknown as Window & {safari?: any};\n\n const isMacOsSafari =\n win.safari !== undefined &&\n win.safari?.pushNotification?.toString() === '[object SafariRemoteNotification]';\n\n const isIosSafari =\n (win.navigator?.vendor?.includes('Apple') &&\n !win.navigator?.userAgent?.includes('CriOS') &&\n !win.navigator?.userAgent?.includes('FxiOS')) ??\n false;\n\n return isMacOsSafari || isIosSafari;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAAA;;;;;;;;;AASG;AACG,SAAU,UAAU,CAAC,SAAoB,EAAA;AAC3C,IAAA,OAAO,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ;AAClF;;ACZM,SAAU,SAAS,CAAC,SAAiB,EAAA;IACvC,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;AACnD;;ACFM,SAAU,YAAY,CAAC,SAAiB,EAAA;IAC1C,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;AACtD;;ACAA;;;AAGG;AACI,MAAM,QAAQ,GAAG;;ACNxB;SACgB,WAAW,CAAC,EAAC,aAAa,EAAE,GAAG,EAAU,EAAA;AACrD,IAAA,MAAM,GAAG,GAAG,GAAG,EAAE,WAAiD;AAElE,IAAA,MAAM,aAAa,GACf,GAAG,CAAC,MAAM,KAAK,SAAS;QACxB,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,mCAAmC;AAEpF,IAAA,MAAM,WAAW,GACb,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC;QACrC,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC;QAC5C,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC;AAChD,QAAA,KAAK;IAET,OAAO,aAAa,IAAI,WAAW;AACvC;;ACfA;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-cdk-utils-browser.mjs","sources":["../../../projects/cdk/utils/browser/is-edge.ts","../../../projects/cdk/utils/browser/is-firefox.ts","../../../projects/cdk/utils/browser/is-safari.ts","../../../projects/cdk/utils/browser/taiga-ui-cdk-utils-browser.ts"],"sourcesContent":["export function tuiIsEdge(userAgent: string): boolean {\n return userAgent.toLowerCase().includes('edge');\n}\n","export function tuiIsFirefox(userAgent: string): boolean {\n return userAgent.toLowerCase().includes('firefox');\n}\n","// TODO: Drop change to Document in v5\nexport function tuiIsSafari({ownerDocument: doc}: Element): boolean {\n const win = doc?.defaultView as unknown as Window & {safari?: any};\n\n const isMacOsSafari =\n win.safari !== undefined &&\n win.safari?.pushNotification?.toString() === '[object SafariRemoteNotification]';\n\n const isIosSafari =\n win.navigator?.vendor?.includes('Apple') &&\n !win.navigator?.userAgent?.includes('CriOS') &&\n !win.navigator?.userAgent?.includes('FxiOS');\n\n return isMacOsSafari || isIosSafari;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAM,SAAU,SAAS,CAAC,SAAiB,EAAA;IACvC,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;AACnD;;ACFM,SAAU,YAAY,CAAC,SAAiB,EAAA;IAC1C,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;AACtD;;ACFA;SACgB,WAAW,CAAC,EAAC,aAAa,EAAE,GAAG,EAAU,EAAA;AACrD,IAAA,MAAM,GAAG,GAAG,GAAG,EAAE,WAAiD;AAElE,IAAA,MAAM,aAAa,GACf,GAAG,CAAC,MAAM,KAAK,SAAS;QACxB,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,mCAAmC;IAEpF,MAAM,WAAW,GACb,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC;QACxC,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC;QAC5C,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC;IAEhD,OAAO,aAAa,IAAI,WAAW;AACvC;;ACdA;;AAEG;;;;"}
@@ -1,5 +1,16 @@
1
- import { InjectionToken } from '@angular/core';
2
- import { tuiProvideOptions } from '@taiga-ui/cdk/utils/miscellaneous';
1
+ import { inject, InjectionToken, isSignal, signal, effect } from '@angular/core';
2
+ import { tuiSetSignal } from '@taiga-ui/cdk/utils/miscellaneous';
3
+
4
+ function tuiProvideOptions(provide, options, fallback) {
5
+ return {
6
+ provide,
7
+ useFactory: () => ({
8
+ ...(inject(provide, { optional: true, skipSelf: true }) || fallback),
9
+ ...(inject(options, { optional: true }) ||
10
+ (typeof options === 'function' ? options() : options)),
11
+ }),
12
+ };
13
+ }
3
14
 
4
15
  function tuiCreateOptions(defaults) {
5
16
  const token = new InjectionToken(ngDevMode ? 'Options token' : '', {
@@ -8,11 +19,41 @@ function tuiCreateOptions(defaults) {
8
19
  return [token, (options) => tuiProvideOptions(token, options, defaults)];
9
20
  }
10
21
 
11
- // TODO: Move all DI utils into this entry point in v.5
22
+ // TODO: Consider {} as default options instead
23
+ function tuiDirectiveBinding(token, key, initial, options = { self: true }) {
24
+ const result = isSignal(initial) ? initial : signal(initial);
25
+ const directive = inject(token, options);
26
+ const output = directive?.[`${key.toString()}Change`];
27
+ if (!directive) {
28
+ return result;
29
+ }
30
+ // TODO: Figure out why effects are executed all the time and not just when result changes (check with Angular 18)
31
+ let previous;
32
+ effect(() => {
33
+ const value = result();
34
+ if (previous === value) {
35
+ return;
36
+ }
37
+ if (isSignal(directive[key])) {
38
+ tuiSetSignal(directive[key], value);
39
+ }
40
+ else {
41
+ directive[key] = value;
42
+ }
43
+ directive.ngOnChanges?.({});
44
+ output?.emit?.(value);
45
+ previous = value;
46
+ });
47
+ return result;
48
+ }
49
+
50
+ function tuiProvide(provide, useExisting, multi = false) {
51
+ return { provide, useExisting, multi };
52
+ }
12
53
 
13
54
  /**
14
55
  * Generated bundle index. Do not edit.
15
56
  */
16
57
 
17
- export { tuiCreateOptions };
58
+ export { tuiCreateOptions, tuiDirectiveBinding, tuiProvide, tuiProvideOptions };
18
59
  //# sourceMappingURL=taiga-ui-cdk-utils-di.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-utils-di.mjs","sources":["../../../projects/cdk/utils/di/create-options.ts","../../../projects/cdk/utils/di/index.ts","../../../projects/cdk/utils/di/taiga-ui-cdk-utils-di.ts"],"sourcesContent":["import {type FactoryProvider, InjectionToken} from '@angular/core';\nimport {tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\n\nexport function tuiCreateOptions<T>(\n defaults: T,\n): [\n token: InjectionToken<T>,\n provider: (item: Partial<T> | (() => Partial<T>)) => FactoryProvider,\n] {\n const token = new InjectionToken(ngDevMode ? 'Options token' : '', {\n factory: () => defaults,\n });\n\n return [token, (options) => tuiProvideOptions(token, options, defaults)];\n}\n","// TODO: Move all DI utils into this entry point in v.5\nexport * from './create-options';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAGM,SAAU,gBAAgB,CAC5B,QAAW,EAAA;AAKX,IAAA,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,SAAS,GAAG,eAAe,GAAG,EAAE,EAAE;AAC/D,QAAA,OAAO,EAAE,MAAM,QAAQ;AAC1B,KAAA,CAAC;AAEF,IAAA,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,KAAK,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC5E;;ACdA;;ACAA;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-cdk-utils-di.mjs","sources":["../../../projects/cdk/utils/di/provide-options.ts","../../../projects/cdk/utils/di/create-options.ts","../../../projects/cdk/utils/di/directive-binding.ts","../../../projects/cdk/utils/di/provide.ts","../../../projects/cdk/utils/di/taiga-ui-cdk-utils-di.ts"],"sourcesContent":["import {type FactoryProvider, inject, type InjectionToken} from '@angular/core';\n\nexport function tuiProvideOptions<T>(\n provide: InjectionToken<T>,\n options: Partial<T> | (() => Partial<T>),\n fallback: T,\n): FactoryProvider {\n return {\n provide,\n useFactory: (): T => ({\n ...(inject(provide, {optional: true, skipSelf: true}) || fallback),\n ...(inject(options as any, {optional: true}) ||\n (typeof options === 'function' ? options() : options)),\n }),\n };\n}\n","import {type FactoryProvider, InjectionToken} from '@angular/core';\n\nimport {tuiProvideOptions} from './provide-options';\n\nexport function tuiCreateOptions<T>(\n defaults: T,\n): [\n token: InjectionToken<T>,\n provider: (item: Partial<T> | (() => Partial<T>)) => FactoryProvider,\n] {\n const token = new InjectionToken(ngDevMode ? 'Options token' : '', {\n factory: () => defaults,\n });\n\n return [token, (options) => tuiProvideOptions(token, options, defaults)];\n}\n","import {\n effect,\n inject,\n type InjectOptions,\n isSignal,\n type ProviderToken,\n type Signal,\n signal,\n type WritableSignal,\n} from '@angular/core';\nimport {tuiSetSignal} from '@taiga-ui/cdk/utils/miscellaneous';\n\ntype SignalLikeTypeOf<T> = T extends Signal<infer R> ? R : T;\n\ntype SignalLike<T> = Signal<T> | T;\n\n// TODO: Consider {} as default options instead\nexport function tuiDirectiveBinding<\n T,\n G extends keyof T,\n I extends SignalLike<SignalLikeTypeOf<T[G]>>,\n>(\n token: ProviderToken<T>,\n key: G,\n initial: I,\n options: InjectOptions = {self: true},\n): I extends Signal<any> ? I : WritableSignal<I> {\n const result: any = isSignal(initial) ? initial : signal(initial);\n const directive: any = inject(token, options);\n const output = directive?.[`${key.toString()}Change`];\n\n if (!directive) {\n return result;\n }\n\n // TODO: Figure out why effects are executed all the time and not just when result changes (check with Angular 18)\n let previous: any;\n\n effect(() => {\n const value: any = result();\n\n if (previous === value) {\n return;\n }\n\n if (isSignal(directive[key])) {\n tuiSetSignal(directive[key] as any, value);\n } else {\n directive[key] = value;\n }\n\n directive.ngOnChanges?.({});\n output?.emit?.(value);\n previous = value;\n });\n\n return result;\n}\n","import {type ExistingProvider, type ProviderToken} from '@angular/core';\n\nexport function tuiProvide<T>(\n provide: ProviderToken<T>,\n useExisting: ProviderToken<T>,\n): ExistingProvider;\nexport function tuiProvide<T>(\n provide: ProviderToken<T | T[]>,\n useExisting: ProviderToken<T>,\n multi: boolean,\n): ExistingProvider;\nexport function tuiProvide<T>(\n provide: ProviderToken<T>,\n useExisting: ProviderToken<T>,\n multi = false,\n): ExistingProvider {\n return {provide, useExisting, multi};\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;SAEgB,iBAAiB,CAC7B,OAA0B,EAC1B,OAAwC,EACxC,QAAW,EAAA;IAEX,OAAO;QACH,OAAO;AACP,QAAA,UAAU,EAAE,OAAU;AAClB,YAAA,IAAI,MAAM,CAAC,OAAO,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,IAAI,QAAQ,CAAC;YAClE,IAAI,MAAM,CAAC,OAAc,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;AACxC,iBAAC,OAAO,OAAO,KAAK,UAAU,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;SAC7D,CAAC;KACL;AACL;;ACXM,SAAU,gBAAgB,CAC5B,QAAW,EAAA;AAKX,IAAA,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,SAAS,GAAG,eAAe,GAAG,EAAE,EAAE;AAC/D,QAAA,OAAO,EAAE,MAAM,QAAQ;AAC1B,KAAA,CAAC;AAEF,IAAA,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,KAAK,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC5E;;ACCA;AACgB,SAAA,mBAAmB,CAK/B,KAAuB,EACvB,GAAM,EACN,OAAU,EACV,OAAyB,GAAA,EAAC,IAAI,EAAE,IAAI,EAAC,EAAA;AAErC,IAAA,MAAM,MAAM,GAAQ,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACjE,MAAM,SAAS,GAAQ,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;AAC7C,IAAA,MAAM,MAAM,GAAG,SAAS,GAAG,CAAA,EAAG,GAAG,CAAC,QAAQ,EAAE,CAAQ,MAAA,CAAA,CAAC;IAErD,IAAI,CAAC,SAAS,EAAE;AACZ,QAAA,OAAO,MAAM;;;AAIjB,IAAA,IAAI,QAAa;IAEjB,MAAM,CAAC,MAAK;AACR,QAAA,MAAM,KAAK,GAAQ,MAAM,EAAE;AAE3B,QAAA,IAAI,QAAQ,KAAK,KAAK,EAAE;YACpB;;QAGJ,IAAI,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;YAC1B,YAAY,CAAC,SAAS,CAAC,GAAG,CAAQ,EAAE,KAAK,CAAC;;aACvC;AACH,YAAA,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK;;AAG1B,QAAA,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC;AAC3B,QAAA,MAAM,EAAE,IAAI,GAAG,KAAK,CAAC;QACrB,QAAQ,GAAG,KAAK;AACpB,KAAC,CAAC;AAEF,IAAA,OAAO,MAAM;AACjB;;AC9CM,SAAU,UAAU,CACtB,OAAyB,EACzB,WAA6B,EAC7B,KAAK,GAAG,KAAK,EAAA;AAEb,IAAA,OAAO,EAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAC;AACxC;;ACjBA;;AAEG;;;;"}