@taiga-ui/core 2.49.2 → 2.50.2

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 (158) hide show
  1. package/bundles/taiga-ui-core-components-data-list.umd.js +2 -1
  2. package/bundles/taiga-ui-core-components-data-list.umd.js.map +1 -1
  3. package/bundles/taiga-ui-core-components-data-list.umd.min.js +1 -1
  4. package/bundles/taiga-ui-core-components-data-list.umd.min.js.map +1 -1
  5. package/bundles/taiga-ui-core-components-dialog.umd.js +6 -5
  6. package/bundles/taiga-ui-core-components-dialog.umd.js.map +1 -1
  7. package/bundles/taiga-ui-core-components-dialog.umd.min.js +1 -1
  8. package/bundles/taiga-ui-core-components-dialog.umd.min.js.map +1 -1
  9. package/bundles/taiga-ui-core-components-dropdown-box.umd.js +5 -4
  10. package/bundles/taiga-ui-core-components-dropdown-box.umd.js.map +1 -1
  11. package/bundles/taiga-ui-core-components-dropdown-box.umd.min.js +1 -1
  12. package/bundles/taiga-ui-core-components-dropdown-box.umd.min.js.map +1 -1
  13. package/bundles/taiga-ui-core-components-hints-host.umd.js +5 -5
  14. package/bundles/taiga-ui-core-components-hints-host.umd.js.map +1 -1
  15. package/bundles/taiga-ui-core-components-hints-host.umd.min.js +1 -1
  16. package/bundles/taiga-ui-core-components-hints-host.umd.min.js.map +1 -1
  17. package/bundles/taiga-ui-core-components-primitive-textfield.umd.js +18 -19
  18. package/bundles/taiga-ui-core-components-primitive-textfield.umd.js.map +1 -1
  19. package/bundles/taiga-ui-core-components-primitive-textfield.umd.min.js +1 -1
  20. package/bundles/taiga-ui-core-components-primitive-textfield.umd.min.js.map +1 -1
  21. package/bundles/taiga-ui-core-components-root.umd.js +1 -1
  22. package/bundles/taiga-ui-core-components-root.umd.min.js +1 -1
  23. package/bundles/taiga-ui-core-components-root.umd.min.js.map +1 -1
  24. package/bundles/taiga-ui-core-constants.umd.js +1 -1
  25. package/bundles/taiga-ui-core-constants.umd.js.map +1 -1
  26. package/bundles/taiga-ui-core-constants.umd.min.js +1 -1
  27. package/bundles/taiga-ui-core-constants.umd.min.js.map +1 -1
  28. package/bundles/taiga-ui-core-tokens.umd.js +2 -2
  29. package/bundles/taiga-ui-core-tokens.umd.js.map +1 -1
  30. package/bundles/taiga-ui-core-tokens.umd.min.js +1 -1
  31. package/bundles/taiga-ui-core-tokens.umd.min.js.map +1 -1
  32. package/bundles/taiga-ui-core-utils-dom.umd.js +46 -0
  33. package/bundles/taiga-ui-core-utils-dom.umd.js.map +1 -1
  34. package/bundles/taiga-ui-core-utils-dom.umd.min.js +1 -1
  35. package/bundles/taiga-ui-core-utils-dom.umd.min.js.map +1 -1
  36. package/bundles/taiga-ui-core-utils-format.umd.js +1 -0
  37. package/bundles/taiga-ui-core-utils-format.umd.js.map +1 -1
  38. package/bundles/taiga-ui-core-utils-format.umd.min.js.map +1 -1
  39. package/bundles/taiga-ui-core-utils-mask.umd.js +3 -1
  40. package/bundles/taiga-ui-core-utils-mask.umd.js.map +1 -1
  41. package/bundles/taiga-ui-core-utils-mask.umd.min.js.map +1 -1
  42. package/bundles/taiga-ui-core-utils-mobile.umd.js +17 -0
  43. package/bundles/taiga-ui-core-utils-mobile.umd.js.map +1 -0
  44. package/bundles/taiga-ui-core-utils-mobile.umd.min.js +2 -0
  45. package/bundles/taiga-ui-core-utils-mobile.umd.min.js.map +1 -0
  46. package/bundles/taiga-ui-core-utils.umd.js +12 -4
  47. package/bundles/taiga-ui-core-utils.umd.js.map +1 -1
  48. package/bundles/taiga-ui-core-utils.umd.min.js +1 -1
  49. package/components/data-list/data-list.component.d.ts +1 -1
  50. package/components/data-list/taiga-ui-core-components-data-list.metadata.json +1 -1
  51. package/components/dialog/taiga-ui-core-components-dialog.metadata.json +1 -1
  52. package/components/hints-host/taiga-ui-core-components-hints-host.metadata.json +1 -1
  53. package/components/primitive-textfield/taiga-ui-core-components-primitive-textfield.metadata.json +1 -1
  54. package/components/primitive-textfield/value-decoration/value-decoration.component.d.ts +6 -6
  55. package/components/root/taiga-ui-core-components-root.metadata.json +1 -1
  56. package/constants/taiga-ui-core-constants.metadata.json +1 -1
  57. package/constants/version.d.ts +1 -1
  58. package/esm2015/components/data-list/data-list.component.js +3 -3
  59. package/esm2015/components/dialog/dialog.providers.js +4 -2
  60. package/esm2015/components/dropdown-box/dropdown-box.component.js +7 -6
  61. package/esm2015/components/hints-host/hint-box/hint-box.component.js +3 -2
  62. package/esm2015/components/primitive-textfield/primitive-textfield.module.js +2 -4
  63. package/esm2015/components/primitive-textfield/value-decoration/value-decoration.component.js +17 -19
  64. package/esm2015/components/root/root.component.js +1 -1
  65. package/esm2015/constants/version.js +2 -2
  66. package/esm2015/interfaces/number-format-settings.js +1 -1
  67. package/esm2015/tokens/is-mobile-resolution.js +4 -3
  68. package/esm2015/utils/dom/get-viewport-height.js +21 -0
  69. package/esm2015/utils/dom/get-viewport-width.js +21 -0
  70. package/esm2015/utils/dom/index.js +3 -1
  71. package/esm2015/utils/format/format-number.js +2 -1
  72. package/esm2015/utils/index.js +2 -1
  73. package/esm2015/utils/mask/create-number-mask.js +4 -2
  74. package/esm2015/utils/mobile/index.js +2 -0
  75. package/esm2015/utils/mobile/is-mobile.js +5 -0
  76. package/esm2015/utils/mobile/taiga-ui-core-utils-mobile.js +5 -0
  77. package/esm5/components/data-list/data-list.component.js +3 -2
  78. package/esm5/components/dialog/dialog.providers.js +4 -2
  79. package/esm5/components/dropdown-box/dropdown-box.component.js +7 -6
  80. package/esm5/components/hints-host/hint-box/hint-box.component.js +3 -2
  81. package/esm5/components/primitive-textfield/primitive-textfield.module.js +2 -4
  82. package/esm5/components/primitive-textfield/value-decoration/value-decoration.component.js +17 -19
  83. package/esm5/components/root/root.component.js +1 -1
  84. package/esm5/constants/version.js +2 -2
  85. package/esm5/interfaces/number-format-settings.js +1 -1
  86. package/esm5/tokens/is-mobile-resolution.js +4 -3
  87. package/esm5/utils/dom/get-viewport-height.js +22 -0
  88. package/esm5/utils/dom/get-viewport-width.js +22 -0
  89. package/esm5/utils/dom/index.js +3 -1
  90. package/esm5/utils/format/format-number.js +2 -1
  91. package/esm5/utils/index.js +2 -1
  92. package/esm5/utils/mask/create-number-mask.js +4 -2
  93. package/esm5/utils/mobile/index.js +2 -0
  94. package/esm5/utils/mobile/is-mobile.js +6 -0
  95. package/esm5/utils/mobile/taiga-ui-core-utils-mobile.js +5 -0
  96. package/fesm2015/taiga-ui-core-components-data-list.js +2 -2
  97. package/fesm2015/taiga-ui-core-components-data-list.js.map +1 -1
  98. package/fesm2015/taiga-ui-core-components-dialog.js +3 -1
  99. package/fesm2015/taiga-ui-core-components-dialog.js.map +1 -1
  100. package/fesm2015/taiga-ui-core-components-dropdown-box.js +6 -5
  101. package/fesm2015/taiga-ui-core-components-dropdown-box.js.map +1 -1
  102. package/fesm2015/taiga-ui-core-components-hints-host.js +2 -1
  103. package/fesm2015/taiga-ui-core-components-hints-host.js.map +1 -1
  104. package/fesm2015/taiga-ui-core-components-primitive-textfield.js +17 -19
  105. package/fesm2015/taiga-ui-core-components-primitive-textfield.js.map +1 -1
  106. package/fesm2015/taiga-ui-core-components-root.js +1 -1
  107. package/fesm2015/taiga-ui-core-constants.js +1 -1
  108. package/fesm2015/taiga-ui-core-constants.js.map +1 -1
  109. package/fesm2015/taiga-ui-core-tokens.js +3 -3
  110. package/fesm2015/taiga-ui-core-tokens.js.map +1 -1
  111. package/fesm2015/taiga-ui-core-utils-dom.js +43 -1
  112. package/fesm2015/taiga-ui-core-utils-dom.js.map +1 -1
  113. package/fesm2015/taiga-ui-core-utils-format.js +1 -0
  114. package/fesm2015/taiga-ui-core-utils-format.js.map +1 -1
  115. package/fesm2015/taiga-ui-core-utils-mask.js +3 -1
  116. package/fesm2015/taiga-ui-core-utils-mask.js.map +1 -1
  117. package/fesm2015/taiga-ui-core-utils-mobile.js +12 -0
  118. package/fesm2015/taiga-ui-core-utils-mobile.js.map +1 -0
  119. package/fesm2015/taiga-ui-core-utils.js +1 -0
  120. package/fesm2015/taiga-ui-core-utils.js.map +1 -1
  121. package/fesm5/taiga-ui-core-components-data-list.js +2 -1
  122. package/fesm5/taiga-ui-core-components-data-list.js.map +1 -1
  123. package/fesm5/taiga-ui-core-components-dialog.js +3 -1
  124. package/fesm5/taiga-ui-core-components-dialog.js.map +1 -1
  125. package/fesm5/taiga-ui-core-components-dropdown-box.js +6 -5
  126. package/fesm5/taiga-ui-core-components-dropdown-box.js.map +1 -1
  127. package/fesm5/taiga-ui-core-components-hints-host.js +2 -1
  128. package/fesm5/taiga-ui-core-components-hints-host.js.map +1 -1
  129. package/fesm5/taiga-ui-core-components-primitive-textfield.js +17 -19
  130. package/fesm5/taiga-ui-core-components-primitive-textfield.js.map +1 -1
  131. package/fesm5/taiga-ui-core-components-root.js +1 -1
  132. package/fesm5/taiga-ui-core-constants.js +1 -1
  133. package/fesm5/taiga-ui-core-constants.js.map +1 -1
  134. package/fesm5/taiga-ui-core-tokens.js +3 -3
  135. package/fesm5/taiga-ui-core-tokens.js.map +1 -1
  136. package/fesm5/taiga-ui-core-utils-dom.js +45 -1
  137. package/fesm5/taiga-ui-core-utils-dom.js.map +1 -1
  138. package/fesm5/taiga-ui-core-utils-format.js +1 -0
  139. package/fesm5/taiga-ui-core-utils-format.js.map +1 -1
  140. package/fesm5/taiga-ui-core-utils-mask.js +3 -1
  141. package/fesm5/taiga-ui-core-utils-mask.js.map +1 -1
  142. package/fesm5/taiga-ui-core-utils-mobile.js +13 -0
  143. package/fesm5/taiga-ui-core-utils-mobile.js.map +1 -0
  144. package/fesm5/taiga-ui-core-utils.js +1 -0
  145. package/fesm5/taiga-ui-core-utils.js.map +1 -1
  146. package/package.json +4 -4
  147. package/tokens/taiga-ui-core-tokens.metadata.json +1 -1
  148. package/utils/dom/get-viewport-height.d.ts +18 -0
  149. package/utils/dom/get-viewport-width.d.ts +18 -0
  150. package/utils/dom/index.d.ts +2 -0
  151. package/utils/dom/taiga-ui-core-utils-dom.metadata.json +1 -1
  152. package/utils/index.d.ts +1 -0
  153. package/utils/mobile/index.d.ts +1 -0
  154. package/utils/mobile/is-mobile.d.ts +2 -0
  155. package/utils/mobile/package.json +13 -0
  156. package/utils/mobile/taiga-ui-core-utils-mobile.d.ts +4 -0
  157. package/utils/mobile/taiga-ui-core-utils-mobile.metadata.json +1 -0
  158. package/utils/taiga-ui-core-utils.metadata.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-core-utils-dom.js","sources":["ng://@taiga-ui/core/utils/dom/are-css-vars-supported.ts","ng://@taiga-ui/core/utils/dom/check-fixed-position.ts","ng://@taiga-ui/core/utils/dom/get-safe-area-size.ts","ng://@taiga-ui/core/utils/dom/get-screen-width.ts","ng://@taiga-ui/core/utils/dom/process-icon.ts","ng://@taiga-ui/core/utils/dom/taiga-ui-core-utils-dom.ts"],"sourcesContent":["import {isEdgeOlderThan} from '@taiga-ui/cdk';\n\n/**\n * TODO: 3.0 remove this function\n */\nexport function areCssVarsSupported(cssRef: typeof CSS, userAgent: string): boolean {\n return cssRef.supports('(--a: 0)') && !isEdgeOlderThan(17, userAgent);\n}\n","export function checkFixedPosition(element: HTMLElement | null): boolean {\n if (!element || typeof getComputedStyle === 'undefined') {\n return false;\n }\n\n const style = getComputedStyle(element);\n\n return (\n style.getPropertyValue('position') === 'fixed' ||\n checkFixedPosition(element.parentElement)\n );\n}\n","/**\n * Calculates size of safe area on mobile devices (status bars)\n *\n * ATTENTION: Only use in browser environment\n */\nexport function getSafeAreaSize(): number {\n if (!CSS.supports('padding-top: env(safe-area-inset-top)')) {\n return 0;\n }\n\n const div = document.createElement('div');\n\n div.style.paddingTop = 'env(safe-area-inset-top)';\n document.body.appendChild(div);\n\n const safeAreaSize = parseInt(window.getComputedStyle(div).paddingTop!, 10) || 0;\n\n document.body.removeChild(div);\n\n return safeAreaSize;\n}\n","export function getScreenWidth(documentRef: Document): number {\n return Math.max(\n documentRef.documentElement.clientWidth,\n documentRef.defaultView ? documentRef.defaultView.innerWidth : 0,\n );\n}\n","const WIDTH_SEARCH = 'width=\"';\nconst HEIGHT_SEARCH = 'height=\"';\nconst START = '<svg';\n\nexport function processIcon(source: string, name: string): string {\n if (source.includes(`id=\"${name}\"`)) {\n return source;\n }\n\n const src = source.slice(Math.max(0, source.indexOf(START)));\n const attributes = src.slice(0, Math.max(0, src.indexOf('>')));\n\n if (\n !attributes ||\n !attributes.includes(WIDTH_SEARCH) ||\n !attributes.includes(HEIGHT_SEARCH)\n ) {\n return `${src.replace(\n START,\n `<svg xmlns=\"http://www.w3.org/2000/svg\"><g id=\"${name}\" xmlns=\"http://www.w3.org/2000/svg\"><svg`,\n )}</g></svg>`;\n }\n\n const indexOfWidth = attributes.indexOf(WIDTH_SEARCH);\n const indexOfHeight = attributes.indexOf(HEIGHT_SEARCH);\n const widthOffset = indexOfWidth + WIDTH_SEARCH.length;\n const heightOffset = indexOfHeight + HEIGHT_SEARCH.length;\n const widthString = attributes.slice(\n widthOffset,\n attributes.indexOf('\"', widthOffset),\n );\n const heightString = attributes.slice(\n heightOffset,\n attributes.indexOf('\"', heightOffset),\n );\n\n if (\n !heightString ||\n !widthString ||\n widthString.includes('%') ||\n heightString.includes('%') ||\n widthString.includes('em') ||\n heightString.includes('em')\n ) {\n return src.replace(START, `<svg id=\"${name}\"`);\n }\n\n const width = parseInt(widthString, 10);\n const height = parseInt(heightString, 10);\n\n return `<g id=\"${name}\" xmlns=\"http://www.w3.org/2000/svg\"><svg x=\"50%\" y=\"50%\" width=\"${\n width / 16\n }em\" height=\"${\n height / 16\n }em\" overflow=\"visible\" viewBox=\"0 0 ${width} ${height}\"><svg x=\"${-width / 2}\" y=\"${\n -height / 2\n }\">${src}</svg></svg></g>`;\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-core-utils-dom.js","sources":["ng://@taiga-ui/core/utils/dom/are-css-vars-supported.ts","ng://@taiga-ui/core/utils/dom/check-fixed-position.ts","ng://@taiga-ui/core/utils/dom/get-safe-area-size.ts","ng://@taiga-ui/core/utils/dom/get-screen-width.ts","ng://@taiga-ui/core/utils/dom/get-viewport-height.ts","ng://@taiga-ui/core/utils/dom/get-viewport-width.ts","ng://@taiga-ui/core/utils/dom/process-icon.ts","ng://@taiga-ui/core/utils/dom/taiga-ui-core-utils-dom.ts"],"sourcesContent":["import {isEdgeOlderThan} from '@taiga-ui/cdk';\n\n/**\n * TODO: 3.0 remove this function\n */\nexport function areCssVarsSupported(cssRef: typeof CSS, userAgent: string): boolean {\n return cssRef.supports('(--a: 0)') && !isEdgeOlderThan(17, userAgent);\n}\n","export function checkFixedPosition(element: HTMLElement | null): boolean {\n if (!element || typeof getComputedStyle === 'undefined') {\n return false;\n }\n\n const style = getComputedStyle(element);\n\n return (\n style.getPropertyValue('position') === 'fixed' ||\n checkFixedPosition(element.parentElement)\n );\n}\n","/**\n * Calculates size of safe area on mobile devices (status bars)\n *\n * ATTENTION: Only use in browser environment\n */\nexport function getSafeAreaSize(): number {\n if (!CSS.supports('padding-top: env(safe-area-inset-top)')) {\n return 0;\n }\n\n const div = document.createElement('div');\n\n div.style.paddingTop = 'env(safe-area-inset-top)';\n document.body.appendChild(div);\n\n const safeAreaSize = parseInt(window.getComputedStyle(div).paddingTop!, 10) || 0;\n\n document.body.removeChild(div);\n\n return safeAreaSize;\n}\n","export function getScreenWidth(documentRef: Document): number {\n return Math.max(\n documentRef.documentElement.clientWidth,\n documentRef.defaultView ? documentRef.defaultView.innerWidth : 0,\n );\n}\n","/**\n * @description:\n * Cross-browser @media (height)\n *\n * 1. window.innerWidth\n * 1.1. gets CSS viewport @media (height) which include scrollbars\n * 1.2. initial-scale and zoom variations may cause mobile values to\n * wrongly scale down to what PPK calls the visual\n * viewport and be smaller than the @media values\n * 1.3. zoom may cause values to be 1px off due to native rounding\n *\n * 2. document.documentElement.clientHeight\n * 2.1. equals CSS viewport width minus scrollbar width\n * 2.2. matches @media (height) when there is no scrollbar\n * 2.3. available cross-browser\n * 2.4. inaccurate if doctype is missing\n */\nexport function tuiGetViewportHeight({document, innerHeight}: Window): number {\n return Math.max(document.documentElement.clientHeight || 0, innerHeight || 0);\n}\n","/**\n * @description:\n * Cross-browser @media (width)\n *\n * 1. window.innerWidth\n * 1.1. gets CSS viewport @media (width) which include scrollbars\n * 1.2. initial-scale and zoom variations may cause mobile values to\n * wrongly scale down to what PPK calls the visual\n * viewport and be smaller than the @media values\n * 1.3. zoom may cause values to be 1px off due to native rounding\n *\n * 2. document.documentElement.clientWidth\n * 2.1. equals CSS viewport width minus scrollbar width\n * 2.2. matches @media (width) when there is no scrollbar\n * 2.3. available cross-browser\n * 2.4. inaccurate if doctype is missing\n */\nexport function tuiGetViewportWidth({document, innerWidth}: Window): number {\n return Math.max(document.documentElement.clientWidth || 0, innerWidth || 0);\n}\n","const WIDTH_SEARCH = 'width=\"';\nconst HEIGHT_SEARCH = 'height=\"';\nconst START = '<svg';\n\nexport function processIcon(source: string, name: string): string {\n if (source.includes(`id=\"${name}\"`)) {\n return source;\n }\n\n const src = source.slice(Math.max(0, source.indexOf(START)));\n const attributes = src.slice(0, Math.max(0, src.indexOf('>')));\n\n if (\n !attributes ||\n !attributes.includes(WIDTH_SEARCH) ||\n !attributes.includes(HEIGHT_SEARCH)\n ) {\n return `${src.replace(\n START,\n `<svg xmlns=\"http://www.w3.org/2000/svg\"><g id=\"${name}\" xmlns=\"http://www.w3.org/2000/svg\"><svg`,\n )}</g></svg>`;\n }\n\n const indexOfWidth = attributes.indexOf(WIDTH_SEARCH);\n const indexOfHeight = attributes.indexOf(HEIGHT_SEARCH);\n const widthOffset = indexOfWidth + WIDTH_SEARCH.length;\n const heightOffset = indexOfHeight + HEIGHT_SEARCH.length;\n const widthString = attributes.slice(\n widthOffset,\n attributes.indexOf('\"', widthOffset),\n );\n const heightString = attributes.slice(\n heightOffset,\n attributes.indexOf('\"', heightOffset),\n );\n\n if (\n !heightString ||\n !widthString ||\n widthString.includes('%') ||\n heightString.includes('%') ||\n widthString.includes('em') ||\n heightString.includes('em')\n ) {\n return src.replace(START, `<svg id=\"${name}\"`);\n }\n\n const width = parseInt(widthString, 10);\n const height = parseInt(heightString, 10);\n\n return `<g id=\"${name}\" xmlns=\"http://www.w3.org/2000/svg\"><svg x=\"50%\" y=\"50%\" width=\"${\n width / 16\n }em\" height=\"${\n height / 16\n }em\" overflow=\"visible\" viewBox=\"0 0 ${width} ${height}\"><svg x=\"${-width / 2}\" y=\"${\n -height / 2\n }\">${src}</svg></svg></g>`;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -48,6 +48,7 @@ function getFractionPartPadded(value, precision) {
