Ir al contenido

Branding

@lemn-ltd/brand-contract@1.0.0 define un solo contrato canonico:

{
"$schema": "https://schemas.ui.le-mn.com/branding/v1.json",
"schemaVersion": 1,
"name": "Example identity",
"metadata": { "tags": [], "externalReferences": {} },
"assets": {},
"typography": {},
"defaultModeId": "light",
"modes": { "light": {}, "dark": {} },
"runtimeSelection": {
"selectable": true,
"allowedModeIds": ["light", "dark"]
}
}

Typography y los modes abreviados son ilustrativos. Una definicion valida incluye typography gobernada en la raiz y secciones completas de colors, shape, elevation, density, motion, visualization, iconography, accessibility y component appearance por mode. No contiene identidad de lifecycle de la app.

import { compileBrandingDefinition } from "@lemn-ltd/brand-contract";
const result = await compileBrandingDefinition(definition);
if (!result.ok) throw new Error("Branding invalid");

El artefacto inmutable contiene compatibilidad, hashes, proyecciones completas, CSS con scope, fonts/preloads, assets, apariencia y temas para Recharts/ECharts. El orden del JSON de entrada no cambia el output semantico canonico.

import {
getSystemBrandingTemplate,
systemBrandingTemplates,
} from "@lemn-ltd/brand-contract/system-brandings";
const template = getSystemBrandingTemplate("verdant-ledger", 1);
const editableCopy = structuredClone(template.definition);

Seleccionar un template copia la definicion exacta. Un release futuro del catalogo nunca muta drafts ni Workspaces existentes.

Terminal window
pnpm add @lemn-ltd/brand-contract@1.0.0 @lemn-ltd/brand-studio@2.0.0

Studio edita una definicion controlada, recibe catalogo/targets desde el host y emite intents de validate, save, compare, preview, archive/restore, publish y seleccion exacta de template. No hace fetching, persistence, routing, auth, publicacion ni activacion.

Typography usa un catalogo curado. System fonts descargan 0 KB. Managed fonts son WOFF2 self-hosted, inmutables, con integrity y fallback de sistema. preferred usa carga opcional; required usa preload y block period. SSR no convierte la font en pixeles: el browser todavia descarga los bytes, por lo que CSP, CORS, cache y fallback siguen siendo obligatorios.

Extensions namespaced y JSON-only permiten evolucion aditiva sin CSS arbitrario ni flags funcionales. AgentOps posee drafts, publicacion, activacion, preview y audit; este repo posee contrato, compilador, consumo runtime y controles.