@dev-tcloud/tcloud-ui 6.10.2 → 6.12.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.
Files changed (28) hide show
  1. package/fesm2022/dev-tcloud-tcloud-ui.mjs +861 -44
  2. package/fesm2022/dev-tcloud-tcloud-ui.mjs.map +1 -1
  3. package/lib/_directives/tcloud-ui-icon-button/tcloud-ui-icon-button.directive.d.ts +12 -0
  4. package/lib/_directives/tcloud-ui-radio/tcloud-ui-radio.directive.d.ts +6 -0
  5. package/lib/_modules/tcloud-ui-alert-banner/tcloud-ui-alert-banner.component.d.ts +14 -0
  6. package/lib/_modules/tcloud-ui-container/components/tcloud-ui-container-col/tcloud-ui-container-col.component.d.ts +1 -1
  7. package/lib/_modules/tcloud-ui-container/components/tcloud-ui-container-content/tcloud-ui-container-content.component.d.ts +1 -1
  8. package/lib/_modules/tcloud-ui-container/tcloud-ui-container.component.d.ts +1 -3
  9. package/lib/_modules/tcloud-ui-filter-bar/tcloud-ui-filter-bar.component.d.ts +11 -0
  10. package/lib/_modules/tcloud-ui-legend/tcloud-ui-legend.component.d.ts +7 -0
  11. package/lib/_modules/tcloud-ui-search-bar/tcloud-ui-search-bar.component.d.ts +8 -0
  12. package/lib/_modules/tcloud-ui-search-input/tcloud-ui-search-input.component.d.ts +17 -0
  13. package/lib/_modules/tcloud-ui-sub-navbar/component/tcloud-ui-sub-navbar-group/tcloud-ui-sub-navbar-group.component.d.ts +15 -0
  14. package/lib/_modules/tcloud-ui-sub-navbar/tcloud-ui-sub-navbar.component.d.ts +1 -3
  15. package/lib/_modules/tcloud-ui-upload-area/tcloud-ui-upload-area.component.d.ts +85 -0
  16. package/lib/_pipes/actions/product-action.pipe.d.ts +8 -0
  17. package/lib/_pipes/index.d.ts +2 -0
  18. package/lib/_pipes/topology/index.d.ts +4 -0
  19. package/lib/_pipes/topology/topology-environment.pipe.d.ts +7 -0
  20. package/lib/_pipes/topology/topology-product.pipe.d.ts +8 -0
  21. package/lib/_pipes/topology/topology-region.pipe.d.ts +7 -0
  22. package/lib/_pipes/topology/topology-status.pipe.d.ts +7 -0
  23. package/lib/tcloud-ui.module.d.ts +39 -30
  24. package/package.json +1 -1
  25. package/public-api.d.ts +9 -0
  26. package/scss/components/custom/_tcloud-ui-radio.scss +79 -0
  27. package/scss/components/custom/_tcloud-ui-sub-navbar.scss +34 -0
  28. package/scss/components/styles.scss +3 -1
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Component, EventEmitter, Input, Output, forwardRef, ViewChild, InjectionToken, Optional, Inject, input, effect, Directive, Pipe, ViewEncapsulation, signal, inject, SkipSelf, HostListener, ChangeDetectorRef, ChangeDetectionStrategy, computed, ApplicationRef, output, model, ContentChildren, NgModule, makeEnvironmentProviders, viewChild } from '@angular/core';
2
+ import { Injectable, Component, EventEmitter, Input, Output, forwardRef, ViewChild, InjectionToken, Optional, Inject, input, effect, Directive, Pipe, ViewEncapsulation, signal, inject, SkipSelf, ChangeDetectionStrategy, HostListener, ChangeDetectorRef, computed, ApplicationRef, output, model, ContentChildren, viewChild, NgModule, makeEnvironmentProviders } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule, DatePipe, DOCUMENT } from '@angular/common';
5
5
  import { Subject, Subscription, BehaviorSubject, debounceTime, distinctUntilChanged, map } from 'rxjs';
@@ -1190,6 +1190,197 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImpo
1190
1190
  }]
1191
1191
  }] });
1192
1192
 
1193
+ class TopologyStatusPipe {
1194
+ transform(value, ...args) {
1195
+ if (!value || !value?.length)
1196
+ return value;
1197
+ switch (value.toLowerCase()) {
1198
+ case 'error':
1199
+ return 'Indisponível';
1200
+ case 'ok':
1201
+ case 'done':
1202
+ return 'Disponível';
1203
+ case 'deleting':
1204
+ return 'Apagando...';
1205
+ case 'stopped':
1206
+ return 'Desligado';
1207
+ case 'new':
1208
+ return 'Em criação';
1209
+ case 'dr_new':
1210
+ return 'Configurando DR';
1211
+ case 'dr_done':
1212
+ return 'DR configurado';
1213
+ case 'maintenance':
1214
+ return 'Em manutenção';
1215
+ case 'migrating':
1216
+ return 'Migrando';
1217
+ default:
1218
+ return value;
1219
+ }
1220
+ }
1221
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TopologyStatusPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1222
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.19", ngImport: i0, type: TopologyStatusPipe, isStandalone: true, name: "topologyStatus" }); }
1223
+ }
1224
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TopologyStatusPipe, decorators: [{
1225
+ type: Pipe,
1226
+ args: [{
1227
+ name: 'topologyStatus',
1228
+ standalone: true,
1229
+ }]
1230
+ }] });
1231
+
1232
+ class TopologyRegionPipe {
1233
+ transform(value, ...args) {
1234
+ switch (value) {
1235
+ case 'zone_1':
1236
+ return 'TESP01';
1237
+ case 'zone_2':
1238
+ return 'TESP02';
1239
+ case 'tesp03':
1240
+ return "TESP03";
1241
+ case 'tesp04':
1242
+ return "TESP04";
1243
+ case 'tesp05':
1244
+ return "TESP05";
1245
+ case 'tece01':
1246
+ return "TECE01";
1247
+ case 'tesp06':
1248
+ return "TESP06";
1249
+ default:
1250
+ return value;
1251
+ }
1252
+ }
1253
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TopologyRegionPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1254
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.19", ngImport: i0, type: TopologyRegionPipe, isStandalone: true, name: "topologyRegion" }); }
1255
+ }
1256
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TopologyRegionPipe, decorators: [{
1257
+ type: Pipe,
1258
+ args: [{
1259
+ name: 'topologyRegion',
1260
+ standalone: true,
1261
+ }]
1262
+ }] });
1263
+
1264
+ class TopologyEnvironmentPipe {
1265
+ transform(value, ...args) {
1266
+ switch (value) {
1267
+ case 'production':
1268
+ return 'Produção';
1269
+ case 'qa':
1270
+ return 'Qualidade';
1271
+ case 'development':
1272
+ return 'Desenvolvimento';
1273
+ case 'troubleshoot':
1274
+ return 'Troubleshoot';
1275
+ case 'audit':
1276
+ return 'Auditoria';
1277
+ case 'historical':
1278
+ return 'Histórico';
1279
+ default:
1280
+ return 'Ambiente Indefinido';
1281
+ }
1282
+ }
1283
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TopologyEnvironmentPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1284
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.19", ngImport: i0, type: TopologyEnvironmentPipe, isStandalone: true, name: "topologyEnvironment" }); }
1285
+ }
1286
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TopologyEnvironmentPipe, decorators: [{
1287
+ type: Pipe,
1288
+ args: [{
1289
+ name: 'topologyEnvironment',
1290
+ standalone: true,
1291
+ }]
1292
+ }] });
1293
+
1294
+ class TopologyProductPipe {
1295
+ transform(value, origin) {
1296
+ switch (value) {
1297
+ case '2c': return 'Carol Connect';
1298
+ case 'bioenergia': return 'Bioenergia';
1299
+ case 'consinco': return 'Consinco';
1300
+ case 'datasul': return 'Datasul';
1301
+ case 'fluig': return 'Fluig';
1302
+ case 'iaas': return 'IaaS';
1303
+ case 'license_server': return 'License Server';
1304
+ case 'logix': return 'Logix';
1305
+ case 'paas': return 'Outros';
1306
+ case 'pep': return 'PEP';
1307
+ case 'protheus': return this.getProtheusSubproduct(value, origin);
1308
+ case 'pvi': return 'PVI';
1309
+ case 'rm': return 'RM';
1310
+ case 'rms': return 'RMS';
1311
+ case 'sfa': return 'SFA';
1312
+ case 'simba': return '';
1313
+ case 'sisjuri': return 'Sisjuri';
1314
+ case 'smarterp': return 'Smart ERP';
1315
+ case 'smartrm': return 'RM';
1316
+ case 'smartrm_cluster': return 'Smart RM Cluster';
1317
+ case 'smartrm_control': return 'Smart RM Control';
1318
+ case 'taf': return 'TAF';
1319
+ case 'totvsagro': return 'TOTVS Agro';
1320
+ case 'totvsmoda': return 'TOTVS Moda';
1321
+ case 'treports': return 'TReports';
1322
+ case 'tss': return 'TSS';
1323
+ case 'winthor': return 'Winthor';
1324
+ default: return value;
1325
+ }
1326
+ }
1327
+ getProtheusSubproduct(value, origin) {
1328
+ if (origin === 'smarterp')
1329
+ return 'Smart ERP';
1330
+ return 'Protheus';
1331
+ }
1332
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TopologyProductPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1333
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.19", ngImport: i0, type: TopologyProductPipe, isStandalone: true, name: "topologyProduct" }); }
1334
+ }
1335
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TopologyProductPipe, decorators: [{
1336
+ type: Pipe,
1337
+ args: [{
1338
+ name: 'topologyProduct',
1339
+ standalone: true,
1340
+ }]
1341
+ }] });
1342
+
1343
+ class ProductActionPipe {
1344
+ transform(value, type = 'single') {
1345
+ if (type === 'bulk') {
1346
+ return this.getTranslatedAction(value);
1347
+ }
1348
+ const actions = value.split('&');
1349
+ if (actions?.length > 1) {
1350
+ const translatedActions = actions.map((action) => this.getTranslatedAction(action)).join(' - ');
1351
+ return translatedActions;
1352
+ }
1353
+ return value;
1354
+ }
1355
+ getTranslatedAction(action) {
1356
+ action = action.trim();
1357
+ switch (action) {
1358
+ case 'update-release':
1359
+ case 'update_release':
1360
+ return 'Atualizar versão da release';
1361
+ case 'update-patch':
1362
+ case 'update_patch':
1363
+ return 'Atualizar versão do pacote';
1364
+ case 'update-database-dump':
1365
+ case 'update-global-dump':
1366
+ case 'update_global_dump':
1367
+ return 'Dump global';
1368
+ case 'update-patch & update-release':
1369
+ return 'Atualizar pacote/release';
1370
+ default:
1371
+ return action;
1372
+ }
1373
+ }
1374
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: ProductActionPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1375
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.19", ngImport: i0, type: ProductActionPipe, isStandalone: true, name: "productAction" }); }
1376
+ }
1377
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: ProductActionPipe, decorators: [{
1378
+ type: Pipe,
1379
+ args: [{
1380
+ name: 'productAction',
1381
+ }]
1382
+ }] });
1383
+
1193
1384
  var translation = {
1194
1385
  ptBR: {
1195
1386
  days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"],
@@ -5331,13 +5522,10 @@ class TCloudUiContainerComponent {
5331
5522
  constructor() {
5332
5523
  this._containerService = inject(ContainerService);
5333
5524
  this._expanded = false;
5334
- this.expandedChange = new EventEmitter();
5335
5525
  }
5336
5526
  set expanded(v) {
5337
- // coerce to boolean and only propagate when changed
5338
- const newVal = !!v;
5339
- if (this._expanded !== newVal) {
5340
- this._expanded = newVal;
5527
+ if (this._expanded !== v) {
5528
+ this._expanded = v;
5341
5529
  this.to_expanded();
5342
5530
  }
5343
5531
  }
@@ -5345,28 +5533,29 @@ class TCloudUiContainerComponent {
5345
5533
  // optional manual trigger kept for backward-compatibility
5346
5534
  to_expanded() {
5347
5535
  this._containerService.set_expanded_signal(this._expanded);
5348
- this.expandedChange.emit(this._expanded);
5349
5536
  }
5350
5537
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5351
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", type: TCloudUiContainerComponent, isStandalone: true, selector: "tcloud-ui-container", inputs: { expanded: "expanded" }, outputs: { expandedChange: "expandedChange" }, providers: [ContainerService], ngImport: i0, template: "<div class=\"tcloud-ui-container f-family\" [class.container-expanded]=\"expanded\">\n <ng-content></ng-content> \n</div>", styles: [".tcloud-ui-container{display:flex;width:100%}\n"] }); }
5538
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", type: TCloudUiContainerComponent, isStandalone: true, selector: "tcloud-ui-container", inputs: { expanded: "expanded" }, providers: [ContainerService], ngImport: i0, template: "<div class=\"tcloud-ui-container f-family\" [class.container-expanded]=\"expanded\">\n <ng-content></ng-content> \n</div>", styles: [".tcloud-ui-container{display:flex;width:100%}\n"] }); }
5352
5539
  }
5353
5540
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiContainerComponent, decorators: [{
5354
5541
  type: Component,
5355
5542
  args: [{ selector: 'tcloud-ui-container', imports: [], providers: [ContainerService], template: "<div class=\"tcloud-ui-container f-family\" [class.container-expanded]=\"expanded\">\n <ng-content></ng-content> \n</div>", styles: [".tcloud-ui-container{display:flex;width:100%}\n"] }]
5356
5543
  }], propDecorators: { expanded: [{
5357
5544
  type: Input
5358
- }], expandedChange: [{
5359
- type: Output
5360
5545
  }] } });
5361
5546
 