48
48
  : fractionPartPadded;
49
49
  }
50
50
 
51
+ // TODO: refactor later to `formatNumber(value: number, options: Partial<AllTheStuff>)`
51
52
  /**
52
53
  * Formats number adding a thousand separators and correct decimal separator
53
54
  * padding decimal part with zeroes to given length
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-core-utils-format.js","sources":["ng://@taiga-ui/core/utils/format/capitalize.ts","ng://@taiga-ui/core/utils/format/capitalize-first-letter.ts","ng://@taiga-ui/core/utils/format/number-to-string-without-exp.ts","ng://@taiga-ui/core/utils/format/get-fractional-part-padded.ts","ng://@taiga-ui/core/utils/format/format-number.ts","ng://@taiga-ui/core/utils/format/format-phone.ts","ng://@taiga-ui/core/utils/format/other-decimal-symbol.ts","ng://@taiga-ui/core/utils/format/pluralize.ts","ng://@taiga-ui/core/utils/format/pluralize-to-icu.ts","ng://@taiga-ui/core/utils/format/taiga-ui-core-utils-format.ts"],"sourcesContent":["/**\n * Capitalizes a given string, replacing it with a lowercase string and making\n * the first letter of each word uppercase.\n *\n * @param value the input string\n * @return the capitalized string\n */\nexport function capitalize(value: string): string {\n return value.toLowerCase().replace(/(?:^|\\s)\\S/g, char => char.toUpperCase());\n}\n","export function capitalizeFirstLetter(value: string): string {\n return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n}\n","/**\n * Convert number to string with replacing exponent part on decimals\n *\n * @param value the number\n * @return string representation of a number\n */\nexport function numberToStringWithoutExp(value: number): string {\n const valueAsString = String(value);\n const [numberPart, expPart] = valueAsString.split('e-');\n\n let valueWithoutExp = valueAsString;\n\n if (expPart) {\n const [, fractionalPart] = numberPart.split('.');\n const decimalDigits = Number(expPart) + (fractionalPart?.length || 0);\n\n valueWithoutExp = value.toFixed(decimalDigits);\n }\n\n return valueWithoutExp;\n}\n","import {numberToStringWithoutExp} from './number-to-string-without-exp';\n\n/**\n * Return fractional part of number\n *\n * @param value the number\n * @param precision number of digits of decimal part, null to keep untouched\n * @return the fractional part of number\n */\nexport function getFractionPartPadded(value: number, precision?: number | null): string {\n const [, fractionPartPadded = ''] = numberToStringWithoutExp(value).split('.');\n\n return typeof precision === 'number'\n ? fractionPartPadded.slice(0, Math.max(0, precision))\n : fractionPartPadded;\n}\n","import {CHAR_HYPHEN, CHAR_NO_BREAK_SPACE} from '@taiga-ui/cdk';\n\nimport {getFractionPartPadded} from './get-fractional-part-padded';\n\n/**\n * Formats number adding a thousand separators and correct decimal separator\n * padding decimal part with zeroes to given length\n *\n * @param value the input number\n * @param decimalLimit number of digits of decimal part, null to keep untouched\n * @param decimalSeparator separator between the integer and the decimal part\n * @param thousandSeparator separator between thousands\n * @param zeroPadding enable zeros at the end of decimal part\n * @return the formatted string\n */\nexport function formatNumber(\n value: number,\n decimalLimit: number | null = null,\n decimalSeparator: string = ',',\n thousandSeparator: string = CHAR_NO_BREAK_SPACE,\n zeroPadding: boolean = true,\n): string {\n const integerPartString = String(Math.floor(Math.abs(value)));\n\n let fractionPartPadded = getFractionPartPadded(value, decimalLimit);\n\n if (decimalLimit !== null) {\n if (zeroPadding) {\n const zeroPaddingSize: number = Math.max(\n decimalLimit - fractionPartPadded.length,\n 0,\n );\n const zeroPartString = '0'.repeat(zeroPaddingSize);\n\n fractionPartPadded = `${fractionPartPadded}${zeroPartString}`;\n } else {\n fractionPartPadded = fractionPartPadded.replace(/0*$/, '');\n }\n }\n\n const remainder = integerPartString.length % 3;\n const sign = value < 0 ? CHAR_HYPHEN : '';\n let result = sign + integerPartString.charAt(0);\n\n for (let i = 1; i < integerPartString.length; i++) {\n if (i % 3 === remainder && integerPartString.length > 3) {\n result += thousandSeparator;\n }\n\n result += integerPartString.charAt(i);\n }\n\n return fractionPartPadded ? result + decimalSeparator + fractionPartPadded : result;\n}\n","import {CHAR_PLUS} from '@taiga-ui/cdk';\n\n/**\n * Formats a string with the phone format +7XXXXXXXXXXXX or XXXXXXXXXXXX,\n * adding parentheses and hyphens.\n *\n * @param value the input string\n * @param countryCode a country code\n * @param phoneMask a phone number mask\n * @return the formatted phone string of the form +7 XXX XXX-XX-XX\n */\nexport function formatPhone(\n value: string,\n countryCode: string,\n phoneMask: string,\n): string {\n if (!value) {\n return '';\n }\n\n let result = countryCode;\n\n countryCode = countryCode.replace(/[()]/g, '');\n\n if (!value.startsWith(countryCode)) {\n value = countryCode + value.replace(CHAR_PLUS, '');\n }\n\n const splitPhoneMask = phoneMask.split('');\n const splitValue = value.slice(countryCode.length).split('');\n\n result += ' ';\n\n if (splitValue.length === 0) {\n return result;\n }\n\n for (let i = 0; i < splitPhoneMask.length; i++) {\n if (splitValue.length === 0) {\n break;\n }\n\n if (splitPhoneMask[i] === '#') {\n result += splitValue[0] || '';\n splitValue.splice(0, 1);\n } else {\n result += splitPhoneMask[i];\n }\n }\n\n return result;\n}\n","import {TuiDecimalSymbol} from '@taiga-ui/core/types';\n\nexport function otherDecimalSymbol(symbol: TuiDecimalSymbol): TuiDecimalSymbol {\n return symbol === '.' ? ',' : '.';\n}\n","import {TuiPluralize} from '@taiga-ui/core/types';\n\n/**\n * Selects the correct plural form to display.\n *\n * @param value the input number\n * @param args an array of three plural forms, e.g. ['год', 'года', 'лет']\n * @deprecated This implementation targets Russian.\n * Use https://angular.io/api/common/NgPlural for your implementations.\n */\nexport function pluralize(value: number, [one, few, many]: TuiPluralize): string {\n const ten = value % 10;\n const hundred = value % 100;\n\n // 1, 21, 101, 121, но не 11, 111, 211...\n if (ten === 1 && hundred !== 11) {\n return one;\n }\n\n // 2, 3, 4, 22, 33, 44, 152, 163, 174, но не 12, 13, 14, 112, 213, 314...\n if (ten >= 2 && ten <= 4 && (hundred < 10 || hundred >= 20)) {\n return few;\n }\n\n return many;\n}\n","import {TuiPluralize} from '@taiga-ui/core/types';\n\n// TODO: 3.0 remove in 3.0\n\n/**\n * Temporary util for mapping TuiPluralize array to ICU format\n */\nexport function tuiPluralizeToICU(pluralize: TuiPluralize): Record<string, string> {\n return {\n one: pluralize[0],\n few: pluralize[1],\n many: pluralize[2],\n other: pluralize[2],\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-core-utils-format.js","sources":["ng://@taiga-ui/core/utils/format/capitalize.ts","ng://@taiga-ui/core/utils/format/capitalize-first-letter.ts","ng://@taiga-ui/core/utils/format/number-to-string-without-exp.ts","ng://@taiga-ui/core/utils/format/get-fractional-part-padded.ts","ng://@taiga-ui/core/utils/format/format-number.ts","ng://@taiga-ui/core/utils/format/format-phone.ts","ng://@taiga-ui/core/utils/format/other-decimal-symbol.ts","ng://@taiga-ui/core/utils/format/pluralize.ts","ng://@taiga-ui/core/utils/format/pluralize-to-icu.ts","ng://@taiga-ui/core/utils/format/taiga-ui-core-utils-format.ts"],"sourcesContent":["/**\n * Capitalizes a given string, replacing it with a lowercase string and making\n * the first letter of each word uppercase.\n *\n * @param value the input string\n * @return the capitalized string\n */\nexport function capitalize(value: string): string {\n return value.toLowerCase().replace(/(?:^|\\s)\\S/g, char => char.toUpperCase());\n}\n","export function capitalizeFirstLetter(value: string): string {\n return `${value.charAt(0).toUpperCase()}${value.slice(1)}`;\n}\n","/**\n * Convert number to string with replacing exponent part on decimals\n *\n * @param value the number\n * @return string representation of a number\n */\nexport function numberToStringWithoutExp(value: number): string {\n const valueAsString = String(value);\n const [numberPart, expPart] = valueAsString.split('e-');\n\n let valueWithoutExp = valueAsString;\n\n if (expPart) {\n const [, fractionalPart] = numberPart.split('.');\n const decimalDigits = Number(expPart) + (fractionalPart?.length || 0);\n\n valueWithoutExp = value.toFixed(decimalDigits);\n }\n\n return valueWithoutExp;\n}\n","import {numberToStringWithoutExp} from './number-to-string-without-exp';\n\n/**\n * Return fractional part of number\n *\n * @param value the number\n * @param precision number of digits of decimal part, null to keep untouched\n * @return the fractional part of number\n */\nexport function getFractionPartPadded(value: number, precision?: number | null): string {\n const [, fractionPartPadded = ''] = numberToStringWithoutExp(value).split('.');\n\n return typeof precision === 'number'\n ? fractionPartPadded.slice(0, Math.max(0, precision))\n : fractionPartPadded;\n}\n","import {CHAR_HYPHEN, CHAR_NO_BREAK_SPACE} from '@taiga-ui/cdk';\n\nimport {getFractionPartPadded} from './get-fractional-part-padded';\n\n// TODO: refactor later to `formatNumber(value: number, options: Partial<AllTheStuff>)`\n/**\n * Formats number adding a thousand separators and correct decimal separator\n * padding decimal part with zeroes to given length\n *\n * @param value the input number\n * @param decimalLimit number of digits of decimal part, null to keep untouched\n * @param decimalSeparator separator between the integer and the decimal part\n * @param thousandSeparator separator between thousands\n * @param zeroPadding enable zeros at the end of decimal part\n * @return the formatted string\n */\nexport function formatNumber(\n value: number,\n decimalLimit: number | null = null,\n decimalSeparator: string = ',',\n thousandSeparator: string = CHAR_NO_BREAK_SPACE,\n zeroPadding: boolean = true,\n): string {\n const integerPartString = String(Math.floor(Math.abs(value)));\n\n let fractionPartPadded = getFractionPartPadded(value, decimalLimit);\n\n if (decimalLimit !== null) {\n if (zeroPadding) {\n const zeroPaddingSize: number = Math.max(\n decimalLimit - fractionPartPadded.length,\n 0,\n );\n const zeroPartString = '0'.repeat(zeroPaddingSize);\n\n fractionPartPadded = `${fractionPartPadded}${zeroPartString}`;\n } else {\n fractionPartPadded = fractionPartPadded.replace(/0*$/, '');\n }\n }\n\n const remainder = integerPartString.length % 3;\n const sign = value < 0 ? CHAR_HYPHEN : '';\n let result = sign + integerPartString.charAt(0);\n\n for (let i = 1; i < integerPartString.length; i++) {\n if (i % 3 === remainder && integerPartString.length > 3) {\n result += thousandSeparator;\n }\n\n result += integerPartString.charAt(i);\n }\n\n return fractionPartPadded ? result + decimalSeparator + fractionPartPadded : result;\n}\n","import {CHAR_PLUS} from '@taiga-ui/cdk';\n\n/**\n * Formats a string with the phone format +7XXXXXXXXXXXX or XXXXXXXXXXXX,\n * adding parentheses and hyphens.\n *\n * @param value the input string\n * @param countryCode a country code\n * @param phoneMask a phone number mask\n * @return the formatted phone string of the form +7 XXX XXX-XX-XX\n */\nexport function formatPhone(\n value: string,\n countryCode: string,\n phoneMask: string,\n): string {\n if (!value) {\n return '';\n }\n\n let result = countryCode;\n\n countryCode = countryCode.replace(/[()]/g, '');\n\n if (!value.startsWith(countryCode)) {\n value = countryCode + value.replace(CHAR_PLUS, '');\n }\n\n const splitPhoneMask = phoneMask.split('');\n const splitValue = value.slice(countryCode.length).split('');\n\n result += ' ';\n\n if (splitValue.length === 0) {\n return result;\n }\n\n for (let i = 0; i < splitPhoneMask.length; i++) {\n if (splitValue.length === 0) {\n break;\n }\n\n if (splitPhoneMask[i] === '#') {\n result += splitValue[0] || '';\n splitValue.splice(0, 1);\n } else {\n result += splitPhoneMask[i];\n }\n }\n\n return result;\n}\n","import {TuiDecimalSymbol} from '@taiga-ui/core/types';\n\nexport function otherDecimalSymbol(symbol: TuiDecimalSymbol): TuiDecimalSymbol {\n return symbol === '.' ? ',' : '.';\n}\n","import {TuiPluralize} from '@taiga-ui/core/types';\n\n/**\n * Selects the correct plural form to display.\n *\n * @param value the input number\n * @param args an array of three plural forms, e.g. ['год', 'года', 'лет']\n * @deprecated This implementation targets Russian.\n * Use https://angular.io/api/common/NgPlural for your implementations.\n */\nexport function pluralize(value: number, [one, few, many]: TuiPluralize): string {\n const ten = value % 10;\n const hundred = value % 100;\n\n // 1, 21, 101, 121, но не 11, 111, 211...\n if (ten === 1 && hundred !== 11) {\n return one;\n }\n\n // 2, 3, 4, 22, 33, 44, 152, 163, 174, но не 12, 13, 14, 112, 213, 314...\n if (ten >= 2 && ten <= 4 && (hundred < 10 || hundred >= 20)) {\n return few;\n }\n\n return many;\n}\n","import {TuiPluralize} from '@taiga-ui/core/types';\n\n// TODO: 3.0 remove in 3.0\n\n/**\n * Temporary util for mapping TuiPluralize array to ICU format\n */\nexport function tuiPluralizeToICU(pluralize: TuiPluralize): Record<string, string> {\n return {\n one: pluralize[0],\n few: pluralize[1],\n many: pluralize[2],\n other: pluralize[2],\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -240,7 +240,9 @@ function convertToMask(strNumber) {
240
240
  }
