singlestage 0.4.1

A UI component library for Leptos based on Basecoat UI and shadcn/ui
Documentation
@layer components {
  a:has(> .singlestage-item) {
    > .singlestage-item {
      @apply hover:bg-accent/50
      transition-colors;
    }
  }

  .singlestage-item {
    @apply border
    border-transparent
    duration-100
    flex
    flex-wrap
    focus-visible:border-ring
    focus-visible:ring-[3px]
    focus-visible:ring-ring/50
    items-center
    outline-none
    rounded-md
    text-sm
    transition-colors;
  }

  .singlestage-item:has(.singlestage-item-description) {
    .singlestage-item-media {
      @apply self-start
    translate-y-0.5;
    }
  }

  .singlestage-item-default {
    @apply bg-transparent;
  }

  .singlestage-item-outline {
    @apply border-border;
  }

  .singlestage-item-muted {
    @apply bg-muted/50;
  }

  .singlestage-item-size-default {
    @apply gap-4
    p-4;
  }

  .singlestage-item-size-small {
    @apply gap-2.5
    px-4
    py-3;
  }

  .singlestage-item-group {
    @apply flex
    flex-col;
  }

  .singlestage-item-media {
    @apply [&_svg]:pointer-events-none
    flex
    gap-2
    items-center
    justify-center
    shrink-0;
  }

  .singlestage-item-media-default {
    @apply bg-transparent;
  }

  .singlestage-item-media-icon {
    @apply [&_svg:not([class*='size-'])]:size-4
    bg-muted
    border
    rounded-sm
    size-8;
  }

  .singlestage-item-media-image {
    @apply [&_img]:object-cover
    [&_img]:size-full
    overflow-hidden
    rounded-sm
    size-10;
  }

  .singlestage-item-content {
    @apply flex
    flex-1
    flex-col
    gap-1;

    & + .singlestage-item-content {
      @apply flex-none;
    }
  }

  .singlestage-item-title {
    @apply flex
    font-medium
    gap-2
    items-center
    leading-snug
    text-sm
    w-fit;
  }

  .singlestage-item-description {
    @apply font-normal
    leading-normal
    line-clamp-2
    text-balance
    text-muted-foreground
    text-sm
    w-fit;

    & > a {
      @apply hover:text-primary
      underline
      underline-offset-4;
    }
  }

  .singlestage-item-actions {
    @apply flex
    gap-2
    items-center
    ml-auto;
  }

  .singlestage-item-header {
    @apply basis-full
    flex
    gap-2
    items-center
    justify-between;
  }

  .singlestage-item-footer {
    @apply basis-full
    flex
    gap-2
    items-center
    justify-between;
  }

  .singlestage-item-separator {
    @apply bg-border
    my-0
    shrink-0;
    &[data-orientation="horizontal"] {
      @apply h-px
      w-full;
    }
    &[data-orientation="vertical"] {
      @apply h-full
      w-px;
    }
  }
}