@taiga-ui/cdk 3.42.1-canary.290249b → 3.42.1-canary.77ac3f2

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.
@@ -18,12 +18,14 @@
18
18
  * Documentation: https://www.w3.org/TR/SVG11/pservers.html
19
19
  *
20
20
  */
21
- function tuiSvgLinearGradientProcessor(svg, salt) {
21
+ function tuiSvgLinearGradientProcessor(svg, salt, fallback) {
22
+ if (salt === void 0) { salt = makeRandomSalt(); }
23
+ if (fallback === void 0) { fallback = "rgba(0, 0, 0, 0.7)"; }
22
24
  if (miscellaneous.tuiIsString(svg)) {
23
25
  var uniqueIds = extractLinearGradientIdsFromSvg(svg);
24
- return uniqueIds.reduce(function (newSvg, previousId) {
26
+ var rawSvg = uniqueIds.reduce(function (newSvg, previousId) {
25
27
  var escapedId = escapeRegExp(previousId);
26
- var newId = previousId + "_" + (salt || makeRandomSalt());
28
+ var newId = "id_" + salt + "_" + previousId;
27
29
  return newSvg
28
30
  .replace(new RegExp("\"" + escapedId + "\"", "g"), "\"" + newId + "\"")
29
31
  .replace(new RegExp("'" + escapedId + "'", "g"), "'" + newId + "'")
@@ -31,6 +33,7 @@
31
33
  .replace(new RegExp("url\\(\"#" + escapedId + "\"\\)", "g"), "url(\"#" + newId + "\")")
32
34
  .replace(new RegExp("url\\(#" + escapedId + "\\)", "g"), "url(#" + newId + ")");
33
35
  }, svg);
36
+ return setFallbackForGradientFill(rawSvg, fallback);
34
37
  }
35
38
  return svg;
36
39
  }
@@ -45,6 +48,13 @@
45
48
  var ids = ((_a = svg.match(/url\(("?)('*)#(.*?)('*)\)/g)) !== null && _a !== void 0 ? _a : []).map(function (url) { return url.slice(4, url.length - 1).replace(/['"#]+/g, ""); });
46
49
  return Array.from(new Set(ids));
47
50
  }
51
+ function setFallbackForGradientFill(svg, fallback) {
52
+ var tree = new DOMParser().parseFromString(svg, "text/html");
53
+ tree.body
54
+ .querySelectorAll("[fill^=url]") // only gradient
55
+ .forEach(function (element) { return element.setAttribute("fill", (element.getAttribute("fill") + " " + fallback).trim()); });
56
+ return tree.body.innerHTML.trim();
57
+ }
48
58
 
49
59
  /**
50
60
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-utils-svg.umd.js","sources":["../../../projects/cdk/utils/svg/svg-linear-gradient-processor.ts","../../../projects/cdk/utils/svg/taiga-ui-cdk-utils-svg.ts"],"sourcesContent":["import {TuiSafeHtml} from '@taiga-ui/cdk/interfaces';\nimport {tuiIsString} from '@taiga-ui/cdk/utils/miscellaneous';\n\n/**\n * @description:\n * Any ‘linearGradient’ attributes which are defined on the referenced\n * element which are not defined on this element are inherited by this element.\n * If this element has no defined gradient stops, and the referenced element does\n * (possibly due to its own ‘xlink:href’ attribute), then this element inherits\n * the gradient stop from the referenced element. Inheritance can be indirect\n * to an arbitrary level; thus, if the referenced element inherits attribute\n * or gradient stops due to its own ‘xlink:href’ attribute, then the current\n * element can inherit those attributes or gradient stops.\n *\n * Documentation: https://www.w3.org/TR/SVG11/pservers.html\n *\n */\nexport function tuiSvgLinearGradientProcessor(\n svg: TuiSafeHtml,\n salt?: number | string,\n): TuiSafeHtml {\n if (tuiIsString(svg)) {\n const uniqueIds = extractLinearGradientIdsFromSvg(svg);\n\n return uniqueIds.reduce((newSvg, previousId) => {\n const escapedId = escapeRegExp(previousId);\n const newId = `${previousId}_${salt || makeRandomSalt()}`;\n\n return newSvg\n .replace(new RegExp(`\"${escapedId}\"`, `g`), `\"${newId}\"`)\n .replace(new RegExp(`'${escapedId}'`, `g`), `'${newId}'`)\n .replace(new RegExp(`url\\\\('#${escapedId}'\\\\)`, `g`), `url('#${newId}')`)\n .replace(new RegExp(`url\\\\(\"#${escapedId}\"\\\\)`, `g`), `url(\"#${newId}\")`)\n .replace(new RegExp(`url\\\\(#${escapedId}\\\\)`, `g`), `url(#${newId})`);\n }, svg);\n }\n\n return svg;\n}\n\nfunction makeRandomSalt(): number {\n return Math.floor(Math.random() * Date.now());\n}\n\nfunction escapeRegExp(search: string): string {\n return search.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, `\\\\$&`);\n}\n\nfunction extractLinearGradientIdsFromSvg(svg: string): string[] {\n const ids = (svg.match(/url\\((\"?)('*)#(.*?)('*)\\)/g) ?? []).map(url =>\n url.slice(4, url.length - 1).replace(/['\"#]+/g, ``),\n );\n\n return Array.from(new Set(ids));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["tuiIsString"],"mappings":";;;;;;IAGA;;;;;;;;;;;;;IAaG;IACa,SAAA,6BAA6B,CACzC,GAAgB,EAChB,IAAsB,EAAA;IAEtB,IAAA,IAAIA,yBAAW,CAAC,GAAG,CAAC,EAAE;IAClB,QAAA,IAAM,SAAS,GAAG,+BAA+B,CAAC,GAAG,CAAC,CAAC;IAEvD,QAAA,OAAO,SAAS,CAAC,MAAM,CAAC,UAAC,MAAM,EAAE,UAAU,EAAA;IACvC,YAAA,IAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;gBAC3C,IAAM,KAAK,GAAM,UAAU,GAAA,GAAA,IAAI,IAAI,IAAI,cAAc,EAAE,CAAE,CAAC;IAE1D,YAAA,OAAO,MAAM;IACR,iBAAA,OAAO,CAAC,IAAI,MAAM,CAAC,OAAI,SAAS,GAAA,IAAG,EAAE,GAAG,CAAC,EAAE,IAAI,GAAA,KAAK,OAAG,CAAC;IACxD,iBAAA,OAAO,CAAC,IAAI,MAAM,CAAC,MAAI,SAAS,GAAA,GAAG,EAAE,GAAG,CAAC,EAAE,GAAI,GAAA,KAAK,MAAG,CAAC;IACxD,iBAAA,OAAO,CAAC,IAAI,MAAM,CAAC,aAAW,SAAS,GAAA,MAAM,EAAE,GAAG,CAAC,EAAE,QAAS,GAAA,KAAK,OAAI,CAAC;IACxE,iBAAA,OAAO,CAAC,IAAI,MAAM,CAAC,cAAW,SAAS,GAAA,OAAM,EAAE,GAAG,CAAC,EAAE,SAAS,GAAA,KAAK,QAAI,CAAC;IACxE,iBAAA,OAAO,CAAC,IAAI,MAAM,CAAC,YAAU,SAAS,GAAA,KAAK,EAAE,GAAG,CAAC,EAAE,OAAA,GAAQ,KAAK,GAAA,GAAG,CAAC,CAAC;aAC7E,EAAE,GAAG,CAAC,CAAC;IACX,KAAA;IAED,IAAA,OAAO,GAAG,CAAC;IACf,CAAC;IAED,SAAS,cAAc,GAAA;IACnB,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,SAAS,YAAY,CAAC,MAAc,EAAA;QAChC,OAAO,MAAM,CAAC,OAAO,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS,+BAA+B,CAAC,GAAW,EAAA;;QAChD,IAAM,GAAG,GAAG,CAAC,MAAA,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,EAAE,GAAG,CAAC,UAAA,GAAG,EAC/D,EAAA,OAAA,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA,EAAA,CACtD,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC;;ICtDA;;IAEG;;;;;;;;;;"}
1
+ {"version":3,"file":"taiga-ui-cdk-utils-svg.umd.js","sources":["../../../projects/cdk/utils/svg/svg-linear-gradient-processor.ts","../../../projects/cdk/utils/svg/taiga-ui-cdk-utils-svg.ts"],"sourcesContent":["import {TuiSafeHtml} from '@taiga-ui/cdk/interfaces';\nimport {tuiIsString} from '@taiga-ui/cdk/utils/miscellaneous';\n\n/**\n * @description:\n * Any ‘linearGradient’ attributes which are defined on the referenced\n * element which are not defined on this element are inherited by this element.\n * If this element has no defined gradient stops, and the referenced element does\n * (possibly due to its own ‘xlink:href’ attribute), then this element inherits\n * the gradient stop from the referenced element. Inheritance can be indirect\n * to an arbitrary level; thus, if the referenced element inherits attribute\n * or gradient stops due to its own ‘xlink:href’ attribute, then the current\n * element can inherit those attributes or gradient stops.\n *\n * Documentation: https://www.w3.org/TR/SVG11/pservers.html\n *\n */\nexport function tuiSvgLinearGradientProcessor(\n svg: TuiSafeHtml,\n salt: number | string = makeRandomSalt(),\n fallback: string = `rgba(0, 0, 0, 0.7)`,\n): TuiSafeHtml {\n if (tuiIsString(svg)) {\n const uniqueIds = extractLinearGradientIdsFromSvg(svg);\n const rawSvg = uniqueIds.reduce((newSvg, previousId) => {\n const escapedId = escapeRegExp(previousId);\n const newId = `id_${salt}_${previousId}`;\n\n return newSvg\n .replace(new RegExp(`\"${escapedId}\"`, `g`), `\"${newId}\"`)\n .replace(new RegExp(`'${escapedId}'`, `g`), `'${newId}'`)\n .replace(new RegExp(`url\\\\('#${escapedId}'\\\\)`, `g`), `url('#${newId}')`)\n .replace(new RegExp(`url\\\\(\"#${escapedId}\"\\\\)`, `g`), `url(\"#${newId}\")`)\n .replace(new RegExp(`url\\\\(#${escapedId}\\\\)`, `g`), `url(#${newId})`);\n }, svg);\n\n return setFallbackForGradientFill(rawSvg, fallback);\n }\n\n return svg;\n}\n\nfunction makeRandomSalt(): number {\n return Math.floor(Math.random() * Date.now());\n}\n\nfunction escapeRegExp(search: string): string {\n return search.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, `\\\\$&`);\n}\n\nfunction extractLinearGradientIdsFromSvg(svg: string): string[] {\n const ids = (svg.match(/url\\((\"?)('*)#(.*?)('*)\\)/g) ?? []).map(url =>\n url.slice(4, url.length - 1).replace(/['\"#]+/g, ``),\n );\n\n return Array.from(new Set(ids));\n}\n\nfunction setFallbackForGradientFill(svg: string, fallback: string): string {\n const tree = new DOMParser().parseFromString(svg, `text/html`);\n\n tree.body\n .querySelectorAll(`[fill^=url]`) // only gradient\n .forEach(element =>\n element.setAttribute(\n `fill`,\n `${element.getAttribute(`fill`)} ${fallback}`.trim(),\n ),\n );\n\n return tree.body.innerHTML.trim();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["tuiIsString"],"mappings":"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"}
@@ -13,12 +13,12 @@ import { tuiIsString } from '@taiga-ui/cdk/utils/miscellaneous';
13
13
  * Documentation: https://www.w3.org/TR/SVG11/pservers.html
14
14
  *
15
15
  */
16
- export function tuiSvgLinearGradientProcessor(svg, salt) {
16
+ export function tuiSvgLinearGradientProcessor(svg, salt = makeRandomSalt(), fallback = `rgba(0, 0, 0, 0.7)`) {
17
17
  if (tuiIsString(svg)) {
18
18
  const uniqueIds = extractLinearGradientIdsFromSvg(svg);
19
- return uniqueIds.reduce((newSvg, previousId) => {
19
+ const rawSvg = uniqueIds.reduce((newSvg, previousId) => {
20
20
  const escapedId = escapeRegExp(previousId);
21
- const newId = `${previousId}_${salt || makeRandomSalt()}`;
21
+ const newId = `id_${salt}_${previousId}`;
22
22
  return newSvg
23
23
  .replace(new RegExp(`"${escapedId}"`, `g`), `"${newId}"`)
24
24
  .replace(new RegExp(`'${escapedId}'`, `g`), `'${newId}'`)
@@ -26,6 +26,7 @@ export function tuiSvgLinearGradientProcessor(svg, salt) {
26
26
  .replace(new RegExp(`url\\("#${escapedId}"\\)`, `g`), `url("#${newId}")`)
27
27
  .replace(new RegExp(`url\\(#${escapedId}\\)`, `g`), `url(#${newId})`);
28
28
  }, svg);
29
+ return setFallbackForGradientFill(rawSvg, fallback);
29
30
  }
30
31
  return svg;
31
32
  }
@@ -40,4 +41,11 @@ function extractLinearGradientIdsFromSvg(svg) {
40
41
  const ids = ((_a = svg.match(/url\(("?)('*)#(.*?)('*)\)/g)) !== null && _a !== void 0 ? _a : []).map(url => url.slice(4, url.length - 1).replace(/['"#]+/g, ``));
41
42
  return Array.from(new Set(ids));
42
43
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnLWxpbmVhci1ncmFkaWVudC1wcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvdXRpbHMvc3ZnL3N2Zy1saW5lYXItZ3JhZGllbnQtcHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUU5RDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUN6QyxHQUFnQixFQUNoQixJQUFzQjtJQUV0QixJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNsQixNQUFNLFNBQVMsR0FBRywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV2RCxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEVBQUU7WUFDM0MsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sS0FBSyxHQUFHLEdBQUcsVUFBVSxJQUFJLElBQUksSUFBSSxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBRTFELE9BQU8sTUFBTTtpQkFDUixPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDO2lCQUN4RCxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDO2lCQUN4RCxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsV0FBVyxTQUFTLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxTQUFTLEtBQUssSUFBSSxDQUFDO2lCQUN4RSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsV0FBVyxTQUFTLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxTQUFTLEtBQUssSUFBSSxDQUFDO2lCQUN4RSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxTQUFTLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDOUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ1g7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLGNBQWM7SUFDbkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsTUFBYztJQUNoQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELFNBQVMsK0JBQStCLENBQUMsR0FBVzs7SUFDaEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFBLEdBQUcsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsbUNBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ2xFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FDdEQsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R1aVNhZmVIdG1sfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2ludGVyZmFjZXMnO1xuaW1wb3J0IHt0dWlJc1N0cmluZ30gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9taXNjZWxsYW5lb3VzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb246XG4gKiBBbnkg4oCYbGluZWFyR3JhZGllbnTigJkgYXR0cmlidXRlcyB3aGljaCBhcmUgZGVmaW5lZCBvbiB0aGUgcmVmZXJlbmNlZFxuICogZWxlbWVudCB3aGljaCBhcmUgbm90IGRlZmluZWQgb24gdGhpcyBlbGVtZW50IGFyZSBpbmhlcml0ZWQgYnkgdGhpcyBlbGVtZW50LlxuICogSWYgdGhpcyBlbGVtZW50IGhhcyBubyBkZWZpbmVkIGdyYWRpZW50IHN0b3BzLCBhbmQgdGhlIHJlZmVyZW5jZWQgZWxlbWVudCBkb2VzXG4gKiAocG9zc2libHkgZHVlIHRvIGl0cyBvd24g4oCYeGxpbms6aHJlZuKAmSBhdHRyaWJ1dGUpLCB0aGVuIHRoaXMgZWxlbWVudCBpbmhlcml0c1xuICogdGhlIGdyYWRpZW50IHN0b3AgZnJvbSB0aGUgcmVmZXJlbmNlZCBlbGVtZW50LiBJbmhlcml0YW5jZSBjYW4gYmUgaW5kaXJlY3RcbiAqIHRvIGFuIGFyYml0cmFyeSBsZXZlbDsgdGh1cywgaWYgdGhlIHJlZmVyZW5jZWQgZWxlbWVudCBpbmhlcml0cyBhdHRyaWJ1dGVcbiAqIG9yIGdyYWRpZW50IHN0b3BzIGR1ZSB0byBpdHMgb3duIOKAmHhsaW5rOmhyZWbigJkgYXR0cmlidXRlLCB0aGVuIHRoZSBjdXJyZW50XG4gKiBlbGVtZW50IGNhbiBpbmhlcml0IHRob3NlIGF0dHJpYnV0ZXMgb3IgZ3JhZGllbnQgc3RvcHMuXG4gKlxuICogRG9jdW1lbnRhdGlvbjogaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRzExL3BzZXJ2ZXJzLmh0bWxcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0dWlTdmdMaW5lYXJHcmFkaWVudFByb2Nlc3NvcihcbiAgICBzdmc6IFR1aVNhZmVIdG1sLFxuICAgIHNhbHQ/OiBudW1iZXIgfCBzdHJpbmcsXG4pOiBUdWlTYWZlSHRtbCB7XG4gICAgaWYgKHR1aUlzU3RyaW5nKHN2ZykpIHtcbiAgICAgICAgY29uc3QgdW5pcXVlSWRzID0gZXh0cmFjdExpbmVhckdyYWRpZW50SWRzRnJvbVN2ZyhzdmcpO1xuXG4gICAgICAgIHJldHVybiB1bmlxdWVJZHMucmVkdWNlKChuZXdTdmcsIHByZXZpb3VzSWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVzY2FwZWRJZCA9IGVzY2FwZVJlZ0V4cChwcmV2aW91c0lkKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0lkID0gYCR7cHJldmlvdXNJZH1fJHtzYWx0IHx8IG1ha2VSYW5kb21TYWx0KCl9YDtcblxuICAgICAgICAgICAgcmV0dXJuIG5ld1N2Z1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYFwiJHtlc2NhcGVkSWR9XCJgLCBgZ2ApLCBgXCIke25ld0lkfVwiYClcbiAgICAgICAgICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKGAnJHtlc2NhcGVkSWR9J2AsIGBnYCksIGAnJHtuZXdJZH0nYClcbiAgICAgICAgICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKGB1cmxcXFxcKCcjJHtlc2NhcGVkSWR9J1xcXFwpYCwgYGdgKSwgYHVybCgnIyR7bmV3SWR9JylgKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYHVybFxcXFwoXCIjJHtlc2NhcGVkSWR9XCJcXFxcKWAsIGBnYCksIGB1cmwoXCIjJHtuZXdJZH1cIilgKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYHVybFxcXFwoIyR7ZXNjYXBlZElkfVxcXFwpYCwgYGdgKSwgYHVybCgjJHtuZXdJZH0pYCk7XG4gICAgICAgIH0sIHN2Zyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN2Zztcbn1cblxuZnVuY3Rpb24gbWFrZVJhbmRvbVNhbHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogRGF0ZS5ub3coKSk7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzZWFyY2g6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNlYXJjaC5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgYFxcXFwkJmApO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0TGluZWFyR3JhZGllbnRJZHNGcm9tU3ZnKHN2Zzogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGlkcyA9IChzdmcubWF0Y2goL3VybFxcKChcIj8pKCcqKSMoLio/KSgnKilcXCkvZykgPz8gW10pLm1hcCh1cmwgPT5cbiAgICAgICAgdXJsLnNsaWNlKDQsIHVybC5sZW5ndGggLSAxKS5yZXBsYWNlKC9bJ1wiI10rL2csIGBgKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChpZHMpKTtcbn1cbiJdfQ==
44
+ function setFallbackForGradientFill(svg, fallback) {
45
+ const tree = new DOMParser().parseFromString(svg, `text/html`);
46
+ tree.body
47
+ .querySelectorAll(`[fill^=url]`) // only gradient
48
+ .forEach(element => element.setAttribute(`fill`, `${element.getAttribute(`fill`)} ${fallback}`.trim()));
49
+ return tree.body.innerHTML.trim();
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnLWxpbmVhci1ncmFkaWVudC1wcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvdXRpbHMvc3ZnL3N2Zy1saW5lYXItZ3JhZGllbnQtcHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUU5RDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUN6QyxHQUFnQixFQUNoQixPQUF3QixjQUFjLEVBQUUsRUFDeEMsV0FBbUIsb0JBQW9CO0lBRXZDLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2xCLE1BQU0sU0FBUyxHQUFHLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEVBQUU7WUFDbkQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBRXpDLE9BQU8sTUFBTTtpQkFDUixPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDO2lCQUN4RCxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxTQUFTLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDO2lCQUN4RCxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsV0FBVyxTQUFTLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxTQUFTLEtBQUssSUFBSSxDQUFDO2lCQUN4RSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsV0FBVyxTQUFTLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxTQUFTLEtBQUssSUFBSSxDQUFDO2lCQUN4RSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxTQUFTLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxRQUFRLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDOUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRVIsT0FBTywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7S0FDdkQ7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLGNBQWM7SUFDbkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsTUFBYztJQUNoQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELFNBQVMsK0JBQStCLENBQUMsR0FBVzs7SUFDaEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFBLEdBQUcsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsbUNBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ2xFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FDdEQsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUFDLEdBQVcsRUFBRSxRQUFnQjtJQUM3RCxNQUFNLElBQUksR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFL0QsSUFBSSxDQUFDLElBQUk7U0FDSixnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxnQkFBZ0I7U0FDaEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQ2YsT0FBTyxDQUFDLFlBQVksQ0FDaEIsTUFBTSxFQUNOLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FDdkQsQ0FDSixDQUFDO0lBRU4sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUdWlTYWZlSHRtbH0gZnJvbSAnQHRhaWdhLXVpL2Nkay9pbnRlcmZhY2VzJztcbmltcG9ydCB7dHVpSXNTdHJpbmd9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uOlxuICogQW55IOKAmGxpbmVhckdyYWRpZW504oCZIGF0dHJpYnV0ZXMgd2hpY2ggYXJlIGRlZmluZWQgb24gdGhlIHJlZmVyZW5jZWRcbiAqIGVsZW1lbnQgd2hpY2ggYXJlIG5vdCBkZWZpbmVkIG9uIHRoaXMgZWxlbWVudCBhcmUgaW5oZXJpdGVkIGJ5IHRoaXMgZWxlbWVudC5cbiAqIElmIHRoaXMgZWxlbWVudCBoYXMgbm8gZGVmaW5lZCBncmFkaWVudCBzdG9wcywgYW5kIHRoZSByZWZlcmVuY2VkIGVsZW1lbnQgZG9lc1xuICogKHBvc3NpYmx5IGR1ZSB0byBpdHMgb3duIOKAmHhsaW5rOmhyZWbigJkgYXR0cmlidXRlKSwgdGhlbiB0aGlzIGVsZW1lbnQgaW5oZXJpdHNcbiAqIHRoZSBncmFkaWVudCBzdG9wIGZyb20gdGhlIHJlZmVyZW5jZWQgZWxlbWVudC4gSW5oZXJpdGFuY2UgY2FuIGJlIGluZGlyZWN0XG4gKiB0byBhbiBhcmJpdHJhcnkgbGV2ZWw7IHRodXMsIGlmIHRoZSByZWZlcmVuY2VkIGVsZW1lbnQgaW5oZXJpdHMgYXR0cmlidXRlXG4gKiBvciBncmFkaWVudCBzdG9wcyBkdWUgdG8gaXRzIG93biDigJh4bGluazpocmVm4oCZIGF0dHJpYnV0ZSwgdGhlbiB0aGUgY3VycmVudFxuICogZWxlbWVudCBjYW4gaW5oZXJpdCB0aG9zZSBhdHRyaWJ1dGVzIG9yIGdyYWRpZW50IHN0b3BzLlxuICpcbiAqIERvY3VtZW50YXRpb246IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9wc2VydmVycy5odG1sXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHVpU3ZnTGluZWFyR3JhZGllbnRQcm9jZXNzb3IoXG4gICAgc3ZnOiBUdWlTYWZlSHRtbCxcbiAgICBzYWx0OiBudW1iZXIgfCBzdHJpbmcgPSBtYWtlUmFuZG9tU2FsdCgpLFxuICAgIGZhbGxiYWNrOiBzdHJpbmcgPSBgcmdiYSgwLCAwLCAwLCAwLjcpYCxcbik6IFR1aVNhZmVIdG1sIHtcbiAgICBpZiAodHVpSXNTdHJpbmcoc3ZnKSkge1xuICAgICAgICBjb25zdCB1bmlxdWVJZHMgPSBleHRyYWN0TGluZWFyR3JhZGllbnRJZHNGcm9tU3ZnKHN2Zyk7XG4gICAgICAgIGNvbnN0IHJhd1N2ZyA9IHVuaXF1ZUlkcy5yZWR1Y2UoKG5ld1N2ZywgcHJldmlvdXNJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXNjYXBlZElkID0gZXNjYXBlUmVnRXhwKHByZXZpb3VzSWQpO1xuICAgICAgICAgICAgY29uc3QgbmV3SWQgPSBgaWRfJHtzYWx0fV8ke3ByZXZpb3VzSWR9YDtcblxuICAgICAgICAgICAgcmV0dXJuIG5ld1N2Z1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYFwiJHtlc2NhcGVkSWR9XCJgLCBgZ2ApLCBgXCIke25ld0lkfVwiYClcbiAgICAgICAgICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKGAnJHtlc2NhcGVkSWR9J2AsIGBnYCksIGAnJHtuZXdJZH0nYClcbiAgICAgICAgICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKGB1cmxcXFxcKCcjJHtlc2NhcGVkSWR9J1xcXFwpYCwgYGdgKSwgYHVybCgnIyR7bmV3SWR9JylgKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYHVybFxcXFwoXCIjJHtlc2NhcGVkSWR9XCJcXFxcKWAsIGBnYCksIGB1cmwoXCIjJHtuZXdJZH1cIilgKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYHVybFxcXFwoIyR7ZXNjYXBlZElkfVxcXFwpYCwgYGdgKSwgYHVybCgjJHtuZXdJZH0pYCk7XG4gICAgICAgIH0sIHN2Zyk7XG5cbiAgICAgICAgcmV0dXJuIHNldEZhbGxiYWNrRm9yR3JhZGllbnRGaWxsKHJhd1N2ZywgZmFsbGJhY2spO1xuICAgIH1cblxuICAgIHJldHVybiBzdmc7XG59XG5cbmZ1bmN0aW9uIG1ha2VSYW5kb21TYWx0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIERhdGUubm93KCkpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAoc2VhcmNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzZWFyY2gucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csIGBcXFxcJCZgKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdExpbmVhckdyYWRpZW50SWRzRnJvbVN2Zyhzdmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBpZHMgPSAoc3ZnLm1hdGNoKC91cmxcXCgoXCI/KSgnKikjKC4qPykoJyopXFwpL2cpID8/IFtdKS5tYXAodXJsID0+XG4gICAgICAgIHVybC5zbGljZSg0LCB1cmwubGVuZ3RoIC0gMSkucmVwbGFjZSgvWydcIiNdKy9nLCBgYCksXG4gICAgKTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoaWRzKSk7XG59XG5cbmZ1bmN0aW9uIHNldEZhbGxiYWNrRm9yR3JhZGllbnRGaWxsKHN2Zzogc3RyaW5nLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0cmVlID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzdmcsIGB0ZXh0L2h0bWxgKTtcblxuICAgIHRyZWUuYm9keVxuICAgICAgICAucXVlcnlTZWxlY3RvckFsbChgW2ZpbGxePXVybF1gKSAvLyBvbmx5IGdyYWRpZW50XG4gICAgICAgIC5mb3JFYWNoKGVsZW1lbnQgPT5cbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgICAgIGBmaWxsYCxcbiAgICAgICAgICAgICAgICBgJHtlbGVtZW50LmdldEF0dHJpYnV0ZShgZmlsbGApfSAke2ZhbGxiYWNrfWAudHJpbSgpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcblxuICAgIHJldHVybiB0cmVlLmJvZHkuaW5uZXJIVE1MLnRyaW0oKTtcbn1cbiJdfQ==
@@ -14,12 +14,12 @@ import { tuiIsString } from '@taiga-ui/cdk/utils/miscellaneous';
14
14
  * Documentation: https://www.w3.org/TR/SVG11/pservers.html
15
15
  *
16
16
  */
17
- function tuiSvgLinearGradientProcessor(svg, salt) {
17
+ function tuiSvgLinearGradientProcessor(svg, salt = makeRandomSalt(), fallback = `rgba(0, 0, 0, 0.7)`) {
18
18
  if (tuiIsString(svg)) {
19
19
  const uniqueIds = extractLinearGradientIdsFromSvg(svg);
20
- return uniqueIds.reduce((newSvg, previousId) => {
20
+ const rawSvg = uniqueIds.reduce((newSvg, previousId) => {
21
21
  const escapedId = escapeRegExp(previousId);
22
- const newId = `${previousId}_${salt || makeRandomSalt()}`;
22
+ const newId = `id_${salt}_${previousId}`;
23
23
  return newSvg
24
24
  .replace(new RegExp(`"${escapedId}"`, `g`), `"${newId}"`)
25
25
  .replace(new RegExp(`'${escapedId}'`, `g`), `'${newId}'`)
@@ -27,6 +27,7 @@ function tuiSvgLinearGradientProcessor(svg, salt) {
27
27
  .replace(new RegExp(`url\\("#${escapedId}"\\)`, `g`), `url("#${newId}")`)
28
28
  .replace(new RegExp(`url\\(#${escapedId}\\)`, `g`), `url(#${newId})`);
29
29
  }, svg);
30
+ return setFallbackForGradientFill(rawSvg, fallback);
30
31
  }
31
32
  return svg;
32
33
  }
@@ -41,6 +42,13 @@ function extractLinearGradientIdsFromSvg(svg) {
41
42
  const ids = ((_a = svg.match(/url\(("?)('*)#(.*?)('*)\)/g)) !== null && _a !== void 0 ? _a : []).map(url => url.slice(4, url.length - 1).replace(/['"#]+/g, ``));
42
43
  return Array.from(new Set(ids));
43
44
  }
45
+ function setFallbackForGradientFill(svg, fallback) {
46
+ const tree = new DOMParser().parseFromString(svg, `text/html`);
47
+ tree.body
48
+ .querySelectorAll(`[fill^=url]`) // only gradient
49
+ .forEach(element => element.setAttribute(`fill`, `${element.getAttribute(`fill`)} ${fallback}`.trim()));
50
+ return tree.body.innerHTML.trim();
51
+ }
44
52
 
45
53
  /**
46
54
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-utils-svg.js","sources":["../../../projects/cdk/utils/svg/svg-linear-gradient-processor.ts","../../../projects/cdk/utils/svg/taiga-ui-cdk-utils-svg.ts"],"sourcesContent":["import {TuiSafeHtml} from '@taiga-ui/cdk/interfaces';\nimport {tuiIsString} from '@taiga-ui/cdk/utils/miscellaneous';\n\n/**\n * @description:\n * Any ‘linearGradient’ attributes which are defined on the referenced\n * element which are not defined on this element are inherited by this element.\n * If this element has no defined gradient stops, and the referenced element does\n * (possibly due to its own ‘xlink:href’ attribute), then this element inherits\n * the gradient stop from the referenced element. Inheritance can be indirect\n * to an arbitrary level; thus, if the referenced element inherits attribute\n * or gradient stops due to its own ‘xlink:href’ attribute, then the current\n * element can inherit those attributes or gradient stops.\n *\n * Documentation: https://www.w3.org/TR/SVG11/pservers.html\n *\n */\nexport function tuiSvgLinearGradientProcessor(\n svg: TuiSafeHtml,\n salt?: number | string,\n): TuiSafeHtml {\n if (tuiIsString(svg)) {\n const uniqueIds = extractLinearGradientIdsFromSvg(svg);\n\n return uniqueIds.reduce((newSvg, previousId) => {\n const escapedId = escapeRegExp(previousId);\n const newId = `${previousId}_${salt || makeRandomSalt()}`;\n\n return newSvg\n .replace(new RegExp(`\"${escapedId}\"`, `g`), `\"${newId}\"`)\n .replace(new RegExp(`'${escapedId}'`, `g`), `'${newId}'`)\n .replace(new RegExp(`url\\\\('#${escapedId}'\\\\)`, `g`), `url('#${newId}')`)\n .replace(new RegExp(`url\\\\(\"#${escapedId}\"\\\\)`, `g`), `url(\"#${newId}\")`)\n .replace(new RegExp(`url\\\\(#${escapedId}\\\\)`, `g`), `url(#${newId})`);\n }, svg);\n }\n\n return svg;\n}\n\nfunction makeRandomSalt(): number {\n return Math.floor(Math.random() * Date.now());\n}\n\nfunction escapeRegExp(search: string): string {\n return search.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, `\\\\$&`);\n}\n\nfunction extractLinearGradientIdsFromSvg(svg: string): string[] {\n const ids = (svg.match(/url\\((\"?)('*)#(.*?)('*)\\)/g) ?? []).map(url =>\n url.slice(4, url.length - 1).replace(/['\"#]+/g, ``),\n );\n\n return Array.from(new Set(ids));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAGA;;;;;;;;;;;;;AAaG;AACa,SAAA,6BAA6B,CACzC,GAAgB,EAChB,IAAsB,EAAA;AAEtB,IAAA,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE;AAClB,QAAA,MAAM,SAAS,GAAG,+BAA+B,CAAC,GAAG,CAAC,CAAC;QAEvD,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,UAAU,KAAI;AAC3C,YAAA,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,IAAI,IAAI,cAAc,EAAE,CAAA,CAAE,CAAC;AAE1D,YAAA,OAAO,MAAM;AACR,iBAAA,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,CAAA,CAAA,CAAG,EAAE,CAAA,CAAA,CAAG,CAAC,EAAE,CAAI,CAAA,EAAA,KAAK,GAAG,CAAC;AACxD,iBAAA,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,SAAS,CAAA,CAAA,CAAG,EAAE,CAAA,CAAA,CAAG,CAAC,EAAE,CAAI,CAAA,EAAA,KAAK,GAAG,CAAC;AACxD,iBAAA,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,SAAS,CAAA,IAAA,CAAM,EAAE,CAAA,CAAA,CAAG,CAAC,EAAE,CAAS,MAAA,EAAA,KAAK,IAAI,CAAC;AACxE,iBAAA,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,SAAS,CAAA,IAAA,CAAM,EAAE,CAAA,CAAA,CAAG,CAAC,EAAE,CAAS,MAAA,EAAA,KAAK,IAAI,CAAC;AACxE,iBAAA,OAAO,CAAC,IAAI,MAAM,CAAC,UAAU,SAAS,CAAA,GAAA,CAAK,EAAE,CAAA,CAAA,CAAG,CAAC,EAAE,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAA,CAAG,CAAC,CAAC;SAC7E,EAAE,GAAG,CAAC,CAAC;AACX,KAAA;AAED,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,cAAc,GAAA;AACnB,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAA;IAChC,OAAO,MAAM,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAA,IAAA,CAAM,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,+BAA+B,CAAC,GAAW,EAAA;;AAChD,IAAA,MAAM,GAAG,GAAG,CAAC,MAAA,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,EAAE,GAAG,CAAC,GAAG,IAC/D,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAE,CAAA,CAAC,CACtD,CAAC;IAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC;;ACtDA;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-cdk-utils-svg.js","sources":["../../../projects/cdk/utils/svg/svg-linear-gradient-processor.ts","../../../projects/cdk/utils/svg/taiga-ui-cdk-utils-svg.ts"],"sourcesContent":["import {TuiSafeHtml} from '@taiga-ui/cdk/interfaces';\nimport {tuiIsString} from '@taiga-ui/cdk/utils/miscellaneous';\n\n/**\n * @description:\n * Any ‘linearGradient’ attributes which are defined on the referenced\n * element which are not defined on this element are inherited by this element.\n * If this element has no defined gradient stops, and the referenced element does\n * (possibly due to its own ‘xlink:href’ attribute), then this element inherits\n * the gradient stop from the referenced element. Inheritance can be indirect\n * to an arbitrary level; thus, if the referenced element inherits attribute\n * or gradient stops due to its own ‘xlink:href’ attribute, then the current\n * element can inherit those attributes or gradient stops.\n *\n * Documentation: https://www.w3.org/TR/SVG11/pservers.html\n *\n */\nexport function tuiSvgLinearGradientProcessor(\n svg: TuiSafeHtml,\n salt: number | string = makeRandomSalt(),\n fallback: string = `rgba(0, 0, 0, 0.7)`,\n): TuiSafeHtml {\n if (tuiIsString(svg)) {\n const uniqueIds = extractLinearGradientIdsFromSvg(svg);\n const rawSvg = uniqueIds.reduce((newSvg, previousId) => {\n const escapedId = escapeRegExp(previousId);\n const newId = `id_${salt}_${previousId}`;\n\n return newSvg\n .replace(new RegExp(`\"${escapedId}\"`, `g`), `\"${newId}\"`)\n .replace(new RegExp(`'${escapedId}'`, `g`), `'${newId}'`)\n .replace(new RegExp(`url\\\\('#${escapedId}'\\\\)`, `g`), `url('#${newId}')`)\n .replace(new RegExp(`url\\\\(\"#${escapedId}\"\\\\)`, `g`), `url(\"#${newId}\")`)\n .replace(new RegExp(`url\\\\(#${escapedId}\\\\)`, `g`), `url(#${newId})`);\n }, svg);\n\n return setFallbackForGradientFill(rawSvg, fallback);\n }\n\n return svg;\n}\n\nfunction makeRandomSalt(): number {\n return Math.floor(Math.random() * Date.now());\n}\n\nfunction escapeRegExp(search: string): string {\n return search.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, `\\\\$&`);\n}\n\nfunction extractLinearGradientIdsFromSvg(svg: string): string[] {\n const ids = (svg.match(/url\\((\"?)('*)#(.*?)('*)\\)/g) ?? []).map(url =>\n url.slice(4, url.length - 1).replace(/['\"#]+/g, ``),\n );\n\n return Array.from(new Set(ids));\n}\n\nfunction setFallbackForGradientFill(svg: string, fallback: string): string {\n const tree = new DOMParser().parseFromString(svg, `text/html`);\n\n tree.body\n .querySelectorAll(`[fill^=url]`) // only gradient\n .forEach(element =>\n element.setAttribute(\n `fill`,\n `${element.getAttribute(`fill`)} ${fallback}`.trim(),\n ),\n );\n\n return tree.body.innerHTML.trim();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taiga-ui/cdk",
3
- "version": "3.42.1-canary.290249b",
3
+ "version": "3.42.1-canary.77ac3f2",
4
4
  "description": "Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance",
5
5
  "keywords": [
6
6
  "angular",
@@ -13,4 +13,4 @@ import { TuiSafeHtml } from '@taiga-ui/cdk/interfaces';
13
13
  * Documentation: https://www.w3.org/TR/SVG11/pservers.html
14
14
  *
15
15
  */
16
- export declare function tuiSvgLinearGradientProcessor(svg: TuiSafeHtml, salt?: number | string): TuiSafeHtml;
16
+ export declare function tuiSvgLinearGradientProcessor(svg: TuiSafeHtml, salt?: number | string, fallback?: string): TuiSafeHtml;