5362
5547
  class TCloudUiContainerColComponent {
5363
5548
  constructor(parentService) {
5549
+ this.expanded = true;
5364
5550
  this.fixed = false;
5365
5551
  this._containerService = parentService || inject(ContainerService);
5552
+ effect(() => {
5553
+ this.expanded = this._containerService.expanded_signal();
5554
+ });
5366
5555
  }
5367
- get expanded() {
5368
- return this._containerService.expanded_signal();
5369
- }
5556
+ // get expanded(){
5557
+ // return this._containerService.expanded_signal();
5558
+ // }
5370
5559
  toggle(expanded) {
5371
5560
  if (expanded) {
5372
5561
  this._containerService.set_expanded_signal(expanded);
@@ -5390,17 +5579,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImpo
5390
5579
 
5391
5580
  class TCloudUiContainerContentComponent {
5392
5581
  constructor(parentService) {
5582
+ this.expanded = true;
5393
5583
  this._containerService = parentService || inject(ContainerService);
5394
- }
5395
- get expanded() {
5396
- return this._containerService.expanded_signal();
5584
+ effect(() => {
5585
+ this.expanded = this._containerService.expanded_signal();
5586
+ });
5397
5587
  }
5398
5588
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiContainerContentComponent, deps: [{ token: ContainerService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
5399
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", type: TCloudUiContainerContentComponent, isStandalone: true, selector: "tcloud-ui-container-content", providers: [ContainerService], ngImport: i0, template: "\n<div class=\"tcloud-ui-container-content\" \n [class.content-expanded]=\"expanded\"\n [class.content-not-expanded]=\"!expanded\">\n <ng-content></ng-content>\n</div>", styles: [".tcloud-ui-container-content{flex-grow:1;padding-left:24px}.content-not-expanded{padding-left:76px}\n", ".tcloud-ui-container{display:flex;width:100%}\n"] }); }
5589
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", type: TCloudUiContainerContentComponent, isStandalone: true, selector: "tcloud-ui-container-content", providers: [ContainerService], ngImport: i0, template: "\n<div class=\"tcloud-ui-container-content\" \n [class.content-expanded]=\"expanded\"\n [class.content-not-expanded]=\"!expanded\">\n <ng-content></ng-content>\n</div>", styles: [":host{flex-grow:1;padding-left:24px}.content-not-expanded{padding-left:52px}\n", ".tcloud-ui-container{display:flex;width:100%}\n"] }); }
5400
5590
  }
5401
5591
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiContainerContentComponent, decorators: [{
5402
5592
  type: Component,
5403
- args: [{ selector: 'tcloud-ui-container-content', imports: [], providers: [ContainerService], template: "\n<div class=\"tcloud-ui-container-content\" \n [class.content-expanded]=\"expanded\"\n [class.content-not-expanded]=\"!expanded\">\n <ng-content></ng-content>\n</div>", styles: [".tcloud-ui-container-content{flex-grow:1;padding-left:24px}.content-not-expanded{padding-left:76px}\n", ".tcloud-ui-container{display:flex;width:100%}\n"] }]
5593
+ args: [{ selector: 'tcloud-ui-container-content', imports: [], providers: [ContainerService], template: "\n<div class=\"tcloud-ui-container-content\" \n [class.content-expanded]=\"expanded\"\n [class.content-not-expanded]=\"!expanded\">\n <ng-content></ng-content>\n</div>", styles: [":host{flex-grow:1;padding-left:24px}.content-not-expanded{padding-left:52px}\n", ".tcloud-ui-container{display:flex;width:100%}\n"] }]
5404
5594
  }], ctorParameters: () => [{ type: ContainerService, decorators: [{
5405
5595
  type: Optional
5406
5596
  }, {
@@ -5469,6 +5659,490 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImpo
5469
5659
  ], template: "<nav aria-label=\"breadcrumb\" class=\"tcloud-ui-breadcrumb\">\n <ol class=\"tcloud-ui-breadcrumb-list\">\n <!-- Link para o Dashboard -->\n <li class=\"tcloud-ui-breadcrumb-item\">\n <a [routerLink]=\"['/dashboard']\"><i class=\"fa-light fa-house-blank\"></i>\n @if (breadcrumbs.length > 0)\n {\n <i class=\"fa-light fa-chevron-right\"></i>\n }\n @else\n {\n P\u00E1gina inicial\n }\n </a>\n </li>\n\n <!-- Itera\u00E7\u00E3o sobre os itens do breadcrumb -->\n <li\n *ngFor=\"let breadcrumb of breadcrumbs; let i = index; let last = last\"\n class=\"tcloud-ui-breadcrumb-item\"\n [ngClass]=\"{ 'active': last }\"\n [attr.aria-current]=\"last ? 'page' : null\">\n <ng-container *ngIf=\"!last\">\n <a (click)=\"navigate(breadcrumb.url, i)\">{{ breadcrumb.label }}</a>\n <i class=\"fa-light fa-chevron-right\"></i>\n </ng-container>\n <ng-container *ngIf=\"last\">\n {{ breadcrumb.label }}\n </ng-container>\n </li>\n </ol>\n</nav>\n", styles: [":host{display:block}.tcloud-ui-breadcrumb-list{display:flex;list-style:none;padding:0;margin:0;margin-bottom:var(--size-24)}.tcloud-ui-breadcrumb-item{display:flex;align-items:center;color:var(--c-neutral-700);font-size:var(--f-size-14);font-family:var(--f-family)}.tcloud-ui-breadcrumb-item a{text-decoration:none;color:inherit;cursor:pointer}.tcloud-ui-breadcrumb-item a:hover{text-decoration:underline}.tcloud-ui-breadcrumb-item i{margin:0}.tcloud-ui-breadcrumb-item i.fa-chevron-right{margin:0 var(--size-12)}.tcloud-ui-breadcrumb-item.active{pointer-events:none}\n"] }]
5470
5660
  }], ctorParameters: () => [] });
5471
5661
 
