mapa-library-ui 1.4.1 → 1.5.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 +237 -2
- package/mapa-library-ui-1.5.0.tgz +0 -0
- package/package.json +2 -2
- package/mapa-library-ui-1.4.1.tgz +0 -0
package/README.md
CHANGED
|
@@ -1,3 +1,238 @@
|
|
|
1
|
-
#
|
|
1
|
+
# mapa-library-ui
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Design system do **Mapa — Human Data Science**: componentes Angular Material customizados,
|
|
4
|
+
serviços, pipes e utilitários consumidos pelo shell e por todos os remotes do ecossistema.
|
|
5
|
+
|
|
6
|
+
Construído com **ng-packagr** (Angular 20.3). Distribuído em **subpacotes** (_secondary entry points_)
|
|
7
|
+
para que cada consumidor importe apenas o que usa.
|
|
8
|
+
|
|
9
|
+
- Pacote npm: `mapa-library-ui`
|
|
10
|
+
- Versão atual: **1.5.0**
|
|
11
|
+
- Componentes: **standalone** (sem `NgModule`), prefixo de seletor `mapa-*`
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Instalação
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install mapa-library-ui
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
A biblioteca declara Angular e demais bibliotecas como **`peerDependencies`** — o consumidor é quem
|
|
22
|
+
fixa as versões. Garanta que o app já tenha (ou instale):
|
|
23
|
+
|
|
24
|
+
```jsonc
|
|
25
|
+
"@angular/animations": "^20.3.0",
|
|
26
|
+
"@angular/cdk": "^20.2.0",
|
|
27
|
+
"@angular/common": "^20.3.0",
|
|
28
|
+
"@angular/core": "^20.3.0",
|
|
29
|
+
"@angular/forms": "^20.3.0",
|
|
30
|
+
"@angular/localize": "^20.3.0",
|
|
31
|
+
"@angular/material": "^20.2.0",
|
|
32
|
+
"@angular/router": "^20.3.0",
|
|
33
|
+
"apexcharts": "^5.10.3",
|
|
34
|
+
"ng-apexcharts": "^2.3.0",
|
|
35
|
+
"ngx-mask": "^20.0.3",
|
|
36
|
+
"ngx-mat-select-search": "^8.0.4",
|
|
37
|
+
"mapa-frontend-i18n": "^2.0.0",
|
|
38
|
+
"rxjs": "^7.8.2",
|
|
39
|
+
"ts-md5": "^1.3.1"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
> A lib usa **`mapa-frontend-i18n`** para os textos de UI. Mudanças que dependem de novas strings
|
|
43
|
+
> exigem publicar o `mapa-frontend-i18n` **antes**.
|
|
44
|
+
|
|
45
|
+
### Pré-requisitos no app consumidor
|
|
46
|
+
|
|
47
|
+
- **Animações** habilitadas: `provideAnimations()` (necessário para Material).
|
|
48
|
+
- Tema do **Angular Material** configurado no app.
|
|
49
|
+
- Para datepickers, definir `MAT_DATE_FORMATS` (a lib trabalha no formato `DD/MM/YYYY`).
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Uso
|
|
54
|
+
|
|
55
|
+
Os componentes são **standalone** — importe diretamente da subpath correspondente e adicione ao
|
|
56
|
+
array `imports` do seu componente/rota:
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
import { Component } from '@angular/core';
|
|
60
|
+
import { ButtonComponent } from 'mapa-library-ui/button';
|
|
61
|
+
import { MapaTableComponent } from 'mapa-library-ui/table';
|
|
62
|
+
import { TableColumn } from 'mapa-library-ui'; // interfaces/utilitários vêm da raiz
|
|
63
|
+
|
|
64
|
+
@Component({
|
|
65
|
+
selector: 'app-example',
|
|
66
|
+
standalone: true,
|
|
67
|
+
imports: [ButtonComponent, MapaTableComponent],
|
|
68
|
+
template: `
|
|
69
|
+
<mapa-button color="primary" (clicked)="onClick()">Salvar</mapa-button>
|
|
70
|
+
<mapa-table [columns]="columns" [data]="rows"></mapa-table>
|
|
71
|
+
`,
|
|
72
|
+
})
|
|
73
|
+
export class ExampleComponent {
|
|
74
|
+
columns: TableColumn[] = [/* ... */];
|
|
75
|
+
rows = [/* ... */];
|
|
76
|
+
onClick() {}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
> **Importe sempre da subpath** (`mapa-library-ui/button`, `mapa-library-ui/table`, …).
|
|
81
|
+
> **Interfaces, elements, pipes e helpers de i18n** ficam na raiz (`mapa-library-ui`).
|
|
82
|
+
|
|
83
|
+
### Internacionalização (i18n)
|
|
84
|
+
|
|
85
|
+
Os textos padrão são **pt-BR**. Para sobrescrevê-los, há dois caminhos:
|
|
86
|
+
|
|
87
|
+
**1. Estático, na inicialização** — via provider:
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
import { provideMapaUiTexts } from 'mapa-library-ui';
|
|
91
|
+
|
|
92
|
+
export const appConfig: ApplicationConfig = {
|
|
93
|
+
providers: [
|
|
94
|
+
provideMapaUiTexts({
|
|
95
|
+
filters: { clear: 'Clear filters', submit: 'Filter' },
|
|
96
|
+
validation: { required: 'Required field' },
|
|
97
|
+
}),
|
|
98
|
+
],
|
|
99
|
+
};
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**2. Dinâmico, em runtime** — via `MapaI18nService` (ex.: troca de idioma):
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
import { MapaI18nService, PartialMapaUiTexts } from 'mapa-library-ui';
|
|
106
|
+
|
|
107
|
+
constructor(private i18n: MapaI18nService) {}
|
|
108
|
+
|
|
109
|
+
setEnglish() {
|
|
110
|
+
const texts: PartialMapaUiTexts = { common: { selectAll: 'Select all' } };
|
|
111
|
+
this.i18n.setTexts(texts); // faz merge sobre os defaults pt-BR
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Os textos informados sofrem _merge_ sobre os defaults — você só precisa enviar as chaves que quer
|
|
116
|
+
alterar. Grupos disponíveis: `common`, `filters`, `datepicker`, `capability`, `paginator`,
|
|
117
|
+
`warning`, `table`, `validation`.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Subpacotes (secondary entry points)
|
|
122
|
+
|
|
123
|
+
Cada componente/recurso é importado por uma subpath própria. Por isso os remotes compartilham a lib
|
|
124
|
+
com `includeSecondaries: true` no Module Federation.
|
|
125
|
+
|
|
126
|
+
| Subpath | Seletor / export principal | Descrição |
|
|
127
|
+
|---|---|---|
|
|
128
|
+
| `mapa-library-ui` | interfaces, `elements`, pipes, utils, helpers de i18n | Tipos e utilitários transversais (`TableColumn`, `DialogData`, `ElementOption`, `provideMapaUiTexts`, `MapaI18nService`, pipes de CPF/data…) |
|
|
129
|
+
| `/authorize` | guard de rota | Guard de autorização (`canActivate`) |
|
|
130
|
+
| `/benchmarking` | `<mapa-benchmark-chart>`, `<mapa-benchmark-indicator>` | Gráfico e indicador de benchmarking |
|
|
131
|
+
| `/breadcrumb` | `<mapa-breadcrumb>` | Trilha de navegação |
|
|
132
|
+
| `/button` | `<mapa-button>` | Botão (`color`, `disabled`, `clicked`) |
|
|
133
|
+
| `/button-icon` | `<mapa-button-icon>` | Botão com ícone |
|
|
134
|
+
| `/capability` | `<mapa-capability-*>` | Família de componentes de competências (comparativo, indicadores, intervalos, detalhe…) |
|
|
135
|
+
| `/chart` | `<mapa-chart>` | Gráfico genérico (ApexCharts) |
|
|
136
|
+
| `/checkbox` | `<mapa-checkbox>` | Checkbox |
|
|
137
|
+
| `/datepicker` | `<mapa-datepicker>` | Seletor de data |
|
|
138
|
+
| `/datepicker-range` | `<mapa-datepicker-range>` | Seletor de intervalo de datas |
|
|
139
|
+
| `/dialog` | `<mapa-dialog>`, `openDialog()` | Diálogo + helper para abrir via `MatDialog` |
|
|
140
|
+
| `/dropdown` | `<mapa-dropdown>` | Select com busca |
|
|
141
|
+
| `/dropdown-tree` | `<mapa-dropdown-tree>`, `DataNode` | Select em árvore |
|
|
142
|
+
| `/empty` | `<mapa-empty>` | Estado vazio |
|
|
143
|
+
| `/filters` | `<mapa-filters>` | Barra de filtros |
|
|
144
|
+
| `/form` | `<mapa-form>` | Formulário dinâmico |
|
|
145
|
+
| `/group-report` | `<mapa-group-report>` | Relatório de grupo |
|
|
146
|
+
| `/icon` | `<mapa-icon>` | Ícone |
|
|
147
|
+
| `/input` | `<mapa-input>` | Campo de texto |
|
|
148
|
+
| `/menu` | `<mapa-menu>`, `MenuItem`, `MenuActionEvent` | Menu de ações |
|
|
149
|
+
| `/nav-list` | `<mapa-nav-list>` | Lista de navegação |
|
|
150
|
+
| `/radio-button` | `<mapa-radio-button>` | Radio button |
|
|
151
|
+
| `/report-item` | `<mapa-report-item>` | Item de relatório |
|
|
152
|
+
| `/scale` | `<mapa-scale>`, `<mapa-progressbar>`, `<mapa-details>` | Escala e barras de progresso |
|
|
153
|
+
| `/scale-parameterization` | `<mapa-scale-parameterization>` | Parametrização de escalas |
|
|
154
|
+
| `/services` | `LoaderService` | Serviços de infraestrutura (loader) |
|
|
155
|
+
| `/slide-toggle` | `<mapa-slide-toggle>` | Slide toggle |
|
|
156
|
+
| `/svg-icon` | `<mapa-svg-icon>` | Ícone SVG inline |
|
|
157
|
+
| `/table` | `<mapa-table>`, `customPaginatorFactory` | Tabela com paginação, ordenação e seleção |
|
|
158
|
+
| `/tag` | `<mapa-tag>` | Tag/chip |
|
|
159
|
+
| `/textarea` | `<mapa-textarea>` | Área de texto |
|
|
160
|
+
| `/tooltip` | diretiva + componente de tooltip | Tooltip customizado |
|
|
161
|
+
| `/warning` | `<mapa-warning>` | Aviso/alerta |
|
|
162
|
+
|
|
163
|
+
> A lista canônica de subpaths está no campo `exports` de
|
|
164
|
+
> [`package.json`](package.json). O surface público da raiz está em
|
|
165
|
+
> [`src/public-api.ts`](src/public-api.ts).
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Desenvolvimento
|
|
170
|
+
|
|
171
|
+
Não há dev server da própria biblioteca. Desenvolve-se através do app de **documentação** (vitrine de
|
|
172
|
+
componentes) ou via `watch` + consumidor linkado.
|
|
173
|
+
|
|
174
|
+
Comandos (rodar a partir da **raiz do workspace**, `mapa-frontend-library/`):
|
|
175
|
+
|
|
176
|
+
| Comando | O que faz |
|
|
177
|
+
|---|---|
|
|
178
|
+
| `ng serve --project=documentation` | Sobe o app de documentação em **http://localhost:4444/** (hot reload) |
|
|
179
|
+
| `npm run build:lib` | Build da lib → `dist/mapa-library-ui` |
|
|
180
|
+
| `npm run watch` | Build da lib em watch (`--configuration development`) |
|
|
181
|
+
| `npm test` | Testes (Karma + Jasmine) |
|
|
182
|
+
|
|
183
|
+
### Adicionar um novo componente
|
|
184
|
+
|
|
185
|
+
1. `ng generate component components/<nome> --project=mapa-library-ui --no-standalone` (ou standalone — o padrão atual da lib é **standalone**).
|
|
186
|
+
2. Crie a pasta `src/` dentro de `components/<nome>` e mova os arquivos do componente para ela.
|
|
187
|
+
3. Copie `ng-package.json` e `public-api.ts` de um componente existente, ajustando os caminhos/exports para o novo componente.
|
|
188
|
+
4. Registre o componente no `exports` de [`package.json`](package.json) (novo secondary entry point) e, se for surface público da raiz, em [`src/public-api.ts`](src/public-api.ts).
|
|
189
|
+
5. Documente o componente no projeto `documentation` (adicione a entrada no `drawer` e a rota).
|
|
190
|
+
|
|
191
|
+
> Exports só ficam acessíveis ao consumidor se entrarem no **secondary entry point** correto
|
|
192
|
+
> (`ng-package.json` + `public-api.ts`) **e** no `exports` do `package.json`.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Build & publicação
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# 1. Suba a versão em projects/mapa-library-ui/package.json
|
|
200
|
+
# 2. Build
|
|
201
|
+
npm run build:lib
|
|
202
|
+
|
|
203
|
+
# 3. Publique a partir do artefato gerado
|
|
204
|
+
npm publish ./dist/mapa-library-ui
|
|
205
|
+
|
|
206
|
+
# 4. Suba a dependência nos consumidores (shell + remotes)
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
> A publicação também roda na pipeline (`azure-pipelines.yml`) ao integrar em `develop`:
|
|
210
|
+
> build → `npm pack` → publish no registro NPM da Mapa.
|
|
211
|
+
|
|
212
|
+
Ao depender de novas strings de UI, **publique `mapa-frontend-i18n` antes** de publicar esta lib.
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Fluxo de trabalho (branch / PR)
|
|
217
|
+
|
|
218
|
+
Branch a partir de `develop` (`feature/{taskid}` ou `bugfix/{taskid}`) → PR para `develop` com o work
|
|
219
|
+
item vinculado. Lembre de **publicar a nova versão** quando o consumo depender dela.
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Estrutura
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
projects/mapa-library-ui/
|
|
227
|
+
├── src/
|
|
228
|
+
│ ├── public-api.ts # surface público da raiz
|
|
229
|
+
│ ├── <subpath>.ts # reexport de cada secondary entry point
|
|
230
|
+
│ └── lib/
|
|
231
|
+
│ ├── components/<nome>/ # componentes (cada um com ng-package.json + public-api.ts)
|
|
232
|
+
│ └── core/ # elements, interfaces, services, pipes, directives, i18n, utils
|
|
233
|
+
├── ng-package.json # config ng-packagr (saída: dist/mapa-library-ui)
|
|
234
|
+
├── package.json # nome/versão, peerDependencies, exports (subpaths)
|
|
235
|
+
└── tsconfig.lib(.prod).json
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
O app de demonstração fica em `projects/documentation/` (porta **4444**).
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mapa-library-ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/animations": "^20.3.0",
|
|
6
6
|
"@angular/cdk": "^20.2.0",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"@angular/material": "^20.2.0",
|
|
12
12
|
"@angular/router": "^20.3.0",
|
|
13
13
|
"apexcharts": "^5.10.3",
|
|
14
|
-
"mapa-frontend-i18n": "^
|
|
14
|
+
"mapa-frontend-i18n": "^2.0.0",
|
|
15
15
|
"ng-apexcharts": "^2.3.0",
|
|
16
16
|
"ngx-mask": "^20.0.3",
|
|
17
17
|
"ngx-mat-select-search": "^8.0.4",
|
|
Binary file
|