ng-prime-tools 1.0.10 → 1.0.12

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,11 +1,8 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, Input, } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  import * as i1 from "@angular/common";
4
4
  import * as i2 from "../pt-menu/pt-menu.component";
5
5
  export class PTCardComponent {
6
- constructor() {
7
- this.config = {};
8
- }
9
6
  // Default values as readonly variables
10
7
  static { this.DEFAULT_TITLE_COLOR = '#333'; }
11
8
  static { this.DEFAULT_TITLE_FONT_SIZE = '1.5em'; }
@@ -46,6 +43,15 @@ export class PTCardComponent {
46
43
  '--text-align': alignMap[title?.position || PTCardComponent.DEFAULT_TITLE_POSITION],
47
44
  };
48
45
  }
46
+ constructor(cd) {
47
+ this.cd = cd;
48
+ this.config = {};
49
+ }
50
+ updateStyles() {
51
+ // After data is fetched or updated
52
+ this.getCardStyles();
53
+ this.cd.detectChanges(); // Force Angular to detect the changes
54
+ }
49
55
  getIconClass() {
50
56
  const icon = this.config.title?.icon;
51
57
  return typeof icon === 'string' ? icon : icon?.code || null;
@@ -74,27 +80,30 @@ export class PTCardComponent {
74
80
  return this.config.menuPosition || PTCardComponent.DEFAULT_MENU_POSITION;
75
81
  }
76
82
  getCardStyles() {
77
- const transparency = this.config.pattern?.transparencyPercentage ||
78
- PTCardComponent.DEFAULT_TRANSPARENCY;
79
- const backgroundImage = this.config.pattern
80
- ? `linear-gradient(rgba(255, 255, 255, ${1 - parseFloat(transparency) / 100}), rgba(255, 255, 255, ${1 - parseFloat(transparency) / 100})), url(${this.config.pattern.imageUrl})`
81
- : '';
82
- // Apply border conditionally based on noBorder property
83
- const borderStyle = this.config.noBorder
84
- ? 'none'
85
- : `solid ${this.config.borderWidth || PTCardComponent.DEFAULT_BORDER_WIDTH} ${this.config.borderColor || PTCardComponent.DEFAULT_BORDER_COLOR}`;
83
+ const transparency = this.config.pattern?.transparencyPercentage
84
+ ? parseFloat(this.config.pattern.transparencyPercentage) / 100
85
+ : 1; // Default to no transparency (1 = fully opaque)
86
86
  return {
87
- backgroundColor: this.config.backgroundColor || PTCardComponent.DEFAULT_BACKGROUND_COLOR,
88
- backgroundImage: backgroundImage,
89
- backgroundSize: 'cover',
90
- backgroundPosition: 'center',
87
+ backgroundColor: this.config.pattern?.imageUrl
88
+ ? this.config.pattern.backgroundColor ||
89
+ PTCardComponent.DEFAULT_BACKGROUND_COLOR
90
+ : this.config.backgroundColor ||
91
+ PTCardComponent.DEFAULT_BACKGROUND_COLOR,
91
92
  width: this.config.width || PTCardComponent.DEFAULT_WIDTH,
92
93
  height: this.config.height || PTCardComponent.DEFAULT_HEIGHT,
93
- border: borderStyle,
94
+ border: this.config.noBorder
95
+ ? 'none'
96
+ : `solid ${this.config.borderWidth || PTCardComponent.DEFAULT_BORDER_WIDTH} ${this.config.borderColor || PTCardComponent.DEFAULT_BORDER_COLOR}`,
94
97
  padding: this.config.padding || PTCardComponent.DEFAULT_PADDING,
95
98
  margin: this.config.margin || PTCardComponent.DEFAULT_MARGIN,
96
99
  borderRadius: this.config.borderRadius || '8px',
97
100
  boxShadow: this.config.boxShadow || '0 2px 4px rgba(0, 0, 0, 0.1)',
101
+ position: 'relative', // Needed for ::before positioning
102
+ '--background-image-url': this.config.pattern?.imageUrl
103
+ ? `url(${this.config.pattern.imageUrl})`
104
+ : '',
105
+ '--image-opacity': transparency.toString(), // Pass transparency to CSS
106
+ overflow: 'hidden', // Ensure no overflow
98
107
  };
99
108
  }
100
109
  isScrollableHorizontal() {
@@ -103,13 +112,13 @@ export class PTCardComponent {
103
112
  isScrollableVertical() {
104
113
  return !!this.config.scrollableVertical;
105
114
  }
106
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
107
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTCardComponent, selector: "pt-card", inputs: { config: "config" }, ngImport: i0, template: "<div class=\"pt-card card\" [ngStyle]=\"getCardStyles()\">\n <div *ngIf=\"hasTitle()\" class=\"card-header\" [ngStyle]=\"getTitleStyles()\">\n <i\n *ngIf=\"getIconClass() && getIconPosition() === 'left'\"\n [ngClass]=\"getIconClass()\"\n [ngStyle]=\"getIconStyles()\"\n class=\"card-header-icon-left\"\n ></i>\n <span>{{ getTitleText() }}</span>\n <i\n *ngIf=\"getIconClass() && getIconPosition() === 'right'\"\n [ngClass]=\"getIconClass()\"\n [ngStyle]=\"getIconStyles()\"\n class=\"card-header-icon-right\"\n ></i>\n <pt-menu\n *ngIf=\"config.menu\"\n [config]=\"config.menu\"\n [ngClass]=\"{\n 'menu-left': getMenuPosition() === 'left',\n 'menu-right': getMenuPosition() === 'right'\n }\"\n ></pt-menu>\n </div>\n <div\n class=\"card-body\"\n [ngClass]=\"{\n 'card-body-scrollable-vertical': isScrollableVertical(),\n 'card-body-scrollable-horizontal': isScrollableHorizontal()\n }\"\n >\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".pt-card .card{padding:16px;margin:16px 0;display:flex;flex-direction:column;max-height:100vh;overflow:hidden;background-size:cover;background-position:center}.pt-card .card-body{flex-grow:1;max-width:100%}.pt-card .card-body-scrollable-horizontal{overflow-x:auto;padding-bottom:8px}.pt-card .card-body-scrollable-vertical{flex-grow:1;overflow-y:auto;padding-right:8px}.pt-card .card-header{margin-bottom:16px;display:flex;align-items:center;justify-content:var(--text-align, left);position:relative}.pt-card .card-header-icon-left{margin-right:6px}.pt-card .card-header-icon-right{margin-left:6px}.pt-card .menu-left{position:absolute;left:0;top:0}.pt-card .menu-right{position:absolute;right:0;top:-2px}.pt-card .card-menu{margin-left:auto;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.PTMenuComponent, selector: "pt-menu", inputs: ["config"] }] }); }
115
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTCardComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
116
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: PTCardComponent, selector: "pt-card", inputs: { config: "config" }, ngImport: i0, template: "<div class=\"pt-card card\" [ngStyle]=\"getCardStyles()\">\n <div *ngIf=\"hasTitle()\" class=\"card-header\" [ngStyle]=\"getTitleStyles()\">\n <i\n *ngIf=\"getIconClass() && getIconPosition() === 'left'\"\n [ngClass]=\"getIconClass()\"\n [ngStyle]=\"getIconStyles()\"\n class=\"card-header-icon-left\"\n ></i>\n <span>{{ getTitleText() }}</span>\n <i\n *ngIf=\"getIconClass() && getIconPosition() === 'right'\"\n [ngClass]=\"getIconClass()\"\n [ngStyle]=\"getIconStyles()\"\n class=\"card-header-icon-right\"\n ></i>\n <pt-menu\n *ngIf=\"config.menu\"\n [config]=\"config.menu\"\n [ngClass]=\"{\n 'menu-left': getMenuPosition() === 'left',\n 'menu-right': getMenuPosition() === 'right'\n }\"\n ></pt-menu>\n </div>\n <div\n class=\"card-body\"\n [ngClass]=\"{\n 'card-body-scrollable-vertical': isScrollableVertical(),\n 'card-body-scrollable-horizontal': isScrollableHorizontal()\n }\"\n >\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".pt-card .card{padding:16px;margin:16px 0;display:flex;flex-direction:column;max-height:100vh;overflow:hidden;background-color:var(--background-color, #fff);position:relative}.pt-card .card:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background-image:var( --background-image-url );background-size:cover;background-position:center;opacity:var(--image-opacity, 1);pointer-events:none}.pt-card .card-body{flex-grow:1;max-width:100%;z-index:1}.pt-card .card-body-scrollable-horizontal{overflow-x:auto;padding-bottom:8px}.pt-card .card-body-scrollable-vertical{flex-grow:1;overflow-y:auto;padding-right:8px}.pt-card .card-header{margin-bottom:16px;display:flex;align-items:center;justify-content:var(--text-align, left);position:relative}.pt-card .card-header-icon-left{margin-right:6px}.pt-card .card-header-icon-right{margin-left:6px}.pt-card .menu-left{position:absolute;left:0;top:0}.pt-card .menu-right{position:absolute;right:0;top:-2px}.pt-card .card-menu{margin-left:auto;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.PTMenuComponent, selector: "pt-menu", inputs: ["config"] }] }); }
108
117
  }
109
118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PTCardComponent, decorators: [{
110
119
  type: Component,
111
- args: [{ selector: 'pt-card', template: "<div class=\"pt-card card\" [ngStyle]=\"getCardStyles()\">\n <div *ngIf=\"hasTitle()\" class=\"card-header\" [ngStyle]=\"getTitleStyles()\">\n <i\n *ngIf=\"getIconClass() && getIconPosition() === 'left'\"\n [ngClass]=\"getIconClass()\"\n [ngStyle]=\"getIconStyles()\"\n class=\"card-header-icon-left\"\n ></i>\n <span>{{ getTitleText() }}</span>\n <i\n *ngIf=\"getIconClass() && getIconPosition() === 'right'\"\n [ngClass]=\"getIconClass()\"\n [ngStyle]=\"getIconStyles()\"\n class=\"card-header-icon-right\"\n ></i>\n <pt-menu\n *ngIf=\"config.menu\"\n [config]=\"config.menu\"\n [ngClass]=\"{\n 'menu-left': getMenuPosition() === 'left',\n 'menu-right': getMenuPosition() === 'right'\n }\"\n ></pt-menu>\n </div>\n <div\n class=\"card-body\"\n [ngClass]=\"{\n 'card-body-scrollable-vertical': isScrollableVertical(),\n 'card-body-scrollable-horizontal': isScrollableHorizontal()\n }\"\n >\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".pt-card .card{padding:16px;margin:16px 0;display:flex;flex-direction:column;max-height:100vh;overflow:hidden;background-size:cover;background-position:center}.pt-card .card-body{flex-grow:1;max-width:100%}.pt-card .card-body-scrollable-horizontal{overflow-x:auto;padding-bottom:8px}.pt-card .card-body-scrollable-vertical{flex-grow:1;overflow-y:auto;padding-right:8px}.pt-card .card-header{margin-bottom:16px;display:flex;align-items:center;justify-content:var(--text-align, left);position:relative}.pt-card .card-header-icon-left{margin-right:6px}.pt-card .card-header-icon-right{margin-left:6px}.pt-card .menu-left{position:absolute;left:0;top:0}.pt-card .menu-right{position:absolute;right:0;top:-2px}.pt-card .card-menu{margin-left:auto;cursor:pointer}\n"] }]
112
- }], propDecorators: { config: [{
120
+ args: [{ selector: 'pt-card', template: "<div class=\"pt-card card\" [ngStyle]=\"getCardStyles()\">\n <div *ngIf=\"hasTitle()\" class=\"card-header\" [ngStyle]=\"getTitleStyles()\">\n <i\n *ngIf=\"getIconClass() && getIconPosition() === 'left'\"\n [ngClass]=\"getIconClass()\"\n [ngStyle]=\"getIconStyles()\"\n class=\"card-header-icon-left\"\n ></i>\n <span>{{ getTitleText() }}</span>\n <i\n *ngIf=\"getIconClass() && getIconPosition() === 'right'\"\n [ngClass]=\"getIconClass()\"\n [ngStyle]=\"getIconStyles()\"\n class=\"card-header-icon-right\"\n ></i>\n <pt-menu\n *ngIf=\"config.menu\"\n [config]=\"config.menu\"\n [ngClass]=\"{\n 'menu-left': getMenuPosition() === 'left',\n 'menu-right': getMenuPosition() === 'right'\n }\"\n ></pt-menu>\n </div>\n <div\n class=\"card-body\"\n [ngClass]=\"{\n 'card-body-scrollable-vertical': isScrollableVertical(),\n 'card-body-scrollable-horizontal': isScrollableHorizontal()\n }\"\n >\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".pt-card .card{padding:16px;margin:16px 0;display:flex;flex-direction:column;max-height:100vh;overflow:hidden;background-color:var(--background-color, #fff);position:relative}.pt-card .card:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background-image:var( --background-image-url );background-size:cover;background-position:center;opacity:var(--image-opacity, 1);pointer-events:none}.pt-card .card-body{flex-grow:1;max-width:100%;z-index:1}.pt-card .card-body-scrollable-horizontal{overflow-x:auto;padding-bottom:8px}.pt-card .card-body-scrollable-vertical{flex-grow:1;overflow-y:auto;padding-right:8px}.pt-card .card-header{margin-bottom:16px;display:flex;align-items:center;justify-content:var(--text-align, left);position:relative}.pt-card .card-header-icon-left{margin-right:6px}.pt-card .card-header-icon-right{margin-left:6px}.pt-card .menu-left{position:absolute;left:0;top:0}.pt-card .menu-right{position:absolute;right:0;top:-2px}.pt-card .card-menu{margin-left:auto;cursor:pointer}\n"] }]
121
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { config: [{
113
122
  type: Input
114
123
  }] } });
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWNhcmQvcHQtY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWNhcmQvcHQtY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVFqRCxNQUFNLE9BQU8sZUFBZTtJQUw1QjtRQU1XLFdBQU0sR0FBZSxFQUFFLENBQUM7S0F5SGxDO0lBdkhDLHVDQUF1QzthQUNmLHdCQUFtQixHQUFHLE1BQU0sQUFBVCxDQUFVO2FBQzdCLDRCQUF1QixHQUFHLE9BQU8sQUFBVixDQUFXO2FBQ2xDLHVCQUFrQixHQUFHLE1BQU0sQUFBVCxDQUFVO2FBQzVCLDJCQUFzQixHQUFHLEtBQUssQUFBUixDQUFTO2FBQy9CLDBCQUFxQixHQUFHLE1BQU0sQUFBVCxDQUFVO2FBQy9CLDZCQUF3QixHQUFHLE1BQU0sQUFBVCxDQUFVO2FBQ2xDLGtCQUFhLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDdkIsbUJBQWMsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUN4QiwyQkFBc0IsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUNoQywwQkFBcUIsR0FBRyxPQUFPLEFBQVYsQ0FBVzthQUNoQyx5QkFBb0IsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUM5Qix5QkFBb0IsR0FBRyxLQUFLLEFBQVIsQ0FBUzthQUM3Qix5QkFBb0IsR0FBRyxLQUFLLEFBQVIsQ0FBUzthQUM3QixvQkFBZSxHQUFHLE1BQU0sQUFBVCxDQUFVO2FBQ3pCLG1CQUFjLEdBQUcsUUFBUSxBQUFYLENBQVk7SUFFbEQsYUFBYTtRQUNYLE9BQU8sT0FBTyxJQUFJLENB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QUFDOytHQXpIVSxlQUFlO21HQUFmLGVBQWUsNkVDUjVCLHFpQ0FrQ0E7OzRGRDFCYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFNBQVM7OEJBS1YsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FyZENvbmZpZywgSWNvblN0eWxlLCBUaXRsZVN0eWxlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHQtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wdC1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHQtY2FyZC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFBUQ2FyZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGNvbmZpZzogQ2FyZENvbmZpZyA9IHt9O1xuXG4gIC8vIERlZmF1bHQgdmFsdWVzIGFzIHJlYWRvbmx5IHZhcmlhYmxlc1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1RJVExFX0NPTE9SID0gJyMzMzMnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1RJVExFX0ZPTlRfU0laRSA9ICcxLjVlbSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfSUNPTl9DT0xPUiA9ICcjMzMzJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9JQ09OX0ZPTlRfU0laRSA9ICcxZW0nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0lDT05fUE9TSVRJT04gPSAnbGVmdCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9ICcjZmZmJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9XSURUSCA9ICcxMDAlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9IRUlHSFQgPSAnYXV0byc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfVElUTEVfUE9TSVRJT04gPSAnbGVmdCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfTUVOVV9QT1NJVElPTiA9ICdyaWdodCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfQk9SREVSX0NPTE9SID0gJyNkZGQnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0JPUkRFUl9XSURUSCA9ICcxcHgnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1RSQU5TUEFSRU5DWSA9ICcxMDAnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1BBRERJTkcgPSAnMTZweCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfTUFSR0lOID0gJzE2cHggMCc7XG5cbiAgaXNUaXRsZU9iamVjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuY29uZmlnLnRpdGxlID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIGhhc1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy50aXRsZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29uZmlnLnRpdGxlICE9PSBudWxsO1xuICB9XG5cbiAgZ2V0VGl0bGVUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNUaXRsZU9iamVjdCgpXG4gICAgICA/ICh0aGlzLmNvbmZpZy50aXRsZSBhcyBUaXRsZVN0eWxlKS50ZXh0XG4gICAgICA6ICh0aGlzLmNvbmZpZy50aXRsZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgZ2V0VGl0bGVTdHlsZXMoKSB7XG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLmNvbmZpZy50aXRsZSBhcyBUaXRsZVN0eWxlIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFsaWduTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgbGVmdDogJ2ZsZXgtc3RhcnQnLFxuICAgICAgY2VudGVyOiAnY2VudGVyJyxcbiAgICAgIHJpZ2h0OiAnZmxleC1lbmQnLFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB0aXRsZT8uY29sb3IgfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfVElUTEVfQ09MT1IsXG4gICAgICBmb250U2l6ZTogdGl0bGU/LmZvbnRTaXplIHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX1RJVExFX0ZPTlRfU0laRSxcbiAgICAgICctLXRleHQtYWxpZ24nOlxuICAgICAgICBhbGlnbk1hcFt0aXRsZT8ucG9zaXRpb24gfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfVElUTEVfUE9TSVRJT05dLFxuICAgIH07XG4gIH1cblxuICBnZXRJY29uQ2xhc3MoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgaWNvbiA9ICh0aGlzLmNvbmZpZy50aXRsZSBhcyBUaXRsZVN0eWxlKT8uaWNvbjtcbiAgICByZXR1cm4gdHlwZW9mIGljb24gPT09ICdzdHJpbmcnID8gaWNvbiA6IChpY29uIGFzIEljb25TdHlsZSk/LmNvZGUgfHwgbnVsbDtcbiAgfVxuXG4gIGdldEljb25TdHlsZXMoKSB7XG4gICAgY29uc3QgaWNvbiA9ICh0aGlzLmNvbmZpZy50aXRsZSBhcyBUaXRsZVN0eWxlKT8uaWNvbjtcbiAgICBpZiAodHlwZW9mIGljb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcjogaWNvbj8uY29sb3IgfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfSUNPTl9DT0xPUixcbiAgICAgICAgZm9udFNpemU6IGljb24/LmZvbnRTaXplIHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX0lDT05fRk9OVF9TSVpFLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiBQVENhcmRDb21wb25lbnQuREVGQVVMVF9JQ09OX0NPTE9SLFxuICAgICAgZm9udFNpemU6IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX0lDT05fRk9OVF9TSVpFLFxuICAgIH07XG4gIH1cblxuICBnZXRJY29uUG9zaXRpb24oKTogJ2xlZnQnIHwgJ3JpZ2h0JyB8IG51bGwge1xuICAgIGNvbnN0IGljb24gPSAodGhpcy5jb25maWcudGl0bGUgYXMgVGl0bGVTdHlsZSk/Lmljb247XG4gICAgaWYgKHR5cGVvZiBpY29uICE9PSAnc3RyaW5nJyAmJiBpY29uPy5wb3NpdGlvbikge1xuICAgICAgcmV0dXJuIGljb24ucG9zaXRpb247XG4gICAgfVxuICAgIHJldHVybiBQVENhcmRDb21wb25lbnQuREVGQVVMVF9JQ09OX1BPU0lUSU9OO1xuICB9XG5cbiAgZ2V0TWVudVBvc2l0aW9uKCk6ICdsZWZ0JyB8ICdyaWdodCcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5tZW51UG9zaXRpb24gfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfTUVOVV9QT1NJVElPTjtcbiAgfVxuXG4gIGdldENhcmRTdHlsZXMoKSB7XG4gICAgY29uc3QgdHJhbnNwYXJlbmN5ID1cbiAgICAgIHRoaXMuY29uZmlnLnBhdHRlcm4/LnRyYW5zcGFyZW5jeVBlcmNlbnRhZ2UgfHxcbiAgICAgIFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX1RSQU5TUEFSRU5DWTtcbiAgICBjb25zdCBiYWNrZ3JvdW5kSW1hZ2UgPSB0aGlzLmNvbmZpZy5wYXR0ZXJuXG4gICAgICA/IGBsaW5lYXItZ3JhZGllbnQocmdiYSgyNTUsIDI1NSwgMjU1LCAke1xuICAgICAgICAgIDEgLSBwYXJzZUZsb2F0KHRyYW5zcGFyZW5jeSkgLyAxMDBcbiAgICAgICAgfSksIHJnYmEoMjU1LCAyNTUsIDI1NSwgJHsxIC0gcGFyc2VGbG9hdCh0cmFuc3BhcmVuY3kpIC8gMTAwfSkpLCB1cmwoJHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5wYXR0ZXJuLmltYWdlVXJsXG4gICAgICAgIH0pYFxuICAgICAgOiAnJztcblxuICAgIC8vIEFwcGx5IGJvcmRlciBjb25kaXRpb25hbGx5IGJhc2VkIG9uIG5vQm9yZGVyIHByb3BlcnR5XG4gICAgY29uc3QgYm9yZGVyU3R5bGUgPSB0aGlzLmNvbmZpZy5ub0JvcmRlclxuICAgICAgPyAnbm9uZSdcbiAgICAgIDogYHNvbGlkICR7XG4gICAgICAgICAgdGhpcy5jb25maWcuYm9yZGVyV2lkdGggfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfQk9SREVSX1dJRFRIXG4gICAgICAgIH0gJHt0aGlzLmNvbmZpZy5ib3JkZXJDb2xvciB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9CT1JERVJfQ09MT1J9YDtcblxuICAgIHJldHVybiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6XG4gICAgICAgIHRoaXMuY29uZmlnLmJhY2tncm91bmRDb2xvciB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SLFxuICAgICAgYmFja2dyb3VuZEltYWdlOiBiYWNrZ3JvdW5kSW1hZ2UsXG4gICAgICBiYWNrZ3JvdW5kU2l6ZTogJ2NvdmVyJyxcbiAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICB3aWR0aDogdGhpcy5jb25maWcud2lkdGggfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfV0lEVEgsXG4gICAgICBoZWlnaHQ6IHRoaXMuY29uZmlnLmhlaWdodCB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9IRUlHSFQsXG4gICAgICBib3JkZXI6IGJvcmRlclN0eWxlLFxuICAgICAgcGFkZGluZzogdGhpcy5jb25maWcucGFkZGluZyB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9QQURESU5HLFxuICAgICAgbWFyZ2luOiB0aGlzLmNvbmZpZy5tYXJnaW4gfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfTUFSR0lOLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLmNvbmZpZy5ib3JkZXJSYWRpdXMgfHwgJzhweCcsXG4gICAgICBib3hTaGFkb3c6IHRoaXMuY29uZmlnLmJveFNoYWRvdyB8fCAnMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgfTtcbiAgfVxuXG4gIGlzU2Nyb2xsYWJsZUhvcml6b250YWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5jb25maWcuc2Nyb2xsYWJsZUhvcml6b250YWw7XG4gIH1cblxuICBpc1Njcm9sbGFibGVWZXJ0aWNhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbmZpZy5zY3JvbGxhYmxlVmVydGljYWw7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwdC1jYXJkIGNhcmRcIiBbbmdTdHlsZV09XCJnZXRDYXJkU3R5bGVzKClcIj5cbiAgPGRpdiAqbmdJZj1cImhhc1RpdGxlKClcIiBjbGFzcz1cImNhcmQtaGVhZGVyXCIgW25nU3R5bGVdPVwiZ2V0VGl0bGVTdHlsZXMoKVwiPlxuICAgIDxpXG4gICAgICAqbmdJZj1cImdldEljb25DbGFzcygpICYmIGdldEljb25Qb3NpdGlvbigpID09PSAnbGVmdCdcIlxuICAgICAgW25nQ2xhc3NdPVwiZ2V0SWNvbkNsYXNzKClcIlxuICAgICAgW25nU3R5bGVdPVwiZ2V0SWNvblN0eWxlcygpXCJcbiAgICAgIGNsYXNzPVwiY2FyZC1oZWFkZXItaWNvbi1sZWZ0XCJcbiAgICA+PC9pPlxuICAgIDxzcGFuPnt7IGdldFRpdGxlVGV4dCgpIH19PC9zcGFuPlxuICAgIDxpXG4gICAgICAqbmdJZj1cImdldEljb25DbGFzcygpICYmIGdldEljb25Qb3NpdGlvbigpID09PSAncmlnaHQnXCJcbiAgICAgIFtuZ0NsYXNzXT1cImdldEljb25DbGFzcygpXCJcbiAgICAgIFtuZ1N0eWxlXT1cImdldEljb25TdHlsZXMoKVwiXG4gICAgICBjbGFzcz1cImNhcmQtaGVhZGVyLWljb24tcmlnaHRcIlxuICAgID48L2k+XG4gICAgPHB0LW1lbnVcbiAgICAgICpuZ0lmPVwiY29uZmlnLm1lbnVcIlxuICAgICAgW2NvbmZpZ109XCJjb25maWcubWVudVwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdtZW51LWxlZnQnOiBnZXRNZW51UG9zaXRpb24oKSA9PT0gJ2xlZnQnLFxuICAgICAgICAnbWVudS1yaWdodCc6IGdldE1lbnVQb3NpdGlvbigpID09PSAncmlnaHQnXG4gICAgICB9XCJcbiAgICA+PC9wdC1tZW51PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY2FyZC1ib2R5XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnY2FyZC1ib2R5LXNjcm9sbGFibGUtdmVydGljYWwnOiBpc1Njcm9sbGFibGVWZXJ0aWNhbCgpLFxuICAgICAgJ2NhcmQtYm9keS1zY3JvbGxhYmxlLWhvcml6b250YWwnOiBpc1Njcm9sbGFibGVIb3Jpem9udGFsKClcbiAgICB9XCJcbiAgPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHQtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWNhcmQvcHQtY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWNhcmQvcHQtY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUNULEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQzs7OztBQVF2QixNQUFNLE9BQU8sZUFBZTtJQUcxQix1Q0FBdUM7YUFDZix3QkFBbUIsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUM3Qiw0QkFBdUIsR0FBRyxPQUFPLEFBQVYsQ0FBVzthQUNsQyx1QkFBa0IsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUM1QiwyQkFBc0IsR0FBRyxLQUFLLEFBQVIsQ0FBUzthQUMvQiwwQkFBcUIsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUMvQiw2QkFBd0IsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUNsQyxrQkFBYSxHQUFHLE1BQU0sQUFBVCxDQUFVO2FBQ3ZCLG1CQUFjLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDeEIsMkJBQXNCLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDaEMsMEJBQXFCLEdBQUcsT0FBTyxBQUFWLENBQVc7YUFDaEMseUJBQW9CLEdBQUcsTUFBTSxBQUFULENBQVU7YUFDOUIseUJBQW9CLEdBQUcsS0FBSyxBQUFSLENBQVM7YUFDN0IseUJBQW9CLEdBQUcsS0FBSyxBQUFSLENBQVM7YUFDN0Isb0JBQWUsR0FBRyxNQUFNLEFBQVQsQ0FBVTthQUN6QixtQkFBYyxHQUFHLFFBQVEsQUFBWCxDQUFZO0lBRWxELGFBQWE7UUFDWCxPQUFPLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDO0lBQy9D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QUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUc7Z0JBQ3hDLENBQUMsQ0FBQyxFQUFFO1lBQ04saUJBQWlCLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLDJCQUEyQjtZQUN2RSxRQUFRLEVBQUUsUUFBUSxFQUFFLHFCQUFxQjtTQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVELHNCQUFzQjtRQUNwQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDO0lBQzVDLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztJQUMxQyxDQUFDOytHQTdIVSxlQUFlO21HQUFmLGVBQWUsNkVDYjVCLHFpQ0FrQ0E7OzRGRHJCYSxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFNBQVM7c0ZBS1YsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FyZENvbmZpZywgSWNvblN0eWxlLCBUaXRsZVN0eWxlIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHQtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wdC1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHQtY2FyZC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFBUQ2FyZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGNvbmZpZzogQ2FyZENvbmZpZyA9IHt9O1xuXG4gIC8vIERlZmF1bHQgdmFsdWVzIGFzIHJlYWRvbmx5IHZhcmlhYmxlc1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1RJVExFX0NPTE9SID0gJyMzMzMnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1RJVExFX0ZPTlRfU0laRSA9ICcxLjVlbSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfSUNPTl9DT0xPUiA9ICcjMzMzJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9JQ09OX0ZPTlRfU0laRSA9ICcxZW0nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0lDT05fUE9TSVRJT04gPSAnbGVmdCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUiA9ICcjZmZmJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9XSURUSCA9ICcxMDAlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9IRUlHSFQgPSAnYXV0byc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfVElUTEVfUE9TSVRJT04gPSAnbGVmdCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfTUVOVV9QT1NJVElPTiA9ICdyaWdodCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfQk9SREVSX0NPTE9SID0gJyNkZGQnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0JPUkRFUl9XSURUSCA9ICcxcHgnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1RSQU5TUEFSRU5DWSA9ICcxMDAnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1BBRERJTkcgPSAnMTZweCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfTUFSR0lOID0gJzE2cHggMCc7XG5cbiAgaXNUaXRsZU9iamVjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuY29uZmlnLnRpdGxlID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIGhhc1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy50aXRsZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29uZmlnLnRpdGxlICE9PSBudWxsO1xuICB9XG5cbiAgZ2V0VGl0bGVUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNUaXRsZU9iamVjdCgpXG4gICAgICA/ICh0aGlzLmNvbmZpZy50aXRsZSBhcyBUaXRsZVN0eWxlKS50ZXh0XG4gICAgICA6ICh0aGlzLmNvbmZpZy50aXRsZSBhcyBzdHJpbmcpO1xuICB9XG5cbiAgZ2V0VGl0bGVTdHlsZXMoKSB7XG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLmNvbmZpZy50aXRsZSBhcyBUaXRsZVN0eWxlIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFsaWduTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgbGVmdDogJ2ZsZXgtc3RhcnQnLFxuICAgICAgY2VudGVyOiAnY2VudGVyJyxcbiAgICAgIHJpZ2h0OiAnZmxleC1lbmQnLFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB0aXRsZT8uY29sb3IgfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfVElUTEVfQ09MT1IsXG4gICAgICBmb250U2l6ZTogdGl0bGU/LmZvbnRTaXplIHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX1RJVExFX0ZPTlRfU0laRSxcbiAgICAgICctLXRleHQtYWxpZ24nOlxuICAgICAgICBhbGlnbk1hcFt0aXRsZT8ucG9zaXRpb24gfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfVElUTEVfUE9TSVRJT05dLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICB1cGRhdGVTdHlsZXMoKSB7XG4gICAgLy8gQWZ0ZXIgZGF0YSBpcyBmZXRjaGVkIG9yIHVwZGF0ZWRcbiAgICB0aGlzLmdldENhcmRTdHlsZXMoKTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTsgLy8gRm9yY2UgQW5ndWxhciB0byBkZXRlY3QgdGhlIGNoYW5nZXNcbiAgfVxuXG4gIGdldEljb25DbGFzcygpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBpY29uID0gKHRoaXMuY29uZmlnLnRpdGxlIGFzIFRpdGxlU3R5bGUpPy5pY29uO1xuICAgIHJldHVybiB0eXBlb2YgaWNvbiA9PT0gJ3N0cmluZycgPyBpY29uIDogKGljb24gYXMgSWNvblN0eWxlKT8uY29kZSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0SWNvblN0eWxlcygpIHtcbiAgICBjb25zdCBpY29uID0gKHRoaXMuY29uZmlnLnRpdGxlIGFzIFRpdGxlU3R5bGUpPy5pY29uO1xuICAgIGlmICh0eXBlb2YgaWNvbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiBpY29uPy5jb2xvciB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9JQ09OX0NPTE9SLFxuICAgICAgICBmb250U2l6ZTogaWNvbj8uZm9udFNpemUgfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfSUNPTl9GT05UX1NJWkUsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX0lDT05fQ09MT1IsXG4gICAgICBmb250U2l6ZTogUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfSUNPTl9GT05UX1NJWkUsXG4gICAgfTtcbiAgfVxuXG4gIGdldEljb25Qb3NpdGlvbigpOiAnbGVmdCcgfCAncmlnaHQnIHwgbnVsbCB7XG4gICAgY29uc3QgaWNvbiA9ICh0aGlzLmNvbmZpZy50aXRsZSBhcyBUaXRsZVN0eWxlKT8uaWNvbjtcbiAgICBpZiAodHlwZW9mIGljb24gIT09ICdzdHJpbmcnICYmIGljb24/LnBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gaWNvbi5wb3NpdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX0lDT05fUE9TSVRJT047XG4gIH1cblxuICBnZXRNZW51UG9zaXRpb24oKTogJ2xlZnQnIHwgJ3JpZ2h0JyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLm1lbnVQb3NpdGlvbiB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9NRU5VX1BPU0lUSU9OO1xuICB9XG5cbiAgZ2V0Q2FyZFN0eWxlcygpIHtcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSB0aGlzLmNvbmZpZy5wYXR0ZXJuPy50cmFuc3BhcmVuY3lQZXJjZW50YWdlXG4gICAgICA/IHBhcnNlRmxvYXQodGhpcy5jb25maWcucGF0dGVybi50cmFuc3BhcmVuY3lQZXJjZW50YWdlKSAvIDEwMFxuICAgICAgOiAxOyAvLyBEZWZhdWx0IHRvIG5vIHRyYW5zcGFyZW5jeSAoMSA9IGZ1bGx5IG9wYXF1ZSlcblxuICAgIHJldHVybiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuY29uZmlnLnBhdHRlcm4/LmltYWdlVXJsXG4gICAgICAgID8gdGhpcy5jb25maWcucGF0dGVybi5iYWNrZ3JvdW5kQ29sb3IgfHxcbiAgICAgICAgICBQVENhcmRDb21wb25lbnQuREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SXG4gICAgICAgIDogdGhpcy5jb25maWcuYmFja2dyb3VuZENvbG9yIHx8XG4gICAgICAgICAgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfQkFDS0dST1VORF9DT0xPUixcbiAgICAgIHdpZHRoOiB0aGlzLmNvbmZpZy53aWR0aCB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9XSURUSCxcbiAgICAgIGhlaWdodDogdGhpcy5jb25maWcuaGVpZ2h0IHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX0hFSUdIVCxcbiAgICAgIGJvcmRlcjogdGhpcy5jb25maWcubm9Cb3JkZXJcbiAgICAgICAgPyAnbm9uZSdcbiAgICAgICAgOiBgc29saWQgJHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmJvcmRlcldpZHRoIHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX0JPUkRFUl9XSURUSFxuICAgICAgICAgIH0gJHt0aGlzLmNvbmZpZy5ib3JkZXJDb2xvciB8fCBQVENhcmRDb21wb25lbnQuREVGQVVMVF9CT1JERVJfQ09MT1J9YCxcbiAgICAgIHBhZGRpbmc6IHRoaXMuY29uZmlnLnBhZGRpbmcgfHwgUFRDYXJkQ29tcG9uZW50LkRFRkFVTFRfUEFERElORyxcbiAgICAgIG1hcmdpbjogdGhpcy5jb25maWcubWFyZ2luIHx8IFBUQ2FyZENvbXBvbmVudC5ERUZBVUxUX01BUkdJTixcbiAgICAgIGJvcmRlclJhZGl1czogdGhpcy5jb25maWcuYm9yZGVyUmFkaXVzIHx8ICc4cHgnLFxuICAgICAgYm94U2hhZG93OiB0aGlzLmNvbmZpZy5ib3hTaGFkb3cgfHwgJzAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSknLFxuICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsIC8vIE5lZWRlZCBmb3IgOjpiZWZvcmUgcG9zaXRpb25pbmdcbiAgICAgICctLWJhY2tncm91bmQtaW1hZ2UtdXJsJzogdGhpcy5jb25maWcucGF0dGVybj8uaW1hZ2VVcmxcbiAgICAgICAgPyBgdXJsKCR7dGhpcy5jb25maWcucGF0dGVybi5pbWFnZVVybH0pYFxuICAgICAgICA6ICcnLFxuICAgICAgJy0taW1hZ2Utb3BhY2l0eSc6IHRyYW5zcGFyZW5jeS50b1N0cmluZygpLCAvLyBQYXNzIHRyYW5zcGFyZW5jeSB0byBDU1NcbiAgICAgIG92ZXJmbG93OiAnaGlkZGVuJywgLy8gRW5zdXJlIG5vIG92ZXJmbG93XG4gICAgfTtcbiAgfVxuXG4gIGlzU2Nyb2xsYWJsZUhvcml6b250YWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5jb25maWcuc2Nyb2xsYWJsZUhvcml6b250YWw7XG4gIH1cblxuICBpc1Njcm9sbGFibGVWZXJ0aWNhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbmZpZy5zY3JvbGxhYmxlVmVydGljYWw7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwdC1jYXJkIGNhcmRcIiBbbmdTdHlsZV09XCJnZXRDYXJkU3R5bGVzKClcIj5cbiAgPGRpdiAqbmdJZj1cImhhc1RpdGxlKClcIiBjbGFzcz1cImNhcmQtaGVhZGVyXCIgW25nU3R5bGVdPVwiZ2V0VGl0bGVTdHlsZXMoKVwiPlxuICAgIDxpXG4gICAgICAqbmdJZj1cImdldEljb25DbGFzcygpICYmIGdldEljb25Qb3NpdGlvbigpID09PSAnbGVmdCdcIlxuICAgICAgW25nQ2xhc3NdPVwiZ2V0SWNvbkNsYXNzKClcIlxuICAgICAgW25nU3R5bGVdPVwiZ2V0SWNvblN0eWxlcygpXCJcbiAgICAgIGNsYXNzPVwiY2FyZC1oZWFkZXItaWNvbi1sZWZ0XCJcbiAgICA+PC9pPlxuICAgIDxzcGFuPnt7IGdldFRpdGxlVGV4dCgpIH19PC9zcGFuPlxuICAgIDxpXG4gICAgICAqbmdJZj1cImdldEljb25DbGFzcygpICYmIGdldEljb25Qb3NpdGlvbigpID09PSAncmlnaHQnXCJcbiAgICAgIFtuZ0NsYXNzXT1cImdldEljb25DbGFzcygpXCJcbiAgICAgIFtuZ1N0eWxlXT1cImdldEljb25TdHlsZXMoKVwiXG4gICAgICBjbGFzcz1cImNhcmQtaGVhZGVyLWljb24tcmlnaHRcIlxuICAgID48L2k+XG4gICAgPHB0LW1lbnVcbiAgICAgICpuZ0lmPVwiY29uZmlnLm1lbnVcIlxuICAgICAgW2NvbmZpZ109XCJjb25maWcubWVudVwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdtZW51LWxlZnQnOiBnZXRNZW51UG9zaXRpb24oKSA9PT0gJ2xlZnQnLFxuICAgICAgICAnbWVudS1yaWdodCc6IGdldE1lbnVQb3NpdGlvbigpID09PSAncmlnaHQnXG4gICAgICB9XCJcbiAgICA+PC9wdC1tZW51PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY2FyZC1ib2R5XCJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnY2FyZC1ib2R5LXNjcm9sbGFibGUtdmVydGljYWwnOiBpc1Njcm9sbGFibGVWZXJ0aWNhbCgpLFxuICAgICAgJ2NhcmQtYm9keS1zY3JvbGxhYmxlLWhvcml6b250YWwnOiBpc1Njcm9sbGFibGVIb3Jpem9udGFsKClcbiAgICB9XCJcbiAgPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Calculates the width required for a column based on the header text (column title).
3
+ * It uses the Canvas API to measure text width dynamically.
4
+ *
5
+ * @param {TableColumn} col - The column metadata containing the header title and code.
6
+ * @param {string} [font='16px Arial'] - The font to use for measurement (defaults to '16px Arial').
7
+ * @returns {number} - The calculated width of the column in pixels.
8
+ */
9
+ export function calculateTextWidth(col, font = '16px Arial') {
10
+ // Create a canvas context for measuring text
11
+ const canvas = document.createElement('canvas');
12
+ const context = canvas.getContext('2d');
13
+ if (!context) {
14
+ return 100; // Fallback width if canvas context is not available
15
+ }
16
+ // Set the font to match the provided font or the document body font
17
+ context.font = font || getComputedStyle(document.body).font;
18
+ // Measure the header text width
19
+ const headerWidth = context.measureText(col.title).width;
20
+ // Return the width with some padding
21
+ return Math.ceil(headerWidth + 20); // Add padding for extra space
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi91dGlscy90ZXh0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsR0FBZ0IsRUFDaEIsT0FBZSxZQUFZO0lBRTNCLDZDQUE2QztJQUM3QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFeEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTyxHQUFHLENBQUMsQ0FBQyxvREFBb0Q7SUFDbEUsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0lBRTVELGdDQUFnQztJQUNoQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFFekQscUNBQXFDO0lBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyw4QkFBOEI7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB3aWR0aCByZXF1aXJlZCBmb3IgYSBjb2x1bW4gYmFzZWQgb24gdGhlIGhlYWRlciB0ZXh0IChjb2x1bW4gdGl0bGUpLlxuICogSXQgdXNlcyB0aGUgQ2FudmFzIEFQSSB0byBtZWFzdXJlIHRleHQgd2lkdGggZHluYW1pY2FsbHkuXG4gKlxuICogQHBhcmFtIHtUYWJsZUNvbHVtbn0gY29sIC0gVGhlIGNvbHVtbiBtZXRhZGF0YSBjb250YWluaW5nIHRoZSBoZWFkZXIgdGl0bGUgYW5kIGNvZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZvbnQ9JzE2cHggQXJpYWwnXSAtIFRoZSBmb250IHRvIHVzZSBmb3IgbWVhc3VyZW1lbnQgKGRlZmF1bHRzIHRvICcxNnB4IEFyaWFsJykuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIFRoZSBjYWxjdWxhdGVkIHdpZHRoIG9mIHRoZSBjb2x1bW4gaW4gcGl4ZWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlVGV4dFdpZHRoKFxuICBjb2w6IFRhYmxlQ29sdW1uLFxuICBmb250OiBzdHJpbmcgPSAnMTZweCBBcmlhbCdcbik6IG51bWJlciB7XG4gIC8vIENyZWF0ZSBhIGNhbnZhcyBjb250ZXh0IGZvciBtZWFzdXJpbmcgdGV4dFxuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gIGlmICghY29udGV4dCkge1xuICAgIHJldHVybiAxMDA7IC8vIEZhbGxiYWNrIHdpZHRoIGlmIGNhbnZhcyBjb250ZXh0IGlzIG5vdCBhdmFpbGFibGVcbiAgfVxuXG4gIC8vIFNldCB0aGUgZm9udCB0byBtYXRjaCB0aGUgcHJvdmlkZWQgZm9udCBvciB0aGUgZG9jdW1lbnQgYm9keSBmb250XG4gIGNvbnRleHQuZm9udCA9IGZvbnQgfHwgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5mb250O1xuXG4gIC8vIE1lYXN1cmUgdGhlIGhlYWRlciB0ZXh0IHdpZHRoXG4gIGNvbnN0IGhlYWRlcldpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dChjb2wudGl0bGUpLndpZHRoO1xuXG4gIC8vIFJldHVybiB0aGUgd2lkdGggd2l0aCBzb21lIHBhZGRpbmdcbiAgcmV0dXJuIE1hdGguY2VpbChoZWFkZXJXaWR0aCArIDIwKTsgLy8gQWRkIHBhZGRpbmcgZm9yIGV4dHJhIHNwYWNlXG59XG4iXX0=