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 CHANGED
@@ -1,3 +1,238 @@
1
- # MapaLibraryUi
1
+ # mapa-library-ui
2
2
 
3
- Library of components used for Mapa - Human Data Science
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.4.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": "^1.3.4",
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