d02f1543e9
Build and deploy / deploy (push) Successful in 36s
Nouvelle page /urne : vote quotidien inspiré du vote à l'urne de l'Athènes antique. Chaque Citoyen dépose un jeton par jour sur une autre personne (jamais lui-même), avec confirmation à deux temps avant l'envoi — le vote est définitif pour la journée, aucune RPC de modification. Les jetons s'accumulent sur toute la semaine dans un classement public et cumulatif, identique pour tout le monde y compris les Archontes : contraste volontaire avec Le Mur de la Honte, ici personne (Archontes compris) ne voit qui a voté pour qui, seul le total par personne est public. Nouvelle table urn_votes (append-only, comme points_log) + deux RPC : urn_vote_counts() agrège les votes sans jamais exposer une ligne individuelle, cast_urn_vote() applique les règles (pas de vote pour un juge ni pour soi-même, un vote par jour). Les Archontes ne votent pas et ne peuvent pas recevoir de jetons.
294 lines
12 KiB
TypeScript
294 lines
12 KiB
TypeScript
type IconProps = { className?: string };
|
|
|
|
const base = "h-5 w-5";
|
|
|
|
export function IconWheel({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<circle cx="12" cy="12" r="8.5" />
|
|
<circle cx="12" cy="12" r="1.6" fill="currentColor" stroke="none" />
|
|
<path d="M12 3.5V9M12 15v5.5M20.5 12H15M9 12H3.5M18 6l-3.8 3.8M9.8 14.2 6 18M18 18l-3.8-3.8M9.8 9.8 6 6" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconScroll({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M6 4.5a2 2 0 1 0 0 4h11a2 2 0 1 1 0 4H8" strokeLinecap="round" />
|
|
<path d="M6 4.5v13a2 2 0 0 0 2 2h1M17 8.5V17a2 2 0 0 1-2 2H8" strokeLinecap="round" />
|
|
<circle cx="6" cy="4.5" r="0" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconPerson({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<circle cx="12" cy="8" r="3.5" />
|
|
<path d="M4.5 20c1.4-3.8 4.4-5.8 7.5-5.8s6.1 2 7.5 5.8" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconColumn({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M4 4h16M4 20h16" strokeLinecap="round" />
|
|
<path d="M7 6.5v11.5M11 6.5v11.5M13 6.5v11.5M17 6.5v11.5" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconTerminal({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<rect x="3" y="4.5" width="18" height="15" rx="2" />
|
|
<path d="M7 9.5l3 3-3 3M12.5 15.5h4.5" strokeLinecap="round" strokeLinejoin="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconLogout({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M9 4H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h3" strokeLinecap="round" strokeLinejoin="round" />
|
|
<path d="M16 8l4 4-4 4M20 12H9" strokeLinecap="round" strokeLinejoin="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconCamera({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M4 8.5a2 2 0 0 1 2-2h1.2l1-1.6h7.6l1 1.6H18a2 2 0 0 1 2 2V17a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V8.5Z" strokeLinejoin="round" />
|
|
<circle cx="12" cy="12.5" r="3.2" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconCheck({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={2.4} aria-hidden>
|
|
<path d="M5 12.5l4.5 4.5L19 7" strokeLinecap="round" strokeLinejoin="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconCross({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={2.4} aria-hidden>
|
|
<path d="M6 6l12 12M18 6L6 18" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconClose({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={2} aria-hidden>
|
|
<path d="M6 6l12 12M18 6L6 18" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconChevronDown({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={2} aria-hidden>
|
|
<path d="M6 9l6 6 6-6" strokeLinecap="round" strokeLinejoin="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconCalendar({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<rect x="4" y="5.5" width="16" height="14.5" rx="2" />
|
|
<path d="M4 9.5h16M8 3.5v3M16 3.5v3" strokeLinecap="round" />
|
|
<path d="M8 13h2M11 13h2M14 13h2M8 16.2h2M11 16.2h2" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconScales({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M12 3v18M8 21h8" strokeLinecap="round" />
|
|
<path d="M4 7h6M14 7h6" strokeLinecap="round" />
|
|
<path d="M4 7l-2.5 5a2.5 2.5 0 0 0 5 0Z" strokeLinejoin="round" />
|
|
<path d="M20 7l-2.5 5a2.5 2.5 0 0 0 5 0Z" strokeLinejoin="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconTrophy({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M7 4h10v5a5 5 0 0 1-10 0V4Z" strokeLinejoin="round" />
|
|
<path d="M7 5.5H4a3 3 0 0 0 3 4.3M17 5.5h3a3 3 0 0 1-3 4.3" strokeLinecap="round" />
|
|
<path d="M12 14v3M9 20.5h6M9.5 20.5l.7-3.5h3.6l.7 3.5" strokeLinecap="round" strokeLinejoin="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconDice({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<rect x="4" y="4" width="16" height="16" rx="3" />
|
|
<circle cx="8.3" cy="8.3" r="1.1" fill="currentColor" stroke="none" />
|
|
<circle cx="15.7" cy="8.3" r="1.1" fill="currentColor" stroke="none" />
|
|
<circle cx="12" cy="12" r="1.1" fill="currentColor" stroke="none" />
|
|
<circle cx="8.3" cy="15.7" r="1.1" fill="currentColor" stroke="none" />
|
|
<circle cx="15.7" cy="15.7" r="1.1" fill="currentColor" stroke="none" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconStar({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M12 3.5l2.4 5.3 5.7.6-4.3 3.9 1.2 5.7L12 16l-5 3 1.2-5.7-4.3-3.9 5.7-.6L12 3.5Z" strokeLinejoin="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconPencil({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M4 20l.9-3.9L15.6 5.4a1.6 1.6 0 0 1 2.3 0l.7.7a1.6 1.6 0 0 1 0 2.3L8 19.1 4 20Z" strokeLinejoin="round" strokeLinecap="round" />
|
|
<path d="M14 7l3 3" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconTrash({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M5 7h14M9 7V5a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2" strokeLinecap="round" strokeLinejoin="round" />
|
|
<path d="M7 7l1 13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1l1-13" strokeLinecap="round" strokeLinejoin="round" />
|
|
<path d="M10 11v6M14 11v6" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconPlus({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={2} aria-hidden>
|
|
<path d="M12 5v14M5 12h14" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconCup({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M6 4h12l-1.2 9.5a4.8 4.8 0 0 1-9.6 0L6 4Z" strokeLinejoin="round" />
|
|
<path d="M9.5 20h5M12 17v3" strokeLinecap="round" />
|
|
<path d="M6.3 6H3.5a2.5 2.5 0 0 0 2.5 4M17.7 6h2.8a2.5 2.5 0 0 1-2.5 4" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconSword({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M6 18L17 7M8 8l8 8" strokeLinecap="round" />
|
|
<path d="M15.5 4.5l4 4M4.5 15.5l4 4M4 20l2-2" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconVote({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path
|
|
d="M8 4h8M9 4v3.5L6.5 12a4 4 0 0 0-.5 2v4a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-4a4 4 0 0 0-.5-2L15 7.5V4"
|
|
strokeLinejoin="round"
|
|
strokeLinecap="round"
|
|
/>
|
|
<path d="M9 14h6" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconPin({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<rect x="5" y="6.5" width="14" height="14" rx="1.5" transform="rotate(-5 12 13.5)" strokeLinejoin="round" />
|
|
<circle cx="12" cy="4.5" r="1.8" fill="currentColor" stroke="none" />
|
|
<line x1="12" y1="6" x2="12" y2="8.5" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconOwl({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M6 10.5a6 6 0 0 1 12 0c0 4.5-2.2 8-6 8s-6-3.5-6-8Z" strokeLinejoin="round" />
|
|
<circle cx="9.5" cy="10.5" r="1.6" />
|
|
<circle cx="14.5" cy="10.5" r="1.6" />
|
|
<path d="M12 12.5l-1 2h2l-1-2ZM4 8l2 2M20 8l-2 2" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconHeart({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M12 20S4 14.5 4 9.2A4.2 4.2 0 0 1 12 7a4.2 4.2 0 0 1 8 2.2C20 14.5 12 20 12 20Z" strokeLinejoin="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconWing({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M3 13c3-4 6-2 6 1-2 0-3 1.5-2 3 2 1 4-1 5-4" strokeLinecap="round" strokeLinejoin="round" />
|
|
<path d="M21 13c-3-4-6-2-6 1 2 0 3 1.5 2 3-2 1-4-1-5-4" strokeLinecap="round" strokeLinejoin="round" />
|
|
<path d="M12 10v9" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconTrident({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M12 5v16M12 5c0-1.5 1-2.5 2.3-2.5S16.5 3.5 16.5 5c0 1.7-1.5 3-2.5 4M12 5c0-1.5-1-2.5-2.3-2.5S7.5 3.5 7.5 5c0 1.7 1.5 3 2.5 4" strokeLinecap="round" strokeLinejoin="round" />
|
|
<path d="M8 21h8" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconFlame({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M12 21c-4 0-6.5-2.6-6.5-6 0-3 2-4.8 2.6-7.6 1 1 1.6 2 1.7 3C10.5 8 11 5 14 3c-.6 2.6.4 3.8 1.7 5.3 1.3 1.5 2.8 3 2.8 6.2 0 3.5-2.5 6.5-6.5 6.5Z" strokeLinejoin="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconBolt({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M13 2 4 14h6l-1 8 9-12h-6l1-8Z" strokeLinejoin="round" strokeLinecap="round" />
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
export function IconWings({ className = base }: IconProps) {
|
|
return (
|
|
<svg viewBox="0 0 24 24" className={className} fill="none" stroke="currentColor" strokeWidth={1.8} aria-hidden>
|
|
<path d="M12 5v14" strokeLinecap="round" />
|
|
<path
|
|
d="M12 8c-2-3-6-4-9-3 1 3 1 6 4 8 2 1.4 4 1.2 5 .5"
|
|
strokeLinecap="round"
|
|
strokeLinejoin="round"
|
|
/>
|
|
<path
|
|
d="M12 8c2-3 6-4 9-3-1 3-1 6-4 8-2 1.4-4 1.2-5 .5"
|
|
strokeLinecap="round"
|
|
strokeLinejoin="round"
|
|
/>
|
|
</svg>
|
|
);
|
|
}
|