mirror of
https://github.com/bitwarden/browser
synced 2026-02-21 03:43:58 +00:00
* rename bit-icon to bit-svg; create new bit-icon for font icons Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * find and replace current usage Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * add custom eslint warning Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix incorrect usage * fix tests * fix tests * Update libs/components/src/svg/index.ts Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com> * Update libs/eslint/components/no-bwi-class-usage.spec.mjs Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com> * update component api * update class name * use icon type in iconButton component * update type Icon --> BitSvg * fix bad renames * fix more renames * fix bad input * revert iconButton type * fix lint * fix more inputs * misc fixes Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix test * add eslint ignore * fix lint * add comparison story --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
26 lines
672 B
TypeScript
26 lines
672 B
TypeScript
class BitSvg {
|
|
constructor(readonly svg: string) {}
|
|
}
|
|
|
|
// We only export the type to prohibit the creation of Svgs without using
|
|
// the `svg` template literal tag.
|
|
export type { BitSvg };
|
|
|
|
export function isBitSvg(svgContent: unknown): svgContent is BitSvg {
|
|
return svgContent instanceof BitSvg;
|
|
}
|
|
|
|
export class DynamicContentNotAllowedError extends Error {
|
|
constructor() {
|
|
super("Dynamic content in icons is not allowed due to risk of user-injected XSS.");
|
|
}
|
|
}
|
|
|
|
export function svg(strings: TemplateStringsArray, ...values: unknown[]): BitSvg {
|
|
if (values.length > 0) {
|
|
throw new DynamicContentNotAllowedError();
|
|
}
|
|
|
|
return new BitSvg(strings[0]);
|
|
}
|