add template and icons comps

This commit is contained in:
JCEEE
2026-08-26 10:17:58 +01:00
parent 8fea21704a
commit edfb48ad3a
2 changed files with 96 additions and 0 deletions
@@ -0,0 +1,13 @@
<script lang="ts">
import { templateIcon } from '$lib/templateIcons';
let { name = undefined, size = 18, color = undefined }: {
name?: string;
size?: number;
color?: string;
} = $props();
const Cmp = $derived(templateIcon(name));
</script>
<Cmp {size} {color} />
+83
View File
@@ -0,0 +1,83 @@
import {
Bed,
Sparkles,
BookOpen,
Utensils,
Wallet,
Trophy,
Star,
Moon,
Sun,
Apple,
Car,
Gamepad2,
Music,
Shirt,
Leaf,
Heart,
Gift,
Timer
} from '@lucide/svelte';
export const ICON_MAP: Record<string, any> = {
Bed,
Sparkles,
BookOpen,
Utensils,
Wallet,
Trophy,
Star,
Moon,
Sun,
Apple,
Car,
Gamepad2,
Music,
Shirt,
Leaf,
Heart,
Gift,
Timer
};
export const ICON_NAMES = Object.keys(ICON_MAP);
export function templateIcon(name?: string): any {
if (name && ICON_MAP[name]) return ICON_MAP[name];
return Star;
}
// 8 normal colours + 1 dark (chromatic) + 1 transparent (default accent).
// `value: ''` means transparent — no accent background, neutral outline.
export interface TemplateColor {
value: string;
label: string;
chromatic?: 'dark' | 'transparent';
}
export const TEMPLATE_COLORS: TemplateColor[] = [
{ value: '', label: 'Transparent', chromatic: 'transparent' },
{ value: '#ef4444', label: 'Red' },
{ value: '#f97316', label: 'Orange' },
{ value: '#f59e0b', label: 'Amber' },
{ value: '#22c55e', label: 'Green' },
{ value: '#14b8a6', label: 'Teal' },
{ value: '#3b82f6', label: 'Blue' },
{ value: '#6366f1', label: 'Indigo' },
{ value: '#a855f7', label: 'Purple' },
{ value: '#1f2937', label: 'Dark', chromatic: 'dark' }
];
export function accentBg(color?: string): string {
if (!color) return 'transparent';
const hex = color.replace('#', '');
const r = parseInt(hex.slice(0, 2), 16);
const g = parseInt(hex.slice(2, 4), 16);
const b = parseInt(hex.slice(4, 6), 16);
return `rgba(${r}, ${g}, ${b}, 0.3)`;
}
export function outlineColor(color?: string): string {
return color || '#e5e7eb';
}