241
241
  function addThousandsSeparator(strNumber, thousandSymbol) {
242
242
  return strNumber.length > 3
243
- ? strNumber.replace(/\B(?=(\d{3})+(?!\d))/g, thousandSymbol)
243
+ ? // TODO: investigate to disallow potentially catastrophic exponential-time regular expressions.
244
+ // eslint-disable-next-line unicorn/no-unsafe-regex
245
+ strNumber.replace(/\B(?=(\d{3})+(?!\d))/g, thousandSymbol)
244
246
  : strNumber;
245
247
  }
246
248
 
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-core-utils-mask.js","sources":["ng://@taiga-ui/core/utils/mask/create-auto-corrected-money-pipe.ts","ng://@taiga-ui/core/utils/mask/create-correction-mask.ts","ng://@taiga-ui/core/utils/mask/create-number-mask.ts","ng://@taiga-ui/core/utils/mask/enable-auto-correct-decimal-symbol.ts","ng://@taiga-ui/core/utils/mask/masked-money-value-is-empty.ts","ng://@taiga-ui/core/utils/mask/masked-number-string-to-number.ts","ng://@taiga-ui/core/utils/mask/taiga-ui-core-utils-mask.ts"],"sourcesContent":["import {\n CHAR_HYPHEN,\n CHAR_NO_BREAK_SPACE,\n getDocumentOrShadowRoot,\n isNativeFocused,\n isSafari,\n tuiAssert,\n} from '@taiga-ui/cdk';\nimport {TuiTextMaskPipeHandler} from '@taiga-ui/core/mask';\nimport {TuiDecimalSymbol} from '@taiga-ui/core/types';\n\n/**\n * Used to finish a number with zeros to a given precision\n */\nexport function tuiCreateAutoCorrectedNumberPipe(\n decimalLimit: number = 0,\n decimalSymbol: TuiDecimalSymbol = ',',\n thousandSymbol: string = CHAR_NO_BREAK_SPACE,\n nativeInput?: HTMLInputElement | null,\n allowNegative?: boolean,\n isIOS = false,\n): TuiTextMaskPipeHandler {\n tuiAssert.assert(Number.isInteger(decimalLimit));\n tuiAssert.assert(decimalLimit >= 0);\n\n // Guess for which browser I need this :)\n let previousCaret = -1;\n const unlucky = (!!nativeInput && isSafari(nativeInput)) || isIOS;\n\n if (nativeInput && unlucky) {\n nativeInput.addEventListener('beforeinput', () => {\n previousCaret = nativeInput.selectionStart || 0;\n });\n }\n\n return (conformedValue, config) => {\n // Removing everything by selecting and pressing '-'\n if (!conformedValue && config.rawValue === CHAR_HYPHEN && allowNegative) {\n return CHAR_HYPHEN;\n }\n\n // remove these hacks after text mask library has changed\n if (nativeInput && unlucky && isNativeFocused(nativeInput)) {\n const caret = calculateSafariCaret(\n config.previousConformedValue,\n conformedValue,\n previousCaret,\n );\n\n setTimeout(() => {\n nativeInput.setSelectionRange(caret, caret);\n });\n }\n\n if (\n nativeInput &&\n nativeInput.ownerDocument !== getDocumentOrShadowRoot(nativeInput) &&\n isNativeFocused(nativeInput) &&\n config.currentCaretPosition\n ) {\n const realCaretPosition =\n config.currentCaretPosition +\n calculateCaretGap(\n config.previousConformedValue,\n conformedValue,\n thousandSymbol,\n );\n\n setTimeout(() => {\n nativeInput.setSelectionRange(realCaretPosition, realCaretPosition);\n });\n }\n\n if (conformedValue === '' || !decimalLimit) {\n return {value: conformedValue};\n }\n\n const withDecimalSymbol = addDecimalSymbolIfNeeded(conformedValue, decimalSymbol);\n const decimalPart = withDecimalSymbol.split(decimalSymbol)[1];\n const zeroPaddingSize = decimalLimit - decimalPart.length;\n\n return {\n value: withDecimalSymbol + '0'.repeat(zeroPaddingSize),\n };\n };\n}\n\nfunction addDecimalSymbolIfNeeded(\n value: string,\n decimalSymbol: TuiDecimalSymbol = ',',\n): string {\n return !value.includes(decimalSymbol) ? value + decimalSymbol : value;\n}\n\nfunction calculateSafariCaret(\n previousValue: string = '',\n current: string,\n previousCaret: number,\n decimalSymbol: string = ',',\n): number {\n const tailRegex = new RegExp(`${decimalSymbol}.+`);\n const previousWithoutTail = previousValue.replace(tailRegex, '');\n const currentWithoutTail = current.replace(tailRegex, '');\n\n const pasteOrCutOperation =\n Math.abs(previousWithoutTail.length - currentWithoutTail.length) > 2;\n\n if (pasteOrCutOperation) {\n return current.length;\n }\n\n if (previousValue.length === current.length) {\n if (previousValue.indexOf(decimalSymbol) <= previousCaret) {\n return calculateChangedTailIndex(previousValue, current);\n }\n\n return previousWithoutTail === currentWithoutTail\n ? previousCaret - 1\n : previousCaret + 1;\n }\n\n if (previousValue.length === 0) {\n return 1;\n }\n\n const changeLength = current.length - previousValue.length;\n\n return previousCaret + changeLength;\n}\n\nfunction calculateChangedTailIndex(previous: string, current: string): number {\n for (let i = 0; i < current.length; i++) {\n if (previous[i] !== current[i]) {\n return current[i] === '0' ? i : i + 1;\n }\n }\n\n return current.length;\n}\n\nfunction calculateCaretGap(\n previousValue: string = '',\n current: string,\n thousandSymbol: string,\n): number {\n const pasteOrCutOperation = Math.abs(previousValue.length - current.length) > 2;\n\n if (pasteOrCutOperation) {\n return 0;\n }\n\n const wereSpaces = previousValue.split(thousandSymbol).length;\n const nowSpaces = current.split(thousandSymbol).length;\n\n return nowSpaces - wereSpaces;\n}\n","import {tuiAssert} from '@taiga-ui/cdk';\nimport {MASK_CARET_TRAP} from '@taiga-ui/core/constants';\nimport {\n TuiTextMaskCorrectionHandler,\n TuiTextMaskList,\n TuiTextMaskListHandler,\n} from '@taiga-ui/core/mask';\n\nconst ASSERTION = 'Correction function must return single char or null';\n\nexport function tuiCreateCorrectionMask(\n allowed: RegExp,\n correctionHandler: TuiTextMaskCorrectionHandler,\n): TuiTextMaskListHandler {\n return rawValue => {\n const mask = rawValue.split('').reduce<TuiTextMaskList>((result, char, index) => {\n const corrected = correctionHandler(char, index);\n\n tuiAssert.assert(corrected === null || corrected.length === 1, ASSERTION);\n\n if (!allowed.test(char) && !corrected) {\n return result;\n }\n\n if (allowed.test(char)) {\n return [...result, allowed];\n }\n\n if (corrected) {\n return [...result, corrected, MASK_CARET_TRAP];\n }\n\n return result;\n }, []);\n const lastIndex = mask.lastIndexOf(MASK_CARET_TRAP);\n const filtered = mask.filter(\n (item, index) => item !== MASK_CARET_TRAP || index === lastIndex,\n );\n\n return filtered.some(item => item !== allowed)\n ? [...filtered, allowed]\n : filtered;\n };\n}\n","import {CHAR_EN_DASH, CHAR_HYPHEN, CHAR_NO_BREAK_SPACE, tuiAssert} from '@taiga-ui/cdk';\nimport {\n MASK_CARET_TRAP,\n TUI_DIGIT_REGEXP,\n TUI_LEADING_ZEROES_REGEXP,\n TUI_NON_DIGITS_REGEXP,\n} from '@taiga-ui/core/constants';\nimport {TuiNumberMaskOptions, TuiTextMaskListHandler} from '@taiga-ui/core/mask';\nimport {TuiDecimalSymbol} from '@taiga-ui/core/types';\nimport {otherDecimalSymbol} from '@taiga-ui/core/utils/format';\n\nconst NON_ZERO_DIGIT = /[1-9]/;\n\n/**\n * Adaptation for {@link https://github.com/text-mask/text-mask/tree/master/addons#createnumbermask `createNumberMask`}\n */\nexport function tuiCreateNumberMask({\n allowDecimal = false,\n decimalSymbol = ',',\n thousandSymbol = CHAR_NO_BREAK_SPACE,\n autoCorrectDecimalSymbol = true,\n decimalLimit = 2,\n requireDecimal = false,\n allowNegative = false,\n integerLimit = 0,\n}: TuiNumberMaskOptions = {}): TuiTextMaskListHandler {\n tuiAssert.assert(Number.isInteger(decimalLimit));\n tuiAssert.assert(decimalLimit >= 0);\n tuiAssert.assert(Number.isInteger(integerLimit));\n tuiAssert.assert(integerLimit >= 0);\n\n return (rawValue, {previousConformedValue}) => {\n if (previousConformedValue && requireDecimal) {\n const conformedWithoutSeparator = rawValue.split(thousandSymbol).join('');\n const previousConformedValueWithoutDecimalSymbolAndSeparator =\n previousConformedValue\n .split(thousandSymbol)\n .join('')\n .split(decimalSymbol)\n .join('');\n\n // Forbid removal of decimal separator if decimal part is required\n if (\n conformedWithoutSeparator ===\n previousConformedValueWithoutDecimalSymbolAndSeparator\n ) {\n rawValue = previousConformedValue;\n }\n }\n\n const isNegative =\n (rawValue[0] === CHAR_HYPHEN || rawValue[0] === CHAR_EN_DASH) &&\n allowNegative;\n\n if (\n isDecimalSymbol(rawValue, decimalSymbol, autoCorrectDecimalSymbol) &&\n allowDecimal\n ) {\n return ['0', decimalSymbol, TUI_DIGIT_REGEXP];\n }\n\n if (isNegative) {\n rawValue = rawValue.slice(1);\n }\n\n const decimalIndex = getDecimalSymbolIndex(\n rawValue,\n decimalSymbol,\n autoCorrectDecimalSymbol,\n );\n const hasDecimal = decimalIndex !== -1;\n const integer = hasDecimal ? rawValue.slice(0, decimalIndex) : rawValue;\n const thousandSeparators = integer.match(new RegExp(thousandSymbol, 'g')) || [];\n const integerCapped = integerLimit\n ? integer.slice(0, integerLimit + thousandSeparators.length)\n : integer;\n const integerCappedClean = integerCapped.replace(TUI_NON_DIGITS_REGEXP, '');\n const [leadingZerosMatch] = integerCappedClean.match(\n TUI_LEADING_ZEROES_REGEXP,\n ) || [''];\n const leadingZerosAmount = leadingZerosMatch.length;\n const integerCappedZerosClean = integerCappedClean\n .replace(/^0+(?!\\.|$)/, '')\n .trim();\n const withSeparator = addThousandsSeparator(\n integerCappedZerosClean,\n thousandSymbol,\n );\n const mask = convertToMask(withSeparator);\n\n if ((hasDecimal && allowDecimal) || requireDecimal) {\n const fraction = hasDecimal\n ? convertToMask(\n rawValue.slice(decimalIndex + 1).replace(TUI_NON_DIGITS_REGEXP, ''),\n )\n : [];\n const fractionCapped = decimalLimit\n ? fraction.slice(0, decimalLimit)\n : fraction;\n\n if (rawValue[decimalIndex] !== otherDecimalSymbol(decimalSymbol)) {\n mask.push(MASK_CARET_TRAP);\n }\n\n mask.push(decimalSymbol, MASK_CARET_TRAP, ...fractionCapped);\n\n for (let i = 0; i < decimalLimit - fractionCapped.length; i++) {\n mask.push(TUI_DIGIT_REGEXP);\n }\n }\n\n const isOnlyZeroDigit = mask.length === 1 && integerCappedZerosClean === '0';\n\n if (isNegative) {\n if (mask.length === 0) {\n mask.push(TUI_DIGIT_REGEXP);\n }\n\n mask.unshift(CHAR_HYPHEN);\n }\n\n return preventLeadingZeroes(mask, isOnlyZeroDigit, leadingZerosAmount);\n };\n}\n\nfunction preventLeadingZeroes(\n mask: Array<string | RegExp>,\n isOnlyZeroDigit: boolean = false,\n leadingZerosAmount: number = 0,\n): Array<string | RegExp> {\n if (isOnlyZeroDigit || leadingZerosAmount === 0) {\n return mask;\n }\n\n const firstDigitIndex = mask.indexOf(TUI_DIGIT_REGEXP);\n\n if (firstDigitIndex === -1) {\n return mask;\n }\n\n const secondMaskDigit = mask[firstDigitIndex + 1];\n const isCaretTrap = secondMaskDigit === MASK_CARET_TRAP;\n\n if (isCaretTrap && leadingZerosAmount === 1) {\n return mask;\n } else if (isCaretTrap) {\n mask.unshift(NON_ZERO_DIGIT);\n\n return mask;\n }\n\n mask[firstDigitIndex] = NON_ZERO_DIGIT;\n\n return mask;\n}\n\nfunction getDecimalSymbolIndex(\n str: string,\n decimalSymbol: TuiDecimalSymbol,\n autoCorrectDecimalSymbol: boolean,\n): number {\n if (!autoCorrectDecimalSymbol) {\n return str.lastIndexOf(decimalSymbol);\n }\n\n return Math.max(\n str.lastIndexOf(decimalSymbol),\n str.lastIndexOf(otherDecimalSymbol(decimalSymbol)),\n );\n}\n\nfunction isDecimalSymbol(\n str: string,\n decimalSymbol: TuiDecimalSymbol,\n autoCorrectDecimalSymbol: boolean,\n): boolean {\n if (autoCorrectDecimalSymbol) {\n return /^[,.]$/.test(str);\n }\n\n return str === decimalSymbol;\n}\n\nfunction convertToMask(strNumber: string): Array<string | RegExp> {\n return strNumber\n .split('')\n .map(char => (TUI_DIGIT_REGEXP.test(char) ? TUI_DIGIT_REGEXP : char));\n}\n\nfunction addThousandsSeparator(strNumber: string, thousandSymbol: string): string {\n return strNumber.length > 3\n ? strNumber.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSymbol)\n : strNumber;\n}\n","import {TUI_DECIMAL_SYMBOLS} from '@taiga-ui/core/constants';\nimport {TuiNumberFormatSettings} from '@taiga-ui/core/interfaces';\n\nexport function tuiEnableAutoCorrectDecimalSymbol({\n thousandSeparator,\n}: TuiNumberFormatSettings): boolean {\n return !TUI_DECIMAL_SYMBOLS.includes(thousandSeparator);\n}\n","import {CHAR_HYPHEN} from '@taiga-ui/cdk';\n\nexport function maskedMoneyValueIsEmpty(value: string): boolean {\n switch (value) {\n case '':\n case CHAR_HYPHEN:\n case ',':\n case `${CHAR_HYPHEN},`:\n return true;\n default:\n return false;\n }\n}\n","import {TuiDecimalSymbol} from '@taiga-ui/core/types';\n\nexport function maskedNumberStringToNumber(\n value: string,\n decimalsSymbol: TuiDecimalSymbol,\n thousandSymbol: string,\n): number {\n return parseFloat(\n value.split(thousandSymbol).join('').split(decimalsSymbol).join('.'),\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-core-utils-mask.js","sources":["ng://@taiga-ui/core/utils/mask/create-auto-corrected-money-pipe.ts","ng://@taiga-ui/core/utils/mask/create-correction-mask.ts","ng://@taiga-ui/core/utils/mask/create-number-mask.ts","ng://@taiga-ui/core/utils/mask/enable-auto-correct-decimal-symbol.ts","ng://@taiga-ui/core/utils/mask/masked-money-value-is-empty.ts","ng://@taiga-ui/core/utils/mask/masked-number-string-to-number.ts","ng://@taiga-ui/core/utils/mask/taiga-ui-core-utils-mask.ts"],"sourcesContent":["import {\n CHAR_HYPHEN,\n CHAR_NO_BREAK_SPACE,\n getDocumentOrShadowRoot,\n isNativeFocused,\n isSafari,\n tuiAssert,\n} from '@taiga-ui/cdk';\nimport {TuiTextMaskPipeHandler} from '@taiga-ui/core/mask';\nimport {TuiDecimalSymbol} from '@taiga-ui/core/types';\n\n/**\n * Used to finish a number with zeros to a given precision\n */\nexport function tuiCreateAutoCorrectedNumberPipe(\n decimalLimit: number = 0,\n decimalSymbol: TuiDecimalSymbol = ',',\n thousandSymbol: string = CHAR_NO_BREAK_SPACE,\n nativeInput?: HTMLInputElement | null,\n allowNegative?: boolean,\n isIOS = false,\n): TuiTextMaskPipeHandler {\n tuiAssert.assert(Number.isInteger(decimalLimit));\n tuiAssert.assert(decimalLimit >= 0);\n\n // Guess for which browser I need this :)\n let previousCaret = -1;\n const unlucky = (!!nativeInput && isSafari(nativeInput)) || isIOS;\n\n if (nativeInput && unlucky) {\n nativeInput.addEventListener('beforeinput', () => {\n previousCaret = nativeInput.selectionStart || 0;\n });\n }\n\n return (conformedValue, config) => {\n // Removing everything by selecting and pressing '-'\n if (!conformedValue && config.rawValue === CHAR_HYPHEN && allowNegative) {\n return CHAR_HYPHEN;\n }\n\n // remove these hacks after text mask library has changed\n if (nativeInput && unlucky && isNativeFocused(nativeInput)) {\n const caret = calculateSafariCaret(\n config.previousConformedValue,\n conformedValue,\n previousCaret,\n );\n\n setTimeout(() => {\n nativeInput.setSelectionRange(caret, caret);\n });\n }\n\n if (\n nativeInput &&\n nativeInput.ownerDocument !== getDocumentOrShadowRoot(nativeInput) &&\n isNativeFocused(nativeInput) &&\n config.currentCaretPosition\n ) {\n const realCaretPosition =\n config.currentCaretPosition +\n calculateCaretGap(\n config.previousConformedValue,\n conformedValue,\n thousandSymbol,\n );\n\n setTimeout(() => {\n nativeInput.setSelectionRange(realCaretPosition, realCaretPosition);\n });\n }\n\n if (conformedValue === '' || !decimalLimit) {\n return {value: conformedValue};\n }\n\n const withDecimalSymbol = addDecimalSymbolIfNeeded(conformedValue, decimalSymbol);\n const decimalPart = withDecimalSymbol.split(decimalSymbol)[1];\n const zeroPaddingSize = decimalLimit - decimalPart.length;\n\n return {\n value: withDecimalSymbol + '0'.repeat(zeroPaddingSize),\n };\n };\n}\n\nfunction addDecimalSymbolIfNeeded(\n value: string,\n decimalSymbol: TuiDecimalSymbol = ',',\n): string {\n return !value.includes(decimalSymbol) ? value + decimalSymbol : value;\n}\n\nfunction calculateSafariCaret(\n previousValue: string = '',\n current: string,\n previousCaret: number,\n decimalSymbol: string = ',',\n): number {\n const tailRegex = new RegExp(`${decimalSymbol}.+`);\n const previousWithoutTail = previousValue.replace(tailRegex, '');\n const currentWithoutTail = current.replace(tailRegex, '');\n\n const pasteOrCutOperation =\n Math.abs(previousWithoutTail.length - currentWithoutTail.length) > 2;\n\n if (pasteOrCutOperation) {\n return current.length;\n }\n\n if (previousValue.length === current.length) {\n if (previousValue.indexOf(decimalSymbol) <= previousCaret) {\n return calculateChangedTailIndex(previousValue, current);\n }\n\n return previousWithoutTail === currentWithoutTail\n ? previousCaret - 1\n : previousCaret + 1;\n }\n\n if (previousValue.length === 0) {\n return 1;\n }\n\n const changeLength = current.length - previousValue.length;\n\n return previousCaret + changeLength;\n}\n\nfunction calculateChangedTailIndex(previous: string, current: string): number {\n for (let i = 0; i < current.length; i++) {\n if (previous[i] !== current[i]) {\n return current[i] === '0' ? i : i + 1;\n }\n }\n\n return current.length;\n}\n\nfunction calculateCaretGap(\n previousValue: string = '',\n current: string,\n thousandSymbol: string,\n): number {\n const pasteOrCutOperation = Math.abs(previousValue.length - current.length) > 2;\n\n if (pasteOrCutOperation) {\n return 0;\n }\n\n const wereSpaces = previousValue.split(thousandSymbol).length;\n const nowSpaces = current.split(thousandSymbol).length;\n\n return nowSpaces - wereSpaces;\n}\n","import {tuiAssert} from '@taiga-ui/cdk';\nimport {MASK_CARET_TRAP} from '@taiga-ui/core/constants';\nimport {\n TuiTextMaskCorrectionHandler,\n TuiTextMaskList,\n TuiTextMaskListHandler,\n} from '@taiga-ui/core/mask';\n\nconst ASSERTION = 'Correction function must return single char or null';\n\nexport function tuiCreateCorrectionMask(\n allowed: RegExp,\n correctionHandler: TuiTextMaskCorrectionHandler,\n): TuiTextMaskListHandler {\n return rawValue => {\n const mask = rawValue.split('').reduce<TuiTextMaskList>((result, char, index) => {\n const corrected = correctionHandler(char, index);\n\n tuiAssert.assert(corrected === null || corrected.length === 1, ASSERTION);\n\n if (!allowed.test(char) && !corrected) {\n return result;\n }\n\n if (allowed.test(char)) {\n return [...result, allowed];\n }\n\n if (corrected) {\n return [...result, corrected, MASK_CARET_TRAP];\n }\n\n return result;\n }, []);\n const lastIndex = mask.lastIndexOf(MASK_CARET_TRAP);\n const filtered = mask.filter(\n (item, index) => item !== MASK_CARET_TRAP || index === lastIndex,\n );\n\n return filtered.some(item => item !== allowed)\n ? [...filtered, allowed]\n : filtered;\n };\n}\n","import {CHAR_EN_DASH, CHAR_HYPHEN, CHAR_NO_BREAK_SPACE, tuiAssert} from '@taiga-ui/cdk';\nimport {\n MASK_CARET_TRAP,\n TUI_DIGIT_REGEXP,\n TUI_LEADING_ZEROES_REGEXP,\n TUI_NON_DIGITS_REGEXP,\n} from '@taiga-ui/core/constants';\nimport {TuiNumberMaskOptions, TuiTextMaskListHandler} from '@taiga-ui/core/mask';\nimport {TuiDecimalSymbol} from '@taiga-ui/core/types';\nimport {otherDecimalSymbol} from '@taiga-ui/core/utils/format';\n\nconst NON_ZERO_DIGIT = /[1-9]/;\n\n/**\n * Adaptation for {@link https://github.com/text-mask/text-mask/tree/master/addons#createnumbermask `createNumberMask`}\n */\nexport function tuiCreateNumberMask({\n allowDecimal = false,\n decimalSymbol = ',',\n thousandSymbol = CHAR_NO_BREAK_SPACE,\n autoCorrectDecimalSymbol = true,\n decimalLimit = 2,\n requireDecimal = false,\n allowNegative = false,\n integerLimit = 0,\n}: TuiNumberMaskOptions = {}): TuiTextMaskListHandler {\n tuiAssert.assert(Number.isInteger(decimalLimit));\n tuiAssert.assert(decimalLimit >= 0);\n tuiAssert.assert(Number.isInteger(integerLimit));\n tuiAssert.assert(integerLimit >= 0);\n\n return (rawValue, {previousConformedValue}) => {\n if (previousConformedValue && requireDecimal) {\n const conformedWithoutSeparator = rawValue.split(thousandSymbol).join('');\n const previousConformedValueWithoutDecimalSymbolAndSeparator =\n previousConformedValue\n .split(thousandSymbol)\n .join('')\n .split(decimalSymbol)\n .join('');\n\n // Forbid removal of decimal separator if decimal part is required\n if (\n conformedWithoutSeparator ===\n previousConformedValueWithoutDecimalSymbolAndSeparator\n ) {\n rawValue = previousConformedValue;\n }\n }\n\n const isNegative =\n (rawValue[0] === CHAR_HYPHEN || rawValue[0] === CHAR_EN_DASH) &&\n allowNegative;\n\n if (\n isDecimalSymbol(rawValue, decimalSymbol, autoCorrectDecimalSymbol) &&\n allowDecimal\n ) {\n return ['0', decimalSymbol, TUI_DIGIT_REGEXP];\n }\n\n if (isNegative) {\n rawValue = rawValue.slice(1);\n }\n\n const decimalIndex = getDecimalSymbolIndex(\n rawValue,\n decimalSymbol,\n autoCorrectDecimalSymbol,\n );\n const hasDecimal = decimalIndex !== -1;\n const integer = hasDecimal ? rawValue.slice(0, decimalIndex) : rawValue;\n const thousandSeparators = integer.match(new RegExp(thousandSymbol, 'g')) || [];\n const integerCapped = integerLimit\n ? integer.slice(0, integerLimit + thousandSeparators.length)\n : integer;\n const integerCappedClean = integerCapped.replace(TUI_NON_DIGITS_REGEXP, '');\n const [leadingZerosMatch] = integerCappedClean.match(\n TUI_LEADING_ZEROES_REGEXP,\n ) || [''];\n const leadingZerosAmount = leadingZerosMatch.length;\n const integerCappedZerosClean = integerCappedClean\n .replace(/^0+(?!\\.|$)/, '')\n .trim();\n const withSeparator = addThousandsSeparator(\n integerCappedZerosClean,\n thousandSymbol,\n );\n const mask = convertToMask(withSeparator);\n\n if ((hasDecimal && allowDecimal) || requireDecimal) {\n const fraction = hasDecimal\n ? convertToMask(\n rawValue.slice(decimalIndex + 1).replace(TUI_NON_DIGITS_REGEXP, ''),\n )\n : [];\n const fractionCapped = decimalLimit\n ? fraction.slice(0, decimalLimit)\n : fraction;\n\n if (rawValue[decimalIndex] !== otherDecimalSymbol(decimalSymbol)) {\n mask.push(MASK_CARET_TRAP);\n }\n\n mask.push(decimalSymbol, MASK_CARET_TRAP, ...fractionCapped);\n\n for (let i = 0; i < decimalLimit - fractionCapped.length; i++) {\n mask.push(TUI_DIGIT_REGEXP);\n }\n }\n\n const isOnlyZeroDigit = mask.length === 1 && integerCappedZerosClean === '0';\n\n if (isNegative) {\n if (mask.length === 0) {\n mask.push(TUI_DIGIT_REGEXP);\n }\n\n mask.unshift(CHAR_HYPHEN);\n }\n\n return preventLeadingZeroes(mask, isOnlyZeroDigit, leadingZerosAmount);\n };\n}\n\nfunction preventLeadingZeroes(\n mask: Array<string | RegExp>,\n isOnlyZeroDigit: boolean = false,\n leadingZerosAmount: number = 0,\n): Array<string | RegExp> {\n if (isOnlyZeroDigit || leadingZerosAmount === 0) {\n return mask;\n }\n\n const firstDigitIndex = mask.indexOf(TUI_DIGIT_REGEXP);\n\n if (firstDigitIndex === -1) {\n return mask;\n }\n\n const secondMaskDigit = mask[firstDigitIndex + 1];\n const isCaretTrap = secondMaskDigit === MASK_CARET_TRAP;\n\n if (isCaretTrap && leadingZerosAmount === 1) {\n return mask;\n } else if (isCaretTrap) {\n mask.unshift(NON_ZERO_DIGIT);\n\n return mask;\n }\n\n mask[firstDigitIndex] = NON_ZERO_DIGIT;\n\n return mask;\n}\n\nfunction getDecimalSymbolIndex(\n str: string,\n decimalSymbol: TuiDecimalSymbol,\n autoCorrectDecimalSymbol: boolean,\n): number {\n if (!autoCorrectDecimalSymbol) {\n return str.lastIndexOf(decimalSymbol);\n }\n\n return Math.max(\n str.lastIndexOf(decimalSymbol),\n str.lastIndexOf(otherDecimalSymbol(decimalSymbol)),\n );\n}\n\nfunction isDecimalSymbol(\n str: string,\n decimalSymbol: TuiDecimalSymbol,\n autoCorrectDecimalSymbol: boolean,\n): boolean {\n if (autoCorrectDecimalSymbol) {\n return /^[,.]$/.test(str);\n }\n\n return str === decimalSymbol;\n}\n\nfunction convertToMask(strNumber: string): Array<string | RegExp> {\n return strNumber\n .split('')\n .map(char => (TUI_DIGIT_REGEXP.test(char) ? TUI_DIGIT_REGEXP : char));\n}\n\nfunction addThousandsSeparator(strNumber: string, thousandSymbol: string): string {\n return strNumber.length > 3\n ? // TODO: investigate to disallow potentially catastrophic exponential-time regular expressions.\n // eslint-disable-next-line unicorn/no-unsafe-regex\n strNumber.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSymbol)\n : strNumber;\n}\n","import {TUI_DECIMAL_SYMBOLS} from '@taiga-ui/core/constants';\nimport {TuiNumberFormatSettings} from '@taiga-ui/core/interfaces';\n\nexport function tuiEnableAutoCorrectDecimalSymbol({\n thousandSeparator,\n}: TuiNumberFormatSettings): boolean {\n return !TUI_DECIMAL_SYMBOLS.includes(thousandSeparator);\n}\n","import {CHAR_HYPHEN} from '@taiga-ui/cdk';\n\nexport function maskedMoneyValueIsEmpty(value: string): boolean {\n switch (value) {\n case '':\n case CHAR_HYPHEN:\n case ',':\n case `${CHAR_HYPHEN},`:\n return true;\n default:\n return false;\n }\n}\n","import {TuiDecimalSymbol} from '@taiga-ui/core/types';\n\nexport function maskedNumberStringToNumber(\n value: string,\n decimalsSymbol: TuiDecimalSymbol,\n thousandSymbol: string,\n): number {\n return parseFloat(\n value.split(thousandSymbol).join('').split(decimalsSymbol).join('.'),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { tuiGetViewportWidth } from '@taiga-ui/core/utils/dom';
2
+
3
+ function tuiIsMobile(windowRef, _a) {
4
+ var mobile = _a.mobile;
5
+ return tuiGetViewportWidth(windowRef) <= mobile;
6
+ }
7
+
8
+ /**
9
+ * Generated bundle index. Do not edit.
10
+ */
11
+
12
+ export { tuiIsMobile };
13
+ //# sourceMappingURL=taiga-ui-core-utils-mobile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taiga-ui-core-utils-mobile.js","sources":["ng://@taiga-ui/core/utils/mobile/is-mobile.ts","ng://@taiga-ui/core/utils/mobile/taiga-ui-core-utils-mobile.ts"],"sourcesContent":["import {TuiMedia} from '@taiga-ui/core/interfaces';\nimport {tuiGetViewportWidth} from '@taiga-ui/core/utils/dom';\n\nexport function tuiIsMobile(windowRef: Window, {mobile}: TuiMedia): boolean {\n return tuiGetViewportWidth(windowRef) <= mobile;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;SAGgB,WAAW,CAAC,SAAiB,EAAE,EAAkB;QAAjB,kBAAM;IAClD,OAAO,mBAAmB,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC;AACpD;;ACLA;;;;;;"}
@@ -2,6 +2,7 @@ export * from '@taiga-ui/core/utils/dom';
2
2
  export * from '@taiga-ui/core/utils/format';
