@seniorsistemas/angular-components 19.6.2 → 19.7.1

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.
Files changed (74) hide show
  1. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +2 -1
  2. package/dynamic-form/dynamic-form/components/lookup/types/lookup-models.d.ts +2 -1
  3. package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +1 -1
  4. package/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.d.ts +1 -1
  5. package/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.d.ts +1 -1
  6. package/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.d.ts +1 -2
  7. package/esm2022/alert/lib/alert/alert.component.mjs +3 -3
  8. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +1 -1
  9. package/esm2022/dynamic-form/dynamic-form/components/lookup/types/lookup-models.mjs +1 -1
  10. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
  11. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +16 -17
  12. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +20 -23
  13. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +9 -10
  14. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +9 -15
  15. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +4 -4
  16. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-number-field.mjs +1 -1
  17. package/esm2022/inline-edit/lib/inline-edit/inline-edit.module.mjs +4 -5
  18. package/esm2022/input-mask/lib/input-mask/input-mask.directive.mjs +460 -0
  19. package/esm2022/input-mask/lib/input-mask/input-mask.module.mjs +16 -0
  20. package/esm2022/input-mask/public-api.mjs +3 -0
  21. package/esm2022/input-mask/seniorsistemas-angular-components-input-mask.mjs +5 -0
  22. package/esm2022/lib/locale/fallback.mjs +3 -1
  23. package/esm2022/table/lib/table/table-column/column-number-format.utils.mjs +24 -0
  24. package/esm2022/table/lib/table/table-paging/export-number-format.mjs +104 -0
  25. package/esm2022/table/lib/table/table-paging/models/export-number-format.enum.mjs +6 -0
  26. package/esm2022/table/lib/table/table-paging/models/index.mjs +2 -2
  27. package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +58 -99
  28. package/fesm2022/seniorsistemas-angular-components-alert.mjs +2 -2
  29. package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
  30. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +53 -62
  31. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  32. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +6 -7
  33. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  34. package/fesm2022/seniorsistemas-angular-components-input-mask.mjs +480 -0
  35. package/fesm2022/seniorsistemas-angular-components-input-mask.mjs.map +1 -0
  36. package/fesm2022/seniorsistemas-angular-components-table.mjs +181 -98
  37. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  38. package/fesm2022/seniorsistemas-angular-components.mjs +2 -0
  39. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  40. package/inline-edit/lib/inline-edit/fields/inline-edit-number-field.d.ts +2 -2
  41. package/inline-edit/lib/inline-edit/inline-edit.module.d.ts +2 -2
  42. package/input-mask/README.md +183 -0
  43. package/input-mask/index.d.ts +5 -0
  44. package/input-mask/lib/input-mask/input-mask.directive.d.ts +103 -0
  45. package/input-mask/lib/input-mask/input-mask.module.d.ts +7 -0
  46. package/input-mask/public-api.d.ts +2 -0
  47. package/package.json +18 -12
  48. package/schematics/migrations/migrate-dynamic-form-v19/index.d.ts +2 -0
  49. package/schematics/migrations/migrate-dynamic-form-v19/index.js +964 -0
  50. package/schematics/migrations/migrate-dynamic-form-v19/index.js.map +1 -0
  51. package/schematics/migrations/migrate-dynamic-form-v19/index.test.d.ts +1 -0
  52. package/schematics/migrations/migrate-dynamic-form-v19/index.test.js +888 -0
  53. package/schematics/migrations/migrate-dynamic-form-v19/index.test.js.map +1 -0
  54. package/schematics/migrations/migrate-p-datepicker/index.js +4 -8
  55. package/schematics/migrations/migrate-p-datepicker/index.js.map +1 -1
  56. package/schematics/migrations/migrate-p-editor/index.d.ts +2 -0
  57. package/schematics/migrations/migrate-p-editor/index.js +301 -0
  58. package/schematics/migrations/migrate-p-editor/index.js.map +1 -0
  59. package/schematics/migrations/migrate-p-editor/index.test.d.ts +1 -0
  60. package/schematics/migrations/migrate-p-editor/index.test.js +393 -0
  61. package/schematics/migrations/migrate-p-editor/index.test.js.map +1 -0
  62. package/schematics/migrations.json +11 -0
  63. package/schematics/utils/ast-utils.d.ts +7 -0
  64. package/schematics/utils/ast-utils.js +20 -0
  65. package/schematics/utils/ast-utils.js.map +1 -1
  66. package/schematics/utils/html-utils.d.ts +6 -0
  67. package/schematics/utils/html-utils.js +15 -0
  68. package/schematics/utils/html-utils.js.map +1 -0
  69. package/table/README.md +28 -0
  70. package/table/lib/table/table-column/column-number-format.utils.d.ts +5 -0
  71. package/table/lib/table/table-paging/export-number-format.d.ts +15 -0
  72. package/table/lib/table/table-paging/models/export-number-format.enum.d.ts +4 -0
  73. package/table/lib/table/table-paging/models/index.d.ts +1 -0
  74. package/table/lib/table/table-paging/table-paging.component.d.ts +10 -27