5662
+ class TCloudUiAlertBannerComponent {
5663
+ constructor() {
5664
+ this.alertType = 'warning';
5665
+ this.message = '';
5666
+ this.linkText = '';
5667
+ this.linkUrl = '';
5668
+ this.linkClicked = new EventEmitter();
5669
+ }
5670
+ handleLinkClick() {
5671
+ this.linkClicked.emit();
5672
+ }
5673
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiAlertBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5674
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", type: TCloudUiAlertBannerComponent, isStandalone: true, selector: "tcloud-ui-alert-banner", inputs: { alertType: "alertType", message: "message", linkText: "linkText", linkUrl: "linkUrl" }, outputs: { linkClicked: "linkClicked" }, ngImport: i0, template: "<div class=\"tcloud-ui-alert-banner\" [ngClass]=\"alertType\">\n <div class=\"alert-icon\">\n <div class=\"fa-light fa-circle-exclamation\"></div>\n </div>\n <div class=\"alert-content\">\n <p>\n {{ message }} \n <a *ngIf=\"linkText\" (click)=\"handleLinkClick()\" class=\"alert-link\">{{ linkText }}</a>\n </p>\n </div>\n</div>\n", styles: [".tcloud-ui-alert-banner{display:flex;align-items:center;padding:16px;border-radius:8px;width:100%}.tcloud-ui-alert-banner.warning{background-color:var(--c-alert-300);border-left:50px solid var(--c-alert-500)}.tcloud-ui-alert-banner.danger{background-color:var(--c-danger-300);border-left:50px solid var(--c-danger-500)}.tcloud-ui-alert-banner.info{background-color:var(--c-info-300);border-left:50px solid var(--c-info-500)}.tcloud-ui-alert-banner.success{background-color:var(--c-success-300);border-left:50px solid var(--c-success-500)}.tcloud-ui-alert-banner .alert-icon{display:flex;align-items:center;justify-content:center;margin-right:16px}.tcloud-ui-alert-banner .alert-icon .fa-circle-exclamation{width:24px;height:24px;border-radius:50%;position:relative;display:flex;align-items:center;justify-content:center;font-size:18px;margin-left:-80px}.warning .fa-circle-exclamation{background-color:transparent;color:var(--c-alert-50)}.danger .fa-circle-exclamation{background-color:transparent;color:var(--c-neutral-50)}.info .fa-circle-exclamation{background-color:transparent;color:var(--c-info-50)}.success .fa-circle-exclamation{background-color:transparent;color:var(--c-success-50)}.alert-content{flex:1}.alert-content p{margin:0;font-size:16px;font-weight:400;line-height:1.5;color:#131313;font-family:var(--font-family)}.alert-content .alert-link{color:inherit;text-decoration:underline;font-weight:600;font-size:16px;color:#131313}.alert-content .alert-link:hover{text-decoration:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
5675
+ }
5676
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiAlertBannerComponent, decorators: [{
5677
+ type: Component,
5678
+ args: [{ selector: 'tcloud-ui-alert-banner', standalone: true, imports: [CommonModule], template: "<div class=\"tcloud-ui-alert-banner\" [ngClass]=\"alertType\">\n <div class=\"alert-icon\">\n <div class=\"fa-light fa-circle-exclamation\"></div>\n </div>\n <div class=\"alert-content\">\n <p>\n {{ message }} \n <a *ngIf=\"linkText\" (click)=\"handleLinkClick()\" class=\"alert-link\">{{ linkText }}</a>\n </p>\n </div>\n</div>\n", styles: [".tcloud-ui-alert-banner{display:flex;align-items:center;padding:16px;border-radius:8px;width:100%}.tcloud-ui-alert-banner.warning{background-color:var(--c-alert-300);border-left:50px solid var(--c-alert-500)}.tcloud-ui-alert-banner.danger{background-color:var(--c-danger-300);border-left:50px solid var(--c-danger-500)}.tcloud-ui-alert-banner.info{background-color:var(--c-info-300);border-left:50px solid var(--c-info-500)}.tcloud-ui-alert-banner.success{background-color:var(--c-success-300);border-left:50px solid var(--c-success-500)}.tcloud-ui-alert-banner .alert-icon{display:flex;align-items:center;justify-content:center;margin-right:16px}.tcloud-ui-alert-banner .alert-icon .fa-circle-exclamation{width:24px;height:24px;border-radius:50%;position:relative;display:flex;align-items:center;justify-content:center;font-size:18px;margin-left:-80px}.warning .fa-circle-exclamation{background-color:transparent;color:var(--c-alert-50)}.danger .fa-circle-exclamation{background-color:transparent;color:var(--c-neutral-50)}.info .fa-circle-exclamation{background-color:transparent;color:var(--c-info-50)}.success .fa-circle-exclamation{background-color:transparent;color:var(--c-success-50)}.alert-content{flex:1}.alert-content p{margin:0;font-size:16px;font-weight:400;line-height:1.5;color:#131313;font-family:var(--font-family)}.alert-content .alert-link{color:inherit;text-decoration:underline;font-weight:600;font-size:16px;color:#131313}.alert-content .alert-link:hover{text-decoration:none}\n"] }]
5679
+ }], ctorParameters: () => [], propDecorators: { alertType: [{
5680
+ type: Input
5681
+ }], message: [{
5682
+ type: Input
5683
+ }], linkText: [{
5684
+ type: Input
5685
+ }], linkUrl: [{
5686
+ type: Input
5687
+ }], linkClicked: [{
5688
+ type: Output
5689
+ }] } });
5690
+
5691
+ class TCloudUiFilterBarComponent {
5692
+ constructor() {
5693
+ this.filterApply = new EventEmitter();
5694
+ this.lock = 'todos';
5695
+ }
5696
+ apply() {
5697
+ this.filterApply.emit({ lock: this.lock });
5698
+ }
5699
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiFilterBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5700
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", type: TCloudUiFilterBarComponent, isStandalone: true, selector: "tcloud-ui-filter-bar", outputs: { filterApply: "filterApply" }, ngImport: i0, template: "<div class=\"tcloud-ui-filter-bar\">\n <button class=\"tc-rev-btn--sm tc-rev-btn--dark-outline\" (click)=\"apply()\">Filtrar</button>\n</div>\n", styles: [".tcloud-ui-filter-bar{display:flex;align-items:center;gap:8px}.selector{height:36px;border:1px solid var(--c-neutral-300);border-radius:18px;padding:0 12px}.apply-btn{height:36px;border-radius:18px;padding:0 16px;background:var(--c-primary-500);color:#fff;border:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }] }); }
5701
+ }
5702
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiFilterBarComponent, decorators: [{
5703
+ type: Component,
5704
+ args: [{ selector: 'tcloud-ui-filter-bar', standalone: true, imports: [
5705
+ CommonModule,
5706
+ FormsModule
5707
+ ], template: "<div class=\"tcloud-ui-filter-bar\">\n <button class=\"tc-rev-btn--sm tc-rev-btn--dark-outline\" (click)=\"apply()\">Filtrar</button>\n</div>\n", styles: [".tcloud-ui-filter-bar{display:flex;align-items:center;gap:8px}.selector{height:36px;border:1px solid var(--c-neutral-300);border-radius:18px;padding:0 12px}.apply-btn{height:36px;border-radius:18px;padding:0 16px;background:var(--c-primary-500);color:#fff;border:none}\n"] }]
5708
+ }], propDecorators: { filterApply: [{
5709
+ type: Output
5710
+ }] } });
5711
+
5712
+ class TCloudUiLegendComponent {
5713
+ constructor() {
5714
+ this.sucessLabel = input.required();
5715
+ this.errorLabel = input.required();
5716
+ }
5717
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiLegendComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5718
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.19", type: TCloudUiLegendComponent, isStandalone: true, selector: "tcloud-ui-legend", inputs: { sucessLabel: { classPropertyName: "sucessLabel", publicName: "sucessLabel", isSignal: true, isRequired: true, transformFunction: null }, errorLabel: { classPropertyName: "errorLabel", publicName: "errorLabel", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"tcloud-ui-legend\" role=\"group\" aria-label=\"Legenda de status de lock\">\n <span class=\"legend-title\">Legenda:</span>\n <span class=\"legend-item\">\n <span class=\"status-dot status-ok\" aria-hidden=\"true\"></span>\n <span class=\"legend-text\">{{ sucessLabel() }}</span>\n </span>\n <span class=\"legend-item\">\n <span class=\"status-dot status-danger\" aria-hidden=\"true\"></span>\n <span class=\"legend-text\">{{ errorLabel() }}</span>\n </span>\n</div>\n", styles: [":host{display:block;width:100%}.tcloud-ui-legend{display:flex;gap:.75rem;align-items:center;color:var(--c-neutral-700);justify-content:flex-end}.legend-title{font-weight:500}.legend-item{display:inline-flex;align-items:center;gap:.375rem}.status-dot{width:.5rem;height:.5rem;border-radius:50%;display:inline-block}.status-ok{background-color:var(--c-success-500)}.status-danger{background-color:var(--c-danger-500)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5719
+ }
5720
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiLegendComponent, decorators: [{
5721
+ type: Component,
5722
+ args: [{ selector: 'tcloud-ui-legend', imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<div class=\"tcloud-ui-legend\" role=\"group\" aria-label=\"Legenda de status de lock\">\n <span class=\"legend-title\">Legenda:</span>\n <span class=\"legend-item\">\n <span class=\"status-dot status-ok\" aria-hidden=\"true\"></span>\n <span class=\"legend-text\">{{ sucessLabel() }}</span>\n </span>\n <span class=\"legend-item\">\n <span class=\"status-dot status-danger\" aria-hidden=\"true\"></span>\n <span class=\"legend-text\">{{ errorLabel() }}</span>\n </span>\n</div>\n", styles: [":host{display:block;width:100%}.tcloud-ui-legend{display:flex;gap:.75rem;align-items:center;color:var(--c-neutral-700);justify-content:flex-end}.legend-title{font-weight:500}.legend-item{display:inline-flex;align-items:center;gap:.375rem}.status-dot{width:.5rem;height:.5rem;border-radius:50%;display:inline-block}.status-ok{background-color:var(--c-success-500)}.status-danger{background-color:var(--c-danger-500)}\n"] }]
5723
+ }] });
5724
+
5725
+ class TCloudUiSearchBarComponent {
5726
+ constructor() {
5727
+ this.searchChange = new EventEmitter();
5728
+ }
5729
+ onInput(event) {
5730
+ const value = event.target.value;
5731
+ this.searchChange.emit(value);
5732
+ }
5733
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiSearchBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5734
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", type: TCloudUiSearchBarComponent, isStandalone: true, selector: "tcloud-ui-search-bar", outputs: { searchChange: "searchChange" }, ngImport: i0, template: "<div class=\"tcloud-ui-search-bar\">\n <input class=\"tcloud-ui-search-input\" type=\"text\" placeholder=\"Busque por usu\u00E1rio, inst\u00E2ncia, rotina...\" (input)=\"onInput($event)\" />\n</div>\n", styles: [".tcloud-ui-search-bar{display:flex;align-items:center;gap:8px}.tcloud-ui-search-input{flex:1;height:36px;border:1px solid var(--c-neutral-300);border-radius:18px;padding:0 12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
5735
+ }
5736
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiSearchBarComponent, decorators: [{
5737
+ type: Component,
5738
+ args: [{ selector: 'tcloud-ui-search-bar', standalone: true, imports: [CommonModule], template: "<div class=\"tcloud-ui-search-bar\">\n <input class=\"tcloud-ui-search-input\" type=\"text\" placeholder=\"Busque por usu\u00E1rio, inst\u00E2ncia, rotina...\" (input)=\"onInput($event)\" />\n</div>\n", styles: [".tcloud-ui-search-bar{display:flex;align-items:center;gap:8px}.tcloud-ui-search-input{flex:1;height:36px;border:1px solid var(--c-neutral-300);border-radius:18px;padding:0 12px}\n"] }]
5739
+ }], propDecorators: { searchChange: [{
5740
+ type: Output
5741
+ }] } });
5742
+
5743
+ var AcceptedFileType;
5744
+ (function (AcceptedFileType) {
5745
+ // Imagens
5746
+ AcceptedFileType["JPEG"] = "image/jpeg";
5747
+ AcceptedFileType["JPG"] = "image/jpg";
5748
+ AcceptedFileType["PNG"] = "image/png";
5749
+ AcceptedFileType["GIF"] = "image/gif";
5750
+ AcceptedFileType["WEBP"] = "image/webp";
5751
+ AcceptedFileType["SVG"] = "image/svg+xml";
5752
+ AcceptedFileType["BMP"] = "image/bmp";
5753
+ AcceptedFileType["ICO"] = "image/x-icon";
5754
+ // Vídeos
5755
+ AcceptedFileType["MP4"] = "video/mp4";
5756
+ AcceptedFileType["WEBM"] = "video/webm";
5757
+ AcceptedFileType["OGG"] = "video/ogg";
5758
+ AcceptedFileType["AVI"] = "video/x-msvideo";
5759
+ AcceptedFileType["MOV"] = "video/quicktime";
5760
+ AcceptedFileType["WMV"] = "video/x-ms-wmv";
5761
+ AcceptedFileType["FLV"] = "video/x-flv";
5762
+ AcceptedFileType["MKV"] = "video/x-matroska";
5763
+ })(AcceptedFileType || (AcceptedFileType = {}));
5764
+ class TCloudUiUploadAreaComponent {
5765
+ constructor() {
5766
+ this.isHovering = false;
5767
+ this.draggedIndex = null;
5768
+ // Array de objetos com informações das imagens
5769
+ this.images = [];
5770
+ // Controle de imagens com erro de carregamento
5771
+ this.imageErrors = new Set();
5772
+ this.imageChecked = new Set();
5773
+ // Evento centralizado que emite sempre que houver mudança
5774
+ this.onChange = new EventEmitter();
5775
+ // Eventos específicos (mantidos para compatibilidade)
5776
+ this.filesSelected = new EventEmitter();
5777
+ this.imagesReordered = new EventEmitter();
5778
+ this.imagesRemoved = new EventEmitter();
5779
+ // Evento para notificar erros/avisos
5780
+ this.onError = new EventEmitter();
5781
+ this.messageOnError = '';
5782
+ // Evento para notificar progresso de upload
5783
+ this.onProgress = new EventEmitter();
5784
+ // Exibe barra de progresso durante carregamento
5785
+ this.showProgress = false;
5786
+ // Progresso atual (0-100)
5787
+ this.currentProgress = 0;
5788
+ this.isLoading = false;
5789
+ this.previews = [];
5790
+ }
5791
+ // Imagens pré-carregadas (para modo de edição/visualização)
5792
+ set preloadedImages(images) {
5793
+ if (!images || images.length === 0)
5794
+ return;
5795
+ this.loadPreloadedImages(images);
5796
+ }
5797
+ onDragOver(event) {
5798
+ event.preventDefault();
5799
+ this.isHovering = true;
5800
+ }
5801
+ onDragLeave(event) {
5802
+ event.preventDefault();
5803
+ this.isHovering = false;
5804
+ }
5805
+ onDrop(event) {
5806
+ event.preventDefault();
5807
+ this.isHovering = false;
5808
+ if (!event.dataTransfer)
5809
+ return;
5810
+ const allFiles = Array.from(event.dataTransfer.files);
5811
+ const validFiles = allFiles.filter(f => this.isFileTypeAccepted(f));
5812
+ const rejectedFiles = allFiles.length - validFiles.length;
5813
+ if (rejectedFiles > 0) {
5814
+ this.setOnError(`${rejectedFiles} arquivo(s) rejeitado(s): tipo não permitido`);
5815
+ }
5816
+ if (validFiles.length > 0) {
5817
+ this.toFilesSelected(validFiles);
5818
+ }
5819
+ }
5820
+ onFilesSelected(event) {
5821
+ this.messageOnError = '';
5822
+ const input = event.target;
5823
+ if (!input.files)
5824
+ return;
5825
+ const allFiles = Array.from(input.files);
5826
+ const validFiles = allFiles.filter(f => this.isFileTypeAccepted(f));
5827
+ const rejectedFiles = allFiles.length - validFiles.length;
5828
+ if (rejectedFiles > 0) {
5829
+ this.setOnError(`${rejectedFiles} arquivo(s) rejeitado(s): tipo não permitido`);
5830
+ }
5831
+ if (validFiles.length > 0) {
5832
+ this.toFilesSelected(validFiles);
5833
+ }
5834
+ // Limpa o input para permitir selecionar o mesmo arquivo novamente
5835
+ input.value = '';
5836
+ }
5837
+ toFilesSelected(files) {
5838
+ this.filesSelected.emit(files);
5839
+ this.onImagesSelected(files);
5840
+ }
5841
+ generateNameFile(fileName) {
5842
+ // Extrai a extensão do arquivo
5843
+ const lastDotIndex = fileName.lastIndexOf('.');
5844
+ const extension = lastDotIndex !== -1 ? fileName.substring(lastDotIndex) : '';
5845
+ // Gera um nome aleatório (16 caracteres)
5846
+ const randomName = Math.random().toString(36).substring(2, 15) +
5847
+ Math.random().toString(36).substring(2, 15);
5848
+ // Retorna o nome aleatório + extensão, tudo em minúsculo
5849
+ return (randomName + extension).toLowerCase();
5850
+ }
5851
+ onImagesSelected(files) {
5852
+ // Não limpa o array, apenas adiciona novas imagens ao final
5853
+ // Verifica se há limite máximo e quantos arquivos ainda podem ser adicionados
5854
+ let filesToAdd = files;
5855
+ if (this.maxFiles !== undefined) {
5856
+ const remainingSlots = this.maxFiles - this.images.length;
5857
+ if (remainingSlots <= 0) {
5858
+ this.setOnError(`Limite máximo de ${this.maxFiles} arquivo(s) atingido`);
5859
+ return;
5860
+ }
5861
+ filesToAdd = files.slice(0, remainingSlots);
5862
+ if (files.length > remainingSlots) {
5863
+ this.setOnError(`Apenas ${remainingSlots} de ${files.length} arquivo(s) foram adicionados. Limite máximo: ${this.maxFiles}`);
5864
+ }
5865
+ }
5866
+ // Inicia progresso se habilitado
5867
+ if (this.showProgress) {
5868
+ this.isLoading = true;
5869
+ this.currentProgress = 0;
5870
+ }
5871
+ const totalFiles = filesToAdd.length;
5872
+ let processedFiles = 0;
5873
+ filesToAdd.forEach((file, index) => {
5874
+ const reader = new FileReader();
5875
+ reader.onprogress = (event) => {
5876
+ if (this.showProgress && event.lengthComputable) {
5877
+ const fileProgress = (event.loaded / event.total) * 100;
5878
+ const overallProgress = ((processedFiles + (fileProgress / 100)) / totalFiles) * 100;
5879
+ this.currentProgress = Math.round(overallProgress);
5880
+ this.onProgress.emit(this.currentProgress);
5881
+ }
5882
+ };
5883
+ reader.onload = () => {
5884
+ const preview = reader.result;
5885
+ // Valida dimensões se configurado
5886
+ if (this.imageDimensions) {
5887
+ this.validateImageDimensions(preview, file.name).then(isValid => {
5888
+ if (isValid) {
5889
+ this.addImageToList(file, preview);
5890
+ }
5891
+ processedFiles++;
5892
+ this.updateProgress(processedFiles, totalFiles);
5893
+ });
5894
+ }
5895
+ else {
5896
+ this.addImageToList(file, preview);
5897
+ processedFiles++;
5898
+ this.updateProgress(processedFiles, totalFiles);
5899
+ }
5900
+ };
5901
+ reader.onerror = () => {
5902
+ processedFiles++;
5903
+ this.updateProgress(processedFiles, totalFiles);
5904
+ };
5905
+ reader.readAsDataURL(file);
5906
+ });
5907
+ }
5908
+ // Atualiza e finaliza progresso
5909
+ updateProgress(processed, total) {
5910
+ if (this.showProgress) {
5911
+ this.currentProgress = Math.round((processed / total) * 100);
5912
+ this.onProgress.emit(this.currentProgress);
5913
+ if (processed === total) {
5914
+ setTimeout(() => {
5915
+ this.isLoading = false;
5916
+ this.currentProgress = 0;
5917
+ }, 500);
5918
+ }
5919
+ }
5920
+ }
5921
+ // Adiciona imagem à lista
5922
+ addImageToList(file, preview) {
5923
+ this.previews.push(preview);
5924
+ // Adiciona ao array de objetos com order baseado no tamanho atual
5925
+ this.images.push({
5926
+ name: file.name,
5927
+ new_name: this.generateNameFile(file.name),
5928
+ order: this.images.length + 1,
5929
+ preview: preview,
5930
+ file: file
5931
+ });
5932
+ // Emite o evento centralizado
5933
+ this.emitChanges();
5934
+ }
5935
+ // Métodos para reordenação de imagens
5936
+ onDragStart(event, index) {
5937
+ this.draggedIndex = index;
5938
+ if (event.dataTransfer) {
5939
+ event.dataTransfer.effectAllowed = 'move';
5940
+ event.dataTransfer.setData('text/html', index.toString());
5941
+ }
5942
+ }
5943
+ onDragOverImage(event) {
5944
+ event.preventDefault();
5945
+ if (event.dataTransfer) {
5946
+ event.dataTransfer.dropEffect = 'move';
5947
+ }
5948
+ }
5949
+ onDropImage(event, dropIndex) {
5950
+ event.preventDefault();
5951
+ event.stopPropagation();
5952
+ if (this.draggedIndex === null || this.draggedIndex === dropIndex) {
5953
+ return;
5954
+ }
5955
+ // Reordena o array de previews
5956
+ const draggedItem = this.previews[this.draggedIndex];
5957
+ const newPreviews = [...this.previews];
5958
+ // Remove da posição original
5959
+ newPreviews.splice(this.draggedIndex, 1);
5960
+ // Insere na nova posição
5961
+ newPreviews.splice(dropIndex, 0, draggedItem);
5962
+ this.previews = newPreviews;
5963
+ // Reordena o array de objetos images
5964
+ const draggedImage = this.images[this.draggedIndex];
5965
+ const newImages = [...this.images];
5966
+ newImages.splice(this.draggedIndex, 1);
5967
+ newImages.splice(dropIndex, 0, draggedImage);
5968
+ // Atualiza os números de order
5969
+ this.images = newImages.map((img, index) => ({
5970
+ ...img,
5971
+ order: index + 1
5972
+ }));
5973
+ this.draggedIndex = null;
5974
+ // Emite o evento específico (compatibilidade)
5975
+ this.imagesReordered.emit(this.previews);
5976
+ // Emite o evento centralizado
5977
+ this.emitChanges();
5978
+ }
5979
+ onDragEnd() {
5980
+ this.draggedIndex = null;
5981
+ }
5982
+ removeImage(event, index) {
5983
+ this.messageOnError = '';
5984
+ event.stopPropagation();
5985
+ // Remove do array de previews
5986
+ this.previews.splice(index, 1);
5987
+ // Remove do array de objetos
5988
+ this.images.splice(index, 1);
5989
+ // Atualiza os números de order
5990
+ this.images = this.images.map((img, idx) => ({
5991
+ ...img,
5992
+ order: idx + 1
5993
+ }));
5994
+ // Emite o evento específico (compatibilidade)
5995
+ this.imagesRemoved.emit(this.previews);
5996
+ // Emite o evento centralizado
5997
+ this.emitChanges();
5998
+ }
5999
+ // Método centralizado para emitir mudanças
6000
+ emitChanges() {
6001
+ this.onChange.emit([...this.images]);
6002
+ }
6003
+ // Método para validar se o tipo de arquivo é aceito
6004
+ isFileTypeAccepted(file) {
6005
+ // Se não houver restrição de tipos, aceita todos
6006
+ if (!this.acceptedFileTypes || this.acceptedFileTypes.length === 0) {
6007
+ return true;
6008
+ }
6009
+ // Verifica se o tipo do arquivo está na lista de aceitos
6010
+ return this.acceptedFileTypes.includes(file.type);
6011
+ }
6012
+ // Método para carregar imagens pré-existentes
6013
+ async loadPreloadedImages(images) {
6014
+ // Limpa arrays existentes
6015
+ this.images = [];
6016
+ this.previews = [];
6017
+ for (let i = 0; i < images.length; i++) {
6018
+ const img = images[i];
6019
+ const url = typeof img === 'string' ? img : img?.url;
6020
+ const name = typeof img === 'string' ? this.extractFilenameFromUrl(url) : (img?.key || this.extractFilenameFromUrl(url));
6021
+ const order = typeof img === 'string' ? i + 1 : (img?.order || i + 1);
6022
+ try {
6023
+ // Busca a imagem e converte para File
6024
+ const file = await this.urlToFile(url, name);
6025
+ // Adiciona ao preview
6026
+ this.previews.push(url);
6027
+ // Adiciona ao array de images
6028
+ this.images.push({
6029
+ name: name,
6030
+ new_name: this.generateNameFile(name),
6031
+ order: order,
6032
+ preview: url,
6033
+ file: file
6034
+ });
6035
+ }
6036
+ catch (error) {
6037
+ //console.warn(`Erro ao carregar imagem pré-carregada: ${url}`, error);
6038
+ }
6039
+ }
6040
+ // Emite as mudanças
6041
+ if (this.images.length > 0) {
6042
+ this.emitChanges();
6043
+ }
6044
+ }
6045
+ // Converte URL para File
6046
+ async urlToFile(url, filename) {
6047
+ const response = await fetch(url);
6048
+ const blob = await response.blob();
6049
+ return new File([blob], filename, { type: blob.type });
6050
+ }
6051
+ // Extrai nome do arquivo da URL
6052
+ extractFilenameFromUrl(url) {
6053
+ const urlParts = url.split('/');
6054
+ const filenameWithParams = urlParts[urlParts.length - 1];
6055
+ const filename = filenameWithParams.split('?')[0];
6056
+ return filename || 'image.jpg';
6057
+ }
6058
+ setOnError(err) {
6059
+ this.onError.emit(err);
6060
+ this.messageOnError = err;
6061
+ }
6062
+ // Trata erro de carregamento de imagem
6063
+ onImageError(index, event) {
6064
+ // Marca que a imagem foi verificada e tem erro
6065
+ if (!this.imageChecked.has(index)) {
6066
+ this.imageChecked.add(index);
6067
+ this.imageErrors.add(index);
6068
+ this.setOnError(`Erro ao carregar imagem: acesso negado ou URL inválida`);
6069
+ }
6070
+ // Previne propagação do erro
6071
+ event.stopPropagation();
6072
+ }
6073
+ // Marca imagem como carregada com sucesso
6074
+ onImageLoad(index) {
6075
+ this.imageChecked.add(index);
6076
+ this.imageErrors.delete(index);
6077
+ }
6078
+ // Verifica se imagem tem erro
6079
+ hasImageError(index) {
6080
+ return this.imageErrors.has(index);
6081
+ }
6082
+ // Valida dimensões da imagem
6083
+ validateImageDimensions(imageSrc, fileName) {
6084
+ return new Promise((resolve) => {
6085
+ const img = new Image();
6086
+ img.onload = () => {
6087
+ const width = img.width;
6088
+ const height = img.height;
6089
+ const dims = this.imageDimensions;
6090
+ let isValid = false;
6091
+ if (dims.strict) {
6092
+ // Validação exata
6093
+ isValid = width === dims.width && height === dims.height;
6094
+ if (!isValid) {
6095
+ this.setOnError(`Imagem "${fileName}" rejeitada: dimensões devem ser exatamente ${dims.width}x${dims.height}px (recebido: ${width}x${height}px)`);
6096
+ }
6097
+ }
6098
+ else {
6099
+ // Validação de máximo
6100
+ isValid = width <= dims.width && height <= dims.height;
6101
+ if (!isValid) {
6102
+ this.setOnError(`Imagem "${fileName}" rejeitada: dimensões máximas ${dims.width}x${dims.height}px (recebido: ${width}x${height}px)`);
6103
+ }
6104
+ }
6105
+ resolve(isValid);
6106
+ };
6107
+ img.onerror = () => {
6108
+ this.setOnError(`Erro ao validar dimensões da imagem "${fileName}"`);
6109
+ resolve(false);
6110
+ };
6111
+ img.src = imageSrc;
6112
+ });
6113
+ }
6114
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiUploadAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6115
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", type: TCloudUiUploadAreaComponent, isStandalone: true, selector: "tcloud-ui-upload-area", inputs: { maxFiles: "maxFiles", acceptedFileTypes: "acceptedFileTypes", imageDimensions: "imageDimensions", showProgress: "showProgress", preloadedImages: "preloadedImages" }, outputs: { onChange: "onChange", filesSelected: "filesSelected", imagesReordered: "imagesReordered", imagesRemoved: "imagesRemoved", onError: "onError", onProgress: "onProgress" }, ngImport: i0, template: "<div\n class=\"dropzone\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n [class.hover]=\"isHovering\"\n (click)=\"fileInput.click()\"\n>\n <p>Arraste e solte imagens aqui<br>ou clique para selecionar</p>\n</div>\n\n<div *ngIf=\"showProgress && isLoading\" class=\"progress-container\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" [style.width.%]=\"currentProgress\"></div>\n </div>\n <div class=\"progress-text\">{{ currentProgress }}%</div>\n</div>\n\n<div *ngIf=\"messageOnError !== ''\">{{ messageOnError }}</div>\n\n<input\n #fileInput\n type=\"file\"\n accept=\"image/*\"\n multiple\n hidden\n (change)=\"onFilesSelected($event)\"\n>\n\n<div class=\"mt-3 mb-2\">\n <div class=\"previews\" (click)=\"$event.stopPropagation()\">\n <div class=\"row\">\n <ng-container *ngFor=\"let img of previews; let i = index\">\n <div \n class=\"col-3 image-preview-container\"\n draggable=\"true\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOverImage($event)\"\n (drop)=\"onDropImage($event, i)\"\n (dragend)=\"onDragEnd()\"\n (click)=\"$event.stopPropagation()\"\n [class.dragging]=\"draggedIndex === i\"\n [class.image-error]=\"hasImageError(i)\"\n >\n <button \n class=\"btn-remove\" \n (click)=\"removeImage($event, i)\"\n title=\"Remover imagem\"\n >\n \u00D7\n </button>\n <img \n *ngIf=\"!hasImageError(i)\" \n [src]=\"img\" \n width=\"150\" \n class=\"preview-image\"\n (error)=\"onImageError(i, $event)\"\n (load)=\"onImageLoad(i)\"\n >\n <div \n *ngIf=\"hasImageError(i)\" \n class=\"image-error-placeholder\"\n >\n <span>\u26A0\uFE0F</span>\n <p>Erro ao carregar</p>\n </div>\n </div>\n </ng-container>\n </div> \n </div>\n</div>\n", styles: [".dropzone{border:2px dashed #777;border-radius:10px;padding:40px;text-align:center;cursor:pointer;transition:.3s ease;color:#555;-webkit-user-select:none;user-select:none}.dropzone.hover{border-color:#1e88e5;background:#e3f2fd;color:#1565c0}.progress-container{margin:20px 0;padding:10px;background-color:#f5f5f5;border-radius:8px}.progress-bar{position:relative;width:100%;height:30px;background-color:#e0e0e0;border-radius:15px;overflow:hidden;box-shadow:inset 0 2px 4px #0000001a}.progress-fill{height:100%;background:linear-gradient(90deg,#1e88e5,#42a5f5);border-radius:15px;transition:width .3s ease;display:flex;align-items:center;justify-content:center;min-width:30px;position:relative}.progress-fill:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);animation:shimmer 1.5s infinite}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.progress-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-weight:600;font-size:14px;color:#333;text-shadow:0 1px 2px rgba(255,255,255,.8);z-index:1}.image-preview-container{position:relative;cursor:move;transition:all .2s ease;padding:10px;border:2px solid transparent;border-radius:8px}.image-preview-container:hover{border-color:#1e88e5;background-color:#f5f5f5}.image-preview-container:hover .btn-remove{opacity:1}.image-preview-container.dragging{opacity:.5;border-color:#1e88e5}.image-preview-container.image-error{border-color:#f44336;background-color:#ffebee}.image-preview-container.image-error:hover{border-color:#d32f2f}.btn-remove{position:absolute;top:15px;right:15px;width:28px;height:28px;border-radius:50%;border:none;background-color:#f44336e6;color:#fff;font-size:20px;font-weight:700;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:all .2s ease;z-index:10;padding:0}.btn-remove:hover{background-color:#d32f2f;transform:scale(1.1)}.btn-remove:active{transform:scale(.95)}.preview-image{width:100%;height:auto;border-radius:4px;pointer-events:none}.image-error-placeholder{width:150px;height:150px;display:flex;flex-direction:column;align-items:center;justify-content:center;background-color:#ffcdd2;border-radius:4px;color:#c62828;text-align:center}.image-error-placeholder span{font-size:40px;margin-bottom:8px}.image-error-placeholder p{margin:0;font-size:12px;font-weight:500}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
6116
+ }
6117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiUploadAreaComponent, decorators: [{
6118
+ type: Component,
6119
+ args: [{ selector: 'tcloud-ui-upload-area', imports: [
6120
+ CommonModule
6121
+ ], template: "<div\n class=\"dropzone\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n [class.hover]=\"isHovering\"\n (click)=\"fileInput.click()\"\n>\n <p>Arraste e solte imagens aqui<br>ou clique para selecionar</p>\n</div>\n\n<div *ngIf=\"showProgress && isLoading\" class=\"progress-container\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" [style.width.%]=\"currentProgress\"></div>\n </div>\n <div class=\"progress-text\">{{ currentProgress }}%</div>\n</div>\n\n<div *ngIf=\"messageOnError !== ''\">{{ messageOnError }}</div>\n\n<input\n #fileInput\n type=\"file\"\n accept=\"image/*\"\n multiple\n hidden\n (change)=\"onFilesSelected($event)\"\n>\n\n<div class=\"mt-3 mb-2\">\n <div class=\"previews\" (click)=\"$event.stopPropagation()\">\n <div class=\"row\">\n <ng-container *ngFor=\"let img of previews; let i = index\">\n <div \n class=\"col-3 image-preview-container\"\n draggable=\"true\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOverImage($event)\"\n (drop)=\"onDropImage($event, i)\"\n (dragend)=\"onDragEnd()\"\n (click)=\"$event.stopPropagation()\"\n [class.dragging]=\"draggedIndex === i\"\n [class.image-error]=\"hasImageError(i)\"\n >\n <button \n class=\"btn-remove\" \n (click)=\"removeImage($event, i)\"\n title=\"Remover imagem\"\n >\n \u00D7\n </button>\n <img \n *ngIf=\"!hasImageError(i)\" \n [src]=\"img\" \n width=\"150\" \n class=\"preview-image\"\n (error)=\"onImageError(i, $event)\"\n (load)=\"onImageLoad(i)\"\n >\n <div \n *ngIf=\"hasImageError(i)\" \n class=\"image-error-placeholder\"\n >\n <span>\u26A0\uFE0F</span>\n <p>Erro ao carregar</p>\n </div>\n </div>\n </ng-container>\n </div> \n </div>\n</div>\n", styles: [".dropzone{border:2px dashed #777;border-radius:10px;padding:40px;text-align:center;cursor:pointer;transition:.3s ease;color:#555;-webkit-user-select:none;user-select:none}.dropzone.hover{border-color:#1e88e5;background:#e3f2fd;color:#1565c0}.progress-container{margin:20px 0;padding:10px;background-color:#f5f5f5;border-radius:8px}.progress-bar{position:relative;width:100%;height:30px;background-color:#e0e0e0;border-radius:15px;overflow:hidden;box-shadow:inset 0 2px 4px #0000001a}.progress-fill{height:100%;background:linear-gradient(90deg,#1e88e5,#42a5f5);border-radius:15px;transition:width .3s ease;display:flex;align-items:center;justify-content:center;min-width:30px;position:relative}.progress-fill:after{content:\"\";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.3),transparent);animation:shimmer 1.5s infinite}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.progress-text{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-weight:600;font-size:14px;color:#333;text-shadow:0 1px 2px rgba(255,255,255,.8);z-index:1}.image-preview-container{position:relative;cursor:move;transition:all .2s ease;padding:10px;border:2px solid transparent;border-radius:8px}.image-preview-container:hover{border-color:#1e88e5;background-color:#f5f5f5}.image-preview-container:hover .btn-remove{opacity:1}.image-preview-container.dragging{opacity:.5;border-color:#1e88e5}.image-preview-container.image-error{border-color:#f44336;background-color:#ffebee}.image-preview-container.image-error:hover{border-color:#d32f2f}.btn-remove{position:absolute;top:15px;right:15px;width:28px;height:28px;border-radius:50%;border:none;background-color:#f44336e6;color:#fff;font-size:20px;font-weight:700;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:0;transition:all .2s ease;z-index:10;padding:0}.btn-remove:hover{background-color:#d32f2f;transform:scale(1.1)}.btn-remove:active{transform:scale(.95)}.preview-image{width:100%;height:auto;border-radius:4px;pointer-events:none}.image-error-placeholder{width:150px;height:150px;display:flex;flex-direction:column;align-items:center;justify-content:center;background-color:#ffcdd2;border-radius:4px;color:#c62828;text-align:center}.image-error-placeholder span{font-size:40px;margin-bottom:8px}.image-error-placeholder p{margin:0;font-size:12px;font-weight:500}\n"] }]
6122
+ }], propDecorators: { onChange: [{
6123
+ type: Output
6124
+ }], filesSelected: [{
6125
+ type: Output
6126
+ }], imagesReordered: [{
6127
+ type: Output
6128
+ }], imagesRemoved: [{
6129
+ type: Output
6130
+ }], onError: [{
6131
+ type: Output
6132
+ }], onProgress: [{
6133
+ type: Output
6134
+ }], maxFiles: [{
6135
+ type: Input
6136
+ }], acceptedFileTypes: [{
6137
+ type: Input
6138
+ }], imageDimensions: [{
6139
+ type: Input
6140
+ }], showProgress: [{
6141
+ type: Input
6142
+ }], preloadedImages: [{
6143
+ type: Input
6144
+ }] } });
6145
+
5472
6146
  class TCloudUiAlignDirective {
5473
6147
  set TCalign(direction) {
5474
6148
  if (direction) {
@@ -6489,6 +7163,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImpo
6489
7163
  }]
6490
7164
  }] });
