diff --git a/src/components/icon/library.default.ts b/src/components/icon/library.default.ts index 68f5f14241..3b5e09ceb9 100644 --- a/src/components/icon/library.default.ts +++ b/src/components/icon/library.default.ts @@ -1,52 +1,56 @@ import { getKitCode } from '../../utilities/base-path.js'; import type { IconLibrary } from './library.js'; -function getIconUrl(name: string, family: string, variant: string) { - const kitCode = getKitCode(); - const isPro = kitCode.length > 0; - let folder = 'solid'; - - // Classic - if (family === 'classic') { - if (variant === 'thin') folder = 'thin'; - if (variant === 'light') folder = 'light'; - if (variant === 'regular') folder = 'regular'; - if (variant === 'solid') folder = 'solid'; - } +type IconFamily = 'classic' | 'duotone' | 'sharp' | 'sharp-duotone'; +type IconVariant = 'solid' | 'regular' | 'light' | 'thin' | 'brands'; - // Sharp - if (family === 'sharp') { - if (variant === 'thin') folder = 'sharp-thin'; - if (variant === 'light') folder = 'sharp-light'; - if (variant === 'regular') folder = 'sharp-regular'; - if (variant === 'solid') folder = 'sharp-solid'; - } +type IconLookup = { + [key in IconFamily]: Partial>; +}; - // Duotone - if (family === 'duotone') { - if (variant === 'thin') folder = 'duotone-thin'; - if (variant === 'light') folder = 'duotone-light'; - if (variant === 'regular') folder = 'duotone-regular'; - if (variant === 'solid') folder = 'duotone'; - } +const lookup: IconLookup = { + classic: { + solid: 'solid', + regular: 'regular', + light: 'light', + thin: 'thin', + brands: 'brands', + }, + duotone: { + solid: 'duotone', + regular: 'duotone-regular', + light: 'duotone-light', + thin: 'duotone-thin', + }, + sharp: { + solid: 'sharp-solid', + regular: 'sharp-regular', + light: 'sharp-light', + thin: 'sharp-thin', + }, + 'sharp-duotone': { + solid: 'sharp-duotone-solid', + regular: 'sharp-duotone-regular', + light: 'sharp-duotone-light', + thin: 'sharp-duotone-thin', + }, +}; - // Sharp Duotone - if (family === 'sharp-duotone') { - if (variant === 'thin') folder = 'sharp-duotone-thin'; - if (variant === 'light') folder = 'sharp-duotone-light'; - if (variant === 'regular') folder = 'sharp-duotone-regular'; - if (variant === 'solid') folder = 'sharp-duotone-solid'; - } +const version = '6.7.2'; + +function getIconUrl(name: string, family: string, variant: string) { + const kitCode = getKitCode(); + // TODO this is not a good indicator of if the Kit is pro + const isPro = kitCode.length > 0; + let folder = (lookup as Record>)?.[family]?.[variant] ?? 'solid'; - // Brands - if (family === 'brands') { - folder = 'brands'; + if (family === 'kit' || family === 'kit-duotone') { + return `https://kit.fontawesome.com/${kitCode}/icons/${family}/custom/${name}.svg`; } - // Use the default CDN return isPro - ? `https://ka-p.fontawesome.com/releases/v6.7.2/svgs/${folder}/${name}.svg?token=${encodeURIComponent(kitCode)}` - : `https://ka-f.fontawesome.com/releases/v6.7.2/svgs/${folder}/${name}.svg`; + ? `https://ka-p.fontawesome.com/releases/v${version}/svgs/${folder}/${name}.svg?token=${encodeURIComponent(kitCode)}` + : `https://ka-f.fontawesome.com/releases/v${version}/svgs/${folder}/${name}.svg`; } const library: IconLibrary = {