@@ -0,0 +1,393 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const testing_1 = require("@angular-devkit/schematics/testing");
4
+ const schematics_1 = require("@angular-devkit/schematics");
5
+ const path = require("path");
6
+ const migrationsPath = path.join(__dirname, '../../migrations.json');
7
+ const runner = new testing_1.SchematicTestRunner('migrations', migrationsPath);
8
+ const MIGRATION = 'migration-v19-6-0-p-editor';
9
+ async function runMigration(files) {
10
+ const tree = new testing_1.UnitTestTree(schematics_1.Tree.empty());
11
+ for (const [filePath, content] of Object.entries(files)) {
12
+ tree.create(filePath, content);
13
+ }
14
+ return runner.runSchematic(MIGRATION, {}, tree);
15
+ }
16
+ describe('migrate-p-editor', () => {
17
+ // ─── Detecção condicional ─────────────────────────────────────────────────
18
+ it('não deve modificar arquivos quando não há p-editor no projeto', async () => {
19
+ const content = `<div><p>Olá mundo</p></div>`;
20
+ const result = await runMigration({ 'app.component.html': content });
21
+ expect(result.readText('app.component.html')).toBe(content);
22
+ });
23
+ it('não deve modificar .ts sem EditorModule nem type editor', async () => {
24
+ const content = `import { Component } from '@angular/core';\n@Component({}) export class AppComponent {}`;
25
+ const result = await runMigration({ 'app.component.ts': content });
26
+ expect(result.readText('app.component.ts')).toBe(content);
27
+ });
28
+ // ─── Tag rename ───────────────────────────────────────────────────────────
29
+ it('deve renomear a tag de abertura <p-editor> para <s-editor>', async () => {
30
+ const result = await runMigration({
31
+ 'app.component.html': `<p-editor [(ngModel)]="text"></p-editor>`,
32
+ });
33
+ expect(result.readText('app.component.html')).toContain('<s-editor');
34
+ expect(result.readText('app.component.html')).not.toContain('<p-editor');
35
+ });
36
+ it('deve renomear a tag de fechamento </p-editor> para </s-editor>', async () => {
37
+ const result = await runMigration({
38
+ 'app.component.html': `<p-editor [(ngModel)]="text"></p-editor>`,
39
+ });
40
+ expect(result.readText('app.component.html')).toContain('</s-editor>');
41
+ expect(result.readText('app.component.html')).not.toContain('</p-editor>');
42
+ });
43
+ // ─── Atributos mantidos ───────────────────────────────────────────────────
44
+ it('deve manter [style]', async () => {
45
+ const result = await runMigration({
46
+ 'app.component.html': `<p-editor [style]="{'height':'320px'}"></p-editor>`,
47
+ });
48
+ expect(result.readText('app.component.html')).toContain(`[style]="{'height':'320px'}"`);
49
+ });
50
+ it('deve manter [readonly]', async () => {
51
+ const result = await runMigration({
52
+ 'app.component.html': `<p-editor [readonly]="true"></p-editor>`,
53
+ });
54
+ expect(result.readText('app.component.html')).toContain('[readonly]="true"');
55
+ });
56
+ it('deve manter placeholder', async () => {
57
+ const result = await runMigration({
58
+ 'app.component.html': `<p-editor placeholder="Digite aqui"></p-editor>`,
59
+ });
60
+ expect(result.readText('app.component.html')).toContain('placeholder="Digite aqui"');
61
+ });
62
+ it('deve manter [formats]', async () => {
63
+ const result = await runMigration({
64
+ 'app.component.html': `<p-editor [formats]="formats"></p-editor>`,
65
+ });
66
+ expect(result.readText('app.component.html')).toContain('[formats]="formats"');
67
+ });
68
+ // ─── Atributos removidos ──────────────────────────────────────────────────
69
+ it('deve remover [modules]', async () => {
70
+ const result = await runMigration({
71
+ 'app.component.html': `<p-editor [modules]="quillModules"></p-editor>`,
72
+ });
73
+ expect(result.readText('app.component.html')).not.toContain('modules');
74
+ });
75
+ it('deve remover [bounds]', async () => {
76
+ const result = await runMigration({
77
+ 'app.component.html': `<p-editor [bounds]="el"></p-editor>`,
78
+ });
79
+ expect(result.readText('app.component.html')).not.toContain('bounds');
80
+ });
81
+ it('deve remover [scrollingContainer]', async () => {
82
+ const result = await runMigration({
83
+ 'app.component.html': `<p-editor [scrollingContainer]="container"></p-editor>`,
84
+ });
85
+ expect(result.readText('app.component.html')).not.toContain('scrollingContainer');
86
+ });
87
+ it('deve remover [debug]', async () => {
88
+ const result = await runMigration({
89
+ 'app.component.html': `<p-editor [debug]="'warn'"></p-editor>`,
90
+ });
91
+ expect(result.readText('app.component.html')).not.toContain('debug');
92
+ });
93
+ // ─── Eventos renomeados ───────────────────────────────────────────────────
94
+ it('deve renomear (onTextChange) para (textChange)', async () => {
95
+ const result = await runMigration({
96
+ 'app.component.html': `<p-editor (onTextChange)="onChange($event)"></p-editor>`,
97
+ });
98
+ expect(result.readText('app.component.html')).toContain('(textChange)="onChange($event)"');
99
+ expect(result.readText('app.component.html')).not.toContain('onTextChange');
100
+ });
101
+ it('deve renomear (onSelectionChange) para (selectionChange)', async () => {
102
+ const result = await runMigration({
103
+ 'app.component.html': `<p-editor (onSelectionChange)="onSel($event)"></p-editor>`,
104
+ });
105
+ expect(result.readText('app.component.html')).toContain('(selectionChange)="onSel($event)"');
106
+ expect(result.readText('app.component.html')).not.toContain('onSelectionChange');
107
+ });
108
+ it('deve renomear (onInit) para (editorInit)', async () => {
109
+ const result = await runMigration({
110
+ 'app.component.html': `<p-editor (onInit)="onInit($event)"></p-editor>`,
111
+ });
112
+ expect(result.readText('app.component.html')).toContain('(editorInit)="onInit($event)"');
113
+ expect(result.readText('app.component.html')).not.toContain('(onInit)');
114
+ });
115
+ // ─── Remoção de <p-header> ────────────────────────────────────────────────
116
+ it('deve remover bloco <p-header>...</p-header>', async () => {
117
+ const result = await runMigration({
118
+ 'app.component.html': `
119
+ <p-editor [(ngModel)]="text" [style]="{'height':'320px'}">
120
+ <p-header>
121
+ <span class="ql-formats">
122
+ <button class="ql-bold"></button>
123
+ </span>
124
+ </p-header>
125
+ </p-editor>`,
126
+ });
127
+ const html = result.readText('app.component.html');
128
+ expect(html).not.toContain('<p-header>');
129
+ expect(html).not.toContain('</p-header>');
130
+ expect(html).not.toContain('ql-formats');
131
+ expect(html).toContain('<s-editor');
132
+ });
133
+ it('deve remover bloco ng-template com pTemplate="header"', async () => {
134
+ const result = await runMigration({
135
+ 'app.component.html': `
136
+ <p-editor [(ngModel)]="text">
137
+ <ng-template pTemplate="header">
138
+ <button class="ql-bold"></button>
139
+ </ng-template>
140
+ </p-editor>`,
141
+ });
142
+ const html = result.readText('app.component.html');
143
+ expect(html).not.toContain('pTemplate="header"');
144
+ expect(html).not.toContain('ql-bold');
145
+ expect(html).toContain('<s-editor');
146
+ });
147
+ // ─── Template completo ────────────────────────────────────────────────────
148
+ it('deve migrar template completo com múltiplos atributos e eventos', async () => {
149
+ const result = await runMigration({
150
+ 'app.component.html': `
151
+ <p-editor
152
+ [(ngModel)]="text"
153
+ [style]="{'height':'320px'}"
154
+ [readonly]="isReadonly"
155
+ [formats]="editorFormats"
156
+ [modules]="quillConfig"
157
+ (onTextChange)="onChange($event)"
158
+ (onSelectionChange)="onSel($event)"
159
+ (onInit)="onInit($event)"
160
+ ></p-editor>`,
161
+ });
162
+ const html = result.readText('app.component.html');
163
+ expect(html).toContain('<s-editor');
164
+ expect(html).toContain('[style]="');
165
+ expect(html).toContain('[readonly]="isReadonly"');
166
+ expect(html).toContain('[formats]="editorFormats"');
167
+ expect(html).toContain('(textChange)="onChange($event)"');
168
+ expect(html).toContain('(selectionChange)="onSel($event)"');
169
+ expect(html).toContain('(editorInit)="onInit($event)"');
170
+ expect(html).not.toContain('p-editor');
171
+ expect(html).not.toContain('modules');
172
+ });
173
+ // ─── TypeScript: EditorModule → EditorComponent ───────────────────────────
174
+ it('deve remover import EditorModule do PrimeNG', async () => {
175
+ const result = await runMigration({
176
+ 'app.component.ts': `import { EditorModule } from 'primeng/editor';\n@Component({}) export class AppComponent {}`,
177
+ });
178
+ expect(result.readText('app.component.ts')).not.toContain('EditorModule');
179
+ expect(result.readText('app.component.ts')).not.toContain("from 'primeng/editor'");
180
+ });
181
+ it('deve adicionar import EditorComponent do s-editor', async () => {
182
+ const result = await runMigration({
183
+ 'app.component.ts': `import { EditorModule } from 'primeng/editor';\n@Component({}) export class AppComponent {}`,
184
+ });
185
+ const ts = result.readText('app.component.ts');
186
+ expect(ts).toContain('EditorComponent');
187
+ expect(ts).toContain('@seniorsistemas/angular-components/editor');
188
+ });
189
+ it('deve preservar outros imports do mesmo arquivo ao remover EditorModule', async () => {
190
+ const result = await runMigration({
191
+ 'app.component.ts': `import { EditorModule } from 'primeng/editor';\nimport { CommonModule } from '@angular/common';\n@Component({}) export class AppComponent {}`,
192
+ });
193
+ const ts = result.readText('app.component.ts');
194
+ expect(ts).toContain('CommonModule');
195
+ expect(ts).not.toContain('EditorModule');
196
+ });
197
+ it('deve substituir EditorModule no array imports de @NgModule', async () => {
198
+ const result = await runMigration({
199
+ 'app.module.ts': `import { EditorModule } from 'primeng/editor';\n@NgModule({ imports: [CommonModule, EditorModule] })\nexport class AppModule {}`,
200
+ });
201
+ const ts = result.readText('app.module.ts');
202
+ expect(ts).toContain('EditorComponent');
203
+ expect(ts).toContain('CommonModule');
204
+ expect(ts).not.toContain('EditorModule');
205
+ });
206
+ it('deve substituir EditorModule no array exports de @NgModule', async () => {
207
+ const result = await runMigration({
208
+ 'app.module.ts': `import { EditorModule } from 'primeng/editor';\n@NgModule({ imports: [BrowserModule], exports: [EditorModule, DropdownModule] })\nexport class AppModule {}`,
209
+ });
210
+ const ts = result.readText('app.module.ts');
211
+ expect(ts).toContain('EditorComponent');
212
+ expect(ts).toContain('DropdownModule');
213
+ expect(ts).not.toContain('EditorModule');
214
+ });
215
+ it('deve substituir EditorModule no array imports de @Component standalone', async () => {
216
+ const result = await runMigration({
217
+ 'app.component.ts': `import { EditorModule } from 'primeng/editor';\n@Component({ imports: [EditorModule], template: '' })\nexport class AppComponent {}`,
218
+ });
219
+ const ts = result.readText('app.component.ts');
220
+ expect(ts).toContain('EditorComponent');
221
+ expect(ts).not.toContain('EditorModule');
222
+ });
223
+ it('deve substituir EditorModule importado via re-export (sem import direto do primeng)', async () => {
224
+ const result = await runMigration({
225
+ 'feature.module.ts': `import { NgModule } from '@angular/core';\nimport { EditorModule } from '../shared/primeng';\n\n@NgModule({ imports: [EditorModule] })\nexport class FeatureModule {}`,
226
+ });
227
+ const ts = result.readText('feature.module.ts');
228
+ expect(ts).not.toContain('EditorModule');
229
+ expect(ts).toContain('EditorComponent');
230
+ expect(ts).toContain('@seniorsistemas/angular-components/editor');
231
+ });
232
+ // ─── DynamicForm: remoção de modules ─────────────────────────────────────
233
+ it('deve remover propriedade modules de config { type: editor }', async () => {
234
+ const result = await runMigration({
235
+ 'form.config.ts': `
236
+ const fields = [
237
+ { type: 'editor', name: 'obs', modules: { toolbar: [['bold', 'italic']] } }
238
+ ];`,
239
+ });
240
+ const ts = result.readText('form.config.ts');
241
+ expect(ts).not.toContain('modules');
242
+ expect(ts).toContain("type: 'editor'");
243
+ expect(ts).toContain("name: 'obs'");
244
+ });
245
+ it('deve remover modules quando é a última propriedade do objeto editor', async () => {
246
+ const result = await runMigration({
247
+ 'form.config.ts': `const f = { type: 'editor', name: 'x', modules: {} };`,
248
+ });
249
+ const ts = result.readText('form.config.ts');
250
+ expect(ts).not.toContain('modules');
251
+ expect(ts).toContain("type: 'editor'");
252
+ expect(ts).toContain("name: 'x'");
253
+ });
254
+ it('deve remover modules quando é a única propriedade extra (além de type)', async () => {
255
+ const result = await runMigration({
256
+ 'form.config.ts': `const f = { type: 'editor', modules: { toolbar: true } };`,
257
+ });
258
+ const ts = result.readText('form.config.ts');
259
+ expect(ts).not.toContain('modules');
260
+ });
261
+ it('não deve modificar objeto sem type editor ao ter propriedade modules', async () => {
262
+ const content = `const f = { type: 'text', name: 'x', modules: {} };`;
263
+ const result = await runMigration({
264
+ 'form.config.ts': content,
265
+ });
266
+ expect(result.readText('form.config.ts')).toBe(content);
267
+ });
268
+ // ─── DynamicForm: migração de formats ────────────────────────────────────
269
+ it('deve remover formato Quill sem equivalente e manter os suportados', async () => {
270
+ const result = await runMigration({
271
+ 'form.config.ts': `const f = { type: 'editor', formats: ['bold', 'background', 'italic'] };`,
272
+ });
273
+ const ts = result.readText('form.config.ts');
274
+ expect(ts).toContain("'bold'");
275
+ expect(ts).toContain("'italic'");
276
+ expect(ts).not.toContain("'background'");
277
+ });
278
+ it('deve mapear "bullet" para "list"', async () => {
279
+ const result = await runMigration({
280
+ 'form.config.ts': `const f = { type: 'editor', formats: ['bullet', 'bold'] };`,
281
+ });
282
+ const ts = result.readText('form.config.ts');
283
+ expect(ts).toContain("'list'");
284
+ expect(ts).not.toContain("'bullet'");
285
+ expect(ts).toContain("'bold'");
286
+ });
287
+ it('deve deduplicar quando "bullet" e "list" estão ambos presentes', async () => {
288
+ const result = await runMigration({
289
+ 'form.config.ts': `const f = { type: 'editor', formats: ['list', 'bullet', 'bold'] };`,
290
+ });
291
+ const ts = result.readText('form.config.ts');
292
+ const matches = ts.match(/'list'/g) ?? [];
293
+ expect(matches.length).toBe(1);
294
+ expect(ts).not.toContain("'bullet'");
295
+ });
296
+ it('deve remover todos os formatos não suportados', async () => {
297
+ const result = await runMigration({
298
+ 'form.config.ts': `const f = { type: 'editor', formats: ['background', 'font', 'size', 'script'] };`,
299
+ });
300
+ const ts = result.readText('form.config.ts');
301
+ expect(ts).toContain('formats: []');
302
+ });
303
+ it('não deve modificar formats com apenas valores suportados', async () => {
304
+ const content = `const f = { type: 'editor', name: 'x', formats: ['bold', 'italic'] };`;
305
+ const result = await runMigration({ 'form.config.ts': content });
306
+ expect(result.readText('form.config.ts')).toBe(content);
307
+ });
308
+ it('deve manter os formats corretos após remoção: bold, italic, underline, link', async () => {
309
+ const result = await runMigration({
310
+ 'form.config.ts': `const f = { type: 'editor', formats: ['bold', 'italic', 'underline', 'link', 'video'] };`,
311
+ });
312
+ const ts = result.readText('form.config.ts');
313
+ expect(ts).toContain("'bold'");
314
+ expect(ts).toContain("'italic'");
315
+ expect(ts).toContain("'underline'");
316
+ expect(ts).toContain("'link'");
317
+ expect(ts).not.toContain("'video'");
318
+ });
319
+ // ─── DynamicForm: modules + formats juntos ────────────────────────────────
320
+ it('deve remover modules e migrar formats no mesmo objeto', async () => {
321
+ const result = await runMigration({
322
+ 'form.config.ts': `
323
+ const fields = [
324
+ { type: 'editor', name: 'obs', formats: ['bold', 'background'], modules: { toolbar: true } }
325
+ ];`,
326
+ });
327
+ const ts = result.readText('form.config.ts');
328
+ expect(ts).not.toContain('modules');
329
+ expect(ts).not.toContain("'background'");
330
+ expect(ts).toContain("'bold'");
331
+ });
332
+ // ─── package.json ─────────────────────────────────────────────────────────
333
+ it('deve remover quill de dependencies e adicionar @tiptap/*', async () => {
334
+ const result = await runMigration({
335
+ 'app.component.html': `<p-editor></p-editor>`,
336
+ '/package.json': JSON.stringify({
337
+ dependencies: { quill: '^2.0.0', 'primeng': '^18.0.0' },
338
+ }),
339
+ });
340
+ const pkg = JSON.parse(result.readText('/package.json'));
341
+ expect(pkg.dependencies['quill']).toBeUndefined();
342
+ expect(pkg.dependencies['@tiptap/core']).toBeDefined();
343
+ expect(pkg.dependencies['@tiptap/starter-kit']).toBeDefined();
344
+ expect(pkg.dependencies['@tiptap/extension-color']).toBeDefined();
345
+ });
346
+ it('deve remover quill de devDependencies', async () => {
347
+ const result = await runMigration({
348
+ 'app.component.html': `<p-editor></p-editor>`,
349
+ '/package.json': JSON.stringify({
350
+ devDependencies: { quill: '^2.0.0' },
351
+ }),
352
+ });
353
+ const pkg = JSON.parse(result.readText('/package.json'));
354
+ expect(pkg.devDependencies['quill']).toBeUndefined();
355
+ });
356
+ it('não deve duplicar @tiptap/* já presentes no package.json', async () => {
357
+ const result = await runMigration({
358
+ 'app.component.html': `<p-editor></p-editor>`,
359
+ '/package.json': JSON.stringify({
360
+ dependencies: { '@tiptap/core': '^3.27.0' },
361
+ }),
362
+ });
363
+ const pkg = JSON.parse(result.readText('/package.json'));
364
+ const coreEntries = Object.keys(pkg.dependencies).filter((k) => k === '@tiptap/core');
365
+ expect(coreEntries.length).toBe(1);
366
+ expect(pkg.dependencies['@tiptap/core']).toBe('^3.27.0');
367
+ });
368
+ it('deve adicionar todos os 12 pacotes @tiptap/*', async () => {
369
+ const result = await runMigration({
370
+ 'app.component.html': `<p-editor></p-editor>`,
371
+ '/package.json': JSON.stringify({ dependencies: {} }),
372
+ });
373
+ const pkg = JSON.parse(result.readText('/package.json'));
374
+ const expected = [
375
+ '@tiptap/core',
376
+ '@tiptap/extension-color',
377
+ '@tiptap/extension-highlight',
378
+ '@tiptap/extension-image',
379
+ '@tiptap/extension-placeholder',
380
+ '@tiptap/extension-subscript',
381
+ '@tiptap/extension-superscript',
382
+ '@tiptap/extension-text-align',
383
+ '@tiptap/extension-text-style',
384
+ '@tiptap/extension-underline',
385
+ '@tiptap/pm',
386
+ '@tiptap/starter-kit',
387
+ ];
388
+ for (const name of expected) {
389
+ expect(pkg.dependencies[name]).toBeDefined(`${name} deve estar em dependencies`);
390
+ }
391
+ });
392
+ });
393
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../projects/angular-components/schematics/migrations/migrate-p-editor/index.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "$schema": "../../node_modules/@angular-devkit/schematics/collection-schema.json",
3
3
  "schematics": {
4
+ "migration-v19-0-0-dynamic-form": {
5
+ "version": "19.0.0",
6
+ "description": "Migra DynamicForm v18→v19: construtores → plain objects, enums → string literals, [fields] → [configs], Editor → provideEditorField(), estilos → angular.json",
7
+ "factory": "./migrations/migrate-dynamic-form-v19/index#migrate"
8
+ },
4
9
  "migration-v19-6-2-s-chips-outputs": {
5
10
  "version": "19.6.2",
6
11
  "description": "Renomeia outputs legados do s-chips: onAdd→added, onRemove→removed, onChipClick→chipClicked, onFocus→focused, onBlur→focusLost",
@@ -10,6 +15,12 @@
10
15
  "version": "19.6.0",
11
16
  "description": "Migra p-datepicker (PrimeNG) para s-datepicker (@seniorsistemas/angular-components)",
12
17
  "factory": "./migrations/migrate-p-datepicker/index#migrate"
18
+ },
19
+ "migration-v19-6-0-p-editor": {
20
+ "version": "19.6.0",
21
+ "description": "Migra p-editor (PrimeNG/Quill) para s-editor (@seniorsistemas/angular-components): renomeia tag e eventos, remove atributos sem equivalente, limpa configs legadas do DynamicForm e atualiza dependências do package.json",
22
+ "factory": "./migrations/migrate-p-editor/index#migrate"
13
23
  }
14
24
  }
