Product Card
TarjetasCore (sin librería)v1.0.0cardproductecommercecartcore
Tarjeta de producto IA-First: imagen, nombre, precio y acciones addToCart / viewDetails; expone nombre y precio como contexto para agentes.
npx webmcpcss components import core-product-card/* Componente: Product Card */
/* Categoría: cards · Librería: core · Versión: 1.0.0 */
/* Tarjeta de producto IA-First: imagen, nombre, precio y acciones addToCart / viewDetails; expone nombre y precio como contexto para agentes. */
/* Importar: npx webmcpcss components import core-product-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="product-card"] [data-tool="addToCart"] {
webmcp-tool: "addToCart";
webmcp-description: "Añade el producto de la tarjeta al carrito";
webmcp-param-productId: attr(data-product-id);
webmcp-intent: "action";
webmcp-confirmation: "none";
webmcp-permissions: "restricted";
webmcp-doc-productId: "Identificador del producto (data-product-id de la tarjeta)";
}
[data-component="product-card"] [data-tool="viewDetails"] {
webmcp-tool: "viewDetails";
webmcp-description: "Abre la página de detalle del producto";
webmcp-param-productId: attr(data-product-id);
webmcp-intent: "navigate";
webmcp-confirmation: "none";
webmcp-permissions: "read-only";
}
[data-component="product-card"] [data-context="product-name"] { webmcp-context: "productName"; webmcp-format: "text"; }
[data-component="product-card"] [data-context="product-price"] { webmcp-context: "productPrice"; webmcp-format: "currency"; }
<article class="wm-card wm-card--product" data-component="product-card" data-product-id="SKU-42">
<div class="wm-card__media" role="img" aria-label="Zapatillas Runner Pro"></div>
<div class="wm-card__body">
<h3 class="wm-card__title" data-context="product-name">Zapatillas Runner Pro</h3>
<p class="wm-card__meta">Talla 42 · Rojo · Envío 24 h</p>
<p class="wm-card__price" data-context="product-price">89,90 €</p>
</div>
<div class="wm-card__actions">
<button class="wm-btn wm-btn--primary" data-tool="addToCart" type="button">Añadir al carrito</button>
<a class="wm-btn wm-btn--outline" data-tool="viewDetails" href="#producto/SKU-42">Ver detalles</a>
</div>
</article>
{
"id": "core-product-card",
"name": "Product Card",
"category": "cards",
"library": "core",
"version": "1.0.0",
"description": "Tarjeta de producto IA-First: imagen, nombre, precio y acciones addToCart / viewDetails; expone nombre y precio como contexto para agentes.",
"author": "WebMCPcss Team",
"tags": [
"card",
"product",
"ecommerce",
"cart",
"core"
],
"controls": [
{
"variable": "--wm-primary",
"label": "Color primario",
"type": "color",
"default": "#2563eb"
},
{
"variable": "--wm-on-primary",
"label": "Texto sobre primario",
"type": "color",
"default": "#ffffff"
},
{
"variable": "--wm-radius",
"label": "Radio",
"type": "range",
"default": "10px",
"min": 0,
"max": 24,
"step": 1,
"unit": "px"
},
{
"variable": "--wm-surface",
"label": "Fondo de la superficie",
"type": "color",
"default": "#ffffff"
}
],
"promptExamples": [
"cambia el precio de la tarjeta a 39,90 €",
"pon el botón Añadir al carrito en verde"
],
"animateExamples": [
"haz que la tarjeta de producto aparezca con slide-up",
"añade una elevación al pasar el ratón por la tarjeta"
],
"related": [
"tailwind-product-card",
"bootstrap-product-card",
"mui-product-card",
"shadcn-product-card"
],
"preview": "preview.css",
"css": "product-card.webmcp.css",
"html": "product-card.html"
}Cómo usarlo
- Importa el componente a tu proyecto (HTML +
.webmcp.css+component.json):npx webmcpcss components import core-product-card --output ./src/components - O añade solo el contrato a tu
webmcp.cssexistente (bloque delimitado y actualizable):npx webmcpcss components import core-product-card --merge ./webmcp.css - 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
| Herramienta | Descripción | Parámetros | Intención | Confirmación | Selector |
|---|---|---|---|---|---|
addToCart | Añade el producto de la tarjeta al carrito | productId | action | none | [data-component="product-card"] [data-tool="addToCart"] |
viewDetails | Abre la página de detalle del producto | productId | navigate | none | [data-component="product-card"] [data-tool="viewDetails"] |
Contexto que publica
| Dato | Formato | Selector |
|---|---|---|
productName | text | [data-component="product-card"] [data-context="product-name"] |
productPrice | currency | [data-component="product-card"] [data-context="product-price"] |
Ejemplos con la CLI
webmcpcss prompt — lenguaje natural sobre el componente
cambia el precio de la tarjeta a 39,90 €pon el botón Añadir al carrito en verde
webmcpcss animate — animaciones declarativas
haz que la tarjeta de producto aparezca con slide-upañade una elevación al pasar el ratón por la tarjeta