@aurea-uds/core 0.29.0 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/aurea.css +123 -2
  2. package/package.json +1 -1
package/dist/aurea.css CHANGED
@@ -3214,7 +3214,21 @@ th[aria-sort] .datagrid-sort-icon { color:var(--primary); }
3214
3214
  --xy-edge-label-color:var(--muted-foreground);
3215
3215
  --xy-edge-label-background-color:var(--card);
3216
3216
  --xy-connectionline-stroke:var(--primary);
3217
- --xy-attribution-background-color:transparent; }
3217
+ --xy-attribution-background-color:transparent;
3218
+ /* O minimapa (ADR-0064) se veste pelas variáveis dele, como o resto do motor. */
3219
+ --xy-minimap-background-color:var(--card);
3220
+ --xy-minimap-mask-background-color:color-mix(in oklab,var(--background) 70%,transparent);
3221
+ --xy-minimap-mask-stroke-color:var(--border-strong);
3222
+ --xy-minimap-node-background-color:var(--muted-foreground);
3223
+ --xy-minimap-node-stroke-color:transparent;
3224
+ /* A espessura de base da linha: a do sistema (1). O alto contraste dobra a base, e os pesos e
3225
+ traços são múltiplos dela — por isso nada aqui é número solto. */
3226
+ --graph-edge-base:var(--border-width);
3227
+ /* (Rodada 2) O rótulo de HTML fica ACIMA das linhas e dos contêineres: o motor eleva a linha de quem
3228
+ está dentro de um contêiner ao andar do nó (1, 2…), e a caixa do contêiner é um nó — sem isto, o
3229
+ "10G" saía por baixo da fibra e o nome da porta, por baixo do site (medido na bancada). 1000 é o
3230
+ degrau que o próprio motor usa para elevar o escolhido; o rótulo que encosta num nó some (MNT-12.5). */
3231
+ --graph-label-z:1000; }
3218
3232
  /* A atribuição do motor (que a licença dele manda manter, e mantemos) traz `color:#999`
3219
3233
  CRAVADO no `init.css` — o único ponto em que a folha "estrutural" carrega cor. Reprovou
3220
3234
  contraste no axe, tema claro. A regra é de ELEMENTO e vem ESCOPADA à nossa classe, que é a
@@ -3226,7 +3240,7 @@ th[aria-sort] .datagrid-sort-icon { color:var(--primary); }
3226
3240
  .dependency-graph a[href] { color:var(--muted-foreground); }
3227
3241
  /* O nó é uma superfície flutuante como qualquer outra da Aurea — mesmo raio de cartão, mesma
3228
3242
  borda, mesmo fundo. É aqui que ele deixa de parecer React Flow. */
3229
- .graph-node { position:relative; inline-size:180px; }
3243
+ .graph-node { position:relative; inline-size:var(--graph-node-w,180px); }
3230
3244
  .graph-node-body { display:grid; gap:var(--space-05); inline-size:100%; padding:var(--space-2) var(--space-3); border:1px solid var(--border); border-radius:var(--radius-card); background:var(--card); color:var(--foreground); font-family:inherit; font-size:var(--text-sm); text-align:start; }
3231
3245
  button.graph-node-body { cursor:pointer; }
3232
3246
  .graph-node[data-selected] .graph-node-body { border-color:var(--primary); }
@@ -3235,6 +3249,113 @@ button.graph-node-body { cursor:pointer; }
3235
3249
  que esta parte recusa a mesma coisa. */
3236
3250
  .graph-node-kind { color:var(--subtle-foreground); font-size:var(--text-xs); letter-spacing:var(--tracking-wider); text-transform:uppercase; }
3237
3251
  .graph-handle { inline-size:var(--space-2); block-size:var(--space-2); border:1px solid var(--border); background:var(--surface-2); }