3
3
  export * from '@taiga-ui/core/utils/mask';
4
4
  export * from '@taiga-ui/core/utils/miscellaneous';
5
+ export * from '@taiga-ui/core/utils/mobile';
5
6
  export * from '@taiga-ui/core/utils/polyfills';
6
7
 
7
8
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-core-utils.js","sources":["ng://@taiga-ui/core/utils/taiga-ui-core-utils.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAAA;;"}
1
+ {"version":3,"file":"taiga-ui-core-utils.js","sources":["ng://@taiga-ui/core/utils/taiga-ui-core-utils.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAAA;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taiga-ui/core",
3
- "version": "2.49.2",
3
+ "version": "2.50.2",
4
4
  "description": "Core library for creating Angular components and applications using Taiga UI",
5
5
  "keywords": [
6
6
  "angular",
@@ -15,7 +15,7 @@
15
15
  "repository": "https://github.com/tinkoff/taiga-ui",
16
16
  "license": "Apache-2.0",
17
17
  "dependencies": {
18
- "@taiga-ui/i18n": "^2.49.2",
18
+ "@taiga-ui/i18n": "^2.50.2",
19
19
  "tslib": "^1.10.0"
20
20
  },
21
21
  "peerDependencies": {
@@ -27,8 +27,8 @@
27
27
  "@angular/router": ">=9.0.0",
28
28
  "@ng-web-apis/common": ">=1.12.1 < 2",
29
29
  "@ng-web-apis/mutation-observer": ">=1.1.0",
30
- "@taiga-ui/cdk": ">=2.49.2",
31
- "@taiga-ui/i18n": ">=2.49.2",
30
+ "@taiga-ui/cdk": ">=2.50.2",
31
+ "@taiga-ui/i18n": ">=2.50.2",
32
32
  "@tinkoff/ng-event-plugins": ">=2.3.2",
33
33
  "@tinkoff/ng-polymorpheus": ">=3.1.12 < 4",
34
34
  "rxjs": ">=6.0.0"
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"TUI_ANIMATION_OPTIONS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":41},"arguments":["Options for Taiga UI animations",{"__symbolic":"error","message":"Lambda not supported","line":8,"character":17,"module":"./animation-options"}]},"TUI_ANIMATIONS_DURATION":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":43},"arguments":["Duration of all Taiga UI animations in ms",{"__symbolic":"error","message":"Lambda not supported","line":5,"character":17,"module":"./animations-duration"}]},"TUI_ASSERT_ENABLED":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":38},"arguments":["Flag to enable assertions across Taiga UI",{"__symbolic":"error","message":"Lambda not supported","line":5,"character":17,"module":"./assert-enabled"}]},"TUI_DATA_LIST_ACCESSOR":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":42},"arguments":["Accessor for options"]},"TUI_DATA_LIST_HOST":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":38},"arguments":["DataList controller"]},"TUI_DOCUMENT_OR_SHADOW_ROOT":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":47},"arguments":["Document or ShadowRoot"]},"TUI_DROPDOWN_DIRECTIVE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":42},"arguments":["Directive controlling TuiDropdownBoxComponent"]},"TUI_ELEMENT_REF":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":35},"arguments":["ElementRef when you cannot use @Input for single time injection"]},"TUI_FIRST_DAY_OF_WEEK":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":41},"arguments":["The first day of the week index",{"__symbolic":"error","message":"Lambda not supported","line":6,"character":17,"module":"./first-day-of-week"}]},"TUI_MONTHS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":30},"arguments":["Localized months names",{"factory":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/i18n","name":"extractI18n","line":4,"character":13},"arguments":["months"]}}]},"TUI_CLOSE_WORD":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":7,"character":34},"arguments":["i18n 'close' word",{"factory":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/i18n","name":"extractI18n","line":8,"character":13},"arguments":["close"]}}]},"TUI_NOTHING_FOUND_MESSAGE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":11,"character":45},"arguments":["i18n 'Nothing found' message",{"factory":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/i18n","name":"extractI18n","line":14,"character":17},"arguments":["nothingFoundMessage"]}}]},"TUI_DEFAULT_ERROR_MESSAGE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":18,"character":45},"arguments":["i18n of error message",{"factory":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/i18n","name":"extractI18n","line":19,"character":13},"arguments":["defaultErrorMessage"]}}]},"TUI_SPIN_TEXTS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":22,"character":34},"arguments":["spin i18n texts",{"factory":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/i18n","name":"extractI18n","line":23,"character":13},"arguments":["spinTexts"]}}]},"TUI_SHORT_WEEK_DAYS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":26,"character":39},"arguments":["calendars i18n texts",{"factory":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/i18n","name":"extractI18n","line":27,"character":13},"arguments":["shortWeekDays"]}}]},"TUI_ICONS_PLACE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":59},"arguments":["Recommended paths to icons from documentation guide",{"__symbolic":"error","message":"Lambda not supported","line":5,"character":17,"module":"./icon-place"}]},"TUI_ICONS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":29},"arguments":["A key/value dictionary of icon names and src to be defined with TuiSvgService",{"__symbolic":"error","message":"Lambda not supported","line":5,"character":17,"module":"./icons"}]},"TUI_ICONS_PATH":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":7,"character":8},"arguments":["A handler to retrieve USE id for icon by name",{"__symbolic":"error","message":"Lambda not supported","line":9,"character":18,"module":"./icons-path"}]},"TUI_IS_MOBILE_RES":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":8,"character":37},"arguments":["Mobile resolution stream for private providers",{"__symbolic":"error","message":"Lambda not supported","line":11,"character":17,"module":"./is-mobile-resolution"}]},"TUI_MEDIA":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":29},"arguments":["Token for media constant",{"__symbolic":"error","message":"Lambda not supported","line":4,"character":13,"module":"./media"}]},"TUI_MODE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":8},"arguments":["Mode stream for private providers"]},"TuiNotificationDefaultOptions":{"__symbolic":"interface"},"NotificationTokenOptions":{"__symbolic":"interface"},"TUI_NOTIFICATION_DEFAULT_OPTIONS":{"autoClose":true,"label":"","status":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@taiga-ui/core/enums","name":"TuiNotification","line":18,"character":12},"member":"Info"},"hasIcon":true,"hasCloseButton":true,"defaultAutoCloseTime":3000},"TUI_NOTIFICATION_OPTIONS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":24,"character":44},"arguments":["Default parameters for notification alert component",{"__symbolic":"error","message":"Lambda not supported","line":27,"character":17,"module":"./notification-options"}]},"tuiNotificationOptionsProvider":{"__symbolic":"function","parameters":["options"],"value":{"provide":{"__symbolic":"reference","name":"TUI_NOTIFICATION_OPTIONS"},"useValue":{}}},"TUI_NUMBER_FORMAT":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":4,"character":37},"arguments":["Formatting configuration for displayed numbers",{"__symbolic":"error","message":"Lambda not supported","line":7,"character":17,"module":"./number-format"}]},"TUI_OPTION_CONTENT":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":4,"character":38},"arguments":["Content for tuiOption component"]},"WEEK_DAYS_NAMES":{"__symbolic":"interface"},"convertToSundayFirstWeekFormat":{"__symbolic":"error","message":"Lambda not supported","line":9,"character":46,"module":"./ordered-short-week-days"},"TUI_ORDERED_SHORT_WEEK_DAYS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":20,"character":47},"arguments":["Ordered calendars i18n texts",{"__symbolic":"error","message":"Lambda not supported","line":23,"character":13,"module":"./ordered-short-week-days"}]},"TUI_SCROLL_REF":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":34},"arguments":["Scrollable container"]},"TUI_SVG_CONTENT_PROCESSOR":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":8},"arguments":["Transform function the contents of the loaded svg file",{"__symbolic":"error","message":"Lambda not supported","line":7,"character":18,"module":"./svg-content-processor"}]},"TUI_SVG_SRC_PROCESSOR":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":8},"arguments":["Source path processor for svg",{"__symbolic":"error","message":"Lambda not supported","line":6,"character":17,"module":"./svg-src-processor"}]},"TUI_TEXTFIELD_APPEARANCE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":44},"arguments":["Appearance for inputs",{"__symbolic":"error","message":"Lambda not supported","line":6,"character":17,"module":"./textfield-appearance"}]},"TUI_TEXTFIELD_HOST":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":38},"arguments":["An interface to communicate with textfield based controls"]},"TUI_THEME":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":29},"arguments":["Theme name",{"__symbolic":"error","message":"Lambda not supported","line":3,"character":13,"module":"./theme"}]},"TUI_VALUE_ACCESSOR":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":38},"arguments":["Buffer token to pass NG_VALUE_ACCESSOR to a different Injector"]}},"origins":{"TUI_ANIMATION_OPTIONS":"./animation-options","TUI_ANIMATIONS_DURATION":"./animations-duration","TUI_ASSERT_ENABLED":"./assert-enabled","TUI_DATA_LIST_ACCESSOR":"./data-list-accessor","TUI_DATA_LIST_HOST":"./data-list-host","TUI_DOCUMENT_OR_SHADOW_ROOT":"./document-or-shadow-root","TUI_DROPDOWN_DIRECTIVE":"./dropdown-directive","TUI_ELEMENT_REF":"./element-ref","TUI_FIRST_DAY_OF_WEEK":"./first-day-of-week","TUI_MONTHS":"./i18n","TUI_CLOSE_WORD":"./i18n","TUI_NOTHING_FOUND_MESSAGE":"./i18n","TUI_DEFAULT_ERROR_MESSAGE":"./i18n","TUI_SPIN_TEXTS":"./i18n","TUI_SHORT_WEEK_DAYS":"./i18n","TUI_ICONS_PLACE":"./icon-place","TUI_ICONS":"./icons","TUI_ICONS_PATH":"./icons-path","TUI_IS_MOBILE_RES":"./is-mobile-resolution","TUI_MEDIA":"./media","TUI_MODE":"./mode","TuiNotificationDefaultOptions":"./notification-options","NotificationTokenOptions":"./notification-options","TUI_NOTIFICATION_DEFAULT_OPTIONS":"./notification-options","TUI_NOTIFICATION_OPTIONS":"./notification-options","tuiNotificationOptionsProvider":"./notification-options","TUI_NUMBER_FORMAT":"./number-format","TUI_OPTION_CONTENT":"./option-content","WEEK_DAYS_NAMES":"./ordered-short-week-days","convertToSundayFirstWeekFormat":"./ordered-short-week-days","TUI_ORDERED_SHORT_WEEK_DAYS":"./ordered-short-week-days","TUI_SANITIZER":"@taiga-ui/cdk","TUI_SCROLL_REF":"./scroll-ref","TUI_SVG_CONTENT_PROCESSOR":"./svg-content-processor","TUI_SVG_SRC_PROCESSOR":"./svg-src-processor","TUI_TEXTFIELD_APPEARANCE":"./textfield-appearance","TUI_TEXTFIELD_HOST":"./textfield-host","TUI_THEME":"./theme","TUI_VALUE_ACCESSOR":"./value-accessor"},"importAs":"@taiga-ui/core/tokens"}
1
+ {"__symbolic":"module","version":4,"metadata":{"TUI_ANIMATION_OPTIONS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":41},"arguments":["Options for Taiga UI animations",{"__symbolic":"error","message":"Lambda not supported","line":8,"character":17,"module":"./animation-options"}]},"TUI_ANIMATIONS_DURATION":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":43},"arguments":["Duration of all Taiga UI animations in ms",{"__symbolic":"error","message":"Lambda not supported","line":5,"character":17,"module":"./animations-duration"}]},"TUI_ASSERT_ENABLED":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":38},"arguments":["Flag to enable assertions across Taiga UI",{"__symbolic":"error","message":"Lambda not supported","line":5,"character":17,"module":"./assert-enabled"}]},"TUI_DATA_LIST_ACCESSOR":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":42},"arguments":["Accessor for options"]},"TUI_DATA_LIST_HOST":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":38},"arguments":["DataList controller"]},"TUI_DOCUMENT_OR_SHADOW_ROOT":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":47},"arguments":["Document or ShadowRoot"]},"TUI_DROPDOWN_DIRECTIVE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":42},"arguments":["Directive controlling TuiDropdownBoxComponent"]},"TUI_ELEMENT_REF":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":35},"arguments":["ElementRef when you cannot use @Input for single time injection"]},"TUI_FIRST_DAY_OF_WEEK":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":41},"arguments":["The first day of the week index",{"__symbolic":"error","message":"Lambda not supported","line":6,"character":17,"module":"./first-day-of-week"}]},"TUI_MONTHS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":30},"arguments":["Localized months names",{"factory":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/i18n","name":"extractI18n","line":4,"character":13},"arguments":["months"]}}]},"TUI_CLOSE_WORD":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":7,"character":34},"arguments":["i18n 'close' word",{"factory":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/i18n","name":"extractI18n","line":8,"character":13},"arguments":["close"]}}]},"TUI_NOTHING_FOUND_MESSAGE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":11,"character":45},"arguments":["i18n 'Nothing found' message",{"factory":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/i18n","name":"extractI18n","line":14,"character":17},"arguments":["nothingFoundMessage"]}}]},"TUI_DEFAULT_ERROR_MESSAGE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":18,"character":45},"arguments":["i18n of error message",{"factory":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/i18n","name":"extractI18n","line":19,"character":13},"arguments":["defaultErrorMessage"]}}]},"TUI_SPIN_TEXTS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":22,"character":34},"arguments":["spin i18n texts",{"factory":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/i18n","name":"extractI18n","line":23,"character":13},"arguments":["spinTexts"]}}]},"TUI_SHORT_WEEK_DAYS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":26,"character":39},"arguments":["calendars i18n texts",{"factory":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/i18n","name":"extractI18n","line":27,"character":13},"arguments":["shortWeekDays"]}}]},"TUI_ICONS_PLACE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":59},"arguments":["Recommended paths to icons from documentation guide",{"__symbolic":"error","message":"Lambda not supported","line":5,"character":17,"module":"./icon-place"}]},"TUI_ICONS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":29},"arguments":["A key/value dictionary of icon names and src to be defined with TuiSvgService",{"__symbolic":"error","message":"Lambda not supported","line":5,"character":17,"module":"./icons"}]},"TUI_ICONS_PATH":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":7,"character":8},"arguments":["A handler to retrieve USE id for icon by name",{"__symbolic":"error","message":"Lambda not supported","line":9,"character":18,"module":"./icons-path"}]},"TUI_IS_MOBILE_RES":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":9,"character":37},"arguments":["Mobile resolution stream for private providers",{"__symbolic":"error","message":"Lambda not supported","line":12,"character":17,"module":"./is-mobile-resolution"}]},"TUI_MEDIA":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":29},"arguments":["Token for media constant",{"__symbolic":"error","message":"Lambda not supported","line":4,"character":13,"module":"./media"}]},"TUI_MODE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":8},"arguments":["Mode stream for private providers"]},"TuiNotificationDefaultOptions":{"__symbolic":"interface"},"NotificationTokenOptions":{"__symbolic":"interface"},"TUI_NOTIFICATION_DEFAULT_OPTIONS":{"autoClose":true,"label":"","status":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@taiga-ui/core/enums","name":"TuiNotification","line":18,"character":12},"member":"Info"},"hasIcon":true,"hasCloseButton":true,"defaultAutoCloseTime":3000},"TUI_NOTIFICATION_OPTIONS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":24,"character":44},"arguments":["Default parameters for notification alert component",{"__symbolic":"error","message":"Lambda not supported","line":27,"character":17,"module":"./notification-options"}]},"tuiNotificationOptionsProvider":{"__symbolic":"function","parameters":["options"],"value":{"provide":{"__symbolic":"reference","name":"TUI_NOTIFICATION_OPTIONS"},"useValue":{}}},"TUI_NUMBER_FORMAT":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":4,"character":37},"arguments":["Formatting configuration for displayed numbers",{"__symbolic":"error","message":"Lambda not supported","line":7,"character":17,"module":"./number-format"}]},"TUI_OPTION_CONTENT":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":4,"character":38},"arguments":["Content for tuiOption component"]},"WEEK_DAYS_NAMES":{"__symbolic":"interface"},"convertToSundayFirstWeekFormat":{"__symbolic":"error","message":"Lambda not supported","line":9,"character":46,"module":"./ordered-short-week-days"},"TUI_ORDERED_SHORT_WEEK_DAYS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":20,"character":47},"arguments":["Ordered calendars i18n texts",{"__symbolic":"error","message":"Lambda not supported","line":23,"character":13,"module":"./ordered-short-week-days"}]},"TUI_SCROLL_REF":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":34},"arguments":["Scrollable container"]},"TUI_SVG_CONTENT_PROCESSOR":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":8},"arguments":["Transform function the contents of the loaded svg file",{"__symbolic":"error","message":"Lambda not supported","line":7,"character":18,"module":"./svg-content-processor"}]},"TUI_SVG_SRC_PROCESSOR":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":8},"arguments":["Source path processor for svg",{"__symbolic":"error","message":"Lambda not supported","line":6,"character":17,"module":"./svg-src-processor"}]},"TUI_TEXTFIELD_APPEARANCE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":44},"arguments":["Appearance for inputs",{"__symbolic":"error","message":"Lambda not supported","line":6,"character":17,"module":"./textfield-appearance"}]},"TUI_TEXTFIELD_HOST":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":38},"arguments":["An interface to communicate with textfield based controls"]},"TUI_THEME":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":29},"arguments":["Theme name",{"__symbolic":"error","message":"Lambda not supported","line":3,"character":13,"module":"./theme"}]},"TUI_VALUE_ACCESSOR":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":3,"character":38},"arguments":["Buffer token to pass NG_VALUE_ACCESSOR to a different Injector"]}},"origins":{"TUI_ANIMATION_OPTIONS":"./animation-options","TUI_ANIMATIONS_DURATION":"./animations-duration","TUI_ASSERT_ENABLED":"./assert-enabled","TUI_DATA_LIST_ACCESSOR":"./data-list-accessor","TUI_DATA_LIST_HOST":"./data-list-host","TUI_DOCUMENT_OR_SHADOW_ROOT":"./document-or-shadow-root","TUI_DROPDOWN_DIRECTIVE":"./dropdown-directive","TUI_ELEMENT_REF":"./element-ref","TUI_FIRST_DAY_OF_WEEK":"./first-day-of-week","TUI_MONTHS":"./i18n","TUI_CLOSE_WORD":"./i18n","TUI_NOTHING_FOUND_MESSAGE":"./i18n","TUI_DEFAULT_ERROR_MESSAGE":"./i18n","TUI_SPIN_TEXTS":"./i18n","TUI_SHORT_WEEK_DAYS":"./i18n","TUI_ICONS_PLACE":"./icon-place","TUI_ICONS":"./icons","TUI_ICONS_PATH":"./icons-path","TUI_IS_MOBILE_RES":"./is-mobile-resolution","TUI_MEDIA":"./media","TUI_MODE":"./mode","TuiNotificationDefaultOptions":"./notification-options","NotificationTokenOptions":"./notification-options","TUI_NOTIFICATION_DEFAULT_OPTIONS":"./notification-options","TUI_NOTIFICATION_OPTIONS":"./notification-options","tuiNotificationOptionsProvider":"./notification-options","TUI_NUMBER_FORMAT":"./number-format","TUI_OPTION_CONTENT":"./option-content","WEEK_DAYS_NAMES":"./ordered-short-week-days","convertToSundayFirstWeekFormat":"./ordered-short-week-days","TUI_ORDERED_SHORT_WEEK_DAYS":"./ordered-short-week-days","TUI_SANITIZER":"@taiga-ui/cdk","TUI_SCROLL_REF":"./scroll-ref","TUI_SVG_CONTENT_PROCESSOR":"./svg-content-processor","TUI_SVG_SRC_PROCESSOR":"./svg-src-processor","TUI_TEXTFIELD_APPEARANCE":"./textfield-appearance","TUI_TEXTFIELD_HOST":"./textfield-host","TUI_THEME":"./theme","TUI_VALUE_ACCESSOR":"./value-accessor"},"importAs":"@taiga-ui/core/tokens"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @description:
3
+ * Cross-browser @media (height)
4
+ *
5
+ * 1. window.innerWidth
6
+ * 1.1. gets CSS viewport @media (height) which include scrollbars
7
+ * 1.2. initial-scale and zoom variations may cause mobile values to
8
+ * wrongly scale down to what PPK calls the visual
9
+ * viewport and be smaller than the @media values
10
+ * 1.3. zoom may cause values to be 1px off due to native rounding
11
+ *
12
+ * 2. document.documentElement.clientHeight
13
+ * 2.1. equals CSS viewport width minus scrollbar width
14
+ * 2.2. matches @media (height) when there is no scrollbar
15
+ * 2.3. available cross-browser
16
+ * 2.4. inaccurate if doctype is missing
17
+ */
18
+ export declare function tuiGetViewportHeight({ document, innerHeight }: Window): number;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @description:
3
+ * Cross-browser @media (width)
4
+ *
5
+ * 1. window.innerWidth
6
+ * 1.1. gets CSS viewport @media (width) which include scrollbars
7
+ * 1.2. initial-scale and zoom variations may cause mobile values to
8
+ * wrongly scale down to what PPK calls the visual
9
+ * viewport and be smaller than the @media values
10
+ * 1.3. zoom may cause values to be 1px off due to native rounding
11
+ *
12
+ * 2. document.documentElement.clientWidth
13
+ * 2.1. equals CSS viewport width minus scrollbar width
14
+ * 2.2. matches @media (width) when there is no scrollbar
15
+ * 2.3. available cross-browser
16
+ * 2.4. inaccurate if doctype is missing
17
+ */
18
+ export declare function tuiGetViewportWidth({ document, innerWidth }: Window): number;
@@ -2,4 +2,6 @@ export * from './are-css-vars-supported';
2
2
  export * from './check-fixed-position';
