synthesisui 0.16.439 → 0.16.441

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.
@@ -1,3 +1,4 @@
1
+ import { arranjoSemValor } from "./value-ledger.js";
1
2
  /**
2
3
  * TODO FRAGMENTO QUE CARREGA ESTILO, com arquivo e linha.
3
4
  *
@@ -646,6 +647,8 @@ forms = []) {
646
647
  const tokens = literal.split(/\s+/).filter(Boolean);
647
648
  const readElsewhere = tokens.length > 0 &&
648
649
  tokens.every((tk) => STRUCTURE.has(tk) ||
650
+ /** Arranjo sem valor de design - a MESMA resposta que a conta do anel dá. */
651
+ arranjoSemValor(tk) ||
649
652
  wornGlobal.has(tk) ||
650
653
  definedGlobal.has(tk) ||
651
654
  islandRead.get(f.file)?.has(tk));
@@ -95,6 +95,37 @@ const STRUCTURAL_TOKENS = new Set([
95
95
  "peer",
96
96
  "isolate",
97
97
  ]);
98
+ /**
99
+ * O ARRANJO QUE NÃO CARREGA VALOR DE DESIGN - e por isso sai do denominador (dono, 19/09).
100
+ *
101
+ * O QUE O CLIENTE GANHA: a cobertura dele para de ser descontada por `mx-auto` e `col-span-6`.
102
+ * Medido nos dois repositórios limpos, `mx-auto` é o utilitário que mais aparece no que sobrava
103
+ * como não lido - 12 ocorrências num deles, o maior item isolado da lista inteira. Centrar um
104
+ * bloco e dizer quantas colunas ele ocupa não são decisões de design: são arranjo, a mesma coisa
105
+ * que `flex-col` e `w-full`, que já saem por `STRUCTURAL_TOKENS`.
106
+ *
107
+ * O TESTE É O VALOR, e não o nome da família. Estas famílias já resolvem para propriedades que
108
+ * `STRUCTURAL_PROPERTIES` conhece - `gridColumn`, `gridTemplateColumns`, `order` - e o que decide
109
+ * é o outro lado: o valor é uma CONTAGEM (`6`, `12`) ou a palavra `auto`, nenhum dos dois sendo
110
+ * quantidade que alguém escolheu de uma escala. `gap-6` continua fora daqui de propósito, porque
111
+ * ali o número É uma escolha de escala: ele muda o ritmo da tela.
112
+ *
113
+ * A LISTA CONTINUA CONSERVADORA, pelo mesmo motivo escrito em `STRUCTURAL_TOKENS`: o que não
114
+ * estiver aqui cai em `unread`, que é o lado certo de errar. E ela vive NESTE arquivo, junto das
115
+ * outras duas, porque três fontes para "isto é arranjo?" discordariam no primeiro conserto.
116
+ */
117
+ const ARRANJO_SEM_VALOR = [
118
+ /** Grade e ordem: o valor é uma contagem de trilhas, `auto`, `full` ou `none`. */
119
+ /^(col|row)-(span|start|end)-(\d+|auto|full)$/,
120
+ /^grid-(cols|rows)-(\d+|none|subgrid)$/,
121
+ /^order-(\d+|first|last|none)$/,
122
+ /** Margem `auto` é centralização - a única margem cujo valor não sai de escala nenhuma. */
123
+ /^-?m[xytblrse]?-auto$/,
124
+ ];
125
+ /** `mx-auto` e `col-span-6` nomeiam arranjo; `gap-6` nomeia uma escolha de escala. */
126
+ export function arranjoSemValor(utility) {
127
+ return ARRANJO_SEM_VALOR.some((re) => re.test(utility));
128
+ }
98
129
  /**
99
130
  * O destino de UM token de classe. Exportado para o julgamento por valor e a triagem lerem a
100
131
  * MESMA resposta - duas cópias desta decisão é como o item 11 nasceu.
@@ -119,7 +150,7 @@ export function destinationOf(cls, declared, answered,
119
150
  */
