{"_id":"ngx-transloco-markup","_rev":"14-993c9cb9366dec102b63f82d714b72d4","name":"ngx-transloco-markup","dist-tags":{"latest":"6.0.2"},"versions":{"0.0.1":{"name":"ngx-transloco-markup","version":"0.0.1","description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","author":{"name":"Daan Scheerens"},"license":"MIT","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"sideEffects":false,"peerDependencies":{"@angular/common":">=8.0.0","@angular/core":">=8.0.0","@ngneat/transloco":"^2.0.0","rxjs":"^6.5.0","tslib":"^1.10.0"},"devDependencies":{"@angular-devkit/build-angular":"~0.803.26","@angular-devkit/build-ng-packagr":"~0.803.26","@angular/animations":"^8.2.14","@angular/cdk":"~8.2.3","@angular/cli":"^8.3.26","@angular/common":"^8.2.14","@angular/compiler":"^8.2.14","@angular/compiler-cli":"^8.2.14","@angular/core":"^8.2.14","@angular/forms":"^8.2.14","@angular/material":"^8.2.3","@angular/platform-browser":"^8.2.14","@angular/platform-browser-dynamic":"^8.2.14","@angular/router":"^8.2.14","@dscheerens/tslint-presets":"^7.0.0","@ngneat/transloco":"^2.17.0","@types/jasmine":"~3.5.0","@types/jasminewd2":"~2.0.8","ci-info":"^2.0.0","codelyzer":"~5.2.1","jasmine-core":"~3.5.0","jasmine-spec-reporter":"^4.2.1","karma":"^4.4.1","karma-chrome-launcher":"^3.1.0","karma-coverage-istanbul-reporter":"^2.1.1","karma-jasmine":"^2.0.1","karma-mocha-reporter":"^2.2.5","ng-packagr":"^5.7.1","rxjs":"^6.5.4","tsickle":"0.37.0","tslib":"^1.10.0","tslint":"~5.20.1","typescript":"~3.5.3","typescript-tslint-plugin":"^0.5.5","zone.js":"~0.9.1"},"main":"bundles/ngx-transloco-markup.umd.js","module":"fesm5/ngx-transloco-markup.js","es2015":"fesm2015/ngx-transloco-markup.js","esm5":"esm5/ngx-transloco-markup.js","esm2015":"esm2015/ngx-transloco-markup.js","fesm5":"fesm5/ngx-transloco-markup.js","fesm2015":"fesm2015/ngx-transloco-markup.js","typings":"ngx-transloco-markup.d.ts","metadata":"ngx-transloco-markup.metadata.json","dependencies":{"tslib":"^1.9.0"},"bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"_id":"ngx-transloco-markup@0.0.1","_nodeVersion":"10.15.1","_npmVersion":"6.14.3","dist":{"integrity":"sha512-wGeM6aV2Tz3Obakhv5CywbLG6hdD/vTXvAPFYpmPmdzVTURL/f1fu24UcxeOMkvQSwGpiKdNE3HmuQoja8zcWQ==","shasum":"0b7265d48e84e8dff901738e2c2c504ea72e6d87","tarball":"https://registry.npmjs.org/ngx-transloco-markup/-/ngx-transloco-markup-0.0.1.tgz","fileCount":92,"unpackedSize":830639,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJes819CRA9TVsSAnZWagAAgUYP/212/mL5bMohoURtJ7If\nSF9mQZz/cOBYjuYtElXSlAykyrrBZ8pBV4+jAq2H7K1+EBGTfD+bcJw2RlX2\nXBiYJ6dOoP0aY2Fk88dspCt4aFlOFnYN7Ex7cSoVQk68TcwqWAVP2ojJQd77\noEfQJBmZb3m63JT0RqfA+cnhTXi7F4wXU8occTXXuLj2zfiNHV3OtFA4d8yL\nP8lLU1+yR6p2dVn3pCRmdf3bdLwVwfk1ot5fX2vEdquBpD00LsJwAhewXvUM\nU/7FaFbjyYO3c/iq6C6+1GUVGr8xWkhThzANWbEtOQ6Z9VHvmcq19ENkHeb4\nA29K1w5vGhnkGltRkVJQkCw8fi5cDLaixvYl7/MfPTsMno9q/xzQiDQMZQ9r\nznrFK58kmFmtn6OGL8UrmihinZZPnB8PKTPDApS5INmvOk1GuXekJhET78P+\nGR9BfFW1ht/8xSROLbnWrBCcNUMXQHT7q0wjhmPjhMr4CpOZrXjjFo5zIphl\n7RWaZ6NLNzMn/EV8sb4CP480FwZtNDCTNCN5SjAX3JKn27t2DiO9Vkaa7rxj\nuXUU/e0y4uL9dSsep1+VKZMiwYiwEuqSKaHYCeIJJi+hU3Sz2VgD+Ss9vSNL\nZLNse1IHISQL8ftLwiwcumcMfffIdwsh+8LhbQQE5+1zJ5zHz4RfXKbr3Ro6\nJgZ3\r\n=r5jF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCHiB/UGa27b0UVL/AYcpIpAGVOHP3EBG36eFY2FsxGAIhAJkCh6eeIpfd8Ei2sI6YfGM6lbmxrCBh5+KXE1yL2wlW"}]},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"_npmUser":{"name":"dscheerens","email":"daan.scheerens@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ngx-transloco-markup_0.0.1_1588841853252_0.574023313055281"},"_hasShrinkwrap":false},"0.1.0":{"name":"ngx-transloco-markup","version":"0.1.0","description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","author":{"name":"Daan Scheerens"},"license":"MIT","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"sideEffects":false,"peerDependencies":{"@angular/common":">=8.0.0","@angular/core":">=8.0.0","@ngneat/transloco":"^2.0.0","rxjs":"^6.5.0","tslib":"^1.10.0"},"devDependencies":{"@angular-devkit/build-angular":"~0.803.26","@angular-devkit/build-ng-packagr":"~0.803.26","@angular/animations":"^8.2.14","@angular/cdk":"~8.2.3","@angular/cli":"^8.3.26","@angular/common":"^8.2.14","@angular/compiler":"^8.2.14","@angular/compiler-cli":"^8.2.14","@angular/core":"^8.2.14","@angular/forms":"^8.2.14","@angular/material":"^8.2.3","@angular/platform-browser":"^8.2.14","@angular/platform-browser-dynamic":"^8.2.14","@angular/router":"^8.2.14","@dscheerens/tslint-presets":"^7.0.0","@ngneat/spectator":"^4.11.1","@ngneat/transloco":"^2.17.0","@types/jasmine":"~3.5.0","@types/jasminewd2":"~2.0.8","ci-info":"^2.0.0","codelyzer":"~5.2.1","jasmine-core":"~3.5.0","jasmine-spec-reporter":"^4.2.1","karma":"^4.4.1","karma-chrome-launcher":"^3.1.0","karma-coverage-istanbul-reporter":"^2.1.1","karma-jasmine":"^2.0.1","karma-mocha-reporter":"^2.2.5","ng-packagr":"^5.7.1","ngx-typesafe-forms":"^1.0.0","rxjs":"^6.5.4","tsickle":"0.37.0","tslib":"^1.10.0","tslint":"~5.20.1","typescript":"~3.5.3","typescript-tslint-plugin":"^0.5.5","zone.js":"~0.9.1"},"main":"bundles/ngx-transloco-markup.umd.js","module":"fesm5/ngx-transloco-markup.js","es2015":"fesm2015/ngx-transloco-markup.js","esm5":"esm5/ngx-transloco-markup.js","esm2015":"esm2015/ngx-transloco-markup.js","fesm5":"fesm5/ngx-transloco-markup.js","fesm2015":"fesm2015/ngx-transloco-markup.js","typings":"ngx-transloco-markup.d.ts","metadata":"ngx-transloco-markup.metadata.json","dependencies":{"tslib":"^1.9.0"},"bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"_id":"ngx-transloco-markup@0.1.0","_nodeVersion":"12.16.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-mthWpluYW9xM0Jucfdjlm9KuRpVpJGVleumVkARjByM8AiMKWjJSTmIltjqQAnNcBDoIctL9NqdVdMtIKdih5Q==","shasum":"6789fc9ad31d2a21a5d3d29f3929650d302da4bd","tarball":"https://registry.npmjs.org/ngx-transloco-markup/-/ngx-transloco-markup-0.1.0.tgz","fileCount":102,"unpackedSize":1309554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFJ9HCRA9TVsSAnZWagAAkFYP/1wD6ZJUHBM+1NguGCZg\n95EjGvfYdt3tV55jSuah6Bep4Yjvw3aPagbvWpkcn25xSwAMrLiJv08d5e7g\nawdVaK2U9db8nMD3Yowekk+pMJh/tfbbBzKgrLzDqrdAWZgWKpYLyQNux42V\nxUcA06qDo+yrd30Mt43Z9ZuC8f6RSmnRMirteAADFWuA5XrgXsXNFhRQ42ho\n+OOAxE0JVG/xdzdgx9kysCoHxQeyHiibVgDJpOaLmNs9QCG2T9aAe+SZg5Dz\ndz+W7IbLTqte3fcPpJ5rhl81swJUKhyieDnRTotQjOCFFenH3tBBO1DOYTCt\n+p1y155zgFlhvWERG5zw2wTUjb5WOAkSrj5xuIRTB+YZHt9iCLo4AJ3YNy/5\nUMvbLw1ReKjF5cu+mJ7E/7TEK/Cc1eC9tJ87Wc4DrOwZ1uskAK4blJ2Ngxgo\n0ec1xBZscKnpDCXN8HDuY9De47j20H9caudiIzzgCokKe6sGS+Q1RJJOnLlQ\nZgT7v99YPg+bgd9Qr0INA+6KBjmgdSK/SNe4ghzADwoPxldo5QymojAuQ0wK\nkFG4a07CFmFKagKSF2PzReEK/bROGbGUEKpViyWfXp6cEEeYWseTTNT2guSh\nxosbgbFm9T1y7Oxm6uiLgSH/q7AUDIohH+DF25yk7AOVEBAYJUqHeCx25WBy\nzBwo\r\n=R/it\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTUmRPfAJq0IJWWuPM+I9uEdN0n8uqu4Punb3jRd85lQIhAJOSq5H3z/KYEXeU4lfYb7EcTeO0mta5vf3bjVxeSzwR"}]},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"_npmUser":{"name":"dscheerens","email":"daan.scheerens@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ngx-transloco-markup_0.1.0_1595187015302_0.8543243356385803"},"_hasShrinkwrap":false},"1.0.0":{"name":"ngx-transloco-markup","version":"1.0.0","description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","author":{"name":"Daan Scheerens"},"license":"MIT","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"sideEffects":false,"peerDependencies":{"@angular/common":">=8.0.0","@angular/core":">=8.0.0","@ngneat/transloco":"^2.0.0","rxjs":"^6.5.0","tslib":"^1.10.0"},"devDependencies":{"@angular-devkit/build-angular":"0.803.28","@angular-devkit/build-ng-packagr":"0.803.28","@angular/animations":"^8.2.14","@angular/cdk":"^8.2.3","@angular/cli":"^8.3.28","@angular/common":"^8.2.14","@angular/compiler":"^8.2.14","@angular/compiler-cli":"^8.2.14","@angular/core":"^8.2.14","@angular/forms":"^8.2.14","@angular/material":"^8.2.3","@angular/platform-browser":"^8.2.14","@angular/platform-browser-dynamic":"^8.2.14","@angular/router":"^8.2.14","@dscheerens/tslint-presets":"^7.0.0","@ngneat/spectator":"^4.11.1","@ngneat/transloco":"^2.17.0","@types/jasmine":"~3.5.0","@types/jasminewd2":"~2.0.8","ci-info":"^2.0.0","codelyzer":"~5.2.1","jasmine-core":"~3.5.0","jasmine-spec-reporter":"^4.2.1","karma":"^4.4.1","karma-chrome-launcher":"^3.1.0","karma-coverage-istanbul-reporter":"^2.1.1","karma-jasmine":"^2.0.1","karma-mocha-reporter":"^2.2.5","ng-packagr":"^5.7.1","ngx-typesafe-forms":"^1.0.0","rxjs":"^6.5.4","tsickle":"0.37.0","tslib":"^1.10.0","tslint":"~5.20.1","typescript":"~3.5.3","typescript-tslint-plugin":"^0.5.5","zone.js":"~0.9.1"},"main":"bundles/ngx-transloco-markup.umd.js","module":"fesm5/ngx-transloco-markup.js","es2015":"fesm2015/ngx-transloco-markup.js","esm5":"esm5/ngx-transloco-markup.js","esm2015":"esm2015/ngx-transloco-markup.js","fesm5":"fesm5/ngx-transloco-markup.js","fesm2015":"fesm2015/ngx-transloco-markup.js","typings":"ngx-transloco-markup.d.ts","metadata":"ngx-transloco-markup.metadata.json","dependencies":{"tslib":"^1.9.0"},"bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"_id":"ngx-transloco-markup@1.0.0","_nodeVersion":"10.15.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-9c3eA5ZhW2RwTJZOOaYxu9k5XuEDiKAdBaedjKZHLRTvpuYOjsJTqNGbg2hsTNzTv/D7boBa+YbXOvq6CneoOQ==","shasum":"58fa575c3b633a24f2565539844e7ea2389997ad","tarball":"https://registry.npmjs.org/ngx-transloco-markup/-/ngx-transloco-markup-1.0.0.tgz","fileCount":102,"unpackedSize":1311514,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfJVS7CRA9TVsSAnZWagAA/LoQAKLEphxpdlifxsE2B+sl\nVgB9lQFPcCaSWsywdaUCvzmrqJie6O86JrXSARKyxp937Zios8WYhvQU0M6m\nXRSDFCTlhyjBxf51vJLYSmnGXhObS/2/qUklNdazSRTzyBFl1d7uhZQI2oKK\nwAzswHoYApFW7mHliMYv9sCtcn1To2jYW8kimPuYOfiDTIUJwC0RzqJnn7f1\ncwkYOkcka9fopRIUmp9MsUYZymjkG2J1VZNrJqlqrIFKGkx6zeOLYjr7rzLe\ny9Buq/46ip70y98apjEhwZotgEtu726fE5+iGbnhvDpdYJNOnJ/BR/XIXX4G\nywEuEI24emmx0xGaVf6lk3yZAHP6VapiuMst6JiJ74DTuPzBMjKCnuMzBVpF\nXZEvPslY1kfgrk0GCdmy+S9wuMBwXB8GKGE8bXv6Hn6JQv+B2ddhqA/fjWEq\nj1rmv3PmlQFpYlXiDOkGKMV1rAyhSm7VZAIERxYUfMepuZxTMP4Y4HGf2AYt\n64vW6QTS+7/8XWt8uVCZqervGIqbjtkcWsyN8TEPpgJy+H2QYJFvHR4I0OnE\nId6nbNgHT5q2ysxEFNb0fIujQ5yBNIIjyprxhsop0ZMOr6ZawhKBtt8+BfB4\n13Kds+xdWZBpqa0ERbtx+5oPqK/TWXbTSOJQfGnzn5tZVJS8231j24QOhngO\neI74\r\n=Oe5S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEMz8CstciUrShMzpgvaKjGXViDaWBGWM5EnTKhw6/pXAiEAtoyV2C6a4vgUmQ2cHKa/IwsGHEi54uHee857Y1dz32s="}]},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"_npmUser":{"name":"dscheerens","email":"daan.scheerens@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ngx-transloco-markup_1.0.0_1596282042677_0.44970327773151686"},"_hasShrinkwrap":false},"2.0.0":{"name":"ngx-transloco-markup","version":"2.0.0","description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","author":{"name":"Daan Scheerens"},"license":"MIT","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"sideEffects":false,"peerDependencies":{"@angular/common":">=10.0.0","@angular/core":">=10.0.0","@ngneat/transloco":"^2.0.0","rxjs":"^6.5.0"},"main":"bundles/ngx-transloco-markup.umd.js","module":"fesm2015/ngx-transloco-markup.js","es2015":"fesm2015/ngx-transloco-markup.js","esm2015":"esm2015/ngx-transloco-markup.js","fesm2015":"fesm2015/ngx-transloco-markup.js","typings":"ngx-transloco-markup.d.ts","metadata":"ngx-transloco-markup.metadata.json","dependencies":{"tslib":"^2.0.0"},"bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"_id":"ngx-transloco-markup@2.0.0","_nodeVersion":"10.15.1","_npmVersion":"6.14.5","dist":{"integrity":"sha512-X+DqBDnf54HzeRox7xzJAg1y5ApMs0BbBoy8QPupDpecjVcgdDAiZHmJ9mWnN1kgJhqAHhJds9CzALS3Clgu7Q==","shasum":"4842951df0731e457eb2f4ddf161c57aafe79ebb","tarball":"https://registry.npmjs.org/ngx-transloco-markup/-/ngx-transloco-markup-2.0.0.tgz","fileCount":75,"unpackedSize":984378,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVpl7CRA9TVsSAnZWagAARCAQAJ9cHi7dRWWjdcuKuHgY\nr4cZmarGCJLUxTLN2gE5TOYqF1O5I176b2Dfge4hs0bYJ2YB7ezOaobGPYmF\n/Yls/QkPOlnExmsz8ck8e+6KGhp5eQ17n4O/l+hDQ4n7bK5OsvXwe4FMxjVe\nte13/ZVA+/qOJrpdJHijrhLp0TcTZCwRAW+uo6G/FurMF+8jLHq1MrMdUna+\nLRpvQFI75ezqxnF8UHIu21qHN4cN+dNt+3fEeemcsIRRPQkqXaBVB20TeKq0\n5x7hlxD10GKKhrCp+mG3AK0gxOnosTXZmmiHLbALV38KgrARCYRTI3c9PSKv\nnnoaxXinRyMc2iHko4vttD4MGuPCVdTCLkPlq130DL5Y1FwNjxjNIHm9aRCQ\n00QhaFOp3wqOs1iCb0q7ja2qrAJgbWUqTzWAFpEIuWDeCQ5oOjx5wiI7m0Qs\nsRQnVPp5d8fdj3p3CTmsFQmYMug86hM/35jeG8Tn293dicGdrPIxwNTn8B/G\nV1HBWcsYyaIR+hUJ0oQi2dp7107MwrXRYzW9jO+B027EVSD7MsoM9o7uIdeG\ngs1tCyuenjqrE75A0NIRFRy+ggUdVNdq05r7KdreINHH9WvhQdjg/pyM/gbq\nXGrp4BS1aI4mm7rqN8eLe/qGCjrz+ADlySB/wDmAEnQPBqqrJHFlkTuMXRE0\n5lLm\r\n=TYtf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAL0EHMZ0uHTKGq45oIXBWwcMAOKBTzCyzzGEUIV7gqcAiBhXo2oRIz5K/3J7OTnPeRFWzpJYmVBeSqPA2AVcLgcww=="}]},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"_npmUser":{"name":"dscheerens","email":"daan.scheerens@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ngx-transloco-markup_2.0.0_1599510907014_0.9525620658555833"},"_hasShrinkwrap":false},"3.0.0":{"name":"ngx-transloco-markup","version":"3.0.0","description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","author":{"name":"Daan Scheerens"},"license":"MIT","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"peerDependencies":{"@angular/common":">=13.0.0","@angular/core":">=13.0.0","@ngneat/transloco":"^3.0.0","rxjs":"^6 || ^7"},"module":"fesm2015/ngx-transloco-markup.mjs","es2020":"fesm2020/ngx-transloco-markup.mjs","esm2020":"esm2020/ngx-transloco-markup.mjs","fesm2020":"fesm2020/ngx-transloco-markup.mjs","fesm2015":"fesm2015/ngx-transloco-markup.mjs","typings":"ngx-transloco-markup.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./ngx-transloco-markup.d.ts","esm2020":"./esm2020/ngx-transloco-markup.mjs","es2020":"./fesm2020/ngx-transloco-markup.mjs","es2015":"./fesm2015/ngx-transloco-markup.mjs","node":"./fesm2015/ngx-transloco-markup.mjs","default":"./fesm2020/ngx-transloco-markup.mjs"}},"sideEffects":false,"dependencies":{"tslib":"^2.3.0"},"bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"_id":"ngx-transloco-markup@3.0.0","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","dist":{"integrity":"sha512-M/0xa4Ek3HEucr/maR8mw78+zmeDPWU+VHVS/3OBd+XpBm8+XYMk5KOIfT2EwtqSc8fLusaIrOnkQfjWDaMqoQ==","shasum":"8784fe97c2db28dc0e5dfbf8f98cb26cbc2722ed","tarball":"https://registry.npmjs.org/ngx-transloco-markup/-/ngx-transloco-markup-3.0.0.tgz","fileCount":75,"unpackedSize":681498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhxjh8CRA9TVsSAnZWagAA+70P/iy1P0++NyaoP+oPHOTm\n/1oXap5g09i56TYTmlaCgembTm1EBa/qiJMSjxChUWuAOInvxQGnEDq/fv7g\n+HH2ikBVg/2UaFN5tV85QMyKW4c0ONdzFlWhaEwNd3ZCKwE6YMrrK00enaJT\nFlv3buqrFHtnrYhlEiH7OGdiNsoyobbRIcwxiLWfiEYDKGofu0Gt+B4iBCMV\nUmb3Z3fE84AAAXCpXze/sIMmqJ2Cqg7GHaPtqaUvXnZ0DYBCTqmC0tvXBF5+\nPRlZ4wrufM5m8VXC5ETPUZNF4ZEbQsDWnP2176NZXGfFx2Rr1XGx3ZWdEcQH\nKyCREo6MIOV90LMM/lkaNXMuoVWUUqq0tCmKMjDBLaeV1kxwrYW+zidi+5ZJ\nET7U0MVuIRGOmBuXHrjDsIVKpqFf5jJsNiG2K3gum3n2LN+DbEVNkSn985ds\n+e0/AxTaXI/kwCMYP2Taqy3TgdfN8ecYB8SVhJTZnaHL07Z1rB2fBdn+E6rm\nO+cZlZb/2HahAo5XTsc22+q5oKyGifydcvw5rdULmriRBn/3Z0Y+REiNY7Iy\nx4pess/+dnM7UQaAqPY72bhIlpwJQko0hVXgiv4unBcKja3kanA7BzBddzF7\nuDQaA0LOdAr2TEMVGqSB22hdFHUIecUERqIvkV00fAJJ4o+0TV/bTIfhSRiM\nwj+q\r\n=F65x\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkY3An8yvVPaY9Jyu3F+EabZG1bTgr8wzIIxQgT5LUnwIgJIlKRknFqPDFp7bt/9AXSrfueLSssdRItLeKOK4d/0w="}]},"_npmUser":{"name":"dscheerens","email":"daan.scheerens@gmail.com"},"directories":{},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ngx-transloco-markup_3.0.0_1640380540654_0.8575896801500051"},"_hasShrinkwrap":false},"3.1.0":{"name":"ngx-transloco-markup","version":"3.1.0","description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","author":{"name":"Daan Scheerens"},"license":"MIT","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"peerDependencies":{"@angular/common":">=13.0.0","@angular/core":">=13.0.0","@ngneat/transloco":"^3 || ^4","rxjs":"^6 || ^7"},"module":"fesm2015/ngx-transloco-markup.mjs","es2020":"fesm2020/ngx-transloco-markup.mjs","esm2020":"esm2020/ngx-transloco-markup.mjs","fesm2020":"fesm2020/ngx-transloco-markup.mjs","fesm2015":"fesm2015/ngx-transloco-markup.mjs","typings":"ngx-transloco-markup.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./ngx-transloco-markup.d.ts","esm2020":"./esm2020/ngx-transloco-markup.mjs","es2020":"./fesm2020/ngx-transloco-markup.mjs","es2015":"./fesm2015/ngx-transloco-markup.mjs","node":"./fesm2015/ngx-transloco-markup.mjs","default":"./fesm2020/ngx-transloco-markup.mjs"}},"sideEffects":false,"dependencies":{"tslib":"^2.3.0"},"bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"_id":"ngx-transloco-markup@3.1.0","_nodeVersion":"14.17.0","_npmVersion":"6.14.13","dist":{"integrity":"sha512-lkT8ZHd1/QIi6/ghRURwSdRM4sDfwH8fsMZhf6WnefLnDaYsoMlLkhSC0uUtMQK9lt8wcNVy0E8nCQc5uWdFNw==","shasum":"072b1f6ddfaf441e6b5a6dd4e098c448bd06ab56","tarball":"https://registry.npmjs.org/ngx-transloco-markup/-/ngx-transloco-markup-3.1.0.tgz","fileCount":75,"unpackedSize":681500,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCgEYpe1pfBptL4P59M9CXLBrx0HEzc4pmjmjk3SLuJrgIgN2rGVQ3MlVg2q7pH9MBQCQywI4RqksAlPdE6QrdkkAs="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJig4I6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrYsg//bXzK/Q6A1VgyIGsDg8L78amAjpksCneKWKiKVi2olPvitx40\r\ncvlZMDbFKi1f3sE+pCcL8ZIZlZMQkIC8EB6hPi1MijBiyjDahF9Ou73/hJSt\r\n7ZRz34gPvlTq/WglT/wrtip+9Qj0HcHNl5yXsdL9qWYNlh8NwSinYz9eTqNh\r\nixFn37n6ZM9SLWIVRyLh/K1T8pQHqwylKyEMHKI+MT81XJwchJA/vdcUfJI1\r\nfUCV29/gEe7gC0QnCaXtmM6tXhiNd28WGsdT7MLyHm/DO+Gq867ScROxWwXk\r\nK9ddH/bHy/V3umPjHqCBkgT/OTmGD60Ei6ACMvtjRuv+/TvGS3Q/jCjYakes\r\nnEXMW6UK9klIY9eIip1aPWHpKwfJLJuz0TdLevmYf6odJRQMA/xuHS0YSten\r\ni/IzhTGAc/wAJbNiMx/xQfpV5E1xl7sI+XuO+pcyQzTLmKUS9tPGXiVoPbt8\r\nc5QOP+hqdKyMMTHZOu53yjaqhGTIZ8HFuOK5TldRwq01tY0oEo9NAuHFj9+w\r\nwQejCBq+gACrGaAuE/yY0Ys4dV+HYVY9Znf1zbEy1MSws651knOej+xVK9sh\r\nX/Bu+J6mwMfNPvC7CLtj90MrDuWaO0mHuSq4+ePI7+ySrqsVk2JSrlVwVHeX\r\n6Rl60A1u/NKWYWRcLUjwi2U63ZsdbG9ElVg=\r\n=KCgs\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"dscheerens","email":"daan.scheerens@gmail.com"},"directories":{},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ngx-transloco-markup_3.1.0_1652785722037_0.5306849033883101"},"_hasShrinkwrap":false},"4.0.0":{"name":"ngx-transloco-markup","version":"4.0.0","description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","author":{"name":"Daan Scheerens"},"license":"MIT","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"peerDependencies":{"@angular/common":">=14.0.0","@angular/core":">=14.0.0","@ngneat/transloco":"^4","rxjs":"^6 || ^7"},"module":"fesm2015/ngx-transloco-markup.mjs","es2020":"fesm2020/ngx-transloco-markup.mjs","esm2020":"esm2020/ngx-transloco-markup.mjs","fesm2020":"fesm2020/ngx-transloco-markup.mjs","fesm2015":"fesm2015/ngx-transloco-markup.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2020":"./esm2020/ngx-transloco-markup.mjs","es2020":"./fesm2020/ngx-transloco-markup.mjs","es2015":"./fesm2015/ngx-transloco-markup.mjs","node":"./fesm2015/ngx-transloco-markup.mjs","default":"./fesm2020/ngx-transloco-markup.mjs"}},"sideEffects":false,"dependencies":{"tslib":"^2.3.0"},"bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"_id":"ngx-transloco-markup@4.0.0","_nodeVersion":"14.17.0","_npmVersion":"6.14.13","dist":{"integrity":"sha512-swcedVIBk1wO25BKrjwK90e11f6tpnUCb0aF7+DY7KmgNYwxLUyLggBM8HYr1tzIBtbfeDgCI7j66Ay3Xk6bOw==","shasum":"dcc27568ed6f27d44084f84ed3709caaf8fbe28b","tarball":"https://registry.npmjs.org/ngx-transloco-markup/-/ngx-transloco-markup-4.0.0.tgz","fileCount":73,"unpackedSize":719222,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrcKWeZj5iW75KmFAwJJhdyDjTjcMDgkSfB9i2ji/IGgIhAOGGRP0OWjZc9HGzUZ99P/+BU1JPQIZjC0zDDijxib2C"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi4ZrTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpWCxAAlmeVl4Eye7WKj7bKu0GMsoIaZfiL56Rq1/JLBFwYmDMXf1lK\r\noCxuF634auKY600mjKk1im8JrL6uLSoZXWQb74TmPyMNIDPiZ95A32Eo39ew\r\n0NpD3XlC3VfrGN2vdgmawkn0HLlob3lsdMKpZZ2M3pyh1bNBGwiRywWaIddr\r\nkMKZcf5F8xjMSd9wf5NPxeBHxai8uds0lTNtAZa8YoICMMZXtXieq3HF2hDq\r\nxMocRyaYoLJphPm/ifrN7oYfkTJxDNddDapbynnUuNXeYk1q6lEsL4SIVjIN\r\n6Kn0IVVR9xU8bCBJixw6iCig31+uR9Ln/xv6g3xjCJctMvqZMvdyeCGnku/n\r\nhKLpawh6WsVRV5wfadUNSS9zZGCQxvA+yY8mLoTlCehAGlSq+YiPko3sorHA\r\nAI4YfvLR0uUoRaejUjVUSyFWYdqm+xuf5zP1leGxy+o5hPtgPnCF1e+4xb84\r\nYcR33WLp8SbnogGRKNnfO+rWm3M17zmuY0i+8Q4fT1wQNM8LUYIwE9ni3cBz\r\ne9fcgTa49AZ+aqtTbqugkjHO1bbQMQej+v9O+W4gtHIaM0Gro8pjjfvaPR1Y\r\n9osYITLA6FcBlgyHKWwCvLtyI/15AER4XDiBYw1OfU2mpUeQWPcIa4CHNrtv\r\n/EWXRYadCLwjS6S8ASMVNA9H03w0U88ZCkk=\r\n=b8ww\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"dscheerens","email":"daan.scheerens@gmail.com"},"directories":{},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ngx-transloco-markup_4.0.0_1658952403230_0.11902781722384925"},"_hasShrinkwrap":false},"5.0.0":{"name":"ngx-transloco-markup","version":"5.0.0","description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","author":{"name":"Daan Scheerens"},"license":"MIT","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"scripts":{"ng":"ng","start":"ng serve --project=demo","serve.prod":"ng serve --project=demo --configuration production","lint":"ng lint --project=lib","test":"ng test --project=lib --watch=false --code-coverage","test.watch":"ng test --project=lib --watch=true --code-coverage --browsers=Chrome","build":"ng build --project=lib --configuration production","build.demo":"ng build --project=demo --configuration production","release":"standard-version --message \"release: v%s\"","publish.dist":"npm publish build/dist"},"peerDependencies":{"@ngneat/transloco":"^5","rxjs":"^7"},"devDependencies":{"@angular-devkit/build-angular":"^16.1.8","@angular-eslint/builder":"^16.1.0","@angular-eslint/eslint-plugin":"^16.1.0","@angular-eslint/eslint-plugin-template":"^16.1.0","@angular-eslint/template-parser":"^16.1.0","@angular/animations":"^16.1.8","@angular/cdk":"^16.1.7","@angular/cli":"^16.1.8","@angular/common":"^16.1.8","@angular/compiler":"^16.1.8","@angular/compiler-cli":"^16.1.8","@angular/core":"^16.1.8","@angular/forms":"^16.1.8","@angular/material":"^16.1.7","@angular/platform-browser":"^16.1.8","@angular/platform-browser-dynamic":"^16.1.8","@angular/router":"^16.1.8","@dscheerens/eslint-config-angular":"^3.0.0","@ngneat/spectator":"^15.0.1","@ngneat/transloco":"^5.0.6","@types/jasmine":"^4.0.3","@typescript-eslint/eslint-plugin":"^6.3.0","@typescript-eslint/parser":"^6.3.0","eslint":"^8.46.0","jasmine-core":"^4.3.0","jasmine-spec-reporter":"^7.0.0","karma":"^6.4.2","karma-chrome-launcher":"^3.2.0","karma-coverage":"^2.2.0","karma-jasmine":"^5.1.0","ng-packagr":"^16.1.0","rxjs":"^7.8.0","standard-version":"^9.5.0","typescript":"~4.9.5","zone.js":"~0.13.1"},"gitHead":"86865aeb8b0a1712a8e434581639028c1d227786","bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"_id":"ngx-transloco-markup@5.0.0","_nodeVersion":"18.17.0","_npmVersion":"9.6.7","dist":{"integrity":"sha512-4tPYGRLW8e8jzc64YewqMRhPcHCecKRjzHGhQZUq3lxevaC4VzGEm387oc0ICVLt6FXAX1L4fSLRQj+aDijEcg==","shasum":"adb38ea9705f187a1e41675cbb45ddf56904692f","tarball":"https://registry.npmjs.org/ngx-transloco-markup/-/ngx-transloco-markup-5.0.0.tgz","fileCount":113,"unpackedSize":274089,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDg/u/FrnVD0fctvofc/K2Gkvfs5sSIsj7KsiplraLH9QIgd7bTy6LvvfN2uA9VtfrFJQaV4uURHJZ4q81zVUIf1Ao="}]},"_npmUser":{"name":"dscheerens","email":"daan.scheerens@gmail.com"},"directories":{},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ngx-transloco-markup_5.0.0_1691590992382_0.5767490420924908"},"_hasShrinkwrap":false},"5.0.1":{"name":"ngx-transloco-markup","version":"5.0.1","description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","author":{"name":"Daan Scheerens"},"license":"MIT","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"peerDependencies":{"@ngneat/transloco":"^5","rxjs":"^7"},"module":"fesm2022/ngx-transloco-markup.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/ngx-transloco-markup.mjs","esm":"./esm2022/ngx-transloco-markup.mjs","default":"./fesm2022/ngx-transloco-markup.mjs"}},"sideEffects":false,"dependencies":{"tslib":"^2.3.0"},"gitHead":"fb65a78938989f9ee50b162ec0c1843f125cdc89","bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"_id":"ngx-transloco-markup@5.0.1","_nodeVersion":"18.17.0","_npmVersion":"9.6.7","dist":{"integrity":"sha512-mvLVS7WYk9H1BtZrgOwXqSxcwO9fDnhy8Tboq4OCfWU0H7lLqiCxJRT2N90GgTjBQrCFHVUzDfBEAJucOtxk4A==","shasum":"8aeb0e69487325b8e2ecec609141b7fdda35b6f3","tarball":"https://registry.npmjs.org/ngx-transloco-markup/-/ngx-transloco-markup-5.0.1.tgz","fileCount":71,"unpackedSize":534116,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+CtS9R+Ps5NHr907QYuXTPB0AkyjhkHuVsg0VyQDaUwIhAN1pQ8zYWex1pmmfjwJZSemVhY1I/mOuoDneUBQwMegk"}]},"_npmUser":{"name":"dscheerens","email":"daan.scheerens@gmail.com"},"directories":{},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ngx-transloco-markup_5.0.1_1691591326421_0.5546609400206719"},"_hasShrinkwrap":false},"5.1.0":{"name":"ngx-transloco-markup","version":"5.1.0","description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","author":{"name":"Daan Scheerens"},"license":"MIT","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"peerDependencies":{"@ngneat/transloco":"^5","rxjs":"^7"},"module":"fesm2022/ngx-transloco-markup.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/ngx-transloco-markup.mjs","esm":"./esm2022/ngx-transloco-markup.mjs","default":"./fesm2022/ngx-transloco-markup.mjs"}},"sideEffects":false,"dependencies":{"tslib":"^2.3.0"},"gitHead":"3bc17aaf45dbf4b555b598981cf9cbc82921dd78","bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"_id":"ngx-transloco-markup@5.1.0","_nodeVersion":"18.17.0","_npmVersion":"9.6.7","dist":{"integrity":"sha512-go+wN0qm9lc4NEl0OLiuL2m93Pqd/sErhXgCdP5dnVeUq1ZUMBrspOk9K6lglD2m8E9egTOuttkAaJySTh/OOg==","shasum":"e84d6e249806661958c51280502c095b23f7b12f","tarball":"https://registry.npmjs.org/ngx-transloco-markup/-/ngx-transloco-markup-5.1.0.tgz","fileCount":71,"unpackedSize":537007,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBGzzCXAeVCgQjqMZmwHNgPrRM37wAedIII1hO/b+oxTAiEAzWkEx0LWb3ETh9tKpHHGMli9YriXSkZC91F+mGlmvAc="}]},"_npmUser":{"name":"dscheerens","email":"daan.scheerens@gmail.com"},"directories":{},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ngx-transloco-markup_5.1.0_1693517220142_0.9126689847297764"},"_hasShrinkwrap":false},"5.2.0":{"name":"ngx-transloco-markup","version":"5.2.0","description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","author":{"name":"Daan Scheerens"},"license":"MIT","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"peerDependencies":{"@ngneat/transloco":"^5 || ^6","rxjs":"^7"},"module":"fesm2022/ngx-transloco-markup.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/ngx-transloco-markup.mjs","esm":"./esm2022/ngx-transloco-markup.mjs","default":"./fesm2022/ngx-transloco-markup.mjs"}},"sideEffects":false,"dependencies":{"tslib":"^2.3.0"},"gitHead":"62895d7880295876992f4a31d5d169b1ca9f2526","bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"_id":"ngx-transloco-markup@5.2.0","_nodeVersion":"18.17.0","_npmVersion":"9.6.7","dist":{"integrity":"sha512-X1NHhNfY6Q6yu95UDx/+62vCXC7FCslRkg4hCYH6wdq3M3Htj1I8Ee/ZgmQWd93If98BbhxXmz8JOcsBVEeQFg==","shasum":"807f1fc247506e5aed631a1140e3434f7354dab9","tarball":"https://registry.npmjs.org/ngx-transloco-markup/-/ngx-transloco-markup-5.2.0.tgz","fileCount":71,"unpackedSize":537094,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICiBBqxsY0+hW9hleBcEp5pL+ct9iCbS0G1BODcn3t4rAiEA2w2jiee2kV3kD1Jdn2N235v0T04wAp/Ymh4srlZaWDs="}]},"_npmUser":{"name":"dscheerens","email":"daan.scheerens@gmail.com"},"directories":{},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ngx-transloco-markup_5.2.0_1710261448215_0.47567952214965703"},"_hasShrinkwrap":false},"6.0.0":{"name":"ngx-transloco-markup","version":"6.0.0","description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","author":{"name":"Daan Scheerens"},"license":"MIT","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"peerDependencies":{"@angular/core":">=17","@ngneat/transloco":"^5 || ^6","rxjs":"^7"},"module":"fesm2022/ngx-transloco-markup.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/ngx-transloco-markup.mjs","esm":"./esm2022/ngx-transloco-markup.mjs","default":"./fesm2022/ngx-transloco-markup.mjs"}},"sideEffects":false,"dependencies":{"tslib":"^2.3.0"},"_id":"ngx-transloco-markup@6.0.0","gitHead":"8979c531ebd587eda207e764875e8ec28998b359","bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"_nodeVersion":"18.20.1","_npmVersion":"10.5.0","dist":{"integrity":"sha512-uKV3pcu9brdMALGXNN87pszC+EcyQ8WCeyVYWqZvznNv86dmSlO32O37z49YLSrIr3vGJgZAu1JeDgtEmlp6LQ==","shasum":"d2d5e1eff6fe0e6837c55144472a5f8b7df046e0","tarball":"https://registry.npmjs.org/ngx-transloco-markup/-/ngx-transloco-markup-6.0.0.tgz","fileCount":71,"unpackedSize":533893,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGCGNQf4c72V7mH5T3Wqc6LxzUQ1nR8A/RNZO05UmyGIAiEAnmFmn9GUiCDgDzYLfahkY8TSzbheODKFdsu9Y56ewL0="}]},"_npmUser":{"name":"dscheerens","email":"daan.scheerens@gmail.com"},"directories":{},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ngx-transloco-markup_6.0.0_1712699337274_0.04608992977008319"},"_hasShrinkwrap":false},"6.0.1":{"name":"ngx-transloco-markup","version":"6.0.1","description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","author":{"name":"Daan Scheerens"},"license":"MIT","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"peerDependencies":{"@angular/core":">=17","@ngneat/jsverse":"^7","rxjs":"^7"},"module":"fesm2022/ngx-transloco-markup.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/ngx-transloco-markup.mjs","esm":"./esm2022/ngx-transloco-markup.mjs","default":"./fesm2022/ngx-transloco-markup.mjs"}},"sideEffects":false,"dependencies":{"tslib":"^2.3.0"},"_id":"ngx-transloco-markup@6.0.1","gitHead":"5e8612f5d5e145eaecdeb03cd6eb464601c6d67e","bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"_nodeVersion":"18.20.1","_npmVersion":"10.5.0","dist":{"integrity":"sha512-qsSL1hxakOH+Love1RQYtGYmRa9LuecXFQg2d5TvhOMkF8aSsoqGRLSTZGduJr8ID1iS1kAHroBt79rXLnPQeA==","shasum":"6fea2003de219f267d443731c6a91bf2aa30e40f","tarball":"https://registry.npmjs.org/ngx-transloco-markup/-/ngx-transloco-markup-6.0.1.tgz","fileCount":71,"unpackedSize":534115,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID1M8bT3BMxsUushpwc6tQgVDupgixEFSW75HBOC2HvtAiBUOfK8d/FLHW1bPkE0cKD+aLVFyuE1tlXfB4CdFK6BvA=="}]},"_npmUser":{"name":"dscheerens","email":"daan.scheerens@gmail.com"},"directories":{},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ngx-transloco-markup_6.0.1_1712733816570_0.3343205268092202"},"_hasShrinkwrap":false},"6.0.2":{"name":"ngx-transloco-markup","version":"6.0.2","description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","author":{"name":"Daan Scheerens"},"license":"MIT","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"peerDependencies":{"@angular/core":">=17","@jsverse/transloco":"^7","rxjs":"^7"},"module":"fesm2022/ngx-transloco-markup.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/ngx-transloco-markup.mjs","esm":"./esm2022/ngx-transloco-markup.mjs","default":"./fesm2022/ngx-transloco-markup.mjs"}},"sideEffects":false,"dependencies":{"tslib":"^2.3.0"},"_id":"ngx-transloco-markup@6.0.2","gitHead":"e2aea8bac9fbcf933d6c54317403aa79af6ceeba","bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"_nodeVersion":"18.20.1","_npmVersion":"10.5.0","dist":{"integrity":"sha512-gaFtn3pEiO77tjzVExmASdET8IqJLBhvjLpT9Ynd6NXv2wwHDeevJrOGd94FZN8qFUcvfBOWHNxuQx8aRblVCg==","shasum":"f08b053bb848d9019eb4488c72ee0305002a5770","tarball":"https://registry.npmjs.org/ngx-transloco-markup/-/ngx-transloco-markup-6.0.2.tgz","fileCount":71,"unpackedSize":534118,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEgkOWRGkj6Ff6WUGlXcLJbncVRQZTE67Na4SY/4r+MiAiB05uUp5SozYu1Zhk/iKg85WgxAwYAgCqawLSOe2088fA=="}]},"_npmUser":{"name":"dscheerens","email":"daan.scheerens@gmail.com"},"directories":{},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ngx-transloco-markup_6.0.2_1712734271944_0.7902228056744571"},"_hasShrinkwrap":false}},"time":{"created":"2020-05-07T08:57:33.251Z","0.0.1":"2020-05-07T08:57:33.351Z","modified":"2024-04-10T07:31:12.267Z","0.1.0":"2020-07-19T19:30:15.533Z","1.0.0":"2020-08-01T11:40:42.869Z","2.0.0":"2020-09-07T20:35:07.124Z","3.0.0":"2021-12-24T21:15:40.823Z","3.1.0":"2022-05-17T11:08:42.336Z","4.0.0":"2022-07-27T20:06:43.469Z","5.0.0":"2023-08-09T14:23:12.597Z","5.0.1":"2023-08-09T14:28:46.701Z","5.1.0":"2023-08-31T21:27:00.352Z","5.2.0":"2024-03-12T16:37:28.417Z","6.0.0":"2024-04-09T21:48:57.438Z","6.0.1":"2024-04-10T07:23:36.708Z","6.0.2":"2024-04-10T07:31:12.091Z"},"maintainers":[{"name":"dscheerens","email":"daan.scheerens@gmail.com"}],"description":"A translation component to render translations with markup","homepage":"https://github.com/dscheerens/ngx-transloco-markup","keywords":["angular","ngx","transloco","markup","plugin","translation","translate","i18n"],"repository":{"type":"git","url":"git+https://github.com/dscheerens/ngx-transloco-markup.git"},"author":{"name":"Daan Scheerens"},"bugs":{"url":"https://github.com/dscheerens/ngx-transloco-markup/issues"},"license":"MIT","readme":"[![Build Status](https://github.com/dscheerens/ngx-transloco-markup/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/dscheerens/ngx-transloco-markup/actions/workflows/main.yml) [![NPM Version](https://img.shields.io/npm/v/ngx-transloco-markup.svg)](https://www.npmjs.com/package/ngx-transloco-markup)\n\n# ngx-transloco-markup: Markup support for Transloco\n\nThis library is an extension for [Transloco](https://github.com/jsverse/transloco) that provides support for displaying translations with markup.\n**ngx-transloco-markup** offers an alternative to the Transloco [directive](https://jsverse.github.io/transloco/docs/translation-in-the-template#structural-directive) and [pipe](https://jsverse.github.io/transloco/docs/translation-in-the-template#pipe): the `<transloco>` component, that takes care of rendering your translations with markup.\nBy using this component, you no longer need to split your translations or use an `[innerHtml]`-binding.\nThis allows for a much simpler syntax in your translation files and you no longer need to worry about potential markup-injection issues that could cause the layout of your application to break.\n\nWhile this library ships with support for the most common markup use cases, you might wish to create your own customized markup rendering.\nFortunately, thanks to the extensible architecture, you can do this quite easily.\n\n## Table of contents\n\n- [Installation](#installation)\n  - [Angular version compatibility matrix](#angular-version-compatibility-matrix)\n- [Getting started](#getting-started)\n- [`<transloco>` component API](#transloco-component-api)\n- [Defining markup transpiler availability](#defining-markup-transpiler-availability)\n  - [Inherting transpilers from parent injectors](#inherting-transpilers-from-parent-injectors)\n- [Contextual links](#contextual-links)\n- [Creating your own markup transpilers](#creating-your-own-markup-transpilers)\n  - [Tokenization](#tokenization)\n  - [Transpilation](#transpilation)\n  - [Custom transpiler example: colored text](#custom-transpiler-example-colored-text)\n- [Further customization](#further-customization)\n  - [Custom string interpolation expressions](#custom-string-interpolation-expressions)\n  - [Supporting additional link model renderers](#supporting-additional-link-model-renderers)\n\n## Installation\n\nSince this library is an extension for Transloco, first make sure your application has been configured to use transloco.\nIf this is not the case follow the easy [installation instructions](https://jsverse.github.io/transloco/docs/installation) from Transloco.\n\nNext you'll need to install the `ngx-transloco-markup` package from NPM:\n\n```shell\nnpm install --save ngx-transloco-markup\n```\n\nIf you are using the Angular CLI to build and test your application, then this all you need to do for the installation.\nFor custom build setups: the library is published in the [Angular Package Format](https://docs.google.com/document/d/1CZC2rcpxffTDfRDs6p1cfbmKNLA6x5O-NtkJglDaBVs/preview), so it provides several distribution bundles that are compatible with most build tools.\n\n### Angular version compatibility matrix\n\nUse the compatibility matrix below to determine which version of this module works with your project's Angular version.\n\n| Library version                    | Angular version | Transloco version                            |\n| ---------------------------------- | --------------- | -------------------------------------------- |\n| `ngx-transloco-markup` - **1.x.x** | >= **8.0.0**    | `@ngneat/transloco`  - **2.x.x**             |\n| `ngx-transloco-markup` - **2.x.x** | >= **10.0.0**   | `@ngneat/transloco`  - **2.x.x**             |\n| `ngx-transloco-markup` - **3.0.x** | >= **13.0.0**   | `@ngneat/transloco`  - **3.x.x**             |\n| `ngx-transloco-markup` - **3.1.x** | >= **13.0.0**   | `@ngneat/transloco`  - **3.x.x** + **4.x.x** |\n| `ngx-transloco-markup` - **4.x.x** | >= **14.0.0**   | `@ngneat/transloco`  - **4.x.x**             |\n| `ngx-transloco-markup` - **5.x.x** | >= **16.0.0**   | `@ngneat/transloco`  - **5.x.x**             |\n| `ngx-transloco-markup` - **5.2.x** | >= **16.0.0**   | `@ngneat/transloco`  - **5.x.x** + **6.x.x** |\n| `ngx-transloco-markup` - **6.x.x** | >= **17.0.0**   | `@jsverse/transloco` - **7.x.x**             |\n\n## Getting started\n\nAfter having installed the `ngx-transloco-markup` package you can now add support for translation markup rendering to your application.\n\nA quick word about the architecture needed here.\nThis library depends on so called _translation markup transpilers_.\nThese small units are responsible for parsing the translation values and converting them into rendering functions.\nFor the `<transloco>` component (provided by this library) you need to specify which transpilers will be used and at what level.\nIn this section we're just going to cover a simple setup that works for most applications.\nKeep in mind, however, that you can completely customize the transpiler configuration.\nThat will be covered in later sections.\n\nFirst let's add the default transpilers to the root module of your application (usually called `AppModule`):\n\n```typescript\nimport { defaultTranslocoMarkupTranspilers } from 'ngx-transloco-markup';\n\n@NgModule({\n  providers: [\n    defaultTranslocoMarkupTranspilers() // <-- Add this line to the providers array\n  ]\n})\nexport class AppModule { }\n```\n\nThis registers the default transpilers and makes them globally available wherever you use the `<transloco>` component.\nWhen including the default transpilers, the following markup is supported:\n\n* Bold text: `[b]...[/b]`\n* Italic text: `[i]...[/i]`\n* Links: `[link:parameterKey]...[/link]`, where `parameterKey` should be replaced with a key of the translation parameter that contains the URL or link object.\n  Note that there is a better alternative to defining links in your translation values, by making use of [contextual link tokens](#contextual-links).\n\nNext, you will need to add the `TranslocoMarkupModule` to the module(s) in which you want to use the `<transloco>` component:\n\n```typescript\nimport { TranslocoMarkupModule } from 'ngx-transloco-markup';\n\n@NgModule({\n  imports: [\n    TranslocoMarkupModule // <-- Add this line to the imports array\n  ]\n})\nexport class ExampleModule { }\n```\n\nAlternatively you can import the `TranslocoMarkupComponent` directly in standalone components:\n\n```typescript\nimport { Component } from '@angular/core';\nimport { TranslocoMarkupComponent } from 'ngx-transloco-markup';\n\n@Component({\n  // ...\n  standalone: true,\n  imports: [\n    TranslocoMarkupComponent, // <-- Add this line to the imports array\n  ],\n})\nexport class MyComponent { }\n```\n\nOnce the `TranslocoMarkupModule` or `TranslocoMarkupComponent` has been imported, you will be able to use the `<transloco>` component in your templates.\nAs an example, suppose your (English) translation file contains the following entry:\n\n```json\n{\n  \"GREETING\": \"Hello [b]{{ name }}[/b], please visit my [link:website]website[/link]\"\n}\n```\n\nWhen the `GREETING` entry is rendered by the `<transloco>` component, it will display the text and renders the value of the `name` parameter in a bold font.\nAlso, the _website_ text will be rendered as a link that points to the value of the `website` translation parameter.\nThe code snippet below shows an example of how this would be used in a component.\n\n```typescript\n@Component({\n  selector: 'app-example',\n  template: `\n    <transloco\n      [key]=\"'GREETING'\"\n      [params]=\"{ name: firstName + ' ' + lastName, website: 'https://www.example.com/' }\"\n    ></transloco>\n  `\n})\nexport class ExampleComponent {\n  public firstName = 'John';\n  public lastName = 'Doe';\n}\n```\n\n## `<transloco>` component API\n\nThe `<transloco>` component has the following input properties:\n\n* **`key`** (_string_)\n\n  Key that defines which translation value should be displayed.\n  If no key is specified or the key is `undefined`, then the `content` property will be used instead.\n  When that property is also unspecified nothing will be displayed by the `<transloco>` component.\n\n* **`content`** (_string_)\n\n  Pre-translated text to display.\n  Still applies the markup tags, but doesn't do any translation (except possibly for string interpolation expressions, e.g. `{{ SOME_TRANSLATION_KEY }}`).\n  This property will be ignored if a translation `key` is specified.\n\n* **`params`** ([_HashMap_](https://github.com/jsverse/transloco/blob/v2.17.2/projects/ngneat/transloco/src/lib/types.ts#L1))\n\n  An object containing the translation parameters, which will be used to expand interpolation expressions (`{{ paramKey }}`).\n\n* **`lang`** (string)\n\n  Language in which the text should be displayed.\n  Usually you do not need to specify this, unless you want to override the default language.\n  The default language is either the current language of the [`TranslocoService`](https://github.com/jsverse/transloco/blob/v2.17.2/projects/ngneat/transloco/src/lib/transloco.service.ts), or the language that was specified using the [`TRANSLOCO_LANG`](https://github.com/jsverse/transloco/blob/v2.17.2/projects/ngneat/transloco/src/lib/transloco-lang.ts) injection token.\n\n* **`scope`** (string)\n\n  Scope which is to be used.\n  If this property is specified it will override the scope provide via the [`TRANSLOCO_SCOPE`](https://github.com/jsverse/transloco/blob/v2.17.2/projects/ngneat/transloco/src/lib/transloco-scope.ts) injection token.\n\n* **`transpilers`** (_TranslationMarkupTranspiler | TranslationMarkupTranspiler[]_)\n\n  Transpilers that will be available for rendering the translation value.\n  These are merged with transpilers provided via dependency injection, unless the `mergeTranspilers` option is set to `false` (see below).\n  When the transpilers are merged, inline providers will take precedence over the provided transpilers.\n\n* **`mergeTranspilers`** (_boolean_)\n\n  Specifies whether the inline transpilers are merged with the provided transpilers.\n  When set to `false`, only the inline transpilers will be used, unless no inline transpilers have been specified.\n  Defaults to `true`.\n\n## Defining markup transpiler availability\n\nAs mentioned before, one of the features of `ngx-transloco-markup` is that you have full control over which transpilers will be available and at what level.\nThis allows you to limit the markup options to just what is necessary within a particular context.\n\nThe [getting started](#getting-started) section demonstrated how to make the default transpilers available everywhere in the application by providing them in the application root module.\nIf you do not wish for a transpiler to be available everywhere, but only for a part of the application you can specify it at a different level:\n\n* **inline** - the narrowest scope at which a transpiler can be made available.\n  Pass the transpiler instance to the `transpilers` input property of the `<transloco>` component.\n  This will make the transpiler available just for that particular use of the `<transloco>` component.\n\n* **component** - defined as part of the providers array of a component, e.g.:\n  ```typescript\n  @Component({\n    selector: 'app-fancy-something'\n    template: 'A very [rainbow]colorful[/rainbow] text!',\n    providers: [\n      provideTranslationMarkupTranspiler(RainbowTextTranspiler)\n    ]\n  })\n  export class FancyComponent { }\n  ```\n  When a transpiler is defined in this way, all usages of the `<transloco>` component will support the\n  transpiler within the context of the `FancyComponent` context.\n  This includes both the template of the component itself, but also for all child components that might be using the `<transloco>` component.\n\n* **lazy-loaded module** - defined in the providers array of a lazy loaded module.\n  This will make the transpiler available within all components that are part of the lazy\n  loaded module.\n  Note that the transpiler does not necessarily need to be defined in the root of the lazy loaded module.\n  If one if the transitively imported modules specifies a provider for the transpiler, then it will be\n  available for the whole lazy loaded module.\n\n* **root module** - defined in the providers array of the root (application) module, or in one of the transitively imported modules.\n  A markup transpiler provider that is defined in this way will be available everywhere in the application, meaning this is the widest scope at which a transpiler can be defined.\n\nThe **component**, **lazy-loaded module** and **root module** transpiler levels all make use of Angular's dependency injection system.\nA tranpsiler defined at one of those levels needs to be specified using the `provideTranslationMarkupTranspiler` function which generates the correct provider definition for the transpiler.\n\nNote that the provided transpilers can be discarded for a particular usage of the `<transloco>` component, by setting the `mergeTranspilers` input property to `false`.\n\n### Inherting transpilers from parent injectors\n\nDue to Angular's hierarchy of injectors you might run into the issue that specifying a transpiler at a certain level will override the set of transpilers defined at lower levels.\nFor example if you make a transpiler available in a lazy loaded module, then this will override all transpilers from the root module.\nOften, this is not the intended effect.\nInstead you probably would like to add a transpiler to the existing set of transpilers.\nThis is supported by **ngx-transloco-markup** by including `inheritTranslationMarkupTranspilers()` in the providers list of a module or component:\n\n```typescript\nimport { inheritTranslationMarkupTranspilers } from 'ngx-transloco-markup';\nimport { CustomTranspiler } from './transpilers';\n\n@NgModule({\n  providers: [\n    provideTranslationMarkupTranspiler(CustomTranspiler),\n    inheritTranslationMarkupTranspilers() // <-- make all transpilers from parent injector available\n  ]\n})\nexport class LazyLoadedModuleWithAdditionalTranspilers { }\n```\n\nKeep in mind that the order of transpiler providers is important.\nIf some of them can parse the same syntax, then the one that is provided first will win and therefore effectively overrides the others.\nThis means you usually would need to put `inheritTranslationMarkupTranspilers()` after the other transpiler providers.\n\n## Contextual links\n\nThe default providers you get out-of-the-box with `defaultTranslocoMarkupTranspilers()`, includes a link transpiler that supports the following syntax: `[link:parameterKey]...[/link]`.\nThis is a generic syntax that can be used free of any context.\nWhile that makes for an easy setup, it does add a bit of clutter to your translations.\n\nThat clutter can be reduced by introducing contextual markup tokens: customized syntax that can be used for within a specific context.\nIt is not uncommon, for example, to refer to some entity by its name (or some other descriptive property) and be able to link to a detail view of that entity.\nConsider the scenario of a web shop, where adding an item to the basket would display the following message:\n\n```json\n{\n  \"PRODUCT_ADDED\": \"Added [link:productUrl]{{ productName }}[/link] to the basket.\"\n}\n```\n\nIn this case the entity is a product, for which both a name and URL are referenced in the translation.\nIf instead a context specific transpiler was created for the product entity, the translation could be simplified to:\n\n```json\n{\n  \"PRODUCT_ADDED\": \"Added [product] to the basket.\"\n}\n```\n\nObviously `ngx-transloco-markup` will not recognize the `[product]` token by default, so you will need to create your own transpiler and make it [available](#defining-markup-transpiler-availability) to the `<transloco>` component.\nYou can find out how that do that in the _[creating your own markup transpilers](#creating-your-own-markup-transpilers)_ section.\n\nSince the need for contextual link transpilers is quite common, `ngx-transloco-markup` provides a `ContextualLinkTranspilerFactory` to simplify their creation.\nThis factory can be injected in your components and provider factory functions, allowing you to create two types of contextual link transpilers.\n\nThe first type that can be created is a `ContextualLinkSubstitutionTranspiler`.\nThis type of transpiler simply substitutes a specific token (substring) in a translation value with a link.\nSuch a transpiler would be needed to support the `[product]` token of the example translation shown above.\nAn instance of this type of transpiler can be created using the `ContextualLinkTranspilerFactory.createSubstitutionTranspiler` function, which supports two call signatures:\n\n* `createSubstitutionTranspiler(parameterKey: string)`\n\n  This is the simplest form, which creates a transpiler that substitutes a token `[parameterKey]` with a link.\n  The label that is displayed the link is determined by the value of `parameterKey.label` property within the translation parameters.\n  Similarly, the link target is resolved via the `parameterKey.link` property.\n\n* `createSubstitutionTranspiler(token: string, options: ContextualLinkSubstitutionTranspilerOptions)`\n\n  With this call signature you are given more control.\n  First, you need to specify what token will be converted to a link by the transpiler.\n  That can be anything, e.g. `'<banana>'`, `'$website'` or just `'???'` (although I would not recommend the latter).\n  Just be aware that the chosen token can collide with another transpiler that supports a similar grammar.\n\n  In addition to the token you will need to specify how the label and link target are resolved, via the `options` object.\n  This object has two properties, `label` and `link`.\n  Both allow you to define a resolving method, which can be one of the following:\n\n  * `{ static: ... }` - A static value for the label or link.\n  * `{ parameterKey: ... }` - A value that is obtained from the property with the specified key in the translation parameters.\n  * `{ resolve: (translationParams) => ... }` - A resolver function to dynamically construct the label or link (using the translation parameters if necessary).\n\nAnother type of transpiler that can be created by the `ContextualLinkTranspilerFactory` is the `ContextualLinkBlockTranspiler`, which supports the following syntax: `[linkToken]...[/linkToken]`.\nIn contrast to the substitution transpiler, the block transpiler will render the contents of the block as a link.\nThis is useful in case you need additional markup within the link or if the link text itself does not depend on an entity but is something that needs to be translated.\n\nThe factory also provides two signatures of the `ContextualLinkTranspilerFactory.createBlockTranspiler` function for creating `ContextualLinkBlockTranspiler` instances:\n\n* `createBlockTranspiler(parameterKey: string)`\n\n  Creates a link block transpiler that resolves the link target based on the specified key in the translation parameters object.\n  The start and end token are equivalent to `[parameterKey]` and `[/parameterKey]`.\n\n* `createBlockTranspiler(startToken: string, endToken: string, resolveLinkSpecification: ResolveLinkSpecification)`\n\n  This alternative form gives you the freedom to choose the start and end token for the link block transpiler.\n  Also, the method for resolving the link target can be specified in one of the following ways:\n\n  * `{ static: ... }` - A static value for the link.\n  * `{ parameterKey: ... }` - A value that is obtained from the property with the specified key in the translation parameters.\n  * `{ resolve: (translationParams) => ... }` - A resolver function to dynamically construct the link (using the translation parameters if necessary).\n\n\n## Creating your own markup transpilers\n\nThe whole architecture of `ngx-transloco-markup` is based on the concept of transpilers: small units that are responsible for converting (part) of translation values into rendering functions.\nFor example the `BoldTextTranspiler` is capable of recognizing blocks that start with `[b]` and end with `[/b]`.\nOnce it has recognized such a block, it transforms it to a rendering function that creates `<b>` HTML element and appends the content between the start and end tags to that element.\n\nWhile the `ngx-transloco-markup` library ships with a set of standard transpilers for the most common use cases, there are surely a lot of other different markup requirements which are not supported out-of-the-box.\nInstead of trying to cover all these different requirements into a single library, you are offered the option to expand the set of transpilers if necessary.\n\nCreating your own transpiler is as simple as instantiating an object that conforms to the `TranslationMarkupTranspiler` interface (shown below) and make it [available](#defining-markup-transpiler-availability) at the right place in the application for the `<transloco>` component.\n\n```typescript\nexport interface TranslationMarkupTranspiler {\n  tokenize(\n    translation: string,\n    offset: number\n  ): TokenizeResult | undefined;\n\n  transpile(\n    offset: number,\n    context: TranslationMarkupTranspilerContext\n  ): TranspileResult | undefined;\n}\n```\n\nAs can be seen in the interface definition of the `TranslationMarkupTranspiler` above, a transpiler needs to implement two functions: `tokenize` and `transpile`.\nThis is because the process is performed in two phases:\n\n* A _tokenization_ phase, where the translation value (a string) is converted into a sequence of tokens.\n* The second phase is where the actual _transpilation_ happens: the sequence of tokens is converted into one (or more) rendering functions.\n\nEach of these two functions can either return a result model or `undefined`, where the\nlatter is used to indicate that the transpiler is unable to parse the input at the specified position.\nThe `<transloco>` component uses a sequence of transpilers to parse translation values.\nIf a transpiler cannot parse the input at specific position, then the next transpiler in the sequence will be asked to so, and so forth, until there is one that is able to parse the input.\n\nNote that there will always be an implicit fallback transpiler present to capture literal text.\nYou don't need to specify this transpiler, as the `<transloco>` component always appends this transpiler to end of the transpiler sequence.\n\n### Tokenization\n\nAlthough the tokenization phase theoretically could be omitted, it simplifies the transpilation phase.\nMostly on conceptual level, but also performance wise.\nThis is why `ngx-transloco-markup` converts translation values first into a sequence of tokens, before transpiling it into rendering functions.\n\nThe result model for the `tokenize` function is as follows:\n\n```typescript\nexport interface TokenizeResult {\n  nextOffset: number;\n  token: unknown;\n}\n```\n\nApart from the token, the model also specifies the next offset where the tokenization process should continue.\nUsing the `BoldTextTranspiler` as example, tokenizing the string `'trans[b]loco[/b]'`, will result in a token at offsets 5 and 12 and where the `nextOffset` value is equal to 8 and 16 respectively.\nFor all other offsets, the `tokenize` function will return `undefined`.\n\nOne thing to note here is that tokens are typed as `unknown`.\nThis is because the set of transpilers is not closed, meaning we cannot know upfront what type of tokens will be generated.\n\n### Transpilation\n\nOnce the translation value (a string) has been converted to a sequence of tokens, the transpilation phase is executed.\nIt is during this phase that the `tranpile` function of the transpilers is called.\nAs input it receives the parse offset (within the token sequence) and a `TranslationMarkupTranspilerContext` object.\nThis object has two properties and two functions:\n\n* `tokens` - the token sequence that is to be transpiled.\n* `translation` - a dictionary object containing the translation values for the active language.\n* `transpile` - a function that can be used to recursively transpile the token sequence for transpilers that support nested content.\n* `transpileUntil` - another function used to recursive transpilation that continues parsing tokens until a certain token is encountered.\n  Unlike the `transpile` function this function can return a sequence of markup renderers instead of just one (or none at all).\n\nAs mentioned before, tokens are represented with the `unknown` type.\nA transpiler therefore should recognize supported tokens using strict equality comparison (`===`), `typeof`-checks, `instanceof`-checks or _[type guard](https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards)_ functions.\nOnce a supported (sub)sequence of tokens is parsed at the specified offset a `TranspileResult` object (interface is shown below) should be returned.\nThis object contains the offset of the next token where the transpilation process should continue.\n\n```typescript\nexport interface TranspileResult {\n  nextOffset: number;\n  renderer: TranslationMarkupRenderer;\n}\n\nexport type TranslationMarkupRenderer<T extends Node = Node> = (translationParameters: HashMap) => T;\n```\n\nMore importantly, a `TranspileResult` object also includes a rendering function.\nThis function ultimately encodes the rendering logic that displays translations with markup.\nGiven a translation parameters object, the rendering function should be able to produce a [DOM Node](https://developer.mozilla.org/en-US/docs/Web/API/Node).\n\nA completely transpiled translation value will result in one or more rendering functions.\nOnce the translation actually should be rendered, all of these functions are invoked with the translation parameters, resulting in one or more DOM Nodes.\nThese nodes are then added as children to the `<transloco>` component, thereby making the rendered translation visible in the application.\n\n### Custom transpiler example: colored text\n\nTo illustrate how to create your own custom transpiler, let's craft a transpiler to add some color to your translations.\nIt supports the following syntax `[c:cssColorValue]...[/c]`, where `cssColorValue` should be replaced by a valid CSS color, e.g. `#123abc`, `rgba(123, 45, 67, 0.5)`, `orange`, etc.\n\nFirst thing we need is a way to represent the tokens.\nFor that we will be using the following:\n\n```typescript\nclass ColorStart {\n  constructor(\n    public readonly cssColorValue: string\n  ) { }\n}\n\nconst COLOR_END = new (class ColorEnd {})();\n```\n\nThe start token of a color block will be an instance of the `ColorStart` tag.\nThis token also stores the CSS color value that will be applied to its content.\n\nSince the end token of a color block doesn't need to store any information, this can just be a constant value.\nHere we chose create a singleton instance of the `ColorEnd` class.\nAlthough simple unique value, such as a string or [`Symbol`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol), would also be sufficient, the `ColorEnd` class makes for a nice symmetry with the `ColorStart` class.\n\nWith the token representations set up, we can now implement the `tokenize` function:\n\n```typescript\n@Injectable()\nexport class ColorTranspiler implements TranslationMarkupTranspiler {\n  public tokenize(translation: string, offset: number): TokenizeResult | undefined {\n    return (\n      recognizeColorStartToken(translation, offset) ||\n      recognizeColorEndToken(translation, offset)\n    );\n  }\n\n  // TODO: transpile function\n}\n\nfunction recognizeColorStartToken(translation: string, offset: number): TokenizeResult | undefined {\n  const COLOR_START_TOKEN = '[c:';\n\n  if (!translation.startsWith(COLOR_START_TOKEN, offset)) {\n    return undefined;\n  }\n\n  const end = translation.indexOf(']', offset + COLOR_START_TOKEN.length);\n\n  if (end < 0) {\n    return undefined;\n  }\n\n  const cssColorValue = translation.substring(offset + COLOR_START_TOKEN.length, end);\n\n  return {\n    nextOffset: end + 1,\n    token: new ColorStart(cssColorValue)\n  };\n}\n\nfunction recognizeColorEndToken(translation: string, offset: number): TokenizeResult | undefined {\n  const COLOR_END_TOKEN = '[/c]';\n\n  if (!translation.startsWith(COLOR_END_TOKEN, offset)) {\n    return undefined;\n  }\n\n  return {\n    nextOffset: offset + COLOR_END_TOKEN.length,\n    token: COLOR_END\n  };\n}\n```\n\nThe `tokenize` function makes use of two utility functions: `recognizeColorStartToken` and `recognizeColorEndToken`.\nSince there is nothing special to mention about their implementation (they should be self-explanatory), let's proceed with the implementation of the `transpile` function.\n\nFirst, we need to decide how the parse the token sequence.\nGiven a sequence of tokens and a specific position within that sequence, the token at that position must be an instance of `ColorStart`, so that will be our first check.\nThis token will also give us the CSS color value needed later to construct rendering function.\n\nOnce verified that the (sub)sequence starts with a `ColorStart` token, next we need to (recursively) transpile the contents up until the `COLOR_END` token.\nYou could implement that process yourself, however, the `context` object provides a `transpileUntil` function that already does exactly what we need.\nInvoking this function will yield an array of `TranslationMarkupTranspiler` functions and the next unparsed offset (which will be the `COLOR_END` token).\nA possible implementation for the `transpile` function is shown below.\n\n```typescript\n@Injectable()\nexport class ColorTranspiler implements TranslationMarkupTranspiler {\n  public tokenize(translation: string, offset: number): TokenizeResult | undefined {\n    // ...\n  }\n\n  public transpile(\n    start: number,\n    context: TranslationMarkupTranspilerContext\n  ): TranspileResult | undefined {\n    const nextToken = context.tokens[start];\n\n    if (!(nextToken instanceof ColorStart)) {\n      return undefined;\n    }\n\n    const { nextOffset, renderers } = context.transpileUntil(\n      start + 1,\n      (token) => token === COLOR_END\n    );\n\n    return {\n      nextOffset: Math.min(nextOffset + 1, context.tokens.length),\n      renderer: this.createRenderer(nextToken.cssColorValue, renderers)\n    };\n  }\n}\n```\n\nNext, there is only one thing left to do: we need to implement the `createRenderer` utility function.\nIt is the responsibility of this function to create the renderer that combines all child renderers to render the contents with the desired color.\nOur desired rendering function should create some element (in this case a `<span>` element), set an inline color style and attach the rendered child nodes to the element.\nTo simplify the implementation, we can make use of the `TranslationMarkupRendererFactory`, which can be obtained via dependency injection.\nThe implementation therefore would look something like the following:\n\n```typescript\n@Injectable()\nexport class ColorTranspiler implements TranslationMarkupTranspiler {\n\n  constructor(\n    private readonly rendererFactory: TranslationMarkupRendererFactory\n  ) { }\n\n  public tokenize(translation: string, offset: number): TokenizeResult | undefined {\n    // ...\n  }\n\n  public transpile(\n    start: number,\n    context: TranslationMarkupTranspilerContext\n  ): TranspileResult | undefined {\n    // ...\n  }\n\n  private createRenderer(\n    cssColorValue: string,\n    childRenderers: TranslationMarkupRenderer[]\n  ): TranslationMarkupRenderer {\n    const spanRenderer = this.rendererFactory.createElementRenderer('span', childRenderers);\n\n    function renderColorMarkup(translationParameters: HashMap): HTMLSpanElement {\n      const spanElement = spanRenderer(translationParameters);\n\n      spanElement.style.color = cssColorValue;\n\n      return spanElement;\n    }\n\n    return renderColorMarkup;\n  }\n\n}\n```\n\nA complete implementation of the colored text transpiler can be found in the demo application: [demo/app/features/custom-transpilers/colored-text-transpiler.ts](./demo/app/features/custom-transpilers/colored-text-transpiler.ts)\n\n## Further customization\n\n### Custom string interpolation expressions\n\nOne of Transloco's features is the support for interpolation expressions.\nSuch expressions allow you to insert parameter values or other translations using the `{{ expression }}` syntax.\nThe syntax and expression types can be customized.\nOne example is the [message format](https://jsverse.github.io/transloco/docs/plugins/message-format) plugin to support translations that use the ICU syntax for expressing pluralization and gender.\n\nTransloco itself also uses a [transpiler](https://jsverse.github.io/transloco/docs/hack#the-transpiler) for this purpose: the `TranslocoTranspiler`.\nPlugins can override the default transloco Transpiler to support a different (customized) syntax and evaluation scheme for interpolation expressions.\nSince `ngx-transloco-markup` is meant to support all Transloco features, it also uses the `TranslocoTranspiler` to expand interpolation expressions.\nThis means that it also supports custom implementations, like the _message format_ plugin.\n\nDue to the different transpiler architecture used by `ngx-transloco-markup`, you might need to help it\nrecognize interpolation expressions when a custom syntax is used.\nFor example, expressions supported by the _message format_ plugin only require single opening and closing curly-braces (`{ expression }`).\nAlso, they might contain nested curly braces, e.g.: `{myCount, plural, =0 {no results} one {1 result} other {# results}}`.\n\nCustom interpolation expression can be recognized by `ngx-transloco-markup` if you provide a custom\nimplementation of the `InterpolationExpressionMatcher` interface:\n\n```typescript\nexport interface InterpolationExpressionMatcher {\n  matchExpression(source: string, offset: number): number | undefined;\n}\n```\n\nThe interface has just one function `matchExpression` that returns the length of the interpolation expression (in number of characters) for a given translation value and position within that value.\nWhen no expression was found at the specified position, then `undefined` must be returned.\n\nAn example implementation for the _message format_ plugin could be the following:\n\n```typescript\nexport class MessageFormatInterpolationExpressionMatcher implements InterpolationExpressionMatcher {\n  public matchExpression(source: string, startOffset: number): number | undefined {\n    let offset = startOffset;\n    let level = 0;\n    do {\n      const character = source.charAt(offset);\n\n      if (character === '{') {\n        level++;\n      }\n      if (character === '}') {\n        level--;\n      }\n\n      offset++;\n    } while (level > 0 && offset < source.length)\n\n    const expressionLength = offset - startOffset;\n\n    return level === 0 && expressionLength > 1 ? expressionLength : undefined\n  }\n}\n```\n\nTo make the custom `InterpolationExpressionMatcher` implementation available to `ngx-transloco-markup` register it as provider in root module of your application using the `TRANSLATION_INTERPOLATION_EXPRESSION_MATCHER` injection token:\n\n```typescript\nimport { TRANSLATION_INTERPOLATION_EXPRESSION_MATCHER } from 'ngx-transloco-markup';\n\n@NgModule({\n  providers: [\n    {\n      provide: TRANSLATION_INTERPOLATION_EXPRESSION_MATCHER,\n      useClass: MessageFormatInterpolationExpressionMatcher\n    }\n  ]\n})\nexport class AppModule {}\n```\n\n### Supporting additional link model renderers\n\n**ngx-transloco-markup** supports two type of link models out-of-the-box: string values and values that conform to the `ExternalLink` model.\nBoth are treated as links that target a location outside of the application.\nMany applications, however, also need links that target a specific part within the application.\nIf your application uses the Angular router, then this is usually achieved by means of a [router link directive](https://angular.io/api/router/RouterLink).\nSince that directive cannot be used within translation values another method is necessary.\n\nTo still be able to support router links (or other special link types) in translation values, you can specify additional link renderers.\nA link renderer should implement or extend the `LinkRenderer` (abstract) class:\n\n```typescript\nexport abstract class LinkRenderer<T> {\n    public abstract supports(link: unknown): link is T;\n    public abstract render(link: T, targetElement: HTMLAnchorElement): void;\n}\n```\n\nLink renderers are used by the link transpilers to determine how a specific link should be applied to an\n`HTMLAnchorElement`.\nThis setup allows for different types of link models that can have their own specific rendering method.\nA custom `LinkRenderer` can be registered by providing it at the right module (usually the application's root module), using the `provideLinkRenderer` function:\n\n```typescript\nimport { provideLinkRenderer } from 'ngx-transloco-markup';\n\n@NgModule({\n  providers: [\n    provideLinkRenderer(MyCustomLinkRenderer)\n  ]\n})\nexport class AppModule { }\n```\n\nSince the need for router links is quite common a special renderer for such links is available.\nThis renderer is provided in a separate NPM package: [`ngx-transloco-markup-router-link`](https://github.com/dscheerens/ngx-transloco-markup-router-link).\nNote that the renderer is not part of the `ngx-transloco-markup` core package, as it depends on the `@angular/router` package.\n","readmeFilename":"README.md"}