6491
7165
 
7166
+ class TCloudUiRadioDirective {
7167
+ constructor() { }
7168
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiRadioDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
7169
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.19", type: TCloudUiRadioDirective, isStandalone: true, selector: "input[type=\"radio\"][tcloudUiRadio]", host: { classAttribute: "tcloud-ui-radio" }, ngImport: i0 }); }
7170
+ }
7171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiRadioDirective, decorators: [{
7172
+ type: Directive,
7173
+ args: [{
7174
+ selector: 'input[type="radio"][tcloudUiRadio]',
7175
+ host: {
7176
+ class: 'tcloud-ui-radio'
7177
+ }
7178
+ }]
7179
+ }], ctorParameters: () => [] });
7180
+
7181
+ class TCloudUiIconButtonDirective {
7182
+ constructor(_el) {
7183
+ this._el = _el;
7184
+ this.color = input('primary');
7185
+ this.size = input('sm');
7186
+ this.tcloudUiIconButton = input('filled');
7187
+ effect(() => {
7188
+ this.setClasses();
7189
+ });
7190
+ }
7191
+ setClasses() {
7192
+ const tokenList = this._el.nativeElement.classList;
7193
+ tokenList.remove(...Array.from(tokenList).filter((c) => c.startsWith('tcloud-ui-btn--')));
7194
+ let tcloudUiIconButton = this.tcloudUiIconButton();
7195
+ if (!tcloudUiIconButton) {
7196
+ tcloudUiIconButton = 'filled';
7197
+ }
7198
+ this._el.nativeElement.classList.add(`tc-rev-btn--${this.size()}`);
7199
+ this._el.nativeElement.classList.add(`tc-rev-btn--${this.size()}-icon`);
7200
+ this._el.nativeElement.classList.add(`tc-rev-btn--${this.color()}-${tcloudUiIconButton}`);
7201
+ }
7202
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiIconButtonDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
7203
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.19", type: TCloudUiIconButtonDirective, isStandalone: true, selector: "button[tcloudUiIconButton]", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, tcloudUiIconButton: { classPropertyName: "tcloudUiIconButton", publicName: "tcloudUiIconButton", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "tcloud-ui-btn tcloud-ui-btn-icon" }, ngImport: i0 }); }
7204
+ }
7205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiIconButtonDirective, decorators: [{
7206
+ type: Directive,
7207
+ args: [{
7208
+ selector: 'button[tcloudUiIconButton]',
7209
+ host: {
7210
+ class: 'tcloud-ui-btn tcloud-ui-btn-icon'
7211
+ }
7212
+ }]
7213
+ }], ctorParameters: () => [{ type: i0.ElementRef }] });
7214
+
6492
7215
  [];
