From ac366987f3a603c5d238c3bb7942a38845be8eeb Mon Sep 17 00:00:00 2001 From: robmadole Date: Wed, 12 Feb 2025 15:58:20 -0600 Subject: [PATCH 1/2] Draft of changes for wa-icon to support custom icons from an FA Kit --- src/components/icon/library.default.ts | 71 ++++++++++++++++---------- 1 file changed, 43 insertions(+), 28 deletions(-) diff --git a/src/components/icon/library.default.ts b/src/components/icon/library.default.ts index 23d6847d7b..5a2ab4df61 100644 --- a/src/components/icon/library.default.ts +++ b/src/components/icon/library.default.ts @@ -1,41 +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>; +}; - // Brands - if (family === 'brands') { - folder = 'brands'; +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' } +}; + +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'; - // Duotone - if (family === 'duotone') { - folder = 'duotone'; + 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.5.2/svgs/${folder}/${name}.svg?token=${encodeURIComponent(kitCode)}` - : `https://ka-f.fontawesome.com/releases/v6.5.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 = { From 714250cc9668bb1057bc5ac4f3d6ee04bdb6eab3 Mon Sep 17 00:00:00 2001 From: robmadole Date: Wed, 12 Feb 2025 16:04:22 -0600 Subject: [PATCH 2/2] Prettier --- src/components/icon/library.default.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/icon/library.default.ts b/src/components/icon/library.default.ts index 5a2ab4df61..3b5e09ceb9 100644 --- a/src/components/icon/library.default.ts +++ b/src/components/icon/library.default.ts @@ -14,29 +14,29 @@ const lookup: IconLookup = { regular: 'regular', light: 'light', thin: 'thin', - brands: 'brands' + brands: 'brands', }, duotone: { solid: 'duotone', regular: 'duotone-regular', light: 'duotone-light', - thin: 'duotone-thin' + thin: 'duotone-thin', }, sharp: { solid: 'sharp-solid', regular: 'sharp-regular', light: 'sharp-light', - thin: 'sharp-thin' + thin: 'sharp-thin', }, 'sharp-duotone': { solid: 'sharp-duotone-solid', regular: 'sharp-duotone-regular', light: 'sharp-duotone-light', - thin: 'sharp-duotone-thin' - } + thin: 'sharp-duotone-thin', + }, }; -const version = "6.7.2"; +const version = '6.7.2'; function getIconUrl(name: string, family: string, variant: string) { const kitCode = getKitCode(); @@ -45,7 +45,7 @@ function getIconUrl(name: string, family: string, variant: string) { let folder = (lookup as Record>)?.[family]?.[variant] ?? 'solid'; if (family === 'kit' || family === 'kit-duotone') { - return `https://kit.fontawesome.com/${kitCode}/icons/${family}/custom/${name}.svg` + return `https://kit.fontawesome.com/${kitCode}/icons/${family}/custom/${name}.svg`; } return isPro