4d1e49671b
Uses siApple with hex override #555555 (visible on both light and dark themes — Apple's brand color #000000 is invisible on dark backgrounds). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
207 lines
9.8 KiB
JavaScript
207 lines
9.8 KiB
JavaScript
import {
|
|
siProxmox, siDocker,
|
|
siSynology, siTruenas,
|
|
siUbiquiti, siMikrotik, siCisco, siTplink, siAsus, siNetgear, siPfsense, siOpnsense, siOpenwrt,
|
|
siApache, siTraefikproxy, siApacheguacamole,
|
|
siAuthelia, siKeycloak, siAuthentik, siOkta, siAuth0,
|
|
siOrange, siOvh,
|
|
siBitwarden, siVaultwarden, si1password, siKeepassxc, siVault,
|
|
siMariadb,
|
|
siKubernetes,
|
|
siApple,
|
|
siDebian, siUbuntu,
|
|
siAnsible,
|
|
siDell, siHp,
|
|
siRaspberrypi, siArduino,
|
|
siNextcloud, siPaperlessngx, siUptimekuma, siMaterialformkdocs,
|
|
siWordpress, siGhost, siGrav, siJekyll, siHugo, siHexo, siDrupal, siJoomla, siTypo3, siOctobercms, siTextpattern,
|
|
siMatomo, siPlausibleanalytics,
|
|
siSamsung, siLg, siSony, siPanasonic, siSharp, siToshiba, siVestel,
|
|
siChromecast, siAndroid, siAppletv, siAmazonfiretv, siRoku, siKodi,
|
|
siJellyfin, siHomeassistant, siPhilipshue, siXiaomi,
|
|
siRadarr, siSonarr, siTransmission,
|
|
siExcalidraw,
|
|
siKde,
|
|
} from 'simple-icons'
|
|
|
|
// Icônes personnalisées (absentes de simple-icons) — même format { title, hex, path }.
|
|
const ICON_FREE = {
|
|
title: 'Free',
|
|
hex: 'CD1126',
|
|
path: 'M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z',
|
|
}
|
|
|
|
const ICON_BOUYGUES = {
|
|
title: 'Bouygues Telecom',
|
|
hex: '0099CC',
|
|
path: 'M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z',
|
|
}
|
|
|
|
const ICON_SFR = {
|
|
title: 'SFR',
|
|
hex: 'E2001A',
|
|
path: 'M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z',
|
|
}
|
|
|
|
const ICON_ARCHIVE = {
|
|
title: 'Archive',
|
|
hex: '78716C',
|
|
path: 'M20 4H4c-1.1 0-2 .45-2 1v2c0 .55.9 1 2 1h16c1.1 0 2-.45 2-1V5c0-.55-.9-1-2-1zM4 9v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V9H4zm7 2h2c.55 0 1 .45 1 1s-.45 1-1 1h-2c-.55 0-1-.45-1-1s.45-1 1-1z',
|
|
}
|
|
|
|
const ICON_BASTION = {
|
|
title: 'Bastion',
|
|
hex: '1E3A8A',
|
|
path: 'M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm1 12.41V17h-2v-3.59C10.14 12.96 9.5 12.13 9.5 11c0-1.66 1.34-3 3-3s3 1.34 3 3c0 1.13-.64 1.96-1.5 2.41z',
|
|
}
|
|
|
|
const ICON_MAIL = {
|
|
title: 'Mail',
|
|
hex: '64748B',
|
|
path: 'M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z',
|
|
}
|
|
|
|
// Ordre : du plus spécifique au plus générique pour éviter les faux positifs.
|
|
const BRANDS = [
|
|
// Hyperviseurs / virtualisation
|
|
{ kw: ['proxmox', 'pve'], icon: siProxmox },
|
|
{ kw: ['docker'], icon: siDocker },
|
|
|
|
// NAS
|
|
{ kw: ['synology', 'dsm'], icon: siSynology },
|
|
{ kw: ['truenas', 'freenas'], icon: siTruenas },
|
|
|
|
// Réseau
|
|
{ kw: ['ubiquiti', 'unifi', 'usg', 'udm'], icon: siUbiquiti },
|
|
{ kw: ['mikrotik', 'routeros'], icon: siMikrotik },
|
|
{ kw: ['cisco'], icon: siCisco },
|
|
{ kw: ['tp-link', 'tplink', 'tp link'], icon: siTplink },
|
|
{ kw: ['asus'], icon: siAsus },
|
|
{ kw: ['netgear'], icon: siNetgear },
|
|
{ kw: ['pfsense'], icon: siPfsense },
|
|
{ kw: ['opnsense'], icon: siOpnsense },
|
|
{ kw: ['openwrt'], icon: siOpenwrt },
|
|
|
|
// FAI français
|
|
{ kw: ['orange', 'sosh', 'livebox'], icon: siOrange },
|
|
{ kw: ['ovh', 'ovhcloud', 'kimsufi', 'soyoustart'], icon: siOvh },
|
|
{ kw: ['freebox', 'free mobile', 'free telecom', 'iliad'], icon: ICON_FREE },
|
|
{ kw: ['bouygues', 'bbox'], icon: ICON_BOUYGUES },
|
|
{ kw: ['sfr', 'red by sfr', 'sfr box'], icon: ICON_SFR },
|
|
|
|
// Serveurs web / proxy
|
|
{ kw: ['apache', 'apache2', 'httpd'], icon: siApache },
|
|
{ kw: ['traefik'], icon: siTraefikproxy },
|
|
{ kw: ['guacamole'], icon: siApacheguacamole },
|
|
|
|
// Bastions / jump hosts
|
|
{ kw: ['bastion', 'jumphost', 'jump host', 'jump server', 'teleport', 'bastillion'], icon: ICON_BASTION },
|
|
|
|
// Auth / SSO / IDP
|
|
{ kw: ['authelia'], icon: siAuthelia },
|
|
{ kw: ['keycloak'], icon: siKeycloak },
|
|
{ kw: ['authentik'], icon: siAuthentik },
|
|
{ kw: ['okta'], icon: siOkta },
|
|
{ kw: ['auth0'], icon: siAuth0 },
|
|
|
|
// Coffres-forts de mots de passe
|
|
{ kw: ['vaultwarden'], icon: siVaultwarden },
|
|
{ kw: ['bitwarden'], icon: siBitwarden },
|
|
{ kw: ['1password', 'onepassword'], icon: si1password },
|
|
{ kw: ['keepass', 'keepassxc'], icon: siKeepassxc },
|
|
{ kw: ['hashicorp vault', 'hashicorp'], icon: siVault },
|
|
|
|
// Archivage
|
|
{ kw: ['archive', 'archiver', 'archivage', 'archivar', 'archivebox'], icon: ICON_ARCHIVE },
|
|
|
|
// Messagerie
|
|
{ kw: ['mail', 'smtp', 'imap', 'postfix', 'dovecot', 'mailcow', 'mailu', 'roundcube'], icon: ICON_MAIL },
|
|
|
|
// Bases de données
|
|
{ kw: ['mariadb', 'maria db'], icon: siMariadb },
|
|
|
|
// Orchestration
|
|
{ kw: ['kubernetes', 'k8s', 'kubectl', 'k3s'], icon: siKubernetes },
|
|
|
|
// Écosystème Apple
|
|
{ kw: ['apple', 'iphone', 'ipad', 'ipados', 'macbook', 'imac', 'mac mini', 'mac pro', 'mac studio', 'macos', 'mac os', 'ios', 'icloud', 'airpods', 'airdrop'], icon: { ...siApple, hex: '555555' } },
|
|
|
|
// OS / distros
|
|
{ kw: ['debian'], icon: siDebian },
|
|
{ kw: ['ubuntu'], icon: siUbuntu },
|
|
|
|
// Automatisation
|
|
{ kw: ['ansible'], icon: siAnsible },
|
|
|
|
// Serveurs
|
|
{ kw: ['dell', 'idrac', 'poweredge'], icon: siDell },
|
|
{ kw: ['proliant', 'ilo', 'hewlett'], icon: siHp },
|
|
|
|
// SBC / DIY
|
|
{ kw: ['raspberry', 'raspberrypi', 'rpi', 'raspi'], icon: siRaspberrypi },
|
|
{ kw: ['arduino'], icon: siArduino },
|
|
|
|
// Environnements de bureau
|
|
{ kw: ['kde', 'plasma', 'kde desktop'], icon: siKde },
|
|
|
|
// Outils
|
|
{ kw: ['excalidraw'], icon: siExcalidraw },
|
|
|
|
// Productivité / self-hosted
|
|
{ kw: ['nextcloud'], icon: siNextcloud },
|
|
{ kw: ['paperless', 'paperless-ng', 'paperless-ngx'], icon: siPaperlessngx },
|
|
{ kw: ['uptime-kuma', 'uptimekuma', 'uptime kuma'], icon: siUptimekuma },
|
|
{ kw: ['mkdocs', 'material for mkdocs'], icon: siMaterialformkdocs },
|
|
|
|
// CMS / Blog
|
|
{ kw: ['wordpress'], icon: siWordpress },
|
|
{ kw: ['ghost'], icon: siGhost },
|
|
{ kw: ['grav'], icon: siGrav },
|
|
{ kw: ['jekyll'], icon: siJekyll },
|
|
{ kw: ['hugo'], icon: siHugo },
|
|
{ kw: ['hexo'], icon: siHexo },
|
|
{ kw: ['drupal'], icon: siDrupal },
|
|
{ kw: ['joomla'], icon: siJoomla },
|
|
{ kw: ['typo3'], icon: siTypo3 },
|
|
{ kw: ['octobercms', 'october cms'], icon: siOctobercms },
|
|
{ kw: ['textpattern'], icon: siTextpattern },
|
|
|
|
// Analytique
|
|
{ kw: ['matomo'], icon: siMatomo },
|
|
{ kw: ['plausible'], icon: siPlausibleanalytics },
|
|
|
|
// TV connectées — fabricants
|
|
{ kw: ['samsung', 'tizen', 'samsung tv'], icon: siSamsung },
|
|
{ kw: ['lg', 'webos', 'lg tv'], icon: siLg },
|
|
{ kw: ['sony', 'bravia'], icon: { ...siSony, hex: '1A1A1A' } },
|
|
{ kw: ['panasonic'], icon: siPanasonic },
|
|
{ kw: ['sharp'], icon: siSharp },
|
|
{ kw: ['toshiba'], icon: siToshiba },
|
|
{ kw: ['vestel'], icon: siVestel },
|
|
|
|
// TV connectées — boîtiers / écosystèmes
|
|
{ kw: ['chromecast', 'google tv'], icon: siChromecast },
|
|
{ kw: ['android tv', 'androidtv'], icon: siAndroid },
|
|
{ kw: ['apple tv', 'appletv'], icon: siAppletv },
|
|
{ kw: ['fire tv', 'firetv', 'amazon fire'], icon: siAmazonfiretv },
|
|
{ kw: ['roku'], icon: siRoku },
|
|
{ kw: ['kodi'], icon: siKodi },
|
|
|
|
// Médias / torrent
|
|
{ kw: ['radarr'], icon: siRadarr },
|
|
{ kw: ['sonarr'], icon: siSonarr },
|
|
{ kw: ['transmission'], icon: siTransmission },
|
|
|
|
// Médias / domotique
|
|
{ kw: ['jellyfin'], icon: siJellyfin },
|
|
{ kw: ['homeassistant', 'home assistant', 'hassio', 'hass'], icon: siHomeassistant },
|
|
{ kw: ['philips hue', 'hue bridge', 'hue hub'], icon: siPhilipshue },
|
|
{ kw: ['xiaomi', 'mi home', 'yeelight'], icon: siXiaomi },
|
|
]
|
|
|
|
export function detectBrands(name, description) {
|
|
const text = ((name || '') + ' ' + (description || '')).toLowerCase()
|
|
if (!text.trim()) return []
|
|
return BRANDS.filter(b => b.kw.some(kw => text.includes(kw))).map(b => b.icon)
|
|
}
|