@inchurch/matcha-theme 22.26.1 → 22.27.1
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/components/matcha-buttons.scss +40 -0
- package/components/matcha-nav.scss +106 -1
- package/package.json +1 -1
|
@@ -860,6 +860,46 @@ a[matcha-icon-button] {
|
|
|
860
860
|
// componente não precisa reafirmar nada aqui.
|
|
861
861
|
}
|
|
862
862
|
|
|
863
|
+
// ── matcha-button COM TEXTO: auto-size do matcha-icon projetado ──────────────
|
|
864
|
+
// O icon-button (acima) e o matcha-button[icon] (icon-only, no bloco &[icon]) já escalavam o
|
|
865
|
+
// ícone; o botão com texto não escalava nada, então o matcha-icon caía no próprio default
|
|
866
|
+
// (--matcha-icon-size-md, 24px) — proporcional só de MD (40px) pra cima. Num tiny (28px, texto
|
|
867
|
+
// 11/14) sobrava um ícone de 24px.
|
|
868
|
+
//
|
|
869
|
+
// Escala igual à do icon-button: XS/tiny → 16 · SM/small → 20 · MD+ → 24 (o default do
|
|
870
|
+
// matcha-icon já é 24, então MD/LG/XL não precisam de regra).
|
|
871
|
+
//
|
|
872
|
+
// Duas diferenças deliberadas em relação ao icon-button:
|
|
873
|
+
// 1. `matcha-icon:not([size])` — aqui o ícone divide o botão com o texto, e um `size`
|
|
874
|
+
// explícito do consumidor é escolha legítima que deve continuar valendo. O auto-size só
|
|
875
|
+
// age quando ninguém decidiu.
|
|
876
|
+
// 2. sem `!important`, consequência do item 1: como a regra nem casa quando há `size`, não há
|
|
877
|
+
// disputa de especificidade contra a classe `.i-size-*` que o componente emite.
|
|
878
|
+
//
|
|
879
|
+
// `:not([icon])` e `:not([matcha-icon-button])` preservam os dois casos que já tinham
|
|
880
|
+
// tratamento próprio. O bloco icon-only usa `[icon]:not([icon="false"])`, então em teoria
|
|
881
|
+
// `icon="false"` é botão com texto e deveria entrar aqui; não há um único uso dessa forma no
|
|
882
|
+
// showcase nem no painel, e um seletor extra só para ela seria ruído.
|
|
883
|
+
button[matcha-button]:not([matcha-icon-button]):not([icon]),
|
|
884
|
+
a[matcha-button]:not([matcha-icon-button]):not([icon]) {
|
|
885
|
+
&[size="xs"] matcha-icon:not([size]),
|
|
886
|
+
&[size="tiny"] matcha-icon:not([size]) {
|
|
887
|
+
font-size: var(--matcha-icon-size-sm, 16px);
|
|
888
|
+
width: var(--matcha-icon-size-sm, 16px);
|
|
889
|
+
height: var(--matcha-icon-size-sm, 16px);
|
|
890
|
+
line-height: var(--matcha-icon-size-sm, 16px);
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
// 20px não tem token (a escala de ícone vai 16/24/32) — mesmo literal que o icon-button usa.
|
|
894
|
+
&[size="sm"] matcha-icon:not([size]),
|
|
895
|
+
&[size="small"] matcha-icon:not([size]) {
|
|
896
|
+
font-size: 20px;
|
|
897
|
+
width: 20px;
|
|
898
|
+
height: 20px;
|
|
899
|
+
line-height: 20px;
|
|
900
|
+
}
|
|
901
|
+
}
|
|
902
|
+
|
|
863
903
|
// ── Forced colors (Windows High Contrast) ──
|
|
864
904
|
// Buttons precisam ser claramente acionáveis em high-contrast.
|
|
865
905
|
@media (forced-colors: active) {
|
|
@@ -482,11 +482,116 @@
|
|
|
482
482
|
// ── Command Palette: high-contrast em matcha-command-palette.scss ──
|
|
483
483
|
}
|
|
484
484
|
|
|
485
|
+
// ── Nav Drawer ───────────────────────────────────────────────────────────────
|
|
486
|
+
// Navegação em drawer (Figma DSV3 node 19228:2014) — a forma da navegação quando
|
|
487
|
+
// não há espaço pro par rail + panel. Compõe matcha-drawer-container +
|
|
488
|
+
// matcha-drawer mode=over; aqui só a anatomia e o ritmo da árvore.
|
|
489
|
+
|
|
490
|
+
.matcha-nav-drawer {
|
|
491
|
+
// Cobre a viewport pra ancorar o backdrop do container (que é absolute/inset:0).
|
|
492
|
+
// Sem isso o scrim ficaria do tamanho do pai onde o drawer foi declarado.
|
|
493
|
+
position: fixed;
|
|
494
|
+
inset: 0;
|
|
495
|
+
z-index: var(--matcha-nav-drawer-z, 1000);
|
|
496
|
+
// Fechado não pode capturar clique da página que está por baixo.
|
|
497
|
+
pointer-events: none;
|
|
498
|
+
|
|
499
|
+
&.matcha-nav-drawer--opened {
|
|
500
|
+
pointer-events: auto;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
// Contained — ancora no ancestral posicionado em vez da viewport. Preview e
|
|
504
|
+
// embed (playground da doc dentro de um frame de phone). Mesmo cenário que o
|
|
505
|
+
// matcha-drawer já reconhece no max-height do bottom sheet.
|
|
506
|
+
&.matcha-nav-drawer--contained {
|
|
507
|
+
position: absolute;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
// O container tem bg opaco próprio (é feito pra envolver a app). Aqui ele é só
|
|
511
|
+
// âncora de posicionamento — opaco cobriria a página inteira mesmo fechado.
|
|
512
|
+
.matcha-drawer-container {
|
|
513
|
+
height: 100%;
|
|
514
|
+
background-color: transparent;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
// Ritmo dos slots: a navegação define o próprio (Figma), não o padding 20/20
|
|
518
|
+
// genérico do drawer. As CSS vars existem pra isso — sem !important.
|
|
519
|
+
matcha-drawer {
|
|
520
|
+
--drawer-pad-x: var(--matcha-space-150, 12px);
|
|
521
|
+
--drawer-pad-y: var(--matcha-space-150, 12px);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
// Header — brand à esquerda, close à direita (space-between vem do slot).
|
|
525
|
+
.matcha-nav-drawer__brand {
|
|
526
|
+
display: flex;
|
|
527
|
+
align-items: center;
|
|
528
|
+
min-width: 0;
|
|
529
|
+
gap: var(--matcha-space-100, 8px);
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
// Busca — largura total, logo abaixo do header e antes da árvore.
|
|
533
|
+
.matcha-nav-drawer__search {
|
|
534
|
+
display: block;
|
|
535
|
+
width: 100%;
|
|
536
|
+
flex-shrink: 0;
|
|
537
|
+
|
|
538
|
+
> * {
|
|
539
|
+
width: 100%;
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
// Árvore de navegação.
|
|
544
|
+
.matcha-nav-drawer__items {
|
|
545
|
+
display: flex;
|
|
546
|
+
flex-direction: column;
|
|
547
|
+
align-items: stretch;
|
|
548
|
+
gap: var(--matcha-space-050, 4px);
|
|
549
|
+
width: 100%;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
// Hierarquia de 3 níveis. O matcha-nav-item só tem UM flag de indentação
|
|
553
|
+
// (`indented`), reservado ao nível 3 — que também é o único que o Figma
|
|
554
|
+
// permite sem ícone/chevron. O recuo do nível 2 vem daqui, do container,
|
|
555
|
+
// pra não sobrecarregar o contrato público do nav-item nem mexer no desktop.
|
|
556
|
+
//
|
|
557
|
+
// 24px = ícone (16) + gap (8) do row do módulo. Isso alinha o label do filho
|
|
558
|
+
// com o label do pai, formando uma coluna de texto. Com menos que isso o filho
|
|
559
|
+
// renderiza à ESQUERDA do label do pai (o pai tem ícone, o filho não) e a
|
|
560
|
+
// hierarquia lê invertida. O nível 3 soma os 24 do `indented` por cima.
|
|
561
|
+
.matcha-nav-drawer__items > .matcha-nav-item > .matcha-nav-item__children {
|
|
562
|
+
padding-inline-start: var(--matcha-space-300, 24px);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
// Footer — lista de itens empilhada. O slot do drawer é feito pra botões de
|
|
566
|
+
// ação (row, alinhado à direita); a navegação precisa do oposto.
|
|
567
|
+
.matcha-drawer__slot--footer > * {
|
|
568
|
+
flex-direction: column;
|
|
569
|
+
align-items: stretch;
|
|
570
|
+
justify-content: flex-start;
|
|
571
|
+
gap: var(--matcha-space-025, 2px);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
.matcha-nav-drawer__footer {
|
|
575
|
+
display: flex;
|
|
576
|
+
flex-direction: column;
|
|
577
|
+
align-items: stretch;
|
|
578
|
+
gap: var(--matcha-space-025, 2px);
|
|
579
|
+
width: 100%;
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
// O wrapper do slot existe sempre (é do template), então o :has() do drawer
|
|
583
|
+
// não consegue esconder o footer vazio sozinho — a checagem real é esta.
|
|
584
|
+
.matcha-drawer__slot--footer:not(:has(matcha-nav-drawer-footer)) {
|
|
585
|
+
display: none;
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
|
|
485
589
|
// ── Print ──────────────────────────────────────────────────────────────────
|
|
486
590
|
// Convenção DS: chrome de navegação some em impressão — conteúdo full-page.
|
|
487
591
|
@media print {
|
|
488
592
|
.matcha-nav-rail,
|
|
489
|
-
.matcha-nav-panel
|
|
593
|
+
.matcha-nav-panel,
|
|
594
|
+
.matcha-nav-drawer {
|
|
490
595
|
display: none !important;
|
|
491
596
|
}
|
|
492
597
|
}
|