6493
7216
  class TCloudUiPaginationService {
6494
7217
  constructor() {
@@ -7664,52 +8387,70 @@ class TCloudUiSubNavbarItemComponent {
7664
8387
  this.onClick.emit(_ev);
7665
8388
  }
7666
8389
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiSubNavbarItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7667
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.19", type: TCloudUiSubNavbarItemComponent, isStandalone: true, selector: "tcloud-ui-sub-navbar-item", inputs: { isMenuExpanded: { classPropertyName: "isMenuExpanded", publicName: "isMenuExpanded", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, routerLink: { classPropertyName: "routerLink", publicName: "routerLink", isSignal: true, isRequired: false, transformFunction: null }, queryParams: { classPropertyName: "queryParams", publicName: "queryParams", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClick: "onClick" }, ngImport: i0, template: "<li\n class=\"tc-sub-navbar-item\"\n [class.tc-rev-submenu-expanded]=\"isMenuExpanded\">\n <a\n class=\"tc-sub-navbar-item-link\"\n [class.selected]=\"active()\"\n [routerLink]=\"routerLink()\"\n routerLinkActive=\"active\"\n [queryParams]=\"queryParams()\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n [title]=\"label()\"\n (click)=\"handleClick($event)\">\n\n <div class=\"navbar-item-icon-container\">\n <ng-content select=\"[icon]\"></ng-content>\n </div>\n\n @if (isMenuExpanded)\n {\n <div class=\"navbar-item-label\">\n {{label()}}\n </div>\n }\n </a>\n</li>\n", styles: [":host{display:block}.tc-sub-navbar-item{list-style:none;margin:0;padding:0}.tc-sub-navbar-item .tc-sub-navbar-item-link{align-items:center;border-radius:var(--bor-radius-4);color:var(--c-neutral-700);cursor:pointer;font-family:var(--f-family);display:flex;transition:all .2s ease;text-decoration:none}.tc-sub-navbar-item .tc-sub-navbar-item-link .navbar-item-icon-container{text-align:center;align-content:center;background-color:var(--c-neutral-50);border-radius:var(--bor-radius-4);font-size:var(--f-size-20);height:var(--size-36);width:var(--size-36);transition:all .2s ease;min-height:var(--size-36);min-width:var(--size-36);max-height:var(--size-36);max-width:var(--size-36)}.tc-sub-navbar-item .tc-sub-navbar-item-link .navbar-item-icon-container:hover,.tc-sub-navbar-item .tc-sub-navbar-item-link .navbar-item-icon-container:focus{background-color:var(--c-neutral-200);color:var(--c-primary-500)}.tc-sub-navbar-item .tc-sub-navbar-item-link .navbar-item-label{align-content:center;color:var(--c-neutral-700);font-size:var(--f-size-14);height:var(--size-36);padding-left:var(--size-8);transition:all .2s ease;min-height:var(--size-36);max-height:var(--size-36)}.tc-sub-navbar-item .tc-sub-navbar-item-link:hover,.tc-sub-navbar-item .tc-sub-navbar-item-link:focus{color:var(--c-primary-500)}.tc-sub-navbar-item .tc-sub-navbar-item-link.active .navbar-item-icon-container,.tc-sub-navbar-item .tc-sub-navbar-item-link.selected .navbar-item-icon-container,.tc-sub-navbar-item .tc-sub-navbar-item-link:active .navbar-item-icon-container{background-color:var(--c-primary-300);color:var(--c-primary-500)}.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link .navbar-item-icon-container{background-color:var(--c-neutral-200)}.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link:hover .navbar-item-label,.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link:focus .navbar-item-label{color:var(--c-primary-500)}.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link.active,.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link.selected,.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link.active .navbar-item-icon-container,.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link.selected .navbar-item-icon-container{background-color:var(--c-primary-300)}.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link.active .navbar-item-label,.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link.selected .navbar-item-label{color:var(--c-primary-500);font-weight:var(--f-weight-700)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] }); }
8390
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.19", type: TCloudUiSubNavbarItemComponent, isStandalone: true, selector: "tcloud-ui-sub-navbar-item", inputs: { isMenuExpanded: { classPropertyName: "isMenuExpanded", publicName: "isMenuExpanded", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, routerLink: { classPropertyName: "routerLink", publicName: "routerLink", isSignal: true, isRequired: false, transformFunction: null }, queryParams: { classPropertyName: "queryParams", publicName: "queryParams", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClick: "onClick" }, ngImport: i0, template: "<li class=\"tcloud-ui-navbar-item\" [class.tcloud-ui-submenu-expanded]=\"isMenuExpanded\">\n <a\n class=\"tcloud-ui-navbar-item-link\"\n [class.selected]=\"active()\"\n [routerLink]=\"routerLink()\"\n routerLinkActive=\"active\"\n [queryParams]=\"queryParams()\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n [title]=\"label()\"\n (click)=\"handleClick($event)\">\n\n <div class=\"navbar-item-icon-container\">\n <ng-content select=\"[icon]\"></ng-content>\n </div>\n\n \n <div class=\"navbar-item-label\">\n {{label()}}\n </div>\n \n </a>\n</li>\n", styles: [":host{display:block}.tcloud-ui-navbar-item{list-style:none;margin:0;padding:0}.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link{align-items:center;border-radius:var(--bor-radius-4);color:var(--c-neutral-700);cursor:pointer;font-family:var(--f-family);display:flex;transition:all .2s ease;text-decoration:none}.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link .navbar-item-icon-container{text-align:center;align-content:center;background-color:var(--c-neutral-50);border-radius:var(--bor-radius-4);font-size:var(--f-size-20);height:var(--size-36);width:var(--size-36);transition:all .2s ease;min-height:var(--size-36);min-width:var(--size-36);max-height:var(--size-36);max-width:var(--size-36)}.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link .navbar-item-icon-container:hover,.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link .navbar-item-icon-container:focus{background-color:var(--c-neutral-200);color:var(--c-primary-500)}.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link .navbar-item-label{align-content:center;color:var(--c-neutral-700);font-size:var(--f-size-14);height:var(--size-36);padding-left:var(--size-8);transition:all .2s ease;min-height:var(--size-36);max-height:var(--size-36)}.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link:hover,.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link:focus{color:var(--c-primary-500)}.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link.active .navbar-item-icon-container,.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link.selected .navbar-item-icon-container,.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link:active .navbar-item-icon-container{background-color:var(--c-primary-300);color:var(--c-primary-500)}.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link .navbar-item-icon-container{background-color:var(--c-neutral-200)}.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link:hover .navbar-item-label,.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link:focus .navbar-item-label{color:var(--c-primary-500)}.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link.active,.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link.selected,.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link.active .navbar-item-icon-container,.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link.selected .navbar-item-icon-container{background-color:var(--c-primary-300)}.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link.active .navbar-item-label,.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link.selected .navbar-item-label{color:var(--c-primary-500);font-weight:var(--f-weight-700)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] }); }
7668
8391
  }
7669
8392
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiSubNavbarItemComponent, decorators: [{
7670
8393
  type: Component,
7671
8394
  args: [{ selector: 'tcloud-ui-sub-navbar-item', imports: [
7672
8395
  CommonModule,
7673
8396
  RouterModule,
7674
- ], template: "<li\n class=\"tc-sub-navbar-item\"\n [class.tc-rev-submenu-expanded]=\"isMenuExpanded\">\n <a\n class=\"tc-sub-navbar-item-link\"\n [class.selected]=\"active()\"\n [routerLink]=\"routerLink()\"\n routerLinkActive=\"active\"\n [queryParams]=\"queryParams()\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n [title]=\"label()\"\n (click)=\"handleClick($event)\">\n\n <div class=\"navbar-item-icon-container\">\n <ng-content select=\"[icon]\"></ng-content>\n </div>\n\n @if (isMenuExpanded)\n {\n <div class=\"navbar-item-label\">\n {{label()}}\n </div>\n }\n </a>\n</li>\n", styles: [":host{display:block}.tc-sub-navbar-item{list-style:none;margin:0;padding:0}.tc-sub-navbar-item .tc-sub-navbar-item-link{align-items:center;border-radius:var(--bor-radius-4);color:var(--c-neutral-700);cursor:pointer;font-family:var(--f-family);display:flex;transition:all .2s ease;text-decoration:none}.tc-sub-navbar-item .tc-sub-navbar-item-link .navbar-item-icon-container{text-align:center;align-content:center;background-color:var(--c-neutral-50);border-radius:var(--bor-radius-4);font-size:var(--f-size-20);height:var(--size-36);width:var(--size-36);transition:all .2s ease;min-height:var(--size-36);min-width:var(--size-36);max-height:var(--size-36);max-width:var(--size-36)}.tc-sub-navbar-item .tc-sub-navbar-item-link .navbar-item-icon-container:hover,.tc-sub-navbar-item .tc-sub-navbar-item-link .navbar-item-icon-container:focus{background-color:var(--c-neutral-200);color:var(--c-primary-500)}.tc-sub-navbar-item .tc-sub-navbar-item-link .navbar-item-label{align-content:center;color:var(--c-neutral-700);font-size:var(--f-size-14);height:var(--size-36);padding-left:var(--size-8);transition:all .2s ease;min-height:var(--size-36);max-height:var(--size-36)}.tc-sub-navbar-item .tc-sub-navbar-item-link:hover,.tc-sub-navbar-item .tc-sub-navbar-item-link:focus{color:var(--c-primary-500)}.tc-sub-navbar-item .tc-sub-navbar-item-link.active .navbar-item-icon-container,.tc-sub-navbar-item .tc-sub-navbar-item-link.selected .navbar-item-icon-container,.tc-sub-navbar-item .tc-sub-navbar-item-link:active .navbar-item-icon-container{background-color:var(--c-primary-300);color:var(--c-primary-500)}.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link .navbar-item-icon-container{background-color:var(--c-neutral-200)}.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link:hover .navbar-item-label,.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link:focus .navbar-item-label{color:var(--c-primary-500)}.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link.active,.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link.selected,.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link.active .navbar-item-icon-container,.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link.selected .navbar-item-icon-container{background-color:var(--c-primary-300)}.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link.active .navbar-item-label,.tc-sub-navbar-item.tc-rev-submenu-expanded .tc-sub-navbar-item-link.selected .navbar-item-label{color:var(--c-primary-500);font-weight:var(--f-weight-700)}\n"] }]
8397
+ ], template: "<li class=\"tcloud-ui-navbar-item\" [class.tcloud-ui-submenu-expanded]=\"isMenuExpanded\">\n <a\n class=\"tcloud-ui-navbar-item-link\"\n [class.selected]=\"active()\"\n [routerLink]=\"routerLink()\"\n routerLinkActive=\"active\"\n [queryParams]=\"queryParams()\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n [title]=\"label()\"\n (click)=\"handleClick($event)\">\n\n <div class=\"navbar-item-icon-container\">\n <ng-content select=\"[icon]\"></ng-content>\n </div>\n\n \n <div class=\"navbar-item-label\">\n {{label()}}\n </div>\n \n </a>\n</li>\n", styles: [":host{display:block}.tcloud-ui-navbar-item{list-style:none;margin:0;padding:0}.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link{align-items:center;border-radius:var(--bor-radius-4);color:var(--c-neutral-700);cursor:pointer;font-family:var(--f-family);display:flex;transition:all .2s ease;text-decoration:none}.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link .navbar-item-icon-container{text-align:center;align-content:center;background-color:var(--c-neutral-50);border-radius:var(--bor-radius-4);font-size:var(--f-size-20);height:var(--size-36);width:var(--size-36);transition:all .2s ease;min-height:var(--size-36);min-width:var(--size-36);max-height:var(--size-36);max-width:var(--size-36)}.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link .navbar-item-icon-container:hover,.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link .navbar-item-icon-container:focus{background-color:var(--c-neutral-200);color:var(--c-primary-500)}.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link .navbar-item-label{align-content:center;color:var(--c-neutral-700);font-size:var(--f-size-14);height:var(--size-36);padding-left:var(--size-8);transition:all .2s ease;min-height:var(--size-36);max-height:var(--size-36)}.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link:hover,.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link:focus{color:var(--c-primary-500)}.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link.active .navbar-item-icon-container,.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link.selected .navbar-item-icon-container,.tcloud-ui-navbar-item .tcloud-ui-navbar-item-link:active .navbar-item-icon-container{background-color:var(--c-primary-300);color:var(--c-primary-500)}.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link .navbar-item-icon-container{background-color:var(--c-neutral-200)}.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link:hover .navbar-item-label,.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link:focus .navbar-item-label{color:var(--c-primary-500)}.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link.active,.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link.selected,.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link.active .navbar-item-icon-container,.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link.selected .navbar-item-icon-container{background-color:var(--c-primary-300)}.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link.active .navbar-item-label,.tcloud-ui-navbar-item.tc-rev-submenu-expanded .tcloud-ui-navbar-item-link.selected .navbar-item-label{color:var(--c-primary-500);font-weight:var(--f-weight-700)}\n"] }]
7675
8398
  }], propDecorators: { isMenuExpanded: [{
7676
8399
  type: Input
7677
8400
  }] } });
7678
8401
 
