Python 68.8%
TypeScript 18.6%
CSS 8.7%
JavaScript 3.3%
HTML 0.6%
1// -----------------------------------------------------------------------------2// Rent-Ka — Rental listings aggregator (Canada, outside Québec)3// Auteur : Simon-Pierre Boucher — contact@spboucher.ai4// components/Icons.tsx : icônes SVG maison — style linéaire (outline),5// trait moyen 2 px, extrémités arrondies, currentColor — conformes à6// the Rent-Ka visual identity (minimal and warm).7// -----------------------------------------------------------------------------8import { SVGProps } from "react";910type P = SVGProps<SVGSVGElement> & { size?: number };1112function Base({ size = 16, children, ...rest }: P) {13 return (14 <svg15 width={size} height={size} viewBox="0 0 24 24" fill="none"16 stroke="currentColor" strokeWidth="2" strokeLinecap="round"17 strokeLinejoin="round" aria-hidden="true" focusable="false" {...rest}18 >19 {children}20 </svg>21 );22}2324/** Line house — marked gable + offset door (Rent-Ka signature) */25export const IcoHouse = (p: P) => (26 <Base {...p}>27 <path d="M4 11 12 4l8 7" />28 <path d="M6 10v10h12V10" />29 <path d="M13.5 20v-6h-3v6" />30 </Base>31);3233/** Immeuble à logements — fenêtres en grille */34export const IcoBuilding = (p: P) => (35 <Base {...p}>36 <path d="M5 20V5h10v15" />37 <path d="M15 9h4v11" />38 <path d="M3 20h18" />39 <path d="M8 8.5h1.5M11 8.5h1.5M8 12h1.5M11 12h1.5M8 15.5h1.5M11 15.5h1.5" strokeWidth="1.7" />40 </Base>41);4243export const IcoCamera = (p: P) => (44 <Base {...p}>45 <path d="M3 7h4l2-2.5h6L17 7h4v13H3z" />46 <circle cx="12" cy="13" r="3.4" />47 </Base>48);4950export const IcoPaw = (p: P) => (51 <Base {...p}>52 <path d="M12 12.5c-3 0-5 2.2-5 4.4 0 1.6 1.2 2.6 2.6 2.6 1 0 1.6-.4 2.4-.4s1.4.4 2.4.4c1.4 0 2.6-1 2.6-2.6 0-2.2-2-4.4-5-4.4z" />53 <path d="M7.2 10.2c.5 1-.1 2-1 2s-1.8-.8-1.8-1.9c0-1 .8-1.6 1.5-1.4.6.1 1 .6 1.3 1.3z" strokeWidth="1.7" />54 <path d="M16.8 10.2c-.5 1 .1 2 1 2s1.8-.8 1.8-1.9c0-1-.8-1.6-1.5-1.4-.6.1-1 .6-1.3 1.3z" strokeWidth="1.7" />55 <path d="M10.4 7.5c.3 1.1-.3 2.1-1.2 2.1-1 0-1.7-1-1.6-2.1.1-1 .9-1.7 1.7-1.5.6.2 1 .8 1.1 1.5z" strokeWidth="1.7" />56 <path d="M13.6 7.5c-.3 1.1.3 2.1 1.2 2.1 1 0 1.7-1 1.6-2.1-.1-1-.9-1.7-1.7-1.5-.6.2-1 .8-1.1 1.5z" strokeWidth="1.7" />57 </Base>58);5960export const IcoSofa = (p: P) => (61 <Base {...p}>62 <path d="M5 11V7.5A1.5 1.5 0 0 1 6.5 6h11A1.5 1.5 0 0 1 19 7.5V11" />63 <path d="M3 13.5A1.9 1.9 0 0 1 5 11.5c1.1 0 2 .9 2 2V14h10v-.5c0-1.1.9-2 2-2a1.9 1.9 0 0 1 2 2V18H3z" />64 <path d="M5 18v1.8M19 18v1.8" />65 </Base>66);6768export const IcoBolt = (p: P) => (69 <Base {...p}>70 <path d="M13 2 5 13.5h5.5L11 22l8-11.5h-5.5z" />71 </Base>72);7374export const IcoList = (p: P) => (75 <Base {...p}>76 <path d="M4 6h2M4 12h2M4 18h2" />77 <path d="M9.5 6H20M9.5 12H20M9.5 18H20" />78 </Base>79);8081/** Carte pliée (plan) */82export const IcoMap = (p: P) => (83 <Base {...p}>84 <path d="M3 6.5 9 4l6 2.5L21 4v13.5L15 20l-6-2.5L3 20z" />85 <path d="M9 4v13.5M15 6.5V20" />86 </Base>87);8889export const IcoPin = (p: P) => (90 <Base {...p}>91 <path d="M12 21s-6.5-6-6.5-11a6.5 6.5 0 0 1 13 0c0 5-6.5 11-6.5 11z" />92 <circle cx="12" cy="9.7" r="2.2" />93 </Base>94);9596/** Curseurs de filtres */97export const IcoSliders = (p: P) => (98 <Base {...p}>99 <path d="M4 8h10M18 8h2M4 16h2M10 16h10" />100 <path d="M14 5.8v4.4M6 13.8v4.4" />101 </Base>102);103104export const IcoSearch = (p: P) => (105 <Base {...p}>106 <circle cx="11" cy="11" r="7" />107 <path d="m20 20-3.5-3.5" />108 </Base>109);110111export const IcoAlert = (p: P) => (112 <Base {...p}>113 <path d="M12 3 2.5 20h19z" />114 <path d="M12 9.5v4.5" />115 <path d="M12 17.2v.1" strokeWidth="2.6" />116 </Base>117);118119export const IcoCompass = (p: P) => (120 <Base {...p}>121 <circle cx="12" cy="12" r="9" />122 <path d="m15.5 8.5-2.2 5-4.8 2 2.2-5z" />123 </Base>124);125126export const IcoChart = (p: P) => (127 <Base {...p}>128 <path d="M4 20V4" />129 <path d="M4 20h16" />130 <path d="M8.5 16v-5M13 16V8M17.5 16v-3.5" />131 </Base>132);133134export const IcoFolder = (p: P) => (135 <Base {...p}>136 <path d="M3 6h6l2 2.5h10V19H3z" />137 </Base>138);139140export const IcoLock = (p: P) => (141 <Base {...p}>142 <rect x="5" y="11" width="14" height="9" />143 <path d="M8 11V7.8A3.8 3.8 0 0 1 12 4a3.8 3.8 0 0 1 4 3.8V11" />144 </Base>145);146147export const IcoDoc = (p: P) => (148 <Base {...p}>149 <path d="M6 3h8l4 4v14H6z" />150 <path d="M14 3v4h4" />151 <path d="M9 12h6M9 15.5h6" />152 </Base>153);154155export const IcoHeart = (p: P & { filled?: boolean }) => {156 const { filled, ...rest } = p;157 return (158 <Base {...rest} fill={filled ? "currentColor" : "none"}>159 <path d="M12 20.5C7 16.5 3.5 13 3.5 9.3 3.5 6.8 5.5 5 7.8 5c1.7 0 3.2 1 4.2 2.6C13 6 14.5 5 16.2 5c2.3 0 4.3 1.8 4.3 4.3 0 3.7-3.5 7.2-8.5 11.2z" />160 </Base>161 );162};163164// -- réseaux sociaux (tracés au trait, même langage que le reste) --------------165166export const IcoUser = (p: P) => (167 <Base {...p}>168 <circle cx="12" cy="8" r="3.5" />169 <path d="M5 20c1.2-3.4 3.8-5 7-5s5.8 1.6 7 5" />170 </Base>171);172173export const IcoInstagram = (p: P) => (174 <Base {...p}>175 <rect x="4" y="4" width="16" height="16" rx="4.5" />176 <circle cx="12" cy="12" r="3.6" />177 <path d="M16.6 7.4v.1" strokeWidth="2.6" />178 </Base>179);180181export const IcoFacebook = (p: P) => (182 <Base {...p}>183 <path d="M14.8 4h-2.3a3.4 3.4 0 0 0-3.4 3.4V10H6.8v3.4h2.3V21h3.4v-7.6h2.6l.6-3.4h-3.2V7.8c0-.5.4-.9.9-.9h2.4z" />184 </Base>185);186187export const IcoX = (p: P) => (188 <Base {...p}>189 <path d="M4.5 4.5 19.5 19.5M19 4.5 5 19.5" />190 </Base>191);192193export const IcoLinkedIn = (p: P) => (194 <Base {...p}>195 <rect x="4" y="4" width="16" height="16" rx="2.5" />196 <path d="M8.2 10.5V16M8.2 8v.1" strokeWidth="2.2" />197 <path d="M11.8 16v-3.2a2 2 0 0 1 4 0V16" strokeWidth="2.2" />198 </Base>199);200201export const IcoTikTok = (p: P) => (202 <Base {...p}>203 <path d="M13.5 4v10.3a3.3 3.3 0 1 1-3.3-3.3" />204 <path d="M13.5 6.2c.8 2 2.6 3.4 4.8 3.6" />205 </Base>206);207208export const IcoYouTube = (p: P) => (209 <Base {...p}>210 <rect x="3" y="6" width="18" height="12" rx="3.5" />211 <path d="m10.3 9.5 4.6 2.5-4.6 2.5z" />212 </Base>213);214215export const IcoChevronLeft = (p: P) => (216 <Base {...p}>217 <path d="m14.5 5-7 7 7 7" />218 </Base>219);220221export const IcoChevronRight = (p: P) => (222 <Base {...p}>223 <path d="m9.5 5 7 7-7 7" />224 </Base>225);226