# Sistema de diseño Atlassian

## Vista previa de la interfaz de sistema de diseño Atlassian

Consulta incidencias, filtra por responsable y cambia un estado local del flujo de trabajo. El estado y la selección son independientes.

## Referencia de diseño de sistema de diseño Atlassian

Usa en el código los nombres exactos de los tokens semánticos. La referencia oficial expone alias de la paleta de colores que varían entre los temas claro y oscuro, por lo que estas filas conservan los alias en lugar de inventar un valor hexadecimal estable. Los valores numéricos de espaciado y radio proceden de las escalas documentadas. Los colores hexadecimales de la vista previa son ilustrativos, no una exportación de tokens.

### Espaciado basado en una unidad de ocho píxeles

| Nombre / Regla | Valor / Configuración | Uso |
| --- | --- | --- |
| space.0 | 0px / 0rem | Token de espaciado; el sufijo indica un porcentaje de la unidad base de 8px. |
| space.025 | 2px / 0.125rem | Token de espaciado; el sufijo indica un porcentaje de la unidad base de 8px. |
| space.050 | 4px / 0.25rem | Token de espaciado; el sufijo indica un porcentaje de la unidad base de 8px. |
| space.075 | 6px / 0.375rem | Token de espaciado; el sufijo indica un porcentaje de la unidad base de 8px. |
| space.100 | 8px / 0.5rem | Token de espaciado; el sufijo indica un porcentaje de la unidad base de 8px. |
| space.150 | 12px / 0.75rem | Token de espaciado; el sufijo indica un porcentaje de la unidad base de 8px. |
| space.200 | 16px / 1rem | Token de espaciado; el sufijo indica un porcentaje de la unidad base de 8px. |
| space.250 | 20px / 1.25rem | Token de espaciado; el sufijo indica un porcentaje de la unidad base de 8px. |
| space.300 | 24px / 1.5rem | Token de espaciado; el sufijo indica un porcentaje de la unidad base de 8px. |
| space.400 | 32px / 2rem | Token de espaciado; el sufijo indica un porcentaje de la unidad base de 8px. |
| space.500 | 40px / 2.5rem | Token de espaciado; el sufijo indica un porcentaje de la unidad base de 8px. |
| space.600 | 48px / 3rem | Token de espaciado; el sufijo indica un porcentaje de la unidad base de 8px. |
| space.800 | 64px / 4rem | Token de espaciado; el sufijo indica un porcentaje de la unidad base de 8px. |
| space.1000 | 80px / 5rem | Token de espaciado; el sufijo indica un porcentaje de la unidad base de 8px. |
### Funciones semánticas de texto y superficie

| Nombre / Regla | Valor / Configuración | Uso |
| --- | --- | --- |
| color.text | Neutral1000 / DarkNeutral1000 | Texto principal; valores mostrados como alias de la paleta para los temas claro y oscuro. |
| color.text.subtle | Neutral800 / DarkNeutral800 | Etiquetas secundarias. |
| color.text.subtlest | Neutral700 / DarkNeutral700 | Metadatos. |
| color.text.selected | Blue700 / Blue400 | Selección, no estado del flujo de trabajo. |
| color.text.danger | Red800 / Red300 | Texto explicativo de importancia crítica. |
| color.text.inverse | Neutral0 / DarkNeutral100 | Texto sobre rellenos intensos compatibles. |
| elevation.surface | Neutral0 / DarkNeutral100 | Superficie principal de la aplicación. |
| elevation.surface.sunken | Neutral100 / DarkNeutral0 | Agrupación de columnas del tablero. |
| elevation.surface.raised | Neutral0 / DarkNeutral200 | Tarjetas de elementos de trabajo movibles. |
| elevation.surface.overlay | Neutral0 / DarkNeutral250 | Superficie de popover o superposición, combinada con una sombra de superposición. |
### La tipografía usa la abreviatura de fuente de CSS

| Nombre / Regla | Valor / Configuración | Uso |
| --- | --- | --- |
| font.heading.large | heading role | Título de página. |
| font.heading.medium | heading role | Título de componente o detalle grande. |
| font.heading.small | heading role | Título de componente pequeño. |
| font.body | body role | Descripciones breves y texto de componentes predeterminados. |
| font.body.large | reading role | Explicaciones más extensas. |
| font.body.small | secondary role | Uso limitado para metadatos. |
| font.code | code role | Identificadores técnicos; no se usan en conversaciones habituales. |
| font.weight.regular / medium / bold | weight roles | Aplica el grosor como una anulación deliberada de la abreviatura de fuente. |
### Forma y profundidad