7679
8402
  class TCloudUiSubNavbarComponent {
7680
8403
  constructor() {
7681
- this.isMenuExpanded = signal(true);
8404
+ this.isMenuExpanded = true;
7682
8405
  this.onSubMenuExpandChange = output();
7683
8406
  }
7684
- ngAfterContentInit() {
7685
- setTimeout(() => this.setExpandedMenuValueToChildrend(), 0);
7686
- }
7687
8407
  handleExpandMenu() {
7688
- this.isMenuExpanded.update((value) => !value);
7689
- this.setExpandedMenuValueToChildrend();
7690
- }
7691
- setExpandedMenuValueToChildrend() {
7692
- if (!this.subNavbarItems?.length)
7693
- return;
7694
- this.subNavbarItems.forEach((x) => {
7695
- x.isMenuExpanded = this.isMenuExpanded();
7696
- });
7697
- this.onSubMenuExpandChange.emit(this.isMenuExpanded());
8408
+ this.isMenuExpanded = !this.isMenuExpanded;
8409
+ this.onSubMenuExpandChange.emit(this.isMenuExpanded);
7698
8410
  }
7699
8411
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiSubNavbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7700
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", type: TCloudUiSubNavbarComponent, isStandalone: true, selector: "tcloud-ui-sub-navbar", outputs: { onSubMenuExpandChange: "onSubMenuExpandChange" }, queries: [{ propertyName: "subNavbarItems", predicate: TCloudUiSubNavbarItemComponent }], ngImport: i0, template: "<nav class=\"tcloud-ui-sub-navbar\">\n <ul\n class=\"tcloud-ui-sub-navbar-list\"\n [class.tcloud-ui-submenu-expanded]=\"isMenuExpanded()\"\n >\n <tcloud-ui-sub-navbar-item\n [isMenuExpanded]=\"isMenuExpanded()\"\n (click)=\"handleExpandMenu()\"\n label=\"Minimizar\"\n >\n <i\n class=\"fa-light\"\n [class.fa-arrow-left-to-line]=\"isMenuExpanded()\"\n [class.fa-arrow-right-to-line]=\"!isMenuExpanded()\"\n icon\n ></i>\n </tcloud-ui-sub-navbar-item>\n <ng-content></ng-content>\n </ul>\n</nav>\n", styles: [".tcloud-ui-sub-navbar{display:block;max-height:calc(100vh - 10.875rem);overflow-y:auto;min-height:300px;margin:var(--size-0);padding:var(--size-0)}.tcloud-ui-sub-navbar-list{background-color:var(--c-neutral-50);color:var(--c-neutral-700);box-shadow:var(--shadow-xs);border-radius:var(--bor-radius-8);display:flex;flex-direction:column;gap:var(--size-8);height:100%;list-style:none;margin:var(--size-0);overflow:hidden auto;padding:var(--size-8);width:var(--size-52)}.tcloud-ui-sub-navbar-list::-webkit-scrollbar{display:none}.tcloud-ui-sub-navbar-list.tcloud-ui-submenu-expanded{width:14.5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: TCloudUiSubNavbarItemComponent, selector: "tcloud-ui-sub-navbar-item", inputs: ["isMenuExpanded", "label", "active", "routerLink", "queryParams"], outputs: ["onClick"] }] }); }
8412
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.19", type: TCloudUiSubNavbarComponent, isStandalone: true, selector: "tcloud-ui-sub-navbar", outputs: { onSubMenuExpandChange: "onSubMenuExpandChange" }, queries: [{ propertyName: "subNavbarItems", predicate: TCloudUiSubNavbarItemComponent }], ngImport: i0, template: "<nav class=\"tcloud-ui-sub-navbar\">\n <ul class=\"tcloud-ui-sub-navbar-list\" [class.tcloud-ui-submenu-expanded]=\"isMenuExpanded\">\n \n <tcloud-ui-sub-navbar-item [isMenuExpanded]=\"isMenuExpanded\" (click)=\"handleExpandMenu()\" label=\"Minimizar\">\n <i class=\"fa-light\" [class.fa-arrow-left-to-line]=\"isMenuExpanded\" [class.fa-arrow-right-to-line]=\"!isMenuExpanded\" icon></i>\n </tcloud-ui-sub-navbar-item>\n\n <ng-content></ng-content>\n </ul>\n</nav>\n", styles: [".tcloud-ui-sub-navbar{display:block;max-height:calc(100vh - 10.875rem);overflow-y:auto;min-height:300px;margin:var(--size-0);padding:var(--size-0)}.tcloud-ui-sub-navbar-list{background-color:var(--c-neutral-50);color:var(--c-neutral-700);box-shadow:var(--shadow-xs);border-radius:var(--bor-radius-8);display:flex;flex-direction:column;gap:var(--size-8);height:100%;list-style:none;margin:var(--size-0);overflow:hidden auto;padding:var(--size-8);width:var(--size-52)}.tcloud-ui-sub-navbar-list::-webkit-scrollbar{display:none}.tcloud-ui-sub-navbar-list.tcloud-ui-submenu-expanded{width:14.5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: TCloudUiSubNavbarItemComponent, selector: "tcloud-ui-sub-navbar-item", inputs: ["isMenuExpanded", "label", "active", "routerLink", "queryParams"], outputs: ["onClick"] }] }); }
7701
8413
  }
7702
8414
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiSubNavbarComponent, decorators: [{
7703
8415
  type: Component,
7704
8416
  args: [{ selector: 'tcloud-ui-sub-navbar', imports: [
7705
8417
  CommonModule,
7706
8418
  TCloudUiSubNavbarItemComponent,
7707
- ], template: "<nav class=\"tcloud-ui-sub-navbar\">\n <ul\n class=\"tcloud-ui-sub-navbar-list\"\n [class.tcloud-ui-submenu-expanded]=\"isMenuExpanded()\"\n >\n <tcloud-ui-sub-navbar-item\n [isMenuExpanded]=\"isMenuExpanded()\"\n (click)=\"handleExpandMenu()\"\n label=\"Minimizar\"\n >\n <i\n class=\"fa-light\"\n [class.fa-arrow-left-to-line]=\"isMenuExpanded()\"\n [class.fa-arrow-right-to-line]=\"!isMenuExpanded()\"\n icon\n ></i>\n </tcloud-ui-sub-navbar-item>\n <ng-content></ng-content>\n </ul>\n</nav>\n", styles: [".tcloud-ui-sub-navbar{display:block;max-height:calc(100vh - 10.875rem);overflow-y:auto;min-height:300px;margin:var(--size-0);padding:var(--size-0)}.tcloud-ui-sub-navbar-list{background-color:var(--c-neutral-50);color:var(--c-neutral-700);box-shadow:var(--shadow-xs);border-radius:var(--bor-radius-8);display:flex;flex-direction:column;gap:var(--size-8);height:100%;list-style:none;margin:var(--size-0);overflow:hidden auto;padding:var(--size-8);width:var(--size-52)}.tcloud-ui-sub-navbar-list::-webkit-scrollbar{display:none}.tcloud-ui-sub-navbar-list.tcloud-ui-submenu-expanded{width:14.5rem}\n"] }]
8419
+ ], template: "<nav class=\"tcloud-ui-sub-navbar\">\n <ul class=\"tcloud-ui-sub-navbar-list\" [class.tcloud-ui-submenu-expanded]=\"isMenuExpanded\">\n \n <tcloud-ui-sub-navbar-item [isMenuExpanded]=\"isMenuExpanded\" (click)=\"handleExpandMenu()\" label=\"Minimizar\">\n <i class=\"fa-light\" [class.fa-arrow-left-to-line]=\"isMenuExpanded\" [class.fa-arrow-right-to-line]=\"!isMenuExpanded\" icon></i>\n </tcloud-ui-sub-navbar-item>\n\n <ng-content></ng-content>\n </ul>\n</nav>\n", styles: [".tcloud-ui-sub-navbar{display:block;max-height:calc(100vh - 10.875rem);overflow-y:auto;min-height:300px;margin:var(--size-0);padding:var(--size-0)}.tcloud-ui-sub-navbar-list{background-color:var(--c-neutral-50);color:var(--c-neutral-700);box-shadow:var(--shadow-xs);border-radius:var(--bor-radius-8);display:flex;flex-direction:column;gap:var(--size-8);height:100%;list-style:none;margin:var(--size-0);overflow:hidden auto;padding:var(--size-8);width:var(--size-52)}.tcloud-ui-sub-navbar-list::-webkit-scrollbar{display:none}.tcloud-ui-sub-navbar-list.tcloud-ui-submenu-expanded{width:14.5rem}\n"] }]
7708
8420
  }], propDecorators: { subNavbarItems: [{
7709
8421
  type: ContentChildren,
7710
8422
  args: [TCloudUiSubNavbarItemComponent]
7711
8423
  }] } });
7712
8424
 
