pub fn GitHub(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} width="20" height="20" viewBox="0 0 16 16" fill="currentColor">
            <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z" />
        </svg>
    );
}

pub fn Lightning(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
            <polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon>
        </svg>
    );
}

pub fn Shield(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
            <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path>
        </svg>
    );
}

pub fn PaintBrush(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
            <path d="M18.37 2.63 14 7l-1.59-1.59a2 2 0 0 0-2.82 0L8 7 9 8l1.59-1.59a2 2 0 0 1 2.82 0L14 8l-4.37 4.37a2.12 2.12 0 0 0-.5 3 2.12 2.12 0 0 0 3-.5L18.37 5.63a2.12 2.12 0 0 0 .5-3 2.12 2.12 0 0 0-3 .5z"></path>
            <path d="M9 8c-5 3-5 7-5 7a18.45 18.45 0 0 0 5-2"></path>
            <path d="M14.5 17.5 4.5 15"></path>
        </svg>
    );
}

pub fn Rocket(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
            <path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"></path>
            <path d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"></path>
            <path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"></path>
            <path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"></path>
        </svg>
    );
}

pub fn Folder(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
            <path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path>
        </svg>
    );
}

pub fn Wrench(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
            <path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"></path>
        </svg>
    );
}

pub fn Star(allocator: zx.Allocator) zx.Component {
    return (
        <svg
            @allocator={allocator}
            width="16"
            height="16"
            viewBox="0 0 24 24"
            fill="none"
            stroke="currentColor"
            stroke-width="2"
            stroke-linecap="round"
            stroke-linejoin="round"
        >
            <polygon points="12 2 15 9 22 9 17 14 19 22 12 18 5 22 7 14 2 9 9 9"></polygon>
        </svg>
    );
}


pub fn Bug(allocator: zx.Allocator) zx.Component {
    return (
        <svg
            @allocator={allocator}
            width="16"
            height="16"
            viewBox="0 0 24 24"
            fill="none"
            stroke="currentColor"
            stroke-width="2"
            stroke-linecap="round"
            stroke-linejoin="round"
        >
            <rect x="9" y="9" width="6" height="10" rx="2"></rect>
            <path d="M8 9V7a4 4 0 0 1 8 0v2"></path>
            <path d="M12 5v2"></path>
            <path d="M5 13h4"></path>
            <path d="M15 13h4"></path>
            <path d="M5 17h4"></path>
            <path d="M15 17h4"></path>
        </svg>
    );
}

pub fn Document(allocator: zx.Allocator) zx.Component {
    return (
        <svg
            @allocator={allocator}
            width="16"
            height="16"
            viewBox="0 0 24 24"
            fill="none"
            stroke="currentColor"
            stroke-width="2"
            stroke-linecap="round"
            stroke-linejoin="round"
        >
            <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
            <polyline points="14 2 14 8 20 8"></polyline>
            <line x1="8" y1="13" x2="16" y2="13"></line>
            <line x1="8" y1="17" x2="16" y2="17"></line>
        </svg>
    );
}


pub fn Info(allocator: zx.Allocator) zx.Component {
    return (
        <svg
            @allocator={allocator}
            width="16"
            height="16"
            viewBox="0 0 24 24"
            fill="none"
            stroke="currentColor"
            stroke-width="2"
            stroke-linecap="round"
            stroke-linejoin="round"
        >
            <circle cx="12" cy="12" r="10"></circle>
            <line x1="12" y1="16" x2="12" y2="12"></line>
            <line x1="12" y1="8" x2="12.01" y2="8"></line>
        </svg>
    );
}


pub fn Hive(allocator: zx.Allocator) zx.Component {
    return (
        <svg
            @allocator={allocator}
            width="16"
            height="16"
            viewBox="0 0 24 24"
            fill="none"
            stroke="currentColor"
            stroke-width="2"
            stroke-linecap="round"
            stroke-linejoin="round"
        >
            <path d="M4 2.5 L8 2.5 L10 6 L8 9.5 L4 9.5 L2 6 Z"></path>
            <path d="M4 14.5 L8 14.5 L10 18 L8 21.5 L4 21.5 L2 18 Z"></path>
            <path d="M16 8.5 L20 8.5 L22 12 L20 15.5 L16 15.5 L14 12 Z"></path>
        </svg>
    );
}


pub fn Network(allocator: zx.Allocator) zx.Component {
    return (
        <svg
            @allocator={allocator}
            width="16"
            height="16"
            viewBox="0 0 24 24"
            fill="none"
            stroke="currentColor"
            stroke-width="2"
            stroke-linecap="round"
            stroke-linejoin="round"
        >
            <path d="M1.42 9a16 16 0 0 1 21.16 0"></path>
            <path d="M5 12.55a11 11 0 0 1 14.08 0"></path>
            <path d="M8.53 16.11a6 6 0 0 1 6.95 0"></path>
            <line x1="12" y1="20" x2="12.01" y2="20"></line>
        </svg>
    );
}