| Nombre / Regla | Valor / Configuración | Uso |
| --- | --- | --- |
| radius.xsmall | 2px | Detalles pequeños, como una casilla o una insignia. |
| radius.small | 4px | Etiquetas complementarias y controles compactos. |
| radius.medium | 6px | Controles interactivos. |
| elevation.shadow.raised | theme-resolved multi-layer shadow | Combínalo con elevation.surface.raised. |
| elevation.shadow.overlay | theme-resolved multi-layer shadow | Combínalo con una superficie superpuesta; no uses un borde más marcado en todas las tarjetas. |
### Parámetros de los componentes utilizados en el tablero

| Nombre / Regla | Valor / Configuración | Uso |
| --- | --- | --- |
| Button appearance | primary / default / subtle / danger / warning | Elige según el significado de la acción. |
| Button isSelected | boolean | Selección visual; no cambia el estado de la incidencia. |
| Button isLoading | boolean | Impide interacciones repetidas mientras muestra el progreso. |
| Button spacing | default / compact | La opción compact está documentada para configuraciones más densas, como las tablas. |
| Button shouldFitContainer | boolean | Permite que la acción ocupe todo el ancho de su contenedor. |
### Composición de estados y filtros

| Nombre / Regla | Valor / Configuración | Uso |
| --- | --- | --- |
| Lozenge appearance="information" | In progress | Indicador de estado, no un control interactivo para cambiarlo. |
| Lozenge appearance="danger" | Blocked | Usa texto para identificar la condición. |
| Lozenge appearance="success" | Completed | Un estado local confirmado en este ejemplo. |
| Toggle isChecked + onChange | controlled boolean | En el ejemplo se usa para filtrar por responsable, no para cambiar el estado del flujo de trabajo. |
## Sistema de diseño Atlassian Guía completa

Una guía práctica para elegir, aplicar y revisar este sistema en una interfaz real.

Orientación completa, un punto de partida para la implementación y enlaces al código fuente.

## Sistema de diseño Atlassian Paquetes públicos de ADS y los requisitos reales de estilo

### Importar un componente no basta para completar la integración

> Atlassian Design System Los componentes se publican bajo @atlaskit, pero el catálogo general de Atlaskit también incluye paquetes específicos para aplicaciones. Este ejemplo elige tres primitivas documentadas: Button, Lozenge y Toggle, además de tokens y CSS reset. Su modelo de datos es deliberadamente local. Ninguna de esas importaciones proporciona permisos de incidencias de Jira, lógica de sprints ni un backend.

La referencia actual de configuración exige integrar Compiled en las aplicaciones que consumen paquetes de la plataforma, aunque no generen estilos con Compiled. Por eso, la configuración de Parcel incluida forma parte del ejemplo. Copiar una importación de Button sin configurar el empaquetador puede dar lugar a estilos incompletos o con un orden incorrecto; se trata de un problema funcional de integración, no de una nota estética menor.

Consulta la especificación complementaria

## Sistema de diseño Atlassian Usa tokens semánticos en vez de hacer conjeturas sobre la paleta

### Cada token define una función

token("color.text") es el color de primer plano principal, mientras que token("color.text.subtle") se usa para información secundaria. El texto seleccionado tiene una función distinta de la del texto de peligro. El tablero usa elevation.surface en su área principal y elevation.surface.sunken en una sección agrupada. Estas opciones siguen siendo comprensibles cuando cambia el tema, porque sus nombres expresan su propósito.

El catálogo oficial proporciona equivalencias de paleta para temas claros y oscuros para estas funciones. La tabla de referencia conserva esa información en lugar de prometer un único valor hexadecimal permanente. El ejemplo integrado usa una paleta ilustrativa y así lo indica. Sus colores hacen legible el ejemplo local, pero no sustituyen la fuente de verdad para un tema de Atlaskit en producción.

Consulta la especificación complementaria

## Sistema de diseño Atlassian Una base de ocho píxeles con incrementos fraccionarios deliberados

### Interpreta el sufijo como un porcentaje

space.100 equivale a 8px; space.200, a 16px; space.025, a 2px. La escala incluye incrementos fraccionarios porque los espacios pequeños y la alineación óptica requieren más precisión que las unidades enteras de ocho píxeles. El tablero usa space.300 alrededor del contenido principal y space.150 entre elementos locales. Una llamada al token devuelve un valor CSS adaptado al tema, no un número sobre el que realizar JavaScript operaciones aritméticas arbitrarias.