15
25
  }
26
+
@@ -26,3 +26,10 @@ export declare const ngModule: {
26
26
  export declare const ngComponent: {
27
27
  replaceInImports(sourceFile: ts.SourceFile, remove: string[], add: string): AstChange[];
28
28
  };
29
+ /**
30
+ * Removes a property assignment from an object literal, handling comma cleanup.
31
+ * - Non-last property: removes from property start to next property start (trailing comma).
32
+ * - Last property: removes from previous property end to this property end (leading comma).
33
+ * - Only property: removes the property content, leaving empty braces.
34
+ */
35
+ export declare function buildRemoveObjectPropertyChange(sourceFile: ts.SourceFile, obj: ts.ObjectLiteralExpression, prop: ts.PropertyAssignment): AstChange[];
@@ -4,6 +4,7 @@ exports.ngComponent = exports.ngModule = void 0;
4
4
  exports.applyChanges = applyChanges;
5
5
  exports.buildRemoveNamedImportsChanges = buildRemoveNamedImportsChanges;
6
6
  exports.insertImportStatement = insertImportStatement;
7
+ exports.buildRemoveObjectPropertyChange = buildRemoveObjectPropertyChange;
7
8
  const ts = require("typescript");
8
9
  function applyChanges(content, changes) {
9
10
  const sorted = [...changes].sort((a, b) => b.start - a.start);
@@ -113,4 +114,23 @@ exports.ngComponent = {
113
114
  return buildReplaceDecoratorPropertyArray(sourceFile, 'Component', 'imports', remove, add);
114
115
  },
115
116
  };
117
+ /**
118
+ * Removes a property assignment from an object literal, handling comma cleanup.
119
+ * - Non-last property: removes from property start to next property start (trailing comma).
120
+ * - Last property: removes from previous property end to this property end (leading comma).
121
+ * - Only property: removes the property content, leaving empty braces.
122
+ */
123
+ function buildRemoveObjectPropertyChange(sourceFile, obj, prop) {
124
+ const props = [...obj.properties];
125
+ const idx = props.indexOf(prop);
126
+ if (props.length === 1) {
127
+ return [{ start: prop.getStart(), end: prop.getEnd(), replacement: '' }];
128
+ }
129
+ if (idx < props.length - 1) {
130
+ return [{ start: prop.getStart(), end: props[idx + 1].getStart(), replacement: '' }];
131
+ }
132
+ else {
133
+ return [{ start: props[idx - 1].getEnd(), end: prop.getEnd(), replacement: '' }];
134
+ }
135
+ }
116
136
  //# sourceMappingURL=ast-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../../../projects/angular-components/schematics/utils/ast-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ast-utils.js","sourceRoot":"","sources":["../../../projects/angular-components/schematics/utils/ast-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function escapeRegex(s: string): string;
2
+ /**
3
+ * Removes an HTML attribute and its value from a template string.
4
+ * Handles bound (`[attr]="..."`) and unbound (`attr="..."` or `attr`) forms.
5
+ */
6
+ export declare function removeHtmlAttribute(content: string, attrName: string): string;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.escapeRegex = escapeRegex;
4
+ exports.removeHtmlAttribute = removeHtmlAttribute;
5
+ function escapeRegex(s) {
6
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
7
+ }
8
+ /**
9
+ * Removes an HTML attribute and its value from a template string.
10
+ * Handles bound (`[attr]="..."`) and unbound (`attr="..."` or `attr`) forms.
11
+ */
12
+ function removeHtmlAttribute(content, attrName) {
13
+ return content.replace(new RegExp(`\\s*\\[?${escapeRegex(attrName)}\\]?(?:\\s*=\\s*"[^"]*")?`, 'g'), '');
14
+ }
15
+ //# sourceMappingURL=html-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-utils.js","sourceRoot":"","sources":["../../../projects/angular-components/schematics/utils/html-utils.ts"],"names":[],"mappings":";;AAAA,kCAEC;AAMD,kDAEC;AAVD,SAAgB,WAAW,CAAC,CAAS;IACjC,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,OAAe,EAAE,QAAgB;IACjE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,WAAW,CAAC,QAAQ,CAAC,2BAA2B,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7G,CAAC"}
package/table/README.md CHANGED
@@ -71,6 +71,18 @@ Componente de paginação customizado com suporte a ações extras e exportaçã
71
71
  | `loadAllRecords` | `() => Promise<any[]>` | `undefined` | Não | Função para carregar todos os registros para exportação |
72
72
  | `loadCurrentPageRecords` | `() => any[]` | `undefined` | Não | Função para obter os registros da página atual |
73
73
  | `loadSelectedRecords` | `() => any[]` | `undefined` | Não | Função para obter os registros selecionados |
74
+ | `exportNumberFormat` | `ExportNumberFormat` (signal input) | `undefined` | Não | Fixa o formato numérico da exportação (`raw` ou `localized`), removendo a escolha do menu |
75
+
76
+ #### Exportação: dado bruto x dado localizado
77
+
78
+ Por padrão (sem `exportNumberFormat` definido), cada opção de exportação do menu (página atual, selecionados, tudo) abre um submenu com duas escolhas:
79
+
80
+ - **Dado bruto** — exporta os valores numéricos das colunas `NUMBER`/`CURRENCY` exatamente como estão na origem (ex.: `1234.5`), sem nenhuma formatação. Indicado para integração com outros sistemas.
81
+ - **Dado localizado** — exporta os mesmos valores com o separador decimal do locale ativo do usuário (ex.: `1234,5` em pt-BR). Indicado para visualização/reimportação em planilhas do próprio usuário.
82
+
83
+ Se a coluna tiver `numberFormatOptions` configurado, o dado localizado usa esse formato (sem símbolo de moeda/percentual e sem separador de milhar, pra garantir que o valor continue sendo reconhecido como número ao reabrir em outra planilha).
84
+
85
+ Para eliminar a escolha do usuário e sempre exportar num formato fixo, defina `[exportNumberFormat]="'raw'"` ou `[exportNumberFormat]="'localized'"` — o menu volta a ter uma única ação por escopo.
74
86
 
75
87
  ### `[sNavigation]` (diretiva)
76
88
 
@@ -113,6 +125,11 @@ enum EnumColumnFieldType {
113
125
  TOKENS = 'tokens', // Lista de tokens coloridos
114
126
  LINK = 'link', // Texto clicável
115
127
  }
128
+
129
+ enum ExportNumberFormat {
130
+ Raw = 'raw', // Valor numérico original, sem formatação
131
+ Localized = 'localized', // Valor com separador decimal do locale ativo
132
+ }
116
133
  ```
117
134
 
118
135
  ## Exemplos
@@ -166,6 +183,17 @@ const colunas: Column[] = [
166
183
  </p-table>
167
184
  ```
168
185
 
186
+ ### Exportação com formato numérico fixo (sem menu de escolha)
187
+
188
+ ```html
189
+ <s-table-paging
190
+ [table]="tabela"
191
+ [totalRecords]="totalRegistros"
192
+ exportFileName="relatorio"
193
+ [exportNumberFormat]="'localized'"
194
+ ></s-table-paging>
195
+ ```
196
+
169
197
  ### Com navegação por teclado
170
198
 
171
199
  ```html
@@ -0,0 +1,5 @@
1
+ import { Column, EnumColumnFieldType } from './models';
2
+ export declare function isNumericColumnType(type?: EnumColumnFieldType): boolean;
3
+ export declare function isNumericValue(value: any): boolean;
4
+ export declare function resolveColumnNumberFormatOptions(column: Pick<Column, 'numberFormatOptions'>, rowValue: any, cellNumberFormatOptions?: Intl.NumberFormatOptions): Intl.NumberFormatOptions | undefined;
5
+ export declare function resolveColumnScale(column: Pick<Column, 'scale'>, rowValue: any, fallback?: number): number;
@@ -0,0 +1,15 @@
1
+ import { LocaleOptions } from '@seniorsistemas/angular-components/locale';
2
+ import { NumericService } from '@seniorsistemas/angular-components/numeric';
3
+ import { Column } from '../table-column/models';
4
+ export type RowValueFormatOption = {
5
+ value?: number;
6
+ options?: {
7
+ numberFormatOptions?: Intl.NumberFormatOptions;
8
+ };
9
+ };
10
+ type RowRecord = {
11
+ [key: string]: RowValueFormatOption | number | string | null | undefined;
12
+ };
13
+ export declare function mapExportValuesRaw(columns: Partial<Column>[], tableData: RowRecord[]): RowRecord[];
14
+ export declare function mapExportValuesLocalized(columns: Partial<Column>[], tableData: RowRecord[], numericService: Pick<NumericService, 'instant'>, localeOptions: LocaleOptions | undefined): RowRecord[];
15
+ export {};
@@ -0,0 +1,4 @@
1
+ export declare enum ExportNumberFormat {
2
+ Raw = "raw",
3
+ Localized = "localized"
4
+ }
@@ -1 +1,2 @@
1
1
  export type { CustomAction } from './custom-action.interface';
2
+ export * from './export-number-format.enum';