pub fn Settings(allocator: zx.Allocator) zx.Component {
    return (
        <svg
            @allocator={allocator}
            width="16"
            height="16"
            viewBox="0 0 24 24"
            fill="none"
            stroke="currentColor"
            stroke-width="2"
            stroke-linecap="round"
            stroke-linejoin="round"
        >
            <circle cx="12" cy="12" r="3"></circle>
            <path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path>
        </svg>
    );
}

pub fn Workflow(allocator: zx.Allocator) zx.Component {
    return (
        <svg
            @allocator={allocator}
            width="16"
            height="16"
            viewBox="0 0 24 24"
            fill="none"
            stroke="currentColor"
            stroke-width="2"
            stroke-linecap="round"
            stroke-linejoin="round"
        >
            // Root Box (Top Left)
            <rect x="3" y="3" width="7" height="5" rx="1"></rect>
            // Child Box 1 (Middle Right)
            <rect x="14" y="8" width="7" height="5" rx="1"></rect>
            // Child Box 2 (Bottom Right)
            <rect x="14" y="16" width="7" height="5" rx="1"></rect>
            // Connecting Lines
            <path d="M6.5 8v10.5h7.5"></path>
            <path d="M6.5 10.5h7.5"></path>
        </svg>
    );
}


pub fn Pin(allocator: zx.Allocator) zx.Component {
    return (
        <svg
            @allocator={allocator}
            width="16"
            height="16"
            viewBox="0 0 24 24"
            fill="none"
            stroke="currentColor"
            stroke-width="2"
            stroke-linecap="round"
            stroke-linejoin="round"
        >
            // Rotated 45 degrees to point bottom-left (like your reference)
            <g transform="rotate(45 12 12)">
                // 1. The Top Cap (The "T" bar at the top)
                <line x1="7" y1="5" x2="17" y2="5"></line>
                
                // 2. The Body (Neck + Guard)
                // This path draws the neck going down, flaring out for the guard
                <path d="M10 5 v6 l-2 2 h8 l-2 -2 v-6"></path>
                
                // 3. The Needle
                // Starts exactly where the body ends (y=13) and goes to the tip
                <line x1="12" y1="13" x2="12" y2="22"></line>
            </g>
        </svg>
    );
}

pub fn AllRoutes(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
            <path d="M3 3v18h18"></path>
            <path d="M18 9l-5-5-5 5"></path>
            <path d="M13 4v10a2 2 0 0 0 2 2h3"></path>
        </svg>
    );
}

pub fn Search(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} class="search-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
            <circle cx="11" cy="11" r="8"></circle>
            <line x1="21" y1="21" x2="16.65" y2="16.65"></line>
        </svg>
    );
}

pub fn ChevronRight(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} class="arrow-icon" width="12" height="12" viewBox="0 0 24 24" fill="currentColor">
            <path 
                d="M4 3L22 12L4 21L9 12Z" 
                stroke="currentColor" 
                stroke-width="2" 
                stroke-linejoin="round"
                stroke-linecap="round"
            ></path>
        </svg>
    );
}

pub fn CornerDownRight(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} class="arrow-icon" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
            <polyline points="15 10 20 15 15 20"></polyline>
            <path d="M4 4v7a4 4 0 0 0 4 4h12"></path>
        </svg>
    );
}

pub fn StateEye(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
            <path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
            <circle cx="12" cy="12" r="3"></circle>
        </svg>
    );
}

pub fn StateArrows(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
            <polyline points="16 18 22 12 16 6"></polyline>
            <polyline points="8 6 2 12 8 18"></polyline>
        </svg>
    );
}

pub fn StateList(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
            <line x1="8" y1="6" x2="21" y2="6"></line>
            <line x1="8" y1="12" x2="21" y2="12"></line>
            <line x1="8" y1="18" x2="21" y2="18"></line>
            <line x1="3" y1="6" x2="3.01" y2="6"></line>
            <line x1="3" y1="12" x2="3.01" y2="12"></line>
            <line x1="3" y1="18" x2="3.01" y2="18"></line>
        </svg>
    );
}

pub fn StateExport(allocator: zx.Allocator) zx.Component {
    return (
        <svg @allocator={allocator} width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
            <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path>
            <polyline points="15 3 21 3 21 9"></polyline>
            <line x1="10" y1="14" x2="21" y2="3"></line>
        </svg>
    );
}

const zx = @import("zx");