Usa el mismo espacio para la misma relación. La distancia entre la clave de una incidencia y su título debería ser menor que la separación entre la lista de incidencias y el inspector. Existen tokens de espaciado negativo, pero el diseño habitual del tablero no los necesita. Una superficie de trabajo densa debería ganar espacio mediante la composición, no superponiendo elementos que no guardan relación.

Consulta la especificación complementaria

## Sistema de diseño Atlassian Los tokens tipográficos son declaraciones de fuente completas

### No asignes font.body a font-size

El catálogo define explícitamente tokens tipográficos compuestos para la propiedad CSS font. En el ejemplo, se asigna font.heading.large al título de la página y font.heading.medium al título del detalle. Usar uno de estos tokens como fontSize descartaría el contrato previsto. La función de texto del cuerpo es adecuada para resúmenes breves de incidencias, mientras que las descripciones extensas pueden usar font.body.large si el diseño que las rodea facilita la lectura.

Las tipografías actuales de la aplicación son Atlassian Sans y Atlassian Mono. Sans está basada en Inter Variable; Mono, en JetBrains Mono. Esa identidad importa al describir el sistema, pero esta vista previa independiente no redistribuye esas fuentes. Usa una fuente alternativa del sistema y lo indica. Para adoptar el sistema en producción, hay que usar la vía compatible de distribución de fuentes y licencias, en lugar de cambiar el nombre de una tipografía cualquiera.

Consulta la especificación complementaria

## Sistema de diseño Atlassian Usa la forma y la elevación para explicar la superficie de trabajo

### Una tarjeta está elevada porque es un objeto

La referencia distingue entre superficies agrupadas hundidas, tarjetas elevadas y superficies superpuestas. Conceptualmente, un elemento de trabajo movible pertenece a la capa elevada, mientras que una columna del tablero agrupa esos elementos. Un inspector integrado en la página habitual no necesita automáticamente una sombra de superposición. Combina las funciones de superficie y sombra cuando la elevación sea relevante.

Los nombres de forma actuales incluyen radius.xsmall, de 2px; radius.small, de 4px; y radius.medium, de 6px. No son la denominación antigua border.radius que quizá recuerdes de otro sistema. La tabla conserva los nombres exactos. Los controles nativos deberían usar los estilos proporcionados; los contenedores externos personalizados pueden adoptar la función correspondiente sin sobrescribir clases generadas privadas.

Consulta la especificación complementaria

## Sistema de diseño Atlassian Seleccionar un botón no es lo mismo que cambiar el estado de una incidencia

### Elige deliberadamente una apariencia y un estado

La importación de Button verificada es @atlaskit/button/default/button. appearance="primary" destaca una acción principal; isSelected marca la incidencia actual en este ejemplo compacto con controles nativos. Al hacer clic, solo cambia la incidencia inspeccionada. Un control independiente edita el estado del flujo de trabajo. Esta separación evita que seleccionar una fila inicie o complete el trabajo de forma silenciosa.

API También incluye isLoading, isDisabled, spacing="compact" y shouldFitContainer. El estado de carga representa una operación en curso, no un estado permanente de la incidencia. Una acción deshabilitada necesita una explicación comprensible, ya que los controles deshabilitados pueden omitirse durante la navegación con teclado. Por eso, el tablero independiente mantiene disponibles los controles de inspección y permite revisar directamente el estado local actual.

Consulta la especificación complementaria

## Sistema de diseño Atlassian La pastilla y el interruptor comunican tipos distintos de estado

### El estado no es un modo de interacción

Las apariencias de Lozenge incluyen información, peligro y éxito, que el ejemplo asigna a En curso, Bloqueada y Hecha. El significado lo transmiten las palabras; el color es redundante. Una incidencia bloqueada sigue bloqueada cuando se selecciona. El filtro de responsable usa Toggle con isChecked y onChange, porque ese valor booleano modifica las incidencias que muestra el tablero, no el estado de ninguna incidencia.

El selector de estado local es deliberadamente sencillo y no implica un modelo real de permisos. Una transición de incidencia en producción puede requerir un motivo, un rol o una respuesta del servicio. Mantén esa lógica de autorización fuera de Lozenge y muestra el resultado confirmado solo después de que el servicio lo haya establecido.

- La selección identifica la incidencia que se está consultando.

- El estado del flujo de trabajo describe la propia incidencia.

- El filtro de responsable cambia el conjunto visible sin modificar quién es responsable.

Consulta la especificación complementaria

## Sistema de diseño Atlassian Inicializa el tema antes de mostrar superficies con tokens personalizados