8425
+ class TCloudUiSubNavbarGroupComponent {
8426
+ constructor() {
8427
+ this.subMenu = false;
8428
+ this.isMenuExpanded = false;
8429
+ this.label = input.required();
8430
+ this.onClick = output();
8431
+ this.active = input(false);
8432
+ this.routerLink = input(null);
8433
+ this.queryParams = input(null);
8434
+ }
8435
+ handleClick(_ev) {
8436
+ this.onClick.emit(_ev);
8437
+ }
8438
+ toggleSubItems() {
8439
+ this.subMenu = !this.subMenu;
8440
+ }
8441
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiSubNavbarGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8442
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.19", type: TCloudUiSubNavbarGroupComponent, isStandalone: true, selector: "tcloud-ui-sub-navbar-group", inputs: { isMenuExpanded: { classPropertyName: "isMenuExpanded", publicName: "isMenuExpanded", isSignal: false, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, routerLink: { classPropertyName: "routerLink", publicName: "routerLink", isSignal: true, isRequired: false, transformFunction: null }, queryParams: { classPropertyName: "queryParams", publicName: "queryParams", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClick: "onClick" }, ngImport: i0, template: "<li class=\"tcloud-ui-navbar-group\" [class.tcloud-ui-submenu-expanded]=\"isMenuExpanded\">\n \n \n\n <a\n class=\"tcloud-ui-navbar-group-link\"\n [class.selected]=\"active()\"\n [routerLink]=\"routerLink()\"\n routerLinkActive=\"active\"\n [queryParams]=\"queryParams()\"\n [title]=\"label()\"\n (click)=\"toggleSubItems()\">\n\n <div class=\"navbar-item-icon-container\">\n <ng-content select=\"[icon]\"></ng-content>\n </div>\n\n \n <div class=\"navbar-item-label\" >\n {{label()}}\n <i class=\"fas fa-chevron-down\"></i>\n </div>\n \n </a>\n\n <div></div>\n <ul \n class=\"tcloud-ui-submenu-items\" \n [class.tcloud-ui-submenu-items-open]=\"subMenu\">\n <ng-content></ng-content>\n </ul>\n</li>\n", styles: [":host{display:block}.tcloud-ui-navbar-group{list-style:none;margin:0;padding:0}.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link{align-items:center;border-radius:var(--bor-radius-4);color:var(--c-neutral-700);cursor:pointer;font-family:var(--f-family);display:flex;transition:all .2s ease;text-decoration:none}.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link .navbar-item-icon-container{text-align:center;align-content:center;background-color:var(--c-neutral-50);border-radius:var(--bor-radius-4);font-size:var(--f-size-20);height:var(--size-36);width:var(--size-36);transition:all .2s ease;min-height:var(--size-36);min-width:var(--size-36);max-height:var(--size-36);max-width:var(--size-36)}.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link .navbar-item-icon-container:hover,.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link .navbar-item-icon-container:focus{background-color:var(--c-neutral-200);color:var(--c-primary-500)}.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link .navbar-item-label{width:100%;position:relative;align-content:center;color:var(--c-neutral-700);font-size:var(--f-size-14);height:var(--size-36);padding-left:var(--size-8);transition:all .2s ease;min-height:var(--size-36);max-height:var(--size-36)}.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link .navbar-item-label i{position:absolute;right:0;padding-top:4px}.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link:hover,.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link:focus{color:var(--c-primary-500)}.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link.active .navbar-item-icon-container,.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link.selected .navbar-item-icon-container,.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link:active .navbar-item-icon-container{background-color:var(--c-primary-300);color:var(--c-primary-500)}.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link .navbar-item-icon-container{background-color:var(--c-neutral-200)}.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link:hover .navbar-item-label,.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link:focus .navbar-item-label{color:var(--c-primary-500)}.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link.active,.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link.selected,.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link.active .navbar-item-icon-container,.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link.selected .navbar-item-icon-container{background-color:var(--c-primary-300)}.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link.active .navbar-item-label,.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link.selected .navbar-item-label{color:var(--c-primary-500);font-weight:var(--f-weight-700)}.tcloud-ui-submenu-items{display:none}.tcloud-ui-submenu-items-open{display:block!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] }); }
8443
+ }
8444
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiSubNavbarGroupComponent, decorators: [{
8445
+ type: Component,
8446
+ args: [{ selector: 'tcloud-ui-sub-navbar-group', imports: [
8447
+ CommonModule,
8448
+ RouterModule
8449
+ ], template: "<li class=\"tcloud-ui-navbar-group\" [class.tcloud-ui-submenu-expanded]=\"isMenuExpanded\">\n \n \n\n <a\n class=\"tcloud-ui-navbar-group-link\"\n [class.selected]=\"active()\"\n [routerLink]=\"routerLink()\"\n routerLinkActive=\"active\"\n [queryParams]=\"queryParams()\"\n [title]=\"label()\"\n (click)=\"toggleSubItems()\">\n\n <div class=\"navbar-item-icon-container\">\n <ng-content select=\"[icon]\"></ng-content>\n </div>\n\n \n <div class=\"navbar-item-label\" >\n {{label()}}\n <i class=\"fas fa-chevron-down\"></i>\n </div>\n \n </a>\n\n <div></div>\n <ul \n class=\"tcloud-ui-submenu-items\" \n [class.tcloud-ui-submenu-items-open]=\"subMenu\">\n <ng-content></ng-content>\n </ul>\n</li>\n", styles: [":host{display:block}.tcloud-ui-navbar-group{list-style:none;margin:0;padding:0}.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link{align-items:center;border-radius:var(--bor-radius-4);color:var(--c-neutral-700);cursor:pointer;font-family:var(--f-family);display:flex;transition:all .2s ease;text-decoration:none}.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link .navbar-item-icon-container{text-align:center;align-content:center;background-color:var(--c-neutral-50);border-radius:var(--bor-radius-4);font-size:var(--f-size-20);height:var(--size-36);width:var(--size-36);transition:all .2s ease;min-height:var(--size-36);min-width:var(--size-36);max-height:var(--size-36);max-width:var(--size-36)}.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link .navbar-item-icon-container:hover,.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link .navbar-item-icon-container:focus{background-color:var(--c-neutral-200);color:var(--c-primary-500)}.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link .navbar-item-label{width:100%;position:relative;align-content:center;color:var(--c-neutral-700);font-size:var(--f-size-14);height:var(--size-36);padding-left:var(--size-8);transition:all .2s ease;min-height:var(--size-36);max-height:var(--size-36)}.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link .navbar-item-label i{position:absolute;right:0;padding-top:4px}.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link:hover,.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link:focus{color:var(--c-primary-500)}.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link.active .navbar-item-icon-container,.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link.selected .navbar-item-icon-container,.tcloud-ui-navbar-group .tcloud-ui-navbar-group-link:active .navbar-item-icon-container{background-color:var(--c-primary-300);color:var(--c-primary-500)}.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link .navbar-item-icon-container{background-color:var(--c-neutral-200)}.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link:hover .navbar-item-label,.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link:focus .navbar-item-label{color:var(--c-primary-500)}.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link.active,.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link.selected,.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link.active .navbar-item-icon-container,.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link.selected .navbar-item-icon-container{background-color:var(--c-primary-300)}.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link.active .navbar-item-label,.tcloud-ui-navbar-group.tc-rev-submenu-expanded .tcloud-ui-navbar-group-link.selected .navbar-item-label{color:var(--c-primary-500);font-weight:var(--f-weight-700)}.tcloud-ui-submenu-items{display:none}.tcloud-ui-submenu-items-open{display:block!important}\n"] }]
8450
+ }], propDecorators: { isMenuExpanded: [{
8451
+ type: Input
8452
+ }] } });
8453
+
7713
8454
  class TCloudUiTabGroupComponent {
7714
8455
  constructor() {
7715
8456
  this.isCarouselOverflowed = false;
@@ -7808,6 +8549,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImpo
7808
8549
  ], template: "<div [class]=\"'tcloud-ui-wizard-steps' + ` tcloud-ui-wizard-steps--${this.direction()}`\">\n @for (step of this.steps(); let i = $index; track step.title + i) {\n @let isCompleted = step.completed || i + 1 < this.currentStep();\n @let isNext = i + 1 > this.currentStep();\n <div\n class=\"tcloud-ui-wizard-step\"\n [class.tcloud-ui-wizard-step--current]=\"i + 1 === this.currentStep()\"\n [class.tcloud-ui-wizard-step--completed]=\"isCompleted\"\n [class.tcloud-ui-wizard-step--next]=\"isNext\">\n\n <span\n class=\"tcloud-ui-wizard-step__counter f-h3\"\n [class.cursor-default]=\"!this.stepClickable()\"\n [class.cursor-pointer]=\"this.stepClickable() && !isNext\"\n (click)=\"this.handleStepClick(step, isNext, i)\">\n @if (isCompleted) {\n <i class=\"fas fa-check\"></i>\n }\n @else {\n {{ i + 1 }}\n }\n </span>\n\n <div class=\"tcloud-ui-wizard-step__info\">\n <p class=\"tcloud-ui-wizard-step__title f-lg mar-none cursor-default\">\n {{ step.title }}\n </p>\n\n @if (step.description) {\n <p class=\"tcloud-ui-wizard-step__description f-sm mar-none cursor-default\">\n {{ step.description }}\n </p>\n }\n </div>\n </div>\n }\n</div>\n\n<!-- VERS\u00C3O COM DIVISOR -->\n<!-- <div [class]=\"'tcloud-ui-wizard-steps' + ` tcloud-ui-wizard-steps--${this.direction()}`\">\n @for (step of this.steps(); let i = $index; let last = $last; track step.title + i) {\n @let isCompleted = step.completed || i + 1 < this.currentStep();\n\n <div\n class=\"tcloud-ui-wizard-step\"\n [class.tcloud-ui-wizard-step--current]=\"i + 1 === this.currentStep()\"\n [class.tcloud-ui-wizard-step--completed]=\"isCompleted\"\n [class.tcloud-ui-wizard-step--next]=\"i + 1 > this.currentStep()\"\n [ngClass]=\"this.direction()\">\n\n <span class=\"tcloud-ui-wizard-step__counter f-h3 cursor-default\">\n {{ i + 1 }}\n </span>\n\n <div class=\"tcloud-ui-wizard-step__info\">\n <p class=\"tcloud-ui-wizard-step__title f-lg mar-none cursor-default\">\n {{ step.title }}\n </p>\n\n @if (step.description) {\n <p class=\"tcloud-ui-wizard-step__description f-sm mar-none cursor-default\">\n {{ step.description }}\n </p>\n }\n </div>\n </div>\n\n @if (this.steps().length > i && !last) {\n <div\n class=\"tcloud-ui-wizard-step-divider\"\n [class.completed]=\"isCompleted\"\n [ngClass]=\"this.direction()\">\n </div>\n }\n }\n</div> -->\n", styles: [":host{display:block}.tcloud-ui-wizard-steps{display:inline-flex;font-family:var(--f-family);gap:var(--size-32)}.tcloud-ui-wizard-steps--horizontal{flex-direction:row}.tcloud-ui-wizard-steps--vertical{flex-direction:column}.tcloud-ui-wizard-steps .tcloud-ui-wizard-step{display:flex;gap:var(--size-8)}.tcloud-ui-wizard-steps .tcloud-ui-wizard-step__info{max-width:13.25rem}.tcloud-ui-wizard-steps .tcloud-ui-wizard-step__counter{align-items:center;border:1px solid;border-radius:var(--bor-radius-rounded);display:flex;height:var(--size-40);justify-content:center;width:var(--size-40);transition:all .3s ease;min-height:var(--size-40);min-width:var(--size-40)}.tcloud-ui-wizard-steps .tcloud-ui-wizard-step--completed .tcloud-ui-wizard-step__counter{border-color:1px solid var(--c-primary-600);color:var(--c-neutral-600)}.tcloud-ui-wizard-steps .tcloud-ui-wizard-step--completed .tcloud-ui-wizard-step__title{color:var(--c-neutral-600);font-weight:var(--f-weight-400)}.tcloud-ui-wizard-steps .tcloud-ui-wizard-step--completed .tcloud-ui-wizard-step__description{color:var(--c-neutral-600)}.tcloud-ui-wizard-steps .tcloud-ui-wizard-step--current .tcloud-ui-wizard-step__counter{background-color:var(--c-primary-500);border-color:var(--c-primary-500);color:var(--c-neutral-50)}.tcloud-ui-wizard-steps .tcloud-ui-wizard-step--current .tcloud-ui-wizard-step__title{color:var(--c-neutral-700);font-weight:var(--f-weight-600)}.tcloud-ui-wizard-steps .tcloud-ui-wizard-step--current .tcloud-ui-wizard-step__description{color:var(--c-neutral-700);font-weight:var(--f-weight-400)}.tcloud-ui-wizard-steps .tcloud-ui-wizard-step--next .tcloud-ui-wizard-step__counter{border-color:var(--c-neutral-400);color:var(--c-neutral-400)}.tcloud-ui-wizard-steps .tcloud-ui-wizard-step--next .tcloud-ui-wizard-step__title{color:var(--c-neutral-400);font-weight:var(--f-weight-400)}.tcloud-ui-wizard-steps .tcloud-ui-wizard-step--next .tcloud-ui-wizard-step__description{color:var(--c-neutral-400)}\n"] }]
7809
8550
  }] });
7810
8551
 
8552
+ class TCloudUiSearchInputComponent {
8553
+ constructor() {
8554
+ this.searchText = '';
8555
+ this.searchTextChange = new EventEmitter();
8556
+ this.searchInput = viewChild('searchInput');
8557
+ this.searchTextForm = new FormControl('');
8558
+ this.placeholder = input('');
8559
+ this.onSearch = output();
8560
+ this.autoFocus = input(false);
8561
+ }
8562
+ ngOnChanges(_simpleChanges) {
8563
+ if (_simpleChanges['searchText']) {
8564
+ this.searchTextForm.setValue(this.searchText);
8565
+ }
8566
+ }
8567
+ ngOnInit() {
8568
+ // Inicializa o FormControl com o valor do model
8569
+ this.searchTextForm.setValue(this.searchText);
8570
+ this.searchTextForm.valueChanges
8571
+ .pipe(debounceTime(500), distinctUntilChanged(), map((text) => text?.toLowerCase() || ''))
8572
+ .subscribe((text) => {
8573
+ this.searchTextChange.emit(text);
8574
+ this.onSearch.emit(text);
8575
+ });
8576
+ }
8577
+ ngAfterViewInit() {
8578
+ if (this.autoFocus() && this.searchInput()) {
8579
+ this.searchInput().nativeElement.focus();
8580
+ }
8581
+ }
8582
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiSearchInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8583
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.19", type: TCloudUiSearchInputComponent, isStandalone: true, selector: "tcloud-ui-search-input", inputs: { searchText: { classPropertyName: "searchText", publicName: "searchText", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchTextChange: "searchTextChange", onSearch: "onSearch" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<form class=\"tcloud-ui-search-input-container\">\n <input\n type=\"text\"\n class=\"tcloud-ui-search-input-control\"\n [formControl]=\"this.searchTextForm\"\n [placeholder]=\"this.placeholder()\"\n #searchInput\n />\n\n <button class=\"tcloud-ui-search-input-btn\">\n <i class=\"fa-light fa-magnifying-glass\"></i>\n </button>\n</form>\n", styles: [":host{display:block}.tcloud-ui-search-input-container{position:relative;max-height:var(--size-40);min-height:var(--size-40);height:var(--size-40);min-width:7.5rem}.tcloud-ui-search-input-container .tcloud-ui-search-input-control{border:1px solid var(--c-neutral-400);border-radius:var(--bor-radius-pill);color:var(--c-neutral-700);display:inline-block;font-family:var(--f-family);font-size:var(--f-size-14);line-height:var(--l-height-20);outline:none;height:var(--size-40);transition:.2s ease;padding:0 var(--size-16);position:absolute;top:0;left:0;padding-right:var(--size-44);width:100%;z-index:1}.tcloud-ui-search-input-container .tcloud-ui-search-input-control:hover,.tcloud-ui-search-input-container .tcloud-ui-search-input-control:focus{border-color:var(--c-primary-500)}.tcloud-ui-search-input-container .tcloud-ui-search-input-btn{cursor:pointer;display:block;position:absolute;right:4px;top:4px;z-index:2;background-color:var(--c-primary-500);border-radius:var(--bor-radius-rounded);border:none;width:var(--size-32);height:var(--size-32);color:var(--c-neutral-50);font-size:var(--f-size-16)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] }); }
8584
+ }
8585
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiSearchInputComponent, decorators: [{
8586
+ type: Component,
8587
+ args: [{ selector: 'tcloud-ui-search-input', imports: [CommonModule, FormsModule, ReactiveFormsModule], template: "<form class=\"tcloud-ui-search-input-container\">\n <input\n type=\"text\"\n class=\"tcloud-ui-search-input-control\"\n [formControl]=\"this.searchTextForm\"\n [placeholder]=\"this.placeholder()\"\n #searchInput\n />\n\n <button class=\"tcloud-ui-search-input-btn\">\n <i class=\"fa-light fa-magnifying-glass\"></i>\n </button>\n</form>\n", styles: [":host{display:block}.tcloud-ui-search-input-container{position:relative;max-height:var(--size-40);min-height:var(--size-40);height:var(--size-40);min-width:7.5rem}.tcloud-ui-search-input-container .tcloud-ui-search-input-control{border:1px solid var(--c-neutral-400);border-radius:var(--bor-radius-pill);color:var(--c-neutral-700);display:inline-block;font-family:var(--f-family);font-size:var(--f-size-14);line-height:var(--l-height-20);outline:none;height:var(--size-40);transition:.2s ease;padding:0 var(--size-16);position:absolute;top:0;left:0;padding-right:var(--size-44);width:100%;z-index:1}.tcloud-ui-search-input-container .tcloud-ui-search-input-control:hover,.tcloud-ui-search-input-container .tcloud-ui-search-input-control:focus{border-color:var(--c-primary-500)}.tcloud-ui-search-input-container .tcloud-ui-search-input-btn{cursor:pointer;display:block;position:absolute;right:4px;top:4px;z-index:2;background-color:var(--c-primary-500);border-radius:var(--bor-radius-rounded);border:none;width:var(--size-32);height:var(--size-32);color:var(--c-neutral-50);font-size:var(--f-size-16)}\n"] }]
8588
+ }], propDecorators: { searchText: [{
8589
+ type: Input
8590
+ }], searchTextChange: [{
8591
+ type: Output
8592
+ }] } });
8593
+
7811
8594
  const COMPONENTS = [
7812
8595
  TCloudUiAccordionComponent,
7813
8596
  TCloudUiAccordionBodyComponent,
@@ -7864,11 +8647,18 @@ const COMPONENTS = [
7864
8647
  TCloudUiSkeletonLoadingComponent,
7865
8648
  TCloudUiTagComponent,
7866
8649
  TCloudUiSubNavbarComponent,
8650
+ TCloudUiSubNavbarGroupComponent,
7867
8651
  TCloudUiSubNavbarItemComponent,
7868
8652
  TCloudUiTabGroupComponent,
7869
8653
  TCloudUiTabItemComponent,
7870
8654
  TCloudUiWizardStepsComponent,
7871
- TCloudUiBreadcrumbComponent
8655
+ TCloudUiBreadcrumbComponent,
8656
+ TCloudUiSearchInputComponent,
8657
+ TCloudUiAlertBannerComponent,
8658
+ TCloudUiFilterBarComponent,
8659
+ TCloudUiLegendComponent,
8660
+ TCloudUiSearchBarComponent,
8661
+ TCloudUiUploadAreaComponent
7872
8662
  ];
7873
8663
  const DIRECTIVES = [
7874
8664
  TCloudUiAlignDirective,
@@ -7885,7 +8675,9 @@ const DIRECTIVES = [
7885
8675
  TCloudUiIpMaskDirective,
7886
8676
  TCloudUiButtonDirective,
7887
8677
  TCloudUiFormDirective,
7888
- TCloudUiSlideToggleDirective
8678
+ TCloudUiSlideToggleDirective,
8679
+ TCloudUiRadioDirective,
8680
+ TCloudUiIconButtonDirective
7889
8681
  ];
7890
8682
  const PIPES = [
7891
8683
  ToTextPipe,
@@ -7977,11 +8769,18 @@ class TCloudUiModule {
7977
8769
  TCloudUiSkeletonLoadingComponent,
7978
8770
  TCloudUiTagComponent,
7979
8771
  TCloudUiSubNavbarComponent,
8772
+ TCloudUiSubNavbarGroupComponent,
7980
8773
  TCloudUiSubNavbarItemComponent,
7981
8774
  TCloudUiTabGroupComponent,
7982
8775
  TCloudUiTabItemComponent,
7983
8776
  TCloudUiWizardStepsComponent,
7984
- TCloudUiBreadcrumbComponent, TCloudUiAlignDirective,
8777
+ TCloudUiBreadcrumbComponent,
8778
+ TCloudUiSearchInputComponent,
8779
+ TCloudUiAlertBannerComponent,
8780
+ TCloudUiFilterBarComponent,
8781
+ TCloudUiLegendComponent,
8782
+ TCloudUiSearchBarComponent,
8783
+ TCloudUiUploadAreaComponent, TCloudUiAlignDirective,
7985
8784
  TCloudUiCheckboxDirective,
7986
8785
  TCloudUiCurrencyDirective,
7987
8786
  TCloudUiElCopyDirective,
@@ -7995,7 +8794,9 @@ class TCloudUiModule {
7995
8794
  TCloudUiIpMaskDirective,
7996
8795
  TCloudUiButtonDirective,
7997
8796
  TCloudUiFormDirective,
7998
- TCloudUiSlideToggleDirective, ToTextPipe,
8797
+ TCloudUiSlideToggleDirective,
8798
+ TCloudUiRadioDirective,
8799
+ TCloudUiIconButtonDirective, ToTextPipe,
7999
8800
  BytesPipe,
8000
8801
  CNPJPipe,
8001
8802
  CPFPipe,
@@ -8058,11 +8859,18 @@ class TCloudUiModule {
8058
8859
  TCloudUiSkeletonLoadingComponent,
8059
8860
  TCloudUiTagComponent,
8060
8861
  TCloudUiSubNavbarComponent,
8862
+ TCloudUiSubNavbarGroupComponent,
8061
8863
  TCloudUiSubNavbarItemComponent,
8062
8864
  TCloudUiTabGroupComponent,
8063
8865
  TCloudUiTabItemComponent,
8064
8866
  TCloudUiWizardStepsComponent,
8065
- TCloudUiBreadcrumbComponent, TCloudUiAlignDirective,
8867
+ TCloudUiBreadcrumbComponent,
8868
+ TCloudUiSearchInputComponent,
8869
+ TCloudUiAlertBannerComponent,
8870
+ TCloudUiFilterBarComponent,
8871
+ TCloudUiLegendComponent,
8872
+ TCloudUiSearchBarComponent,
8873
+ TCloudUiUploadAreaComponent, TCloudUiAlignDirective,
8066
8874
  TCloudUiCheckboxDirective,
8067
8875
  TCloudUiCurrencyDirective,
8068
8876
  TCloudUiElCopyDirective,
@@ -8076,7 +8884,9 @@ class TCloudUiModule {
8076
8884
  TCloudUiIpMaskDirective,
8077
8885
  TCloudUiButtonDirective,
8078
8886
  TCloudUiFormDirective,
8079
- TCloudUiSlideToggleDirective, ToTextPipe,
8887
+ TCloudUiSlideToggleDirective,
8888
+ TCloudUiRadioDirective,
8889
+ TCloudUiIconButtonDirective, ToTextPipe,
8080
8890
  BytesPipe,
8081
8891
  CNPJPipe,
8082
8892
  CPFPipe,
@@ -8139,11 +8949,18 @@ class TCloudUiModule {
8139
8949
  TCloudUiSkeletonLoadingComponent,
8140
8950
  TCloudUiTagComponent,
8141
8951
  TCloudUiSubNavbarComponent,
8952
+ TCloudUiSubNavbarGroupComponent,
8142
8953
  TCloudUiSubNavbarItemComponent,
8143
8954
  TCloudUiTabGroupComponent,
8144
8955
  TCloudUiTabItemComponent,
8145
8956
  TCloudUiWizardStepsComponent,
8146
- TCloudUiBreadcrumbComponent] }); }
8957
+ TCloudUiBreadcrumbComponent,
8958
+ TCloudUiSearchInputComponent,
8959
+ TCloudUiAlertBannerComponent,
8960
+ TCloudUiFilterBarComponent,
8961
+ TCloudUiLegendComponent,
8962
+ TCloudUiSearchBarComponent,
8963
+ TCloudUiUploadAreaComponent] }); }
8147
8964
  }
