@aspprev/versi-ds 0.4.9 → 0.5.3

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/README.md CHANGED
@@ -32,6 +32,42 @@ import "@aspprev/versi-ds/styles.css";
32
32
  import "@aspprev/versi-ds/themes.css";
33
33
  ```
34
34
 
35
+ ### InfoGrid em aplicações com Tailwind
36
+
37
+ O layout de `InfoGrid` vem pronto em `@aspprev/versi-ds/styles.css`. Não é
38
+ necessário incluir o pacote no `content` do Tailwind, usar `safelist` ou repetir
39
+ classes responsivas no consumidor. Os breakpoints do componente são fixos:
40
+
41
+ | `columns` | abaixo de 640px | a partir de 640px | a partir de 1024px | a partir de 1440px |
42
+ | --- | --- | --- | --- | --- |
43
+ | 1 | 1 | 1 | 1 | 1 |
44
+ | 2 | 1 | 2 | 2 | 2 |
45
+ | 3 (padrão) | 1 | 2 | 3 | 3 |
46
+ | 4 | 1 | 2 | 2 | 4 |
47
+ | 6 | 1 | 2 | 3 | 6 |
48
+
49
+ As regras próprias `versi-info-grid*` usam `:where()` para permitir customização
50
+ por `className`, inclusive `grid-cols-*` e variantes responsivas, independentemente
51
+ da ordem entre o CSS do DS e as utilities do Tailwind 3 do consumidor. Para usar
52
+ nomes como `mobile:`, `tablet:` e `desktop:` nas suas customizações, configure
53
+ esses nomes no Tailwind da aplicação (640px, 1024px e 1440px, respectivamente).
54
+ Classes personalizadas devem estar nos arquivos cobertos pelo `content` do consumidor.
55
+
56
+ A implementação anterior compartilhava classes de colunas com o consumidor.
57
+ Quando o CSS do consumidor vinha depois e gerava `tablet:grid-cols-3`, mas não
58
+ `desktop:grid-cols-6`, a regra de tablet também se aplicava em desktop e vencia
59
+ pela ordem de declaração e mesma especificidade. A geração da regra de desktop
60
+ no pacote estava correta. Agora o layout usa seletores próprios, sem depender
61
+ da geração parcial de utilities. Após atualizar o JS **e** o CSS do pacote,
62
+ o contorno `className="tablet:grid-cols-3 desktop:grid-cols-6"` pode ser removido
63
+ do portal: `<InfoGrid columns={6}>` é suficiente.
64
+
65
+ Validação de navegador do artefato npm: `npm run test:info-grid-consumer`
66
+ (requer Chromium instalado com `npx playwright install chromium`). O teste
67
+ empacota e extrai o DS em um consumidor, gera Tailwind somente a partir do
68
+ `src` desse consumidor e verifica `grid-template-columns` nas duas ordens de CSS,
69
+ sem Tailwind adicional e com customização explícita por `className`.
70
+
35
71
  Use componentes pela raiz ou por um entrypoint público:
36
72
 
37
73
  ```tsx