### La carga del tema global es asíncrona

setGlobalTheme actualiza los atributos del tema del documento y carga el tema seleccionado CSS. La entrada espera a que termine esa operación antes de mostrar el tablero. Selecciona explícitamente los temas claro y oscuro, con el modo claro activo inicialmente. Un control de preferencias real puede actualizar colorMode mediante el mismo API, en lugar de sustituir los colores por otros aleatorios en línea.

Las opciones actuales de marca personalizada están marcadas como alfa y usan un API UNSAFE. Esta guía no adopta esa vía inestable solo para cambiar los colores del ejemplo. Primero, conserva el contrato estable del tema semántico; después, evalúa la personalización experimental como una decisión de dependencia independiente.

Consulta la especificación complementaria

## Sistema de diseño Atlassian Valida una interacción real de consulta de incidencias

### Usa conjuntamente los archivos proporcionados

El ejemplo nativo necesita la entrada JSX, la importación del restablecimiento CSS y ambos archivos de configuración de Parcel. Incluye la colección de incidencias, la selección, el filtro de responsable, la asignación de estados y un mensaje de resultado dinámico. La vista previa independiente amplía la composición con columnas y un panel de inspección, pero sigue siendo una interpretación HTML claramente identificada. Ninguno de los dos ejemplos afirma conectarse a Jira.

Cuando un filtro excluye la incidencia seleccionada, el ejemplo nativo conserva deliberadamente sus detalles. Así, quien consulta el tablero puede seguir examinando el objeto en lugar de que se le cambie silenciosamente a otra incidencia. Un diseño de producción puede optar por otra política, pero debería explicarla y mantener un foco significativo. Verifica el comportamiento tanto en una ventana estrecha como con todas las columnas visibles.

1. Inspecciona WEB-18 y luego selecciona otra incidencia sin cambiar su estado del flujo de trabajo.

2. Activa el filtro de responsable y comprueba qué incidencias siguen visibles.

3. Cambia el estado local de la incidencia seleccionada y comprueba que el texto de estado y la columna coincidan.

4. Vuelve al tablero sin filtros y confirma que se conservan la identidad de la misma incidencia y el estado actualizado.

Consulta la especificación complementaria

## Sistema de diseño Atlassian Ejemplos de componentes del sistema de diseño

### Muestra interactiva independiente completa

Guarda el documento completo como index.html y ábrelo en un navegador. Interpretación HTML/CSS con valores de espaciado y forma verificados, una paleta de colores ilustrativa y fuentes del sistema como alternativa; no es un entorno de ejecución de Jira ni de Atlaskit nativo.

