@inchurch/matcha-theme 22.30.1 → 22.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.
package/base/_reset.scss CHANGED
@@ -8,6 +8,47 @@
8
8
  *, *:before, *:after {
9
9
  box-sizing: border-box;
10
10
  }
11
+
12
+ // Seleção de texto na cor da marca. Antes só existia escopada em input/
13
+ // textarea (matcha-form-field) — no resto da aplicação valia o azul do
14
+ // sistema operacional. `accent-text-on` é o foreground DERIVADO do accent
15
+ // (matcha-text-on); `accent-contrast` é legado e sempre preto, não serve.
16
+ // `background-color`, não `background`: ::selection só aceita um conjunto
17
+ // pequeno de propriedades, e a shorthand não é garantida.
18
+ &::selection,
19
+ & ::selection {
20
+ background-color: var(--matcha-color-accent);
21
+ color: var(--matcha-color-accent-text-on);
22
+ }
23
+
24
+ // `a[matcha-cell-link]` — a âncora que identifica um registro numa listagem
25
+ // (célula de tabela ou título de card). Global porque vale nas duas
26
+ // superfícies; o realce da LINHA no hover é específico da tabela e mora em
27
+ // components/matcha-table.scss.
28
+ //
29
+ // Por que âncora e não clique na linha/card inteiro: só com `href` o browser
30
+ // entrega ctrl+clique, clique do meio e "abrir em nova aba" — e restringir o
31
+ // alvo ao nome devolve a seleção de texto na listagem.
32
+ a[matcha-cell-link] {
33
+ display: inline-flex;
34
+ align-items: center;
35
+ gap: var(--matcha-space-50, 4px);
36
+ color: inherit;
37
+ text-decoration: none;
38
+ cursor: pointer;
39
+
40
+ // Affordance que não depende de cor (a11y) — o tom accent sozinho não
41
+ // serve pra quem não distingue cor.
42
+ &:hover {
43
+ text-decoration: underline;
44
+ }
45
+
46
+ &:focus-visible {
47
+ outline: 2px solid var(--matcha-color-accent);
48
+ outline-offset: 2px;
49
+ border-radius: var(--matcha-radius-sm, 2px);
50
+ }
51
+ }
11
52
  }
12
53
  }
13
54
 
@@ -373,11 +373,13 @@ matcha-form-field[size="huge"] .matcha-form-field:has(input[type="search"])::aft
373
373
  caret-color: var(--matcha-color-primary);
374
374
  }
375
375
 
376
- // Selection highlight (quando user seleciona texto) — usa token de primary com alpha
376
+ // Selection highlight (quando user seleciona texto) — mesmo par accent do
377
+ // ::selection global (base/_reset.scss). Era primary-alpha aqui e azul do SO no
378
+ // resto da app: duas cores de seleção diferentes na mesma tela.
377
379
  input::selection,
378
380
  textarea::selection {
379
- background: var(--matcha-color-primary-alpha);
380
- color: var(--matcha-color-text-primary);
381
+ background-color: var(--matcha-color-accent);
382
+ color: var(--matcha-color-accent-text-on);
381
383
  }
382
384
 
383
385
  // Componentes projetados — todos preenchem a largura e não adicionam borda/padding próprio
@@ -61,6 +61,11 @@
61
61
  border: 0;
62
62
  background: transparent;
63
63
  cursor: pointer;
64
+ // O row é <a> quando o item tem [routerLink]/[href] — sem este reset a âncora
65
+ // traz sublinhado e a cor de link do browser. As demais regras já eram agnósticas
66
+ // de tag (border: 0, background: transparent atendiam o <button>).
67
+ text-decoration: none;
68
+ color: inherit;
64
69
  width: 100%;
65
70
  box-sizing: border-box;
66
71
  transition: background-color var(--matcha-duration-instant, 80ms) ease,
@@ -12,7 +12,15 @@
12
12
  //
13
13
  // Companion directives (a11y automática):
14
14
  // [matcha-table-sortable] em <th> — aria-sort + tabindex + keyboard