120
151
  defined) {
121
152
  const { utility } = parseClass(cls);
122
- if (STRUCTURAL_TOKENS.has(utility))
153
+ if (STRUCTURAL_TOKENS.has(utility) || arranjoSemValor(utility))
123
154
  return "structure";
124
155
  const read = readUtility(utility, declared);
125
156
  if (read) {
@@ -815,7 +815,7 @@ export const CHECKER_SINCE = "0.16.424";
815
815
  * deveriam estar lá. Quem tem censo gravado precisa de um `sync` para a fila de trabalho dele ser a
816
816
  * real; ver o livro-razão de `corpus.spec.ts`.
817
817
  */
818
- export const READER_SINCE = "0.16.439";
818
+ export const READER_SINCE = "0.16.440";
819
819
  /**
820
820
  * O QUE ESTÁ INSTALADO AQUI FICOU PARA TRÁS - e as DUAS condições que fazem isso ser verdade.
821
821
  *
@@ -93,7 +93,7 @@ ${layout()}
93
93
  <div class="bar-fim">
94
94
  <p class="meta">${escapar(quando)} &middot; CLI ${escapar(cabecalho.cli)} &middot; nothing left this machine</p>${input.comando
95
95
  ? `
96
- <a class="comando topo" href="${INSTALL_URL}" target="_blank" rel="noreferrer">${escapar(input.comando)}<i aria-hidden="true">\u2192</i></a>`
96
+ <a class="botao" href="${INSTALL_URL}" target="_blank" rel="noreferrer">Open the install page</a>`
97
97
  : ""}
98
98
  </div>
99
99
  </div>
@@ -166,8 +166,8 @@ ${itens}
166
166
  * A ÚLTIMA COISA QUE ELA LÊ: a conta, e não mais um inventário.
167
167
  *
168
168
  * Um relatório que termina na décima sexta lista deixa a pessoa com o diagnóstico e sem o passo.
169
- * Este capítulo diz o que muda COM OS NÚMEROS DELA e entrega o comando ao lado - a mesma linha que
170
- * já está no topo, porque quem chegou até aqui não deveria ter que subir para achá-la.
169
+ * Este capítulo diz o que muda COM OS NÚMEROS DELA e entrega o comando ao lado, escrito por
170
+ * extenso - quem chegou até aqui decidiu, e não deveria voltar ao terminal para lembrar a linha.
171
171
  */
172
172
  function desenharMuda(linhas, comando) {
173
173
  if (linhas.length === 0)
@@ -516,7 +516,7 @@ body {
516
516
  justify-content: space-between;
517
517
  }
518
518
 
519
- /* O COMANDO NO TOPO, sem rolar: quem decidiu adotar no meio da leitura nao volta para procura-lo. */
519
+ /* O COMANDO ESCRITO POR EXTENSO, no corpo: a linha para copiar, selecionavel de uma vez. */
520
520
  .comando {
521
521
  font-family: ${mono};
522
522
  font-size: 12px;
@@ -805,9 +805,12 @@ footer { margin-top: 40px; color: var(--ds-color-semantic-muted); font-size: 13p
805
805
  .lado { position: static; max-height: none; padding-bottom: 20px; }
806
806
  }
807
807
 
808
- /* O BOTAO: um alvo unico para quem leu a conta e decidiu, no topo direito do capitulo. Ele abre a
809
- pagina publica de instalacao - e isso nao quebra o auto-contido, porque um endereco so e buscado
810
- se a pessoa clicar. Os tres comandos seguem escritos aqui embaixo, para quem esta sem rede. */
808
+ /* O BOTAO: um alvo unico para quem leu a conta e decidiu. Ele aparece em DOIS lugares - na barra
809
+ do topo, que nao rola, e no topo direito do capitulo de instalacao - e e o MESMO botao nos dois
810
+ (pedido dele, 19/09): na barra ele era um chip com cara de comando, e um comando com cara de
811
+ texto nao anuncia que leva a lugar nenhum. Abrir a pagina publica nao quebra o auto-contido,
812
+ porque um endereco so e buscado se a pessoa clicar. Os tres comandos seguem escritos na pagina,
813
+ por extenso, para quem esta sem rede. */
811
814
  .passos-topo {
812
815
  display: flex;
813
816
  align-items: center;
@@ -829,18 +832,6 @@ footer { margin-top: 40px; color: var(--ds-color-semantic-muted); font-size: 13p
829
832
  }
830
833
  .botao:hover { opacity: 0.9; }
831
834
 
832
- /* O COMANDO DO TOPO E' UM BOTAO: ele abre a pagina de instalacao, entao nao se comporta como
833
- texto para selecionar - e a seta diz que leva a algum lugar antes de alguem descobrir clicando. */
834
- a.comando.topo {
835
- display: inline-flex;
836
- align-items: center;
837
- gap: 8px;
838
- text-decoration: none;
839
- user-select: none;
840
- }
841
- a.comando.topo i { font-style: normal; color: var(--ds-color-semantic-accent); }
842
- a.comando.topo:hover { border-color: var(--ds-color-semantic-accent); }
843
-
844
835
  /* AS DUAS PILHAS DO NAO LIDO, LADO A LADO: a comparacao e' o conteudo, entao elas nao se empilham
845
836
  enquanto houver largura - ler "isto me afeta" e "isto nao" em sequencia perde a comparacao. */
846
837
  .pilhas { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; margin-top: 4px; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synthesisui",
3
- "version": "0.16.439",
3
+ "version": "0.16.441",
4
4
  "description": "Bring SynthesisUI design systems into any project - tokens, typed components, whole pages and an agent-ready CLAUDE.md manifest.",
5
5
  "type": "module",
6
6
  "bin": {