```
<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Issue board — Atlassian interpretation</title><style>*{box-sizing:border-box}body{margin:0;background:#fff;color:#172b4d;font:14px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}button,select{font:inherit}button{cursor:pointer}header{padding:16px 24px;border-bottom:1px solid #dfe1e6;display:flex;align-items:center;justify-content:space-between;gap:16px}header strong{font-size:18px}.logo{color:#0c66e4;margin-right:12px}button{border:0;border-radius:4px;background:#f1f2f4;color:#172b4d;padding:8px 12px}button:hover{background:#dcdfe4}button:focus-visible,select:focus-visible{outline:3px solid #0c66e4;outline-offset:2px}.primary{background:#0c66e4;color:white}.primary:hover{background:#0055cc}main{padding:24px}.crumb{color:#626f86;font-size:12px}h1{font-size:24px;line-height:32px;margin:8px 0 16px}.tools{display:flex;align-items:center;gap:12px;margin-bottom:24px}.layout{display:grid;grid-template-columns:minmax(0,1fr) 270px;gap:24px}.board{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;align-items:start}.column{background:#f7f8f9;min-height:280px;padding:8px;border-radius:6px}.column h2{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:#626f86;margin:8px 4px 16px}.issue{text-align:left;background:white;box-shadow:0 1px 2px #091e4240;width:100%;margin-bottom:8px;padding:12px;display:block;border:2px solid transparent}.issue[aria-pressed=true]{border-color:#0c66e4}.issue:hover{background:#fff;border-color:#85b8ff}.issue strong{display:block;font-weight:500;min-height:46px}.meta{display:flex;justify-content:space-between;align-items:center;margin-top:20px;font-size:11px;color:#626f86}.avatar{display:inline-grid;place-items:center;width:24px;height:24px;background:#dfe1e6;border-radius:50%;font-weight:600}.tag{font-size:11px;line-height:18px;padding:1px 5px;font-weight:700;border-radius:3px;display:inline-block;background:#dfe1e6}.tag[data-status="In progress"]{background:#e9f2ff;color:#0055cc}.tag[data-status=Blocked]{background:#ffedeb;color:#ae2a19}.tag[data-status=Done]{background:#dcfff1;color:#216e4e}aside{border-left:1px solid #dfe1e6;padding-left:24px}aside h2{font-size:18px;line-height:26px;margin:12px 0 24px}dl{margin:0}dt{font-weight:600;margin:20px 0 8px}dd{margin:0}select{padding:8px;border:1px solid #8590a2;border-radius:4px;background:white;color:#172b4d;max-width:100%}.empty{padding:12px;color:#626f86;font-size:12px}footer{border-top:1px solid #dfe1e6;padding:16px 24px;color:#626f86;font-size:11px}#announcement{min-height:20px;color:#44546f;margin-top:16px}@media(max-width:720px){main{padding:16px}.layout{grid-template-columns:1fr}.board{grid-template-columns:1fr}.column{min-height:100px}aside{border-left:0;border-top:1px solid #dfe1e6;padding:16px 0 0}.issue strong{min-height:0}header{padding:16px}.tools{flex-wrap:wrap}}
</style><header><strong><span class="logo">▲</span>Product delivery</strong><span class="tag">LOCAL DEMO</span></header><main><div class="crumb">Projects / Website / Board</div><h1>Website release</h1><div class="tools"><label><input type="checkbox" id="mine"> Only Maya’s issues</label><button id="reset">Reset board</button></div><div class="layout"><section class="board" aria-label="Issues by status" id="board"></section><aside aria-label="Selected issue"><span id="key" class="crumb"></span><h2 id="title"></h2><span id="badge" class="tag"></span><dl><dt>Assignee</dt><dd id="owner"></dd><dt>Description</dt><dd id="description"></dd><dt><label for="status">Move issue to</label></dt><dd><select id="status"><option>To do</option><option>In progress</option><option>Blocked</option><option>Done</option></select></dd></dl><p id="announcement" role="status"></p></aside></div></main><footer>Independent HTML/CSS interpretation of Atlassian spacing, semantic status and persistent issue selection. System font and sample colors; no Jira connection.</footer><script>
const initial=[{id:'WEB-18',title:'Audit navigation labels',owner:'Maya Chen',status:'To do',description:'Review the wording of top-level links and check that each label describes its destination.'},{id:'WEB-21',title:'Connect locale switcher',owner:'Theo Park',status:'In progress',description:'Keep the current resource selected when a reader switches between supported languages.'},{id:'WEB-24',title:'Resolve missing image credits',owner:'Maya Chen',status:'Blocked',description:'The launch requires confirmation of the source and permitted use of two editorial images.'}];let issues=structuredClone(initial),selected='WEB-21';const board=document.querySelector('#board'),status=document.querySelector('#status');
function render(){board.replaceChildren();for(const state of ['To do','In progress','Blocked / Done']){const col=document.createElement('section');col.className='column';const entries=issues.filter(x=>(state==='Blocked / Done'?['Blocked','Done'].includes(x.status):x.status===state)&&(!document.querySelector('#mine').checked||x.owner==='Maya Chen'));const h=document.createElement('h2');h.textContent=state+' · '+entries.length;col.append(h);for(const issue of entries){const b=document.createElement('button');b.className='issue';b.setAttribute('aria-pressed',String(selected===issue.id));const t=document.createElement('strong');t.textContent=issue.title;const meta=document.createElement('span');meta.className='meta';meta.textContent=issue.id;const av=document.createElement('span');av.className='avatar';av.textContent=issue.owner.split(' ').map(x=>x[0]).join('');av.title=issue.owner;meta.append(av);b.append(t,meta);b.onclick=()=>{selected=issue.id;render();document.querySelector('#announcement').textContent='Selected '+issue.id};col.append(b)}if(!entries.length){const p=document.createElement('p');p.className='empty';p.textContent='No matching issues';col.append(p)}board.append(col)}const item=issues.find(x=>x.id===selected);document.querySelector('#key').textContent=item.id;document.querySelector('#title').textContent=item.title;document.querySelector('#owner').textContent=item.owner;document.querySelector('#description').textContent=item.description;const badge=document.querySelector('#badge');badge.textContent=item.status;badge.dataset.status=item.status;status.value=item.status}
status.onchange=()=>{const i=issues.find(x=>x.id===selected);i.status=status.value;render();document.querySelector('#announcement').textContent=i.id+' moved to '+i.status+' in this local board.'};document.querySelector('#mine').onchange=render;document.querySelector('#reset').onclick=()=>{issues=structuredClone(initial);selected='WEB-21';document.querySelector('#mine').checked=false;render();document.querySelector('#announcement').textContent='Board reset.'};render();
</script></html>
```

