@seniorsistemas/components-ai 0.0.0-master-d4a804fe

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 (76) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/CONTRIBUTING.md +317 -0
  3. package/README.md +161 -0
  4. package/docs/API.md +486 -0
  5. package/docs/COMPONENTS.md +272 -0
  6. package/docs/EXAMPLES.md +559 -0
  7. package/docs/MIGRATION.md +367 -0
  8. package/esm2022/lib/angular-components.module.mjs +25 -0
  9. package/esm2022/lib/components/breadcrumb/breadcrumb.component.mjs +121 -0
  10. package/esm2022/lib/components/bulk-delete-dialog/bulk-delete-dialog.component.mjs +176 -0
  11. package/esm2022/lib/components/dynamic-form/dynamic-form.component.mjs +625 -0
  12. package/esm2022/lib/components/dynamic-form/fields/dynamic-field-date.component.mjs +86 -0
  13. package/esm2022/lib/components/dynamic-form/fields/dynamic-field-dropdown.component.mjs +103 -0
  14. package/esm2022/lib/components/dynamic-form/fields/dynamic-field-lookup.component.mjs +599 -0
  15. package/esm2022/lib/components/dynamic-form/fields/dynamic-field-number.component.mjs +92 -0
  16. package/esm2022/lib/components/dynamic-form/fields/dynamic-field-text.component.mjs +163 -0
  17. package/esm2022/lib/components/dynamic-form/fields/dynamic-field-textarea.component.mjs +81 -0
  18. package/esm2022/lib/components/dynamic-form/fields/dynamic-field-wrapper.component.mjs +93 -0
  19. package/esm2022/lib/components/dynamic-form/fields/index.mjs +8 -0
  20. package/esm2022/lib/components/dynamic-form/models/dynamic-form.models.mjs +2 -0
  21. package/esm2022/lib/components/export-dialog/export-dialog.component.mjs +219 -0
  22. package/esm2022/lib/config/translation.config.mjs +70 -0
  23. package/esm2022/lib/directives/cep-mask.directive.mjs +79 -0
  24. package/esm2022/lib/directives/document-mask.directive.mjs +62 -0
  25. package/esm2022/lib/directives/phone-mask.directive.mjs +59 -0
  26. package/esm2022/lib/interceptors/api.interceptor.mjs +55 -0
  27. package/esm2022/lib/models/base-entity.interface.mjs +2 -0
  28. package/esm2022/lib/models/entity-list.config.mjs +2 -0
  29. package/esm2022/lib/pipes/translate.pipe.mjs +74 -0
  30. package/esm2022/lib/services/auth.service.mjs +169 -0
  31. package/esm2022/lib/services/cookie.service.mjs +90 -0
  32. package/esm2022/lib/services/entity.service.mjs +208 -0
  33. package/esm2022/lib/services/mask.service.mjs +121 -0
  34. package/esm2022/lib/services/permission.service.mjs +180 -0
  35. package/esm2022/lib/services/senior-token.service.mjs +209 -0
  36. package/esm2022/lib/services/theme.service.mjs +85 -0
  37. package/esm2022/lib/services/translation.service.mjs +232 -0
  38. package/esm2022/public-api.mjs +90 -0
  39. package/esm2022/seniorsistemas-components-ai.mjs +5 -0
  40. package/fesm2022/seniorsistemas-components-ai.mjs +4006 -0
  41. package/fesm2022/seniorsistemas-components-ai.mjs.map +1 -0
  42. package/index.d.ts +5 -0
  43. package/lib/angular-components.module.d.ts +13 -0
  44. package/lib/components/breadcrumb/breadcrumb.component.d.ts +23 -0
  45. package/lib/components/bulk-delete-dialog/bulk-delete-dialog.component.d.ts +46 -0
  46. package/lib/components/dynamic-form/dynamic-form.component.d.ts +97 -0
  47. package/lib/components/dynamic-form/fields/dynamic-field-date.component.d.ts +16 -0
  48. package/lib/components/dynamic-form/fields/dynamic-field-dropdown.component.d.ts +17 -0
  49. package/lib/components/dynamic-form/fields/dynamic-field-lookup.component.d.ts +52 -0
  50. package/lib/components/dynamic-form/fields/dynamic-field-number.component.d.ts +16 -0
  51. package/lib/components/dynamic-form/fields/dynamic-field-text.component.d.ts +17 -0
  52. package/lib/components/dynamic-form/fields/dynamic-field-textarea.component.d.ts +16 -0
  53. package/lib/components/dynamic-form/fields/dynamic-field-wrapper.component.d.ts +20 -0
  54. package/lib/components/dynamic-form/fields/index.d.ts +7 -0
  55. package/lib/components/dynamic-form/models/dynamic-form.models.d.ts +178 -0
  56. package/lib/components/export-dialog/export-dialog.component.d.ts +56 -0
  57. package/lib/config/translation.config.d.ts +24 -0
  58. package/lib/directives/cep-mask.directive.d.ts +13 -0
  59. package/lib/directives/document-mask.directive.d.ts +19 -0
  60. package/lib/directives/phone-mask.directive.d.ts +11 -0
  61. package/lib/interceptors/api.interceptor.d.ts +2 -0
  62. package/lib/models/base-entity.interface.d.ts +7 -0
  63. package/lib/models/entity-list.config.d.ts +161 -0
  64. package/lib/pipes/translate.pipe.d.ts +21 -0
  65. package/lib/services/auth.service.d.ts +82 -0
  66. package/lib/services/cookie.service.d.ts +31 -0
  67. package/lib/services/entity.service.d.ts +99 -0
  68. package/lib/services/mask.service.d.ts +36 -0
  69. package/lib/services/permission.service.d.ts +91 -0
  70. package/lib/services/senior-token.service.d.ts +70 -0
  71. package/lib/services/theme.service.d.ts +16 -0
  72. package/lib/services/translation.service.d.ts +54 -0
  73. package/package.json +53 -0
  74. package/public-api.d.ts +17 -0
  75. package/src/lib/styles/entity-list.shared.scss +383 -0
  76. package/src/lib/styles/index.scss +10 -0
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@seniorsistemas/components-ai",
3
+ "version": "0.0.0-master-d4a804fe",
4
+ "description": "Biblioteca de componentes reutilizáveis com IA para aplicações Angular da Senior Sistemas",
5
+ "keywords": [
6
+ "angular",
7
+ "components",
8
+ "ia",
9
+ "ai",
10
+ "senior",
11
+ "seniorsistemas",
12
+ "dynamic-form"
13
+ ],
14
+ "author": "Senior Sistemas",
15
+ "license": "MIT",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/senior-sistemas/components-ia.git"
19
+ },
20
+ "peerDependencies": {
21
+ "@angular/animations": "^18.2.0",
22
+ "@angular/cdk": "^18.2.0",
23
+ "@angular/common": "^18.2.0",
24
+ "@angular/core": "^18.2.0",
25
+ "@angular/forms": "^18.2.0",
26
+ "@angular/platform-browser": "^18.2.0",
27
+ "@angular/router": "^18.2.0",
28
+ "primeng": "^18.0.0",
29
+ "primeicons": "^7.0.0",
30
+ "@primeuix/themes": "^2.0.0",
31
+ "rxjs": "~7.8.0"
32
+ },
33
+ "dependencies": {
34
+ "tslib": "^2.3.0",
35
+ "xlsx": "^0.18.5",
36
+ "jspdf": "^2.5.2",
37
+ "jspdf-autotable": "^3.8.3"
38
+ },
39
+ "sideEffects": false,
40
+ "module": "fesm2022/seniorsistemas-components-ai.mjs",
41
+ "typings": "index.d.ts",
42
+ "exports": {
43
+ "./package.json": {
44
+ "default": "./package.json"
45
+ },
46
+ ".": {
47
+ "types": "./index.d.ts",
48
+ "esm2022": "./esm2022/seniorsistemas-components-ai.mjs",
49
+ "esm": "./esm2022/seniorsistemas-components-ai.mjs",
50
+ "default": "./fesm2022/seniorsistemas-components-ai.mjs"
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,17 @@
1
+ export * from './lib/angular-components.module';
2
+ export { EntityService, type SortMeta, type ListParams, type BodyParams, type EntityListResponse, type TranslationService as TranslationServiceInterface } from './lib/services/entity.service';
3
+ export { AuthService, type UserToken } from './lib/services/auth.service';
4
+ export { CookieService } from './lib/services/cookie.service';
5
+ export { PermissionService, type PermissionRequest, type PermissionResponse, type CheckAccessRequest, type CheckAccessResponse, type AuthServiceInterface } from './lib/services/permission.service';
6
+ export { SeniorTokenService, type SeniorTokenData } from './lib/services/senior-token.service';
7
+ export { ThemeService } from './lib/services/theme.service';
8
+ export { TranslationService, type SupportedLanguage, type TranslationLoader } from './lib/services/translation.service';
9
+ export { ExportDialogComponent, type ColumnOption } from './lib/components/export-dialog/export-dialog.component';
10
+ export { BulkDeleteDialogComponent } from './lib/components/bulk-delete-dialog/bulk-delete-dialog.component';
11
+ export { BreadcrumbComponent } from './lib/components/breadcrumb/breadcrumb.component';
12
+ export { DynamicFormComponent } from './lib/components/dynamic-form/dynamic-form.component';
13
+ export * from './lib/components/dynamic-form/models/dynamic-form.models';
14
+ export * from './lib/components/dynamic-form/fields';
15
+ export type { BaseEntity } from './lib/models/base-entity.interface';
16
+ export { TRANSLATION_CONFIG, SUPPORTED_LANGUAGES, DEFAULT_LANGUAGE, mapTokenLocaleToLanguage, getLanguageInfo, type LanguageConfig } from './lib/config/translation.config';
17
+ export { apiInterceptor } from './lib/interceptors/api.interceptor';
@@ -0,0 +1,383 @@
1
+ /* ============================================
2
+ Entity List - Shared Styles
3
+ Modern and consistent styles for all entity list pages
4
+ ============================================ */
5
+
6
+ // ============================================
7
+ // Container Principal
8
+ // ============================================
9
+ .page-container {
10
+ display: flex;
11
+ flex-direction: column;
12
+ gap: 1.5rem; // 24px - gap entre page-header, filters-panel e table-card
13
+ padding: 0;
14
+ }
15
+
16
+ // ============================================
17
+ // Page Header
18
+ // ============================================
19
+ .page-header {
20
+ .header-content {
21
+ display: flex;
22
+ justify-content: space-between;
23
+ align-items: center;
24
+ gap: 1.5rem;
25
+ padding: 1rem 0;
26
+
27
+ // Left side - Icon + Text
28
+ .header-left {
29
+ display: flex;
30
+ align-items: center;
31
+ gap: 1.25rem;
32
+ flex: 1;
33
+
34
+ .header-icon {
35
+ font-size: 2.5rem;
36
+ color: var(--p-primary-color);
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ }
41
+
42
+ .header-text {
43
+ display: flex;
44
+ flex-direction: column;
45
+ gap: 0.25rem;
46
+
47
+ .page-title {
48
+ margin: 0;
49
+ font-size: 1.75rem;
50
+ font-weight: 700;
51
+ line-height: 1.2;
52
+ color: var(--p-text-color);
53
+ letter-spacing: -0.02em;
54
+ }
55
+
56
+ .page-subtitle {
57
+ margin: 0;
58
+ font-size: 0.875rem;
59
+ font-weight: 400;
60
+ line-height: 1.4;
61
+ color: var(--p-text-muted-color);
62
+ }
63
+ }
64
+ }
65
+
66
+ // Right side - Actions
67
+ .header-actions {
68
+ display: flex;
69
+ gap: 0.75rem;
70
+ align-items: center;
71
+ }
72
+ }
73
+ }
74
+
75
+ // ============================================
76
+ // Filters Panel
77
+ // ============================================
78
+ .filters-panel {
79
+ // Custom Header
80
+ .p-panel-header {
81
+ padding: 1rem 1.25rem;
82
+ background: var(--p-card-background);
83
+ border-bottom: 1px solid var(--p-content-border-color);
84
+
85
+ .panel-header-content {
86
+ display: flex;
87
+ align-items: center;
88
+ gap: 0.75rem;
89
+ font-size: 1rem;
90
+ font-weight: 600;
91
+ color: var(--p-text-color);
92
+
93
+ i {
94
+ font-size: 1.125rem;
95
+ color: var(--p-primary-color);
96
+ }
97
+
98
+ .panel-title {
99
+ font-size: 1rem;
100
+ font-weight: 600;
101
+ }
102
+ }
103
+
104
+ .p-panel-header-icon {
105
+ color: var(--p-text-muted-color);
106
+ transition: all 0.2s ease;
107
+
108
+ &:hover {
109
+ color: var(--p-primary-color);
110
+ }
111
+ }
112
+ }
113
+
114
+ // Content
115
+ .p-panel-content {
116
+ padding: 1.5rem;
117
+ background: var(--p-card-background);
118
+ }
119
+
120
+ // Custom Footer
121
+ .p-panel-footer {
122
+ padding: 1rem 1.25rem;
123
+ border-top: 1px solid var(--p-content-border-color);
124
+
125
+ .panel-footer-actions {
126
+ display: flex;
127
+ justify-content: flex-end;
128
+ align-items: center;
129
+ gap: 0.75rem;
130
+ }
131
+ }
132
+ }
133
+
134
+ // ============================================
135
+ // Table Card
136
+ // ============================================
137
+ .table-card {
138
+ // Remove padding do body do card
139
+ .p-card-body {
140
+ padding: 0;
141
+ }
142
+
143
+ // Custom Header
144
+ .p-card-header {
145
+ padding: 1rem 1.25rem;
146
+ background: var(--p-card-background);
147
+ border-bottom: 1px solid var(--p-content-border-color);
148
+
149
+ .card-header-content {
150
+ display: flex;
151
+ justify-content: space-between;
152
+ align-items: center;
153
+ gap: 1.5rem;
154
+
155
+ // Left side - Info
156
+ .header-info {
157
+ display: flex;
158
+ align-items: center;
159
+ gap: 1.5rem;
160
+ flex: 1;
161
+
162
+ .results-count {
163
+ display: flex;
164
+ align-items: center;
165
+ gap: 0.5rem;
166
+ font-size: 0.875rem;
167
+ font-weight: 500;
168
+ color: var(--p-text-color);
169
+
170
+ i {
171
+ font-size: 1rem;
172
+ color: var(--p-primary-color);
173
+ }
174
+ }
175
+
176
+ .selected-count {
177
+ display: flex;
178
+ align-items: center;
179
+ gap: 0.5rem;
180
+ padding: 0.5rem 0.875rem;
181
+ background: var(--p-primary-color);
182
+ color: var(--p-primary-contrast-color);
183
+ border-radius: var(--p-content-border-radius);
184
+ font-size: 0.875rem;
185
+ font-weight: 600;
186
+ animation: slideIn 0.3s ease;
187
+
188
+ i {
189
+ font-size: 0.875rem;
190
+ }
191
+
192
+ .clear-selection-btn {
193
+ display: flex;
194
+ align-items: center;
195
+ justify-content: center;
196
+ width: 1.125rem;
197
+ height: 1.125rem;
198
+ padding: 0;
199
+ margin-left: 0.25rem;
200
+ background: var(--p-primary-600);
201
+ border: none;
202
+ border-radius: 50%;
203
+ cursor: pointer;
204
+ transition: all 0.2s ease;
205
+
206
+ i {
207
+ font-size: 0.625rem;
208
+ color: var(--p-primary-contrast-color);
209
+ }
210
+
211
+ &:hover {
212
+ background: var(--p-primary-700);
213
+ transform: scale(1.1);
214
+ }
215
+ }
216
+ }
217
+ }
218
+
219
+ // Right side - Actions
220
+ .header-actions {
221
+ display: flex;
222
+ gap: 0.5rem;
223
+ align-items: center;
224
+ }
225
+ }
226
+ }
227
+ }
228
+
229
+ // ============================================
230
+ // Animations
231
+ // ============================================
232
+ @keyframes slideIn {
233
+ from {
234
+ opacity: 0;
235
+ transform: translateX(-10px);
236
+ }
237
+ to {
238
+ opacity: 1;
239
+ transform: translateX(0);
240
+ }
241
+ }
242
+
243
+ @keyframes fadeInScale {
244
+ from {
245
+ opacity: 0;
246
+ transform: scale(0.8);
247
+ }
248
+ to {
249
+ opacity: 1;
250
+ transform: scale(1);
251
+ }
252
+ }
253
+
254
+ // ============================================
255
+ // Empty State
256
+ // ============================================
257
+ .empty-state {
258
+ display: flex;
259
+ flex-direction: column;
260
+ align-items: center;
261
+ justify-content: center;
262
+ padding: 4rem 2rem;
263
+ text-align: center;
264
+ gap: 1.5rem;
265
+
266
+ .empty-icon {
267
+ display: flex;
268
+ align-items: center;
269
+ justify-content: center;
270
+ width: 5rem;
271
+ height: 5rem;
272
+ background: var(--p-surface-100);
273
+ border-radius: 50%;
274
+ animation: fadeInScale 0.5s ease;
275
+
276
+ i {
277
+ font-size: 2.5rem;
278
+ color: var(--p-text-muted-color);
279
+ }
280
+ }
281
+
282
+ .empty-content {
283
+ display: flex;
284
+ flex-direction: column;
285
+ gap: 0.5rem;
286
+ max-width: 28rem;
287
+
288
+ .empty-title {
289
+ margin: 0;
290
+ font-size: 1.25rem;
291
+ font-weight: 600;
292
+ color: var(--p-text-color);
293
+ line-height: 1.4;
294
+ }
295
+
296
+ .empty-description {
297
+ margin: 0;
298
+ font-size: 0.9375rem;
299
+ font-weight: 400;
300
+ color: var(--p-text-muted-color);
301
+ line-height: 1.6;
302
+ }
303
+ }
304
+ }
305
+
306
+ // ============================================
307
+ // Responsive Design
308
+ // ============================================
309
+ @media (max-width: 768px) {
310
+ // Page Header - Mobile
311
+ .page-header {
312
+ .header-content {
313
+ flex-direction: column;
314
+ align-items: flex-start;
315
+ gap: 1rem;
316
+
317
+ .header-left {
318
+ width: 100%;
319
+
320
+ .header-icon {
321
+ font-size: 2rem;
322
+ }
323
+
324
+ .header-text {
325
+ .page-title {
326
+ font-size: 1.5rem;
327
+ }
328
+
329
+ .page-subtitle {
330
+ font-size: 0.8125rem;
331
+ }
332
+ }
333
+ }
334
+
335
+ .header-actions {
336
+ width: 100%;
337
+
338
+ .p-button {
339
+ flex: 1;
340
+ }
341
+ }
342
+ }
343
+ }
344
+
345
+ // Filters Panel - Mobile
346
+ .filters-panel {
347
+ .p-panel-footer {
348
+ .panel-footer-actions {
349
+ flex-direction: column-reverse;
350
+
351
+ .p-button {
352
+ width: 100%;
353
+ }
354
+ }
355
+ }
356
+ }
357
+
358
+ // Table Card - Mobile
359
+ .table-card {
360
+ .p-card-header {
361
+ .card-header-content {
362
+ flex-direction: column;
363
+ align-items: flex-start;
364
+ gap: 1rem;
365
+
366
+ .header-info {
367
+ width: 100%;
368
+ flex-direction: column;
369
+ align-items: flex-start;
370
+ gap: 0.75rem;
371
+ }
372
+
373
+ .header-actions {
374
+ width: 100%;
375
+
376
+ .p-button {
377
+ flex: 1;
378
+ }
379
+ }
380
+ }
381
+ }
382
+ }
383
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @senior-gestao-relacionamento/angular-components
3
+ * Estilos compartilhados
4
+ *
5
+ * Importe este arquivo no seu styles.scss principal:
6
+ * @import '@senior-gestao-relacionamento/angular-components/styles';
7
+ */
8
+
9
+ // Entity List Styles
10
+ @import './entity-list.shared.scss';