hikari-components 0.1.5

Core UI components (40+) for the Hikari design system
// Spin Component Styles
// Loading spinner indicator

// Base spin container
.hi-spin {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    position: relative;
}

// Size variants
.hi-spin-sm {
    font-size: 12px;

    .hi-spin-spinner {
        width: 12px;
        height: 12px;
    }
}

.hi-spin-md {
    font-size: 14px;

    .hi-spin-spinner {
        width: 14px;
        height: 14px;
    }
}

.hi-spin-lg {
    font-size: 16px;

    .hi-spin-spinner {
        width: 16px;
        height: 16px;
    }
}

// Spinner element
.hi-spin-spinner {
    display: inline-block;
    border: 2px solid var(--hi-border, rgba(0, 0, 0, 0.1));
    border-top-color: var(--hi-color-primary, #1890ff);
    border-radius: 50%;
    animation: hi-spin-rotate 0.6s linear infinite;
}

@keyframes hi-spin-rotate {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
}

.hi-spin-stopped .hi-spin-spinner {
    animation: none;
    border-top-color: var(--hi-border, rgba(0, 0, 0, 0.1));
}

// Tip text (optional description text below spinner)
.hi-spin-tip {
    display: block;
    margin-top: 8px;
    font-size: 14px;
    color: var(--hi-text-secondary, #666);
    text-align: center;
}

// Dark theme adjustments
[data-theme="dark"] .hi-spin-spinner,
[data-theme="tairitsu"] .hi-spin-spinner {
    border-color: rgba(255, 255, 255, 0.1);
    border-top-color: var(--hi-color-primary, #1890ff);
}

[data-theme="dark"] .hi-spin-stopped .hi-spin-spinner,
[data-theme="tairitsu"] .hi-spin-stopped .hi-spin-spinner {
    border-top-color: rgba(255, 255, 255, 0.1);
}

[data-theme="dark"] .hi-spin-tip,
[data-theme="tairitsu"] .hi-spin-tip {
    color: var(--hi-text-secondary, #b0b0b0);
}

// Accessibility: respect prefers-reduced-motion
@media (prefers-reduced-motion: reduce) {
    .hi-spin-spinner {
        animation-duration: 2s;
    }
}

// Nested spin (for wrapping content)
.hi-spin-nested {
    position: relative;

    .hi-spin-spinner {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 1;
    }

    &.hi-spin-spinning > *:not(.hi-spin-spinner) {
        opacity: 0.5;
        pointer-events: none;
        user-select: none;
    }
}

// Blur effect when spinning (optional)
.hi-spin-blur {
    &.hi-spin-spinning > *:not(.hi-spin-spinner) {
        filter: blur(2px);
    }
}