Referencia de código

- Las transiciones de incidencias solo afectan al tablero de ejemplo. Esta entrada HTML no utiliza la configuración de compilación Compiled necesaria para la implementación independiente de Atlaskit.

### Entrada de implementación nativa completa

La implementación completa de la configuración, reunida aquí junto con las explicaciones específicas de API. Sigue los requisitos documentados de paquetes y compilación en la sección de configuración.

```
// Existing React 18 project; use the Parcel configuration examples below.
// npm install @atlaskit/css-reset @atlaskit/tokens @atlaskit/button @atlaskit/lozenge @atlaskit/toggle
// npm install --save-dev parcel @compiled/parcel-config
// src/main.jsx; HTML entry contains <div id="root"></div> and a module script pointing here.
import * as React from 'react';
import {createRoot} from 'react-dom/client';
import '@atlaskit/css-reset';
import {token, setGlobalTheme} from '@atlaskit/tokens';
import Button from '@atlaskit/button/default/button';
import Lozenge from '@atlaskit/lozenge/lozenge';
import Toggle from '@atlaskit/toggle';
const initial = [
  {id:'WEB-18',title:'Clarify first-project copy',owner:'Maya',status:'To do'},
  {id:'WEB-21',title:'Review keyboard path',owner:'Alex',status:'In progress'},
  {id:'WEB-24',title:'Resolve missing illustrations',owner:'Maya',status:'Blocked'}
];
const appearance = {'To do':'default','In progress':'information','Blocked':'danger','Done':'success'};
function Board() {
  const [issues,setIssues]=React.useState(initial);
  const [selected,setSelected]=React.useState('WEB-18');
  const [mine,setMine]=React.useState(false);
  const [notice,setNotice]=React.useState('');
  const issue=issues.find(i=>i.id===selected);
  return <main style={{padding:token('space.300'),color:token('color.text'),background:token('elevation.surface')}}>
    <h1 style={{font:token('font.heading.large')}}>Onboarding improvements</h1>
    <label htmlFor="mine">Assigned to Maya</label>
    <Toggle id="mine" isChecked={mine} onChange={e=>setMine(e.currentTarget.checked)}/>
    <div style={{display:'flex',flexWrap:'wrap',gap:token('space.300'),marginTop:token('space.200')}}>
      <ul style={{flex:'1 1 280px',listStyle:'none',padding:0}}>
        {issues.filter(i=>!mine||i.owner==='Maya').map(i=><li key={i.id} style={{marginBottom:token('space.150')}}>
          <Button isSelected={i.id===selected} onClick={()=>setSelected(i.id)}>{i.id}: {i.title}</Button>
          {' '}<Lozenge appearance={appearance[i.status]}>{i.status}</Lozenge>
        </li>)}
      </ul>
      <section aria-label="Issue details" style={{flex:'1 1 280px',padding:token('space.200'),background:token('elevation.surface.sunken')}}>
        <h2 style={{font:token('font.heading.medium')}}>{issue.id}: {issue.title}</h2>
        <p>Owner: {issue.owner}</p>
        <label htmlFor="status">Workflow state</label>{' '}
        <select id="status" value={issue.status} onChange={event=>{
          const status=event.target.value;
          setIssues(items=>items.map(i=>i.id===issue.id?{...i,status}:i));
          setNotice(`${issue.id} moved to ${status} in this local example.`);
        }}>{Object.keys(appearance).map(s=><option key={s}>{s}</option>)}</select>
        <p>This local demonstration has no Jira connection or permission rules.</p>
      </section>
    </div><p role="status">{notice}</p>
  </main>;
}
async function start(){
  await setGlobalTheme({light:'light',dark:'dark',colorMode:'light'});
  createRoot(document.getElementById('root')).render(<Board/>);
}
start();
```

Referencia de código

- Lógica completa del tablero React más los fragmentos de configuración requeridos que aparecen a continuación. Usa Parcel con la integración de Compiled; importar solo el restablecimiento CSS no basta para los paquetes actuales. No se afirma que este prototipo local compile los paquetes nativos.

### Parcel debe procesar los estilos Compiled distribuidos

Crea .parcelrc en la raíz del proyecto. Inicia Parcel con su entrada HTML después de instalar las dependencias indicadas en la configuración.