15
- // [rowClick] em <tr> — o binding já ativa tudo (tabindex + Enter/Space + hover accent)
15
+ // [rowClick] em <tr> — AÇÃO na linha (abrir modal, selecionar). o
16
+ // binding já ativa tudo (tabindex + Enter/Space
17
+ // + hover accent na linha inteira)
18
+ //
19
+ // Navegação (leva pra outra página) NÃO é [rowClick]:
20
+ // <a matcha-cell-link [routerLink]> dentro do <td> — âncora de verdade, então
21
+ // ctrl+clique/clique do meio/botão direito funcionam e o resto da linha segue
22
+ // selecionável. Ponteiro e tom accent aparecem só sobre a âncora, pintando a linha
23
+ // inteira. Os dois no mesmo <tr> é proibido pelo canon (dois hovers competindo).
16
24
  //
17
25
  // Helpers CSS-only:
18
26
  // td.numeric → tabular-nums
@@ -75,6 +83,10 @@
75
83
  --matcha-table-row-bg-hover: rgba(var(--matcha-color-fg), 0.12);
76
84
  --matcha-table-row-bg-hover-striped: rgba(var(--matcha-color-fg), 0.18);
77
85
  --matcha-table-header-bg-hover: rgba(var(--matcha-color-fg), 0.10);
86
+ // Hover da linha que NAVEGA: tom accent, disparado só quando o ponteiro está
87
+ // sobre a âncora da célula (ver "Row navegável" adiante). Fora dela a linha usa
88
+ // o hover neutro acima — é esse contraste que diz ao usuário onde clicar.
89
+ --matcha-table-row-bg-hover-accent: var(--matcha-color-accent-surface-hover);
78
90
 
79
91
  // ── Sort indicator colors ─────────────────────────────────────────────
80
92
  // Inactive usa alpha 0.45 no foreground — claramente VISÍVEL como "ali tem
@@ -382,6 +394,36 @@
382
394
  // table-clickable-row.directive.ts) — nenhuma regra de tema necessária
383
395
  // aqui, o estilo inline já vence qualquer especificidade.
384
396
 
397
+ // ── Row navegável (`<a matcha-cell-link>` na célula) ───────────────────
398
+ // A linha que LEVA PRA OUTRA PÁGINA não é clicável inteira: quem navega é uma
399
+ // âncora de verdade na célula, pra que ctrl+clique, clique do meio e o menu do
400
+ // botão direito funcionem — e pra que o resto da linha continue selecionável
401
+ // com o mouse (com a linha toda clicável, não dava pra copiar texto da tabela).
402
+ //
403
+ // O feedback visual é o inverso do rowClick: ponteiro e tom accent aparecem só
404
+ // quando o mouse está sobre a âncora, e aí a linha INTEIRA pinta. Fora dela vale
405
+ // o hover neutro de sempre.
406
+ //
407
+ // Pinta via --matcha-table-cell-bg em TODOS os td da linha (mesmo caminho do
408
+ // hover normal), não com background-color no <tr>: em tabela striped o fundo
409
+ // mora no td, e um background no tr ficaria por baixo dele — o resultado seria
410
+ // uma célula colorida e o resto não.
411
+ //
412
+ // Depois das regras de striped de propósito: mesma especificidade, e ordem de
413
+ // origem decide. `:has()` já é usado em ~10 componentes do tema.
414
+ // O estilo BASE da âncora é global (base/_reset.scss) — ela também aparece em
415
+ // card de listagem, fora de qualquer tabela. Aqui fica só o que é da tabela: o
416
+ // realce da linha inteira.
417
+ a[matcha-cell-link]:focus-visible {
418
+ outline: var(--matcha-table-focus-ring-width) solid
419
+ var(--matcha-table-focus-ring-color);
420
+ }
421
+
422
+ tbody tr:has(a[matcha-cell-link]:hover) td,
423
+ tbody tr:has(a[matcha-cell-link]:focus-visible) td {
424
+ --matcha-table-cell-bg: var(--matcha-table-row-bg-hover-accent);
425
+ }
426
+
385
427
  tbody tr.is-selected td {
386
428
  --matcha-table-cell-bg: var(--matcha-table-row-bg-selected);
387
429
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inchurch/matcha-theme",
3
- "version": "22.30.1",
3
+ "version": "22.31.0",
4
4
  "description": "Themes for matcha-design-system",
5
5
  "main": "main.scss",
6
6
  "scripts": {