# Button

## Type
<sonic-code>
  <template>
    <div class="flex flex-wrap gap-2">
      <sonic-button>Default</sonic-button>
      <sonic-button type="primary">Primary</sonic-button>
      <sonic-button type="neutral">Neutral</sonic-button>
      <sonic-button type="warning">Warning</sonic-button>
      <sonic-button type="info">Info</sonic-button>
      <sonic-button type="success">Success</sonic-button>
      <sonic-button type="danger">Danger</sonic-button>
      <sonic-button type="custom" style="--sc-btn-custom-color: #fde68a; --sc-btn-custom-bg: #5b21b6">Custom</sonic-button>
    </div>
  </template>
</sonic-code>

## Outline
<sonic-code>
  <template>
    <div class="flex flex-wrap gap-2">
      <sonic-button variant="outline">Default</sonic-button>
      <sonic-button variant="outline" type="primary">Primary</sonic-button>
      <sonic-button variant="outline" type="neutral">Neutral</sonic-button>
      <sonic-button variant="outline" type="warning">Warning</sonic-button>
      <sonic-button variant="outline" type="info">Info</sonic-button>
      <sonic-button variant="outline" type="success">Success</sonic-button>
      <sonic-button variant="outline" type="danger">Danger</sonic-button>
      <sonic-button variant="outline" type="custom" style="--sc-btn-custom-bg: #5b21b6">Custom</sonic-button>
    </div>
  </template>
</sonic-code>

## Variant
<sonic-code>
  <template>
    <sonic-button variant="default">Default</sonic-button>
    <sonic-button variant="outline">Outline</sonic-button>
    <sonic-button variant="ghost">Ghost</sonic-button>
    <sonic-button variant="link">Link</sonic-button>
    <sonic-button variant="unstyled">Unstyled</sonic-button>
  </template>
</sonic-code>

## Size
<sonic-code>
  <template>
    <sonic-button size="2xs">2Xs button</sonic-button>
    <sonic-button size="xs">Xs button</sonic-button>
    <sonic-button size="sm">Sm button</sonic-button>
    <sonic-button size="md">Md button</sonic-button>
    <sonic-button>Default button</sonic-button>
    <sonic-button size="lg">Lg button</sonic-button>
    <sonic-button size="xl">Xl button</sonic-button>
    <sonic-button size="2xl">2Xl button</sonic-button>
  </template>
</sonic-code>

## Shape
<sonic-code>
  <template>
    <sonic-button shape="circle"> 😂 </sonic-button>
    <sonic-button shape="square"> 🚀 </sonic-button>
  </template>
</sonic-code>

## Loading
The length of the button depends on the size of its content
<sonic-code>
  <template>
    <sonic-button loading></sonic-button>
    <sonic-button loading>Loading button</sonic-button>
  </template>
</sonic-code>

## Swap
<sonic-code>
  <template>
    <sonic-button formDataProvider="button_swap_example" name="youpi" value="youpla" type="primary" shape="circle" variant="outline" class="mr-4">
      <sonic-icon library="iconoir" swap="on" name="eye-empty"></sonic-icon>
      <sonic-icon library="iconoir" swap="off" name="eye-off"></sonic-icon>
    </sonic-button>
    <sonic-button formDataProvider="button_swap_example" name="youpi" value="youpla" type="primary" variant="outline">
      <sonic-icon library="iconoir" swap="on" slot="prefix" name="eye-empty"></sonic-icon>
      <sonic-icon library="iconoir" swap="off" slot="prefix" name="eye-off"></sonic-icon>
      Révélez
      <span swap="off">...</span>
      <span swap="on">moi !</span>
    </sonic-button>
  </template>
</sonic-code>

## Reset
<sonic-code>
  <template>
    <div formDataProvider="button-reset-demo" class="mb-2">
      <sonic-checkbox name="aChexbox" value="AValueToSet">Set A value</sonic-checkbox><br>
      <sonic-button reset>Reset current formDataProvider</sonic-button>
    </div>
      <sonic-button reset="button-reset-demo">Reset formDataProvider by name</sonic-button>
  </template>
</sonic-code>


## GoBack
<sonic-code>
  <template>
    <sonic-button goBack type="primary" variant="outline"  class="mr-4">
      <sonic-icon library="iconoir" slot="prefix" name="arrow-left"></sonic-icon>
      Retour classique
    </sonic-button>
    <sonic-button goBack="http://la-billetterie.net" type="primary" variant="outline"  class="mr-4">
      <sonic-icon library="iconoir" slot="prefix" name="arrow-left"></sonic-icon>
      Retour url prédéfinie
    </sonic-button>
  </template>
</sonic-code>

## Button with icon
<sonic-code>
  <template>
    <sonic-button goBack type="primary" variant="outline"  class="mr-4">
      <sonic-icon library="iconoir" slot="prefix" name="arrow-right" ></sonic-icon>
      Button with icon
    </sonic-button>
  </template>
</sonic-code>


## Button group
<sonic-code>
  <template>
    <sonic-group label="Code promo" class="mr-4">
      <sonic-input placeholder="Entrez votre code ici..."></sonic-input>
      <sonic-button type="primary" shape="square">
        <sonic-icon library="iconoir" library="iconoir" name="gift"></sonic-icon>
      </sonic-button>
    </sonic-group>
    <sonic-divider size="lg"></sonic-divider>
    <div class="text-lg mb-2">Choose a subscription</div>
    <sonic-group formDataProvider="subscriptionData">
      <sonic-button radio minWidth="10rem" name="subscription" value="standard" type="default"
        >😎 Standard</sonic-button
      >
      <sonic-button radio minWidth="10rem" name="subscription" value="premium" type="default">⭐ Premium</sonic-button>
      <sonic-button radio minWidth="10rem" name="subscription" value="diamond" type="default">💎 Diamond</sonic-button>
    </sonic-group>
  </template>
</sonic-code>


## Aria-label
<sonic-code>
  <template>
      <sonic-button data-aria-label="Custom aria label" type="primary" >
        Button with aria label
      </sonic-button>
       <sonic-button data-aria-label="Custom aria label" href="https://google.fr" type="primary" >
        Button link with aria label
      </sonic-button>
  </template>
</sonic-code>


## Custom styles & active states with tailwind
<sonic-code>
  <template>
    <div formDataProvider="subscriptionData2">
      <sonic-button
        class="bg-neutral-100 transition-all text-center text-lg text-neutral-400 rounded-md min-w-[8rem] [&[active]]:text-danger-content [&[active]]:min-w-[13rem] [&[active]]:bg-danger [&[active]]:font-black [&[active]]:rounded-full"
        variant="unstyled"
        checkable unique 
        name="subscription"
        value="premium"
        type="default">
          <span swap="off" class="inline-block py-2 px-3" >subscribe</span>
          <span swap="on" class="inline-block py-2 px-3" >⭐ Premium</span>
      </sonic-button>
    </div>
  </template>
</sonic-code>
