@aspprev/versi-ds 0.1.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/README.md +463 -0
- package/dist/DocumentItem-BU0J2QGP.d.ts +21 -0
- package/dist/charts.d.ts +82 -0
- package/dist/charts.js +31 -0
- package/dist/charts.js.map +1 -0
- package/dist/chunk-2ACDV5D5.js +560 -0
- package/dist/chunk-2ACDV5D5.js.map +1 -0
- package/dist/chunk-2NMEKWO5.js +38 -0
- package/dist/chunk-2NMEKWO5.js.map +1 -0
- package/dist/chunk-6MXHE5MD.js +769 -0
- package/dist/chunk-6MXHE5MD.js.map +1 -0
- package/dist/chunk-A3PA5H7L.js +3099 -0
- package/dist/chunk-A3PA5H7L.js.map +1 -0
- package/dist/chunk-BY4HJZFJ.js +3308 -0
- package/dist/chunk-BY4HJZFJ.js.map +1 -0
- package/dist/chunk-CWIPMGCA.js +314 -0
- package/dist/chunk-CWIPMGCA.js.map +1 -0
- package/dist/chunk-OPUUOVCL.js +3226 -0
- package/dist/chunk-OPUUOVCL.js.map +1 -0
- package/dist/chunk-OWXG2A4N.js +77 -0
- package/dist/chunk-OWXG2A4N.js.map +1 -0
- package/dist/chunk-XGWGBD7X.js +45 -0
- package/dist/chunk-XGWGBD7X.js.map +1 -0
- package/dist/core.d.ts +471 -0
- package/dist/core.js +86 -0
- package/dist/core.js.map +1 -0
- package/dist/countries.d.ts +52 -0
- package/dist/countries.js +18 -0
- package/dist/countries.js.map +1 -0
- package/dist/documents.d.ts +9 -0
- package/dist/documents.js +13 -0
- package/dist/documents.js.map +1 -0
- package/dist/flags/ad.svg +1 -0
- package/dist/flags/ae.svg +1 -0
- package/dist/flags/af.svg +5 -0
- package/dist/flags/ag.svg +1 -0
- package/dist/flags/ai.svg +1 -0
- package/dist/flags/al.svg +1 -0
- package/dist/flags/am.svg +1 -0
- package/dist/flags/ao.svg +1 -0
- package/dist/flags/aq.svg +1 -0
- package/dist/flags/ar.svg +1 -0
- package/dist/flags/as.svg +1 -0
- package/dist/flags/at.svg +1 -0
- package/dist/flags/au.svg +1 -0
- package/dist/flags/aw.svg +1 -0
- package/dist/flags/ax.svg +1 -0
- package/dist/flags/az.svg +1 -0
- package/dist/flags/ba.svg +1 -0
- package/dist/flags/bb.svg +1 -0
- package/dist/flags/bd.svg +1 -0
- package/dist/flags/be.svg +1 -0
- package/dist/flags/bf.svg +1 -0
- package/dist/flags/bg.svg +1 -0
- package/dist/flags/bh.svg +1 -0
- package/dist/flags/bi.svg +1 -0
- package/dist/flags/bj.svg +1 -0
- package/dist/flags/bl.svg +1 -0
- package/dist/flags/bm.svg +1 -0
- package/dist/flags/bn.svg +1 -0
- package/dist/flags/bo.svg +1 -0
- package/dist/flags/bq.svg +1 -0
- package/dist/flags/br.svg +1 -0
- package/dist/flags/bs.svg +1 -0
- package/dist/flags/bt.svg +1 -0
- package/dist/flags/bv.svg +1 -0
- package/dist/flags/bw.svg +1 -0
- package/dist/flags/by.svg +1 -0
- package/dist/flags/bz.svg +1 -0
- package/dist/flags/ca.svg +1 -0
- package/dist/flags/cc.svg +1 -0
- package/dist/flags/cd.svg +1 -0
- package/dist/flags/cf.svg +1 -0
- package/dist/flags/cg.svg +1 -0
- package/dist/flags/ch.svg +1 -0
- package/dist/flags/ci.svg +1 -0
- package/dist/flags/ck.svg +1 -0
- package/dist/flags/cl.svg +1 -0
- package/dist/flags/cm.svg +1 -0
- package/dist/flags/cn.svg +1 -0
- package/dist/flags/co.svg +1 -0
- package/dist/flags/cr.svg +1 -0
- package/dist/flags/cu.svg +1 -0
- package/dist/flags/cv.svg +1 -0
- package/dist/flags/cw.svg +1 -0
- package/dist/flags/cx.svg +1 -0
- package/dist/flags/cy.svg +1 -0
- package/dist/flags/cz.svg +1 -0
- package/dist/flags/de.svg +1 -0
- package/dist/flags/dj.svg +1 -0
- package/dist/flags/dk.svg +1 -0
- package/dist/flags/dm.svg +1 -0
- package/dist/flags/do.svg +1 -0
- package/dist/flags/dz.svg +1 -0
- package/dist/flags/ec.svg +1 -0
- package/dist/flags/ee.svg +1 -0
- package/dist/flags/eg.svg +1 -0
- package/dist/flags/eh.svg +1 -0
- package/dist/flags/er.svg +1 -0
- package/dist/flags/es.svg +1 -0
- package/dist/flags/et.svg +1 -0
- package/dist/flags/fi.svg +1 -0
- package/dist/flags/fj.svg +1 -0
- package/dist/flags/fk.svg +1 -0
- package/dist/flags/fm.svg +1 -0
- package/dist/flags/fo.svg +1 -0
- package/dist/flags/fr.svg +1 -0
- package/dist/flags/ga.svg +1 -0
- package/dist/flags/gb.svg +1 -0
- package/dist/flags/gd.svg +1 -0
- package/dist/flags/ge.svg +1 -0
- package/dist/flags/gf.svg +1 -0
- package/dist/flags/gg.svg +1 -0
- package/dist/flags/gh.svg +1 -0
- package/dist/flags/gi.svg +1 -0
- package/dist/flags/gl.svg +1 -0
- package/dist/flags/gm.svg +1 -0
- package/dist/flags/gn.svg +1 -0
- package/dist/flags/gp.svg +1 -0
- package/dist/flags/gq.svg +1 -0
- package/dist/flags/gr.svg +1 -0
- package/dist/flags/gs.svg +1 -0
- package/dist/flags/gt.svg +1 -0
- package/dist/flags/gu.svg +1 -0
- package/dist/flags/gw.svg +1 -0
- package/dist/flags/gy.svg +1 -0
- package/dist/flags/hk.svg +1 -0
- package/dist/flags/hm.svg +1 -0
- package/dist/flags/hn.svg +1 -0
- package/dist/flags/hr.svg +1 -0
- package/dist/flags/ht.svg +1 -0
- package/dist/flags/hu.svg +1 -0
- package/dist/flags/id.svg +1 -0
- package/dist/flags/ie.svg +1 -0
- package/dist/flags/il.svg +1 -0
- package/dist/flags/im.svg +1 -0
- package/dist/flags/in.svg +1 -0
- package/dist/flags/io.svg +1 -0
- package/dist/flags/iq.svg +1 -0
- package/dist/flags/ir.svg +1 -0
- package/dist/flags/is.svg +1 -0
- package/dist/flags/it.svg +1 -0
- package/dist/flags/je.svg +1 -0
- package/dist/flags/jm.svg +1 -0
- package/dist/flags/jo.svg +1 -0
- package/dist/flags/jp.svg +1 -0
- package/dist/flags/ke.svg +1 -0
- package/dist/flags/kg.svg +1 -0
- package/dist/flags/kh.svg +1 -0
- package/dist/flags/ki.svg +1 -0
- package/dist/flags/km.svg +1 -0
- package/dist/flags/kn.svg +1 -0
- package/dist/flags/kp.svg +1 -0
- package/dist/flags/kr.svg +1 -0
- package/dist/flags/kw.svg +1 -0
- package/dist/flags/ky.svg +1 -0
- package/dist/flags/kz.svg +1 -0
- package/dist/flags/la.svg +1 -0
- package/dist/flags/lb.svg +1 -0
- package/dist/flags/lc.svg +1 -0
- package/dist/flags/li.svg +1 -0
- package/dist/flags/lk.svg +1 -0
- package/dist/flags/lr.svg +1 -0
- package/dist/flags/ls.svg +1 -0
- package/dist/flags/lt.svg +1 -0
- package/dist/flags/lu.svg +1 -0
- package/dist/flags/lv.svg +1 -0
- package/dist/flags/ly.svg +1 -0
- package/dist/flags/ma.svg +1 -0
- package/dist/flags/mc.svg +1 -0
- package/dist/flags/md.svg +1 -0
- package/dist/flags/me.svg +1 -0
- package/dist/flags/mf.svg +1 -0
- package/dist/flags/mg.svg +1 -0
- package/dist/flags/mh.svg +1 -0
- package/dist/flags/mk.svg +1 -0
- package/dist/flags/ml.svg +1 -0
- package/dist/flags/mm.svg +1 -0
- package/dist/flags/mn.svg +1 -0
- package/dist/flags/mo.svg +1 -0
- package/dist/flags/mp.svg +1 -0
- package/dist/flags/mq.svg +1 -0
- package/dist/flags/mr.svg +1 -0
- package/dist/flags/ms.svg +1 -0
- package/dist/flags/mt.svg +1 -0
- package/dist/flags/mu.svg +1 -0
- package/dist/flags/mv.svg +1 -0
- package/dist/flags/mw.svg +1 -0
- package/dist/flags/mx.svg +1 -0
- package/dist/flags/my.svg +1 -0
- package/dist/flags/mz.svg +1 -0
- package/dist/flags/na.svg +1 -0
- package/dist/flags/nc.svg +1 -0
- package/dist/flags/ne.svg +1 -0
- package/dist/flags/nf.svg +1 -0
- package/dist/flags/ng.svg +1 -0
- package/dist/flags/ni.svg +1 -0
- package/dist/flags/nl.svg +1 -0
- package/dist/flags/no.svg +1 -0
- package/dist/flags/np.svg +1 -0
- package/dist/flags/nr.svg +1 -0
- package/dist/flags/nu.svg +1 -0
- package/dist/flags/nz.svg +1 -0
- package/dist/flags/om.svg +1 -0
- package/dist/flags/pa.svg +1 -0
- package/dist/flags/pe.svg +1 -0
- package/dist/flags/pf.svg +1 -0
- package/dist/flags/pg.svg +1 -0
- package/dist/flags/ph.svg +1 -0
- package/dist/flags/pk.svg +1 -0
- package/dist/flags/pl.svg +1 -0
- package/dist/flags/pm.svg +1 -0
- package/dist/flags/pn.svg +1 -0
- package/dist/flags/pr.svg +1 -0
- package/dist/flags/ps.svg +1 -0
- package/dist/flags/pt.svg +1 -0
- package/dist/flags/pw.svg +1 -0
- package/dist/flags/py.svg +1 -0
- package/dist/flags/qa.svg +1 -0
- package/dist/flags/re.svg +1 -0
- package/dist/flags/ro.svg +1 -0
- package/dist/flags/rs.svg +1 -0
- package/dist/flags/ru.svg +1 -0
- package/dist/flags/rw.svg +1 -0
- package/dist/flags/sa.svg +1 -0
- package/dist/flags/sb.svg +1 -0
- package/dist/flags/sc.svg +1 -0
- package/dist/flags/sd.svg +1 -0
- package/dist/flags/se.svg +1 -0
- package/dist/flags/sg.svg +1 -0
- package/dist/flags/sh.svg +1 -0
- package/dist/flags/si.svg +1 -0
- package/dist/flags/sj.svg +1 -0
- package/dist/flags/sk.svg +1 -0
- package/dist/flags/sl.svg +1 -0
- package/dist/flags/sm.svg +1 -0
- package/dist/flags/sn.svg +1 -0
- package/dist/flags/so.svg +1 -0
- package/dist/flags/sr.svg +1 -0
- package/dist/flags/ss.svg +1 -0
- package/dist/flags/st.svg +1 -0
- package/dist/flags/sv.svg +1 -0
- package/dist/flags/sx.svg +1 -0
- package/dist/flags/sy.svg +1 -0
- package/dist/flags/sz.svg +1 -0
- package/dist/flags/tc.svg +1 -0
- package/dist/flags/td.svg +1 -0
- package/dist/flags/tf.svg +1 -0
- package/dist/flags/tg.svg +1 -0
- package/dist/flags/th.svg +1 -0
- package/dist/flags/tj.svg +1 -0
- package/dist/flags/tk.svg +1 -0
- package/dist/flags/tl.svg +1 -0
- package/dist/flags/tm.svg +1 -0
- package/dist/flags/tn.svg +1 -0
- package/dist/flags/to.svg +1 -0
- package/dist/flags/tr.svg +1 -0
- package/dist/flags/tt.svg +1 -0
- package/dist/flags/tv.svg +1 -0
- package/dist/flags/tw.svg +1 -0
- package/dist/flags/tz.svg +1 -0
- package/dist/flags/ua.svg +1 -0
- package/dist/flags/ug.svg +1 -0
- package/dist/flags/um.svg +1 -0
- package/dist/flags/us.svg +1 -0
- package/dist/flags/uy.svg +1 -0
- package/dist/flags/uz.svg +1 -0
- package/dist/flags/va.svg +1 -0
- package/dist/flags/vc.svg +1 -0
- package/dist/flags/ve.svg +1 -0
- package/dist/flags/vg.svg +1 -0
- package/dist/flags/vi.svg +1 -0
- package/dist/flags/vn.svg +1 -0
- package/dist/flags/vu.svg +1 -0
- package/dist/flags/wf.svg +1 -0
- package/dist/flags/ws.svg +1 -0
- package/dist/flags/xk.svg +1 -0
- package/dist/flags/ye.svg +1 -0
- package/dist/flags/yt.svg +1 -0
- package/dist/flags/za.svg +1 -0
- package/dist/flags/zm.svg +1 -0
- package/dist/flags/zw.svg +1 -0
- package/dist/forms.d.ts +242 -0
- package/dist/forms.js +41 -0
- package/dist/forms.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +163 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.json +33 -0
- package/dist/overlays.d.ts +75 -0
- package/dist/overlays.js +17 -0
- package/dist/overlays.js.map +1 -0
- package/dist/styles.css +3 -0
- package/dist/themes.css +125 -0
- package/package.json +156 -0
package/README.md
ADDED
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
# @aspprev/versi-ds
|
|
2
|
+
|
|
3
|
+
Biblioteca de componentes React e fundamentos visuais da VERSI para construir interfaces consistentes. Reúne controles de formulário, navegação, tabelas, gráficos, diálogos, feedback, tipografia, tokens, temas e recursos de acessibilidade.
|
|
4
|
+
|
|
5
|
+
Use o DS para compor a interface; a aplicação continua responsável por dados, validação de negócio, requisições, navegação e persistência das preferências do usuário.
|
|
6
|
+
|
|
7
|
+
## Por onde começar
|
|
8
|
+
|
|
9
|
+
1. Instale o pacote e as dependências das camadas que vai usar.
|
|
10
|
+
2. Importe os estilos uma vez na entrada da aplicação.
|
|
11
|
+
3. Configure fonte, tema e preferências no elemento `html`.
|
|
12
|
+
4. Comece pelos exemplos de componentes e formulários abaixo.
|
|
13
|
+
5. Consulte o Storybook para explorar variantes, estados e propriedades.
|
|
14
|
+
|
|
15
|
+
## Instalação e consumo
|
|
16
|
+
|
|
17
|
+
Depois da publicação:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @aspprev/versi-ds react react-dom
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Durante a preparação, instale o `.tgz` produzido por `npm pack` em um consumidor piloto. O pacote fornece ESM e declarações TypeScript; não fornece uma distribuição CommonJS. Suporta React/React DOM 18.2 ou 19. Node >=20.19 é necessário para desenvolvimento/build.
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import { Button } from "@aspprev/versi-ds/core";
|
|
27
|
+
import "@aspprev/versi-ds/styles.css";
|
|
28
|
+
import "@aspprev/versi-ds/themes.css"; // paletas opcionais, depois dos estilos
|
|
29
|
+
|
|
30
|
+
export function Example() {
|
|
31
|
+
return <Button>Continuar</Button>;
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
O CSS já está compilado: consumidores não precisam instalar Tailwind nem escanear o pacote. Importe-o uma vez na entrada da aplicação. Ele inclui estilos base/reset do Tailwind; carregue as personalizações da aplicação depois dos estilos do DS.
|
|
36
|
+
|
|
37
|
+
Os componentes básicos não exigem um provider global. Alguns controles precisam de contexto específico, como Formik nos formulários. Se a aplicação já usa React, preserve a versão compatível instalada em vez de adicionar uma segunda cópia.
|
|
38
|
+
|
|
39
|
+
## Entrypoints públicos
|
|
40
|
+
|
|
41
|
+
Todos os sufixos abaixo pertencem a `@aspprev/versi-ds`.
|
|
42
|
+
|
|
43
|
+
| Entrada | Conteúdo | Peers adicionais |
|
|
44
|
+
| ------------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
|
|
45
|
+
| raiz | API completa de compatibilidade | Instale todos os peers opcionais |
|
|
46
|
+
| `/core` | Botões, tipografia, superfícies, avisos, avatares, imagens, tooltips, paginação, tabelas, status, layout e primitivas acessíveis | Nenhum |
|
|
47
|
+
| `/forms` | Input/InputStandalone, InputSelect, TextArea, InputPhone, SelectCountry, SelectMulti, DatePicker, RadioGroup, RadioCardGroup | `formik`, `date-fns`, `react-number-format` |
|
|
48
|
+
| `/charts` | LazyApexChart, TimeSeriesChart, InteractiveDonutChart, TimeRangeSelector e utilitários | `apexcharts`, `react-apexcharts` |
|
|
49
|
+
| `/overlays` | Modal, InputSwitch, AccessibilityPreferencesPanel, HighContrastToggle | `@headlessui/react` |
|
|
50
|
+
| `/documents` | BoletoBarCode e DocumentItem | `jsbarcode` |
|
|
51
|
+
| `/countries` | COUNTRY_OPTIONS, PHONE_COUNTRY_OPTIONS, getCountryOptions, getCountryFlagUrl, filterCountryOptions e tipos | Nenhum |
|
|
52
|
+
| `/styles.css` | Tokens, modos, componentes e utilitários compilados | — |
|
|
53
|
+
| `/themes.css` | Presets de paletas | — |
|
|
54
|
+
|
|
55
|
+
Use as versões compatíveis declaradas em `peerDependencies`. Os peers opcionais permitem instalar somente `/core` e `/countries`; uma entrada de camada resolve todas as suas dependências estáticas, mesmo quando apenas um componente é importado. A raiz reexporta as camadas e não isola esses peers. ApexCharts é carregado dinamicamente no navegador.
|
|
56
|
+
|
|
57
|
+
Os controles integrados com Formik, incluindo SelectCountry e InputPhone, devem ficar dentro de `<Formik>`. `InputStandalone` dispensa contexto Formik, mas a entrada `/forms` ainda requer seus peers.
|
|
58
|
+
|
|
59
|
+
Instale apenas as integrações utilizadas, respeitando as faixas do manifesto:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Formulários
|
|
63
|
+
npm install formik@^2.4.9 date-fns@^4.1.0 react-number-format@^5.4.4
|
|
64
|
+
|
|
65
|
+
# Gráficos
|
|
66
|
+
npm install apexcharts@5.3.6 react-apexcharts@^1.9.0
|
|
67
|
+
|
|
68
|
+
# Diálogos e preferências
|
|
69
|
+
npm install @headlessui/react@^2.2.9
|
|
70
|
+
|
|
71
|
+
# Código de barras
|
|
72
|
+
npm install jsbarcode@^3.12.3
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Para gráficos, mantenha a versão de ApexCharts indicada: ela faz parte do contrato de dependências validado pelo pacote.
|
|
76
|
+
|
|
77
|
+
`CountrySelect`, `MultiSelect`, `PhoneInput`, `Datepicker` e `CheckBox` permanecem aliases depreciados. Prefira `SelectCountry`, `SelectMulti`, `InputPhone`, `DatePicker` e `Checkbox`. Não use deep imports de componentes em `dist` ou `src`.
|
|
78
|
+
|
|
79
|
+
## Escolhendo os componentes
|
|
80
|
+
|
|
81
|
+
| Necessidade | Componentes |
|
|
82
|
+
| ----------------------------- | ----------------------------------------------------------------------------------------------------- |
|
|
83
|
+
| Ações e navegação | Button, Pagination, PageTabsHeader |
|
|
84
|
+
| Texto e hierarquia | Typography, PageHeading, TextGroup, Divider |
|
|
85
|
+
| Estrutura | Surface, ModalCard, FormGrid, FormActions, InfoGrid, InfoItem, FilterBar |
|
|
86
|
+
| Avisos, status e carregamento | Notice, StatusBadge, DomainStatusBadge, PageState, LoadingDots, CircularLoading |
|
|
87
|
+
| Identidade e apoio visual | Avatar, ThemedImage, IconProvider, Tooltip |
|
|
88
|
+
| Texto, seleção e datas | Input, InputStandalone, InputSelect, TextArea, SelectMulti, DatePicker |
|
|
89
|
+
| Países e telefones | SelectCountry, InputPhone |
|
|
90
|
+
| Opções e valores graduais | Checkbox, RadioGroup, RadioCardGroup, InputSwitch, Slider, InputSlider |
|
|
91
|
+
| Dados tabulares | Table, MobileCardTable |
|
|
92
|
+
| Visualizações | TimeSeriesChart, InteractiveDonutChart, TimeRangeSelector, LazyApexChart |
|
|
93
|
+
| Diálogos e documentos | Modal, DocumentItem, BoletoBarCode |
|
|
94
|
+
| Acessibilidade | SkipLink, FocusNavigationMode, FormErrorNavigation, AccessibilityPreferencesPanel, HighContrastToggle |
|
|
95
|
+
|
|
96
|
+
Essa tabela organiza os componentes por finalidade. Consulte os entrypoints para escolher o import: Checkbox está em `/core`, RadioGroup em `/forms` e InputSwitch em `/overlays`, por exemplo.
|
|
97
|
+
|
|
98
|
+
## Componentes básicos na prática
|
|
99
|
+
|
|
100
|
+
```tsx
|
|
101
|
+
import {
|
|
102
|
+
Button,
|
|
103
|
+
Notice,
|
|
104
|
+
StatusBadge,
|
|
105
|
+
Surface,
|
|
106
|
+
Typography,
|
|
107
|
+
} from "@aspprev/versi-ds/core";
|
|
108
|
+
|
|
109
|
+
export function Resumo() {
|
|
110
|
+
return (
|
|
111
|
+
<Surface tone="card" padding="default" elevation="sm">
|
|
112
|
+
<Typography element="h2" semanticRole="section-title">
|
|
113
|
+
Dados do cadastro
|
|
114
|
+
</Typography>
|
|
115
|
+
<Typography semanticRole="body">
|
|
116
|
+
Confira as informações antes de continuar.
|
|
117
|
+
</Typography>
|
|
118
|
+
<StatusBadge tone="success" appearance="soft">
|
|
119
|
+
Atualizado
|
|
120
|
+
</StatusBadge>
|
|
121
|
+
<Notice type="info">
|
|
122
|
+
Você pode revisar os dados a qualquer momento.
|
|
123
|
+
</Notice>
|
|
124
|
+
<Button type="button" variant="outline" color="primary">
|
|
125
|
+
Revisar
|
|
126
|
+
</Button>
|
|
127
|
+
</Surface>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
| Componente | Propriedades frequentes |
|
|
133
|
+
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
134
|
+
| Button | `variant`: flat/outline/plain; `color`: primary/secondary/tertiary/danger/warning; `size`: small/medium/large; `width`: auto/full; `loading`, `loadingLabel`, `disabled` |
|
|
135
|
+
| Typography | `element`: elemento HTML; `semanticRole`: page-title/section-title/body/label/caption/helper; `size`, `weight`, `variant` |
|
|
136
|
+
| Surface | `tone`: card/subtle/muted/disabled/info/success/warning/danger/transparent; `padding`: none/compact/default; `elevation`: none/sm/md; `radius`: none/sm/md |
|
|
137
|
+
| Notice | `type`: info/primary/secondary/tertiary/gray/success/warning/danger; `onDismiss`, `icon`, `rounded` |
|
|
138
|
+
| StatusBadge | `tone`: neutral/info/success/warning/danger; `appearance`: outline/soft/solid; `size`: sm/md |
|
|
139
|
+
|
|
140
|
+
Em Typography, `semanticRole` define a apresentação; `element` define a semântica HTML. Use `element="h1"` para o título principal e níveis coerentes para as seções. Uma etiqueta de status precisa de texto compreensível, além da cor.
|
|
141
|
+
|
|
142
|
+
Para uma ação em andamento, use `loading` e um `loadingLabel` descritivo no Button. Dentro de formulários, declare `type="submit"` para enviar e `type="button"` para as demais ações.
|
|
143
|
+
|
|
144
|
+
## Formulários
|
|
145
|
+
|
|
146
|
+
Use Input quando o estado pertence ao Formik e InputStandalone quando a aplicação fornece `value` e `onChange` diretamente. A aplicação define a validação e o envio; o DS apresenta os controles e seus estados.
|
|
147
|
+
|
|
148
|
+
### Formulário com Formik
|
|
149
|
+
|
|
150
|
+
```tsx
|
|
151
|
+
import { Form, Formik } from "formik";
|
|
152
|
+
import { Button, FormActions, FormGrid } from "@aspprev/versi-ds/core";
|
|
153
|
+
import { Input, InputSelect } from "@aspprev/versi-ds/forms";
|
|
154
|
+
|
|
155
|
+
type Valores = { nome: string; categoria: string };
|
|
156
|
+
|
|
157
|
+
export function Cadastro({
|
|
158
|
+
salvar,
|
|
159
|
+
}: {
|
|
160
|
+
salvar: (values: Valores) => Promise<void>;
|
|
161
|
+
}) {
|
|
162
|
+
return (
|
|
163
|
+
<Formik<Valores>
|
|
164
|
+
initialValues={{ nome: "", categoria: "" }}
|
|
165
|
+
validate={(values) => {
|
|
166
|
+
const errors: Partial<Record<keyof Valores, string>> = {};
|
|
167
|
+
if (!values.nome.trim()) errors.nome = "Informe seu nome.";
|
|
168
|
+
if (!values.categoria) errors.categoria = "Selecione uma categoria.";
|
|
169
|
+
return errors;
|
|
170
|
+
}}
|
|
171
|
+
onSubmit={salvar}
|
|
172
|
+
>
|
|
173
|
+
{({ isSubmitting }) => (
|
|
174
|
+
<Form>
|
|
175
|
+
<FormGrid columns={2}>
|
|
176
|
+
<Input name="nome" label="Nome completo" autoComplete="name" />
|
|
177
|
+
<InputSelect
|
|
178
|
+
name="categoria"
|
|
179
|
+
label="Categoria"
|
|
180
|
+
options={[
|
|
181
|
+
{ label: "Pessoa física", value: "pessoa-fisica" },
|
|
182
|
+
{ label: "Pessoa jurídica", value: "pessoa-juridica" },
|
|
183
|
+
]}
|
|
184
|
+
/>
|
|
185
|
+
</FormGrid>
|
|
186
|
+
<FormActions align="end">
|
|
187
|
+
<Button
|
|
188
|
+
type="submit"
|
|
189
|
+
loading={isSubmitting}
|
|
190
|
+
loadingLabel="Salvando cadastro"
|
|
191
|
+
>
|
|
192
|
+
Salvar
|
|
193
|
+
</Button>
|
|
194
|
+
</FormActions>
|
|
195
|
+
</Form>
|
|
196
|
+
)}
|
|
197
|
+
</Formik>
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
O `name` deve corresponder à chave em `initialValues`. Os erros integrados aparecem quando o campo está marcado como tocado (`touched`). Forneça `label`; o placeholder é um exemplo de preenchimento, não substitui o rótulo.
|
|
203
|
+
|
|
204
|
+
FormGrid usa uma coluna em telas menores e aplica `columns` a partir do breakpoint `tablet` (1024 px). FormActions organiza as ações em coluna no mobile e em linha nas telas maiores.
|
|
205
|
+
|
|
206
|
+
### Campo controlado sem contexto Formik
|
|
207
|
+
|
|
208
|
+
```tsx
|
|
209
|
+
import { useState } from "react";
|
|
210
|
+
import { InputStandalone } from "@aspprev/versi-ds/forms";
|
|
211
|
+
|
|
212
|
+
export function Busca() {
|
|
213
|
+
const [termo, setTermo] = useState("");
|
|
214
|
+
return (
|
|
215
|
+
<InputStandalone
|
|
216
|
+
name="busca"
|
|
217
|
+
label="Buscar por nome"
|
|
218
|
+
value={termo}
|
|
219
|
+
onChange={(event) => setTermo(event.target.value)}
|
|
220
|
+
/>
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Input e InputStandalone oferecem máscaras como `cpf`, `cnpj`, `cep`, `phone`, `date` e `currency`. A máscara auxilia a digitação; a aplicação ainda deve validar e normalizar o valor exigido pela sua API. Use InputPhone para seleção internacional de país e DDI.
|
|
226
|
+
|
|
227
|
+
## Diálogos controlados
|
|
228
|
+
|
|
229
|
+
```tsx
|
|
230
|
+
import { useState } from "react";
|
|
231
|
+
import { Button } from "@aspprev/versi-ds/core";
|
|
232
|
+
import { Modal } from "@aspprev/versi-ds/overlays";
|
|
233
|
+
|
|
234
|
+
export function Detalhes() {
|
|
235
|
+
const [aberto, setAberto] = useState(false);
|
|
236
|
+
return (
|
|
237
|
+
<>
|
|
238
|
+
<Button type="button" onClick={() => setAberto(true)}>
|
|
239
|
+
Ver detalhes
|
|
240
|
+
</Button>
|
|
241
|
+
<Modal
|
|
242
|
+
isOpen={aberto}
|
|
243
|
+
onClose={() => setAberto(false)}
|
|
244
|
+
title="Detalhes do cadastro"
|
|
245
|
+
showIcon={false}
|
|
246
|
+
>
|
|
247
|
+
<p>Informações complementares do cadastro.</p>
|
|
248
|
+
<Button type="button" onClick={() => setAberto(false)}>
|
|
249
|
+
Fechar
|
|
250
|
+
</Button>
|
|
251
|
+
</Modal>
|
|
252
|
+
</>
|
|
253
|
+
);
|
|
254
|
+
}
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
Mantenha o estado de abertura na aplicação e forneça um título significativo. ModalCard é uma superfície visual; use Modal quando precisar do comportamento de diálogo.
|
|
258
|
+
|
|
259
|
+
## Servidor e navegador
|
|
260
|
+
|
|
261
|
+
As entradas de componentes, inclusive `/core` e a raiz, declaram `"use client"`: agrupam componentes com hooks/contexto. Podem participar de SSR em aplicações React, mas não são entradas exclusivas de React Server Components. Funções dessas entradas devem ser chamadas no contexto cliente em aplicações RSC. `/countries` permanece sem diretiva cliente e pode ser usado no servidor. Callbacks e estado devem ser definidos em um componente cliente.
|
|
262
|
+
|
|
263
|
+
## Temas, acessibilidade e fontes
|
|
264
|
+
|
|
265
|
+
Os tokens canônicos ficam em `tokens/design-system.tokens.json`. Edite essa fonte e execute `npm run tokens:generate`; não edite os arquivos gerados manualmente.
|
|
266
|
+
|
|
267
|
+
```html
|
|
268
|
+
<html
|
|
269
|
+
data-color-scheme="dark"
|
|
270
|
+
data-ds-theme="verde3"
|
|
271
|
+
data-contrast="high"
|
|
272
|
+
data-contrast-theme="dark"
|
|
273
|
+
data-font-scale="large"
|
|
274
|
+
data-motion="reduce"
|
|
275
|
+
></html>
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
| Atributo | Valores |
|
|
279
|
+
| --------------------- | ------------------------------------------------------------------------------------------------------------- |
|
|
280
|
+
| `data-color-scheme` | `light`, `dark` |
|
|
281
|
+
| `data-ds-theme` | `default`, `azul1`, `azul2`, `azul3`, `laranja1`, `laranja2`, `verde1`, `verde2`, `verde3`, `verde4`, `rosa1` |
|
|
282
|
+
| `data-contrast` | `normal`, `high` |
|
|
283
|
+
| `data-contrast-theme` | `light`, `dark` (esquema do alto contraste) |
|
|
284
|
+
| `data-font-scale` | `default`, `large`, `extra-large` |
|
|
285
|
+
| `data-motion` | `full`, `reduce` |
|
|
286
|
+
|
|
287
|
+
As preferências são controladas pelo consumidor, que também cuida da persistência e sincronização. As classes legadas das paletas continuam disponíveis. Tokens de cores usam triplets RGB para aceitar opacidade.
|
|
288
|
+
|
|
289
|
+
O pacote não distribui nem baixa fontes. Configure `--font-nunito-sans` ou sobrescreva `--font-family-base`; sem Nunito Sans disponível, o navegador usa `sans-serif`. O Storybook carrega Nunito Sans pelo Google Fonts e precisa de rede para reproduzir essa tipografia nas referências visuais existentes. O consumidor pode hospedar a própria fonte; não há dependência de `next/font`.
|
|
290
|
+
|
|
291
|
+
### Alterar o tema em execução
|
|
292
|
+
|
|
293
|
+
No navegador, atualize os atributos do elemento raiz:
|
|
294
|
+
|
|
295
|
+
```ts
|
|
296
|
+
const root = document.documentElement;
|
|
297
|
+
root.dataset.colorScheme = "dark";
|
|
298
|
+
root.dataset.dsTheme = "azul1";
|
|
299
|
+
root.dataset.contrast = "normal";
|
|
300
|
+
root.dataset.contrastTheme = "dark";
|
|
301
|
+
root.dataset.fontScale = "large";
|
|
302
|
+
root.dataset.motion = "reduce";
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
Use o `html` para que diálogos e listas renderizados fora da árvore do componente recebam o mesmo tema. Aplique as preferências conhecidas antes da primeira pintura quando houver SSR. Para acompanhar o tema do sistema, a aplicação deve resolver a preferência para `light` ou `dark`.
|
|
306
|
+
|
|
307
|
+
AccessibilityPreferencesPanel recebe `preferences` e entrega mudanças parciais em `onPreferencesChange`. Mescle essas mudanças com o estado atual e sincronize os atributos CSS. O valor `fontScale="standard"` do painel corresponde a `data-font-scale="default"`; `highContrast` corresponde a normal/high e `reduceMotion` a full/reduce. O painel não persiste nem aplica automaticamente as preferências no documento.
|
|
308
|
+
|
|
309
|
+
### Usar tokens no CSS da aplicação
|
|
310
|
+
|
|
311
|
+
Prefira tokens semânticos, que expressam a função da cor, em vez de copiar valores de uma paleta:
|
|
312
|
+
|
|
313
|
+
```css
|
|
314
|
+
.resumo-cadastro {
|
|
315
|
+
color: rgb(var(--content-primary));
|
|
316
|
+
background-color: rgb(var(--surface-page));
|
|
317
|
+
border: 1px solid rgb(var(--border-default));
|
|
318
|
+
padding: var(--spacing-md);
|
|
319
|
+
border-radius: var(--border-radius-md);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.resumo-cadastro:focus-visible {
|
|
323
|
+
outline: 2px solid rgb(var(--focus-ring));
|
|
324
|
+
outline-offset: 2px;
|
|
325
|
+
}
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Tokens de cor contêm os canais RGB, sem `#` e sem a função `rgb()`; tokens de espaço e raio já incluem a unidade. Ao personalizar cores, confira também os modos escuro e de alto contraste. Evite tamanhos de fonte fixos que impeçam a escala tipográfica do DS.
|
|
329
|
+
|
|
330
|
+
O CSS distribuído inclui as classes necessárias aos componentes, não todas as classes possíveis do Tailwind. Para layouts próprios, use seu CSS ou o build Tailwind da aplicação; o `tailwind.config.cjs` deste repositório não é um export público.
|
|
331
|
+
|
|
332
|
+
### Configurar a família tipográfica
|
|
333
|
+
|
|
334
|
+
Depois de carregar a fonte escolhida, configure sua família no CSS global. Para uma alternativa sem download de fonte:
|
|
335
|
+
|
|
336
|
+
```css
|
|
337
|
+
:root {
|
|
338
|
+
--font-nunito-sans: system-ui;
|
|
339
|
+
--font-family-base: var(--font-nunito-sans), sans-serif;
|
|
340
|
+
}
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
Configure também `--font-nunito-sans` porque Typography usa essa variável. Trocar apenas a família do `body` não alcança todos os componentes.
|
|
344
|
+
|
|
345
|
+
### Boas práticas de acessibilidade
|
|
346
|
+
|
|
347
|
+
- Use títulos em ordem, rótulos de campos e texto que explique status e erros.
|
|
348
|
+
- Mantenha foco visível e verifique Tab, Enter, Espaço e Escape nos controles interativos.
|
|
349
|
+
- Teste claro, escuro e alto contraste, além de fonte ampliada e movimento reduzido.
|
|
350
|
+
- Em ações com ícone sem texto, forneça um nome acessível, como `aria-label`.
|
|
351
|
+
- Verifique o conteúdo da aplicação com leitor de tela; a composição e os textos também influenciam a acessibilidade.
|
|
352
|
+
|
|
353
|
+
## Países e bandeiras locais
|
|
354
|
+
|
|
355
|
+
A lista contém 250 países/territórios. `COUNTRY_OPTIONS` e `PHONE_COUNTRY_OPTIONS` são a mesma lista; `getCountryOptions()` retorna uma cópia editável. Os componentes usam a lista automaticamente quando `options`/`countries` são omitidos. Por isso, `/forms` e a raiz incluem os dados; `/core` não os exige.
|
|
356
|
+
|
|
357
|
+
```tsx
|
|
358
|
+
import { Formik } from "formik";
|
|
359
|
+
import { SelectCountry, InputPhone } from "@aspprev/versi-ds/forms";
|
|
360
|
+
|
|
361
|
+
<Formik
|
|
362
|
+
initialValues={{ pais: "Brasil", telefone: { ddi: 55, ddd: "", numero: "" } }}
|
|
363
|
+
onSubmit={() => {}}
|
|
364
|
+
>
|
|
365
|
+
<form>
|
|
366
|
+
<SelectCountry
|
|
367
|
+
name="pais"
|
|
368
|
+
label="País"
|
|
369
|
+
countryList={{ mode: "include", codes: ["BR", "PT", "US"] }}
|
|
370
|
+
/>
|
|
371
|
+
<InputPhone
|
|
372
|
+
name="telefone"
|
|
373
|
+
label="Telefone"
|
|
374
|
+
countryList={{ mode: "exclude", codes: ["US"] }}
|
|
375
|
+
/>
|
|
376
|
+
</form>
|
|
377
|
+
</Formik>;
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
`countryList` aceita `all` (padrão), `include` ou `exclude`; `codes` usa ISO-2. Na lista padrão, o **valor do SelectCountry é o nome** (`Brasil`), e `cca2` contém `BR`. O payload telefônico é `{ ddi, ddd, numero }`; países com o mesmo DDI não podem ser distinguidos ao restaurar apenas esse payload. A escolha explícita preserva o ISO-2 enquanto o componente estiver montado.
|
|
381
|
+
|
|
382
|
+
Os componentes usam SVGs locais por `cca2`, inclusive em opções customizadas: `/flags/br.svg`, por exemplo. Todos os arquivos são publicados em `dist/flags`; o consumidor precisa servi-los em `/flags` no mesmo domínio. Na raiz da aplicação consumidora:
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
node --input-type=module -e "import {cpSync} from 'node:fs'; import {fileURLToPath} from 'node:url'; cpSync(fileURLToPath(new URL('./flags/', import.meta.resolve('@aspprev/versi-ds/countries'))), 'public/flags', {recursive:true})"
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
Em aplicações com subpath, configure uma rota estática para `/flags` na raiz do domínio. O campo legado `flags.png` contém metadados remotos; os componentes usam o SVG local e não requisitam esse PNG. `staticDirs` serve os SVGs no Storybook.
|
|
389
|
+
|
|
390
|
+
## Desenvolvimento e validação
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
npm install
|
|
394
|
+
npm run tokens:check
|
|
395
|
+
npm run check:governance
|
|
396
|
+
npm run typecheck
|
|
397
|
+
npm run build
|
|
398
|
+
npm test
|
|
399
|
+
npm run check:size
|
|
400
|
+
npm run build-storybook
|
|
401
|
+
npx playwright install chromium
|
|
402
|
+
npm run test:visual
|
|
403
|
+
npm run check:package
|
|
404
|
+
npm run test:package
|
|
405
|
+
npm pack --dry-run
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
`typecheck` inclui código, stories e configuração visual. `test:package` instala um tarball em diretório temporário fora do repositório, primeiro sem peers opcionais e depois com todos eles; verifica ESM, CSS, SSR e TypeScript strict/NodeNext. Requer acesso ao registro npm e limpa seu diretório temporário.
|
|
409
|
+
|
|
410
|
+
Use `npm run storybook` (6006) ou `npm run storybook:standalone` (6007). Playwright inicia seu próprio servidor; `STORYBOOK_DS_PORT` altera a porta. As referências visuais existentes são Chromium/Windows, desktop e mobile. Revise diferenças antes de usar `npm run test:visual:update`. Axe e testes automatizados não substituem revisão manual com leitor de tela.
|
|
411
|
+
|
|
412
|
+
No Storybook, abra o grupo `Design System` e escolha um componente. Use suas stories para comparar estados e variantes, e os controles para experimentar as propriedades disponíveis. A barra de ferramentas altera esquema de cores, paleta, contraste, escala da fonte e movimento. O `ThemeLab/Playground` reúne a exploração dos temas; o painel de acessibilidade ajuda na inspeção de cada cenário.
|
|
413
|
+
|
|
414
|
+
`prepack` verifica tokens, governança, TypeScript, build, tamanho e conteúdo antes de empacotar. O tarball inclui somente `dist/`, `README.md` e o `package.json` obrigatório do npm. Stories, testes, documentação interna e ferramentas não são publicados. Sourcemaps em `dist` são intencionais para diagnóstico.
|
|
415
|
+
|
|
416
|
+
## Aplicação de exemplo
|
|
417
|
+
|
|
418
|
+
O repositório inclui uma aplicação React/Vite em `examples/pilot`, com cadastro,
|
|
419
|
+
validação de formulário, países/telefone, tabela, modal e controles de aparência.
|
|
420
|
+
Ela instala o DS a partir do tarball e usa apenas os entrypoints públicos.
|
|
421
|
+
|
|
422
|
+
Na raiz do repositório:
|
|
423
|
+
|
|
424
|
+
```bash
|
|
425
|
+
npm run pilot:prepare
|
|
426
|
+
npm run pilot:dev
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
Abra `http://127.0.0.1:4175`. Para compilar e testar o piloto em produção, execute
|
|
430
|
+
`npm run test:pilot`. As instruções completas estão em `examples/pilot/README.md`.
|
|
431
|
+
O exemplo não faz parte do pacote npm e seus dados ficam somente na memória da página.
|
|
432
|
+
|
|
433
|
+
## Problemas comuns
|
|
434
|
+
|
|
435
|
+
| Sintoma | O que conferir |
|
|
436
|
+
| -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
437
|
+
| Componentes sem estilo | Importe styles.css uma vez na entrada da aplicação e verifique regras que o sobrescrevem. |
|
|
438
|
+
| Uma classe Tailwind própria não funciona | O CSS do pacote inclui as classes dos componentes; compile as classes da sua aplicação ou use CSS próprio. |
|
|
439
|
+
| Erro ao resolver Formik, Headless UI ou outra integração | Instale os peers da camada importada. A entrada raiz precisa do conjunto completo. |
|
|
440
|
+
| Erro de contexto Formik | Envolva os controles integrados em Formik; para Input controlado, use InputStandalone. |
|
|
441
|
+
| Bandeiras não aparecem | Confirme que /flags/br.svg responde no domínio da aplicação e copie dist/flags para os arquivos públicos. |
|
|
442
|
+
| SelectCountry não mostra o valor inicial | Na lista padrão, use Brasil como valor; BR é o código de filtragem ISO-2. |
|
|
443
|
+
| Diálogo ou dropdown com tema diferente | Aplique os atributos de tema no html para alcançar também os elementos renderizados fora da árvore do componente. |
|
|
444
|
+
| Fonte diferente do Storybook | Carregue a fonte desejada e configure --font-nunito-sans; a fonte não acompanha o pacote. |
|
|
445
|
+
| Erro de hooks em aplicação RSC | Defina estado e callbacks em um componente cliente; consulte a seção sobre servidor e navegador. |
|
|
446
|
+
|
|
447
|
+
## Documentação do repositório
|
|
448
|
+
|
|
449
|
+
Para aprofundar o uso e a manutenção, consulte os arquivos abaixo no checkout do projeto. Eles não acompanham o tarball npm.
|
|
450
|
+
|
|
451
|
+
| Arquivo | Conteúdo |
|
|
452
|
+
| --------------------------------- | ------------------------------------------------------- |
|
|
453
|
+
| docs/API-PUBLICA-CONTROLES.md | Contratos dos controles, estado, teclado e dependências |
|
|
454
|
+
| docs/COMPONENTES-CLIENT-SERVER.md | Fronteiras cliente e servidor |
|
|
455
|
+
| docs/THEMELAB-E-GLOBALS-CSS.md | Temas e personalização do CSS |
|
|
456
|
+
| tokens/README.md | Fonte e geração dos tokens |
|
|
457
|
+
| docs/GOVERNANCA-DESIGN-SYSTEM.md | Contribuição, versionamento e publicação |
|
|
458
|
+
| docs/EVOLUCAO-DESIGN-SYSTEM.md | Histórico de mudanças e validações |
|
|
459
|
+
|
|
460
|
+
O contexto específico do portal, o plano de migração e as pendências dessa transição ficam exclusivamente em `MIGRACAO-DO-PORTAL.md`.
|
|
461
|
+
# versi-design-system
|
|
462
|
+
|
|
463
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { HTMLAttributes, ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface DocumentItemDetail {
|
|
5
|
+
label: ReactNode;
|
|
6
|
+
value: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
interface DocumentItemProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
|
9
|
+
title: ReactNode;
|
|
10
|
+
label?: ReactNode;
|
|
11
|
+
description?: ReactNode;
|
|
12
|
+
details?: DocumentItemDetail[];
|
|
13
|
+
status?: ReactNode;
|
|
14
|
+
actions?: ReactNode;
|
|
15
|
+
illustration?: ReactNode;
|
|
16
|
+
variant?: "plain" | "subtle";
|
|
17
|
+
titleClassName?: string;
|
|
18
|
+
}
|
|
19
|
+
declare function DocumentItem({ title, label, description, details, status, actions, illustration, variant, titleClassName, className, ...rest }: DocumentItemProps): React.JSX.Element;
|
|
20
|
+
|
|
21
|
+
export { DocumentItem as D, type DocumentItemDetail as a, type DocumentItemProps as b };
|
package/dist/charts.d.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Props as Props$1 } from 'react-apexcharts';
|
|
3
|
+
|
|
4
|
+
type Props = Props$1;
|
|
5
|
+
declare function LazyApexChart(props: Props): React.JSX.Element;
|
|
6
|
+
|
|
7
|
+
type InteractiveDonutOptions = NonNullable<Props["options"]>;
|
|
8
|
+
type InteractiveDonutProps = Omit<Props, "options" | "series" | "type"> & {
|
|
9
|
+
options?: InteractiveDonutOptions;
|
|
10
|
+
series: number[];
|
|
11
|
+
colors?: string[];
|
|
12
|
+
mutedColors?: string[];
|
|
13
|
+
valueFormatter?: (value: number) => string;
|
|
14
|
+
ariaLabel?: string;
|
|
15
|
+
className?: string;
|
|
16
|
+
chartClassName?: string;
|
|
17
|
+
responsiveHeight?: boolean;
|
|
18
|
+
highContrastOverride?: boolean;
|
|
19
|
+
};
|
|
20
|
+
declare function InteractiveDonutChart({ options, series, colors, mutedColors, valueFormatter, ariaLabel, className, chartClassName, responsiveHeight, highContrastOverride, ...rest }: InteractiveDonutProps): React.JSX.Element;
|
|
21
|
+
|
|
22
|
+
type TimeSeriesChartOptions = NonNullable<Props["options"]>;
|
|
23
|
+
type TimeSeriesChartProps = Omit<Props, "options"> & {
|
|
24
|
+
options: TimeSeriesChartOptions;
|
|
25
|
+
ariaLabel: string;
|
|
26
|
+
className?: string;
|
|
27
|
+
chartClassName?: string;
|
|
28
|
+
responsiveHeight?: boolean;
|
|
29
|
+
highContrastOverride?: boolean;
|
|
30
|
+
};
|
|
31
|
+
declare function TimeSeriesChart({ options, ariaLabel, className, chartClassName, responsiveHeight, highContrastOverride, ...chartProps }: TimeSeriesChartProps): React.JSX.Element;
|
|
32
|
+
|
|
33
|
+
type TimeRangeSelectorProps<T extends string | number> = {
|
|
34
|
+
options: readonly T[];
|
|
35
|
+
selected: T;
|
|
36
|
+
onSelect: (range: T) => void;
|
|
37
|
+
ariaLabel?: string;
|
|
38
|
+
className?: string;
|
|
39
|
+
};
|
|
40
|
+
declare function TimeRangeSelector<T extends string | number>({ options, selected, onSelect, ariaLabel, className, }: TimeRangeSelectorProps<T>): React.JSX.Element;
|
|
41
|
+
|
|
42
|
+
declare function resolveInteractiveDonutColors({ count, colors, mutedColors, selectedIndex, }: {
|
|
43
|
+
count: number;
|
|
44
|
+
colors: string[];
|
|
45
|
+
mutedColors: string[];
|
|
46
|
+
selectedIndex: number | null;
|
|
47
|
+
}): string[];
|
|
48
|
+
declare function resolveRelativeDonutSelection({ currentIndex, direction, count, }: {
|
|
49
|
+
currentIndex: number | null;
|
|
50
|
+
direction: -1 | 1;
|
|
51
|
+
count: number;
|
|
52
|
+
}): number | null;
|
|
53
|
+
declare function escapeDonutTooltipText(value: unknown): string;
|
|
54
|
+
|
|
55
|
+
declare function escapeTimeSeriesTooltipText(value: unknown): string;
|
|
56
|
+
declare function normalizeTimeSeriesTooltipColor(value?: string): string;
|
|
57
|
+
type TimeSeriesTooltipRow = {
|
|
58
|
+
label: string;
|
|
59
|
+
value: string;
|
|
60
|
+
color?: string;
|
|
61
|
+
};
|
|
62
|
+
declare function buildTimeSeriesTooltip({ reference, rows, }: {
|
|
63
|
+
reference: string;
|
|
64
|
+
rows: TimeSeriesTooltipRow[];
|
|
65
|
+
}): string;
|
|
66
|
+
|
|
67
|
+
declare const getChartTheme: () => {
|
|
68
|
+
series: string[];
|
|
69
|
+
donutSeries: string[];
|
|
70
|
+
mutedSeries: string[];
|
|
71
|
+
balance: string;
|
|
72
|
+
invested: string;
|
|
73
|
+
grid: string;
|
|
74
|
+
axis: string;
|
|
75
|
+
axisBorder: string;
|
|
76
|
+
tooltipText: string;
|
|
77
|
+
neutralLine: string;
|
|
78
|
+
surface: string;
|
|
79
|
+
};
|
|
80
|
+
declare const getChartSeriesRecord: (backendColors?: Record<number, string>, count?: number) => Record<number, string>;
|
|
81
|
+
|
|
82
|
+
export { type Props as ApexChartProps, InteractiveDonutChart, type InteractiveDonutOptions, type InteractiveDonutProps, LazyApexChart, TimeRangeSelector, type TimeRangeSelectorProps, TimeSeriesChart, type TimeSeriesChartOptions, type TimeSeriesChartProps, type TimeSeriesTooltipRow, buildTimeSeriesTooltip, escapeDonutTooltipText, escapeTimeSeriesTooltipText, getChartSeriesRecord, getChartTheme, normalizeTimeSeriesTooltipColor, resolveInteractiveDonutColors, resolveRelativeDonutSelection };
|
package/dist/charts.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
InteractiveDonutChart,
|
|
4
|
+
LazyApexChart,
|
|
5
|
+
TimeRangeSelector,
|
|
6
|
+
TimeSeriesChart,
|
|
7
|
+
buildTimeSeriesTooltip,
|
|
8
|
+
escapeDonutTooltipText,
|
|
9
|
+
escapeTimeSeriesTooltipText,
|
|
10
|
+
getChartSeriesRecord,
|
|
11
|
+
getChartTheme,
|
|
12
|
+
normalizeTimeSeriesTooltipColor,
|
|
13
|
+
resolveInteractiveDonutColors,
|
|
14
|
+
resolveRelativeDonutSelection
|
|
15
|
+
} from "./chunk-6MXHE5MD.js";
|
|
16
|
+
import "./chunk-2NMEKWO5.js";
|
|
17
|
+
export {
|
|
18
|
+
InteractiveDonutChart,
|
|
19
|
+
LazyApexChart,
|
|
20
|
+
TimeRangeSelector,
|
|
21
|
+
TimeSeriesChart,
|
|
22
|
+
buildTimeSeriesTooltip,
|
|
23
|
+
escapeDonutTooltipText,
|
|
24
|
+
escapeTimeSeriesTooltipText,
|
|
25
|
+
getChartSeriesRecord,
|
|
26
|
+
getChartTheme,
|
|
27
|
+
normalizeTimeSeriesTooltipColor,
|
|
28
|
+
resolveInteractiveDonutColors,
|
|
29
|
+
resolveRelativeDonutSelection
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=charts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":";","names":[]}
|