3
3
  export * from './get-safe-area-size';
4
4
  export * from './get-screen-width';
5
+ export * from './get-viewport-height';
6
+ export * from './get-viewport-width';
5
7
  export * from './process-icon';
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"areCssVarsSupported":{"__symbolic":"function","parameters":["cssRef","userAgent"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"cssRef"},"member":"supports"},"arguments":["(--a: 0)"]},"right":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"isEdgeOlderThan","line":6,"character":43},"arguments":[17,{"__symbolic":"reference","name":"userAgent"}]}}}},"checkFixedPosition":{"__symbolic":"function"},"getSafeAreaSize":{"__symbolic":"function"},"getScreenWidth":{"__symbolic":"function","parameters":["documentRef"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Math"},"member":"max"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"documentRef"},"member":"documentElement"},"member":"clientWidth"},{"__symbolic":"if","condition":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"documentRef"},"member":"defaultView"},"thenExpression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"documentRef"},"member":"defaultView"},"member":"innerWidth"},"elseExpression":0}]}},"processIcon":{"__symbolic":"function"}},"origins":{"areCssVarsSupported":"./are-css-vars-supported","checkFixedPosition":"./check-fixed-position","getSafeAreaSize":"./get-safe-area-size","getScreenWidth":"./get-screen-width","processIcon":"./process-icon"},"importAs":"@taiga-ui/core/utils/dom"}
1
+ {"__symbolic":"module","version":4,"metadata":{"areCssVarsSupported":{"__symbolic":"function","parameters":["cssRef","userAgent"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"cssRef"},"member":"supports"},"arguments":["(--a: 0)"]},"right":{"__symbolic":"pre","operator":"!","operand":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/cdk","name":"isEdgeOlderThan","line":6,"character":43},"arguments":[17,{"__symbolic":"reference","name":"userAgent"}]}}}},"checkFixedPosition":{"__symbolic":"function"},"getSafeAreaSize":{"__symbolic":"function"},"getScreenWidth":{"__symbolic":"function","parameters":["documentRef"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Math"},"member":"max"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"documentRef"},"member":"documentElement"},"member":"clientWidth"},{"__symbolic":"if","condition":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"documentRef"},"member":"defaultView"},"thenExpression":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"documentRef"},"member":"defaultView"},"member":"innerWidth"},"elseExpression":0}]}},"tuiGetViewportHeight":{"__symbolic":"function","parameters":["document","innerHeight"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Math"},"member":"max"},"arguments":[{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"document"},"member":"documentElement"},"member":"clientHeight"},"right":0},{"__symbolic":"binop","operator":"||","left":{"__symbolic":"reference","name":"innerHeight"},"right":0}]}},"tuiGetViewportWidth":{"__symbolic":"function","parameters":["document","innerWidth"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"Math"},"member":"max"},"arguments":[{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"document"},"member":"documentElement"},"member":"clientWidth"},"right":0},{"__symbolic":"binop","operator":"||","left":{"__symbolic":"reference","name":"innerWidth"},"right":0}]}},"processIcon":{"__symbolic":"function"}},"origins":{"areCssVarsSupported":"./are-css-vars-supported","checkFixedPosition":"./check-fixed-position","getSafeAreaSize":"./get-safe-area-size","getScreenWidth":"./get-screen-width","tuiGetViewportHeight":"./get-viewport-height","tuiGetViewportWidth":"./get-viewport-width","processIcon":"./process-icon"},"importAs":"@taiga-ui/core/utils/dom"}
package/utils/index.d.ts CHANGED
@@ -2,4 +2,5 @@ export * from '@taiga-ui/core/utils/dom';
2
2
  export * from '@taiga-ui/core/utils/format';
3
3
  export * from '@taiga-ui/core/utils/mask';
4
4
  export * from '@taiga-ui/core/utils/miscellaneous';
5
+ export * from '@taiga-ui/core/utils/mobile';
5
6
  export * from '@taiga-ui/core/utils/polyfills';
@@ -0,0 +1 @@
1
+ export * from './is-mobile';
@@ -0,0 +1,2 @@
1
+ import { TuiMedia } from '@taiga-ui/core/interfaces';
2
+ export declare function tuiIsMobile(windowRef: Window, { mobile }: TuiMedia): boolean;
@@ -0,0 +1,13 @@
1
+ {
2
+ "main": "../../bundles/taiga-ui-core-utils-mobile.umd.js",
3
+ "module": "../../fesm5/taiga-ui-core-utils-mobile.js",
4
+ "es2015": "../../fesm2015/taiga-ui-core-utils-mobile.js",
5
+ "esm5": "../../esm5/utils/mobile/taiga-ui-core-utils-mobile.js",
6
+ "esm2015": "../../esm2015/utils/mobile/taiga-ui-core-utils-mobile.js",
7
+ "fesm5": "../../fesm5/taiga-ui-core-utils-mobile.js",
8
+ "fesm2015": "../../fesm2015/taiga-ui-core-utils-mobile.js",
9
+ "typings": "taiga-ui-core-utils-mobile.d.ts",
10
+ "metadata": "taiga-ui-core-utils-mobile.metadata.json",
11
+ "sideEffects": false,
12
+ "name": "@taiga-ui/core/utils/mobile"
13
+ }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
@@ -0,0 +1 @@
1
+ {"__symbolic":"module","version":4,"metadata":{"tuiIsMobile":{"__symbolic":"function","parameters":["windowRef","mobile"],"value":{"__symbolic":"binop","operator":"<=","left":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@taiga-ui/core/utils/dom","name":"tuiGetViewportWidth","line":4,"character":11},"arguments":[{"__symbolic":"reference","name":"windowRef"}]},"right":{"__symbolic":"reference","name":"mobile"}}}},"origins":{"tuiIsMobile":"./is-mobile"},"importAs":"@taiga-ui/core/utils/mobile"}
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"exports":[{"from":"@taiga-ui/core/utils/dom"},{"from":"@taiga-ui/core/utils/format"},{"from":"@taiga-ui/core/utils/mask"},{"from":"@taiga-ui/core/utils/miscellaneous"},{"from":"@taiga-ui/core/utils/polyfills"}],"metadata":{},"origins":{},"importAs":"@taiga-ui/core/utils"}
1
+ {"__symbolic":"module","version":4,"exports":[{"from":"@taiga-ui/core/utils/dom"},{"from":"@taiga-ui/core/utils/format"},{"from":"@taiga-ui/core/utils/mask"},{"from":"@taiga-ui/core/utils/miscellaneous"},{"from":"@taiga-ui/core/utils/mobile"},{"from":"@taiga-ui/core/utils/polyfills"}],"metadata":{},"origins":{},"importAs":"@taiga-ui/core/utils"}