```
{
  "extends": ["@parcel/config-default", "@compiled/parcel-config"]
}
```

Referencia de código

- Esto selecciona la integración de Parcel documentada, en lugar de presentar en silencio la vía experimental de Vite como configuración recomendada.

### Configuración de Compiled para la transformación de tokens

Crea .compiledcssrc junto a .parcelrc. Esto forma parte de la configuración de la aplicación consumidora, no de un script para publicar paquetes.

```
{
  "transformerBabelPlugins": [["@atlaskit/tokens/babel-plugin"]],
  "extract": true,
  "inlineCss": true,
  "sortShorthand": true
}
```

Referencia de código

- El complemento opcional strip-runtime es para paquetes que distribuyen CSS extraído; esta aplicación consumidora no lo necesita.

### Una pastilla describe el estado; un control lo cambia

La visualización y el control de transición tienen responsabilidades distintas en los detalles de la incidencia.

```
<Lozenge appearance="danger">Blocked</Lozenge>
<Button appearance="primary" onClick={openIssueDetail}>Review blocker</Button>
```

Referencia de código

- openIssueDetail es el controlador de la aplicación; la configuración completa muestra el estado de selección.

- No hagas que la etiqueta de estado parezca un menú, a menos que realmente permita cambiar el estado.

## Sistema de diseño Atlassian Configuración del agente de IA

### Punto de partida para la implementación

Lógica completa del tablero React más los fragmentos de configuración requeridos que aparecen a continuación. Usa Parcel con la integración de Compiled; importar solo el restablecimiento CSS no basta para los paquetes actuales. No se afirma que este prototipo local compile los paquetes nativos.

```
// Existing React 18 project; use the Parcel configuration examples below.
// npm install @atlaskit/css-reset @atlaskit/tokens @atlaskit/button @atlaskit/lozenge @atlaskit/toggle
// npm install --save-dev parcel @compiled/parcel-config
// src/main.jsx; HTML entry contains <div id="root"></div> and a module script pointing here.
import * as React from 'react';
import {createRoot} from 'react-dom/client';
import '@atlaskit/css-reset';
import {token, setGlobalTheme} from '@atlaskit/tokens';
import Button from '@atlaskit/button/default/button';
import Lozenge from '@atlaskit/lozenge/lozenge';
import Toggle from '@atlaskit/toggle';
const initial = [
  {id:'WEB-18',title:'Clarify first-project copy',owner:'Maya',status:'To do'},
  {id:'WEB-21',title:'Review keyboard path',owner:'Alex',status:'In progress'},
  {id:'WEB-24',title:'Resolve missing illustrations',owner:'Maya',status:'Blocked'}
];
const appearance = {'To do':'default','In progress':'information','Blocked':'danger','Done':'success'};
function Board() {
  const [issues,setIssues]=React.useState(initial);
  const [selected,setSelected]=React.useState('WEB-18');
  const [mine,setMine]=React.useState(false);
  const [notice,setNotice]=React.useState('');
  const issue=issues.find(i=>i.id===selected);
  return <main style={{padding:token('space.300'),color:token('color.text'),background:token('elevation.surface')}}>
    <h1 style={{font:token('font.heading.large')}}>Onboarding improvements</h1>
    <label htmlFor="mine">Assigned to Maya</label>
    <Toggle id="mine" isChecked={mine} onChange={e=>setMine(e.currentTarget.checked)}/>
    <div style={{display:'flex',flexWrap:'wrap',gap:token('space.300'),marginTop:token('space.200')}}>
      <ul style={{flex:'1 1 280px',listStyle:'none',padding:0}}>
        {issues.filter(i=>!mine||i.owner==='Maya').map(i=><li key={i.id} style={{marginBottom:token('space.150')}}>
          <Button isSelected={i.id===selected} onClick={()=>setSelected(i.id)}>{i.id}: {i.title}</Button>
          {' '}<Lozenge appearance={appearance[i.status]}>{i.status}</Lozenge>
        </li>)}
      </ul>
      <section aria-label="Issue details" style={{flex:'1 1 280px',padding:token('space.200'),background:token('elevation.surface.sunken')}}>
        <h2 style={{font:token('font.heading.medium')}}>{issue.id}: {issue.title}</h2>
        <p>Owner: {issue.owner}</p>
        <label htmlFor="status">Workflow state</label>{' '}
        <select id="status" value={issue.status} onChange={event=>{
          const status=event.target.value;
          setIssues(items=>items.map(i=>i.id===issue.id?{...i,status}:i));
          setNotice(`${issue.id} moved to ${status} in this local example.`);
        }}>{Object.keys(appearance).map(s=><option key={s}>{s}</option>)}</select>
        <p>This local demonstration has no Jira connection or permission rules.</p>
      </section>
    </div><p role="status">{notice}</p>
  </main>;
}
async function start(){
  await setGlobalTheme({light:'light',dark:'dark',colorMode:'light'});
  createRoot(document.getElementById('root')).render(<Board/>);
}
start();
```

