Hub›Catálogo›Tarjetas›Profile Card

Profile Card

TarjetasCore (sin librería)v1.0.0cardprofileusersocialcore

Tarjeta de perfil IA-First: avatar, nombre, rol y biografía con acciones viewProfile / followUser (esta última con confirmación).

npx webmcpcss components import core-profile-card
Previsualización
/* Componente: Profile Card */
/* Categoría: cards · Librería: core · Versión: 1.0.0 */
/* Tarjeta de perfil IA-First: avatar, nombre, rol y biografía con acciones viewProfile / followUser (esta última con confirmación). */
/* Importar: npx webmcpcss components import core-profile-card */

.wm-card { --wm-radius: var(--wm-radius, 14px); display: grid; gap: 14px; max-width: 340px; padding: 16px; background: var(--wm-surface, #fff); border: 1px solid #e5e7eb; border-radius: var(--wm-radius, 14px); box-shadow: 0 10px 30px -18px rgba(17, 24, 39, .35); font-family: system-ui, sans-serif; transition: transform .2s, box-shadow .2s; }
.wm-card:hover { transform: translateY(-2px); box-shadow: 0 18px 40px -20px rgba(17, 24, 39, .45); }
.wm-card__media { aspect-ratio: 16 / 10; border-radius: calc(var(--wm-radius, 14px) - 4px); background: linear-gradient(135deg, color-mix(in srgb, var(--wm-primary, #2563eb) 35%, white), var(--wm-primary, #2563eb)); }
.wm-card__avatar { width: 64px; height: 64px; border-radius: 50%; display: grid; place-items: center; background: var(--wm-primary, #2563eb); color: var(--wm-on-primary, #fff); font-weight: 700; }
.wm-card__title { margin: 0 0 4px; font-size: 18px; }
.wm-card__meta, .wm-card__bio { margin: 0; color: #6b7280; font-size: 14px; }
.wm-card__price { margin: 8px 0 0; font-size: 20px; font-weight: 700; color: #111827; }
.wm-card__actions { display: flex; gap: 8px; flex-wrap: wrap; }
.wm-btn { display: inline-flex; align-items: center; justify-content: center; min-height: 40px; padding: 8px 16px; border: 1.5px solid transparent; border-radius: calc(var(--wm-radius, 14px) - 4px); font: 600 14px/1 system-ui, sans-serif; cursor: pointer; text-decoration: none; }
.wm-btn--primary { background: var(--wm-primary, #2563eb); color: var(--wm-on-primary, #fff); }
.wm-btn--outline { background: transparent; color: var(--wm-primary, #2563eb); border-color: var(--wm-primary, #2563eb); }

/* Contrato WebMCP */
[data-component="profile-card"] [data-tool="viewProfile"] {
  webmcp-tool: "viewProfile";
  webmcp-description: "Abre el perfil completo de la persona";
  webmcp-param-userId: attr(data-user-id);
  webmcp-intent: "navigate";
  webmcp-confirmation: "none";
  webmcp-permissions: "read-only";
}
[data-component="profile-card"] [data-tool="followUser"] {
  webmcp-tool: "followUser";
  webmcp-description: "Sigue a la persona (acción social, requiere confirmación)";
  webmcp-param-userId: attr(data-user-id);
  webmcp-intent: "action";
  webmcp-confirmation: "needed";
  webmcp-permissions: "restricted";
}
[data-component="profile-card"] [data-context="profile-name"] { webmcp-context: "profileName"; webmcp-format: "text"; }
[data-component="profile-card"] [data-context="profile-role"] { webmcp-context: "profileRole"; webmcp-format: "text"; }

Cómo usarlo

  1. Importa el componente a tu proyecto (HTML + .webmcp.css + component.json):
    npx webmcpcss components import core-profile-card --output ./src/components
  2. O añade solo el contrato a tu webmcp.css existente (bloque delimitado y actualizable):
    npx webmcpcss components import core-profile-card --merge ./webmcp.css
  3. Publícalo para los agentes: MCP (webmcpcss mcp --serve --css ./webmcp.css), document.modelContext (webmcpcss standard compile ./webmcp.css --html index.html) o exporta a tu agente favorito (webmcpcss export --agent claude-code).

Herramientas para agentes

HerramientaDescripciónParámetrosIntenciónConfirmaciónSelector
viewProfileAbre el perfil completo de la personauserIdnavigatenone[data-component="profile-card"] [data-tool="viewProfile"]
followUserSigue a la persona (acción social, requiere confirmación)userIdactionneeded[data-component="profile-card"] [data-tool="followUser"]

Contexto que publica

DatoFormatoSelector
profileNametext[data-component="profile-card"] [data-context="profile-name"]
profileRoletext[data-component="profile-card"] [data-context="profile-role"]

Ejemplos con la CLI

webmcpcss prompt — lenguaje natural sobre el componente

  • cambia el nombre de la tarjeta de perfil a Ana Ruiz
  • oculta el botón Seguir

webmcpcss animate — animaciones declarativas

  • aplica fade-in a la tarjeta de perfil
  • haz que el avatar pulse suavemente

Mismo componente en otras librerías