3252
+ /* ── RODADA 1 DA REDE (ADR-0064, 10/10/2026) ───────────────────────────────────────────────
3253
+ O ÍCONE vai ao lado do texto, e o texto continua inteiro (o tipo é PALAVRA — a recusa das cores
3254
+ continua de pé). Os SELOS sentam na borda, nos cantos: a quantidade em cima, à direita; o estado
3255
+ embaixo, à esquerda — longe um do outro, e fora do nome. */
3256
+ /* A alça do grafo de LEITURA existe só para o motor medir a borda: invisível e surda ao ponteiro. */
3257
+ .graph-handle-oculta { visibility:hidden; pointer-events:none; }
3258
+ .graph-node-text { display:grid; gap:var(--space-05); min-inline-size:0; }
3259
+ .graph-node-has-icon { grid-template-columns:auto minmax(0,1fr); align-items:center; column-gap:var(--space-2); }
3260
+ .graph-node-icon { color:var(--muted-foreground); }
3261
+ .graph-node-count { position:absolute; inset-block-start:0; inset-inline-end:0; transform:translate(25%,-50%); }
3262
+ .graph-node-status { position:absolute; inset-block-end:0; inset-inline-start:var(--space-3); max-inline-size:calc(100% - var(--space-6)); transform:translateY(50%); }
3263
+ .graph-node-status .badge { max-inline-size:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
3264
+ /* "Ir até" (focusId): a marca de achado é a borda da marca com uma linha por dentro, como o
3265
+ cartão escolhido — e não o anel de foco, que é do teclado. */
3266
+ .graph-node[data-focused] .graph-node-body { border-color:var(--primary); box-shadow:inset 0 0 0 var(--border-width) var(--primary); }
3267
+ /* O resto apaga quando há caminho ou vizinhos acesos (MNT-18.3 e 18.6). */
3268
+ .graph-node[data-dimmed] { opacity:.3; }
3269
+ .dependency-graph .is-dimmed { opacity:.25; }
3270
+ /* AS LINHAS: o desenho diz o que ela é, sem depender de cor (MNT-08 e MNT-15).
3271
+ ⚠ A ESPESSURA VAI PELA VARIÁVEL DO MOTOR (`--xy-edge-stroke-width`), e não por `stroke-width`:
3272
+ esta folha mora numa camada (`@layer aurea`) e a do motor não — e regra sem camada ganha de regra
3273
+ com camada, qualquer que seja a força do seletor. Medido na bancada da rodada 1: a fibra saía com
3274
+ 1 de espessura em vez de 6. A variável não tem rival na linha, então a nossa vale. O `stroke-width`
3275
+ fica para os desenhos que são nossos (a amostra da legenda e o miolo do traço duplo). */
3276
+ .dependency-graph .graph-edge { --graph-edge-w:var(--graph-edge-base); --xy-edge-stroke-width:var(--graph-edge-w); stroke-width:var(--graph-edge-w); }
3277
+ .dependency-graph .graph-edge-thick { --graph-edge-w:calc(var(--graph-edge-base) * 2); }
3278
+ .dependency-graph .graph-edge-heavy { --graph-edge-w:calc(var(--graph-edge-base) * 3); }
3279
+ .dependency-graph .graph-edge-dashed { stroke-dasharray:var(--space-2) var(--space-1); }
3280
+ .dependency-graph .graph-edge-dotted { --xy-edge-stroke-width:calc(var(--graph-edge-w) * 2); stroke-width:calc(var(--graph-edge-w) * 2); stroke-dasharray:0 calc(var(--graph-edge-w) * 5); stroke-linecap:round; }
3281
+ .dependency-graph .graph-edge-double { --xy-edge-stroke-width:calc(var(--graph-edge-w) * 3); stroke-width:calc(var(--graph-edge-w) * 3); }
3282
+ .graph-edge-double-core { --graph-edge-w:var(--graph-edge-base); fill:none; stroke:var(--xy-edge-label-background-color); stroke-width:var(--graph-edge-w); pointer-events:none; }
3283
+ .graph-edge-double-core.graph-edge-thick { --graph-edge-w:calc(var(--graph-edge-base) * 2); }
3284
+ .graph-edge-double-core.graph-edge-heavy { --graph-edge-w:calc(var(--graph-edge-base) * 3); }
3285
+ /* A pastilha do meio (marca, número, grupo) e o nome da porta na ponta são HTML sobre o desenho. */
3286
+ .graph-edge-chip { position:absolute; z-index:var(--graph-label-z); display:inline-flex; align-items:center; gap:var(--space-1); padding:var(--space-05) var(--space-2); border-radius:var(--radius-control); background:var(--xy-edge-label-background-color); color:var(--xy-edge-label-color); font-size:var(--graph-edge-label-size,var(--text-xs)); line-height:var(--leading-tight); white-space:nowrap; pointer-events:all; }
3287
+ .graph-edge-end { position:absolute; z-index:var(--graph-label-z); padding:0 var(--space-1); border-radius:var(--radius-xs); background:var(--xy-edge-label-background-color); color:var(--xy-edge-label-color); font-size:var(--graph-edge-label-size,var(--text-xs)); line-height:var(--leading-tight); white-space:nowrap; pointer-events:none; }
3288
+ /* `nodrag`/`nopan`: a pastilha é HTML sobre o mapa, e as duas classes dizem ao motor para não arrastar
3289
+ nem rolar a tela por ela (o botão do grupo precisa do clique). Fora do botão, o cursor é o comum. */
3290
+ .graph-edge-chip.nodrag.nopan { cursor:default; }
3291
+ .graph-edge-count { font-variant-numeric:tabular-nums; font-weight:var(--weight-medium); }
3292
+ .graph-edge-group { display:inline-flex; align-items:center; min-block-size:var(--space-5); padding:0 var(--space-2); border:var(--border-width) solid var(--border-strong); border-radius:var(--radius-control); background:var(--secondary); color:var(--foreground); font:inherit; font-variant-numeric:tabular-nums; font-weight:var(--weight-medium); cursor:pointer; }
3293
+ .graph-edge-group[aria-expanded="true"] { border-color:var(--primary-outline); }
3294
+ .graph-edge-mark { display:inline-grid; place-items:center; color:var(--foreground); }
3295
+ .graph-edge-mark-cross:before { content:"\2715"; font-weight:var(--weight-bold); }
3296
+ .graph-edge-mark-dot { inline-size:var(--space-2); block-size:var(--space-2); border-radius:var(--radius-full); background:currentColor; }
3297
+ /* Os botões de zoom, o minimapa e a legenda flutuam sobre o mapa, com a pele de cartão. */
3298
+ .graph-controls { display:flex; gap:var(--space-1); padding:var(--space-1); border:var(--border-width) solid var(--border); border-radius:var(--radius-control); background:var(--card); }
3299
+ .graph-minimap { border:var(--border-width) solid var(--border); border-radius:var(--radius-md); overflow:hidden; }
3300
+ .graph-legend { display:grid; gap:var(--space-1); margin:0; padding:var(--space-2) var(--space-3); list-style:none; border:var(--border-width) solid var(--border); border-radius:var(--radius-md); background:var(--card); color:var(--foreground); font-size:var(--graph-edge-label-size,var(--text-xs)); }
3301
+ .graph-legend li { display:flex; align-items:center; gap:var(--space-2); }
3302
+ .graph-legend-sample { inline-size:var(--space-8); block-size:var(--space-2); overflow:visible; }
3303
+ .graph-legend-sample .graph-edge,.graph-legend-sample .graph-edge-double-core { fill:none; }
3304
+ .graph-legend-sample .graph-edge { stroke:var(--xy-edge-stroke); }
3305
+ /* TEXTO MAIOR, independente do zoom (MNT-19.3): o rótulo do nó vai a `--text-base`, o resto a
3306
+ `--text-sm`, e a caixa cresce na mesma razão (a conta mora no graph.tsx). */
3307
+ .dependency-graph[data-text="lg"] { --graph-edge-label-size:var(--text-sm); }
3308
+ .dependency-graph[data-text="lg"] .graph-node-body { font-size:var(--text-base); }
3309
+ .dependency-graph[data-text="lg"] .graph-node-kind,.dependency-graph[data-text="lg"] .graph-node-body .hint { font-size:var(--text-sm); }
3310
+ /* ALTO CONTRASTE (MNT-19.3): linha e letra no tom da letra, a base da linha dobra, e a borda do nó
3311
+ também. Tudo o mais (pesos, pontilhado, duplo) é múltiplo da base e acompanha sozinho. */
3312
+ .dependency-graph[data-contrast="high"] { --xy-edge-stroke:var(--foreground); --xy-edge-label-color:var(--foreground); --graph-edge-base:calc(var(--border-width) * 2); }
3313
+ .dependency-graph[data-contrast="high"] .graph-node-body { border-color:var(--foreground); border-width:calc(var(--border-width) * 2); }
3314
+ .dependency-graph[data-contrast="high"] .graph-node-kind,.dependency-graph[data-contrast="high"] .graph-node-icon { color:var(--foreground); }
3315
+ /* ── RODADA 2 DA REDE (ADR-0065, 10/10/2026) ───────────────────────────────────────────────
3316
+ O LAÇO do modo de arrumar e a caixa em volta dos escolhidos se vestem pelas variáveis do motor. */
3317
+ .dependency-graph { --xy-selection-background-color:color-mix(in oklab,var(--primary) 10%,transparent); --xy-selection-border:var(--border-width) dashed var(--primary); }
3318
+ /* No modo de arrumar, quem recebe o foco é a caixa do MOTOR (que não tem classe nossa): o anel vai
3319
+ no corpo do nó, com o raio dele, e é UMA linha — a borda vira a cor do foco e o anel encosta nela
3320
+ (ADR-0059). A caixa do motor, quadrada, não desenha anel nenhum. */
3321
+ .dependency-graph :focus-visible:has(> .graph-node) { outline:none; }
3322
+ .dependency-graph :focus-visible:has(> .graph-group) { outline:none; }
3323
+ .dependency-graph :focus-visible > .graph-node > .graph-node-body,.dependency-graph :focus-visible > .graph-group { outline:var(--focus-width) solid var(--focus-strong); outline-offset:0; border-color:var(--focus-strong); }
3324
+ /* O CONTÊINER aberto (site, andar, rack): a região em volta dos filhos, com a cabeça. A cabeça tem
3325
+ `--space-10` e o recheio `--space-4` — os mesmos números com que o graph.tsx monta a caixa. */
3326
+ /* O fundo é um VÉU leve, e não uma cor cheia: a linha entre dois nós de fora que passa por cima da
3327
+ região continua aparecendo (o contêiner é um nó, e o motor o desenha acima das linhas comuns). E o
3328
+ véu soma: o andar dentro do site fica um tom acima, e o aninhamento se lê sem cor nova. */
3329
+ .graph-group { position:relative; inline-size:100%; block-size:100%; border:var(--border-width) solid var(--border); border-radius:var(--radius-card); background:color-mix(in oklab,var(--foreground) 3%,transparent); }
3330
+ .graph-group[data-selected] { border-color:var(--primary); }
3331
+ .graph-group[data-dimmed] { opacity:.3; }
3332
+ .graph-group-head { display:flex; align-items:center; gap:var(--space-2); block-size:var(--space-10); padding-inline:var(--space-2) var(--space-3); color:var(--foreground); font-size:var(--text-sm); }
3333
+ .graph-group-label { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-weight:var(--weight-medium); }
3334
+ /* Os dois botões de fechar e abrir têm 24 de lado (`--space-6`): o alvo mínimo de toque (WCAG 2.5.8). */
3335
+ .graph-group-toggle { display:inline-grid; place-items:center; flex:none; inline-size:var(--space-6); block-size:var(--space-6); padding:0; border:0; border-radius:var(--radius-full); background:none; color:var(--muted-foreground); cursor:pointer; }
3336
+ .graph-group-toggle:hover { background:var(--secondary); color:var(--foreground); }
3337
+ /* O de NÓ senta no CANTO de baixo, à direita, como a quantidade no de cima: fechado, mostra QUANTOS
3338
+ guarda ("+12"). No canto, e não na borda: na borda ele cobria a alça da última porta (medido na
3339
+ bancada, a "porta 3" do núcleo saía por baixo dele). O selo de estado, embaixo à esquerda, encolhe. */
3340
+ .graph-node-toggle { position:absolute; inset-block-end:0; inset-inline-end:0; display:inline-flex; align-items:center; justify-content:center; min-inline-size:var(--space-6); block-size:var(--space-6); padding:0 var(--space-2); border:var(--border-width) solid var(--border-strong); border-radius:var(--radius-control); background:var(--secondary); color:var(--foreground); font:inherit; font-size:var(--text-xs); font-variant-numeric:tabular-nums; font-weight:var(--weight-medium); transform:translate(25%,50%); cursor:pointer; }
3341
+ .graph-node-toggle[aria-expanded="false"] { border-color:var(--primary-outline); }
3342
+ .graph-node:has(.graph-node-toggle) .graph-node-status { max-inline-size:calc(100% - var(--space-16)); }
3343
+ /* O ALFINETE (nó fixo), no canto de cima à esquerda — a quantidade fica no da direita. */
3344
+ .graph-node-pin { position:absolute; inset-block-start:0; inset-inline-start:0; display:inline-grid; place-items:center; inline-size:var(--space-5); block-size:var(--space-5); border:var(--border-width) solid var(--border); border-radius:var(--radius-full); background:var(--card); color:var(--foreground); transform:translate(-25%,-50%); }
3345
+ /* A NUVEM é desenho de FUNDO: a caixa do nó fica sem borda e sem fundo, e o texto vai ao centro. */
3346
+ .graph-node-cloud { position:absolute; inset:0; inline-size:100%; block-size:100%; overflow:visible; pointer-events:none; }
3347
+ .graph-node-cloud path { fill:var(--card); stroke:var(--border); stroke-width:var(--border-width); }
3348
+ /* E o ícone vai JUNTO do texto, no meio da nuvem: na borda da caixa, onde fica nos outros nós, ele
3349
+ saía para fora do contorno. */
3350
+ .graph-node[data-shape="cloud"] .graph-node-body { position:relative; border-color:transparent; background:none; justify-items:center; text-align:center; }
3351
+ .graph-node[data-shape="cloud"] .graph-node-has-icon { grid-template-columns:auto auto; justify-content:center; }
3352
+ .graph-node[data-shape="cloud"][data-selected] .graph-node-cloud path,.graph-node[data-shape="cloud"][data-focused] .graph-node-cloud path { stroke:var(--primary); }
3353
+ .dependency-graph[data-contrast="high"] .graph-node-cloud path { stroke:var(--foreground); stroke-width:calc(var(--border-width) * 2); }
3354
+ /* A BARRA do modo de arrumar quebra em mais linhas quando a tela é estreita. */
3355
+ .graph-toolbar { max-inline-size:calc(100% - var(--space-8)); }
3356
+ /* OS RÓTULOS QUE SOMEM (MNT-12.5): o que encosta noutro, pela prioridade (o graph.tsx mede e marca),
3357
+ e o texto das linhas inteiro quando a câmera está longe — a 60%, a letra viraria um risco. */
3358
+ .dependency-graph [data-crowded],.dependency-graph[data-far] :is(.graph-edge-text,.graph-edge-end,.graph-edge-chip-text) { visibility:hidden; }
3238
3359
  .datagrid tbody tr[data-selected] { background:color-mix(in srgb,var(--primary) 14%,transparent); }
3239
3360
  .datagrid-empty { padding:var(--space-6); color:var(--muted-foreground); text-align:center; }
3240
3361
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aurea-uds/core",
3
- "version": "0.29.0",
3
+ "version": "0.31.0",
4
4
  "description": "O CSS da Aurea UDS e o comportamento em JavaScript puro. Importe @aurea-uds/fonts/css antes deste.",
5
5
  "keywords": [
6
6
  "aurea",