primitives
Pick Actions con @Pick
Un ejemplo de primitiva enfocado en mostrar el comportamiento principal con un componente pequeno.
Resumen del ejemplo
Este documento prerenderizado muestra Pick Actions con @Pick como contenido HTML navegable. La experiencia interactiva se activa despues con el bundle del playground.
Vista previa del codigo
import pickActionsStyles from "./pick-actions-pick.styles.css";
import { Pick } from "pick-components";
import type { InlineContext } from "pick-components";
type ActionName = "deploy" | "review" | "archive";
type Priority = "baja" | "normal" | "alta";
const ACTION_LABELS: Record<ActionName, string> = {
deploy: "Desplegar",
review: "Revisar",
archive: "Archivar",
};
interface PickActionsState {
selectedAction: ActionName;
priority: Priority;
}
@Pick<PickActionsState>(
"pick-actions-pick-example",
(ctx: InlineContext<PickActionsState>) => {
ctx.state({ selectedAction: "deploy", priority: "normal" });
ctx.computed({
selectedActionLabel() {
return ACTION_LABELS[this.selectedAction];
},
message() {
return `${ACTION_LABELS[this.selectedAction]} con prioridad ${this.priority}`;
},
});
// ctx.on(...) se convierte en el mapa de acciones de vista para <pick-action action="...">.
ctx.on({
selectAction(value) {
this.selectedAction =
value === "review" || value === "archive" ? value : "deploy";
},
setPriority(value) {
this.priority = value === "baja" || value === "alta" ? value : "normal";
},
});
ctx.css(pickActionsStyles);
ctx.html(`
<section class="panel">
<header>
<p class="eyebrow">@Pick + Pick Actions</p>
<h2>Acciones en ctx.on</h2>
<p><code>ctx.on(...)</code> agrupa las acciones disponibles para el template.</p>
</header>
<div class="actions">
<pick-action action="selectAction" value="deploy">
<button type="button">Desplegar</button>
</pick-action>
<pick-action action="selectAction" value="review">
<article class="action-card">
<strong>Revisar</strong>
<span>Article como disparador, mismo mapa de acciones.</span>
</article>
</pick-action>
<pick-action action="selectAction" value="archive">
<span class="pill">Archivar</span>
</pick-action>
</div>
<div class="priorities" aria-label="Prioridad">
<pick-action action="setPriority" value="baja"><button type="button">Baja</button></pick-action>
<pick-action action="setPriority" value="normal"><button type="button">Normal</button></pick-action>
<pick-action action="setPriority" value="alta"><button type="button">Alta</button></pick-action>
</div>
<footer>
<p><span>Acción</span><strong>{{selectedActionLabel}}</strong></p>
<p><span>Prioridad</span><strong>{{priority}}</strong></p>
<p><span>Mensaje</span><strong>{{message}}</strong></p>
</footer>
</section>
`);
},
)
class PickActionsPickExample {}