### Una instrucción para tu proyecto

```
Crea el ejemplo proporcionado de 18 incidencias de Atlassian React con @atlaskit tokens, el restablecimiento CSS y la integración documentada de Compiled con Parcel. Usa llamadas a tokens semánticos, roles abreviados de tipografía e importaciones verificadas de Button/Lozenge/Toggle. Mantén independientes la selección, el filtro de responsable y el estado del flujo de trabajo. Conserva el contexto de la incidencia seleccionada, anuncia los cambios locales y no afirmes que hay conexión con Jira ni permisos reales.
```

## Sistema de diseño Atlassian Fuentes y alcance

OpenDesign estudio de los paquetes públicos Atlassian Design System React, contrastado con la documentación enlazada en octubre de 2026. El tablero integrado es una interpretación HTML/CSS con valores de paleta ilustrativos e incidencias ficticias; no es Jira ni un entorno de ejecución de Atlaskit nativo. El acceso a paquetes públicos no implica derechos ilimitados sobre la marca de Atlassian ni el mismo nivel de asistencia disponible internamente.

- tokens Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.

- tema Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.

- configuración Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.

- espaciado Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.

- tipografía Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.

- fuente Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.

- botón Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.

- pastilla Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.

- interruptor Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.

## Sistema de diseño Atlassian Recursos relacionados

### AWS Cloudscape

Una guía de configuración de Cloudscape con tokens reales de actualización visual, espaciado que se adapta a la densidad, API controladas para formularios y un asistente funcional de dos pasos para crear recursos.

### Backbase sistema de diseño

Crea un flujo de revisión bancaria con identidad de marca usando los módulos Angular de Backbase, la exportación de temas semánticos y estados de revisión explícitos. Compara las API web con las dimensiones nativas documentadas por separado.

### Dell sistema de diseño

Crea una búsqueda de dispositivos con ámbito definido mediante DDS v3: colores semánticos, escala tipográfica adaptable, espaciado basado en tokens y una composición InputGroup cuyo filtrado corresponde a la aplicación.


- [Referencia de implementación](https://atlassian.design/components/button/examples)
- [Fuente](https://atlassian.design/foundations/spacing/)
- [Fuente](https://atlassian.design/components/tokens/all-tokens)
- [Fuente](https://atlassian.design/foundations/typography/applying-typography)
- [Fuente](https://atlassian.design/components/button/examples)
- [Fuente](https://atlassian.design/components/lozenge/examples)
- [Consulta la especificación complementaria](https://atlassian.design/get-started/develop/atlassians)
- [Consulta la especificación complementaria](https://atlassian.design/components/tokens/all-tokens)
- [Consulta la especificación complementaria](https://atlassian.design/foundations/spacing/)
- [Consulta la especificación complementaria](https://atlassian.design/foundations/typography/product-typefaces-and-scale)
- [Consulta la especificación complementaria](https://atlassian.design/components/button/examples)
- [Consulta la especificación complementaria](https://atlassian.design/components/lozenge/examples)
- [Consulta la especificación complementaria](https://atlassian.design/components/tokens/code)
- [Consulta la especificación complementaria](https://atlassian.design/components/toggle/examples)
- [Referencia de código](https://atlassian.design/components/button/examples)
- [Referencia de código](https://atlassian.design/get-started/develop/atlassians)
- [Referencia de código](https://atlassian.design/components/lozenge/examples)
- [tokens Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.](https://atlassian.design/components/tokens/all-tokens)
- [tema Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.](https://atlassian.design/components/tokens/code)
- [configuración Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.](https://atlassian.design/get-started/develop/atlassians)
- [espaciado Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.](https://atlassian.design/foundations/spacing/)
- [tipografía Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.](https://atlassian.design/foundations/typography/applying-typography)
- [fuente Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.](https://atlassian.design/foundations/typography/product-typefaces-and-scale)
- [botón Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.](https://atlassian.design/components/button/examples)
- [pastilla Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.](https://atlassian.design/components/lozenge/examples)
- [interruptor Fuente oficial del requisito concreto de API, escala o integración que se trata en esta guía.](https://atlassian.design/components/toggle/examples)
