SPB Git forge

spb/rent-ka

Public
8commits 1branches 0releases
7.4 MBsize
maindefault branch
19 days agolast push
Python 68.8% TypeScript 18.6% CSS 8.7% JavaScript 3.3% HTML 0.6%
6.2 KB · 226 lines tsx
Raw Blame History
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