{
  "name": "drawer-2fa-key",
  "kind": "block",
  "primary": "drawer-ui",
  "page": "/apps/saas/app/profile-security/profile-security.contents.html",
  "slots": [],
  "nested": [],
  "attrs": {
    "side": "right",
    "size": "md"
  },
  "html": "<drawer-ui id=\"drawer-2fa-key\" side=\"right\" size=\"md\">\n  <header>\n    <span slot=\"icon\">\n      <avatar-ui icon=\"key\"></avatar-ui>\n    </span>\n    <span slot=\"heading\">\n      <text-ui strong>Add a security key</text-ui>\n    </span>\n    <span slot=\"action\"></span>\n  </header>\n  <section>\n    <text-ui color=\"subtle\" size=\"sm\">Hardware factors (YubiKey, Titan, built-in TPM) resist phishing and SIM-swap.</text-ui>\n  </section>\n  <section>\n    <col-ui gap=\"4\">\n      <alert-ui\n        variant=\"info\"\n        icon=\"info\"\n        text=\"Your browser will prompt for the key when you click Register. Follow the device's instructions — usually a tap or press.\"\n      ></alert-ui>\n      <divider-ui></divider-ui>\n      <col-ui gap=\"3\">\n        <text-ui strong>Key details</text-ui>\n        <field-ui label=\"Key name\" hint=\"Pick something you'll recognize later.\">\n          <input-ui placeholder=\"e.g. YubiKey 5C adia (desk)\"></input-ui>\n        </field-ui>\n        <field-ui label=\"Key type\">\n          <select-ui value=\"fido2\">\n            <option value=\"fido2\">FIDO2 / WebAuthn</option>\n            <option value=\"u2f\">U2F (legacy)</option>\n            <option value=\"platform\">Platform authenticator (Touch ID, Windows Hello)</option>\n          </select-ui>\n        </field-ui>\n        <field-ui label=\"Require for every sign-in\" inline>\n          <switch-ui></switch-ui>\n        </field-ui>\n        <field-ui label=\"Allow for step-up (sensitive actions only)\" inline>\n          <switch-ui checked></switch-ui>\n        </field-ui>\n      </col-ui>\n      <divider-ui></divider-ui>\n      <col-ui gap=\"2\">\n        <text-ui strong>Registered keys</text-ui>\n        <text-ui color=\"subtle\" size=\"sm\">None yet. Registration runs entirely on your device — we only see the public key.</text-ui>\n      </col-ui>\n    </col-ui>\n  </section>\n  <footer slot=\"footer\">\n    <grid-ui>\n      <button-ui text=\"Cancel\" variant=\"ghost\" onclick=\"this.closest('drawer-ui').open = false\"></button-ui>\n      <button-ui text=\"Register key\" icon=\"key\" variant=\"primary\" onclick=\"this.closest('drawer-ui').open = false\"></button-ui>\n    </grid-ui>\n  </footer>\n</drawer-ui>",
  "source": "apps/saas/app/profile-security/profile-security.contents.html",
  "metadata": {
    "domain": "settings",
    "description": "Hardware security key 2FA setup drawer — register FIDO2/WebAuthn key for two-factor auth.",
    "keywords": [
      "drawer",
      "2fa",
      "security",
      "key",
      "webauthn",
      "fido",
      "hardware",
      "setup",
      "settings"
    ]
  },
  "captured_at": "2026-06-07T19:28:13.657Z",
  "template": [
    {
      "id": "avatar",
      "component": "Avatar",
      "icon": "key"
    },
    {
      "id": "text",
      "component": "Text",
      "variant": "body",
      "slot": "icon",
      "children": [
        "avatar"
      ]
    },
    {
      "id": "text-3",
      "component": "Text",
      "strong": true,
      "textContent": "Add a security key"
    },
    {
      "id": "text-2",
      "component": "Text",
      "variant": "body",
      "slot": "heading",
      "children": [
        "text-3"
      ]
    },
    {
      "id": "text-4",
      "component": "Text",
      "variant": "body",
      "slot": "action"
    },
    {
      "id": "header",
      "component": "Header",
      "children": [
        "text",
        "text-2",
        "text-4"
      ]
    },
    {
      "id": "text-5",
      "component": "Text",
      "color": "subtle",
      "size": "sm",
      "textContent": "Hardware factors (YubiKey, Titan, built-in TPM) resist phishing and SIM-swap."
    },
    {
      "id": "section",
      "component": "Section",
      "children": [
        "text-5"
      ]
    },
    {
      "id": "alert",
      "component": "Alert",
      "icon": "info",
      "text": "Your browser will prompt for the key when you click Register. Follow the device's instructions — usually a tap or press.",
      "variant": "info"
    },
    {
      "id": "divider",
      "component": "Divider"
    },
    {
      "id": "text-6",
      "component": "Text",
      "strong": true,
      "textContent": "Key details"
    },
    {
      "id": "input",
      "component": "Input",
      "placeholder": "e.g. YubiKey 5C adia (desk)"
    },
    {
      "id": "field",
      "component": "Field",
      "hint": "Pick something you'll recognize later.",
      "label": "Key name",
      "children": [
        "input"
      ]
    },
    {
      "id": "choice-picker",
      "component": "ChoicePicker",
      "value": "fido2",
      "options": [
        {
          "value": "fido2",
          "label": "FIDO2 / WebAuthn"
        },
        {
          "value": "u2f",
          "label": "U2F (legacy)"
        },
        {
          "value": "platform",
          "label": "Platform authenticator (Touch ID, Windows Hello)"
        }
      ]
    },
    {
      "id": "field-2",
      "component": "Field",
      "label": "Key type",
      "children": [
        "choice-picker"
      ]
    },
    {
      "id": "toggle",
      "component": "Toggle"
    },
    {
      "id": "field-3",
      "component": "Field",
      "inline": true,
      "label": "Require for every sign-in",
      "children": [
        "toggle"
      ]
    },
    {
      "id": "toggle-2",
      "component": "Toggle",
      "checked": true
    },
    {
      "id": "field-4",
      "component": "Field",
      "inline": true,
      "label": "Allow for step-up (sensitive actions only)",
      "children": [
        "toggle-2"
      ]
    },
    {
      "id": "column-2",
      "component": "Column",
      "gap": "3",
      "children": [
        "text-6",
        "field",
        "field-2",
        "field-3",
        "field-4"
      ]
    },
    {
      "id": "divider-2",
      "component": "Divider"
    },
    {
      "id": "text-7",
      "component": "Text",
      "strong": true,
      "textContent": "Registered keys"
    },
    {
      "id": "text-8",
      "component": "Text",
      "color": "subtle",
      "size": "sm",
      "textContent": "None yet. Registration runs entirely on your device — we only see the public key."
    },
    {
      "id": "column-3",
      "component": "Column",
      "gap": "2",
      "children": [
        "text-7",
        "text-8"
      ]
    },
    {
      "id": "column",
      "component": "Column",
      "gap": "4",
      "children": [
        "alert",
        "divider",
        "column-2",
        "divider-2",
        "column-3"
      ]
    },
    {
      "id": "section-2",
      "component": "Section",
      "children": [
        "column"
      ]
    },
    {
      "id": "button",
      "component": "Button",
      "text": "Cancel",
      "variant": "ghost"
    },
    {
      "id": "button-2",
      "component": "Button",
      "icon": "key",
      "text": "Register key",
      "variant": "primary"
    },
    {
      "id": "grid",
      "component": "Grid",
      "children": [
        "button",
        "button-2"
      ]
    },
    {
      "id": "footer",
      "component": "Footer",
      "slot": "footer",
      "children": [
        "grid"
      ]
    },
    {
      "id": "root",
      "component": "Drawer",
      "side": "right",
      "size": "md",
      "children": [
        "header",
        "section",
        "section-2",
        "footer"
      ]
    }
  ]
}
