@taiga-ui/core
Version:
Core library for creating Angular components and applications using Taiga UI
44 lines • 6.13 kB
JavaScript
import { inject, InjectionToken } from '@angular/core';
import { TUI_ASSETS_PATH } from './assets-path';
import { TUI_ICON_REGISTRY } from './icons';
const ICON_MODE_PREFIXES = { font: '@font.', image: '@img.' };
export const TUI_ICON_RESOLVER = new InjectionToken(ngDevMode ? 'TUI_ICON_RESOLVER' : '', {
factory: () => {
const path = inject(TUI_ASSETS_PATH);
// regex for @{any text}. used as a default fallback, returns path to svg from icon pack
return (icon) => `${path}/${icon
.replace(/@[a-zA-Z]+\./, '')
.split('.')
.join('/')}.svg`;
},
});
/**
* @deprecated use {@link TUI_ICON_RESOLVER}
*/
export const TUI_ICON_START_RESOLVER = TUI_ICON_RESOLVER;
export function tuiGetIconMode(icon) {
if (!icon) {
return null;
}
if (icon.startsWith(ICON_MODE_PREFIXES.image)) {
return 'image';
}
return icon.startsWith(ICON_MODE_PREFIXES.font) ? 'font' : 'svg';
}
export function tuiInjectIconResolver() {
const icons = inject(TUI_ICON_REGISTRY);
const resolver = inject(TUI_ICON_RESOLVER);
return (icon) => {
if (!icon || icon.includes('/')) {
return icon;
}
if (tuiGetIconMode(icon) === 'font') {
return icon.slice(ICON_MODE_PREFIXES.font.length);
}
return icons[icon] ?? resolver(icon);
};
}
export function tuiIconResolverProvider(useValue) {
return { provide: TUI_ICON_RESOLVER, useValue };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1yZXNvbHZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvdG9rZW5zL2ljb24tcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxjQUFjLEVBQWdCLE1BQU0sZUFBZSxDQUFDO0FBR3BFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRTFDLE1BQU0sa0JBQWtCLEdBQUcsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQVUsQ0FBQztBQUVyRSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FDL0MsU0FBUyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUNwQztJQUNJLE9BQU8sRUFBRSxHQUFHLEVBQUU7UUFDVixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFckMsd0ZBQXdGO1FBQ3hGLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNaLEdBQUcsSUFBSSxJQUFJLElBQUk7YUFDVixPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQzthQUMzQixLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFDN0IsQ0FBQztDQUNKLENBQ0osQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsaUJBQWlCLENBQUM7QUFFekQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFvQjtJQUMvQyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1AsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUMzQyxPQUFPLE9BQU8sQ0FBQztLQUNsQjtJQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUI7SUFDakMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDeEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFM0MsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ1osSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyRDtRQUVELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFDLFFBQWtDO0lBQ3RFLE9BQU8sRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFDLENBQUM7QUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgdHlwZSBQcm92aWRlcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3R5cGUgVHVpU3RyaW5nSGFuZGxlcn0gZnJvbSAnQHRhaWdhLXVpL2Nkay90eXBlcyc7XG5cbmltcG9ydCB7VFVJX0FTU0VUU19QQVRIfSBmcm9tICcuL2Fzc2V0cy1wYXRoJztcbmltcG9ydCB7VFVJX0lDT05fUkVHSVNUUll9IGZyb20gJy4vaWNvbnMnO1xuXG5jb25zdCBJQ09OX01PREVfUFJFRklYRVMgPSB7Zm9udDogJ0Bmb250LicsIGltYWdlOiAnQGltZy4nfSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFRVSV9JQ09OX1JFU09MVkVSID0gbmV3IEluamVjdGlvblRva2VuPFR1aVN0cmluZ0hhbmRsZXI8c3RyaW5nPj4oXG4gICAgbmdEZXZNb2RlID8gJ1RVSV9JQ09OX1JFU09MVkVSJyA6ICcnLFxuICAgIHtcbiAgICAgICAgZmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IGluamVjdChUVUlfQVNTRVRTX1BBVEgpO1xuXG4gICAgICAgICAgICAvLyByZWdleCBmb3IgQHthbnkgdGV4dH0uIHVzZWQgYXMgYSBkZWZhdWx0IGZhbGxiYWNrLCByZXR1cm5zIHBhdGggdG8gc3ZnIGZyb20gaWNvbiBwYWNrXG4gICAgICAgICAgICByZXR1cm4gKGljb24pID0+XG4gICAgICAgICAgICAgICAgYCR7cGF0aH0vJHtpY29uXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9AW2EtekEtWl0rXFwuLywgJycpXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLicpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcvJyl9LnN2Z2A7XG4gICAgICAgIH0sXG4gICAgfSxcbik7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBUVUlfSUNPTl9SRVNPTFZFUn1cbiAqL1xuZXhwb3J0IGNvbnN0IFRVSV9JQ09OX1NUQVJUX1JFU09MVkVSID0gVFVJX0lDT05fUkVTT0xWRVI7XG5cbmV4cG9ydCBmdW5jdGlvbiB0dWlHZXRJY29uTW9kZShpY29uPzogc3RyaW5nIHwgbnVsbCk6ICdmb250JyB8ICdpbWFnZScgfCAnc3ZnJyB8IG51bGwge1xuICAgIGlmICghaWNvbikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaWNvbi5zdGFydHNXaXRoKElDT05fTU9ERV9QUkVGSVhFUy5pbWFnZSkpIHtcbiAgICAgICAgcmV0dXJuICdpbWFnZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGljb24uc3RhcnRzV2l0aChJQ09OX01PREVfUFJFRklYRVMuZm9udCkgPyAnZm9udCcgOiAnc3ZnJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR1aUluamVjdEljb25SZXNvbHZlcigpOiBUdWlTdHJpbmdIYW5kbGVyPHN0cmluZz4ge1xuICAgIGNvbnN0IGljb25zID0gaW5qZWN0KFRVSV9JQ09OX1JFR0lTVFJZKTtcbiAgICBjb25zdCByZXNvbHZlciA9IGluamVjdChUVUlfSUNPTl9SRVNPTFZFUik7XG5cbiAgICByZXR1cm4gKGljb24pID0+IHtcbiAgICAgICAgaWYgKCFpY29uIHx8IGljb24uaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGljb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHVpR2V0SWNvbk1vZGUoaWNvbikgPT09ICdmb250Jykge1xuICAgICAgICAgICAgcmV0dXJuIGljb24uc2xpY2UoSUNPTl9NT0RFX1BSRUZJWEVTLmZvbnQubGVuZ3RoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpY29uc1tpY29uXSA/PyByZXNvbHZlcihpY29uKTtcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHVpSWNvblJlc29sdmVyUHJvdmlkZXIodXNlVmFsdWU6IFR1aVN0cmluZ0hhbmRsZXI8c3RyaW5nPik6IFByb3ZpZGVyIHtcbiAgICByZXR1cm4ge3Byb3ZpZGU6IFRVSV9JQ09OX1JFU09MVkVSLCB1c2VWYWx1ZX07XG59XG4iXX0=