8148
8965
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImport: i0, type: TCloudUiModule, decorators: [{
8149
8966
  type: NgModule,
@@ -10092,5 +10909,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.19", ngImpo
10092
10909
  * Generated bundle index. Do not edit.
10093
10910
  */
10094
10911
 
10095
- export { BytesPipe, CNPJPipe, CPFPipe, CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR$1 as CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR, DateBRPipe, DropdownGroupedSize, DropdownMultiSize$1 as DropdownMultiSize, DropdownSize$1 as DropdownSize, MonthNamePipe, MultiLevelDropdownSize, ProgressStatusBarGradientStatus, RespectivePipe, StatusInfoPipe, TCCondition, TCFiltersType, TCLOUD_UI_CONFIG, TCLOUD_UI_LAYOUT_SERVICE, TCLOUD_UI_USER_SERVICE, TCLOUD_UI_VIEWPORT_SERVICE, TCloudUiAccordionBodyComponent, TCloudUiAccordionComponent, TCloudUiAccordionTitleComponent, TCloudUiAlignDirective, TCloudUiBreadcrumbComponent, TCloudUiBreadcrumbService, TCloudUiButtonDirective, TCloudUiCalendarComponent, TCloudUiCardAccordionComponent, TCloudUiCardComponent, TCloudUiCardTitleComponent, TCloudUiCheckAccessDirective, TCloudUiCheckAccessService, TCloudUiCheckboxDirective, TCloudUiChoiceIssuesComponent, TCloudUiContainerColComponent, TCloudUiContainerComponent, TCloudUiContainerContentComponent, TCloudUiCubesComponent, TCloudUiCurrencyDirective, TCloudUiDataListComponent, TCloudUiDataListOptionComponent, TCloudUiDatepickerComponent, TCloudUiDatepickerTimeComponent, TCloudUiDigitOnlyDirective, TCloudUiDropdownComponent, TCloudUiDropdownMultiComponent, TCloudUiElCopyDirective, TCloudUiEmptyContentComponent, TCloudUiFaqComponent, TCloudUiFiltersComponent, TCloudUiFormDirective, TCloudUiHighLightDirective, TCloudUiHoverParentDirective, TCloudUiInputContainerComponent, TCloudUiInputPasswordComponent, TCloudUiInputSearchComponent, TCloudUiIpMaskDirective, TCloudUiLabelTokenComponent, TCloudUiLineStepCircleComponent, TCloudUiLineStepTitleComponent, TCloudUiLinhaLogoComponent, TCloudUiLoadingComponent, TCloudUiLoadingTransitionsService, TCloudUiMessageComponent, TCloudUiModalBodyComponent, TCloudUiModalComponent, TCloudUiModalFooterComponent, TCloudUiModalHeaderComponent, TCloudUiModule, TCloudUiMultiInputComponent, TCloudUiMultiSelectComponent, TCloudUiMultiplesValuesComponent, TCloudUiNgCheckAccessDirective, TCloudUiNgFeatureFlagsDirective, TCloudUiNotFoundComponent, TCloudUiNumberStepComponent, TCloudUiPaginationComponent, TCloudUiPaginationPipe, TCloudUiProgressBarComponent, TCloudUiRangeDateComponent, TCloudUiReorderItemsComponent, TCloudUiScrollBoxComponent, TCloudUiSearchInObjectService, TCloudUiSkeletonLoadingComponent, TCloudUiSkeletonLoadingComponentStyle, TCloudUiSlideToggleDirective, TCloudUiSubNavbarComponent, TCloudUiSubNavbarItemComponent, TCloudUiTabContentComponent, TCloudUiTabGroupComponent, TCloudUiTabHeadComponent, TCloudUiTabItemComponent, TCloudUiTabMenuComponent, TCloudUiTabSubtitleComponent, TCloudUiTabTitleComponent, TCloudUiTableComponent, TCloudUiTagComponent, TCloudUiToastComponent, TCloudUiTooltipDirective, TCloudUiWelcomeComponent, TCloudUiWizardStepsComponent, TagColorsEnum, TcRevButtonDirective, TcRevCalendarComponent, TcRevCardAccordionComponent, TcRevCardComponent, TcRevCardTitleComponent, TcRevCheckboxDirective, TcRevComponentsLibModule, TcRevDropdownComponent, TcRevDropdownGroupedComponent, TcRevDropdownMultiComponent, TcRevDropdownMultiLevelComponent, TcRevEmptyContentComponent, TcRevFaqComponent, TcRevIconButtonDirective, TcRevInputContainerComponent, TcRevInputDirective, TcRevLoadingComponent, TcRevMessageComponent, TcRevMultiInputComponent, TcRevPaginationComponent, TcRevProgressStatusBarComponent, TcRevRadioDirective, TcRevSearchInputComponent, TcRevSideDrawerComponent, TcRevSkeletonLoadingComponent, TcRevSkeletonLoadingComponentStyle, TcRevSlideToggleDirective, TcRevSmallLoadingComponent, TcRevSmallLoadingComponentStyle, TcRevSubNavbarComponent, TcRevSubNavbarItemComponent, TcRevTabGroupComponent, TcRevTabItemComponent, TcRevTagComponent, TcRevToastComponent, TcRevTooltipDirective, TcRevWizardStepsComponent, ToTextPipe, echartBarConfig, isTextEllipsed, provideTCloudUi };
10912
+ export { AcceptedFileType, BytesPipe, CNPJPipe, CPFPipe, CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR$1 as CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR, DateBRPipe, DropdownGroupedSize, DropdownMultiSize$1 as DropdownMultiSize, DropdownSize$1 as DropdownSize, MonthNamePipe, MultiLevelDropdownSize, ProductActionPipe, ProgressStatusBarGradientStatus, RespectivePipe, StatusInfoPipe, TCCondition, TCFiltersType, TCLOUD_UI_CONFIG, TCLOUD_UI_LAYOUT_SERVICE, TCLOUD_UI_USER_SERVICE, TCLOUD_UI_VIEWPORT_SERVICE, TCloudUiAccordionBodyComponent, TCloudUiAccordionComponent, TCloudUiAccordionTitleComponent, TCloudUiAlertBannerComponent, TCloudUiAlignDirective, TCloudUiBreadcrumbComponent, TCloudUiBreadcrumbService, TCloudUiButtonDirective, TCloudUiCalendarComponent, TCloudUiCardAccordionComponent, TCloudUiCardComponent, TCloudUiCardTitleComponent, TCloudUiCheckAccessDirective, TCloudUiCheckAccessService, TCloudUiCheckboxDirective, TCloudUiChoiceIssuesComponent, TCloudUiContainerColComponent, TCloudUiContainerComponent, TCloudUiContainerContentComponent, TCloudUiCubesComponent, TCloudUiCurrencyDirective, TCloudUiDataListComponent, TCloudUiDataListOptionComponent, TCloudUiDatepickerComponent, TCloudUiDatepickerTimeComponent, TCloudUiDigitOnlyDirective, TCloudUiDropdownComponent, TCloudUiDropdownMultiComponent, TCloudUiElCopyDirective, TCloudUiEmptyContentComponent, TCloudUiFaqComponent, TCloudUiFilterBarComponent, TCloudUiFiltersComponent, TCloudUiFormDirective, TCloudUiHighLightDirective, TCloudUiHoverParentDirective, TCloudUiIconButtonDirective, TCloudUiInputContainerComponent, TCloudUiInputPasswordComponent, TCloudUiInputSearchComponent, TCloudUiIpMaskDirective, TCloudUiLabelTokenComponent, TCloudUiLegendComponent, TCloudUiLineStepCircleComponent, TCloudUiLineStepTitleComponent, TCloudUiLinhaLogoComponent, TCloudUiLoadingComponent, TCloudUiLoadingTransitionsService, TCloudUiMessageComponent, TCloudUiModalBodyComponent, TCloudUiModalComponent, TCloudUiModalFooterComponent, TCloudUiModalHeaderComponent, TCloudUiModule, TCloudUiMultiInputComponent, TCloudUiMultiSelectComponent, TCloudUiMultiplesValuesComponent, TCloudUiNgCheckAccessDirective, TCloudUiNgFeatureFlagsDirective, TCloudUiNotFoundComponent, TCloudUiNumberStepComponent, TCloudUiPaginationComponent, TCloudUiPaginationPipe, TCloudUiProgressBarComponent, TCloudUiRadioDirective, TCloudUiRangeDateComponent, TCloudUiReorderItemsComponent, TCloudUiScrollBoxComponent, TCloudUiSearchBarComponent, TCloudUiSearchInObjectService, TCloudUiSearchInputComponent, TCloudUiSkeletonLoadingComponent, TCloudUiSkeletonLoadingComponentStyle, TCloudUiSlideToggleDirective, TCloudUiSubNavbarComponent, TCloudUiSubNavbarGroupComponent, TCloudUiSubNavbarItemComponent, TCloudUiTabContentComponent, TCloudUiTabGroupComponent, TCloudUiTabHeadComponent, TCloudUiTabItemComponent, TCloudUiTabMenuComponent, TCloudUiTabSubtitleComponent, TCloudUiTabTitleComponent, TCloudUiTableComponent, TCloudUiTagComponent, TCloudUiToastComponent, TCloudUiTooltipDirective, TCloudUiUploadAreaComponent, TCloudUiWelcomeComponent, TCloudUiWizardStepsComponent, TagColorsEnum, TcRevButtonDirective, TcRevCalendarComponent, TcRevCardAccordionComponent, TcRevCardComponent, TcRevCardTitleComponent, TcRevCheckboxDirective, TcRevComponentsLibModule, TcRevDropdownComponent, TcRevDropdownGroupedComponent, TcRevDropdownMultiComponent, TcRevDropdownMultiLevelComponent, TcRevEmptyContentComponent, TcRevFaqComponent, TcRevIconButtonDirective, TcRevInputContainerComponent, TcRevInputDirective, TcRevLoadingComponent, TcRevMessageComponent, TcRevMultiInputComponent, TcRevPaginationComponent, TcRevProgressStatusBarComponent, TcRevRadioDirective, TcRevSearchInputComponent, TcRevSideDrawerComponent, TcRevSkeletonLoadingComponent, TcRevSkeletonLoadingComponentStyle, TcRevSlideToggleDirective, TcRevSmallLoadingComponent, TcRevSmallLoadingComponentStyle, TcRevSubNavbarComponent, TcRevSubNavbarItemComponent, TcRevTabGroupComponent, TcRevTabItemComponent, TcRevTagComponent, TcRevToastComponent, TcRevTooltipDirective, TcRevWizardStepsComponent, ToTextPipe, TopologyEnvironmentPipe, TopologyProductPipe, TopologyRegionPipe, TopologyStatusPipe, echartBarConfig, isTextEllipsed, provideTCloudUi };
10096
10913
  //# sourceMappingURL=dev-tcloud-tcloud-ui.mjs.map