@fxlt/common-ui 0.0.4-rc2 → 0.0.5-rc1

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.
@@ -1,8 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Directive, Input, Component, createComponent, Injectable, ViewChild, Inject, EventEmitter, NgModule, HostListener, PLATFORM_ID, Output, Optional, Self, ChangeDetectionStrategy, TemplateRef, ContentChildren, ViewChildren, importProvidersFrom } from '@angular/core';
3
- import * as i32 from '@angular/material/paginator';
3
+ import * as i33 from '@angular/material/paginator';
4
4
  import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
5
- import * as i33 from '@angular/material/table';
5
+ import * as i34 from '@angular/material/table';
6
6
  import { MatTableDataSource, MatTable, MatTableModule } from '@angular/material/table';
7
7
  import * as i2 from '@angular/common';
8
8
  import { isPlatformBrowser, CommonModule } from '@angular/common';
@@ -23,36 +23,36 @@ import * as i2$2 from '@angular/router';
23
23
  import { catchError } from 'rxjs/operators';
24
24
  import * as i3$1 from '@angular/material/select';
25
25
  import { MatSelectModule } from '@angular/material/select';
26
- import * as i29 from '@angular/material/radio';
26
+ import * as i30 from '@angular/material/radio';
27
27
  import { MatRadioModule } from '@angular/material/radio';
28
- import * as i30 from '@angular/material/button';
28
+ import * as i31 from '@angular/material/button';
29
29
  import { MatButtonModule } from '@angular/material/button';
30
- import * as i31 from '@angular/material/icon';
30
+ import * as i32 from '@angular/material/icon';
31
31
  import { MatIconModule } from '@angular/material/icon';
32
- import * as i34 from '@angular/material/snack-bar';
32
+ import * as i35 from '@angular/material/snack-bar';
33
33
  import { MatSnackBarModule } from '@angular/material/snack-bar';
34
- import * as i36 from '@angular/material/checkbox';
34
+ import * as i37 from '@angular/material/checkbox';
35
35
  import { MatCheckboxModule } from '@angular/material/checkbox';
36
- import * as i37 from '@angular/material/card';
36
+ import * as i38 from '@angular/material/card';
37
37
  import { MatCardModule } from '@angular/material/card';
38
- import * as i38 from '@angular/material/datepicker';
38
+ import * as i39 from '@angular/material/datepicker';
39
39
  import { MatDatepickerModule } from '@angular/material/datepicker';
40
- import * as i39 from '@angular/material/timepicker';
40
+ import * as i40 from '@angular/material/timepicker';
41
41
  import { MatTimepickerModule } from '@angular/material/timepicker';
42
- import * as i40 from '@angular/material/badge';
42
+ import * as i41 from '@angular/material/badge';
43
43
  import { MatBadgeModule } from '@angular/material/badge';
44
- import * as i41 from '@angular/material/expansion';
44
+ import * as i42 from '@angular/material/expansion';
45
45
  import { MatExpansionModule } from '@angular/material/expansion';
46
- import * as i42 from '@angular/material/form-field';
46
+ import * as i43 from '@angular/material/form-field';
47
47
  import { MatFormFieldModule } from '@angular/material/form-field';
48
- import * as i43 from '@angular/material/menu';
48
+ import * as i44 from '@angular/material/menu';
49
49
  import { MatMenuModule } from '@angular/material/menu';
50
50
  import * as i3 from '@danielmoncada/angular-datetime-picker';
51
51
  import { OwlDateTimeModule, OwlNativeDateTimeModule, OWL_DATE_TIME_FORMATS } from '@danielmoncada/angular-datetime-picker';
52
52
  import * as i2$3 from 'ngx-echarts';
53
53
  import { NgxEchartsModule } from 'ngx-echarts';
54
54
  import { __decorate, __param } from 'tslib';
55
- import * as i26 from 'ngx-vflow';
55
+ import * as i27 from 'ngx-vflow';
56
56
  import { Vflow } from 'ngx-vflow';
57
57
  import { OwlMomentDateTimeModule } from '@danielmoncada/angular-datetime-picker-moment-adapter';
58
58
 
@@ -257,7 +257,7 @@ class FxUtils {
257
257
  return this.isNull(obj) || obj.length === 0;
258
258
  }
259
259
  static isArrayNotEmpty(obj) {
260
- return !FxUtils.isArrayEmpty(obj);
260
+ return !this.isArrayEmpty(obj);
261
261
  }
