@taiga-ui/cdk 5.0.0-rc.4 → 5.0.0

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 (200) hide show
  1. package/constants/used-icons.d.ts +1 -1
  2. package/constants/version.d.ts +1 -1
  3. package/constants/version.js +1 -1
  4. package/constants/version.js.map +1 -1
  5. package/directives/index.d.ts +1 -0
  6. package/directives/truncate/index.d.ts +2 -0
  7. package/directives/truncate/truncate.directive.d.ts +13 -0
  8. package/directives/truncate/truncate.service.d.ts +9 -0
  9. package/directives/visual-viewport/visual-viewport.directive.d.ts +1 -0
  10. package/fesm2022/taiga-ui-cdk-classes.mjs +3 -3
  11. package/fesm2022/taiga-ui-cdk-classes.mjs.map +1 -1
  12. package/fesm2022/taiga-ui-cdk-constants.mjs +1 -5
  13. package/fesm2022/taiga-ui-cdk-constants.mjs.map +1 -1
  14. package/fesm2022/taiga-ui-cdk-date-time.mjs.map +1 -1
  15. package/fesm2022/taiga-ui-cdk-directives-active-zone.mjs +4 -4
  16. package/fesm2022/taiga-ui-cdk-directives-active-zone.mjs.map +1 -1
  17. package/fesm2022/taiga-ui-cdk-directives-animated.mjs +3 -3
  18. package/fesm2022/taiga-ui-cdk-directives-animated.mjs.map +1 -1
  19. package/fesm2022/taiga-ui-cdk-directives-auto-focus.mjs +3 -3
  20. package/fesm2022/taiga-ui-cdk-directives-auto-focus.mjs.map +1 -1
  21. package/fesm2022/taiga-ui-cdk-directives-control.mjs +3 -3
  22. package/fesm2022/taiga-ui-cdk-directives-control.mjs.map +1 -1
  23. package/fesm2022/taiga-ui-cdk-directives-copy-processor.mjs +3 -3
  24. package/fesm2022/taiga-ui-cdk-directives-copy-processor.mjs.map +1 -1
  25. package/fesm2022/taiga-ui-cdk-directives-element.mjs +3 -3
  26. package/fesm2022/taiga-ui-cdk-directives-element.mjs.map +1 -1
  27. package/fesm2022/taiga-ui-cdk-directives-focus-trap.mjs +3 -3
  28. package/fesm2022/taiga-ui-cdk-directives-focus-trap.mjs.map +1 -1
  29. package/fesm2022/taiga-ui-cdk-directives-font-size.mjs +3 -3
  30. package/fesm2022/taiga-ui-cdk-directives-font-size.mjs.map +1 -1
  31. package/fesm2022/taiga-ui-cdk-directives-high-dpi.mjs +3 -3
  32. package/fesm2022/taiga-ui-cdk-directives-high-dpi.mjs.map +1 -1
  33. package/fesm2022/taiga-ui-cdk-directives-hovered.mjs +6 -6
  34. package/fesm2022/taiga-ui-cdk-directives-hovered.mjs.map +1 -1
  35. package/fesm2022/taiga-ui-cdk-directives-item.mjs +3 -3
  36. package/fesm2022/taiga-ui-cdk-directives-media.mjs +3 -3
  37. package/fesm2022/taiga-ui-cdk-directives-media.mjs.map +1 -1
  38. package/fesm2022/taiga-ui-cdk-directives-native-validator.mjs +3 -3
  39. package/fesm2022/taiga-ui-cdk-directives-native-validator.mjs.map +1 -1
  40. package/fesm2022/taiga-ui-cdk-directives-obscured.mjs +6 -6
  41. package/fesm2022/taiga-ui-cdk-directives-obscured.mjs.map +1 -1
  42. package/fesm2022/taiga-ui-cdk-directives-pan.mjs +6 -6
  43. package/fesm2022/taiga-ui-cdk-directives-pan.mjs.map +1 -1
  44. package/fesm2022/taiga-ui-cdk-directives-platform.mjs +3 -3
  45. package/fesm2022/taiga-ui-cdk-directives-platform.mjs.map +1 -1
  46. package/fesm2022/taiga-ui-cdk-directives-resizer.mjs +6 -6
  47. package/fesm2022/taiga-ui-cdk-directives-resizer.mjs.map +1 -1
  48. package/fesm2022/taiga-ui-cdk-directives-swipe.mjs +6 -6
  49. package/fesm2022/taiga-ui-cdk-directives-swipe.mjs.map +1 -1
  50. package/fesm2022/taiga-ui-cdk-directives-transitioned.mjs +6 -9
  51. package/fesm2022/taiga-ui-cdk-directives-transitioned.mjs.map +1 -1
  52. package/fesm2022/taiga-ui-cdk-directives-truncate.mjs +177 -0
  53. package/fesm2022/taiga-ui-cdk-directives-truncate.mjs.map +1 -0
  54. package/fesm2022/taiga-ui-cdk-directives-validator.mjs +3 -3
  55. package/fesm2022/taiga-ui-cdk-directives-validator.mjs.map +1 -1
  56. package/fesm2022/taiga-ui-cdk-directives-value-changes.mjs +3 -3
  57. package/fesm2022/taiga-ui-cdk-directives-value-changes.mjs.map +1 -1
  58. package/fesm2022/taiga-ui-cdk-directives-visual-viewport.mjs +6 -3
  59. package/fesm2022/taiga-ui-cdk-directives-visual-viewport.mjs.map +1 -1
  60. package/fesm2022/taiga-ui-cdk-directives-with-styles.mjs +3 -3
  61. package/fesm2022/taiga-ui-cdk-directives-with-styles.mjs.map +1 -1
  62. package/fesm2022/taiga-ui-cdk-directives-zoom.mjs +6 -6
  63. package/fesm2022/taiga-ui-cdk-directives-zoom.mjs.map +1 -1
  64. package/fesm2022/taiga-ui-cdk-directives.mjs +1 -0
  65. package/fesm2022/taiga-ui-cdk-directives.mjs.map +1 -1
  66. package/fesm2022/taiga-ui-cdk-observables.mjs.map +1 -1
  67. package/fesm2022/taiga-ui-cdk-pipes-filter.mjs +3 -3
  68. package/fesm2022/taiga-ui-cdk-pipes-filter.mjs.map +1 -1
  69. package/fesm2022/taiga-ui-cdk-pipes-mapper.mjs +3 -3
  70. package/fesm2022/taiga-ui-cdk-pipes-mapper.mjs.map +1 -1
  71. package/fesm2022/taiga-ui-cdk-pipes-obfuscate.mjs +3 -3
  72. package/fesm2022/taiga-ui-cdk-pipes-obfuscate.mjs.map +1 -1
  73. package/fesm2022/taiga-ui-cdk-portals.mjs +13 -16
  74. package/fesm2022/taiga-ui-cdk-portals.mjs.map +1 -1
  75. package/fesm2022/taiga-ui-cdk-tokens.mjs.map +1 -1
  76. package/fesm2022/taiga-ui-cdk-utils-di.mjs.map +1 -1
  77. package/fesm2022/taiga-ui-cdk-utils-dom.mjs.map +1 -1
  78. package/fesm2022/taiga-ui-cdk-utils-focus.mjs.map +1 -1
  79. package/fesm2022/taiga-ui-cdk-utils-math.mjs.map +1 -1
  80. package/fesm2022/taiga-ui-cdk-utils-miscellaneous.mjs +5 -1
  81. package/fesm2022/taiga-ui-cdk-utils-miscellaneous.mjs.map +1 -1
  82. package/package.json +28 -10
  83. package/schematics/ng-add/constants/versions.d.ts +1 -1
  84. package/schematics/ng-add/index.js +0 -4
  85. package/schematics/ng-add/index.js.map +1 -1
  86. package/schematics/ng-update/interfaces/replacement-function-parameter.d.ts +4 -2
  87. package/schematics/ng-update/utils/replace-attrs-in-host.d.ts +5 -0
  88. package/schematics/ng-update/utils/replace-attrs-in-host.js +41 -0
  89. package/schematics/ng-update/utils/replace-attrs-in-host.js.map +1 -0
  90. package/schematics/ng-update/utils/replace-function-parameters.js +19 -16
  91. package/schematics/ng-update/utils/replace-function-parameters.js.map +1 -1
  92. package/schematics/ng-update/v5/index.js +31 -6
  93. package/schematics/ng-update/v5/index.js.map +1 -1
  94. package/schematics/ng-update/v5/steps/constants/attr-with-values-to-replace.js +45 -0
  95. package/schematics/ng-update/v5/steps/constants/attr-with-values-to-replace.js.map +1 -1
  96. package/schematics/ng-update/v5/steps/constants/attrs-in-host-to-replace.d.ts +4 -0
  97. package/schematics/ng-update/v5/steps/constants/attrs-in-host-to-replace.js +10 -0
  98. package/schematics/ng-update/v5/steps/constants/attrs-in-host-to-replace.js.map +1 -0
  99. package/schematics/ng-update/v5/steps/constants/attrs-to-replace.js +49 -0
  100. package/schematics/ng-update/v5/steps/constants/attrs-to-replace.js.map +1 -1
  101. package/schematics/ng-update/v5/steps/constants/function-parameters-to-replace.js +4 -5
  102. package/schematics/ng-update/v5/steps/constants/function-parameters-to-replace.js.map +1 -1
  103. package/schematics/ng-update/v5/steps/constants/html-comments.js +11 -0
  104. package/schematics/ng-update/v5/steps/constants/html-comments.js.map +1 -1
  105. package/schematics/ng-update/v5/steps/constants/identifiers-to-replace.js +290 -0
  106. package/schematics/ng-update/v5/steps/constants/identifiers-to-replace.js.map +1 -1
  107. package/schematics/ng-update/v5/steps/constants/inputs-to-remove.js +5 -0
  108. package/schematics/ng-update/v5/steps/constants/inputs-to-remove.js.map +1 -1
  109. package/schematics/ng-update/v5/steps/constants/migration-warnings.js +54 -0
  110. package/schematics/ng-update/v5/steps/constants/migration-warnings.js.map +1 -1
  111. package/schematics/ng-update/v5/steps/constants/modules-to-remove.js +16 -0
  112. package/schematics/ng-update/v5/steps/constants/modules-to-remove.js.map +1 -1
  113. package/schematics/ng-update/v5/steps/constants/style-comments.d.ts +1 -1
  114. package/schematics/ng-update/v5/steps/constants/style-comments.js +4 -4
  115. package/schematics/ng-update/v5/steps/constants/style-comments.js.map +1 -1
  116. package/schematics/ng-update/v5/steps/constants/tags-to-replace.js +5 -0
  117. package/schematics/ng-update/v5/steps/constants/tags-to-replace.js.map +1 -1
  118. package/schematics/ng-update/v5/steps/migrate-dialog-legacy-sizes.d.ts +3 -0
  119. package/schematics/ng-update/v5/steps/migrate-dialog-legacy-sizes.js +110 -0
  120. package/schematics/ng-update/v5/steps/migrate-dialog-legacy-sizes.js.map +1 -0
  121. package/schematics/ng-update/v5/steps/migrate-doc-i18n-tokens.d.ts +15 -0
  122. package/schematics/ng-update/v5/steps/migrate-doc-i18n-tokens.js +94 -0
  123. package/schematics/ng-update/v5/steps/migrate-doc-i18n-tokens.js.map +1 -0
  124. package/schematics/ng-update/v5/steps/migrate-filter-by-input.d.ts +3 -0
  125. package/schematics/ng-update/v5/steps/migrate-filter-by-input.js +103 -0
  126. package/schematics/ng-update/v5/steps/migrate-filter-by-input.js.map +1 -0
  127. package/schematics/ng-update/v5/steps/migrate-templates.js +39 -2
  128. package/schematics/ng-update/v5/steps/migrate-templates.js.map +1 -1
  129. package/schematics/ng-update/v5/steps/styles/migrate-imports.js +1 -0
  130. package/schematics/ng-update/v5/steps/styles/migrate-imports.js.map +1 -1
  131. package/schematics/ng-update/v5/steps/templates/migrate-calendar-sheet-single.d.ts +8 -0
  132. package/schematics/ng-update/v5/steps/templates/migrate-calendar-sheet-single.js +118 -0
  133. package/schematics/ng-update/v5/steps/templates/migrate-calendar-sheet-single.js.map +1 -0
  134. package/schematics/ng-update/v5/steps/templates/migrate-chart-hint.d.ts +8 -0
  135. package/schematics/ng-update/v5/steps/templates/migrate-chart-hint.js +17 -0
  136. package/schematics/ng-update/v5/steps/templates/migrate-chart-hint.js.map +1 -0
  137. package/schematics/ng-update/v5/steps/templates/migrate-combo-box.d.ts +8 -0
  138. package/schematics/ng-update/v5/steps/templates/migrate-combo-box.js +207 -0
  139. package/schematics/ng-update/v5/steps/templates/migrate-combo-box.js.map +1 -0
  140. package/schematics/ng-update/v5/steps/templates/migrate-format-phone-pipe.d.ts +8 -0
  141. package/schematics/ng-update/v5/steps/templates/migrate-format-phone-pipe.js +41 -0
  142. package/schematics/ng-update/v5/steps/templates/migrate-format-phone-pipe.js.map +1 -0
  143. package/schematics/ng-update/v5/steps/templates/migrate-input-color.d.ts +8 -0
  144. package/schematics/ng-update/v5/steps/templates/migrate-input-color.js +52 -0
  145. package/schematics/ng-update/v5/steps/templates/migrate-input-color.js.map +1 -0
  146. package/schematics/ng-update/v5/steps/templates/migrate-input-date-multi.d.ts +8 -0
  147. package/schematics/ng-update/v5/steps/templates/migrate-input-date-multi.js +178 -0
  148. package/schematics/ng-update/v5/steps/templates/migrate-input-date-multi.js.map +1 -0
  149. package/schematics/ng-update/v5/steps/templates/migrate-input-date-range.d.ts +8 -0
  150. package/schematics/ng-update/v5/steps/templates/migrate-input-date-range.js +103 -0
  151. package/schematics/ng-update/v5/steps/templates/migrate-input-date-range.js.map +1 -0
  152. package/schematics/ng-update/v5/steps/templates/migrate-input-date.d.ts +8 -0
  153. package/schematics/ng-update/v5/steps/templates/migrate-input-date.js +115 -0
  154. package/schematics/ng-update/v5/steps/templates/migrate-input-date.js.map +1 -0
  155. package/schematics/ng-update/v5/steps/templates/migrate-input-month.d.ts +8 -0
  156. package/schematics/ng-update/v5/steps/templates/migrate-input-month.js +93 -0
  157. package/schematics/ng-update/v5/steps/templates/migrate-input-month.js.map +1 -0
  158. package/schematics/ng-update/v5/steps/templates/migrate-input-password.d.ts +8 -0
  159. package/schematics/ng-update/v5/steps/templates/migrate-input-password.js +54 -0
  160. package/schematics/ng-update/v5/steps/templates/migrate-input-password.js.map +1 -0
  161. package/schematics/ng-update/v5/steps/templates/migrate-input-phone-international.d.ts +8 -0
  162. package/schematics/ng-update/v5/steps/templates/migrate-input-phone-international.js +84 -0
  163. package/schematics/ng-update/v5/steps/templates/migrate-input-phone-international.js.map +1 -0
  164. package/schematics/ng-update/v5/steps/templates/migrate-input-phone.d.ts +8 -0
  165. package/schematics/ng-update/v5/steps/templates/migrate-input-phone.js +90 -0
  166. package/schematics/ng-update/v5/steps/templates/migrate-input-phone.js.map +1 -0
  167. package/schematics/ng-update/v5/steps/templates/migrate-input-tag.d.ts +8 -0
  168. package/schematics/ng-update/v5/steps/templates/migrate-input-tag.js +145 -0
  169. package/schematics/ng-update/v5/steps/templates/migrate-input-tag.js.map +1 -0
  170. package/schematics/ng-update/v5/steps/templates/migrate-input-time.d.ts +8 -0
  171. package/schematics/ng-update/v5/steps/templates/migrate-input-time.js +114 -0
  172. package/schematics/ng-update/v5/steps/templates/migrate-input-time.js.map +1 -0
  173. package/schematics/ng-update/v5/steps/templates/migrate-input.d.ts +8 -0
  174. package/schematics/ng-update/v5/steps/templates/migrate-input.js +302 -0
  175. package/schematics/ng-update/v5/steps/templates/migrate-input.js.map +1 -0
  176. package/schematics/ng-update/v5/steps/templates/migrate-multi-select.d.ts +8 -0
  177. package/schematics/ng-update/v5/steps/templates/migrate-multi-select.js +250 -0
  178. package/schematics/ng-update/v5/steps/templates/migrate-multi-select.js.map +1 -0
  179. package/schematics/ng-update/v5/steps/templates/migrate-proprietary-textfield-icons.d.ts +8 -0
  180. package/schematics/ng-update/v5/steps/templates/migrate-proprietary-textfield-icons.js +39 -0
  181. package/schematics/ng-update/v5/steps/templates/migrate-proprietary-textfield-icons.js.map +1 -0
  182. package/schematics/ng-update/v5/steps/templates/migrate-repeat-times.js +67 -0
  183. package/schematics/ng-update/v5/steps/templates/migrate-repeat-times.js.map +1 -1
  184. package/schematics/ng-update/v5/steps/templates/migrate-select.d.ts +8 -0
  185. package/schematics/ng-update/v5/steps/templates/migrate-select.js +148 -0
  186. package/schematics/ng-update/v5/steps/templates/migrate-select.js.map +1 -0
  187. package/schematics/ng-update/v5/steps/templates/migrate-sidebar.d.ts +8 -0
  188. package/schematics/ng-update/v5/steps/templates/migrate-sidebar.js +107 -0
  189. package/schematics/ng-update/v5/steps/templates/migrate-sidebar.js.map +1 -0
  190. package/schematics/ng-update/v5/steps/templates/migrate-textarea.d.ts +8 -0
  191. package/schematics/ng-update/v5/steps/templates/migrate-textarea.js +301 -0
  192. package/schematics/ng-update/v5/steps/templates/migrate-textarea.js.map +1 -0
  193. package/schematics/utils/run-migration.d.ts +3 -0
  194. package/schematics/utils/run-migration.js +29 -2
  195. package/schematics/utils/run-migration.js.map +1 -1
  196. package/schematics/utils/templates/migrate-attr-value.d.ts +11 -0
  197. package/schematics/utils/templates/migrate-attr-value.js +30 -0
  198. package/schematics/utils/templates/migrate-attr-value.js.map +1 -0
  199. package/utils/miscellaneous/index.d.ts +1 -0
  200. package/utils/miscellaneous/is-flat.d.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-utils-dom.mjs","sources":["../../../projects/cdk/utils/dom/contains-or-after.ts","../../../projects/cdk/utils/dom/element-checks.ts","../../../projects/cdk/utils/dom/event-checks.ts","../../../projects/cdk/utils/dom/get-actual-target.ts","../../../projects/cdk/utils/dom/get-clipboard-data-text.ts","../../../projects/cdk/utils/dom/get-document-or-shadow-root.ts","../../../projects/cdk/utils/dom/get-element-obscurers.ts","../../../projects/cdk/utils/dom/get-element-offset.ts","../../../projects/cdk/utils/dom/get-selected-text.ts","../../../projects/cdk/utils/dom/inject-element.ts","../../../projects/cdk/utils/dom/is-element-editable.ts","../../../projects/cdk/utils/dom/point-to-client-rect.ts","../../../projects/cdk/utils/dom/value.ts","../../../projects/cdk/utils/dom/taiga-ui-cdk-utils-dom.ts"],"sourcesContent":["/* eslint-disable no-bitwise */\nexport function tuiContainsOrAfter(current: Node, node: Node): boolean {\n try {\n return (\n current.contains(node) ||\n !!(node.compareDocumentPosition(current) & Node.DOCUMENT_POSITION_PRECEDING)\n );\n } catch {\n return false;\n }\n}\n","export function tuiIsInput(element: Element): element is HTMLInputElement {\n return element.matches('input');\n}\n\nexport function tuiIsTextarea(element: Element): element is HTMLTextAreaElement {\n return element.matches('textarea');\n}\n\nexport function tuiIsTextfield(\n element: Element,\n): element is HTMLInputElement | HTMLTextAreaElement {\n return tuiIsInput(element) || tuiIsTextarea(element);\n}\n\nexport function tuiIsElement(\n node?: Element | EventTarget | Node | null,\n): node is Element {\n return !!node && 'nodeType' in node && node.nodeType === Node.ELEMENT_NODE;\n}\n\nexport function tuiIsHTMLElement(node: unknown): node is HTMLElement {\n const defaultView = (node as Element | undefined)?.ownerDocument.defaultView;\n\n return !!node && !!defaultView && node instanceof defaultView.HTMLElement;\n}\n\nexport function tuiIsTextNode(node: Node): node is Text {\n return node.nodeType === Node.TEXT_NODE;\n}\n","export function tuiIsInputEvent(event: Event): event is InputEvent {\n return 'data' in event && 'inputType' in event;\n}\n","/**\n * Gets actual target from open Shadow DOM if event happened within it\n */\nexport function tuiGetActualTarget(event: Event): Node {\n return event.composedPath()[0] as Node;\n}\n","const DEFAULT_FORMAT = 'text/plain';\n\n/**\n * Gets text from data of clipboardEvent, it also works in IE and Edge browsers\n */\nexport function tuiGetClipboardDataText(\n event: ClipboardEvent,\n format: string = DEFAULT_FORMAT,\n): string {\n return 'clipboardData' in event && event.clipboardData !== null\n ? event.clipboardData.getData(format) ||\n event.clipboardData.getData(DEFAULT_FORMAT)\n : (event as any).target.ownerDocument.defaultView.clipboardData.getData('text');\n}\n","export function tuiGetDocumentOrShadowRoot(node: Node): DocumentOrShadowRoot {\n return 'getRootNode' in node && node.isConnected\n ? (node.getRootNode() as Document)\n : (node.ownerDocument as DocumentOrShadowRoot);\n}\n","import {tuiIsPresent} from '@taiga-ui/cdk/utils/miscellaneous';\n\nimport {tuiGetDocumentOrShadowRoot} from './get-document-or-shadow-root';\n\n/**\n * Returns array of Elements covering edges of given element or null if at least one edge middle point is visible\n *\n * CAUTION: Empty array means element if offscreen i.e. covered by no elements, rather than not covered\n * ```ts\n * function tuiGetElementObscures(element: Element): readonly [Element, Element, Element, Element] | [] | null\n * ```\n */\nexport function tuiGetElementObscures(element: Element): readonly Element[] | null {\n if (!element.getBoundingClientRect) {\n return null;\n }\n\n const {left, right, top, bottom, width, height} = element.getBoundingClientRect();\n\n if (width === 0 && height === 0) {\n return null;\n }\n\n const doc = tuiGetDocumentOrShadowRoot(element);\n const horizontalMiddle = Math.round(left + width / 2);\n const verticalMiddle = Math.round(top + height / 2);\n const elements = [\n doc.elementFromPoint(horizontalMiddle, Math.round(top) + 2),\n doc.elementFromPoint(horizontalMiddle, Math.round(bottom) - 2),\n doc.elementFromPoint(Math.round(left) + 2, verticalMiddle),\n doc.elementFromPoint(Math.round(right) - 2, verticalMiddle),\n ].filter(tuiIsPresent);\n\n if (!elements.length) {\n return [];\n }\n\n const filtered = elements.filter(\n (el) => !element.contains(el) && !el.contains(element),\n );\n\n return filtered.length === 4\n ? (filtered as [Element, Element, Element, Element])\n : null;\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nimport {tuiIsHTMLElement} from './element-checks';\n\n/**\n * Calculates offset for an element relative to it's parent several levels above\n *\n * @param host parent element\n * @param element\n * @return object with offsetTop and offsetLeft number properties\n */\nexport function tuiGetElementOffset(\n host: Element,\n element: HTMLElement,\n): {offsetLeft: number; offsetTop: number} {\n ngDevMode && console.assert(host.contains(element), 'Host must contain element');\n\n let {offsetTop, offsetLeft, offsetParent} = element;\n\n while (tuiIsHTMLElement(offsetParent) && offsetParent !== host) {\n offsetTop += offsetParent.offsetTop;\n offsetLeft += offsetParent.offsetLeft;\n offsetParent = offsetParent.offsetParent;\n }\n\n return {offsetTop, offsetLeft};\n}\n","import {tuiIsTextfield} from './element-checks';\n\n/**\n * @description:\n * cross browser way to get selected text\n *\n * History:\n * BUG - window.getSelection() fails when text selected in a form field\n * https://bugzilla.mozilla.org/show_bug.cgi?id=85686\n */\nexport function tuiGetSelectedText({getSelection, document}: Window): string | null {\n return document.activeElement && tuiIsTextfield(document.activeElement)\n ? document.activeElement.value.slice(\n document.activeElement.selectionStart || 0,\n document.activeElement.selectionEnd || 0,\n )\n : getSelection()?.toString() || null;\n}\n","import {ElementRef, inject} from '@angular/core';\n\nexport function tuiInjectElement<T = HTMLElement>(): T {\n return inject(ElementRef).nativeElement;\n}\n","import {tuiIsTextfield} from './element-checks';\n\nexport function tuiIsElementEditable(element: HTMLElement): boolean {\n return (\n (tuiIsTextfield(element) && !element.readOnly && element.inputMode !== 'none') ||\n Boolean(element.isContentEditable as unknown as string)\n );\n}\n","export function tuiPointToClientRect(x = 0, y = 0): DOMRect {\n const rect = {\n x,\n y,\n left: x,\n right: x,\n top: y,\n bottom: y,\n width: 0,\n height: 0,\n } as const;\n\n return {\n ...rect,\n toJSON: () => rect,\n };\n}\n","import {coerceElement} from '@angular/cdk/coercion';\nimport {isPlatformBrowser} from '@angular/common';\nimport {\n DestroyRef,\n effect,\n type ElementRef,\n inject,\n INJECTOR,\n isSignal,\n PLATFORM_ID,\n type Signal,\n signal,\n untracked,\n type WritableSignal,\n} from '@angular/core';\nimport {WA_WINDOW} from '@ng-web-apis/common';\n\ntype WithValue = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\nexport function tuiValue(\n input:\n | ElementRef<WithValue>\n | Signal<ElementRef<WithValue> | undefined>\n | Signal<WithValue | undefined>\n | WithValue,\n injector = inject(INJECTOR),\n): WritableSignal<string> {\n const win = injector.get<any>(WA_WINDOW);\n\n if (!win.tuiInputPatched && isPlatformBrowser(injector.get(PLATFORM_ID))) {\n win.tuiInputPatched = true;\n\n patch(win.HTMLInputElement.prototype);\n patch(win.HTMLTextAreaElement.prototype);\n patch(win.HTMLSelectElement.prototype);\n }\n\n let element = isSignal(input) ? undefined : coerceElement(input);\n let cleanup = (): void => {};\n\n const options = {injector};\n const value = signal(element?.value || '');\n const process = (el: WithValue): (() => void) => {\n const update = (): void => untracked(() => value.set(el.value));\n\n el.addEventListener('input', update, {capture: true});\n el.addEventListener('tui-input', update, {capture: true});\n\n return (): void => {\n el.removeEventListener('input', update, {capture: true});\n el.removeEventListener('tui-input', update, {capture: true});\n };\n };\n\n injector.get(DestroyRef).onDestroy(() => cleanup());\n\n if (isSignal(input)) {\n effect(() => {\n element = coerceElement(input());\n cleanup();\n\n if (element && !element.matches('select[multiple]')) {\n value.set(element.value);\n cleanup = process(element);\n }\n }, options);\n } else if (element && !element.matches('select[multiple]')) {\n cleanup = process(element);\n }\n\n effect(() => {\n const v = value();\n\n /**\n * select[multiple] elements have value of first selected option,\n * but there could be more, setting value resets other selected options\n */\n if (element?.matches('select[multiple]')) {\n return;\n }\n\n if (element?.matches(':focus') && 'selectionStart' in element) {\n const {selectionStart, selectionEnd} = element;\n\n /**\n * After programmatic updates of input's value, caret is automatically placed at the end –\n * revert to the previous position\n */\n element.value = v;\n element.setSelectionRange(selectionStart, selectionEnd);\n } else if (element) {\n element.value = v;\n }\n }, options);\n\n return value;\n}\n\nfunction patch(prototype: WithValue): void {\n const {set} = Object.getOwnPropertyDescriptor(prototype, 'value')!;\n\n Object.defineProperty(prototype, 'value', {\n set(this: WithValue, detail: string) {\n const value = this.value;\n const event = new CustomEvent('tui-input', {detail, bubbles: true});\n\n set!.call(this, detail);\n\n if (value !== detail) {\n this.dispatchEvent(event);\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
+ {"version":3,"file":"taiga-ui-cdk-utils-dom.mjs","sources":["../../../projects/cdk/utils/dom/contains-or-after.ts","../../../projects/cdk/utils/dom/element-checks.ts","../../../projects/cdk/utils/dom/event-checks.ts","../../../projects/cdk/utils/dom/get-actual-target.ts","../../../projects/cdk/utils/dom/get-clipboard-data-text.ts","../../../projects/cdk/utils/dom/get-document-or-shadow-root.ts","../../../projects/cdk/utils/dom/get-element-obscurers.ts","../../../projects/cdk/utils/dom/get-element-offset.ts","../../../projects/cdk/utils/dom/get-selected-text.ts","../../../projects/cdk/utils/dom/inject-element.ts","../../../projects/cdk/utils/dom/is-element-editable.ts","../../../projects/cdk/utils/dom/point-to-client-rect.ts","../../../projects/cdk/utils/dom/value.ts","../../../projects/cdk/utils/dom/taiga-ui-cdk-utils-dom.ts"],"sourcesContent":["/* eslint-disable no-bitwise */\nexport function tuiContainsOrAfter(current: Node, node: Node): boolean {\n try {\n return (\n current.contains(node) ||\n !!(node.compareDocumentPosition(current) & Node.DOCUMENT_POSITION_PRECEDING)\n );\n } catch {\n return false;\n }\n}\n","export function tuiIsInput(element: Element): element is HTMLInputElement {\n return element.matches('input');\n}\n\nexport function tuiIsTextarea(element: Element): element is HTMLTextAreaElement {\n return element.matches('textarea');\n}\n\nexport function tuiIsTextfield(\n element: Element,\n): element is HTMLInputElement | HTMLTextAreaElement {\n return tuiIsInput(element) || tuiIsTextarea(element);\n}\n\nexport function tuiIsElement(\n node?: Element | EventTarget | Node | null,\n): node is Element {\n return !!node && 'nodeType' in node && node.nodeType === Node.ELEMENT_NODE;\n}\n\nexport function tuiIsHTMLElement(node: unknown): node is HTMLElement {\n const defaultView = (node as Element | undefined)?.ownerDocument.defaultView;\n\n return !!node && !!defaultView && node instanceof defaultView.HTMLElement;\n}\n\nexport function tuiIsTextNode(node: Node): node is Text {\n return node.nodeType === Node.TEXT_NODE;\n}\n","export function tuiIsInputEvent(event: Event): event is InputEvent {\n return 'data' in event && 'inputType' in event;\n}\n","/**\n * Gets actual target from open Shadow DOM if event happened within it\n */\nexport function tuiGetActualTarget(event: Event): Node {\n return event.composedPath()[0] as Node;\n}\n","const DEFAULT_FORMAT = 'text/plain';\n\n/**\n * Gets text from data of clipboardEvent, it also works in IE and Edge browsers\n */\nexport function tuiGetClipboardDataText(\n event: ClipboardEvent,\n format: string = DEFAULT_FORMAT,\n): string {\n return 'clipboardData' in event && event.clipboardData !== null\n ? event.clipboardData.getData(format) ||\n event.clipboardData.getData(DEFAULT_FORMAT)\n : (event as any).target.ownerDocument.defaultView.clipboardData.getData('text');\n}\n","export function tuiGetDocumentOrShadowRoot(node: Node): DocumentOrShadowRoot {\n return 'getRootNode' in node && node.isConnected\n ? (node.getRootNode() as Document)\n : (node.ownerDocument as DocumentOrShadowRoot);\n}\n","import {tuiIsPresent} from '@taiga-ui/cdk/utils/miscellaneous';\n\nimport {tuiGetDocumentOrShadowRoot} from './get-document-or-shadow-root';\n\n/**\n * Returns array of Elements covering edges of given element or null if at least one edge middle point is visible\n *\n * CAUTION: Empty array means element if offscreen i.e. covered by no elements, rather than not covered\n * ```ts\n * function tuiGetElementObscures(element: Element): readonly [Element, Element, Element, Element] | [] | null\n * ```\n */\nexport function tuiGetElementObscures(element: Element): readonly Element[] | null {\n if (!element.getBoundingClientRect) {\n return null;\n }\n\n const {left, right, top, bottom, width, height} = element.getBoundingClientRect();\n\n if (width === 0 && height === 0) {\n return null;\n }\n\n const doc = tuiGetDocumentOrShadowRoot(element);\n const horizontalMiddle = Math.round(left + width / 2);\n const verticalMiddle = Math.round(top + height / 2);\n const elements = [\n doc.elementFromPoint(horizontalMiddle, Math.round(top) + 2),\n doc.elementFromPoint(horizontalMiddle, Math.round(bottom) - 2),\n doc.elementFromPoint(Math.round(left) + 2, verticalMiddle),\n doc.elementFromPoint(Math.round(right) - 2, verticalMiddle),\n ].filter(tuiIsPresent);\n\n if (!elements.length) {\n return [];\n }\n\n const filtered = elements.filter(\n (el) => !element.contains(el) && !el.contains(element),\n );\n\n return filtered.length === 4\n ? (filtered as [Element, Element, Element, Element])\n : null;\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nimport {tuiIsHTMLElement} from './element-checks';\n\n/**\n * Calculates offset for an element relative to it's parent several levels above\n *\n * @param host parent element\n * @param element\n * @return object with offsetTop and offsetLeft number properties\n */\nexport function tuiGetElementOffset(\n host: Element,\n element: HTMLElement,\n): {offsetLeft: number; offsetTop: number} {\n ngDevMode && console.assert(host.contains(element), 'Host must contain element');\n\n let {offsetTop, offsetLeft, offsetParent} = element;\n\n while (tuiIsHTMLElement(offsetParent) && offsetParent !== host) {\n offsetTop += offsetParent.offsetTop;\n offsetLeft += offsetParent.offsetLeft;\n offsetParent = offsetParent.offsetParent;\n }\n\n return {offsetTop, offsetLeft};\n}\n","import {tuiIsTextfield} from './element-checks';\n\n/**\n * @description:\n * cross browser way to get selected text\n *\n * History:\n * BUG - window.getSelection() fails when text selected in a form field\n * https://bugzilla.mozilla.org/show_bug.cgi?id=85686\n */\nexport function tuiGetSelectedText({getSelection, document}: Window): string | null {\n return document.activeElement && tuiIsTextfield(document.activeElement)\n ? document.activeElement.value.slice(\n document.activeElement.selectionStart || 0,\n document.activeElement.selectionEnd || 0,\n )\n : getSelection()?.toString() || null;\n}\n","import {ElementRef, inject} from '@angular/core';\n\nexport function tuiInjectElement<T = HTMLElement>(): T {\n return inject(ElementRef).nativeElement;\n}\n","import {tuiIsTextfield} from './element-checks';\n\nexport function tuiIsElementEditable(element: HTMLElement): boolean {\n return (\n (tuiIsTextfield(element) && !element.readOnly && element.inputMode !== 'none') ||\n Boolean(element.isContentEditable as unknown as string)\n );\n}\n","export function tuiPointToClientRect(x = 0, y = 0): DOMRect {\n const rect = {\n x,\n y,\n left: x,\n right: x,\n top: y,\n bottom: y,\n width: 0,\n height: 0,\n } as const;\n\n return {\n ...rect,\n toJSON: () => rect,\n };\n}\n","import {coerceElement} from '@angular/cdk/coercion';\nimport {isPlatformBrowser} from '@angular/common';\nimport {\n DestroyRef,\n effect,\n type ElementRef,\n inject,\n INJECTOR,\n isSignal,\n PLATFORM_ID,\n type Signal,\n signal,\n untracked,\n type WritableSignal,\n} from '@angular/core';\nimport {WA_WINDOW} from '@ng-web-apis/common';\n\ntype WithValue = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\nexport function tuiValue(\n input:\n | ElementRef<WithValue>\n | Signal<ElementRef<WithValue> | undefined>\n | Signal<WithValue | undefined>\n | WithValue,\n injector = inject(INJECTOR),\n): WritableSignal<string> {\n const win = injector.get<any>(WA_WINDOW);\n\n if (!win.tuiInputPatched && isPlatformBrowser(injector.get(PLATFORM_ID))) {\n win.tuiInputPatched = true;\n\n patch(win.HTMLInputElement.prototype);\n patch(win.HTMLTextAreaElement.prototype);\n patch(win.HTMLSelectElement.prototype);\n }\n\n let element = isSignal(input) ? undefined : coerceElement(input);\n let cleanup = (): void => {};\n\n const options = {injector};\n const value = signal(element?.value || '');\n const process = (el: WithValue): (() => void) => {\n const update = (): void => untracked(() => value.set(el.value));\n\n el.addEventListener('input', update, {capture: true});\n el.addEventListener('tui-input', update, {capture: true});\n\n return (): void => {\n el.removeEventListener('input', update, {capture: true});\n el.removeEventListener('tui-input', update, {capture: true});\n };\n };\n\n injector.get(DestroyRef).onDestroy(() => cleanup());\n\n if (isSignal(input)) {\n effect(() => {\n element = coerceElement(input());\n cleanup();\n\n if (element && !element.matches('select[multiple]')) {\n value.set(element.value);\n cleanup = process(element);\n }\n }, options);\n } else if (element && !element.matches('select[multiple]')) {\n cleanup = process(element);\n }\n\n effect(() => {\n const v = value();\n\n /**\n * select[multiple] elements have value of first selected option,\n * but there could be more, setting value resets other selected options\n */\n if (element?.matches('select[multiple]')) {\n return;\n }\n\n if (element?.matches(':focus') && 'selectionStart' in element) {\n const {selectionStart, selectionEnd} = element;\n\n /**\n * After programmatic updates of input's value, caret is automatically placed at the end –\n * revert to the previous position\n */\n element.value = v;\n element.setSelectionRange(selectionStart, selectionEnd);\n } else if (element) {\n element.value = v;\n }\n }, options);\n\n return value;\n}\n\nfunction patch(prototype: WithValue): void {\n const {set} = Object.getOwnPropertyDescriptor(prototype, 'value')!;\n\n Object.defineProperty(prototype, 'value', {\n set(this: WithValue, detail: string) {\n const value = this.value;\n const event = new CustomEvent('tui-input', {detail, bubbles: true});\n\n set!.call(this, detail);\n\n if (value !== detail) {\n this.dispatchEvent(event);\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 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-utils-focus.mjs","sources":["../../../projects/cdk/utils/focus/focused-in.ts","../../../projects/cdk/utils/focus/is-focusable.ts","../../../projects/cdk/utils/focus/get-closest-focusable.ts","../../../projects/cdk/utils/focus/get-focused.ts","../../../projects/cdk/utils/focus/is-focused.ts","../../../projects/cdk/utils/focus/is-focused-in.ts","../../../projects/cdk/utils/focus/move-focus.ts","../../../projects/cdk/utils/focus/taiga-ui-cdk-utils-focus.ts"],"sourcesContent":["import {type Signal} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {TUI_FALSE_HANDLER, TUI_TRUE_HANDLER} from '@taiga-ui/cdk/constants';\nimport {tuiUntrackedScheduler} from '@taiga-ui/cdk/observables';\nimport {fromEvent, map, merge, observeOn} from 'rxjs';\n\nexport function tuiFocusedIn(node: Node): Signal<boolean> {\n return toSignal(\n merge(\n fromEvent(node, 'focus', {capture: true}).pipe(map(TUI_TRUE_HANDLER)),\n fromEvent(node, 'blur', {capture: true}).pipe(map(TUI_FALSE_HANDLER)),\n ).pipe(observeOn(tuiUntrackedScheduler)),\n {initialValue: false},\n );\n}\n","import {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\n/**\n * Checks for signs that element can be focused with keyboard. tabIndex above 0 is ignored to\n * only target natural focus order. Not checking the possibility of an element to\n * be focused, for example element can have display: none applied to it or any other\n * circumstances could prevent actual focus.\n */\nexport function tuiIsFocusable(element: Element): boolean {\n if (element.matches(':disabled') || element.getAttribute('tabIndex') === '-1') {\n return false;\n }\n\n if (\n (tuiIsHTMLElement(element) && element.isContentEditable) ||\n element.getAttribute('tabIndex') === '0'\n ) {\n return true;\n }\n\n switch (element.tagName) {\n case 'A':\n case 'LINK':\n return element.hasAttribute('href');\n case 'AUDIO':\n case 'VIDEO':\n return element.hasAttribute('controls');\n case 'BUTTON':\n case 'SELECT':\n case 'TEXTAREA':\n return true;\n case 'INPUT':\n return element.getAttribute('type') !== 'hidden';\n default:\n return false;\n }\n}\n","import {svgNodeFilter} from '@taiga-ui/cdk/constants';\nimport {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {tuiIsFocusable} from './is-focusable';\n\nexport interface TuiGetClosestFocusableOptions {\n /**\n * @description:\n * current HTML element\n */\n initial: Element;\n\n /**\n * @description:\n * should it look backwards instead (find item that will be focused with Shift + Tab)\n */\n previous?: boolean;\n\n /**\n * @description:\n * top Node limiting the search area\n */\n root: Node;\n}\n\n/**\n * @description:\n * Finds the closest element that can be focused with a keyboard or mouse in theory\n */\nexport function tuiGetClosestFocusable({\n initial,\n root,\n previous = false,\n}: TuiGetClosestFocusableOptions): HTMLElement | null {\n if (!root.ownerDocument) {\n return null;\n }\n\n const treeWalker = root.ownerDocument.createTreeWalker(\n root,\n NodeFilter.SHOW_ELEMENT,\n svgNodeFilter,\n );\n\n treeWalker.currentNode = initial;\n\n do {\n if (tuiIsHTMLElement(treeWalker.currentNode)) {\n initial = treeWalker.currentNode;\n }\n\n if (tuiIsHTMLElement(initial) && tuiIsFocusable(initial)) {\n return initial;\n }\n } while (previous ? treeWalker.previousNode() : treeWalker.nextNode());\n\n return null;\n}\n","/**\n * Returns current active element, including shadow dom\n *\n * @return element or null\n */\nexport function tuiGetFocused({activeElement}: Document): Element | null {\n if (!activeElement?.shadowRoot) {\n return activeElement;\n }\n\n let element = activeElement.shadowRoot.activeElement;\n\n while (element?.shadowRoot) {\n element = element.shadowRoot.activeElement;\n }\n\n return element;\n}\n","import {tuiGetFocused} from './get-focused';\n\n/**\n * Checks if element is focused.\n *\n * Could return true even after blur since element remains focused if you switch away from a browser tab.\n *\n * @param node or null (as a common return value of DOM nodes walking)\n * @return true if focused\n */\nexport function tuiIsFocused(node?: Node | null): boolean {\n return (\n !!node?.ownerDocument &&\n tuiGetFocused(node.ownerDocument) === node &&\n node.ownerDocument.hasFocus()\n );\n}\n","import {tuiGetFocused} from './get-focused';\n\n/**\n * Checks if focused element is within given element.\n *\n * @param node\n * @return true if focused node is contained within element\n */\nexport function tuiIsFocusedIn(node?: Node | null): boolean {\n const focused = node?.ownerDocument && tuiGetFocused(node.ownerDocument);\n\n return !!focused && node.contains(focused) && node.ownerDocument?.hasFocus();\n}\n","import {tuiIsFocused} from './is-focused';\n\n/**\n * Utility method for moving focus in a list of elements\n *\n * @param currentIndex currently focused index\n * @param elements array of focusable elements\n * @param step a step to move focus by, typically -1 or 1\n */\nexport function tuiMoveFocus(\n currentIndex: number,\n elements: readonly HTMLElement[],\n step: number,\n): void {\n currentIndex += step;\n\n while (currentIndex >= 0 && currentIndex < elements.length) {\n elements[currentIndex]?.focus();\n\n if (tuiIsFocused(elements[currentIndex])) {\n return;\n }\n\n currentIndex += step;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-cdk-utils-focus.mjs","sources":["../../../projects/cdk/utils/focus/focused-in.ts","../../../projects/cdk/utils/focus/is-focusable.ts","../../../projects/cdk/utils/focus/get-closest-focusable.ts","../../../projects/cdk/utils/focus/get-focused.ts","../../../projects/cdk/utils/focus/is-focused.ts","../../../projects/cdk/utils/focus/is-focused-in.ts","../../../projects/cdk/utils/focus/move-focus.ts","../../../projects/cdk/utils/focus/taiga-ui-cdk-utils-focus.ts"],"sourcesContent":["import {type Signal} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {TUI_FALSE_HANDLER, TUI_TRUE_HANDLER} from '@taiga-ui/cdk/constants';\nimport {tuiUntrackedScheduler} from '@taiga-ui/cdk/observables';\nimport {fromEvent, map, merge, observeOn} from 'rxjs';\n\nexport function tuiFocusedIn(node: Node): Signal<boolean> {\n return toSignal(\n merge(\n fromEvent(node, 'focus', {capture: true}).pipe(map(TUI_TRUE_HANDLER)),\n fromEvent(node, 'blur', {capture: true}).pipe(map(TUI_FALSE_HANDLER)),\n ).pipe(observeOn(tuiUntrackedScheduler)),\n {initialValue: false},\n );\n}\n","import {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\n/**\n * Checks for signs that element can be focused with keyboard. tabIndex above 0 is ignored to\n * only target natural focus order. Not checking the possibility of an element to\n * be focused, for example element can have display: none applied to it or any other\n * circumstances could prevent actual focus.\n */\nexport function tuiIsFocusable(element: Element): boolean {\n if (element.matches(':disabled') || element.getAttribute('tabIndex') === '-1') {\n return false;\n }\n\n if (\n (tuiIsHTMLElement(element) && element.isContentEditable) ||\n element.getAttribute('tabIndex') === '0'\n ) {\n return true;\n }\n\n switch (element.tagName) {\n case 'A':\n case 'LINK':\n return element.hasAttribute('href');\n case 'AUDIO':\n case 'VIDEO':\n return element.hasAttribute('controls');\n case 'BUTTON':\n case 'SELECT':\n case 'TEXTAREA':\n return true;\n case 'INPUT':\n return element.getAttribute('type') !== 'hidden';\n default:\n return false;\n }\n}\n","import {svgNodeFilter} from '@taiga-ui/cdk/constants';\nimport {tuiIsHTMLElement} from '@taiga-ui/cdk/utils/dom';\n\nimport {tuiIsFocusable} from './is-focusable';\n\nexport interface TuiGetClosestFocusableOptions {\n /**\n * @description:\n * current HTML element\n */\n initial: Element;\n\n /**\n * @description:\n * should it look backwards instead (find item that will be focused with Shift + Tab)\n */\n previous?: boolean;\n\n /**\n * @description:\n * top Node limiting the search area\n */\n root: Node;\n}\n\n/**\n * @description:\n * Finds the closest element that can be focused with a keyboard or mouse in theory\n */\nexport function tuiGetClosestFocusable({\n initial,\n root,\n previous = false,\n}: TuiGetClosestFocusableOptions): HTMLElement | null {\n if (!root.ownerDocument) {\n return null;\n }\n\n const treeWalker = root.ownerDocument.createTreeWalker(\n root,\n NodeFilter.SHOW_ELEMENT,\n svgNodeFilter,\n );\n\n treeWalker.currentNode = initial;\n\n do {\n if (tuiIsHTMLElement(treeWalker.currentNode)) {\n initial = treeWalker.currentNode;\n }\n\n if (tuiIsHTMLElement(initial) && tuiIsFocusable(initial)) {\n return initial;\n }\n } while (previous ? treeWalker.previousNode() : treeWalker.nextNode());\n\n return null;\n}\n","/**\n * Returns current active element, including shadow dom\n *\n * @return element or null\n */\nexport function tuiGetFocused({activeElement}: Document): Element | null {\n if (!activeElement?.shadowRoot) {\n return activeElement;\n }\n\n let element = activeElement.shadowRoot.activeElement;\n\n while (element?.shadowRoot) {\n element = element.shadowRoot.activeElement;\n }\n\n return element;\n}\n","import {tuiGetFocused} from './get-focused';\n\n/**\n * Checks if element is focused.\n *\n * Could return true even after blur since element remains focused if you switch away from a browser tab.\n *\n * @param node or null (as a common return value of DOM nodes walking)\n * @return true if focused\n */\nexport function tuiIsFocused(node?: Node | null): boolean {\n return (\n !!node?.ownerDocument &&\n tuiGetFocused(node.ownerDocument) === node &&\n node.ownerDocument.hasFocus()\n );\n}\n","import {tuiGetFocused} from './get-focused';\n\n/**\n * Checks if focused element is within given element.\n *\n * @param node\n * @return true if focused node is contained within element\n */\nexport function tuiIsFocusedIn(node?: Node | null): boolean {\n const focused = node?.ownerDocument && tuiGetFocused(node.ownerDocument);\n\n return !!focused && node.contains(focused) && node.ownerDocument?.hasFocus();\n}\n","import {tuiIsFocused} from './is-focused';\n\n/**\n * Utility method for moving focus in a list of elements\n *\n * @param currentIndex currently focused index\n * @param elements array of focusable elements\n * @param step a step to move focus by, typically -1 or 1\n */\nexport function tuiMoveFocus(\n currentIndex: number,\n elements: readonly HTMLElement[],\n step: number,\n): void {\n currentIndex += step;\n\n while (currentIndex >= 0 && currentIndex < elements.length) {\n elements[currentIndex]?.focus();\n\n if (tuiIsFocused(elements[currentIndex])) {\n return;\n }\n\n currentIndex += step;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-utils-math.mjs","sources":["../../../projects/cdk/utils/math/clamp.ts","../../../projects/cdk/utils/math/in-range.ts","../../../projects/cdk/utils/math/normalize-to-int-number.ts","../../../projects/cdk/utils/math/quantize.ts","../../../projects/cdk/utils/math/round.ts","../../../projects/cdk/utils/math/round-with.ts","../../../projects/cdk/utils/math/sum.ts","../../../projects/cdk/utils/math/to-int.ts","../../../projects/cdk/utils/math/taiga-ui-cdk-utils-math.ts"],"sourcesContent":["/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\n/**\n * Clamps a value between two inclusive limits\n */\nexport function tuiClamp<T extends bigint | number>(\n value: T,\n minimum: T | null,\n maximum?: T | null,\n): T {\n ngDevMode && console.assert(!Number.isNaN(value));\n ngDevMode && console.assert(!Number.isNaN(minimum));\n ngDevMode && console.assert(!Number.isNaN(maximum));\n ngDevMode && maximum && minimum && console.assert(maximum >= minimum);\n\n const minClamped = max(minimum ?? value, value);\n\n return min(maximum ?? minClamped, minClamped);\n}\n\nfunction min<T extends bigint | number>(x: T, ...values: T[]): T {\n return values.reduce((a, b) => (a < b ? a : b), x);\n}\n\nfunction max<T extends bigint | number>(x: T, ...values: T[]): T {\n return values.reduce((a, b) => (a > b ? a : b), x);\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nexport function tuiInRange(\n value: number,\n fromInclude: number,\n toExclude: number,\n): boolean {\n ngDevMode && console.assert(!Number.isNaN(value));\n ngDevMode && console.assert(!Number.isNaN(fromInclude));\n ngDevMode && console.assert(!Number.isNaN(toExclude));\n ngDevMode && console.assert(fromInclude < toExclude);\n\n return value >= fromInclude && value < toExclude;\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\n/**\n * Normalizes any number to an integer within inclusive range\n *\n * @param value\n * @param min lower inclusive integer\n * @param max upper inclusive integer\n * @return an integer between min and max inclusive\n */\nexport function tuiNormalizeToIntNumber(value: number, min: number, max: number): number {\n ngDevMode && console.assert(Number.isInteger(min));\n ngDevMode && console.assert(Number.isInteger(max));\n ngDevMode && console.assert(min <= max);\n\n if (Number.isNaN(value) || value <= min) {\n return min;\n }\n\n if (value >= max) {\n return max;\n }\n\n return Math.round(value);\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\n/**\n * Rounds a number to the closest value in a fixed discrete series\n *\n * @param value\n * @param quantum series step\n */\nexport function tuiQuantize(value: number, quantum: number): number {\n ngDevMode && console.assert(Number.isFinite(value));\n ngDevMode && console.assert(Number.isFinite(quantum));\n ngDevMode && console.assert(quantum > 0);\n\n const remainder = value % quantum;\n\n return remainder < quantum / 2 ? value - remainder : value + quantum - remainder;\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nconst MAX_PRECISION = 292;\n\n/**\n * Rounding number to the set precision\n *\n * @param value\n * @param precision number of digits in a float part\n * @param func rounding function (round, floor, ceil)\n */\nfunction calculate(\n value: number,\n precision: number,\n func: (x: number) => number,\n): number {\n if (value === Infinity) {\n return value;\n }\n\n ngDevMode && console.assert(!Number.isNaN(value), 'Value must be number');\n ngDevMode && console.assert(Number.isInteger(precision), 'Precision must be integer');\n\n precision = Math.min(precision, MAX_PRECISION);\n\n const [significand, exponent = ''] = `${value}`.split('e');\n const roundedInt = func(Number(`${significand}e${Number(exponent) + precision}`));\n\n /**\n * TODO: use BigInt after bumping Safari to 14+\n */\n ngDevMode &&\n console.assert(\n Number.isSafeInteger(roundedInt),\n 'Impossible to correctly round such a large number',\n );\n\n const processedPair = `${roundedInt}e`.split('e');\n\n return Number(`${processedPair[0]}e${Number(processedPair[1]) - precision}`);\n}\n\nexport function tuiRound(value: number, precision = 0): number {\n return calculate(value, precision, Math.round);\n}\n\nexport function tuiCeil(value: number, precision = 0): number {\n return calculate(value, precision, Math.ceil);\n}\n\nexport function tuiFloor(value: number, precision = 0): number {\n return calculate(value, precision, Math.floor);\n}\n\nexport function tuiTrunc(value: number, precision = 0): number {\n return calculate(value, precision, Math.trunc);\n}\n\nexport function tuiIsSafeToRound(value: number, precision = 0): boolean {\n return Number.isSafeInteger(Math.trunc(value * 10 ** precision));\n}\n","import {type TuiRounding} from '@taiga-ui/cdk/types';\n\nimport {tuiCeil, tuiFloor, tuiRound, tuiTrunc} from './round';\n\nexport function tuiRoundWith({\n value,\n precision,\n method,\n}: {\n method: TuiRounding;\n precision: number;\n value: number;\n}): number {\n switch (method) {\n case 'ceil':\n return tuiCeil(value, precision);\n case 'floor':\n return tuiFloor(value, precision);\n case 'round':\n return tuiRound(value, precision);\n default:\n return tuiTrunc(value, precision);\n }\n}\n","/**\n * Calculates sum of any number of passed arguments with proper floating point precision\n */\nexport function tuiSum(...args: number[]): number {\n const decimal = args.map((double) => (double.toString().split('.')[1] ?? '').length);\n const maxDecimal = Math.max(0, ...decimal);\n const precision = 10 ** maxDecimal;\n const sumInt = args.reduce((acc, n) => acc + Math.round(n * precision), 0);\n\n return sumInt / precision;\n}\n","export function tuiToInt(bool: boolean): 0 | 1 {\n return bool ? 1 : 0;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-cdk-utils-math.mjs","sources":["../../../projects/cdk/utils/math/clamp.ts","../../../projects/cdk/utils/math/in-range.ts","../../../projects/cdk/utils/math/normalize-to-int-number.ts","../../../projects/cdk/utils/math/quantize.ts","../../../projects/cdk/utils/math/round.ts","../../../projects/cdk/utils/math/round-with.ts","../../../projects/cdk/utils/math/sum.ts","../../../projects/cdk/utils/math/to-int.ts","../../../projects/cdk/utils/math/taiga-ui-cdk-utils-math.ts"],"sourcesContent":["/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\n/**\n * Clamps a value between two inclusive limits\n */\nexport function tuiClamp<T extends bigint | number>(\n value: T,\n minimum: T | null,\n maximum?: T | null,\n): T {\n ngDevMode && console.assert(!Number.isNaN(value));\n ngDevMode && console.assert(!Number.isNaN(minimum));\n ngDevMode && console.assert(!Number.isNaN(maximum));\n ngDevMode && maximum && minimum && console.assert(maximum >= minimum);\n\n const minClamped = max(minimum ?? value, value);\n\n return min(maximum ?? minClamped, minClamped);\n}\n\nfunction min<T extends bigint | number>(x: T, ...values: T[]): T {\n return values.reduce((a, b) => (a < b ? a : b), x);\n}\n\nfunction max<T extends bigint | number>(x: T, ...values: T[]): T {\n return values.reduce((a, b) => (a > b ? a : b), x);\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nexport function tuiInRange(\n value: number,\n fromInclude: number,\n toExclude: number,\n): boolean {\n ngDevMode && console.assert(!Number.isNaN(value));\n ngDevMode && console.assert(!Number.isNaN(fromInclude));\n ngDevMode && console.assert(!Number.isNaN(toExclude));\n ngDevMode && console.assert(fromInclude < toExclude);\n\n return value >= fromInclude && value < toExclude;\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\n/**\n * Normalizes any number to an integer within inclusive range\n *\n * @param value\n * @param min lower inclusive integer\n * @param max upper inclusive integer\n * @return an integer between min and max inclusive\n */\nexport function tuiNormalizeToIntNumber(value: number, min: number, max: number): number {\n ngDevMode && console.assert(Number.isInteger(min));\n ngDevMode && console.assert(Number.isInteger(max));\n ngDevMode && console.assert(min <= max);\n\n if (Number.isNaN(value) || value <= min) {\n return min;\n }\n\n if (value >= max) {\n return max;\n }\n\n return Math.round(value);\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\n/**\n * Rounds a number to the closest value in a fixed discrete series\n *\n * @param value\n * @param quantum series step\n */\nexport function tuiQuantize(value: number, quantum: number): number {\n ngDevMode && console.assert(Number.isFinite(value));\n ngDevMode && console.assert(Number.isFinite(quantum));\n ngDevMode && console.assert(quantum > 0);\n\n const remainder = value % quantum;\n\n return remainder < quantum / 2 ? value - remainder : value + quantum - remainder;\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nconst MAX_PRECISION = 292;\n\n/**\n * Rounding number to the set precision\n *\n * @param value\n * @param precision number of digits in a float part\n * @param func rounding function (round, floor, ceil)\n */\nfunction calculate(\n value: number,\n precision: number,\n func: (x: number) => number,\n): number {\n if (value === Infinity) {\n return value;\n }\n\n ngDevMode && console.assert(!Number.isNaN(value), 'Value must be number');\n ngDevMode && console.assert(Number.isInteger(precision), 'Precision must be integer');\n\n precision = Math.min(precision, MAX_PRECISION);\n\n const [significand, exponent = ''] = `${value}`.split('e');\n const roundedInt = func(Number(`${significand}e${Number(exponent) + precision}`));\n\n /**\n * TODO: use BigInt after bumping Safari to 14+\n */\n ngDevMode &&\n console.assert(\n Number.isSafeInteger(roundedInt),\n 'Impossible to correctly round such a large number',\n );\n\n const processedPair = `${roundedInt}e`.split('e');\n\n return Number(`${processedPair[0]}e${Number(processedPair[1]) - precision}`);\n}\n\nexport function tuiRound(value: number, precision = 0): number {\n return calculate(value, precision, Math.round);\n}\n\nexport function tuiCeil(value: number, precision = 0): number {\n return calculate(value, precision, Math.ceil);\n}\n\nexport function tuiFloor(value: number, precision = 0): number {\n return calculate(value, precision, Math.floor);\n}\n\nexport function tuiTrunc(value: number, precision = 0): number {\n return calculate(value, precision, Math.trunc);\n}\n\nexport function tuiIsSafeToRound(value: number, precision = 0): boolean {\n return Number.isSafeInteger(Math.trunc(value * 10 ** precision));\n}\n","import {type TuiRounding} from '@taiga-ui/cdk/types';\n\nimport {tuiCeil, tuiFloor, tuiRound, tuiTrunc} from './round';\n\nexport function tuiRoundWith({\n value,\n precision,\n method,\n}: {\n method: TuiRounding;\n precision: number;\n value: number;\n}): number {\n switch (method) {\n case 'ceil':\n return tuiCeil(value, precision);\n case 'floor':\n return tuiFloor(value, precision);\n case 'round':\n return tuiRound(value, precision);\n default:\n return tuiTrunc(value, precision);\n }\n}\n","/**\n * Calculates sum of any number of passed arguments with proper floating point precision\n */\nexport function tuiSum(...args: number[]): number {\n const decimal = args.map((double) => (double.toString().split('.')[1] ?? '').length);\n const maxDecimal = Math.max(0, ...decimal);\n const precision = 10 ** maxDecimal;\n const sumInt = args.reduce((acc, n) => acc + Math.round(n * precision), 0);\n\n return sumInt / precision;\n}\n","export function tuiToInt(bool: boolean): 0 | 1 {\n return bool ? 1 : 0;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -62,6 +62,10 @@ function tuiGenerateId() {
62
62
  return `tui_${autoId++}${Date.now().toString(36)}`;
63
63
  }
64
64
 
65
+ function tuiIsFlat(items) {
66
+ return !Array.isArray(items[0]);
67
+ }
68
+
65
69
  function tuiIsNumber(value) {
66
70
  return typeof value === 'number';
67
71
  }
@@ -233,5 +237,5 @@ function tuiWithStyles(component) {
233
237
  * Generated bundle index. Do not edit.
234
238
  */
235
239
 
236
- export { tuiArrayRemove, tuiArrayShallowEquals, tuiArrayToggle, tuiCountFilledControls, tuiDefaultSort, tuiDistanceBetweenTouches, tuiEaseInOutQuad, tuiGenerateId, tuiIsControlEmpty, tuiIsNumber, tuiIsObject, tuiIsPresent, tuiIsString, tuiMarkControlAsTouchedAndValidate, tuiNullableSame, tuiObfuscate, tuiPx, tuiSanitizeText, tuiSetSignal, tuiWithStyles };
240
+ export { tuiArrayRemove, tuiArrayShallowEquals, tuiArrayToggle, tuiCountFilledControls, tuiDefaultSort, tuiDistanceBetweenTouches, tuiEaseInOutQuad, tuiGenerateId, tuiIsControlEmpty, tuiIsFlat, tuiIsNumber, tuiIsObject, tuiIsPresent, tuiIsString, tuiMarkControlAsTouchedAndValidate, tuiNullableSame, tuiObfuscate, tuiPx, tuiSanitizeText, tuiSetSignal, tuiWithStyles };
237
241
  //# sourceMappingURL=taiga-ui-cdk-utils-miscellaneous.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-utils-miscellaneous.mjs","sources":["../../../projects/cdk/utils/miscellaneous/array-remove.ts","../../../projects/cdk/utils/miscellaneous/array-shallow-equals.ts","../../../projects/cdk/utils/miscellaneous/array-toggle.ts","../../../projects/cdk/utils/miscellaneous/is-control-empty.ts","../../../projects/cdk/utils/miscellaneous/count-filled-controls.ts","../../../projects/cdk/utils/miscellaneous/is-string.ts","../../../projects/cdk/utils/miscellaneous/default-sort.ts","../../../projects/cdk/utils/miscellaneous/distance-between-touches.ts","../../../projects/cdk/utils/miscellaneous/ease-in-out-quad.ts","../../../projects/cdk/utils/miscellaneous/generate-id.ts","../../../projects/cdk/utils/miscellaneous/is-number.ts","../../../projects/cdk/utils/miscellaneous/is-object.ts","../../../projects/cdk/utils/miscellaneous/is-present.ts","../../../projects/cdk/utils/miscellaneous/mark-control-as-touched-and-validate.ts","../../../projects/cdk/utils/miscellaneous/nullable-same.ts","../../../projects/cdk/utils/miscellaneous/obfuscate.ts","../../../projects/cdk/utils/miscellaneous/px.ts","../../../projects/cdk/utils/miscellaneous/sanitize-text.ts","../../../projects/cdk/utils/miscellaneous/set-signal.ts","../../../projects/cdk/utils/miscellaneous/with-styles.ts","../../../projects/cdk/utils/miscellaneous/taiga-ui-cdk-utils-miscellaneous.ts"],"sourcesContent":["export function tuiArrayRemove<T>(array: readonly T[], index: number): T[] {\n return array.slice(0, Math.max(index, 0)).concat(array.slice(Math.max(index + 1, 0)));\n}\n","export function tuiArrayShallowEquals<T>(a: readonly T[], b: readonly T[]): boolean {\n return a.length === b.length && a.every((item, index) => Object.is(item, b[index]));\n}\n","import {type TuiIdentityMatcher} from '@taiga-ui/cdk/types';\n\nimport {tuiArrayRemove} from './array-remove';\n\nexport function tuiArrayToggle<T>(\n array: readonly T[],\n item: T,\n identity?: TuiIdentityMatcher<T>,\n): T[] {\n const index = identity\n ? array.findIndex((it) => identity(it, item))\n : array.indexOf(item);\n\n return index === -1 ? [...array, item] : tuiArrayRemove(array, index);\n}\n","import {type AbstractControl} from '@angular/forms';\n\nexport function tuiIsControlEmpty({value = null}: AbstractControl): boolean {\n return value === null || value === '' || (Array.isArray(value) && !value.length);\n}\n","import {type AbstractControl, FormArray, FormGroup} from '@angular/forms';\nimport {tuiToInt} from '@taiga-ui/cdk/utils/math';\n\nimport {tuiIsControlEmpty} from './is-control-empty';\n\nexport function tuiCountFilledControls(control: AbstractControl): number {\n if (control instanceof FormArray) {\n return control.controls.reduce(\n (acc, nestedControl) => acc + tuiCountFilledControls(nestedControl),\n 0,\n );\n }\n\n if (control instanceof FormGroup) {\n return Object.values(control.controls).reduce(\n (acc, nestedControl) => acc + tuiCountFilledControls(nestedControl),\n 0,\n );\n }\n\n return tuiToInt(!tuiIsControlEmpty(control));\n}\n","export function tuiIsString(value: unknown): value is string {\n return typeof value === 'string';\n}\n","import {tuiIsString} from './is-string';\n\nexport function tuiDefaultSort<T>(x: T, y: T): number {\n if (x === y) {\n return 0;\n }\n\n if (tuiIsString(x) && tuiIsString(y)) {\n return x.localeCompare(y, undefined, {numeric: true});\n }\n\n return x > y ? 1 : -1;\n}\n","export function tuiDistanceBetweenTouches({touches}: TouchEvent): number {\n return Math.hypot(\n (touches[0]?.clientX ?? 0) - (touches[1]?.clientX ?? 0),\n (touches[0]?.clientY ?? 0) - (touches[1]?.clientY ?? 0),\n );\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nexport function tuiEaseInOutQuad(t: number): number {\n ngDevMode &&\n console.assert(\n t >= 0 && t <= 1,\n 'Input must be between 0 and 1 inclusive but received ',\n t,\n );\n\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n}\n","let autoId = 0;\n\nexport function tuiGenerateId(): string {\n return `tui_${autoId++}${Date.now().toString(36)}`;\n}\n","export function tuiIsNumber(value: unknown): value is number {\n return typeof value === 'number';\n}\n","export function tuiIsObject<T extends Record<string, any>>(\n value: unknown,\n): value is NonNullable<T> {\n return typeof value === 'object' && !!value;\n}\n","export function tuiIsPresent<T>(value?: T | null): value is T {\n return value !== null && value !== undefined;\n}\n","import {type AbstractControl, FormArray, FormGroup} from '@angular/forms';\n\nexport function tuiMarkControlAsTouchedAndValidate(control: AbstractControl): void {\n if (control instanceof FormArray) {\n control.controls.forEach((nestedControl) => {\n tuiMarkControlAsTouchedAndValidate(nestedControl);\n });\n }\n\n if (control instanceof FormGroup) {\n Object.values(control.controls).forEach((nestedControl) => {\n tuiMarkControlAsTouchedAndValidate(nestedControl);\n });\n }\n\n control.markAsTouched();\n control.updateValueAndValidity();\n}\n","import {type TuiIdentityMatcher} from '@taiga-ui/cdk/types';\n\n/**\n * Checks identity for nullable elements.\n *\n * @param a element a\n * @param b element b\n * @param handler called if both elements are not null\n * @return true if either both are null or they pass identity handler\n */\nexport function tuiNullableSame<T>(\n a: T | null,\n b: T | null,\n handler: TuiIdentityMatcher<T>,\n): boolean {\n if (a === null) {\n return b === null;\n }\n\n if (b === null) {\n return false;\n }\n\n return handler(a, b);\n}\n","/**\n * Obfuscates a string by replacing certain characters with a symbol.\n *\n * @param value the input string to obfuscate\n * @param symbol the symbol for obfuscation\n * @return the obfuscated string\n *\n * The function determines which characters to obfuscate using a regular expression and the string's length:\n * - 8 or more: show first 2 and last 2 characters\n * - 4 to 7: show first and last character\n * - less than 4: obfuscate all characters\n * - obfuscates only alphanumeric characters\n */\nexport function tuiObfuscate(value: string, symbol: string): string {\n if (!value) {\n return value;\n }\n\n const match = /[\\p{L}\\p{N}]/gu;\n\n let visible = 0;\n let obfuscateIndexes: number[] = getObfuscateIndexes(value, match);\n\n if (obfuscateIndexes.length >= 8) {\n visible = 2;\n } else if (obfuscateIndexes.length >= 4) {\n visible = 1;\n }\n\n obfuscateIndexes = obfuscateIndexes.slice(visible, obfuscateIndexes.length);\n\n const lastIndex = (obfuscateIndexes.length satisfies number) - visible;\n\n obfuscateIndexes = obfuscateIndexes.slice(0, lastIndex < 0 ? 0 : lastIndex);\n\n const result = value.split('');\n\n obfuscateIndexes.forEach((index) => {\n result[index] = symbol;\n });\n\n return result.join('');\n}\n\nfunction getObfuscateIndexes(value: string, match?: RegExp): number[] {\n if (!match) {\n return Array.from({length: value.length}).map((_, index) => index);\n }\n\n const obfuscateIndexes: number[] = [];\n let matchResult;\n let count = 0;\n\n while ((matchResult = match.exec(value)) !== null && count < value.length) {\n const start = matchResult.index;\n const end = match.lastIndex - 1;\n\n for (let i = start; i <= end; i++) {\n obfuscateIndexes.push(i);\n }\n\n count++;\n }\n\n return obfuscateIndexes;\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\n/**\n * Adds 'px' to the number and turns it into a string\n */\nexport function tuiPx(value: number): string {\n ngDevMode && console.assert(Number.isFinite(value), 'Value must be finite number');\n\n return `${value}px`;\n}\n","/**\n * Sanitizes pasted or dropped text by removing invisible and control characters\n * that can appear in clipboard or drag-and-drop data.\n *\n * Removes:\n * 1. ASCII control characters (0x00–0x1F) — non-printable characters like\n * NULL, BEL, BS, CR, LF, TAB, ESC, etc.\n * 2. Extended control characters (0x7F–0x9F) — C1 control codes from ISO-8859-1,\n * often found in legacy or malformed text encodings.\n * 3. Zero-width and special Unicode characters:\n * - U+200B ZERO WIDTH SPACE\n * - U+200C ZERO WIDTH NON-JOINER\n * - U+200D ZERO WIDTH JOINER\n * - U+FEFF BYTE ORDER MARK (BOM)\n *\n * @param {string} value - The input string from clipboard or drag event.\n * @returns {string} - A cleaned string without control or invisible characters.\n *\n * @example\n * tuiSanitizeText('Hello\\u0000World\\u200B!');\n * // → \"HelloWorld!\"\n */\nexport function tuiSanitizeText(value: string): string {\n // eslint-disable-next-line no-control-regex\n const controlCharsRegex = /[\\x00-\\x1F\\x7F-\\x9F]/g;\n const zeroWidthCharsRegex = /[\\u200B-\\u200D\\uFEFF]/g;\n\n return value\n .trim()\n .replaceAll(controlCharsRegex, '')\n .replaceAll(zeroWidthCharsRegex, '');\n}\n","import {type InputSignalWithTransform, type WritableSignal} from '@angular/core';\nimport {SIGNAL} from '@angular/core/primitives/signals';\n\nexport function tuiSetSignal<T>(\n signal: InputSignalWithTransform<any, T> | WritableSignal<T>,\n value: T,\n): void {\n if ('set' in signal) {\n signal.set(value);\n } else if ('applyValueToInputSignal' in signal[SIGNAL]) {\n signal[SIGNAL].applyValueToInputSignal(signal[SIGNAL], value);\n } else {\n ngDevMode && console.assert(false, 'tuiSetSignal was called on read-only signal');\n }\n}\n","import {\n createComponent,\n DestroyRef,\n EnvironmentInjector,\n inject,\n InjectionToken,\n type Type,\n} from '@angular/core';\n\nconst MAP = new InjectionToken(ngDevMode ? 'MAP' : '', {\n factory: () => {\n const map = new Map();\n\n inject(DestroyRef).onDestroy(() =>\n map.forEach((component) => component.destroy()),\n );\n\n return map;\n },\n});\n\nexport function tuiWithStyles(component: Type<unknown>): undefined {\n const map = inject(MAP);\n const environmentInjector = inject(EnvironmentInjector);\n\n if (!map.has(component)) {\n map.set(component, createComponent(component, {environmentInjector}));\n }\n\n return undefined;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-cdk-utils-miscellaneous.mjs","sources":["../../../projects/cdk/utils/miscellaneous/array-remove.ts","../../../projects/cdk/utils/miscellaneous/array-shallow-equals.ts","../../../projects/cdk/utils/miscellaneous/array-toggle.ts","../../../projects/cdk/utils/miscellaneous/is-control-empty.ts","../../../projects/cdk/utils/miscellaneous/count-filled-controls.ts","../../../projects/cdk/utils/miscellaneous/is-string.ts","../../../projects/cdk/utils/miscellaneous/default-sort.ts","../../../projects/cdk/utils/miscellaneous/distance-between-touches.ts","../../../projects/cdk/utils/miscellaneous/ease-in-out-quad.ts","../../../projects/cdk/utils/miscellaneous/generate-id.ts","../../../projects/cdk/utils/miscellaneous/is-flat.ts","../../../projects/cdk/utils/miscellaneous/is-number.ts","../../../projects/cdk/utils/miscellaneous/is-object.ts","../../../projects/cdk/utils/miscellaneous/is-present.ts","../../../projects/cdk/utils/miscellaneous/mark-control-as-touched-and-validate.ts","../../../projects/cdk/utils/miscellaneous/nullable-same.ts","../../../projects/cdk/utils/miscellaneous/obfuscate.ts","../../../projects/cdk/utils/miscellaneous/px.ts","../../../projects/cdk/utils/miscellaneous/sanitize-text.ts","../../../projects/cdk/utils/miscellaneous/set-signal.ts","../../../projects/cdk/utils/miscellaneous/with-styles.ts","../../../projects/cdk/utils/miscellaneous/taiga-ui-cdk-utils-miscellaneous.ts"],"sourcesContent":["export function tuiArrayRemove<T>(array: readonly T[], index: number): T[] {\n return array.slice(0, Math.max(index, 0)).concat(array.slice(Math.max(index + 1, 0)));\n}\n","export function tuiArrayShallowEquals<T>(a: readonly T[], b: readonly T[]): boolean {\n return a.length === b.length && a.every((item, index) => Object.is(item, b[index]));\n}\n","import {type TuiIdentityMatcher} from '@taiga-ui/cdk/types';\n\nimport {tuiArrayRemove} from './array-remove';\n\nexport function tuiArrayToggle<T>(\n array: readonly T[],\n item: T,\n identity?: TuiIdentityMatcher<T>,\n): T[] {\n const index = identity\n ? array.findIndex((it) => identity(it, item))\n : array.indexOf(item);\n\n return index === -1 ? [...array, item] : tuiArrayRemove(array, index);\n}\n","import {type AbstractControl} from '@angular/forms';\n\nexport function tuiIsControlEmpty({value = null}: AbstractControl): boolean {\n return value === null || value === '' || (Array.isArray(value) && !value.length);\n}\n","import {type AbstractControl, FormArray, FormGroup} from '@angular/forms';\nimport {tuiToInt} from '@taiga-ui/cdk/utils/math';\n\nimport {tuiIsControlEmpty} from './is-control-empty';\n\nexport function tuiCountFilledControls(control: AbstractControl): number {\n if (control instanceof FormArray) {\n return control.controls.reduce(\n (acc, nestedControl) => acc + tuiCountFilledControls(nestedControl),\n 0,\n );\n }\n\n if (control instanceof FormGroup) {\n return Object.values(control.controls).reduce(\n (acc, nestedControl) => acc + tuiCountFilledControls(nestedControl),\n 0,\n );\n }\n\n return tuiToInt(!tuiIsControlEmpty(control));\n}\n","export function tuiIsString(value: unknown): value is string {\n return typeof value === 'string';\n}\n","import {tuiIsString} from './is-string';\n\nexport function tuiDefaultSort<T>(x: T, y: T): number {\n if (x === y) {\n return 0;\n }\n\n if (tuiIsString(x) && tuiIsString(y)) {\n return x.localeCompare(y, undefined, {numeric: true});\n }\n\n return x > y ? 1 : -1;\n}\n","export function tuiDistanceBetweenTouches({touches}: TouchEvent): number {\n return Math.hypot(\n (touches[0]?.clientX ?? 0) - (touches[1]?.clientX ?? 0),\n (touches[0]?.clientY ?? 0) - (touches[1]?.clientY ?? 0),\n );\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nexport function tuiEaseInOutQuad(t: number): number {\n ngDevMode &&\n console.assert(\n t >= 0 && t <= 1,\n 'Input must be between 0 and 1 inclusive but received ',\n t,\n );\n\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n}\n","let autoId = 0;\n\nexport function tuiGenerateId(): string {\n return `tui_${autoId++}${Date.now().toString(36)}`;\n}\n","export function tuiIsFlat<T>(\n items: ReadonlyArray<readonly T[]> | readonly T[],\n): items is readonly T[] {\n return !Array.isArray(items[0]);\n}\n","export function tuiIsNumber(value: unknown): value is number {\n return typeof value === 'number';\n}\n","export function tuiIsObject<T extends Record<string, any>>(\n value: unknown,\n): value is NonNullable<T> {\n return typeof value === 'object' && !!value;\n}\n","export function tuiIsPresent<T>(value?: T | null): value is T {\n return value !== null && value !== undefined;\n}\n","import {type AbstractControl, FormArray, FormGroup} from '@angular/forms';\n\nexport function tuiMarkControlAsTouchedAndValidate(control: AbstractControl): void {\n if (control instanceof FormArray) {\n control.controls.forEach((nestedControl) => {\n tuiMarkControlAsTouchedAndValidate(nestedControl);\n });\n }\n\n if (control instanceof FormGroup) {\n Object.values(control.controls).forEach((nestedControl) => {\n tuiMarkControlAsTouchedAndValidate(nestedControl);\n });\n }\n\n control.markAsTouched();\n control.updateValueAndValidity();\n}\n","import {type TuiIdentityMatcher} from '@taiga-ui/cdk/types';\n\n/**\n * Checks identity for nullable elements.\n *\n * @param a element a\n * @param b element b\n * @param handler called if both elements are not null\n * @return true if either both are null or they pass identity handler\n */\nexport function tuiNullableSame<T>(\n a: T | null,\n b: T | null,\n handler: TuiIdentityMatcher<T>,\n): boolean {\n if (a === null) {\n return b === null;\n }\n\n if (b === null) {\n return false;\n }\n\n return handler(a, b);\n}\n","/**\n * Obfuscates a string by replacing certain characters with a symbol.\n *\n * @param value the input string to obfuscate\n * @param symbol the symbol for obfuscation\n * @return the obfuscated string\n *\n * The function determines which characters to obfuscate using a regular expression and the string's length:\n * - 8 or more: show first 2 and last 2 characters\n * - 4 to 7: show first and last character\n * - less than 4: obfuscate all characters\n * - obfuscates only alphanumeric characters\n */\nexport function tuiObfuscate(value: string, symbol: string): string {\n if (!value) {\n return value;\n }\n\n const match = /[\\p{L}\\p{N}]/gu;\n\n let visible = 0;\n let obfuscateIndexes: number[] = getObfuscateIndexes(value, match);\n\n if (obfuscateIndexes.length >= 8) {\n visible = 2;\n } else if (obfuscateIndexes.length >= 4) {\n visible = 1;\n }\n\n obfuscateIndexes = obfuscateIndexes.slice(visible, obfuscateIndexes.length);\n\n const lastIndex = (obfuscateIndexes.length satisfies number) - visible;\n\n obfuscateIndexes = obfuscateIndexes.slice(0, lastIndex < 0 ? 0 : lastIndex);\n\n const result = value.split('');\n\n obfuscateIndexes.forEach((index) => {\n result[index] = symbol;\n });\n\n return result.join('');\n}\n\nfunction getObfuscateIndexes(value: string, match?: RegExp): number[] {\n if (!match) {\n return Array.from({length: value.length}).map((_, index) => index);\n }\n\n const obfuscateIndexes: number[] = [];\n let matchResult;\n let count = 0;\n\n while ((matchResult = match.exec(value)) !== null && count < value.length) {\n const start = matchResult.index;\n const end = match.lastIndex - 1;\n\n for (let i = start; i <= end; i++) {\n obfuscateIndexes.push(i);\n }\n\n count++;\n }\n\n return obfuscateIndexes;\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\n/**\n * Adds 'px' to the number and turns it into a string\n */\nexport function tuiPx(value: number): string {\n ngDevMode && console.assert(Number.isFinite(value), 'Value must be finite number');\n\n return `${value}px`;\n}\n","/**\n * Sanitizes pasted or dropped text by removing invisible and control characters\n * that can appear in clipboard or drag-and-drop data.\n *\n * Removes:\n * 1. ASCII control characters (0x00–0x1F) — non-printable characters like\n * NULL, BEL, BS, CR, LF, TAB, ESC, etc.\n * 2. Extended control characters (0x7F–0x9F) — C1 control codes from ISO-8859-1,\n * often found in legacy or malformed text encodings.\n * 3. Zero-width and special Unicode characters:\n * - U+200B ZERO WIDTH SPACE\n * - U+200C ZERO WIDTH NON-JOINER\n * - U+200D ZERO WIDTH JOINER\n * - U+FEFF BYTE ORDER MARK (BOM)\n *\n * @param {string} value - The input string from clipboard or drag event.\n * @returns {string} - A cleaned string without control or invisible characters.\n *\n * @example\n * tuiSanitizeText('Hello\\u0000World\\u200B!');\n * // → \"HelloWorld!\"\n */\nexport function tuiSanitizeText(value: string): string {\n // eslint-disable-next-line no-control-regex\n const controlCharsRegex = /[\\x00-\\x1F\\x7F-\\x9F]/g;\n const zeroWidthCharsRegex = /[\\u200B-\\u200D\\uFEFF]/g;\n\n return value\n .trim()\n .replaceAll(controlCharsRegex, '')\n .replaceAll(zeroWidthCharsRegex, '');\n}\n","import {type InputSignalWithTransform, type WritableSignal} from '@angular/core';\nimport {SIGNAL} from '@angular/core/primitives/signals';\n\nexport function tuiSetSignal<T>(\n signal: InputSignalWithTransform<any, T> | WritableSignal<T>,\n value: T,\n): void {\n if ('set' in signal) {\n signal.set(value);\n } else if ('applyValueToInputSignal' in signal[SIGNAL]) {\n signal[SIGNAL].applyValueToInputSignal(signal[SIGNAL], value);\n } else {\n ngDevMode && console.assert(false, 'tuiSetSignal was called on read-only signal');\n }\n}\n","import {\n createComponent,\n DestroyRef,\n EnvironmentInjector,\n inject,\n InjectionToken,\n type Type,\n} from '@angular/core';\n\nconst MAP = new InjectionToken(ngDevMode ? 'MAP' : '', {\n factory: () => {\n const map = new Map();\n\n inject(DestroyRef).onDestroy(() =>\n map.forEach((component) => component.destroy()),\n );\n\n return map;\n },\n});\n\nexport function tuiWithStyles(component: Type<unknown>): undefined {\n const map = inject(MAP);\n const environmentInjector = inject(EnvironmentInjector);\n\n if (!map.has(component)) {\n map.set(component, createComponent(component, {environmentInjector}));\n }\n\n return undefined;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAAM,SAAU,cAAc,CAAI,KAAmB,EAAE,KAAa,EAAA;AAChE,IAAA,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzF;;ACFM,SAAU,qBAAqB,CAAI,CAAe,EAAE,CAAe,EAAA;AACrE,IAAA,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACvF;;SCEgB,cAAc,CAC1B,KAAmB,EACnB,IAAO,EACP,QAAgC,EAAA;IAEhC,MAAM,KAAK,GAAG;AACV,UAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;AAC5C,UAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;IAEzB,OAAO,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC;AACzE;;SCZgB,iBAAiB,CAAC,EAAC,KAAK,GAAG,IAAI,EAAkB,EAAA;IAC7D,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACpF;;ACCM,SAAU,sBAAsB,CAAC,OAAwB,EAAA;AAC3D,IAAA,IAAI,OAAO,YAAY,SAAS,EAAE;QAC9B,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAC1B,CAAC,GAAG,EAAE,aAAa,KAAK,GAAG,GAAG,sBAAsB,CAAC,aAAa,CAAC,EACnE,CAAC,CACJ;IACL;AAEA,IAAA,IAAI,OAAO,YAAY,SAAS,EAAE;QAC9B,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CACzC,CAAC,GAAG,EAAE,aAAa,KAAK,GAAG,GAAG,sBAAsB,CAAC,aAAa,CAAC,EACnE,CAAC,CACJ;IACL;IAEA,OAAO,QAAQ,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAChD;;ACrBM,SAAU,WAAW,CAAC,KAAc,EAAA;AACtC,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ;AACpC;;ACAM,SAAU,cAAc,CAAI,CAAI,EAAE,CAAI,EAAA;AACxC,IAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACT,QAAA,OAAO,CAAC;IACZ;IAEA,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE;AAClC,QAAA,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;IACzD;AAEA,IAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzB;;ACZM,SAAU,yBAAyB,CAAC,EAAC,OAAO,EAAa,EAAA;IAC3D,OAAO,IAAI,CAAC,KAAK,CACb,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,EACvD,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAC1D;AACL;;ACLA;AAEM,SAAU,gBAAgB,CAAC,CAAS,EAAA;IACtC,SAAS;AACL,QAAA,OAAO,CAAC,MAAM,CACV,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAChB,uDAAuD,EACvD,CAAC,CACJ;IAEL,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;AACrD;;ACXA,IAAI,MAAM,GAAG,CAAC;SAEE,aAAa,GAAA;AACzB,IAAA,OAAO,CAAA,IAAA,EAAO,MAAM,EAAE,CAAA,EAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AACtD;;ACJM,SAAU,SAAS,CACrB,KAAiD,EAAA;IAEjD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC;;ACJM,SAAU,WAAW,CAAC,KAAc,EAAA;AACtC,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ;AACpC;;ACFM,SAAU,WAAW,CACvB,KAAc,EAAA;IAEd,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK;AAC/C;;ACJM,SAAU,YAAY,CAAI,KAAgB,EAAA;AAC5C,IAAA,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAChD;;ACAM,SAAU,kCAAkC,CAAC,OAAwB,EAAA;AACvE,IAAA,IAAI,OAAO,YAAY,SAAS,EAAE;QAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,aAAa,KAAI;YACvC,kCAAkC,CAAC,aAAa,CAAC;AACrD,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,IAAI,OAAO,YAAY,SAAS,EAAE;AAC9B,QAAA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,KAAI;YACtD,kCAAkC,CAAC,aAAa,CAAC;AACrD,QAAA,CAAC,CAAC;IACN;IAEA,OAAO,CAAC,aAAa,EAAE;IACvB,OAAO,CAAC,sBAAsB,EAAE;AACpC;;ACfA;;;;;;;AAOG;SACa,eAAe,CAC3B,CAAW,EACX,CAAW,EACX,OAA8B,EAAA;AAE9B,IAAA,IAAI,CAAC,KAAK,IAAI,EAAE;QACZ,OAAO,CAAC,KAAK,IAAI;IACrB;AAEA,IAAA,IAAI,CAAC,KAAK,IAAI,EAAE;AACZ,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,OAAO,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB;;ACxBA;;;;;;;;;;;;AAYG;AACG,SAAU,YAAY,CAAC,KAAa,EAAE,MAAc,EAAA;IACtD,IAAI,CAAC,KAAK,EAAE;AACR,QAAA,OAAO,KAAK;IAChB;IAEA,MAAM,KAAK,GAAG,gBAAgB;IAE9B,IAAI,OAAO,GAAG,CAAC;IACf,IAAI,gBAAgB,GAAa,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC;AAElE,IAAA,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,EAAE;QAC9B,OAAO,GAAG,CAAC;IACf;AAAO,SAAA,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,EAAE;QACrC,OAAO,GAAG,CAAC;IACf;IAEA,gBAAgB,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC;AAE3E,IAAA,MAAM,SAAS,GAAI,gBAAgB,CAAC,MAAwB,GAAG,OAAO;AAEtE,IAAA,gBAAgB,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAE3E,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AAE9B,IAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC/B,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM;AAC1B,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1B;AAEA,SAAS,mBAAmB,CAAC,KAAa,EAAE,KAAc,EAAA;IACtD,IAAI,CAAC,KAAK,EAAE;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC;IACtE;IAEA,MAAM,gBAAgB,GAAa,EAAE;AACrC,IAAA,IAAI,WAAW;IACf,IAAI,KAAK,GAAG,CAAC;AAEb,IAAA,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE;AACvE,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK;AAC/B,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC;AAE/B,QAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;AAC/B,YAAA,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5B;AAEA,QAAA,KAAK,EAAE;IACX;AAEA,IAAA,OAAO,gBAAgB;AAC3B;;ACjEA;AAEA;;AAEG;AACG,SAAU,KAAK,CAAC,KAAa,EAAA;AAC/B,IAAA,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,6BAA6B,CAAC;IAElF,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;AACvB;;ACTA;;;;;;;;;;;;;;;;;;;;;AAqBG;AACG,SAAU,eAAe,CAAC,KAAa,EAAA;;IAEzC,MAAM,iBAAiB,GAAG,uBAAuB;IACjD,MAAM,mBAAmB,GAAG,wBAAwB;AAEpD,IAAA,OAAO;AACF,SAAA,IAAI;AACJ,SAAA,UAAU,CAAC,iBAAiB,EAAE,EAAE;AAChC,SAAA,UAAU,CAAC,mBAAmB,EAAE,EAAE,CAAC;AAC5C;;AC5BM,SAAU,YAAY,CACxB,MAA4D,EAC5D,KAAQ,EAAA;AAER,IAAA,IAAI,KAAK,IAAI,MAAM,EAAE;AACjB,QAAA,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACrB;AAAO,SAAA,IAAI,yBAAyB,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE;AACpD,QAAA,MAAM,CAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;IACjE;SAAO;QACH,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,6CAA6C,CAAC;IACrF;AACJ;;ACLA,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,SAAS,GAAG,KAAK,GAAG,EAAE,EAAE;IACnD,OAAO,EAAE,MAAK;AACV,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE;QAErB,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MACzB,GAAG,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC,CAClD;AAED,QAAA,OAAO,GAAG;IACd,CAAC;AACJ,CAAA,CAAC;AAEI,SAAU,aAAa,CAAC,SAAwB,EAAA;AAClD,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AACvB,IAAA,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAEvD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACrB,QAAA,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,SAAS,EAAE,EAAC,mBAAmB,EAAC,CAAC,CAAC;IACzE;AAEA,IAAA,OAAO,SAAS;AACpB;;AC9BA;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taiga-ui/cdk",
3
- "version": "5.0.0-rc.4",
3
+ "version": "5.0.0",
4
4
  "description": "Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance",
5
5
  "keywords": [
6
6
  "angular",
@@ -17,6 +17,20 @@
17
17
  "url": "https://github.com/taiga-family/taiga-ui"
18
18
  },
19
19
  "license": "Apache-2.0",
20
+ "contributors": [
21
+ {
22
+ "name": "Alex Inkin",
23
+ "email": "alexander@inkin.ru"
24
+ },
25
+ {
26
+ "name": "Vladimir Potekhin",
27
+ "email": "vladimir.potekh@gmail.com"
28
+ },
29
+ {
30
+ "name": "Nikita Barsukov",
31
+ "email": "nikita.s.barsukov@gmail.com"
32
+ }
33
+ ],
20
34
  "exports": {
21
35
  "./schematics/*": "./schematics/*",
22
36
  "./package.json": {
@@ -30,10 +44,6 @@
30
44
  "types": "./classes/index.d.ts",
31
45
  "default": "./fesm2022/taiga-ui-cdk-classes.mjs"
32
46
  },
33
- "./constants": {
34
- "types": "./constants/index.d.ts",
35
- "default": "./fesm2022/taiga-ui-cdk-constants.mjs"
36
- },
37
47
  "./date-time": {
38
48
  "types": "./date-time/index.d.ts",
39
49
  "default": "./fesm2022/taiga-ui-cdk-date-time.mjs"
@@ -54,6 +64,10 @@
54
64
  "types": "./portals/index.d.ts",
55
65
  "default": "./fesm2022/taiga-ui-cdk-portals.mjs"
56
66
  },
67
+ "./constants": {
68
+ "types": "./constants/index.d.ts",
69
+ "default": "./fesm2022/taiga-ui-cdk-constants.mjs"
70
+ },
57
71
  "./tokens": {
58
72
  "types": "./tokens/index.d.ts",
59
73
  "default": "./fesm2022/taiga-ui-cdk-tokens.mjs"
@@ -142,6 +156,10 @@
142
156
  "types": "./directives/transitioned/index.d.ts",
143
157
  "default": "./fesm2022/taiga-ui-cdk-directives-transitioned.mjs"
144
158
  },
159
+ "./directives/truncate": {
160
+ "types": "./directives/truncate/index.d.ts",
161
+ "default": "./fesm2022/taiga-ui-cdk-directives-truncate.mjs"
162
+ },
145
163
  "./directives/validator": {
146
164
  "types": "./directives/validator/index.d.ts",
147
165
  "default": "./fesm2022/taiga-ui-cdk-directives-validator.mjs"
@@ -203,11 +221,11 @@
203
221
  "@angular/common": ">=19.0.0",
204
222
  "@angular/core": ">=19.0.0",
205
223
  "@angular/forms": ">=19.0.0",
206
- "@ng-web-apis/common": "^5.1.0",
207
- "@ng-web-apis/mutation-observer": "^5.1.0",
208
- "@ng-web-apis/platform": "^5.1.0",
209
- "@ng-web-apis/resize-observer": "^5.1.0",
210
- "@ng-web-apis/screen-orientation": "^5.1.0",
224
+ "@ng-web-apis/common": "^5.2.0",
225
+ "@ng-web-apis/mutation-observer": "^5.2.0",
226
+ "@ng-web-apis/platform": "^5.2.0",
227
+ "@ng-web-apis/resize-observer": "^5.2.0",
228
+ "@ng-web-apis/screen-orientation": "^5.2.0",
211
229
  "@taiga-ui/event-plugins": "^5.0.0",
212
230
  "@taiga-ui/font-watcher": "~0.5.0",
213
231
  "@taiga-ui/polymorpheus": "^5.0.0",
@@ -1 +1 @@
1
- export declare const TAIGA_VERSION = "^5.0.0-rc.4";
1
+ export declare const TAIGA_VERSION = "^5.0.0";
@@ -14,10 +14,6 @@ function addDependencies(tree, options) {
14
14
  type: ng_morph_1.NodeDependencyType.Default,
15
15
  });
16
16
  });
17
- (0, ng_morph_1.addPackageJsonDependency)(tree, {
18
- name: '@taiga-ui/event-plugins',
19
- version: '^4.0.2',
20
- });
21
17
  removeTaigaSchematicsPackage(tree);
22
18
  if (packages.includes('addon-table') || packages.includes('addon-mobile')) {
23
19
  addAngularCdkDep(tree);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../projects/cdk/schematics/ng-add/index.ts"],"names":[],"mappings":";;AAgEA,sBAUC;AAzED,4DAA0F;AAC1F,uCAKkB;AAElB,mDAAmD;AACnD,mDAAmD;AAGnD,SAAS,eAAe,CAAC,IAAU,EAAE,OAAkB;IACnD,MAAM,QAAQ,GAAG,CAAC,GAAG,wBAAa,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvD,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,IAAA,mCAAwB,EAAC,IAAI,EAAE;YAC3B,IAAI,EAAE,aAAa,IAAI,EAAE;YACzB,OAAO,EAAE,wBAAa;YACtB,IAAI,EAAE,6BAAkB,CAAC,OAAO;SACnC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,IAAA,mCAAwB,EAAC,IAAI,EAAE;QAC3B,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,QAAQ;KACpB,CAAC,CAAC;IAEH,4BAA4B,CAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACxE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAU;;IAChC,MAAM,WAAW,GAAG,MAAA,IAAA,mCAAwB,EAAC,IAAI,EAAE,eAAe,CAAC,0CAAE,OAAO,CAAC;IAE7E,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO;IACX,CAAC;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEhD,IAAI,eAAe,EAAE,CAAC;QAClB,IAAA,mCAAwB,EAAC,IAAI,EAAE;YAC3B,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,IAAI,eAAe,CAAC,CAAC,CAAC,MAAM;YACrC,IAAI,EAAE,6BAAkB,CAAC,OAAO;SACnC,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAU;;IAC5C,IAAI,CAAC;QACD,IAAI,MAAA,IAAA,mCAAwB,EAAC,IAAI,EAAE,UAAU,CAAC,0CAAE,OAAO,EAAE,CAAC;YACtD,IAAA,sCAA2B,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;IAAC,WAAM,CAAC;QACL,OAAO;IACX,CAAC;AACL,CAAC;AAED,SAAgB,KAAK,CAAC,OAAkB;IACpC,OAAO,CAAC,IAAU,EAAE,OAAyB,EAAQ,EAAE;QACnD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,wBAAa,EAAE,CAAC,CAAC;QAE9E,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE/B,OAAO,CAAC,OAAO,CAAC,IAAI,8BAAsB,EAAE,EAAE;YAC1C,OAAO,CAAC,OAAO,CAAC,IAAI,wBAAgB,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;SACzE,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../projects/cdk/schematics/ng-add/index.ts"],"names":[],"mappings":";;AA2DA,sBAUC;AApED,4DAA0F;AAC1F,uCAKkB;AAElB,mDAAmD;AACnD,mDAAmD;AAGnD,SAAS,eAAe,CAAC,IAAU,EAAE,OAAkB;IACnD,MAAM,QAAQ,GAAG,CAAC,GAAG,wBAAa,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvD,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,IAAA,mCAAwB,EAAC,IAAI,EAAE;YAC3B,IAAI,EAAE,aAAa,IAAI,EAAE;YACzB,OAAO,EAAE,wBAAa;YACtB,IAAI,EAAE,6BAAkB,CAAC,OAAO;SACnC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,4BAA4B,CAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACxE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAU;;IAChC,MAAM,WAAW,GAAG,MAAA,IAAA,mCAAwB,EAAC,IAAI,EAAE,eAAe,CAAC,0CAAE,OAAO,CAAC;IAE7E,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO;IACX,CAAC;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEhD,IAAI,eAAe,EAAE,CAAC;QAClB,IAAA,mCAAwB,EAAC,IAAI,EAAE;YAC3B,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,IAAI,eAAe,CAAC,CAAC,CAAC,MAAM;YACrC,IAAI,EAAE,6BAAkB,CAAC,OAAO;SACnC,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAU;;IAC5C,IAAI,CAAC;QACD,IAAI,MAAA,IAAA,mCAAwB,EAAC,IAAI,EAAE,UAAU,CAAC,0CAAE,OAAO,EAAE,CAAC;YACtD,IAAA,sCAA2B,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;IAAC,WAAM,CAAC;QACL,OAAO;IACX,CAAC;AACL,CAAC;AAED,SAAgB,KAAK,CAAC,OAAkB;IACpC,OAAO,CAAC,IAAU,EAAE,OAAyB,EAAQ,EAAE;QACnD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,wBAAa,EAAE,CAAC,CAAC;QAE9E,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAE/B,OAAO,CAAC,OAAO,CAAC,IAAI,8BAAsB,EAAE,EAAE;YAC1C,OAAO,CAAC,OAAO,CAAC,IAAI,wBAAgB,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;SACzE,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC"}
@@ -1,8 +1,10 @@
1
1
  export interface ReplacementFunctionParameter {
2
2
  readonly names: string[];
3
3
  readonly moduleSpecifier?: string[] | string;
4
- readonly parameterName: string;
5
- readonly newParameterName?: string;
4
+ readonly parameters: Array<{
5
+ readonly name: string;
6
+ readonly renameTo?: string;
7
+ }>;
6
8
  readonly valueReplacer?: Array<{
7
9
  readonly from: string;
8
10
  readonly to: string;
@@ -0,0 +1,5 @@
1
+ import { type DevkitFileSystem } from 'ng-morph';
2
+ export declare function replaceAttrsInHost(fileSystem: DevkitFileSystem, replaceable: Array<{
3
+ from: string;
4
+ to: string;
5
+ }>, pattern?: import("ng-morph").Pattern): void;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.replaceAttrsInHost = replaceAttrsInHost;
4
+ const core_1 = require("@angular-devkit/core");
5
+ const ng_morph_1 = require("ng-morph");
6
+ const ts_morph_1 = require("ts-morph");
7
+ const constants_1 = require("../../constants");
8
+ function replaceAttrsInHost(fileSystem, replaceable, pattern = constants_1.ALL_TS_FILES) {
9
+ const classes = (0, ng_morph_1.getClasses)(pattern);
10
+ const components = (0, ng_morph_1.getDecorators)(classes, { name: 'Component' });
11
+ components.forEach((component) => {
12
+ var _a, _b, _c, _d;
13
+ const argument = (_a = component
14
+ .getArguments()[0]) === null || _a === void 0 ? void 0 : _a.asKind(ts_morph_1.SyntaxKind.ObjectLiteralExpression);
15
+ if (!argument) {
16
+ return;
17
+ }
18
+ const host = (_c = (_b = argument === null || argument === void 0 ? void 0 : argument.getProperty) === null || _b === void 0 ? void 0 : _b.call(argument, 'host')) === null || _c === void 0 ? void 0 : _c.asKind(ts_morph_1.SyntaxKind.PropertyAssignment);
19
+ if (host) {
20
+ const initializer = (_d = host
21
+ .getInitializer()) === null || _d === void 0 ? void 0 : _d.asKind(ts_morph_1.SyntaxKind.ObjectLiteralExpression);
22
+ const path = (0, core_1.normalize)(component.getSourceFile().getFilePath());
23
+ const recorder = fileSystem.edit(path);
24
+ if (initializer) {
25
+ replaceable.forEach(({ from, to }) => {
26
+ const oldProperty = initializer.getProperty(`'${from}'`) ||
27
+ initializer.getProperty(`"${from}"`);
28
+ if (ts_morph_1.Node.isPropertyAssignment(oldProperty)) {
29
+ const nameNode = oldProperty.getNameNode();
30
+ const start = nameNode.getStart();
31
+ const width = nameNode.getWidth();
32
+ recorder.remove(start, width);
33
+ recorder.insertLeft(start, `'${to}'`);
34
+ }
35
+ });
36
+ }
37
+ }
38
+ });
39
+ fileSystem.commitEdits();
40
+ }
41
+ //# sourceMappingURL=replace-attrs-in-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replace-attrs-in-host.js","sourceRoot":"","sources":["../../../../../projects/cdk/schematics/ng-update/utils/replace-attrs-in-host.ts"],"names":[],"mappings":";;AAMA,gDAgDC;AAtDD,+CAA+C;AAC/C,uCAA0E;AAC1E,uCAA0C;AAE1C,+CAA6C;AAE7C,SAAgB,kBAAkB,CAC9B,UAA4B,EAC5B,WAA8C,EAC9C,OAAO,GAAG,wBAAY;IAEtB,MAAM,OAAO,GAAG,IAAA,qBAAU,EAAC,OAAO,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,IAAA,wBAAa,EAAC,OAAO,EAAE,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC;IAE/D,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;;QAC7B,MAAM,QAAQ,GAAG,MAAA,SAAS;aACrB,YAAY,EAAE,CAAC,CAAC,CAAC,0CAChB,MAAM,CAAC,qBAAU,CAAC,uBAAuB,CAAC,CAAC;QAEjD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CACf,WAAW,yDAAG,MAAM,CAAC,0CACrB,MAAM,CAAC,qBAAU,CAAC,kBAAkB,CAAC,CAAC;QAE5C,IAAI,IAAI,EAAE,CAAC;YACP,MAAM,WAAW,GAAG,MAAA,IAAI;iBACnB,cAAc,EAAE,0CACf,MAAM,CAAC,qBAAU,CAAC,uBAAuB,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,IAAA,gBAAS,EAAC,SAAS,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEvC,IAAI,WAAW,EAAE,CAAC;gBACd,WAAW,CAAC,OAAO,CAAC,CAAC,EAAC,IAAI,EAAE,EAAE,EAAC,EAAE,EAAE;oBAC/B,MAAM,WAAW,GACb,WAAW,CAAC,WAAW,CAAC,IAAI,IAAI,GAAG,CAAC;wBACpC,WAAW,CAAC,WAAW,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;oBAEzC,IAAI,eAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC;wBACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;wBAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;wBAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;wBAElC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBAC9B,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;oBAC1C,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,WAAW,EAAE,CAAC;AAC7B,CAAC"}
@@ -20,29 +20,32 @@ function replaceFunctionParameter(item) {
20
20
  if (!ng_morph_1.Node.isObjectLiteralExpression(value)) {
21
21
  return;
22
22
  }
23
- const property = value.getProperty(item.parameterName);
24
- if (!property) {
25
- return;
26
- }
27
- if (item.valueReplacer) {
28
- const replacement = property.getLastChildIfKind(ng_morph_1.SyntaxKind.StringLiteral);
29
- if (!replacement) {
23
+ item.parameters.forEach(({ name, renameTo }) => {
24
+ const property = value.getProperty(name);
25
+ if (!property) {
30
26
  return;
31
27
  }
32
- item.valueReplacer.forEach(({ from, to }) => {
33
- if (replacement.getLiteralValue() === from) {
34
- replacement.setLiteralValue(to);
28
+ if (item.valueReplacer) {
29
+ const replacement = property.getLastChildIfKind(ng_morph_1.SyntaxKind.StringLiteral);
30
+ if (!replacement) {
31
+ return;
35
32
  }
36
- });
37
- }
38
- if (item.newParameterName) {
33
+ item.valueReplacer.forEach(({ from, to }) => {
34
+ if (replacement.getLiteralValue() === from) {
35
+ replacement.setLiteralValue(to);
36
+ }
37
+ });
38
+ }
39
+ if (!renameTo) {
40
+ return;
41
+ }
39
42
  if (ng_morph_1.Node.isPropertyAssignment(property)) {
40
- property.rename(item.newParameterName);
43
+ property.rename(renameTo);
41
44
  }
42
45
  if (ng_morph_1.Node.isShorthandPropertyAssignment(property)) {
43
- property.replaceWithText(`${item.newParameterName}: ${item.parameterName}`);
46
+ property.replaceWithText(`${renameTo}: ${name}`);
44
47
  }
45
- }
48
+ });
46
49
  });
47
50
  }
48
51
  //# sourceMappingURL=replace-function-parameters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"replace-function-parameters.js","sourceRoot":"","sources":["../../../../../projects/cdk/schematics/ng-update/utils/replace-function-parameters.ts"],"names":[],"mappings":";;AAKA,8DAIC;AATD,uCAA0C;AAE1C,yFAAiF;AAGjF,SAAgB,yBAAyB,CACrC,KAA8C;IAE9C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAkC;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3C,IAAA,sDAAwB,EAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CACvD,CAAC;IAEF,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACvB,IAAI,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QAE/B,IAAI,CAAC,eAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,OAAO;QACX,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;QAEtC,IAAI,CAAC,eAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,MAAM,WAAW,GAAG,QAAQ,CAAC,kBAAkB,CAAC,qBAAU,CAAC,aAAa,CAAC,CAAC;YAE1E,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,OAAO;YACX,CAAC;YAED,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAC,IAAI,EAAE,EAAE,EAAC,EAAE,EAAE;gBACtC,IAAI,WAAW,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC;oBACzC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;gBACpC,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,eAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC3C,CAAC;YAED,IAAI,eAAI,CAAC,6BAA6B,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/C,QAAQ,CAAC,eAAe,CACpB,GAAG,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,aAAa,EAAE,CACpD,CAAC;YACN,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"replace-function-parameters.js","sourceRoot":"","sources":["../../../../../projects/cdk/schematics/ng-update/utils/replace-function-parameters.ts"],"names":[],"mappings":";;AAKA,8DAIC;AATD,uCAA0C;AAE1C,yFAAiF;AAGjF,SAAgB,yBAAyB,CACrC,KAA8C;IAE9C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAkC;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3C,IAAA,sDAAwB,EAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CACvD,CAAC;IAEF,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACvB,IAAI,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QAE/B,IAAI,CAAC,eAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,OAAO;QACX,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;QAEtC,IAAI,CAAC,eAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAC,EAAE,EAAE;YACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,OAAO;YACX,CAAC;YAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,MAAM,WAAW,GAAG,QAAQ,CAAC,kBAAkB,CAAC,qBAAU,CAAC,aAAa,CAAC,CAAC;gBAE1E,IAAI,CAAC,WAAW,EAAE,CAAC;oBACf,OAAO;gBACX,CAAC;gBAED,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAC,IAAI,EAAE,EAAE,EAAC,EAAE,EAAE;oBACtC,IAAI,WAAW,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC;wBACzC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;oBACpC,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;YAED,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,OAAO;YACX,CAAC;YAED,IAAI,eAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;YAED,IAAI,eAAI,CAAC,6BAA6B,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/C,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ,KAAK,IAAI,EAAE,CAAC,CAAC;YACrD,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}