Settings

An account settings page with accordion sections, toggles, and form inputs.

Preview

Account
Notifications
Appearance
Danger Zone

Permanently delete your account and all associated data.

html
<div class="max-w-lg vstack gap-4">
  <details class="accordion" open>
    <summary>Account</summary>
    <div class="vstack gap-3">
      <label>Display Name <input type="text" value="Sashi Kumar" /></label>
      <label>Email <input type="email" value="sashi@example.com" /></label>
      <label>Bio <textarea rows="2">Full-stack developer.</textarea></label>
      <div class="flex justify-end">
        <button class="btn">Save Changes</button>
      </div>
    </div>
  </details>

  <details class="accordion">
    <summary>Notifications</summary>
    <div class="vstack gap-3">
      <label class="hstack justify-between">
        <span>Email notifications</span>
        <label class="switch"><input type="checkbox" checked /><span></span></label>
      </label>
      <label class="hstack justify-between">
        <span>Push notifications</span>
        <label class="switch"><input type="checkbox" checked /><span></span></label>
      </label>
    </div>
  </details>

  <details class="accordion">
    <summary>Appearance</summary>
    <div class="vstack gap-3">
      <label>Theme <select><option>System</option><option>Light</option><option>Dark</option></select></label>
    </div>
  </details>

  <details class="accordion">
    <summary>Danger Zone</summary>
    <div class="vstack gap-3">
      <p class="text-light mb-0">Permanently delete your account.</p>
      <div><button class="btn danger">Delete Account</button></div>
    </div>
  </details>
</div>

SFC Source

typescript
import { Component } from '@angular/core';

@Component({
  selector: 'app-settings',
  template: `
    <div class="max-w-lg vstack gap-4">
      <details class="accordion" open>
        <summary>Account</summary>
        <div class="vstack gap-3">
          <label>Display Name <input type="text" value="Sashi Kumar" /></label>
          <label>Email <input type="email" value="sashi@example.com" /></label>
          <label>Bio <textarea rows="2">Full-stack developer.</textarea></label>
          <div class="flex justify-end">
            <button class="btn">Save Changes</button>
          </div>
        </div>
      </details>

      <details class="accordion">
        <summary>Notifications</summary>
        <div class="vstack gap-3">
          <label class="hstack justify-between">
            <span>Email notifications</span>
            <label class="switch"><input type="checkbox" checked /><span></span></label>
          </label>
          <label class="hstack justify-between">
            <span>Push notifications</span>
            <label class="switch"><input type="checkbox" checked /><span></span></label>
          </label>
          <label class="hstack justify-between">
            <span>Marketing emails</span>
            <label class="switch"><input type="checkbox" /><span></span></label>
          </label>
        </div>
      </details>

      <details class="accordion">
        <summary>Appearance</summary>
        <div class="vstack gap-3">
          <label>Theme
            <select><option>System</option><option>Light</option><option>Dark</option></select>
          </label>
          <label class="hstack justify-between">
            <span>Compact mode</span>
            <label class="switch"><input type="checkbox" /><span></span></label>
          </label>
        </div>
      </details>

      <details class="accordion">
        <summary>Danger Zone</summary>
        <div class="vstack gap-3">
          <p class="text-light mb-0">Permanently delete your account.</p>
          <div><button class="btn danger">Delete Account</button></div>
        </div>
      </details>
    </div>
  `,
})
export class SettingsComponent {}