262
262
  static replaceStartWithAsterisk(inputString, numToReplace) {
263
263
  if (numToReplace >= inputString.length) {
@@ -317,6 +317,7 @@ class FxUtils {
317
317
  case 'failed':
318
318
  case 'inactive':
319
319
  case 'critical':
320
+ case 'stopped':
320
321
  return 'critical';
321
322
  case 'high':
322
323
  if (isCriticalExist) {
@@ -327,13 +328,16 @@ class FxUtils {
327
328
  case 'processing':
328
329
  case 'paused':
329
330
  case 'medium':
331
+ case 'warning':
330
332
  return 'warning';
331
333
  case 'completed':
332
334
  case 'success':
333
335
  case 'active':
334
336
  case 'low':
337
+ case 'running':
335
338
  return 'success';
336
339
  case 'queue':
340
+ case 'waiting':
337
341
  case 'info':
338
342
  return 'information';
339
343
  case 'discovery':
@@ -352,6 +356,24 @@ class FxUtils {
352
356
  const regex = /^(?=.{6,}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^A-Za-z0-9]).*$/;
353
357
  return regex.test(password);
354
358
  }
359
+ static formatSizeUnits(bytes) {
360
+ if (bytes >= 1073741824) {
361
+ return (bytes / 1073741824).toFixed(2) + " GB";
362
+ }
363
+ else if (bytes >= 1048576) {
364
+ return (bytes / 1048576).toFixed(2) + " MB";
365
+ }
366
+ else if (bytes >= 1024) {
367
+ return (bytes / 1024).toFixed(2) + " KB";
368
+ }
369
+ else if (bytes > 1) {
370
+ return bytes + " bytes";
371
+ }
372
+ else if (bytes == 1) {
373
+ return bytes + " byte";
374
+ }
375
+ return "0 bytes";
376
+ }
355
377
  }
356
378
 
357
379
  class HttpWrapper {
@@ -451,6 +473,7 @@ class BaseTableComponent extends BaseComponent {
451
473
  toastr;
452
474
  _lock = false;
453
475
  keywordChange$ = new Subject();
476
+ dataSourcePlaceholder;
454
477
  config;
455
478
  paginator;
456
479
  table;
@@ -465,10 +488,16 @@ class BaseTableComponent extends BaseComponent {
465
488
  this.keywordChange$.pipe(debounceTime(300)).subscribe(async (keyword) => {
466
489
  await this.refresh();
467
490
  });
491
+ this.dataSourcePlaceholder = Array(this.pageSize).fill({});
468
492
  this.init();
469
493
  }
470
494
  init() { }
471
495
  ngAfterViewInit() {
496
+ if (this.paginator && this.paginator.page) {
497
+ this.paginator.page.subscribe(event => {
498
+ this.onPageChange(event);
499
+ });
500
+ }
472
501
  this.ref.detectChanges();
473
502
  }
474
503
  async refresh() {
@@ -482,7 +511,7 @@ class BaseTableComponent extends BaseComponent {
482
511
  async fetch() {
483
512
  this.loading = true;
484
513
  try {
485
- const params = { page: this.page + 1, pageSize: this.pageSize, ...this.filters };
514
+ const params = { page: (this.page ?? 0) + 1, pageSize: this.pageSize, ...this.filters };
486
515
  const result = await this.api.search(params);
487
516
  this.setDataSource(result);
488
517
  }
@@ -654,8 +683,14 @@ class BaseTableComponent extends BaseComponent {
654
683
  throw err;
655
684
  }
656
685
  }
657
- value(model, key) {
658
- return _.get(model, key);
686
+ tagClass(tag) {
687
+ return FxUtils.getTagClass(tag);
688
+ }
689
+ capitalize(label) {
690
+ return _.capitalize(label);
691
+ }
692
+ value(model, key, defaultValue) {
693
+ return _.get(model, key, defaultValue);
659
694
  }
660
695
  toggleExpand(element) {
661
696
  this.expandedElement = this.expandedElement === element ? null : element;
@@ -1308,18 +1343,31 @@ class ChartComponent {
1308
1343
  palette;
1309
1344
  height = '400px';
1310
1345
  loading = false;
1346
+ pieLegendAlign = '10%';
1347
+ pieLegendPosition = 'middle';
1348
+ showPieLabel = true;
1349
+ labelFontFamily = 'BeVietnamPro';
1311
1350
  chartClick = new EventEmitter();
1312
1351
  chartInit = new EventEmitter();
1313
1352
  labelFontSize = 12;
1314
- labelFontFamily = 'BeVietnamProRegular';
1353
+ canInit = false;
1315
1354
  chartOptions = {};
1316
1355
  chartInstance;
1317
1356
  resizeObserver;
1357
+ intersectionObserver;
1318
1358
  constructor(ref, cdr) {
1319
1359
  this.ref = ref;
1320
1360
  this.cdr = cdr;
1321
1361
  }
1322
1362
  ngAfterViewInit() {
1363
+ this.intersectionObserver = new IntersectionObserver(([entry]) => {
1364
+ if (entry.isIntersecting && !this.canInit) {
1365
+ this.canInit = true;
1366
+ this.rebuildChart();
1367
+ this.cdr.detectChanges();
1368
+ }
1369
+ }, { threshold: 0.1 });
1370
+ this.intersectionObserver.observe(this.ref.nativeElement);
1323
1371
  this.resizeObserver = new ResizeObserver(() => {
1324
1372
  if (this.chartInstance)
1325
1373
  this.chartInstance.resize();
@@ -1327,11 +1375,13 @@ class ChartComponent {
1327
1375
  this.resizeObserver.observe(this.ref.nativeElement);
1328
1376
  }
1329
1377
  ngOnDestroy() {
1330
- if (this.resizeObserver)
1331
- this.resizeObserver.disconnect();
1378
+ this.resizeObserver?.disconnect();
1379
+ this.intersectionObserver?.disconnect();
1332
1380
  }
1333
1381
  ngOnChanges() {
1334
- this.rebuildChart();
1382
+ if (this.canInit) {
1383
+ this.rebuildChart();
1384
+ }
1335
1385
  }
1336
1386
  onThemeChange() {
1337
1387
  requestAnimationFrame(() => {
@@ -1344,8 +1394,7 @@ class ChartComponent {
1344
1394
  onChartInit(chart) {
1345
1395
  this.chartInstance = chart;
1346
1396
  this.chartInit.emit(chart);
1347
- requestAnimationFrame(() => this.chartInstance?.resize());
1348
- setTimeout(() => this.chartInstance?.resize(), 100);
1397
+ requestAnimationFrame(() => chart.resize());
1349
1398
  }
1350
1399
  rebuildChart() {
1351
1400
  this.chartOptions = this.buildOptions();
@@ -1369,9 +1418,13 @@ class ChartComponent {
1369
1418
  type: 'category',
1370
1419
  data: data?.categories || [],
1371
1420
  axisLabel: {
1421
+ interval: 0,
1372
1422
  fontFamily: this.labelFontFamily,
1373
1423
  fontSize: this.labelFontSize,
1374
1424
  color: FxUtils.convertColorFromVariable('--text-secondary'),
1425
+ width: 80,
1426
+ overflow: 'truncate',
1427
+ ellipsis: '…',
1375
1428
  },
1376
1429
  axisLine: {
1377
1430
  lineStyle: { color: FxUtils.convertColorFromVariable('--border-strong') },
@@ -1395,6 +1448,12 @@ class ChartComponent {
1395
1448
  series: [
1396
1449
  {
1397
1450
  type: 'bar',
1451
+ itemStyle: {
1452
+ color: (params) => {
1453
+ const palette = colors || [];
1454
+ return palette[params.dataIndex % palette.length];
1455
+ },
1456
+ },
1398
1457
  data: data?.values || [],
1399
1458
  label: {
1400
1459
  show: true,
@@ -1409,58 +1468,88 @@ class ChartComponent {
1409
1468
  },
1410
1469
  ],
1411
1470
  }),
1412
- pie: (data, colors) => ({
1413
- color: colors,
1414
- tooltip: { trigger: 'item' },
1415
- legend: {
1416
- orient: 'vertical',
1417
- top: 'bottom',
1418
- right: 10,
1419
- textStyle: {
1420
- fontFamily: "BeVietnamProRegular",
1421
- color: FxUtils.convertColorFromVariable('--text-primary'),
1422
- fontSize: 12,
1423
- fontWeight: 500,
1424
- },
1425
- icon: 'circle',
1426
- itemGap: 8,
1427
- padding: 0,
1428
- },
1429
- series: [
1430
- {
1431
- type: 'pie',
1432
- radius: ['40%', '70%'],
1433
- avoidLabelOverlap: true,
1434
- data,
1435
- label: {
1436
- //{a} Series name
1437
- //{b} Data name (slice label)
1438
- //{c} Data value
1439
- //{d} Percentage
1440
- formatter: '{b}: {c}',
1441
- fontSize: this.labelFontSize,
1471
+ pie: (data, colors) => {
1472
+ const total = data.reduce((sum, d) => sum + d.value, 0);
1473
+ return {
1474
+ color: colors,
1475
+ tooltip: { trigger: 'item' },
1476
+ legend: {
1477
+ orient: 'vertical',
1478
+ right: this.pieLegendAlign,
1479
+ top: this.pieLegendPosition,
1480
+ icon: 'circle',
1481
+ align: 'left',
1482
+ itemGap: 12,
1483
+ formatter: (name) => {
1484
+ const item = data.find((d) => d.name === name);
1485
+ return item ? `${name}: ${item.value}` : name;
1486
+ },
1487
+ textStyle: {
1442
1488
  fontFamily: this.labelFontFamily,
1489
+ fontSize: 13,
1490
+ fontWeight: 500,
1443
1491
  color: FxUtils.convertColorFromVariable('--text-primary'),
1444
- textBorderWidth: 0,
1445
- textBorderColor: 'transparent',
1446
1492
  },
1447
- labelLine: {
1448
- show: true,
1449
- length: 15,
1450
- length2: 15,
1451
- },
1452
- itemStyle: {
1453
- borderWidth: 0,
1454
- },
1455
- emphasis: {
1456
- scale: true,
1457
- scaleSize: 10,
1458
- itemStyle: { borderWidth: 0 },
1459
- label: { textBorderWidth: 0 },
1493
+ },
1494
+ series: [
1495
+ {
1496
+ type: 'pie',
1497
+ radius: ['40%', '70%'],
1498
+ center: ['40%', '50%'],
1499
+ avoidLabelOverlap: true,
1500
+ data,
1501
+ label: {
1502
+ //{a} Series name
1503
+ //{b} Data name (slice label)
1504
+ //{c} Data value
1505
+ //{d} Percentage
1506
+ position: 'outside',
1507
+ formatter: '{d}%',
1508
+ fontSize: this.labelFontSize,
1509
+ fontFamily: this.labelFontFamily,
1510
+ color: FxUtils.convertColorFromVariable('--text-primary'),
1511
+ textBorderWidth: 0,
1512
+ textBorderColor: 'transparent',
1513
+ },
1514
+ labelLine: {
1515
+ show: this.showPieLabel,
1516
+ length: 12,
1517
+ length2: 12,
1518
+ },
1519
+ itemStyle: {
1520
+ borderWidth: 0,
1521
+ },
1522
+ emphasis: {
1523
+ scale: true,
1524
+ scaleSize: 10,
1525
+ itemStyle: { borderWidth: 0 },
1526
+ label: { textBorderWidth: 0 },
1527
+ },
1460
1528
  },
1529
+ ],
1530
+ graphic: {
1531
+ type: 'group',
1532
+ left: '40%',
1533
+ top: '50%',
1534
+ bounding: 'raw',
1535
+ children: [
1536
+ {
1537
+ type: 'text',
1538
+ style: {
1539
+ text: total.toString(),
1540
+ fontSize: 24,
1541
+ fontWeight: 600,
1542
+ fontFamily: this.labelFontFamily,
1543
+ fill: FxUtils.convertColorFromVariable('--text-primary'),
1544
+ align: 'center',
1545
+ verticalAlign: 'middle',
1546
+ },
1547
+ y: 0,
1548
+ },
1549
+ ],
1461
1550
  },
1462
- ],
1463
- }),
1551
+ };
1552
+ },
1464
1553
  sunburst: (data, colors) => ({
1465
1554
  color: colors,
1466
1555
  series: [
@@ -1542,11 +1631,11 @@ class ChartComponent {
1542
1631
  });
1543
1632
  }
1544
1633
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ChartComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1545
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: ChartComponent, isStandalone: false, selector: "fx-ui-chart", inputs: { type: "type", data: "data", options: "options", palette: "palette", height: "height", loading: "loading" }, outputs: { chartClick: "chartClick", chartInit: "chartInit" }, host: { listeners: { "window:theme-changed": "onThemeChange()" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"chart-wrapper\" [style.height]=\"height\" [class.loading]=\"loading\">\n <div\n echarts\n [options]=\"chartOptions\"\n (chartInit)=\"onChartInit($event)\"\n (chartClick)=\"onChartClick($event)\"\n class=\"w-full h-full\">\n </div>\n\n <div class=\"chart-loader\" *ngIf=\"loading\">\n <span class=\"txt-default\">Loading...</span>\n </div>\n</div>", styles: [".chart-wrapper{position:relative;width:100%}.chart-container{width:100%;height:100%}.chart-loader{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(var(--bg-primary-hover)/.6);font-weight:500;font-size:1.1rem;z-index:2;border-radius:4px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$3.NgxEchartsDirective, selector: "echarts, [echarts]", inputs: ["options", "theme", "initOpts", "merge", "autoResize", "loading", "loadingType", "loadingOpts"], outputs: ["chartInit", "optionsError", "chartClick", "chartDblClick", "chartMouseDown", "chartMouseMove", "chartMouseUp", "chartMouseOver", "chartMouseOut", "chartGlobalOut", "chartContextMenu", "chartHighlight", "chartDownplay", "chartSelectChanged", "chartLegendSelectChanged", "chartLegendSelected", "chartLegendUnselected", "chartLegendLegendSelectAll", "chartLegendLegendInverseSelect", "chartLegendScroll", "chartDataZoom", "chartDataRangeSelected", "chartGraphRoam", "chartGeoRoam", "chartTreeRoam", "chartTimelineChanged", "chartTimelinePlayChanged", "chartRestore", "chartDataViewChanged", "chartMagicTypeChanged", "chartGeoSelectChanged", "chartGeoSelected", "chartGeoUnselected", "chartAxisAreaSelected", "chartBrush", "chartBrushEnd", "chartBrushSelected", "chartGlobalCursorTaken", "chartRendered", "chartFinished"], exportAs: ["echarts"] }] });
1634
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: ChartComponent, isStandalone: false, selector: "fx-ui-chart", inputs: { type: "type", data: "data", options: "options", palette: "palette", height: "height", loading: "loading", pieLegendAlign: "pieLegendAlign", pieLegendPosition: "pieLegendPosition", showPieLabel: "showPieLabel", labelFontFamily: "labelFontFamily" }, outputs: { chartClick: "chartClick", chartInit: "chartInit" }, host: { listeners: { "window:theme-changed": "onThemeChange()" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"chart-wrapper\" [style.height]=\"height\" [class.loading]=\"loading\">\n <ng-container *ngIf=\"canInit\">\n <div\n echarts\n [options]=\"chartOptions\"\n (chartInit)=\"onChartInit($event)\"\n (chartClick)=\"onChartClick($event)\"\n class=\"w-full h-full\">\n </div>\n </ng-container>\n\n <div class=\"chart-loader\" *ngIf=\"loading\">\n <span class=\"txt-default\">Loading...</span>\n </div>\n</div>\n", styles: [":host{display:block;width:100%}.chart-wrapper{position:relative;width:100%;height:100%}.chart-container{width:100%;height:100%}.chart-loader{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(var(--bg-primary-hover)/.6);font-weight:500;font-size:1.1rem;z-index:2;border-radius:4px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$3.NgxEchartsDirective, selector: "echarts, [echarts]", inputs: ["options", "theme", "initOpts", "merge", "autoResize", "loading", "loadingType", "loadingOpts"], outputs: ["chartInit", "optionsError", "chartClick", "chartDblClick", "chartMouseDown", "chartMouseMove", "chartMouseUp", "chartMouseOver", "chartMouseOut", "chartGlobalOut", "chartContextMenu", "chartHighlight", "chartDownplay", "chartSelectChanged", "chartLegendSelectChanged", "chartLegendSelected", "chartLegendUnselected", "chartLegendLegendSelectAll", "chartLegendLegendInverseSelect", "chartLegendScroll", "chartDataZoom", "chartDataRangeSelected", "chartGraphRoam", "chartGeoRoam", "chartTreeRoam", "chartTimelineChanged", "chartTimelinePlayChanged", "chartRestore", "chartDataViewChanged", "chartMagicTypeChanged", "chartGeoSelectChanged", "chartGeoSelected", "chartGeoUnselected", "chartAxisAreaSelected", "chartBrush", "chartBrushEnd", "chartBrushSelected", "chartGlobalCursorTaken", "chartRendered", "chartFinished"], exportAs: ["echarts"] }] });
1546
1635
  }
1547
1636
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: ChartComponent, decorators: [{
1548
1637
  type: Component,
1549
- args: [{ selector: 'fx-ui-chart', standalone: false, template: "<div class=\"chart-wrapper\" [style.height]=\"height\" [class.loading]=\"loading\">\n <div\n echarts\n [options]=\"chartOptions\"\n (chartInit)=\"onChartInit($event)\"\n (chartClick)=\"onChartClick($event)\"\n class=\"w-full h-full\">\n </div>\n\n <div class=\"chart-loader\" *ngIf=\"loading\">\n <span class=\"txt-default\">Loading...</span>\n </div>\n</div>", styles: [".chart-wrapper{position:relative;width:100%}.chart-container{width:100%;height:100%}.chart-loader{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(var(--bg-primary-hover)/.6);font-weight:500;font-size:1.1rem;z-index:2;border-radius:4px}\n"] }]
1638
+ args: [{ selector: 'fx-ui-chart', standalone: false, template: "<div class=\"chart-wrapper\" [style.height]=\"height\" [class.loading]=\"loading\">\n <ng-container *ngIf=\"canInit\">\n <div\n echarts\n [options]=\"chartOptions\"\n (chartInit)=\"onChartInit($event)\"\n (chartClick)=\"onChartClick($event)\"\n class=\"w-full h-full\">\n </div>\n </ng-container>\n\n <div class=\"chart-loader\" *ngIf=\"loading\">\n <span class=\"txt-default\">Loading...</span>\n </div>\n</div>\n", styles: [":host{display:block;width:100%}.chart-wrapper{position:relative;width:100%;height:100%}.chart-container{width:100%;height:100%}.chart-loader{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(var(--bg-primary-hover)/.6);font-weight:500;font-size:1.1rem;z-index:2;border-radius:4px}\n"] }]
1550
1639
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { type: [{
1551
1640
  type: Input
1552
1641
  }], data: [{
@@ -1559,6 +1648,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
1559
1648
  type: Input
1560
1649
  }], loading: [{
1561
1650
  type: Input
1651
+ }], pieLegendAlign: [{
1652
+ type: Input
1653
+ }], pieLegendPosition: [{
1654
+ type: Input
1655
+ }], showPieLabel: [{
1656
+ type: Input
1657
+ }], labelFontFamily: [{
1658
+ type: Input
1562
1659
  }], chartClick: [{
1563
1660
  type: Output
1564
1661
  }], chartInit: [{
@@ -1917,7 +2014,7 @@ class FlowConnection {
1917
2014
  ];
1918
2015
  }
1919
2016
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: FlowConnection, deps: [], target: i0.ɵɵFactoryTarget.Component });
1920
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: FlowConnection, isStandalone: false, selector: "fx-ui-flow-connection", inputs: { nodes: "nodes", edges: "edges", backgroundColor: "backgroundColor", view: "view" }, ngImport: i0, template: "<vflow\n [background]=\"{\n type: 'solid',\n color: `rgba(var(${backgroundColor})`\n}\"\n [nodes]=\"nodes\"\n [edges]=\"edges\"\n (onConnect)=\"handleConnection($event)\"\n [view]=\"view\"\n/>\n", styles: [""], dependencies: [{ kind: "component", type: i26.VflowComponent, selector: "vflow", inputs: ["view", "minZoom", "maxZoom", "background", "optimization", "entitiesSelectable", "keyboardShortcuts", "connection", "snapGrid", "elevateNodesOnSelect", "elevateEdgesOnSelect", "nodes", "alignmentHelper", "edges"], outputs: ["onComponentNodeEvent"] }, { kind: "directive", type: i26.ConnectionControllerDirective, selector: "[onConnect], [onReconnect]", outputs: ["onConnect", "onReconnect"] }] });
2017
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.4", type: FlowConnection, isStandalone: false, selector: "fx-ui-flow-connection", inputs: { nodes: "nodes", edges: "edges", backgroundColor: "backgroundColor", view: "view" }, ngImport: i0, template: "<vflow\n [background]=\"{\n type: 'solid',\n color: `rgba(var(${backgroundColor})`\n}\"\n [nodes]=\"nodes\"\n [edges]=\"edges\"\n (onConnect)=\"handleConnection($event)\"\n [view]=\"view\"\n/>\n", styles: [""], dependencies: [{ kind: "component", type: i27.VflowComponent, selector: "vflow", inputs: ["view", "minZoom", "maxZoom", "background", "optimization", "entitiesSelectable", "keyboardShortcuts", "connection", "snapGrid", "elevateNodesOnSelect", "elevateEdgesOnSelect", "nodes", "alignmentHelper", "edges"], outputs: ["onComponentNodeEvent"] }, { kind: "directive", type: i27.ConnectionControllerDirective, selector: "[onConnect], [onReconnect]", outputs: ["onConnect", "onReconnect"] }] });
1921
2018
  }
1922
2019
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: FlowConnection, decorators: [{
1923
2020
  type: Component,
@@ -2695,17 +2792,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
2695
2792
  args: ['window:resize']
2696
2793
  }] } });
2697
2794
 
2795
+ class TableCell {
2796
+ loading;
2797
+ skeletonClass = 'h-4 w-full';
2798
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: TableCell, deps: [], target: i0.ɵɵFactoryTarget.Component });
2799
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: TableCell, isStandalone: false, selector: "fx-ui-table-cell", inputs: { loading: "loading", skeletonClass: "skeletonClass" }, ngImport: i0, template: "@if (!loading) {\n <div animate.enter=\"fade-in-animation\" class=\"inline-block my-normal\">\n <ng-content />\n </div>\n} @else {\n <div animate.enter=\"fade-in-animation\" class=\"skeleton-load my-semi\" [class]=\"skeletonClass\"></div>\n}\n", styles: [""] });
2800
+ }
2801
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: TableCell, decorators: [{
2802
+ type: Component,
2803
+ args: [{ selector: 'fx-ui-table-cell', standalone: false, template: "@if (!loading) {\n <div animate.enter=\"fade-in-animation\" class=\"inline-block my-normal\">\n <ng-content />\n </div>\n} @else {\n <div animate.enter=\"fade-in-animation\" class=\"skeleton-load my-semi\" [class]=\"skeletonClass\"></div>\n}\n" }]
2804
+ }], propDecorators: { loading: [{
2805
+ type: Input,
2806
+ args: [{ required: true }]
2807
+ }], skeletonClass: [{
2808
+ type: Input
2809
+ }] } });
2810
+
2698
2811
  class TagComponent {
2699
2812
  label;
2700
2813
  type = 'default';
2701
2814
  rounded = true;
2702
2815
  icon;
2816
+ solid = false;
2703
2817
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: TagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2704
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: TagComponent, isStandalone: false, selector: "fx-ui-tag", inputs: { label: "label", type: "type", rounded: "rounded", icon: "icon" }, ngImport: i0, template: "<div\n class=\"flex flex-row gap-1\"\n [class]=\"rounded ? 'tag-round' : 'tag-square'\"\n [ngClass]=\"{\n 'tag-critical': type === 'critical',\n 'tag-success': type === 'success',\n 'tag-warning': type === 'warning',\n 'tag-information': type === 'information',\n 'tag-discovery': type === 'discovery',\n 'tag-danger': type === 'danger',\n 'tag-default': type === 'default'\n }\"\n>\n @if(icon){<fx-ui-hero-icon\n class=\"flex\"\n [icon]=\"icon\"\n [size]=\"18\"\n [ngClass]=\"{\n 'text-critical': type === 'critical',\n 'text-success': type === 'success',\n 'text-warning': type === 'warning',\n 'text-information': type === 'information',\n 'text-discovery': type === 'discovery',\n 'text-danger': type === 'danger',\n 'text-text-primary': type === 'default',\n }\"\n ></fx-ui-hero-icon\n >}\n\n <div\n [ngClass]=\"{\n 'txt-tag-critical': type === 'critical',\n 'txt-tag-success': type === 'success',\n 'txt-tag-warning': type === 'warning',\n 'txt-tag-information': type === 'information',\n 'txt-tag-discovery': type === 'discovery',\n 'txt-tag-danger': type === 'danger',\n 'txt-tag-default': type === 'default',\n }\"\n >\n {{ label }}\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: HeroIconComponent, selector: "fx-ui-hero-icon", inputs: ["icon", "solid", "outline", "size", "color", "class"] }] });
2818
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.4", type: TagComponent, isStandalone: false, selector: "fx-ui-tag", inputs: { label: "label", type: "type", rounded: "rounded", icon: "icon", solid: "solid" }, ngImport: i0, template: "<div\n [class]=\"`flex flex-row gap-small ${rounded ? 'tag-round' : 'tag-square'} tag-${type}${solid ? '-solid' : ''}`\"\n>\n @if(icon){\n <fx-ui-hero-icon\n [class]=\"`flex txt-tag-${type} ${solid ? 'text-white': ''}`\"\n [icon]=\"icon\"\n [size]=\"18\"\n ></fx-ui-hero-icon>\n }\n\n <div [class]=\"`txt-tag-${type} ${solid ? 'text-white': ''}`\">\n {{ label }}\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: HeroIconComponent, selector: "fx-ui-hero-icon", inputs: ["icon", "solid", "outline", "size", "color", "class"] }] });
2705
2819
  }
2706
2820
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: TagComponent, decorators: [{
2707
2821
  type: Component,
2708
- args: [{ selector: 'fx-ui-tag', standalone: false, template: "<div\n class=\"flex flex-row gap-1\"\n [class]=\"rounded ? 'tag-round' : 'tag-square'\"\n [ngClass]=\"{\n 'tag-critical': type === 'critical',\n 'tag-success': type === 'success',\n 'tag-warning': type === 'warning',\n 'tag-information': type === 'information',\n 'tag-discovery': type === 'discovery',\n 'tag-danger': type === 'danger',\n 'tag-default': type === 'default'\n }\"\n>\n @if(icon){<fx-ui-hero-icon\n class=\"flex\"\n [icon]=\"icon\"\n [size]=\"18\"\n [ngClass]=\"{\n 'text-critical': type === 'critical',\n 'text-success': type === 'success',\n 'text-warning': type === 'warning',\n 'text-information': type === 'information',\n 'text-discovery': type === 'discovery',\n 'text-danger': type === 'danger',\n 'text-text-primary': type === 'default',\n }\"\n ></fx-ui-hero-icon\n >}\n\n <div\n [ngClass]=\"{\n 'txt-tag-critical': type === 'critical',\n 'txt-tag-success': type === 'success',\n 'txt-tag-warning': type === 'warning',\n 'txt-tag-information': type === 'information',\n 'txt-tag-discovery': type === 'discovery',\n 'txt-tag-danger': type === 'danger',\n 'txt-tag-default': type === 'default',\n }\"\n >\n {{ label }}\n </div>\n</div>\n" }]
2822
+ args: [{ selector: 'fx-ui-tag', standalone: false, template: "<div\n [class]=\"`flex flex-row gap-small ${rounded ? 'tag-round' : 'tag-square'} tag-${type}${solid ? '-solid' : ''}`\"\n>\n @if(icon){\n <fx-ui-hero-icon\n [class]=\"`flex txt-tag-${type} ${solid ? 'text-white': ''}`\"\n [icon]=\"icon\"\n [size]=\"18\"\n ></fx-ui-hero-icon>\n }\n\n <div [class]=\"`txt-tag-${type} ${solid ? 'text-white': ''}`\">\n {{ label }}\n </div>\n</div>\n" }]
2709
2823
  }], propDecorators: { label: [{
2710
2824
  type: Input
2711
2825
  }], type: [{
@@ -2714,6 +2828,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
2714
2828
  type: Input
2715
2829
  }], icon: [{
2716
2830
  type: Input
2831
+ }], solid: [{
2832
+ type: Input
2717
2833
  }] } });
2718
2834
 
2719
2835
  class TreeDiagram {
@@ -2844,6 +2960,7 @@ const FX_COMPONENTS = [
2844
2960
  FlowConnection,
2845
2961
  CircleProgressBar,
2846
2962
  TreeDiagram,
2963
+ TableCell,
2847
2964
  ];
2848
2965
 
2849
2966
  class ConfirmationDialogComponent {
@@ -2899,7 +3016,7 @@ const MY_MOMENT_FORMATS = {
2899
3016
  };
2900
3017
  class UiModule {
2901
3018
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: UiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2902
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.4", ngImport: i0, type: UiModule, declarations: [InputComponent, SelectComponent, RadioButtonComponent, CheckboxComponent, DndUploadComponent, ButtonComponent, RadioButtonToggleComponent, DatetimePicker, LoadingPanel, SearchBarComponent, TabGroupComponent, TabComponent, HeroIconComponent, ToastComponent, ToastContainerComponent, TagComponent, ChartComponent, SliderComponent, SwitchComponent, RichTextAreaComponent, SkeletonTableLoadingComponent, FlowConnection, CircleProgressBar, TreeDiagram, ConfirmationDialogComponent], imports: [CommonModule,
3019
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.4", ngImport: i0, type: UiModule, declarations: [InputComponent, SelectComponent, RadioButtonComponent, CheckboxComponent, DndUploadComponent, ButtonComponent, RadioButtonToggleComponent, DatetimePicker, LoadingPanel, SearchBarComponent, TabGroupComponent, TabComponent, HeroIconComponent, ToastComponent, ToastContainerComponent, TagComponent, ChartComponent, SliderComponent, SwitchComponent, RichTextAreaComponent, SkeletonTableLoadingComponent, FlowConnection, CircleProgressBar, TreeDiagram, TableCell, ConfirmationDialogComponent], imports: [CommonModule,
2903
3020
  FormsModule,
2904
3021
  ReactiveFormsModule,
2905
3022
  OwlDateTimeModule,
@@ -2907,14 +3024,14 @@ class UiModule {
2907
3024
  OwlMomentDateTimeModule,
2908
3025
  HasPermissionDirective,
2909
3026
  TrimOnBlurDirective,
2910
- NgHeroiconsModule, i26.VflowComponent, i26.HandleComponent, i26.ResizableComponent, i26.SelectableDirective, i26.MiniMapComponent, i26.NodeToolbarComponent, i26.CustomTemplateEdgeComponent, i26.DragHandleDirective, i26.ConnectionControllerDirective, i26.NodeHtmlTemplateDirective, i26.NodeSvgTemplateDirective, i26.GroupNodeTemplateDirective, i26.EdgeLabelHtmlTemplateDirective, i26.EdgeTemplateDirective, i26.ConnectionTemplateDirective, i26.HandleTemplateDirective, i2$3.NgxEchartsModule, i3$1.MatSelectModule, i29.MatRadioModule, i30.MatButtonModule, i31.MatIconModule, i32.MatPaginatorModule, i33.MatTableModule, i34.MatSnackBarModule, i1$1.MatDialogModule, i36.MatCheckboxModule, i37.MatCardModule, i38.MatDatepickerModule, i39.MatTimepickerModule, i40.MatBadgeModule, i41.MatExpansionModule, i42.MatFormFieldModule, i43.MatMenuModule], exports: [InputComponent, SelectComponent, RadioButtonComponent, CheckboxComponent, DndUploadComponent, ButtonComponent, RadioButtonToggleComponent, DatetimePicker, LoadingPanel, SearchBarComponent, TabGroupComponent, TabComponent, HeroIconComponent, ToastComponent, ToastContainerComponent, TagComponent, ChartComponent, SliderComponent, SwitchComponent, RichTextAreaComponent, SkeletonTableLoadingComponent, FlowConnection, CircleProgressBar, TreeDiagram, ConfirmationDialogComponent,
3027
+ NgHeroiconsModule, i27.VflowComponent, i27.HandleComponent, i27.ResizableComponent, i27.SelectableDirective, i27.MiniMapComponent, i27.NodeToolbarComponent, i27.CustomTemplateEdgeComponent, i27.DragHandleDirective, i27.ConnectionControllerDirective, i27.NodeHtmlTemplateDirective, i27.NodeSvgTemplateDirective, i27.GroupNodeTemplateDirective, i27.EdgeLabelHtmlTemplateDirective, i27.EdgeTemplateDirective, i27.ConnectionTemplateDirective, i27.HandleTemplateDirective, i2$3.NgxEchartsModule, i3$1.MatSelectModule, i30.MatRadioModule, i31.MatButtonModule, i32.MatIconModule, i33.MatPaginatorModule, i34.MatTableModule, i35.MatSnackBarModule, i1$1.MatDialogModule, i37.MatCheckboxModule, i38.MatCardModule, i39.MatDatepickerModule, i40.MatTimepickerModule, i41.MatBadgeModule, i42.MatExpansionModule, i43.MatFormFieldModule, i44.MatMenuModule], exports: [InputComponent, SelectComponent, RadioButtonComponent, CheckboxComponent, DndUploadComponent, ButtonComponent, RadioButtonToggleComponent, DatetimePicker, LoadingPanel, SearchBarComponent, TabGroupComponent, TabComponent, HeroIconComponent, ToastComponent, ToastContainerComponent, TagComponent, ChartComponent, SliderComponent, SwitchComponent, RichTextAreaComponent, SkeletonTableLoadingComponent, FlowConnection, CircleProgressBar, TreeDiagram, TableCell, ConfirmationDialogComponent,
2911
3028
  // Module
2912
3029
  FormsModule,
2913
3030
  ReactiveFormsModule,
2914
3031
  OwlDateTimeModule,
2915
3032
  OwlNativeDateTimeModule,
2916
3033
  HasPermissionDirective,
2917
- NgHeroiconsModule, i3$1.MatSelectModule, i29.MatRadioModule, i30.MatButtonModule, i31.MatIconModule, i32.MatPaginatorModule, i33.MatTableModule, i34.MatSnackBarModule, i1$1.MatDialogModule, i36.MatCheckboxModule, i37.MatCardModule, i38.MatDatepickerModule, i39.MatTimepickerModule, i40.MatBadgeModule, i41.MatExpansionModule, i42.MatFormFieldModule, i43.MatMenuModule] });
3034
+ NgHeroiconsModule, i3$1.MatSelectModule, i30.MatRadioModule, i31.MatButtonModule, i32.MatIconModule, i33.MatPaginatorModule, i34.MatTableModule, i35.MatSnackBarModule, i1$1.MatDialogModule, i37.MatCheckboxModule, i38.MatCardModule, i39.MatDatepickerModule, i40.MatTimepickerModule, i41.MatBadgeModule, i42.MatExpansionModule, i43.MatFormFieldModule, i44.MatMenuModule] });
2918
3035
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: UiModule, providers: [
2919
3036
  importProvidersFrom(NgHeroiconsModule.forRoot()),
2920
3037
  { provide: OWL_DATE_TIME_FORMATS, useValue: MY_MOMENT_FORMATS },
@@ -2924,13 +3041,13 @@ class UiModule {
2924
3041
  OwlDateTimeModule,
2925
3042
  OwlNativeDateTimeModule,
2926
3043
  OwlMomentDateTimeModule,
2927
- NgHeroiconsModule, i26.VflowComponent, i26.HandleComponent, i26.ResizableComponent, i26.MiniMapComponent, i26.NodeToolbarComponent, i26.CustomTemplateEdgeComponent, NgxEchartsModule.forRoot({ echarts: () => import('echarts') }), MATERIAL_MODULE,
3044
+ NgHeroiconsModule, i27.VflowComponent, i27.HandleComponent, i27.ResizableComponent, i27.MiniMapComponent, i27.NodeToolbarComponent, i27.CustomTemplateEdgeComponent, NgxEchartsModule.forRoot({ echarts: () => import('echarts') }), MATERIAL_MODULE,
2928
3045
  // Module
2929
3046
  FormsModule,
2930
3047
  ReactiveFormsModule,
2931
3048
  OwlDateTimeModule,
2932
3049
  OwlNativeDateTimeModule,
2933
- NgHeroiconsModule, i3$1.MatSelectModule, i29.MatRadioModule, i30.MatButtonModule, i31.MatIconModule, i32.MatPaginatorModule, i33.MatTableModule, i34.MatSnackBarModule, i1$1.MatDialogModule, i36.MatCheckboxModule, i37.MatCardModule, i38.MatDatepickerModule, i39.MatTimepickerModule, i40.MatBadgeModule, i41.MatExpansionModule, i42.MatFormFieldModule, i43.MatMenuModule] });
3050
+ NgHeroiconsModule, i3$1.MatSelectModule, i30.MatRadioModule, i31.MatButtonModule, i32.MatIconModule, i33.MatPaginatorModule, i34.MatTableModule, i35.MatSnackBarModule, i1$1.MatDialogModule, i37.MatCheckboxModule, i38.MatCardModule, i39.MatDatepickerModule, i40.MatTimepickerModule, i41.MatBadgeModule, i42.MatExpansionModule, i43.MatFormFieldModule, i44.MatMenuModule] });
2934
3051
  }
2935
3052
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: UiModule, decorators: [{
2936
3053
  type: NgModule,
@@ -2978,5 +3095,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImpor
2978
3095
  * Generated bundle index. Do not edit.
2979
3096
  */
2980
3097
 
2981
- export { AuthInterceptor, AuthStateService, BaseComponent, BaseDialogComponent, BaseResolver, BaseTableComponent, BreadcrumbService, ButtonComponent, ChartComponent, CheckboxComponent, CircleProgressBar, ConfirmationDialogComponent, DatetimePicker, DndUploadComponent, FlowConnection, FxLoadingService, FxStorageService, FxToastrService, FxUtils, HasPermissionDirective, HeroIconComponent, HttpLoaderFactory, HttpWrapper, InputComponent, LoadingPanel, MY_MOMENT_FORMATS, PermissionGuard, PermissionService, QuillStyleLoaderService, RadioButtonComponent, RadioButtonToggleComponent, RichTextAreaComponent, SearchBarComponent, SelectComponent, SkeletonTableLoadingComponent, SliderComponent, SwitchComponent, TabComponent, TabGroupComponent, TagComponent, ThemeService, ToastComponent, ToastContainerComponent, TranslationModule, TranslationService, TreeDiagram, TrimOnBlurDirective, UiModule };
3098
+ export { AuthInterceptor, AuthStateService, BaseComponent, BaseDialogComponent, BaseResolver, BaseTableComponent, BreadcrumbService, ButtonComponent, ChartComponent, CheckboxComponent, CircleProgressBar, ConfirmationDialogComponent, DatetimePicker, DndUploadComponent, FlowConnection, FxLoadingService, FxStorageService, FxToastrService, FxUtils, HasPermissionDirective, HeroIconComponent, HttpLoaderFactory, HttpWrapper, InputComponent, LoadingPanel, MY_MOMENT_FORMATS, PermissionGuard, PermissionService, QuillStyleLoaderService, RadioButtonComponent, RadioButtonToggleComponent, RichTextAreaComponent, SearchBarComponent, SelectComponent, SkeletonTableLoadingComponent, SliderComponent, SwitchComponent, TabComponent, TabGroupComponent, TableCell, TagComponent, ThemeService, ToastComponent, ToastContainerComponent, TranslationModule, TranslationService, TreeDiagram, TrimOnBlurDirective, UiModule };
2982
3099
  //# sourceMappingURL=fxlt-common-ui.mjs.map