@@ -95,9 +131,9 @@ import {
95
131
  - `validateFiles` retorna `code`, nome, extensão, tamanho e limite da rejeição e aceita mensagens por código; `FileViewer` também aceita `Promise<FileViewerSource>` como source.
96
132
  - Upload e `FileViewer` são controlados pelo consumidor; transporte, autenticação, persistência e download não fazem parte do pacote.
97
133
  - `DatePicker` aceita `selectionMode="year"` e mantém `selectionMode="day"` como padrão.
98
- - `DomainStatusBadge` aceita `statusMap` para vocabulário específico do produto.
134
+ - `StatusBadge` oferece as cores `primary`, `blue`, `green`, `orange`, `yellow`, `red`, `slate` e `black` nas aparências `solid`, `soft` e `outline`. `DomainStatusBadge` aceita um `statusMap` definido pelo consumidor; o DS não associa nomes de status a cores.
99
135
  - `Table` preserva os modos `fit`, `adaptive` e `scroll`; filtros e paginação respondem ao espaço do container.
100
- - `InputPhone`/`PhoneInput` e `SelectCountry` aceitam `showFlags`; o padrão é `true` e `showFlags={false}` remove a bandeira sem reservar espaço.
136
+ - `InputPhone`/`PhoneInput` e `SelectCountry`/`CountrySelect` aceitam `showFlags` (padrão: `true`); `showFlags={false}` oculta somente a bandeira do campo, sem reservar espaço. A lista de países sempre mantém as bandeiras.
101
137
  - Os controles de formulário ocupam a largura disponível do container; `className="w-full"` pode ser usado em grids, flex containers e colunas responsivas.
102
138
 
103
139
  Consulte [`docs/API-NOVOS-COMPONENTES.md`](docs/API-NOVOS-COMPONENTES.md) e o Storybook para exemplos completos, estados de erro/carregamento e contratos de acessibilidade.
@@ -192,6 +228,14 @@ npm run prepack
192
228
 
193
229
  O script `prepack` valida tokens, governança, segurança, lint, TypeScript, build, tamanho e conteúdo do pacote.
194
230
 
231
+ Os workflows compartilham as validações de segurança, pacote e consumidores.
232
+ Consulte [segurança do build e compatibilidade](docs/SEGURANCA-BUILD-COMPATIBILIDADE.md)
233
+ para a correção local de build que preserva o suporte aos navegadores atuais.
234
+ `npm run check:security` audita DS e piloto nos escopos completo e de produção,
235
+ verifica a mitigação instalada e salva relatórios em `test-results/security`.
236
+ `npm run check:release -- vX.Y.Z` confere a tag candidata contra os manifestos;
237
+ no CI de publicação, a tag é obtida do evento do GitHub.
238
+
195
239
  Para testar o exemplo integrado:
196
240
 
197
241
  ```bash
@@ -7,7 +7,7 @@ import {
7
7
  COUNTRY_OPTIONS,
8
8
  PHONE_COUNTRY_OPTIONS,
9
9
  filterCountryOptions
10
- } from "./chunk-7IY43S3Y.js";
10
+ } from "./chunk-IS7ACRMB.js";
11
11
 
12
12
  // src/components/input/Input.tsx
13
13
  import React, { useRef, useCallback, useId, useState } from "react";
@@ -1071,6 +1071,8 @@ var InputSelect = ({
1071
1071
  onChange,
1072
1072
  ...rest
1073
1073
  }) => {
1074
+ void suffix;
1075
+ void error;
1074
1076
  const isSearchable = searchable ?? options.length > 10;
1075
1077
  const normalizeSearchText2 = (value) => value.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
1076
1078
  const [field, meta, helpers] = useField2(name);
@@ -2222,7 +2224,7 @@ function InputPhone({
2222
2224
  },
2223
2225
  className: "flex w-full items-center gap-2 px-3 py-2 text-left text-sm hover:bg-surface-muted focus-visible:bg-surface-muted focus-visible:outline focus-visible:outline-2 focus-visible:outline-focus-ring",
2224
2226
  children: [
2225
- renderFlag(country, showFlags),
2227
+ renderFlag(country, true),
2226
2228
  /* @__PURE__ */ jsx6("span", { className: "min-w-0 flex-1 truncate text-field-content", children: country.label }),
2227
2229
  /* @__PURE__ */ jsx6("span", { className: "shrink-0 text-content-muted", children: country.idd.display })
2228
2230
  ]
@@ -3394,7 +3396,7 @@ function SelectCountry({
3394
3396
  searchable,
3395
3397
  searchPlaceholder,
3396
3398
  noOptionsText,
3397
- renderOption: (option) => renderCountryContent(option, void 0, showFlags),
3399
+ renderOption: (option) => renderCountryContent(option),
3398
3400
  renderValue: (option, placeholder) => renderCountryContent(
3399
3401
  option,
3400
3402
  placeholder,
@@ -3810,4 +3812,4 @@ export {
3810
3812
  RadioCardGroup,
3811
3813
  OtpCodeInput_default
3812
3814
  };
3813
- //# sourceMappingURL=chunk-47GMEVB5.js.map
3815
+ //# sourceMappingURL=chunk-2CPV3WH5.js.map