hikari-components 0.2.1

Core UI components (40+) for the Hikari design system
// Use theme variables with namespace to avoid conflicts
@use 'variables' as vars;
@use 'mixins' as mix;
@use './icon-button-vars.scss' as icon-button-vars;

// ============================================
// Hikari IconButton Component -  Styling
// Three-layer CSS variable system:
// - Layer1: Foundation variables (foundation.scss)
// - Layer2: Component variables (icon-button-vars.scss)
// - Custom: Runtime overrides via AnimationBuilder
//
// NOTE: Hover effects are handled by Glow wrapper, not here
// ============================================

.hi-icon-button {
  // Layer2 variables are defined in icon-button-vars.scss

  // Layout
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  padding: 0;
  line-height: 0;
  gap: 0;

  // Size - use CSS variables
  width: var(--hi-icon-button-size);
  height: var(--hi-icon-button-size);
  min-width: var(--hi-icon-button-size);
  max-width: var(--hi-icon-button-size);
  min-height: var(--hi-icon-button-size);
  max-height: var(--hi-icon-button-size);

  // Allow glow effect to show
  overflow: visible;

  // Remove default button styling
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  
  // Background - use CSS variables
  background: var(--hi-icon-button-bg);
  border: none;
  border-radius: var(--hi-icon-button-radius);

  // Typography
  font-family: vars.$hikari-font-family-sans;
  font-size: vars.$hikari-font-size-sm;
  font-weight: 400;
  color: var(--hi-icon-button-icon-color);

  // Transitions - use CSS variables
  transition: var(--hi-icon-button-transition);

  // No transform - controlled by AnimationBuilder via Glow wrapper

  // Cursor
  cursor: pointer;

  // Focus state - only outline, no color changes
  &:focus-visible {
    outline: 2px solid var(--hi-icon-button-border-color-focus);
    outline-offset: 2px;
    color: var(--hi-icon-button-icon-color);
    
    .hi-icon-button-icon {
      color: var(--hi-icon-button-icon-color);
    }
  }

  // Disabled state
  &:disabled {
    background: var(--hi-icon-button-bg-disabled);
    color: var(--hi-icon-button-icon-color-disabled);
    cursor: not-allowed;
    pointer-events: none;
  }

  // No active state - controlled by AnimationBuilder via Glow wrapper

  // ============================================
  // Size Variants - Variables defined in icon-button-vars.scss
  // ============================================

  &.hi-icon-button-16,
  &.hi-icon-button-24,
  &.hi-icon-button-32,
  &.hi-icon-button-36,
  &.hi-icon-button-40 {
    // Size variables are already set by the classes in icon-button-vars.scss
  }

  // ============================================
  // Variant: Ghost (default - transparent)
  // ============================================

  &.hi-icon-button-ghost,
  &.hi-icon-button-borderless {
    // Variables defined in icon-button-vars.scss
  }

  // ============================================
  // Variant: Primary (solid primary color)
  // ============================================

  &.hi-icon-button-primary {
    // Variables defined in icon-button-vars.scss
  }

  // ============================================
  // Variant: Secondary (solid secondary color)
  // ============================================

  &.hi-icon-button-secondary {
    // Variables defined in icon-button-vars.scss
  }

  // ============================================
  // Variant: Danger (solid danger color)
  // ============================================

  &.hi-icon-button-danger {
    // Variables defined in icon-button-vars.scss
  }

  // ============================================
  // Variant: Success (solid success color)
  // ============================================

  &.hi-icon-button-success {
    // Variables defined in icon-button-vars.scss
  }

  // ============================================
  // Icon Styles - Use CSS Variables
  // ============================================

  .hi-icon-button-icon {
    width: var(--hi-icon-button-icon-size);
    height: var(--hi-icon-button-icon-size);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    line-height: 0;
    color: var(--hi-icon-button-icon-color);

    svg {
      width: var(--hi-icon-button-icon-size);
      height: var(--hi-icon-button-icon-size);
      display: block;
      fill: currentColor;
    }
  }

  // Active state for icon
  &:active:not(:disabled) .hi-icon-button-icon {
    color: var(--hi-icon-button-icon-color-active);
  }

  // Disabled state for icon
  &:disabled .hi-icon-button-icon {
    color: var(--hi-icon-button-icon-color-disabled);
  }

  .hi-icon-button-disabled {
    opacity: 0.3;
  }
}