@libs-ui/components-line-clamp 0.2.306 → 0.2.308-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.
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9saW5lLWNsYW1wL3NyYy9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRZUEVfT0JKRUNUIH0gZnJvbSBcIkBsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJTGluZUNsYW1wQ29uZmlnIHtcbiAgbWF4SGVpZ2h0PzogbnVtYmVyO1xuICBjbGFzcz86IHN0cmluZztcbiAgaWdub3JlU2hvd0J1dHRvbkNvbGxhcHNlRXhwYW5kPzogYm9vbGVhbjtcbiAgc2hvd1Rvb2x0aXA/OiBib29sZWFuO1xuICBtYXhXaWR0aFRvb2x0aXA/OiBudW1iZXI7XG4gIG1heEhlaWdodFRvb2x0aXA/OiBudW1iZXI7XG4gIG5nQ2xhc3NPYmplY3Q/OiBUWVBFX09CSkVDVDtcbiAgaXNJbm5lclRleHQ/OiBib29sZWFuO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9saW5lLWNsYW1wL3NyYy9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRZUEVfT0JKRUNUIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpbmVDbGFtcENvbmZpZyB7XG4gIG1heEhlaWdodD86IG51bWJlcjtcbiAgY2xhc3M/OiBzdHJpbmc7XG4gIGlnbm9yZVNob3dCdXR0b25Db2xsYXBzZUV4cGFuZD86IGJvb2xlYW47XG4gIHNob3dUb29sdGlwPzogYm9vbGVhbjtcbiAgbWF4V2lkdGhUb29sdGlwPzogbnVtYmVyO1xuICBtYXhIZWlnaHRUb29sdGlwPzogbnVtYmVyO1xuICBuZ0NsYXNzT2JqZWN0PzogVFlQRV9PQkpFQ1Q7XG4gIGlzSW5uZXJUZXh0PzogYm9vbGVhbjtcbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29udHJvbC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGluZS1jbGFtcC9zcmMvaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJTGluZUNsYW1wRnVuY3Rpb25Db250cm9sRXZlbnQge1xuICByZWZyZXNoOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY29udHJvbC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGluZS1jbGFtcC9zcmMvaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJTGluZUNsYW1wRnVuY3Rpb25Db250cm9sRXZlbnQge1xuICByZWZyZXNoOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuIl19
@@ -1,3 +1,3 @@
1
1
  export * from './config.interface';
2
2
  export * from './function-control.interface';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGluZS1jbGFtcC9zcmMvaW50ZXJmYWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbmZpZy5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbi1jb250cm9sLmludGVyZmFjZSc7Il19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGluZS1jbGFtcC9zcmMvaW50ZXJmYWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbmZpZy5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbi1jb250cm9sLmludGVyZmFjZSc7XG4iXX0=
@@ -17,26 +17,26 @@ export class LibsUiComponentsLineClampComponent {
17
17
  contentDisplay = signal('');
18
18
  /** INPUT */
19
19
  content = input.required();
20
- lengthLimitDisplay = input(200, { transform: val => val || 200 });
20
+ lengthLimitDisplay = input(200, { transform: (val) => val || 200 });
21
21
  maxHeight = input.required(); // maxHeight = (line-height của text)*(số dòng mong muốn)
22
22
  ignoreShowButtonCollapseExpand = input();
23
23
  ignoreShowButtonCollapse = input();
24
24
  showTooltip = input();
25
- timeHidePopoverOnMouseout = input(50, { transform: val => val ?? 50 });
26
- maxWidthTooltip = input(250, { transform: val => val ?? 250 });
27
- maxHeightTooltip = input(150, { transform: val => val ?? 150 });
28
- zIndexPopover = input(1001, { transform: val => val ?? 1001 });
25
+ timeHidePopoverOnMouseout = input(50, { transform: (val) => val ?? 50 });
26
+ maxWidthTooltip = input(250, { transform: (val) => val ?? 250 });
27
+ maxHeightTooltip = input(150, { transform: (val) => val ?? 150 });
28
+ zIndexPopover = input(1001, { transform: (val) => val ?? 1001 });
29
29
  isInnerText = input(); // không cần escapeHTML content khi biến bằng true
30
- classClassLabelButtonCollapseExpand = input('libs-ui-font-h5r', { transform: val => val ?? 'libs-ui-font-h5r' });
31
- classClassIncludeButtonCollapseExpand = input('!p-0', { transform: val => val ?? '!p-0' });
32
- ignoreStopPropagationTooltipEvent = input(false, { transform: val => val ?? false });
33
- ngClassObject = input({ 'libs-ui-line-clamp-content libs-ui-font-h5r': true }, { transform: val => val || { 'libs-ui-line-clamp-content lib-ui-font-h5r': true } }); // object ngClass
34
- hasBackgroundGradient = input(false, { transform: val => val ?? false });
30
+ classClassLabelButtonCollapseExpand = input('libs-ui-font-h5r', { transform: (val) => val ?? 'libs-ui-font-h5r' });
31
+ classClassIncludeButtonCollapseExpand = input('!p-0', { transform: (val) => val ?? '!p-0' });
32
+ ignoreStopPropagationTooltipEvent = input(false, { transform: (val) => val ?? false });
33
+ ngClassObject = input({ 'libs-ui-line-clamp-content libs-ui-font-h5r': true }, { transform: (val) => val || { 'libs-ui-line-clamp-content lib-ui-font-h5r': true } }); // object ngClass
34
+ hasBackgroundGradient = input(false, { transform: (val) => val ?? false });
35
35
  labelButtonViewMore = input();
36
36
  labelButtonCollapse = input();
37
- directionTooltip = input('top', { transform: val => val ?? 'top' });
38
- useXssFilter = input(true, { transform: val => val ?? true });
39
- defaultIsCollapse = input(true, { transform: val => val ?? true });
37
+ directionTooltip = input('top', { transform: (val) => val ?? 'top' });
38
+ useXssFilter = input(true, { transform: (val) => val ?? true });
39
+ defaultIsCollapse = input(true, { transform: (val) => val ?? true });
40
40
  /** OUTPUT */
41
41
  outDisplayLineClamp = output();
42
42
  outAction = output();
@@ -54,11 +54,14 @@ export class LibsUiComponentsLineClampComponent {
54
54
  });
55
55
  }
56
56
  async ngOnInit() {
57
- this.outFunctionControl.emit({
58
- refresh: this.refresh.bind(this)
59
- });
57
+ this.outFunctionControl.emit(this.FunctionsControl);
60
58
  }
61
59
  /** FUNCTIONS */
60
+ get FunctionsControl() {
61
+ return {
62
+ refresh: this.refresh.bind(this),
63
+ };
64
+ }
62
65
  async handlerContentSub(content) {
63
66
  if (this.content() !== content) {
64
67
  this.displayLineClamp.set(true);
@@ -100,20 +103,13 @@ export class LibsUiComponentsLineClampComponent {
100
103
  this.displayLineClamp.set(false);
101
104
  }
102
105
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsLineClampComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
103
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsLineClampComponent, isStandalone: true, selector: "libs_ui-components-line_clamp", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, lengthLimitDisplay: { classPropertyName: "lengthLimitDisplay", publicName: "lengthLimitDisplay", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: true, transformFunction: null }, ignoreShowButtonCollapseExpand: { classPropertyName: "ignoreShowButtonCollapseExpand", publicName: "ignoreShowButtonCollapseExpand", isSignal: true, isRequired: false, transformFunction: null }, ignoreShowButtonCollapse: { classPropertyName: "ignoreShowButtonCollapse", publicName: "ignoreShowButtonCollapse", isSignal: true, isRequired: false, transformFunction: null }, showTooltip: { classPropertyName: "showTooltip", publicName: "showTooltip", isSignal: true, isRequired: false, transformFunction: null }, timeHidePopoverOnMouseout: { classPropertyName: "timeHidePopoverOnMouseout", publicName: "timeHidePopoverOnMouseout", isSignal: true, isRequired: false, transformFunction: null }, maxWidthTooltip: { classPropertyName: "maxWidthTooltip", publicName: "maxWidthTooltip", isSignal: true, isRequired: false, transformFunction: null }, maxHeightTooltip: { classPropertyName: "maxHeightTooltip", publicName: "maxHeightTooltip", isSignal: true, isRequired: false, transformFunction: null }, zIndexPopover: { classPropertyName: "zIndexPopover", publicName: "zIndexPopover", isSignal: true, isRequired: false, transformFunction: null }, isInnerText: { classPropertyName: "isInnerText", publicName: "isInnerText", isSignal: true, isRequired: false, transformFunction: null }, classClassLabelButtonCollapseExpand: { classPropertyName: "classClassLabelButtonCollapseExpand", publicName: "classClassLabelButtonCollapseExpand", isSignal: true, isRequired: false, transformFunction: null }, classClassIncludeButtonCollapseExpand: { classPropertyName: "classClassIncludeButtonCollapseExpand", publicName: "classClassIncludeButtonCollapseExpand", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationTooltipEvent: { classPropertyName: "ignoreStopPropagationTooltipEvent", publicName: "ignoreStopPropagationTooltipEvent", isSignal: true, isRequired: false, transformFunction: null }, ngClassObject: { classPropertyName: "ngClassObject", publicName: "ngClassObject", isSignal: true, isRequired: false, transformFunction: null }, hasBackgroundGradient: { classPropertyName: "hasBackgroundGradient", publicName: "hasBackgroundGradient", isSignal: true, isRequired: false, transformFunction: null }, labelButtonViewMore: { classPropertyName: "labelButtonViewMore", publicName: "labelButtonViewMore", isSignal: true, isRequired: false, transformFunction: null }, labelButtonCollapse: { classPropertyName: "labelButtonCollapse", publicName: "labelButtonCollapse", isSignal: true, isRequired: false, transformFunction: null }, directionTooltip: { classPropertyName: "directionTooltip", publicName: "directionTooltip", isSignal: true, isRequired: false, transformFunction: null }, useXssFilter: { classPropertyName: "useXssFilter", publicName: "useXssFilter", isSignal: true, isRequired: false, transformFunction: null }, defaultIsCollapse: { classPropertyName: "defaultIsCollapse", publicName: "defaultIsCollapse", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outDisplayLineClamp: "outDisplayLineClamp", outAction: "outAction", outClick: "outClick", outFunctionControl: "outFunctionControl" }, host: { listeners: { "window:resize": "resize($event)" } }, ngImport: i0, template: "@if (!displayLineClamp()) {\n @if (!isInnerText()) {\n <div LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerHTML\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerHtml]=\"(content() | translate | LibsUiPipesSecurityTrustPipe: 'html': useXssFilter()) | async\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\">\n </div>\n } @else {\n <div LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerText\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerText]=\"content() | translate\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\">\n </div>\n }\n}\n@else {\n <libs_ui-components-popover class=\"relative\"\n type=\"other\"\n [ignoreShowPopover]=\"!showTooltip()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationTooltipEvent()\"\n [config]=\"{\n timerDestroy:timeHidePopoverOnMouseout(),\n maxWidth:maxWidthTooltip() ,\n maxHeight:maxHeightTooltip(),\n direction:directionTooltip(),\n content: isInnerText() ? (this.content() | LibsUiPipesEscapeHtmlPipe) : this.content(),\n zIndex: zIndexPopover()\n }\"\n (outEvent)=\"handlerClick($event)\">\n @if (isCollapse() && hasBackgroundGradient()) {\n <div class=\"h-[40px] libs-ui-line-clamp-bg-gradient\"></div>\n }\n @if (!isInnerText()) {\n <div [ngClass]=\"ngClassObject()\"\n [innerHtml]=\"(contentDisplay() | translate | LibsUiPipesSecurityTrustPipe: 'html': useXssFilter()) | async\">\n </div>\n } @else {\n <div [ngClass]=\"ngClassObject()\"\n [innerText]=\"contentDisplay() | translate\">\n </div>\n }\n </libs_ui-components-popover>\n\n @if (!ignoreShowButtonCollapseExpand()) {\n @if (isCollapse()) {\n <libs_ui-components-buttons-button type=\"button-link-primary\"\n [label]=\"labelButtonViewMore() || 'i18n_view_more'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"viewMore($event)\" />\n } @else {\n @if (!ignoreShowButtonCollapse()) {\n <libs_ui-components-buttons-button type=\"button-link-primary\"\n [label]=\"labelButtonCollapse() || 'i18n_collapse'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"hiddenMore($event)\" />\n }\n }\n }\n}\n", styles: [".libs-ui-line-clamp-content{font-weight:400;text-align:start}.libs-ui-line-clamp-bg-gradient{opacity:.5;background:linear-gradient(180deg,#fff0,#fffffff2 51.56%,#fff);position:absolute;width:100%;bottom:0}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: LibsUiComponentsLineClampDirective, selector: "[LibsUiComponentsLineClampDirective]", inputs: ["lengthLimitDisplay", "methodDisplay", "content", "ignoreThreeDots"], outputs: ["outContentSub"] }, { kind: "pipe", type: LibsUiPipesSecurityTrustPipe, name: "LibsUiPipesSecurityTrustPipe" }, { kind: "pipe", type: LibsUiPipesEscapeHtmlPipe, name: "LibsUiPipesEscapeHtmlPipe" }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
106
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsLineClampComponent, isStandalone: true, selector: "libs_ui-components-line_clamp", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, lengthLimitDisplay: { classPropertyName: "lengthLimitDisplay", publicName: "lengthLimitDisplay", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: true, transformFunction: null }, ignoreShowButtonCollapseExpand: { classPropertyName: "ignoreShowButtonCollapseExpand", publicName: "ignoreShowButtonCollapseExpand", isSignal: true, isRequired: false, transformFunction: null }, ignoreShowButtonCollapse: { classPropertyName: "ignoreShowButtonCollapse", publicName: "ignoreShowButtonCollapse", isSignal: true, isRequired: false, transformFunction: null }, showTooltip: { classPropertyName: "showTooltip", publicName: "showTooltip", isSignal: true, isRequired: false, transformFunction: null }, timeHidePopoverOnMouseout: { classPropertyName: "timeHidePopoverOnMouseout", publicName: "timeHidePopoverOnMouseout", isSignal: true, isRequired: false, transformFunction: null }, maxWidthTooltip: { classPropertyName: "maxWidthTooltip", publicName: "maxWidthTooltip", isSignal: true, isRequired: false, transformFunction: null }, maxHeightTooltip: { classPropertyName: "maxHeightTooltip", publicName: "maxHeightTooltip", isSignal: true, isRequired: false, transformFunction: null }, zIndexPopover: { classPropertyName: "zIndexPopover", publicName: "zIndexPopover", isSignal: true, isRequired: false, transformFunction: null }, isInnerText: { classPropertyName: "isInnerText", publicName: "isInnerText", isSignal: true, isRequired: false, transformFunction: null }, classClassLabelButtonCollapseExpand: { classPropertyName: "classClassLabelButtonCollapseExpand", publicName: "classClassLabelButtonCollapseExpand", isSignal: true, isRequired: false, transformFunction: null }, classClassIncludeButtonCollapseExpand: { classPropertyName: "classClassIncludeButtonCollapseExpand", publicName: "classClassIncludeButtonCollapseExpand", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationTooltipEvent: { classPropertyName: "ignoreStopPropagationTooltipEvent", publicName: "ignoreStopPropagationTooltipEvent", isSignal: true, isRequired: false, transformFunction: null }, ngClassObject: { classPropertyName: "ngClassObject", publicName: "ngClassObject", isSignal: true, isRequired: false, transformFunction: null }, hasBackgroundGradient: { classPropertyName: "hasBackgroundGradient", publicName: "hasBackgroundGradient", isSignal: true, isRequired: false, transformFunction: null }, labelButtonViewMore: { classPropertyName: "labelButtonViewMore", publicName: "labelButtonViewMore", isSignal: true, isRequired: false, transformFunction: null }, labelButtonCollapse: { classPropertyName: "labelButtonCollapse", publicName: "labelButtonCollapse", isSignal: true, isRequired: false, transformFunction: null }, directionTooltip: { classPropertyName: "directionTooltip", publicName: "directionTooltip", isSignal: true, isRequired: false, transformFunction: null }, useXssFilter: { classPropertyName: "useXssFilter", publicName: "useXssFilter", isSignal: true, isRequired: false, transformFunction: null }, defaultIsCollapse: { classPropertyName: "defaultIsCollapse", publicName: "defaultIsCollapse", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outDisplayLineClamp: "outDisplayLineClamp", outAction: "outAction", outClick: "outClick", outFunctionControl: "outFunctionControl" }, host: { listeners: { "window:resize": "resize($event)" } }, ngImport: i0, template: "@if (!displayLineClamp()) {\n @if (!isInnerText()) {\n <div\n LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerHTML\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerHtml]=\"content() | translate | LibsUiPipesSecurityTrustPipe: 'html' : useXssFilter() | async\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\"></div>\n } @else {\n <div\n LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerText\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerText]=\"content() | translate\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\"></div>\n }\n} @else {\n <libs_ui-components-popover\n class=\"relative\"\n type=\"other\"\n [ignoreShowPopover]=\"!showTooltip()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationTooltipEvent()\"\n [config]=\"{\n timerDestroy: timeHidePopoverOnMouseout(),\n maxWidth: maxWidthTooltip(),\n maxHeight: maxHeightTooltip(),\n direction: directionTooltip(),\n content: isInnerText() ? (this.content() | LibsUiPipesEscapeHtmlPipe) : this.content(),\n zIndex: zIndexPopover(),\n }\"\n (outEvent)=\"handlerClick($event)\">\n @if (isCollapse() && hasBackgroundGradient()) {\n <div class=\"h-[40px] libs-ui-line-clamp-bg-gradient\"></div>\n }\n @if (!isInnerText()) {\n <div\n [ngClass]=\"ngClassObject()\"\n [innerHtml]=\"contentDisplay() | translate | LibsUiPipesSecurityTrustPipe: 'html' : useXssFilter() | async\"></div>\n } @else {\n <div\n [ngClass]=\"ngClassObject()\"\n [innerText]=\"contentDisplay() | translate\"></div>\n }\n </libs_ui-components-popover>\n\n @if (!ignoreShowButtonCollapseExpand()) {\n @if (isCollapse()) {\n <libs_ui-components-buttons-button\n type=\"button-link-primary\"\n [label]=\"labelButtonViewMore() || 'i18n_view_more'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"viewMore($event)\" />\n } @else {\n @if (!ignoreShowButtonCollapse()) {\n <libs_ui-components-buttons-button\n type=\"button-link-primary\"\n [label]=\"labelButtonCollapse() || 'i18n_collapse'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"hiddenMore($event)\" />\n }\n }\n }\n}\n", styles: [".libs-ui-line-clamp-content{font-weight:400;text-align:start}.libs-ui-line-clamp-bg-gradient{opacity:.5;background:linear-gradient(180deg,#fff0,#fffffff2 51.56%,#fff);position:absolute;width:100%;bottom:0}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: LibsUiComponentsLineClampDirective, selector: "[LibsUiComponentsLineClampDirective]", inputs: ["lengthLimitDisplay", "methodDisplay", "content", "ignoreThreeDots"], outputs: ["outContentSub"] }, { kind: "pipe", type: LibsUiPipesSecurityTrustPipe, name: "LibsUiPipesSecurityTrustPipe" }, { kind: "pipe", type: LibsUiPipesEscapeHtmlPipe, name: "LibsUiPipesEscapeHtmlPipe" }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
104
107
  }
105
108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsLineClampComponent, decorators: [{
106
109
  type: Component,
107
- args: [{ selector: 'libs_ui-components-line_clamp', standalone: true, imports: [
108
- NgClass, TranslateModule, AsyncPipe,
109
- LibsUiComponentsLineClampDirective,
110
- LibsUiPipesSecurityTrustPipe,
111
- LibsUiPipesEscapeHtmlPipe,
112
- LibsUiComponentsPopoverComponent,
113
- LibsUiComponentsButtonsButtonComponent
114
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!displayLineClamp()) {\n @if (!isInnerText()) {\n <div LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerHTML\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerHtml]=\"(content() | translate | LibsUiPipesSecurityTrustPipe: 'html': useXssFilter()) | async\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\">\n </div>\n } @else {\n <div LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerText\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerText]=\"content() | translate\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\">\n </div>\n }\n}\n@else {\n <libs_ui-components-popover class=\"relative\"\n type=\"other\"\n [ignoreShowPopover]=\"!showTooltip()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationTooltipEvent()\"\n [config]=\"{\n timerDestroy:timeHidePopoverOnMouseout(),\n maxWidth:maxWidthTooltip() ,\n maxHeight:maxHeightTooltip(),\n direction:directionTooltip(),\n content: isInnerText() ? (this.content() | LibsUiPipesEscapeHtmlPipe) : this.content(),\n zIndex: zIndexPopover()\n }\"\n (outEvent)=\"handlerClick($event)\">\n @if (isCollapse() && hasBackgroundGradient()) {\n <div class=\"h-[40px] libs-ui-line-clamp-bg-gradient\"></div>\n }\n @if (!isInnerText()) {\n <div [ngClass]=\"ngClassObject()\"\n [innerHtml]=\"(contentDisplay() | translate | LibsUiPipesSecurityTrustPipe: 'html': useXssFilter()) | async\">\n </div>\n } @else {\n <div [ngClass]=\"ngClassObject()\"\n [innerText]=\"contentDisplay() | translate\">\n </div>\n }\n </libs_ui-components-popover>\n\n @if (!ignoreShowButtonCollapseExpand()) {\n @if (isCollapse()) {\n <libs_ui-components-buttons-button type=\"button-link-primary\"\n [label]=\"labelButtonViewMore() || 'i18n_view_more'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"viewMore($event)\" />\n } @else {\n @if (!ignoreShowButtonCollapse()) {\n <libs_ui-components-buttons-button type=\"button-link-primary\"\n [label]=\"labelButtonCollapse() || 'i18n_collapse'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"hiddenMore($event)\" />\n }\n }\n }\n}\n", styles: [".libs-ui-line-clamp-content{font-weight:400;text-align:start}.libs-ui-line-clamp-bg-gradient{opacity:.5;background:linear-gradient(180deg,#fff0,#fffffff2 51.56%,#fff);position:absolute;width:100%;bottom:0}\n"] }]
110
+ args: [{ selector: 'libs_ui-components-line_clamp', standalone: true, imports: [NgClass, TranslateModule, AsyncPipe, LibsUiComponentsLineClampDirective, LibsUiPipesSecurityTrustPipe, LibsUiPipesEscapeHtmlPipe, LibsUiComponentsPopoverComponent, LibsUiComponentsButtonsButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!displayLineClamp()) {\n @if (!isInnerText()) {\n <div\n LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerHTML\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerHtml]=\"content() | translate | LibsUiPipesSecurityTrustPipe: 'html' : useXssFilter() | async\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\"></div>\n } @else {\n <div\n LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerText\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerText]=\"content() | translate\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\"></div>\n }\n} @else {\n <libs_ui-components-popover\n class=\"relative\"\n type=\"other\"\n [ignoreShowPopover]=\"!showTooltip()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationTooltipEvent()\"\n [config]=\"{\n timerDestroy: timeHidePopoverOnMouseout(),\n maxWidth: maxWidthTooltip(),\n maxHeight: maxHeightTooltip(),\n direction: directionTooltip(),\n content: isInnerText() ? (this.content() | LibsUiPipesEscapeHtmlPipe) : this.content(),\n zIndex: zIndexPopover(),\n }\"\n (outEvent)=\"handlerClick($event)\">\n @if (isCollapse() && hasBackgroundGradient()) {\n <div class=\"h-[40px] libs-ui-line-clamp-bg-gradient\"></div>\n }\n @if (!isInnerText()) {\n <div\n [ngClass]=\"ngClassObject()\"\n [innerHtml]=\"contentDisplay() | translate | LibsUiPipesSecurityTrustPipe: 'html' : useXssFilter() | async\"></div>\n } @else {\n <div\n [ngClass]=\"ngClassObject()\"\n [innerText]=\"contentDisplay() | translate\"></div>\n }\n </libs_ui-components-popover>\n\n @if (!ignoreShowButtonCollapseExpand()) {\n @if (isCollapse()) {\n <libs_ui-components-buttons-button\n type=\"button-link-primary\"\n [label]=\"labelButtonViewMore() || 'i18n_view_more'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"viewMore($event)\" />\n } @else {\n @if (!ignoreShowButtonCollapse()) {\n <libs_ui-components-buttons-button\n type=\"button-link-primary\"\n [label]=\"labelButtonCollapse() || 'i18n_collapse'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"hiddenMore($event)\" />\n }\n }\n }\n}\n", styles: [".libs-ui-line-clamp-content{font-weight:400;text-align:start}.libs-ui-line-clamp-bg-gradient{opacity:.5;background:linear-gradient(180deg,#fff0,#fffffff2 51.56%,#fff);position:absolute;width:100%;bottom:0}\n"] }]
115
111
  }], ctorParameters: () => [], propDecorators: { resize: [{
116
112
  type: HostListener,
117
113
  args: ['window:resize', ['$event']]
118
114
  }] } });
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jbGFtcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGluZS1jbGFtcC9zcmMvbGluZS1jbGFtcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGluZS1jbGFtcC9zcmMvbGluZS1jbGFtcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFxQixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBOEMsTUFBTSw2QkFBNkIsQ0FBQztBQUMzSCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFpQnZDLE1BQU0sT0FBTyxrQ0FBa0M7SUFDN0MsZUFBZTtJQUNMLGdCQUFnQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUMxQyxVQUFVLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFBO0lBQ25DLFlBQVksR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7SUFDbEMsY0FBYyxH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Q0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVTLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBaUM7UUFDNUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ25ELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7d0dBdkdVLGtDQUFrQzs0RkFBbEMsa0NBQWtDLGdvSEMzQi9DLGc0RkEyRUEseVFEekRJLE9BQU8sbUZBQUUsZUFBZSx1RkFBRSxTQUFTLDhDQUNuQyxrQ0FBa0MsdUxBQ2xDLDRCQUE0QixnRUFDNUIseUJBQXlCLGtFQUN6QixnQ0FBZ0Msb2dCQUNoQyxzQ0FBc0M7OzRGQUk3QixrQ0FBa0M7a0JBaEI5QyxTQUFTOytCQUVFLCtCQUErQixjQUc3QixJQUFJLFdBQ1A7d0JBQ1AsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTO3dCQUNuQyxrQ0FBa0M7d0JBQ2xDLDRCQUE0Qjt3QkFDNUIseUJBQXlCO3dCQUN6QixnQ0FBZ0M7d0JBQ2hDLHNDQUFzQztxQkFDdkMsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07d0RBc0YvQixNQUFNO3NCQURyQixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSwgT25Jbml0LCBlZmZlY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIFRZUEVfUE9QT1ZFUl9ESVJFQ1RJT04sIFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBMaWJzVWlQaXBlc0VzY2FwZUh0bWxQaXBlIH0gZnJvbSAnQGxpYnMtdWkvcGlwZXMtZXNjYXBlLWh0bWwnO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNTZWN1cml0eVRydXN0UGlwZSB9IGZyb20gJ0BsaWJzLXVpL3BpcGVzLXNlY3VyaXR5LXRydXN0JztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSUxpbmVDbGFtcEZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaW5lQ2xhbXBEaXJlY3RpdmUgfSBmcm9tICcuL2xpbmUtY2xhbXAuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRZUEVfT0JKRUNUIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1saW5lX2NsYW1wJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpbmUtY2xhbXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9saW5lLWNsYW1wLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLCBUcmFuc2xhdGVNb2R1bGUsIEFzeW5jUGlwZSxcbiAgICBMaWJzVWlDb21wb25lbnRzTGluZUNsYW1wRGlyZWN0aXZlLFxuICAgIExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGUsXG4gICAgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZSxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzTGluZUNsYW1wQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIGRpc3BsYXlMaW5lQ2xhbXAgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgaXNDb2xsYXBzZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSlcbiAgcHJvdGVjdGVkIGNvbnRlbnRDbGFtcCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIGNvbnRlbnREaXNwbGF5ID0gc2lnbmFsPHN0cmluZz4oJycpO1xuXG4gIC8qKiBJTlBVVCAqL1xuICByZWFkb25seSBjb250ZW50ID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsZW5ndGhMaW1pdERpc3BsYXkgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMjAwLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCB8fCAyMDAgfSk7XG4gIHJlYWRvbmx5IG1heEhlaWdodCA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTsgLy8gbWF4SGVpZ2h0ID0gKGxpbmUtaGVpZ2h0IGPhu6dhIHRleHQpKihz4buRIGTDsm5nIG1vbmcgbXXhu5FuKVxuICByZWFkb25seSBpZ25vcmVTaG93QnV0dG9uQ29sbGFwc2VFeHBhbmQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVTaG93QnV0dG9uQ29sbGFwc2UgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBzaG93VG9vbHRpcCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHRpbWVIaWRlUG9wb3Zlck9uTW91c2VvdXQgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oNTAsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/IDUwIH0pO1xuICByZWFkb25seSBtYXhXaWR0aFRvb2x0aXAgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMjUwLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyAyNTAgfSk7XG4gIHJlYWRvbmx5IG1heEhlaWdodFRvb2x0aXAgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTUwLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyAxNTAgfSk7XG4gIHJlYWRvbmx5IHpJbmRleFBvcG92ZXIgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAwMSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gMTAwMSB9KTtcbiAgcmVhZG9ubHkgaXNJbm5lclRleHQgPSBpbnB1dDxib29sZWFuPigpOyAvLyBraMO0bmcgY+G6p24gZXNjYXBlSFRNTCBjb250ZW50IGtoaSBiaeG6v24gYuG6sW5nIHRydWVcbiAgcmVhZG9ubHkgY2xhc3NDbGFzc0xhYmVsQnV0dG9uQ29sbGFwc2VFeHBhbmQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2xpYnMtdWktZm9udC1oNXInLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyAnbGlicy11aS1mb250LWg1cicgfSk7XG4gIHJlYWRvbmx5IGNsYXNzQ2xhc3NJbmNsdWRlQnV0dG9uQ29sbGFwc2VFeHBhbmQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJyFwLTAnLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyAnIXAtMCcgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZVN0b3BQcm9wYWdhdGlvblRvb2x0aXBFdmVudCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgbmdDbGFzc09iamVjdCA9IGlucHV0PFRZUEVfT0JKRUNULCBUWVBFX09CSkVDVCB8IHVuZGVmaW5lZD4oeyAnbGlicy11aS1saW5lLWNsYW1wLWNvbnRlbnQgbGlicy11aS1mb250LWg1cic6IHRydWUgfSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgfHwgeyAnbGlicy11aS1saW5lLWNsYW1wLWNvbnRlbnQgbGliLXVpLWZvbnQtaDVyJzogdHJ1ZSB9IH0pOyAvLyBvYmplY3QgbmdDbGFzc1xuICByZWFkb25seSBoYXNCYWNrZ3JvdW5kR3JhZGllbnQgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGxhYmVsQnV0dG9uVmlld01vcmUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxhYmVsQnV0dG9uQ29sbGFwc2UgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGRpcmVjdGlvblRvb2x0aXAgPSBpbnB1dDxUWVBFX1BPUE9WRVJfRElSRUNUSU9OLCBUWVBFX1BPUE9WRVJfRElSRUNUSU9OIHwgdW5kZWZpbmVkPigndG9wJywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gJ3RvcCcgfSk7XG4gIHJlYWRvbmx5IHVzZVhzc0ZpbHRlciA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KHRydWUsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/IHRydWUgfSk7XG4gIHJlYWRvbmx5IGRlZmF1bHRJc0NvbGxhcHNlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4odHJ1ZSwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gdHJ1ZSB9KTtcblxuICAvKiogT1VUUFVUICovXG4gIHByb3RlY3RlZCByZWFkb25seSBvdXREaXNwbGF5TGluZUNsYW1wID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBvdXRBY3Rpb24gPSBvdXRwdXQ8c3RyaW5nPigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3V0Q2xpY2sgPSBvdXRwdXQ8RXZlbnQgfCBUWVBFX1BPUE9WRVJfRVZFTlQ+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBvdXRGdW5jdGlvbkNvbnRyb2wgPSBvdXRwdXQ8SUxpbmVDbGFtcEZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIWlzTmlsKHRoaXMuY29udGVudCgpKSkge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29udGVudERpc3BsYXkuc2V0KCcnKTtcbiAgICAgICAgICB0aGlzLmRpc3BsYXlMaW5lQ2xhbXAuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmlzQ29sbGFwc2Uuc2V0KGZhbHNlKTtcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3V0RnVuY3Rpb25Db250cm9sLmVtaXQoe1xuICAgICAgcmVmcmVzaDogdGhpcy5yZWZyZXNoLmJpbmQodGhpcylcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBGVU5DVElPTlMgKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckNvbnRlbnRTdWIoY29udGVudDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY29udGVudCgpICE9PSBjb250ZW50KSB7XG4gICAgICB0aGlzLmRpc3BsYXlMaW5lQ2xhbXAuc2V0KHRydWUpO1xuICAgICAgdGhpcy5pc0NvbGxhcHNlLnNldCh0aGlzLmRlZmF1bHRJc0NvbGxhcHNlKCkpO1xuICAgICAgdGhpcy5jb250ZW50Q2xhbXAuc2V0KGNvbnRlbnQpO1xuICAgICAgdGhpcy5jb250ZW50RGlzcGxheS5zZXQodGhpcy5pc0NvbGxhcHNlKCkgPyBjb250ZW50IDogdGhpcy5jb250ZW50KCkpO1xuICAgICAgdGhpcy5vdXREaXNwbGF5TGluZUNsYW1wLmVtaXQodGhpcy5pc0NvbGxhcHNlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyB2aWV3TW9yZShlOiBFdmVudCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0NvbGxhcHNlLnNldChmYWxzZSk7XG4gICAgdGhpcy5jb250ZW50RGlzcGxheS5zZXQodGhpcy5jb250ZW50KCkpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLm91dEFjdGlvbi5lbWl0KCd2aWV3LW1vcmUnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoaWRkZW5Nb3JlKGU6IEV2ZW50KSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzQ29sbGFwc2Uuc2V0KHRydWUpO1xuICAgIHRoaXMuY29udGVudERpc3BsYXkuc2V0KHRoaXMuY29udGVudENsYW1wKCkpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLm91dEFjdGlvbi5lbWl0KCdoaWRkZW4tbW9yZScpO1xuICB9XG5cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIGFzeW5jIHJlc2l6ZSgpIHtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZWZyZXNoKCkge1xuICAgIHRoaXMuY29udGVudERpc3BsYXkuc2V0KHRoaXMuY29udGVudCgpKTtcbiAgICB0aGlzLmRpc3BsYXlMaW5lQ2xhbXAuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmlzQ29sbGFwc2Uuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2xpY2soZXZlbnQ6IEV2ZW50IHwgVFlQRV9QT1BPVkVSX0VWRU5UKSB7XG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycgJiYgZXZlbnQgIT09ICdjbGljaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRDbGljay5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGlzcGxheUxpbmVDbGFtcC5zZXQoZmFsc2UpO1xuICB9XG59XG4iLCJAaWYgKCFkaXNwbGF5TGluZUNsYW1wKCkpIHtcbiAgQGlmICghaXNJbm5lclRleHQoKSkge1xuICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c0xpbmVDbGFtcERpcmVjdGl2ZVxuICAgICAgW2xlbmd0aExpbWl0RGlzcGxheV09XCJsZW5ndGhMaW1pdERpc3BsYXkoKVwiXG4gICAgICBbaWdub3JlVGhyZWVEb3RzXT1cImhhc0JhY2tncm91bmRHcmFkaWVudCgpXCJcbiAgICAgIG1ldGhvZERpc3BsYXk9XCJpbm5lckhUTUxcIlxuICAgICAgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgW2NvbnRlbnRdPVwiY29udGVudCgpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIm5nQ2xhc3NPYmplY3QoKVwiXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cIm1heEhlaWdodCgpXCJcbiAgICAgIFtpbm5lckh0bWxdPVwiKGNvbnRlbnQoKSB8IHRyYW5zbGF0ZSB8IExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGU6ICdodG1sJzogdXNlWHNzRmlsdGVyKCkpIHwgYXN5bmNcIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbGljaygkZXZlbnQpXCJcbiAgICAgIChvdXRDb250ZW50U3ViKT1cImhhbmRsZXJDb250ZW50U3ViKCRldmVudClcIj5cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdiBMaWJzVWlDb21wb25lbnRzTGluZUNsYW1wRGlyZWN0aXZlXG4gICAgICBbbGVuZ3RoTGltaXREaXNwbGF5XT1cImxlbmd0aExpbWl0RGlzcGxheSgpXCJcbiAgICAgIFtpZ25vcmVUaHJlZURvdHNdPVwiaGFzQmFja2dyb3VuZEdyYWRpZW50KClcIlxuICAgICAgbWV0aG9kRGlzcGxheT1cImlubmVyVGV4dFwiXG4gICAgICBjbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiXG4gICAgICBbY29udGVudF09XCJjb250ZW50KClcIlxuICAgICAgW25nQ2xhc3NdPVwibmdDbGFzc09iamVjdCgpXCJcbiAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwibWF4SGVpZ2h0KClcIlxuICAgICAgW2lubmVyVGV4dF09XCJjb250ZW50KCkgfCB0cmFuc2xhdGVcIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbGljaygkZXZlbnQpXCJcbiAgICAgIChvdXRDb250ZW50U3ViKT1cImhhbmRsZXJDb250ZW50U3ViKCRldmVudClcIj5cbiAgICA8L2Rpdj5cbiAgfVxufVxuQGVsc2Uge1xuICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgdHlwZT1cIm90aGVyXCJcbiAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiIXNob3dUb29sdGlwKClcIlxuICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJpZ25vcmVTdG9wUHJvcGFnYXRpb25Ub29sdGlwRXZlbnQoKVwiXG4gICAgW2NvbmZpZ109XCJ7XG4gICAgICB0aW1lckRlc3Ryb3k6dGltZUhpZGVQb3BvdmVyT25Nb3VzZW91dCgpLFxuICAgICAgbWF4V2lkdGg6bWF4V2lkdGhUb29sdGlwKCkgLFxuICAgICAgbWF4SGVpZ2h0Om1heEhlaWdodFRvb2x0aXAoKSxcbiAgICAgIGRpcmVjdGlvbjpkaXJlY3Rpb25Ub29sdGlwKCksXG4gICAgICBjb250ZW50OiBpc0lubmVyVGV4dCgpID8gKHRoaXMuY29udGVudCgpIHwgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZSkgOiB0aGlzLmNvbnRlbnQoKSxcbiAgICAgIHpJbmRleDogekluZGV4UG9wb3ZlcigpXG4gICAgfVwiXG4gICAgKG91dEV2ZW50KT1cImhhbmRsZXJDbGljaygkZXZlbnQpXCI+XG4gICAgQGlmIChpc0NvbGxhcHNlKCkgJiYgaGFzQmFja2dyb3VuZEdyYWRpZW50KCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJoLVs0MHB4XSBsaWJzLXVpLWxpbmUtY2xhbXAtYmctZ3JhZGllbnRcIj48L2Rpdj5cbiAgICB9XG4gICAgQGlmICghaXNJbm5lclRleHQoKSkge1xuICAgICAgPGRpdiBbbmdDbGFzc109XCJuZ0NsYXNzT2JqZWN0KClcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cIihjb250ZW50RGlzcGxheSgpICB8IHRyYW5zbGF0ZSB8IExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGU6ICdodG1sJzogdXNlWHNzRmlsdGVyKCkpIHwgYXN5bmNcIj5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGRpdiBbbmdDbGFzc109XCJuZ0NsYXNzT2JqZWN0KClcIlxuICAgICAgICBbaW5uZXJUZXh0XT1cImNvbnRlbnREaXNwbGF5KCkgfCB0cmFuc2xhdGVcIj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cblxuICBAaWYgKCFpZ25vcmVTaG93QnV0dG9uQ29sbGFwc2VFeHBhbmQoKSkge1xuICAgIEBpZiAoaXNDb2xsYXBzZSgpKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIHR5cGU9XCJidXR0b24tbGluay1wcmltYXJ5XCJcbiAgICAgICAgW2xhYmVsXT1cImxhYmVsQnV0dG9uVmlld01vcmUoKSB8fCAnaTE4bl92aWV3X21vcmUnXCJcbiAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJjbGFzc0NsYXNzSW5jbHVkZUJ1dHRvbkNvbGxhcHNlRXhwYW5kKClcIlxuICAgICAgICBbY2xhc3NMYWJlbF09XCJjbGFzc0NsYXNzTGFiZWxCdXR0b25Db2xsYXBzZUV4cGFuZCgpXCJcbiAgICAgICAgKG91dENsaWNrKT1cInZpZXdNb3JlKCRldmVudClcIiAvPlxuICAgIH0gQGVsc2Uge1xuICAgICAgQGlmICghaWdub3JlU2hvd0J1dHRvbkNvbGxhcHNlKCkpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiB0eXBlPVwiYnV0dG9uLWxpbmstcHJpbWFyeVwiXG4gICAgICAgICAgW2xhYmVsXT1cImxhYmVsQnV0dG9uQ29sbGFwc2UoKSB8fCAnaTE4bl9jb2xsYXBzZSdcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY2xhc3NDbGFzc0luY2x1ZGVCdXR0b25Db2xsYXBzZUV4cGFuZCgpXCJcbiAgICAgICAgICBbY2xhc3NMYWJlbF09XCJjbGFzc0NsYXNzTGFiZWxCdXR0b25Db2xsYXBzZUV4cGFuZCgpXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGlkZGVuTW9yZSgkZXZlbnQpXCIgLz5cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jbGFtcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGluZS1jbGFtcC9zcmMvbGluZS1jbGFtcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGluZS1jbGFtcC9zcmMvbGluZS1jbGFtcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFxQixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBOEMsTUFBTSw2QkFBNkIsQ0FBQztBQUMzSCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFVdkMsTUFBTSxPQUFPLGtDQUFrQztJQUM3QyxlQUFlO0lBQ0wsZ0JBQWdCLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQzFDLFVBQVUsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDcEMsWUFBWSxHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUNsQyxjQUFjLEdB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LGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRVMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFpQztRQUM1RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDbkQsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQzt3R0F6R1Usa0NBQWtDOzRGQUFsQyxrQ0FBa0MsZ29IQ3BCL0MsNjVGQTZFQSx5UUQ1RFksT0FBTyxtRkFBRSxlQUFlLHVGQUFFLFNBQVMsOENBQUUsa0NBQWtDLHVMQUFFLDRCQUE0QixnRUFBRSx5QkFBeUIsa0VBQUUsZ0NBQWdDLG9nQkFBRSxzQ0FBc0M7OzRGQUd6TSxrQ0FBa0M7a0JBVDlDLFNBQVM7K0JBRUUsK0JBQStCLGNBRzdCLElBQUksV0FDUCxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLGtDQUFrQyxFQUFFLDRCQUE0QixFQUFFLHlCQUF5QixFQUFFLGdDQUFnQyxFQUFFLHNDQUFzQyxDQUFDLG1CQUNwTSx1QkFBdUIsQ0FBQyxNQUFNO3dEQXdGL0IsTUFBTTtzQkFEckIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgZWZmZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LCBUWVBFX1BPUE9WRVJfRElSRUNUSU9OLCBUWVBFX1BPUE9WRVJfRVZFTlQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNFc2NhcGVIdG1sUGlwZSB9IGZyb20gJ0BsaWJzLXVpL3BpcGVzLWVzY2FwZS1odG1sJztcbmltcG9ydCB7IExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1zZWN1cml0eS10cnVzdCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IElMaW5lQ2xhbXBGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTGluZUNsYW1wRGlyZWN0aXZlIH0gZnJvbSAnLi9saW5lLWNsYW1wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBUWVBFX09CSkVDVCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtbGluZV9jbGFtcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saW5lLWNsYW1wLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGluZS1jbGFtcC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdDbGFzcywgVHJhbnNsYXRlTW9kdWxlLCBBc3luY1BpcGUsIExpYnNVaUNvbXBvbmVudHNMaW5lQ2xhbXBEaXJlY3RpdmUsIExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGUsIExpYnNVaVBpcGVzRXNjYXBlSHRtbFBpcGUsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzTGluZUNsYW1wQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIGRpc3BsYXlMaW5lQ2xhbXAgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgaXNDb2xsYXBzZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBjb250ZW50Q2xhbXAgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByb3RlY3RlZCBjb250ZW50RGlzcGxheSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcblxuICAvKiogSU5QVVQgKi9cbiAgcmVhZG9ubHkgY29udGVudCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgbGVuZ3RoTGltaXREaXNwbGF5ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDIwMCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCB8fCAyMDAgfSk7XG4gIHJlYWRvbmx5IG1heEhlaWdodCA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTsgLy8gbWF4SGVpZ2h0ID0gKGxpbmUtaGVpZ2h0IGPhu6dhIHRleHQpKihz4buRIGTDsm5nIG1vbmcgbXXhu5FuKVxuICByZWFkb25seSBpZ25vcmVTaG93QnV0dG9uQ29sbGFwc2VFeHBhbmQgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBpZ25vcmVTaG93QnV0dG9uQ29sbGFwc2UgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBzaG93VG9vbHRpcCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHRpbWVIaWRlUG9wb3Zlck9uTW91c2VvdXQgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oNTAsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gNTAgfSk7XG4gIHJlYWRvbmx5IG1heFdpZHRoVG9vbHRpcCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigyNTAsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gMjUwIH0pO1xuICByZWFkb25seSBtYXhIZWlnaHRUb29sdGlwID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDE1MCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAxNTAgfSk7XG4gIHJlYWRvbmx5IHpJbmRleFBvcG92ZXIgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAwMSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAxMDAxIH0pO1xuICByZWFkb25seSBpc0lubmVyVGV4dCA9IGlucHV0PGJvb2xlYW4+KCk7IC8vIGtow7RuZyBj4bqnbiBlc2NhcGVIVE1MIGNvbnRlbnQga2hpIGJp4bq/biBi4bqxbmcgdHJ1ZVxuICByZWFkb25seSBjbGFzc0NsYXNzTGFiZWxCdXR0b25Db2xsYXBzZUV4cGFuZCA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignbGlicy11aS1mb250LWg1cicsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gJ2xpYnMtdWktZm9udC1oNXInIH0pO1xuICByZWFkb25seSBjbGFzc0NsYXNzSW5jbHVkZUJ1dHRvbkNvbGxhcHNlRXhwYW5kID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCchcC0wJywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAnIXAtMCcgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZVN0b3BQcm9wYWdhdGlvblRvb2x0aXBFdmVudCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBuZ0NsYXNzT2JqZWN0ID0gaW5wdXQ8VFlQRV9PQkpFQ1QsIFRZUEVfT0JKRUNUIHwgdW5kZWZpbmVkPih7ICdsaWJzLXVpLWxpbmUtY2xhbXAtY29udGVudCBsaWJzLXVpLWZvbnQtaDVyJzogdHJ1ZSB9LCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsIHx8IHsgJ2xpYnMtdWktbGluZS1jbGFtcC1jb250ZW50IGxpYi11aS1mb250LWg1cic6IHRydWUgfSB9KTsgLy8gb2JqZWN0IG5nQ2xhc3NcbiAgcmVhZG9ubHkgaGFzQmFja2dyb3VuZEdyYWRpZW50ID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGxhYmVsQnV0dG9uVmlld01vcmUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGxhYmVsQnV0dG9uQ29sbGFwc2UgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGRpcmVjdGlvblRvb2x0aXAgPSBpbnB1dDxUWVBFX1BPUE9WRVJfRElSRUNUSU9OLCBUWVBFX1BPUE9WRVJfRElSRUNUSU9OIHwgdW5kZWZpbmVkPigndG9wJywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAndG9wJyB9KTtcbiAgcmVhZG9ubHkgdXNlWHNzRmlsdGVyID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4odHJ1ZSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyB0cnVlIH0pO1xuICByZWFkb25seSBkZWZhdWx0SXNDb2xsYXBzZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KHRydWUsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gdHJ1ZSB9KTtcblxuICAvKiogT1VUUFVUICovXG4gIHByb3RlY3RlZCByZWFkb25seSBvdXREaXNwbGF5TGluZUNsYW1wID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBvdXRBY3Rpb24gPSBvdXRwdXQ8c3RyaW5nPigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3V0Q2xpY2sgPSBvdXRwdXQ8RXZlbnQgfCBUWVBFX1BPUE9WRVJfRVZFTlQ+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBvdXRGdW5jdGlvbkNvbnRyb2wgPSBvdXRwdXQ8SUxpbmVDbGFtcEZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIWlzTmlsKHRoaXMuY29udGVudCgpKSkge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29udGVudERpc3BsYXkuc2V0KCcnKTtcbiAgICAgICAgICB0aGlzLmRpc3BsYXlMaW5lQ2xhbXAuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmlzQ29sbGFwc2Uuc2V0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm91dEZ1bmN0aW9uQ29udHJvbC5lbWl0KHRoaXMuRnVuY3Rpb25zQ29udHJvbCk7XG4gIH1cblxuICAvKiogRlVOQ1RJT05TICovXG4gIHB1YmxpYyBnZXQgRnVuY3Rpb25zQ29udHJvbCgpOiBJTGluZUNsYW1wRnVuY3Rpb25Db250cm9sRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICByZWZyZXNoOiB0aGlzLnJlZnJlc2guYmluZCh0aGlzKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDb250ZW50U3ViKGNvbnRlbnQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmNvbnRlbnQoKSAhPT0gY29udGVudCkge1xuICAgICAgdGhpcy5kaXNwbGF5TGluZUNsYW1wLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuaXNDb2xsYXBzZS5zZXQodGhpcy5kZWZhdWx0SXNDb2xsYXBzZSgpKTtcbiAgICAgIHRoaXMuY29udGVudENsYW1wLnNldChjb250ZW50KTtcbiAgICAgIHRoaXMuY29udGVudERpc3BsYXkuc2V0KHRoaXMuaXNDb2xsYXBzZSgpID8gY29udGVudCA6IHRoaXMuY29udGVudCgpKTtcbiAgICAgIHRoaXMub3V0RGlzcGxheUxpbmVDbGFtcC5lbWl0KHRoaXMuaXNDb2xsYXBzZSgpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgdmlld01vcmUoZTogRXZlbnQpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNDb2xsYXBzZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY29udGVudERpc3BsYXkuc2V0KHRoaXMuY29udGVudCgpKTtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5vdXRBY3Rpb24uZW1pdCgndmlldy1tb3JlJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGlkZGVuTW9yZShlOiBFdmVudCkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0NvbGxhcHNlLnNldCh0cnVlKTtcbiAgICB0aGlzLmNvbnRlbnREaXNwbGF5LnNldCh0aGlzLmNvbnRlbnRDbGFtcCgpKTtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5vdXRBY3Rpb24uZW1pdCgnaGlkZGVuLW1vcmUnKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBwcm90ZWN0ZWQgYXN5bmMgcmVzaXplKCkge1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlZnJlc2goKSB7XG4gICAgdGhpcy5jb250ZW50RGlzcGxheS5zZXQodGhpcy5jb250ZW50KCkpO1xuICAgIHRoaXMuZGlzcGxheUxpbmVDbGFtcC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNDb2xsYXBzZS5zZXQoZmFsc2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDbGljayhldmVudDogRXZlbnQgfCBUWVBFX1BPUE9WRVJfRVZFTlQpIHtcbiAgICBpZiAodHlwZW9mIGV2ZW50ID09PSAnc3RyaW5nJyAmJiBldmVudCAhPT0gJ2NsaWNrJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dENsaWNrLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kaXNwbGF5TGluZUNsYW1wLnNldChmYWxzZSk7XG4gIH1cbn1cbiIsIkBpZiAoIWRpc3BsYXlMaW5lQ2xhbXAoKSkge1xuICBAaWYgKCFpc0lubmVyVGV4dCgpKSB7XG4gICAgPGRpdlxuICAgICAgTGlic1VpQ29tcG9uZW50c0xpbmVDbGFtcERpcmVjdGl2ZVxuICAgICAgW2xlbmd0aExpbWl0RGlzcGxheV09XCJsZW5ndGhMaW1pdERpc3BsYXkoKVwiXG4gICAgICBbaWdub3JlVGhyZWVEb3RzXT1cImhhc0JhY2tncm91bmRHcmFkaWVudCgpXCJcbiAgICAgIG1ldGhvZERpc3BsYXk9XCJpbm5lckhUTUxcIlxuICAgICAgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgW2NvbnRlbnRdPVwiY29udGVudCgpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIm5nQ2xhc3NPYmplY3QoKVwiXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cIm1heEhlaWdodCgpXCJcbiAgICAgIFtpbm5lckh0bWxdPVwiY29udGVudCgpIHwgdHJhbnNsYXRlIHwgTGlic1VpUGlwZXNTZWN1cml0eVRydXN0UGlwZTogJ2h0bWwnIDogdXNlWHNzRmlsdGVyKCkgfCBhc3luY1wiXG4gICAgICAoY2xpY2spPVwiaGFuZGxlckNsaWNrKCRldmVudClcIlxuICAgICAgKG91dENvbnRlbnRTdWIpPVwiaGFuZGxlckNvbnRlbnRTdWIoJGV2ZW50KVwiPjwvZGl2PlxuICB9IEBlbHNlIHtcbiAgICA8ZGl2XG4gICAgICBMaWJzVWlDb21wb25lbnRzTGluZUNsYW1wRGlyZWN0aXZlXG4gICAgICBbbGVuZ3RoTGltaXREaXNwbGF5XT1cImxlbmd0aExpbWl0RGlzcGxheSgpXCJcbiAgICAgIFtpZ25vcmVUaHJlZURvdHNdPVwiaGFzQmFja2dyb3VuZEdyYWRpZW50KClcIlxuICAgICAgbWV0aG9kRGlzcGxheT1cImlubmVyVGV4dFwiXG4gICAgICBjbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiXG4gICAgICBbY29udGVudF09XCJjb250ZW50KClcIlxuICAgICAgW25nQ2xhc3NdPVwibmdDbGFzc09iamVjdCgpXCJcbiAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwibWF4SGVpZ2h0KClcIlxuICAgICAgW2lubmVyVGV4dF09XCJjb250ZW50KCkgfCB0cmFuc2xhdGVcIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbGljaygkZXZlbnQpXCJcbiAgICAgIChvdXRDb250ZW50U3ViKT1cImhhbmRsZXJDb250ZW50U3ViKCRldmVudClcIj48L2Rpdj5cbiAgfVxufSBAZWxzZSB7XG4gIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlclxuICAgIGNsYXNzPVwicmVsYXRpdmVcIlxuICAgIHR5cGU9XCJvdGhlclwiXG4gICAgW2lnbm9yZVNob3dQb3BvdmVyXT1cIiFzaG93VG9vbHRpcCgpXCJcbiAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwiaWdub3JlU3RvcFByb3BhZ2F0aW9uVG9vbHRpcEV2ZW50KClcIlxuICAgIFtjb25maWddPVwie1xuICAgICAgdGltZXJEZXN0cm95OiB0aW1lSGlkZVBvcG92ZXJPbk1vdXNlb3V0KCksXG4gICAgICBtYXhXaWR0aDogbWF4V2lkdGhUb29sdGlwKCksXG4gICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodFRvb2x0aXAoKSxcbiAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uVG9vbHRpcCgpLFxuICAgICAgY29udGVudDogaXNJbm5lclRleHQoKSA/ICh0aGlzLmNvbnRlbnQoKSB8IExpYnNVaVBpcGVzRXNjYXBlSHRtbFBpcGUpIDogdGhpcy5jb250ZW50KCksXG4gICAgICB6SW5kZXg6IHpJbmRleFBvcG92ZXIoKSxcbiAgICB9XCJcbiAgICAob3V0RXZlbnQpPVwiaGFuZGxlckNsaWNrKCRldmVudClcIj5cbiAgICBAaWYgKGlzQ29sbGFwc2UoKSAmJiBoYXNCYWNrZ3JvdW5kR3JhZGllbnQoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImgtWzQwcHhdIGxpYnMtdWktbGluZS1jbGFtcC1iZy1ncmFkaWVudFwiPjwvZGl2PlxuICAgIH1cbiAgICBAaWYgKCFpc0lubmVyVGV4dCgpKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIFtuZ0NsYXNzXT1cIm5nQ2xhc3NPYmplY3QoKVwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwiY29udGVudERpc3BsYXkoKSB8IHRyYW5zbGF0ZSB8IExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGU6ICdodG1sJyA6IHVzZVhzc0ZpbHRlcigpIHwgYXN5bmNcIj48L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxkaXZcbiAgICAgICAgW25nQ2xhc3NdPVwibmdDbGFzc09iamVjdCgpXCJcbiAgICAgICAgW2lubmVyVGV4dF09XCJjb250ZW50RGlzcGxheSgpIHwgdHJhbnNsYXRlXCI+PC9kaXY+XG4gICAgfVxuICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuXG4gIEBpZiAoIWlnbm9yZVNob3dCdXR0b25Db2xsYXBzZUV4cGFuZCgpKSB7XG4gICAgQGlmIChpc0NvbGxhcHNlKCkpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvbi1saW5rLXByaW1hcnlcIlxuICAgICAgICBbbGFiZWxdPVwibGFiZWxCdXR0b25WaWV3TW9yZSgpIHx8ICdpMThuX3ZpZXdfbW9yZSdcIlxuICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImNsYXNzQ2xhc3NJbmNsdWRlQnV0dG9uQ29sbGFwc2VFeHBhbmQoKVwiXG4gICAgICAgIFtjbGFzc0xhYmVsXT1cImNsYXNzQ2xhc3NMYWJlbEJ1dHRvbkNvbGxhcHNlRXhwYW5kKClcIlxuICAgICAgICAob3V0Q2xpY2spPVwidmlld01vcmUoJGV2ZW50KVwiIC8+XG4gICAgfSBAZWxzZSB7XG4gICAgICBAaWYgKCFpZ25vcmVTaG93QnV0dG9uQ29sbGFwc2UoKSkge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvbi1saW5rLXByaW1hcnlcIlxuICAgICAgICAgIFtsYWJlbF09XCJsYWJlbEJ1dHRvbkNvbGxhcHNlKCkgfHwgJ2kxOG5fY29sbGFwc2UnXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImNsYXNzQ2xhc3NJbmNsdWRlQnV0dG9uQ29sbGFwc2VFeHBhbmQoKVwiXG4gICAgICAgICAgW2NsYXNzTGFiZWxdPVwiY2xhc3NDbGFzc0xhYmVsQnV0dG9uQ29sbGFwc2VFeHBhbmQoKVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhpZGRlbk1vcmUoJGV2ZW50KVwiIC8+XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -21,7 +21,7 @@ export class LibsUiComponentsLineClampDirective {
21
21
  untracked(() => {
22
22
  this.textView.set(this.content());
23
23
  if (this.textView().length > this.lengthLimitDisplay()) {
24
- this.textView.update(val => val.substring(0, this.lengthLimitDisplay()));
24
+ this.textView.update((val) => val.substring(0, this.lengthLimitDisplay()));
25
25
  }
26
26
  if (!this.textView()) {
27
27
  return;
@@ -42,12 +42,13 @@ export class LibsUiComponentsLineClampDirective {
42
42
  }
43
43
  truncate() {
44
44
  let content = this.textView();
45
- while ((this.elementRef.nativeElement.scrollHeight - 2) > this.elementRef.nativeElement.offsetHeight) { // them -2 fix loi tren windows https://admin-cv.mobio.vn/issues/48107
45
+ while (this.elementRef.nativeElement.scrollHeight - 2 > this.elementRef.nativeElement.offsetHeight) {
46
+ // them -2 fix loi tren windows https://admin-cv.mobio.vn/issues/48107
46
47
  if (!content) {
47
48
  return;
48
49
  }
49
50
  content = content.substring(0, content.length - 3);
50
- (this.elementRef.nativeElement)[this.methodDisplay()] = this.ignoreThreeDots() ? content : `${content}...`;
51
+ this.elementRef.nativeElement[this.methodDisplay()] = this.ignoreThreeDots() ? content : `${content}...`;
51
52
  }
52
53
  if (content !== this.textView()) {
53
54
  this.outContentSub.emit(this.ignoreThreeDots() ? content : `${content}...`);
@@ -64,7 +65,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
64
65
  args: [{
65
66
  // eslint-disable-next-line @angular-eslint/directive-selector
66
67
  selector: '[LibsUiComponentsLineClampDirective]',
67
- standalone: true
68
+ standalone: true,
68
69
  }]
69
70
  }], ctorParameters: () => [] });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jbGFtcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGluZS1jbGFtcC9zcmMvbGluZS1jbGFtcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBT25ILE1BQU0sT0FBTyxrQ0FBa0M7SUFFN0MsZUFBZTtJQUNQLFlBQVksR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7SUFFdEMsWUFBWTtJQUNILGtCQUFrQixHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztJQUM5QyxhQUFhLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO0lBQ3pDLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7SUFDbkMsZUFBZSxHQUFHLEtBQUssRUFBVyxDQUFDO0lBRTVDLGFBQWE7SUFDSixhQUFhLEdBQUcsTUFBTSxFQUFVLENBQUM7SUFFMUMsYUFBYTtJQUNJLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFakQ7UUFDRSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7Z0JBQzNFLE9BQU87WUFDVCxDQUFDO1lBQ0QsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7b0JBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMzRSxDQUFDO2dCQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztvQkFDckIsT0FBTztnQkFDVCxDQUFDO2dCQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO29CQUNyQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0I7SUFFUixPQUFPO1FBQ2IsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDM0UsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVPLFFBQVE7UUFDZCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLHNFQUFzRTtZQUM1SyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTztZQUNULENBQUM7WUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNuRCxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxLQUFLLENBQUM7UUFDN0csQ0FBQztRQUNELElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDLENBQUM7UUFDOUUsQ0FBQztJQUNILENBQUM7SUFDRCxXQUFXO1FBQ1QsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7d0dBaEVVLGtDQUFrQzs0RkFBbEMsa0NBQWtDOzs0RkFBbEMsa0NBQWtDO2tCQUw5QyxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLHNDQUFzQztvQkFDaEQsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIE9uRGVzdHJveSwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbTGlic1VpQ29tcG9uZW50c0xpbmVDbGFtcERpcmVjdGl2ZV0nLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNMaW5lQ2xhbXBEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIC8qKiBQUk9QRVJUWSAqL1xuICBwcml2YXRlIHRpbWVJbnRlcnZhbCA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgdGV4dFZpZXcgPSBzaWduYWw8c3RyaW5nPignJyk7XG5cbiAgLyoqIElOUFVUICovXG4gIHJlYWRvbmx5IGxlbmd0aExpbWl0RGlzcGxheSA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgbWV0aG9kRGlzcGxheSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgY29udGVudCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaWdub3JlVGhyZWVEb3RzID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICAvKiogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dENvbnRlbnRTdWIgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gIC8qKiBJTkpFQ1QgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29udGVudCgpIHx8ICF0aGlzLm1ldGhvZERpc3BsYXkoKSB8fCAhdGhpcy5sZW5ndGhMaW1pdERpc3BsYXkoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRleHRWaWV3LnNldCh0aGlzLmNvbnRlbnQoKSk7XG4gICAgICAgIGlmICh0aGlzLnRleHRWaWV3KCkubGVuZ3RoID4gdGhpcy5sZW5ndGhMaW1pdERpc3BsYXkoKSkge1xuICAgICAgICAgIHRoaXMudGV4dFZpZXcudXBkYXRlKHZhbCA9PiB2YWwuc3Vic3RyaW5nKDAsIHRoaXMubGVuZ3RoTGltaXREaXNwbGF5KCkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy50ZXh0VmlldygpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2VzcygpO1xuICAgICAgICB0aGlzLnRpbWVJbnRlcnZhbC5zZXQoc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvY2VzcygpO1xuICAgICAgICB9LCAyNTApKTtcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICAvKiogRlVOQ1RJT05TICovXG5cbiAgcHJpdmF0ZSBwcm9jZXNzKCkge1xuICAgIGlmICh0aGlzLmVsZW1lbnRSZWYgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRbdGhpcy5tZXRob2REaXNwbGF5KCldKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMudGltZUludGVydmFsKCkpO1xuICAgICAgdGhpcy50cnVuY2F0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJ1bmNhdGUoKSB7XG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLnRleHRWaWV3KCk7XG4gICAgd2hpbGUgKCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgLSAyKSA+IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCkgeyAvLyB0aGVtIC0yIGZpeCBsb2kgdHJlbiB3aW5kb3dzIGh0dHBzOi8vYWRtaW4tY3YubW9iaW8udm4vaXNzdWVzLzQ4MTA3XG4gICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKDAsIGNvbnRlbnQubGVuZ3RoIC0gMyk7XG4gICAgICAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpW3RoaXMubWV0aG9kRGlzcGxheSgpXSA9IHRoaXMuaWdub3JlVGhyZWVEb3RzKCkgPyBjb250ZW50IDogYCR7Y29udGVudH0uLi5gO1xuICAgIH1cbiAgICBpZiAoY29udGVudCAhPT0gdGhpcy50ZXh0VmlldygpKSB7XG4gICAgICB0aGlzLm91dENvbnRlbnRTdWIuZW1pdCh0aGlzLmlnbm9yZVRocmVlRG90cygpID8gY29udGVudCA6IGAke2NvbnRlbnR9Li4uYCk7XG4gICAgfVxuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lSW50ZXJ2YWwoKSk7XG4gIH1cbn1cbiJdfQ==
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jbGFtcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGluZS1jbGFtcC9zcmMvbGluZS1jbGFtcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBT25ILE1BQU0sT0FBTyxrQ0FBa0M7SUFDN0MsZUFBZTtJQUNQLFlBQVksR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELFFBQVEsR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7SUFFdEMsWUFBWTtJQUNILGtCQUFrQixHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztJQUM5QyxhQUFhLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO0lBQ3pDLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7SUFDbkMsZUFBZSxHQUFHLEtBQUssRUFBVyxDQUFDO0lBRTVDLGFBQWE7SUFDSixhQUFhLEdBQUcsTUFBTSxFQUFVLENBQUM7SUFFMUMsYUFBYTtJQUNJLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFakQ7UUFDRSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7Z0JBQzNFLE9BQU87WUFDVCxDQUFDO1lBQ0QsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7b0JBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdFLENBQUM7Z0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO29CQUNyQixPQUFPO2dCQUNULENBQUM7Z0JBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUNuQixXQUFXLENBQUMsR0FBRyxFQUFFO29CQUNmLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUNSLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtJQUVSLE9BQU87UUFDYixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzRSxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRU8sUUFBUTtRQUNkLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbkcsc0VBQXNFO1lBQ3RFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixPQUFPO1lBQ1QsQ0FBQztZQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sS0FBSyxDQUFDO1FBQzNHLENBQUM7UUFDRCxJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEtBQUssQ0FBQyxDQUFDO1FBQzlFLENBQUM7SUFDSCxDQUFDO0lBQ0QsV0FBVztRQUNULGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO3dHQWxFVSxrQ0FBa0M7NEZBQWxDLGtDQUFrQzs7NEZBQWxDLGtDQUFrQztrQkFMOUMsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxzQ0FBc0M7b0JBQ2hELFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBPbkRlc3Ryb3ksIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW0xpYnNVaUNvbXBvbmVudHNMaW5lQ2xhbXBEaXJlY3RpdmVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0xpbmVDbGFtcERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKiBQUk9QRVJUWSAqL1xuICBwcml2YXRlIHRpbWVJbnRlcnZhbCA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgdGV4dFZpZXcgPSBzaWduYWw8c3RyaW5nPignJyk7XG5cbiAgLyoqIElOUFVUICovXG4gIHJlYWRvbmx5IGxlbmd0aExpbWl0RGlzcGxheSA9IGlucHV0LnJlcXVpcmVkPG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgbWV0aG9kRGlzcGxheSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgY29udGVudCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgaWdub3JlVGhyZWVEb3RzID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICAvKiogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dENvbnRlbnRTdWIgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gIC8qKiBJTkpFQ1QgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29udGVudCgpIHx8ICF0aGlzLm1ldGhvZERpc3BsYXkoKSB8fCAhdGhpcy5sZW5ndGhMaW1pdERpc3BsYXkoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRleHRWaWV3LnNldCh0aGlzLmNvbnRlbnQoKSk7XG4gICAgICAgIGlmICh0aGlzLnRleHRWaWV3KCkubGVuZ3RoID4gdGhpcy5sZW5ndGhMaW1pdERpc3BsYXkoKSkge1xuICAgICAgICAgIHRoaXMudGV4dFZpZXcudXBkYXRlKCh2YWwpID0+IHZhbC5zdWJzdHJpbmcoMCwgdGhpcy5sZW5ndGhMaW1pdERpc3BsYXkoKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRleHRWaWV3KCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzKCk7XG4gICAgICAgIHRoaXMudGltZUludGVydmFsLnNldChcbiAgICAgICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3MoKTtcbiAgICAgICAgICB9LCAyNTApXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBGVU5DVElPTlMgKi9cblxuICBwcml2YXRlIHByb2Nlc3MoKSB7XG4gICAgaWYgKHRoaXMuZWxlbWVudFJlZiAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFt0aGlzLm1ldGhvZERpc3BsYXkoKV0pIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lSW50ZXJ2YWwoKSk7XG4gICAgICB0aGlzLnRydW5jYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cnVuY2F0ZSgpIHtcbiAgICBsZXQgY29udGVudCA9IHRoaXMudGV4dFZpZXcoKTtcbiAgICB3aGlsZSAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gMiA+IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCkge1xuICAgICAgLy8gdGhlbSAtMiBmaXggbG9pIHRyZW4gd2luZG93cyBodHRwczovL2FkbWluLWN2Lm1vYmlvLnZuL2lzc3Vlcy80ODEwN1xuICAgICAgaWYgKCFjb250ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZygwLCBjb250ZW50Lmxlbmd0aCAtIDMpO1xuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRbdGhpcy5tZXRob2REaXNwbGF5KCldID0gdGhpcy5pZ25vcmVUaHJlZURvdHMoKSA/IGNvbnRlbnQgOiBgJHtjb250ZW50fS4uLmA7XG4gICAgfVxuICAgIGlmIChjb250ZW50ICE9PSB0aGlzLnRleHRWaWV3KCkpIHtcbiAgICAgIHRoaXMub3V0Q29udGVudFN1Yi5lbWl0KHRoaXMuaWdub3JlVGhyZWVEb3RzKCkgPyBjb250ZW50IDogYCR7Y29udGVudH0uLi5gKTtcbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVJbnRlcnZhbCgpKTtcbiAgfVxufVxuIl19
@@ -30,7 +30,7 @@ class LibsUiComponentsLineClampDirective {
30
30
  untracked(() => {
31
31
  this.textView.set(this.content());
32
32
  if (this.textView().length > this.lengthLimitDisplay()) {
33
- this.textView.update(val => val.substring(0, this.lengthLimitDisplay()));
33
+ this.textView.update((val) => val.substring(0, this.lengthLimitDisplay()));
34
34
  }
35
35
  if (!this.textView()) {
36
36
  return;
@@ -51,12 +51,13 @@ class LibsUiComponentsLineClampDirective {
51
51
  }
52
52
  truncate() {
53
53
  let content = this.textView();
54
- while ((this.elementRef.nativeElement.scrollHeight - 2) > this.elementRef.nativeElement.offsetHeight) { // them -2 fix loi tren windows https://admin-cv.mobio.vn/issues/48107
54
+ while (this.elementRef.nativeElement.scrollHeight - 2 > this.elementRef.nativeElement.offsetHeight) {
55
+ // them -2 fix loi tren windows https://admin-cv.mobio.vn/issues/48107
55
56
  if (!content) {
56
57
  return;
57
58
  }
58
59
  content = content.substring(0, content.length - 3);
59
- (this.elementRef.nativeElement)[this.methodDisplay()] = this.ignoreThreeDots() ? content : `${content}...`;
60
+ this.elementRef.nativeElement[this.methodDisplay()] = this.ignoreThreeDots() ? content : `${content}...`;
60
61
  }
61
62
  if (content !== this.textView()) {
62
63
  this.outContentSub.emit(this.ignoreThreeDots() ? content : `${content}...`);
@@ -73,7 +74,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
73
74
  args: [{
74
75
  // eslint-disable-next-line @angular-eslint/directive-selector
75
76
  selector: '[LibsUiComponentsLineClampDirective]',
76
- standalone: true
77
+ standalone: true,
77
78
  }]
78
79
  }], ctorParameters: () => [] });
79
80
 
@@ -85,26 +86,26 @@ class LibsUiComponentsLineClampComponent {
85
86
  contentDisplay = signal('');
86
87
  /** INPUT */
87
88
  content = input.required();
88
- lengthLimitDisplay = input(200, { transform: val => val || 200 });
89
+ lengthLimitDisplay = input(200, { transform: (val) => val || 200 });
89
90
  maxHeight = input.required(); // maxHeight = (line-height của text)*(số dòng mong muốn)
90
91
  ignoreShowButtonCollapseExpand = input();
91
92
  ignoreShowButtonCollapse = input();
92
93
  showTooltip = input();
93
- timeHidePopoverOnMouseout = input(50, { transform: val => val ?? 50 });
94
- maxWidthTooltip = input(250, { transform: val => val ?? 250 });
95
- maxHeightTooltip = input(150, { transform: val => val ?? 150 });
96
- zIndexPopover = input(1001, { transform: val => val ?? 1001 });
94
+ timeHidePopoverOnMouseout = input(50, { transform: (val) => val ?? 50 });
95
+ maxWidthTooltip = input(250, { transform: (val) => val ?? 250 });
96
+ maxHeightTooltip = input(150, { transform: (val) => val ?? 150 });
97
+ zIndexPopover = input(1001, { transform: (val) => val ?? 1001 });
97
98
  isInnerText = input(); // không cần escapeHTML content khi biến bằng true
98
- classClassLabelButtonCollapseExpand = input('libs-ui-font-h5r', { transform: val => val ?? 'libs-ui-font-h5r' });
99
- classClassIncludeButtonCollapseExpand = input('!p-0', { transform: val => val ?? '!p-0' });
100
- ignoreStopPropagationTooltipEvent = input(false, { transform: val => val ?? false });
101
- ngClassObject = input({ 'libs-ui-line-clamp-content libs-ui-font-h5r': true }, { transform: val => val || { 'libs-ui-line-clamp-content lib-ui-font-h5r': true } }); // object ngClass
102
- hasBackgroundGradient = input(false, { transform: val => val ?? false });
99
+ classClassLabelButtonCollapseExpand = input('libs-ui-font-h5r', { transform: (val) => val ?? 'libs-ui-font-h5r' });
100
+ classClassIncludeButtonCollapseExpand = input('!p-0', { transform: (val) => val ?? '!p-0' });
101
+ ignoreStopPropagationTooltipEvent = input(false, { transform: (val) => val ?? false });
102
+ ngClassObject = input({ 'libs-ui-line-clamp-content libs-ui-font-h5r': true }, { transform: (val) => val || { 'libs-ui-line-clamp-content lib-ui-font-h5r': true } }); // object ngClass
103
+ hasBackgroundGradient = input(false, { transform: (val) => val ?? false });
103
104
  labelButtonViewMore = input();
104
105
  labelButtonCollapse = input();
105
- directionTooltip = input('top', { transform: val => val ?? 'top' });
106
- useXssFilter = input(true, { transform: val => val ?? true });
107
- defaultIsCollapse = input(true, { transform: val => val ?? true });
106
+ directionTooltip = input('top', { transform: (val) => val ?? 'top' });
107
+ useXssFilter = input(true, { transform: (val) => val ?? true });
108
+ defaultIsCollapse = input(true, { transform: (val) => val ?? true });
108
109
  /** OUTPUT */
109
110
  outDisplayLineClamp = output();
110
111
  outAction = output();
@@ -122,11 +123,14 @@ class LibsUiComponentsLineClampComponent {
122
123
  });
123
124
  }
124
125
  async ngOnInit() {
125
- this.outFunctionControl.emit({
126
- refresh: this.refresh.bind(this)
127
- });
126
+ this.outFunctionControl.emit(this.FunctionsControl);
128
127
  }
129
128
  /** FUNCTIONS */
129
+ get FunctionsControl() {
130
+ return {
131
+ refresh: this.refresh.bind(this),
132
+ };
133
+ }
130
134
  async handlerContentSub(content) {
131
135
  if (this.content() !== content) {
132
136
  this.displayLineClamp.set(true);
@@ -168,18 +172,11 @@ class LibsUiComponentsLineClampComponent {
168
172
  this.displayLineClamp.set(false);
169
173
  }
170
174
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsLineClampComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
171
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsLineClampComponent, isStandalone: true, selector: "libs_ui-components-line_clamp", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, lengthLimitDisplay: { classPropertyName: "lengthLimitDisplay", publicName: "lengthLimitDisplay", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: true, transformFunction: null }, ignoreShowButtonCollapseExpand: { classPropertyName: "ignoreShowButtonCollapseExpand", publicName: "ignoreShowButtonCollapseExpand", isSignal: true, isRequired: false, transformFunction: null }, ignoreShowButtonCollapse: { classPropertyName: "ignoreShowButtonCollapse", publicName: "ignoreShowButtonCollapse", isSignal: true, isRequired: false, transformFunction: null }, showTooltip: { classPropertyName: "showTooltip", publicName: "showTooltip", isSignal: true, isRequired: false, transformFunction: null }, timeHidePopoverOnMouseout: { classPropertyName: "timeHidePopoverOnMouseout", publicName: "timeHidePopoverOnMouseout", isSignal: true, isRequired: false, transformFunction: null }, maxWidthTooltip: { classPropertyName: "maxWidthTooltip", publicName: "maxWidthTooltip", isSignal: true, isRequired: false, transformFunction: null }, maxHeightTooltip: { classPropertyName: "maxHeightTooltip", publicName: "maxHeightTooltip", isSignal: true, isRequired: false, transformFunction: null }, zIndexPopover: { classPropertyName: "zIndexPopover", publicName: "zIndexPopover", isSignal: true, isRequired: false, transformFunction: null }, isInnerText: { classPropertyName: "isInnerText", publicName: "isInnerText", isSignal: true, isRequired: false, transformFunction: null }, classClassLabelButtonCollapseExpand: { classPropertyName: "classClassLabelButtonCollapseExpand", publicName: "classClassLabelButtonCollapseExpand", isSignal: true, isRequired: false, transformFunction: null }, classClassIncludeButtonCollapseExpand: { classPropertyName: "classClassIncludeButtonCollapseExpand", publicName: "classClassIncludeButtonCollapseExpand", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationTooltipEvent: { classPropertyName: "ignoreStopPropagationTooltipEvent", publicName: "ignoreStopPropagationTooltipEvent", isSignal: true, isRequired: false, transformFunction: null }, ngClassObject: { classPropertyName: "ngClassObject", publicName: "ngClassObject", isSignal: true, isRequired: false, transformFunction: null }, hasBackgroundGradient: { classPropertyName: "hasBackgroundGradient", publicName: "hasBackgroundGradient", isSignal: true, isRequired: false, transformFunction: null }, labelButtonViewMore: { classPropertyName: "labelButtonViewMore", publicName: "labelButtonViewMore", isSignal: true, isRequired: false, transformFunction: null }, labelButtonCollapse: { classPropertyName: "labelButtonCollapse", publicName: "labelButtonCollapse", isSignal: true, isRequired: false, transformFunction: null }, directionTooltip: { classPropertyName: "directionTooltip", publicName: "directionTooltip", isSignal: true, isRequired: false, transformFunction: null }, useXssFilter: { classPropertyName: "useXssFilter", publicName: "useXssFilter", isSignal: true, isRequired: false, transformFunction: null }, defaultIsCollapse: { classPropertyName: "defaultIsCollapse", publicName: "defaultIsCollapse", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outDisplayLineClamp: "outDisplayLineClamp", outAction: "outAction", outClick: "outClick", outFunctionControl: "outFunctionControl" }, host: { listeners: { "window:resize": "resize($event)" } }, ngImport: i0, template: "@if (!displayLineClamp()) {\n @if (!isInnerText()) {\n <div LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerHTML\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerHtml]=\"(content() | translate | LibsUiPipesSecurityTrustPipe: 'html': useXssFilter()) | async\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\">\n </div>\n } @else {\n <div LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerText\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerText]=\"content() | translate\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\">\n </div>\n }\n}\n@else {\n <libs_ui-components-popover class=\"relative\"\n type=\"other\"\n [ignoreShowPopover]=\"!showTooltip()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationTooltipEvent()\"\n [config]=\"{\n timerDestroy:timeHidePopoverOnMouseout(),\n maxWidth:maxWidthTooltip() ,\n maxHeight:maxHeightTooltip(),\n direction:directionTooltip(),\n content: isInnerText() ? (this.content() | LibsUiPipesEscapeHtmlPipe) : this.content(),\n zIndex: zIndexPopover()\n }\"\n (outEvent)=\"handlerClick($event)\">\n @if (isCollapse() && hasBackgroundGradient()) {\n <div class=\"h-[40px] libs-ui-line-clamp-bg-gradient\"></div>\n }\n @if (!isInnerText()) {\n <div [ngClass]=\"ngClassObject()\"\n [innerHtml]=\"(contentDisplay() | translate | LibsUiPipesSecurityTrustPipe: 'html': useXssFilter()) | async\">\n </div>\n } @else {\n <div [ngClass]=\"ngClassObject()\"\n [innerText]=\"contentDisplay() | translate\">\n </div>\n }\n </libs_ui-components-popover>\n\n @if (!ignoreShowButtonCollapseExpand()) {\n @if (isCollapse()) {\n <libs_ui-components-buttons-button type=\"button-link-primary\"\n [label]=\"labelButtonViewMore() || 'i18n_view_more'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"viewMore($event)\" />\n } @else {\n @if (!ignoreShowButtonCollapse()) {\n <libs_ui-components-buttons-button type=\"button-link-primary\"\n [label]=\"labelButtonCollapse() || 'i18n_collapse'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"hiddenMore($event)\" />\n }\n }\n }\n}\n", styles: [".libs-ui-line-clamp-content{font-weight:400;text-align:start}.libs-ui-line-clamp-bg-gradient{opacity:.5;background:linear-gradient(180deg,#fff0,#fffffff2 51.56%,#fff);position:absolute;width:100%;bottom:0}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: LibsUiComponentsLineClampDirective, selector: "[LibsUiComponentsLineClampDirective]", inputs: ["lengthLimitDisplay", "methodDisplay", "content", "ignoreThreeDots"], outputs: ["outContentSub"] }, { kind: "pipe", type: LibsUiPipesSecurityTrustPipe, name: "LibsUiPipesSecurityTrustPipe" }, { kind: "pipe", type: LibsUiPipesEscapeHtmlPipe, name: "LibsUiPipesEscapeHtmlPipe" }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
175
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsLineClampComponent, isStandalone: true, selector: "libs_ui-components-line_clamp", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: true, transformFunction: null }, lengthLimitDisplay: { classPropertyName: "lengthLimitDisplay", publicName: "lengthLimitDisplay", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: true, transformFunction: null }, ignoreShowButtonCollapseExpand: { classPropertyName: "ignoreShowButtonCollapseExpand", publicName: "ignoreShowButtonCollapseExpand", isSignal: true, isRequired: false, transformFunction: null }, ignoreShowButtonCollapse: { classPropertyName: "ignoreShowButtonCollapse", publicName: "ignoreShowButtonCollapse", isSignal: true, isRequired: false, transformFunction: null }, showTooltip: { classPropertyName: "showTooltip", publicName: "showTooltip", isSignal: true, isRequired: false, transformFunction: null }, timeHidePopoverOnMouseout: { classPropertyName: "timeHidePopoverOnMouseout", publicName: "timeHidePopoverOnMouseout", isSignal: true, isRequired: false, transformFunction: null }, maxWidthTooltip: { classPropertyName: "maxWidthTooltip", publicName: "maxWidthTooltip", isSignal: true, isRequired: false, transformFunction: null }, maxHeightTooltip: { classPropertyName: "maxHeightTooltip", publicName: "maxHeightTooltip", isSignal: true, isRequired: false, transformFunction: null }, zIndexPopover: { classPropertyName: "zIndexPopover", publicName: "zIndexPopover", isSignal: true, isRequired: false, transformFunction: null }, isInnerText: { classPropertyName: "isInnerText", publicName: "isInnerText", isSignal: true, isRequired: false, transformFunction: null }, classClassLabelButtonCollapseExpand: { classPropertyName: "classClassLabelButtonCollapseExpand", publicName: "classClassLabelButtonCollapseExpand", isSignal: true, isRequired: false, transformFunction: null }, classClassIncludeButtonCollapseExpand: { classPropertyName: "classClassIncludeButtonCollapseExpand", publicName: "classClassIncludeButtonCollapseExpand", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationTooltipEvent: { classPropertyName: "ignoreStopPropagationTooltipEvent", publicName: "ignoreStopPropagationTooltipEvent", isSignal: true, isRequired: false, transformFunction: null }, ngClassObject: { classPropertyName: "ngClassObject", publicName: "ngClassObject", isSignal: true, isRequired: false, transformFunction: null }, hasBackgroundGradient: { classPropertyName: "hasBackgroundGradient", publicName: "hasBackgroundGradient", isSignal: true, isRequired: false, transformFunction: null }, labelButtonViewMore: { classPropertyName: "labelButtonViewMore", publicName: "labelButtonViewMore", isSignal: true, isRequired: false, transformFunction: null }, labelButtonCollapse: { classPropertyName: "labelButtonCollapse", publicName: "labelButtonCollapse", isSignal: true, isRequired: false, transformFunction: null }, directionTooltip: { classPropertyName: "directionTooltip", publicName: "directionTooltip", isSignal: true, isRequired: false, transformFunction: null }, useXssFilter: { classPropertyName: "useXssFilter", publicName: "useXssFilter", isSignal: true, isRequired: false, transformFunction: null }, defaultIsCollapse: { classPropertyName: "defaultIsCollapse", publicName: "defaultIsCollapse", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outDisplayLineClamp: "outDisplayLineClamp", outAction: "outAction", outClick: "outClick", outFunctionControl: "outFunctionControl" }, host: { listeners: { "window:resize": "resize($event)" } }, ngImport: i0, template: "@if (!displayLineClamp()) {\n @if (!isInnerText()) {\n <div\n LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerHTML\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerHtml]=\"content() | translate | LibsUiPipesSecurityTrustPipe: 'html' : useXssFilter() | async\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\"></div>\n } @else {\n <div\n LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerText\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerText]=\"content() | translate\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\"></div>\n }\n} @else {\n <libs_ui-components-popover\n class=\"relative\"\n type=\"other\"\n [ignoreShowPopover]=\"!showTooltip()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationTooltipEvent()\"\n [config]=\"{\n timerDestroy: timeHidePopoverOnMouseout(),\n maxWidth: maxWidthTooltip(),\n maxHeight: maxHeightTooltip(),\n direction: directionTooltip(),\n content: isInnerText() ? (this.content() | LibsUiPipesEscapeHtmlPipe) : this.content(),\n zIndex: zIndexPopover(),\n }\"\n (outEvent)=\"handlerClick($event)\">\n @if (isCollapse() && hasBackgroundGradient()) {\n <div class=\"h-[40px] libs-ui-line-clamp-bg-gradient\"></div>\n }\n @if (!isInnerText()) {\n <div\n [ngClass]=\"ngClassObject()\"\n [innerHtml]=\"contentDisplay() | translate | LibsUiPipesSecurityTrustPipe: 'html' : useXssFilter() | async\"></div>\n } @else {\n <div\n [ngClass]=\"ngClassObject()\"\n [innerText]=\"contentDisplay() | translate\"></div>\n }\n </libs_ui-components-popover>\n\n @if (!ignoreShowButtonCollapseExpand()) {\n @if (isCollapse()) {\n <libs_ui-components-buttons-button\n type=\"button-link-primary\"\n [label]=\"labelButtonViewMore() || 'i18n_view_more'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"viewMore($event)\" />\n } @else {\n @if (!ignoreShowButtonCollapse()) {\n <libs_ui-components-buttons-button\n type=\"button-link-primary\"\n [label]=\"labelButtonCollapse() || 'i18n_collapse'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"hiddenMore($event)\" />\n }\n }\n }\n}\n", styles: [".libs-ui-line-clamp-content{font-weight:400;text-align:start}.libs-ui-line-clamp-bg-gradient{opacity:.5;background:linear-gradient(180deg,#fff0,#fffffff2 51.56%,#fff);position:absolute;width:100%;bottom:0}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: LibsUiComponentsLineClampDirective, selector: "[LibsUiComponentsLineClampDirective]", inputs: ["lengthLimitDisplay", "methodDisplay", "content", "ignoreThreeDots"], outputs: ["outContentSub"] }, { kind: "pipe", type: LibsUiPipesSecurityTrustPipe, name: "LibsUiPipesSecurityTrustPipe" }, { kind: "pipe", type: LibsUiPipesEscapeHtmlPipe, name: "LibsUiPipesEscapeHtmlPipe" }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
172
176
  }
173
177
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsLineClampComponent, decorators: [{
174
178
  type: Component,
175
- args: [{ selector: 'libs_ui-components-line_clamp', standalone: true, imports: [
176
- NgClass, TranslateModule, AsyncPipe,
177
- LibsUiComponentsLineClampDirective,
178
- LibsUiPipesSecurityTrustPipe,
179
- LibsUiPipesEscapeHtmlPipe,
180
- LibsUiComponentsPopoverComponent,
181
- LibsUiComponentsButtonsButtonComponent
182
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!displayLineClamp()) {\n @if (!isInnerText()) {\n <div LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerHTML\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerHtml]=\"(content() | translate | LibsUiPipesSecurityTrustPipe: 'html': useXssFilter()) | async\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\">\n </div>\n } @else {\n <div LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerText\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerText]=\"content() | translate\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\">\n </div>\n }\n}\n@else {\n <libs_ui-components-popover class=\"relative\"\n type=\"other\"\n [ignoreShowPopover]=\"!showTooltip()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationTooltipEvent()\"\n [config]=\"{\n timerDestroy:timeHidePopoverOnMouseout(),\n maxWidth:maxWidthTooltip() ,\n maxHeight:maxHeightTooltip(),\n direction:directionTooltip(),\n content: isInnerText() ? (this.content() | LibsUiPipesEscapeHtmlPipe) : this.content(),\n zIndex: zIndexPopover()\n }\"\n (outEvent)=\"handlerClick($event)\">\n @if (isCollapse() && hasBackgroundGradient()) {\n <div class=\"h-[40px] libs-ui-line-clamp-bg-gradient\"></div>\n }\n @if (!isInnerText()) {\n <div [ngClass]=\"ngClassObject()\"\n [innerHtml]=\"(contentDisplay() | translate | LibsUiPipesSecurityTrustPipe: 'html': useXssFilter()) | async\">\n </div>\n } @else {\n <div [ngClass]=\"ngClassObject()\"\n [innerText]=\"contentDisplay() | translate\">\n </div>\n }\n </libs_ui-components-popover>\n\n @if (!ignoreShowButtonCollapseExpand()) {\n @if (isCollapse()) {\n <libs_ui-components-buttons-button type=\"button-link-primary\"\n [label]=\"labelButtonViewMore() || 'i18n_view_more'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"viewMore($event)\" />\n } @else {\n @if (!ignoreShowButtonCollapse()) {\n <libs_ui-components-buttons-button type=\"button-link-primary\"\n [label]=\"labelButtonCollapse() || 'i18n_collapse'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"hiddenMore($event)\" />\n }\n }\n }\n}\n", styles: [".libs-ui-line-clamp-content{font-weight:400;text-align:start}.libs-ui-line-clamp-bg-gradient{opacity:.5;background:linear-gradient(180deg,#fff0,#fffffff2 51.56%,#fff);position:absolute;width:100%;bottom:0}\n"] }]
179
+ args: [{ selector: 'libs_ui-components-line_clamp', standalone: true, imports: [NgClass, TranslateModule, AsyncPipe, LibsUiComponentsLineClampDirective, LibsUiPipesSecurityTrustPipe, LibsUiPipesEscapeHtmlPipe, LibsUiComponentsPopoverComponent, LibsUiComponentsButtonsButtonComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!displayLineClamp()) {\n @if (!isInnerText()) {\n <div\n LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerHTML\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerHtml]=\"content() | translate | LibsUiPipesSecurityTrustPipe: 'html' : useXssFilter() | async\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\"></div>\n } @else {\n <div\n LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerText\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerText]=\"content() | translate\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\"></div>\n }\n} @else {\n <libs_ui-components-popover\n class=\"relative\"\n type=\"other\"\n [ignoreShowPopover]=\"!showTooltip()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationTooltipEvent()\"\n [config]=\"{\n timerDestroy: timeHidePopoverOnMouseout(),\n maxWidth: maxWidthTooltip(),\n maxHeight: maxHeightTooltip(),\n direction: directionTooltip(),\n content: isInnerText() ? (this.content() | LibsUiPipesEscapeHtmlPipe) : this.content(),\n zIndex: zIndexPopover(),\n }\"\n (outEvent)=\"handlerClick($event)\">\n @if (isCollapse() && hasBackgroundGradient()) {\n <div class=\"h-[40px] libs-ui-line-clamp-bg-gradient\"></div>\n }\n @if (!isInnerText()) {\n <div\n [ngClass]=\"ngClassObject()\"\n [innerHtml]=\"contentDisplay() | translate | LibsUiPipesSecurityTrustPipe: 'html' : useXssFilter() | async\"></div>\n } @else {\n <div\n [ngClass]=\"ngClassObject()\"\n [innerText]=\"contentDisplay() | translate\"></div>\n }\n </libs_ui-components-popover>\n\n @if (!ignoreShowButtonCollapseExpand()) {\n @if (isCollapse()) {\n <libs_ui-components-buttons-button\n type=\"button-link-primary\"\n [label]=\"labelButtonViewMore() || 'i18n_view_more'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"viewMore($event)\" />\n } @else {\n @if (!ignoreShowButtonCollapse()) {\n <libs_ui-components-buttons-button\n type=\"button-link-primary\"\n [label]=\"labelButtonCollapse() || 'i18n_collapse'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"hiddenMore($event)\" />\n }\n }\n }\n}\n", styles: [".libs-ui-line-clamp-content{font-weight:400;text-align:start}.libs-ui-line-clamp-bg-gradient{opacity:.5;background:linear-gradient(180deg,#fff0,#fffffff2 51.56%,#fff);position:absolute;width:100%;bottom:0}\n"] }]
183
180
  }], ctorParameters: () => [], propDecorators: { resize: [{
184
181
  type: HostListener,
185
182
  args: ['window:resize', ['$event']]
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-line-clamp.mjs","sources":["../../../../../libs-ui/components/line-clamp/src/line-clamp.directive.ts","../../../../../libs-ui/components/line-clamp/src/line-clamp.component.ts","../../../../../libs-ui/components/line-clamp/src/line-clamp.component.html","../../../../../libs-ui/components/line-clamp/src/libs-ui-components-line-clamp.ts"],"sourcesContent":["import { Directive, effect, ElementRef, inject, input, OnDestroy, output, signal, untracked } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsLineClampDirective]',\n standalone: true\n})\nexport class LibsUiComponentsLineClampDirective implements OnDestroy {\n\n /** PROPERTY */\n private timeInterval = signal<number | undefined>(undefined);\n private textView = signal<string>('');\n\n /** INPUT */\n readonly lengthLimitDisplay = input.required<number>();\n readonly methodDisplay = input.required<string>();\n readonly content = input.required<string>();\n readonly ignoreThreeDots = input<boolean>();\n\n /** OUTPUT */\n readonly outContentSub = output<string>();\n\n /** INJECT */\n private readonly elementRef = inject(ElementRef);\n\n constructor() {\n effect(() => {\n if (!this.content() || !this.methodDisplay() || !this.lengthLimitDisplay()) {\n return;\n }\n untracked(() => {\n this.textView.set(this.content());\n if (this.textView().length > this.lengthLimitDisplay()) {\n this.textView.update(val => val.substring(0, this.lengthLimitDisplay()));\n }\n\n if (!this.textView()) {\n return;\n }\n this.process();\n this.timeInterval.set(setInterval(() => {\n this.process();\n }, 250));\n })\n });\n }\n\n /** FUNCTIONS */\n\n private process() {\n if (this.elementRef && this.elementRef.nativeElement[this.methodDisplay()]) {\n clearInterval(this.timeInterval());\n this.truncate();\n }\n }\n\n private truncate() {\n let content = this.textView();\n while ((this.elementRef.nativeElement.scrollHeight - 2) > this.elementRef.nativeElement.offsetHeight) { // them -2 fix loi tren windows https://admin-cv.mobio.vn/issues/48107\n if (!content) {\n return;\n }\n content = content.substring(0, content.length - 3);\n (this.elementRef.nativeElement)[this.methodDisplay()] = this.ignoreThreeDots() ? content : `${content}...`;\n }\n if (content !== this.textView()) {\n this.outContentSub.emit(this.ignoreThreeDots() ? content : `${content}...`);\n }\n }\n ngOnDestroy() {\n clearInterval(this.timeInterval());\n }\n}\n","import { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostListener, OnDestroy, OnInit, effect, input, output, signal, untracked } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsPopoverComponent, TYPE_POPOVER_DIRECTION, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\nimport { LibsUiPipesEscapeHtmlPipe } from '@libs-ui/pipes-escape-html';\nimport { LibsUiPipesSecurityTrustPipe } from '@libs-ui/pipes-security-trust';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ILineClampFunctionControlEvent } from './interfaces';\nimport { LibsUiComponentsLineClampDirective } from './line-clamp.directive';\nimport { TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport { isNil } from '@libs-ui/utils';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-line_clamp',\n templateUrl: './line-clamp.component.html',\n styleUrls: ['./line-clamp.component.scss'],\n standalone: true,\n imports: [\n NgClass, TranslateModule, AsyncPipe,\n LibsUiComponentsLineClampDirective,\n LibsUiPipesSecurityTrustPipe,\n LibsUiPipesEscapeHtmlPipe,\n LibsUiComponentsPopoverComponent,\n LibsUiComponentsButtonsButtonComponent\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LibsUiComponentsLineClampComponent implements OnInit, OnDestroy {\n /** PROPERTY */\n protected displayLineClamp = signal<boolean>(false);\n protected isCollapse = signal<boolean>(false)\n protected contentClamp = signal<string>('');\n protected contentDisplay = signal<string>('');\n\n /** INPUT */\n readonly content = input.required<string>();\n readonly lengthLimitDisplay = input<number, number | undefined>(200, { transform: val => val || 200 });\n readonly maxHeight = input.required<number>(); // maxHeight = (line-height của text)*(số dòng mong muốn)\n readonly ignoreShowButtonCollapseExpand = input<boolean>();\n readonly ignoreShowButtonCollapse = input<boolean>();\n readonly showTooltip = input<boolean>();\n readonly timeHidePopoverOnMouseout = input<number, number | undefined>(50, { transform: val => val ?? 50 });\n readonly maxWidthTooltip = input<number, number | undefined>(250, { transform: val => val ?? 250 });\n readonly maxHeightTooltip = input<number, number | undefined>(150, { transform: val => val ?? 150 });\n readonly zIndexPopover = input<number, number | undefined>(1001, { transform: val => val ?? 1001 });\n readonly isInnerText = input<boolean>(); // không cần escapeHTML content khi biến bằng true\n readonly classClassLabelButtonCollapseExpand = input<string, string | undefined>('libs-ui-font-h5r', { transform: val => val ?? 'libs-ui-font-h5r' });\n readonly classClassIncludeButtonCollapseExpand = input<string, string | undefined>('!p-0', { transform: val => val ?? '!p-0' });\n readonly ignoreStopPropagationTooltipEvent = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly ngClassObject = input<TYPE_OBJECT, TYPE_OBJECT | undefined>({ 'libs-ui-line-clamp-content libs-ui-font-h5r': true }, { transform: val => val || { 'libs-ui-line-clamp-content lib-ui-font-h5r': true } }); // object ngClass\n readonly hasBackgroundGradient = input<boolean, boolean | undefined>(false, { transform: val => val ?? false });\n readonly labelButtonViewMore = input<string>();\n readonly labelButtonCollapse = input<string>();\n readonly directionTooltip = input<TYPE_POPOVER_DIRECTION, TYPE_POPOVER_DIRECTION | undefined>('top', { transform: val => val ?? 'top' });\n readonly useXssFilter = input<boolean, boolean | undefined>(true, { transform: val => val ?? true });\n readonly defaultIsCollapse = input<boolean, boolean | undefined>(true, { transform: val => val ?? true });\n\n /** OUTPUT */\n protected readonly outDisplayLineClamp = output<boolean>();\n protected readonly outAction = output<string>();\n protected readonly outClick = output<Event | TYPE_POPOVER_EVENT>();\n protected readonly outFunctionControl = output<ILineClampFunctionControlEvent>();\n\n constructor() {\n effect(() => {\n if (!isNil(this.content())) {\n untracked(() => {\n this.contentDisplay.set('');\n this.displayLineClamp.set(false);\n this.isCollapse.set(false);\n })\n }\n });\n }\n\n async ngOnInit() {\n this.outFunctionControl.emit({\n refresh: this.refresh.bind(this)\n });\n }\n\n /** FUNCTIONS */\n\n protected async handlerContentSub(content: string) {\n if (this.content() !== content) {\n this.displayLineClamp.set(true);\n this.isCollapse.set(this.defaultIsCollapse());\n this.contentClamp.set(content);\n this.contentDisplay.set(this.isCollapse() ? content : this.content());\n this.outDisplayLineClamp.emit(this.isCollapse());\n }\n }\n\n protected async viewMore(e: Event) {\n e.stopPropagation();\n this.isCollapse.set(false);\n this.contentDisplay.set(this.content());\n e.preventDefault();\n this.outAction.emit('view-more');\n }\n\n protected async hiddenMore(e: Event) {\n e.stopPropagation();\n this.isCollapse.set(true);\n this.contentDisplay.set(this.contentClamp());\n e.preventDefault();\n this.outAction.emit('hidden-more');\n }\n\n\n @HostListener('window:resize', ['$event'])\n protected async resize() {\n this.refresh();\n }\n\n protected async refresh() {\n this.contentDisplay.set(this.content());\n this.displayLineClamp.set(false);\n this.isCollapse.set(false);\n }\n\n protected async handlerClick(event: Event | TYPE_POPOVER_EVENT) {\n if (typeof event === 'string' && event !== 'click') {\n return;\n }\n this.outClick.emit(event);\n }\n\n ngOnDestroy() {\n this.displayLineClamp.set(false);\n }\n}\n","@if (!displayLineClamp()) {\n @if (!isInnerText()) {\n <div LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerHTML\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerHtml]=\"(content() | translate | LibsUiPipesSecurityTrustPipe: 'html': useXssFilter()) | async\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\">\n </div>\n } @else {\n <div LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerText\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerText]=\"content() | translate\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\">\n </div>\n }\n}\n@else {\n <libs_ui-components-popover class=\"relative\"\n type=\"other\"\n [ignoreShowPopover]=\"!showTooltip()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationTooltipEvent()\"\n [config]=\"{\n timerDestroy:timeHidePopoverOnMouseout(),\n maxWidth:maxWidthTooltip() ,\n maxHeight:maxHeightTooltip(),\n direction:directionTooltip(),\n content: isInnerText() ? (this.content() | LibsUiPipesEscapeHtmlPipe) : this.content(),\n zIndex: zIndexPopover()\n }\"\n (outEvent)=\"handlerClick($event)\">\n @if (isCollapse() && hasBackgroundGradient()) {\n <div class=\"h-[40px] libs-ui-line-clamp-bg-gradient\"></div>\n }\n @if (!isInnerText()) {\n <div [ngClass]=\"ngClassObject()\"\n [innerHtml]=\"(contentDisplay() | translate | LibsUiPipesSecurityTrustPipe: 'html': useXssFilter()) | async\">\n </div>\n } @else {\n <div [ngClass]=\"ngClassObject()\"\n [innerText]=\"contentDisplay() | translate\">\n </div>\n }\n </libs_ui-components-popover>\n\n @if (!ignoreShowButtonCollapseExpand()) {\n @if (isCollapse()) {\n <libs_ui-components-buttons-button type=\"button-link-primary\"\n [label]=\"labelButtonViewMore() || 'i18n_view_more'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"viewMore($event)\" />\n } @else {\n @if (!ignoreShowButtonCollapse()) {\n <libs_ui-components-buttons-button type=\"button-link-primary\"\n [label]=\"labelButtonCollapse() || 'i18n_collapse'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"hiddenMore($event)\" />\n }\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libs-ui-components-line-clamp.mjs","sources":["../../../../../libs-ui/components/line-clamp/src/line-clamp.directive.ts","../../../../../libs-ui/components/line-clamp/src/line-clamp.component.ts","../../../../../libs-ui/components/line-clamp/src/line-clamp.component.html","../../../../../libs-ui/components/line-clamp/src/libs-ui-components-line-clamp.ts"],"sourcesContent":["import { Directive, effect, ElementRef, inject, input, OnDestroy, output, signal, untracked } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsLineClampDirective]',\n standalone: true,\n})\nexport class LibsUiComponentsLineClampDirective implements OnDestroy {\n /** PROPERTY */\n private timeInterval = signal<number | undefined>(undefined);\n private textView = signal<string>('');\n\n /** INPUT */\n readonly lengthLimitDisplay = input.required<number>();\n readonly methodDisplay = input.required<string>();\n readonly content = input.required<string>();\n readonly ignoreThreeDots = input<boolean>();\n\n /** OUTPUT */\n readonly outContentSub = output<string>();\n\n /** INJECT */\n private readonly elementRef = inject(ElementRef);\n\n constructor() {\n effect(() => {\n if (!this.content() || !this.methodDisplay() || !this.lengthLimitDisplay()) {\n return;\n }\n untracked(() => {\n this.textView.set(this.content());\n if (this.textView().length > this.lengthLimitDisplay()) {\n this.textView.update((val) => val.substring(0, this.lengthLimitDisplay()));\n }\n\n if (!this.textView()) {\n return;\n }\n this.process();\n this.timeInterval.set(\n setInterval(() => {\n this.process();\n }, 250)\n );\n });\n });\n }\n\n /** FUNCTIONS */\n\n private process() {\n if (this.elementRef && this.elementRef.nativeElement[this.methodDisplay()]) {\n clearInterval(this.timeInterval());\n this.truncate();\n }\n }\n\n private truncate() {\n let content = this.textView();\n while (this.elementRef.nativeElement.scrollHeight - 2 > this.elementRef.nativeElement.offsetHeight) {\n // them -2 fix loi tren windows https://admin-cv.mobio.vn/issues/48107\n if (!content) {\n return;\n }\n content = content.substring(0, content.length - 3);\n this.elementRef.nativeElement[this.methodDisplay()] = this.ignoreThreeDots() ? content : `${content}...`;\n }\n if (content !== this.textView()) {\n this.outContentSub.emit(this.ignoreThreeDots() ? content : `${content}...`);\n }\n }\n ngOnDestroy() {\n clearInterval(this.timeInterval());\n }\n}\n","import { AsyncPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostListener, OnDestroy, OnInit, effect, input, output, signal, untracked } from '@angular/core';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { LibsUiComponentsPopoverComponent, TYPE_POPOVER_DIRECTION, TYPE_POPOVER_EVENT } from '@libs-ui/components-popover';\nimport { LibsUiPipesEscapeHtmlPipe } from '@libs-ui/pipes-escape-html';\nimport { LibsUiPipesSecurityTrustPipe } from '@libs-ui/pipes-security-trust';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ILineClampFunctionControlEvent } from './interfaces';\nimport { LibsUiComponentsLineClampDirective } from './line-clamp.directive';\nimport { TYPE_OBJECT } from '@libs-ui/interfaces-types';\nimport { isNil } from '@libs-ui/utils';\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-line_clamp',\n templateUrl: './line-clamp.component.html',\n styleUrls: ['./line-clamp.component.scss'],\n standalone: true,\n imports: [NgClass, TranslateModule, AsyncPipe, LibsUiComponentsLineClampDirective, LibsUiPipesSecurityTrustPipe, LibsUiPipesEscapeHtmlPipe, LibsUiComponentsPopoverComponent, LibsUiComponentsButtonsButtonComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LibsUiComponentsLineClampComponent implements OnInit, OnDestroy {\n /** PROPERTY */\n protected displayLineClamp = signal<boolean>(false);\n protected isCollapse = signal<boolean>(false);\n protected contentClamp = signal<string>('');\n protected contentDisplay = signal<string>('');\n\n /** INPUT */\n readonly content = input.required<string>();\n readonly lengthLimitDisplay = input<number, number | undefined>(200, { transform: (val) => val || 200 });\n readonly maxHeight = input.required<number>(); // maxHeight = (line-height của text)*(số dòng mong muốn)\n readonly ignoreShowButtonCollapseExpand = input<boolean>();\n readonly ignoreShowButtonCollapse = input<boolean>();\n readonly showTooltip = input<boolean>();\n readonly timeHidePopoverOnMouseout = input<number, number | undefined>(50, { transform: (val) => val ?? 50 });\n readonly maxWidthTooltip = input<number, number | undefined>(250, { transform: (val) => val ?? 250 });\n readonly maxHeightTooltip = input<number, number | undefined>(150, { transform: (val) => val ?? 150 });\n readonly zIndexPopover = input<number, number | undefined>(1001, { transform: (val) => val ?? 1001 });\n readonly isInnerText = input<boolean>(); // không cần escapeHTML content khi biến bằng true\n readonly classClassLabelButtonCollapseExpand = input<string, string | undefined>('libs-ui-font-h5r', { transform: (val) => val ?? 'libs-ui-font-h5r' });\n readonly classClassIncludeButtonCollapseExpand = input<string, string | undefined>('!p-0', { transform: (val) => val ?? '!p-0' });\n readonly ignoreStopPropagationTooltipEvent = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n readonly ngClassObject = input<TYPE_OBJECT, TYPE_OBJECT | undefined>({ 'libs-ui-line-clamp-content libs-ui-font-h5r': true }, { transform: (val) => val || { 'libs-ui-line-clamp-content lib-ui-font-h5r': true } }); // object ngClass\n readonly hasBackgroundGradient = input<boolean, boolean | undefined>(false, { transform: (val) => val ?? false });\n readonly labelButtonViewMore = input<string>();\n readonly labelButtonCollapse = input<string>();\n readonly directionTooltip = input<TYPE_POPOVER_DIRECTION, TYPE_POPOVER_DIRECTION | undefined>('top', { transform: (val) => val ?? 'top' });\n readonly useXssFilter = input<boolean, boolean | undefined>(true, { transform: (val) => val ?? true });\n readonly defaultIsCollapse = input<boolean, boolean | undefined>(true, { transform: (val) => val ?? true });\n\n /** OUTPUT */\n protected readonly outDisplayLineClamp = output<boolean>();\n protected readonly outAction = output<string>();\n protected readonly outClick = output<Event | TYPE_POPOVER_EVENT>();\n protected readonly outFunctionControl = output<ILineClampFunctionControlEvent>();\n\n constructor() {\n effect(() => {\n if (!isNil(this.content())) {\n untracked(() => {\n this.contentDisplay.set('');\n this.displayLineClamp.set(false);\n this.isCollapse.set(false);\n });\n }\n });\n }\n\n async ngOnInit() {\n this.outFunctionControl.emit(this.FunctionsControl);\n }\n\n /** FUNCTIONS */\n public get FunctionsControl(): ILineClampFunctionControlEvent {\n return {\n refresh: this.refresh.bind(this),\n };\n }\n\n protected async handlerContentSub(content: string) {\n if (this.content() !== content) {\n this.displayLineClamp.set(true);\n this.isCollapse.set(this.defaultIsCollapse());\n this.contentClamp.set(content);\n this.contentDisplay.set(this.isCollapse() ? content : this.content());\n this.outDisplayLineClamp.emit(this.isCollapse());\n }\n }\n\n protected async viewMore(e: Event) {\n e.stopPropagation();\n this.isCollapse.set(false);\n this.contentDisplay.set(this.content());\n e.preventDefault();\n this.outAction.emit('view-more');\n }\n\n protected async hiddenMore(e: Event) {\n e.stopPropagation();\n this.isCollapse.set(true);\n this.contentDisplay.set(this.contentClamp());\n e.preventDefault();\n this.outAction.emit('hidden-more');\n }\n\n @HostListener('window:resize', ['$event'])\n protected async resize() {\n this.refresh();\n }\n\n protected async refresh() {\n this.contentDisplay.set(this.content());\n this.displayLineClamp.set(false);\n this.isCollapse.set(false);\n }\n\n protected async handlerClick(event: Event | TYPE_POPOVER_EVENT) {\n if (typeof event === 'string' && event !== 'click') {\n return;\n }\n this.outClick.emit(event);\n }\n\n ngOnDestroy() {\n this.displayLineClamp.set(false);\n }\n}\n","@if (!displayLineClamp()) {\n @if (!isInnerText()) {\n <div\n LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerHTML\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerHtml]=\"content() | translate | LibsUiPipesSecurityTrustPipe: 'html' : useXssFilter() | async\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\"></div>\n } @else {\n <div\n LibsUiComponentsLineClampDirective\n [lengthLimitDisplay]=\"lengthLimitDisplay()\"\n [ignoreThreeDots]=\"hasBackgroundGradient()\"\n methodDisplay=\"innerText\"\n class=\"overflow-hidden\"\n [content]=\"content()\"\n [ngClass]=\"ngClassObject()\"\n [style.maxHeight.px]=\"maxHeight()\"\n [innerText]=\"content() | translate\"\n (click)=\"handlerClick($event)\"\n (outContentSub)=\"handlerContentSub($event)\"></div>\n }\n} @else {\n <libs_ui-components-popover\n class=\"relative\"\n type=\"other\"\n [ignoreShowPopover]=\"!showTooltip()\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationTooltipEvent()\"\n [config]=\"{\n timerDestroy: timeHidePopoverOnMouseout(),\n maxWidth: maxWidthTooltip(),\n maxHeight: maxHeightTooltip(),\n direction: directionTooltip(),\n content: isInnerText() ? (this.content() | LibsUiPipesEscapeHtmlPipe) : this.content(),\n zIndex: zIndexPopover(),\n }\"\n (outEvent)=\"handlerClick($event)\">\n @if (isCollapse() && hasBackgroundGradient()) {\n <div class=\"h-[40px] libs-ui-line-clamp-bg-gradient\"></div>\n }\n @if (!isInnerText()) {\n <div\n [ngClass]=\"ngClassObject()\"\n [innerHtml]=\"contentDisplay() | translate | LibsUiPipesSecurityTrustPipe: 'html' : useXssFilter() | async\"></div>\n } @else {\n <div\n [ngClass]=\"ngClassObject()\"\n [innerText]=\"contentDisplay() | translate\"></div>\n }\n </libs_ui-components-popover>\n\n @if (!ignoreShowButtonCollapseExpand()) {\n @if (isCollapse()) {\n <libs_ui-components-buttons-button\n type=\"button-link-primary\"\n [label]=\"labelButtonViewMore() || 'i18n_view_more'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"viewMore($event)\" />\n } @else {\n @if (!ignoreShowButtonCollapse()) {\n <libs_ui-components-buttons-button\n type=\"button-link-primary\"\n [label]=\"labelButtonCollapse() || 'i18n_collapse'\"\n [classInclude]=\"classClassIncludeButtonCollapseExpand()\"\n [classLabel]=\"classClassLabelButtonCollapseExpand()\"\n (outClick)=\"hiddenMore($event)\" />\n }\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { TYPE_OBJECT } from "@libs-ui/interfaces-types";
1
+ import { TYPE_OBJECT } from '@libs-ui/interfaces-types';
2
2
  export interface ILineClampConfig {
3
3
  maxHeight?: number;
4
4
  class?: string;
@@ -39,6 +39,7 @@ export declare class LibsUiComponentsLineClampComponent implements OnInit, OnDes
39
39
  constructor();
40
40
  ngOnInit(): Promise<void>;
41
41
  /** FUNCTIONS */
42
+ get FunctionsControl(): ILineClampFunctionControlEvent;
42
43
  protected handlerContentSub(content: string): Promise<void>;
43
44
  protected viewMore(e: Event): Promise<void>;
44
45
  protected hiddenMore(e: Event): Promise<void>;
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@libs-ui/components-line-clamp",
3
- "version": "0.2.306",
3
+ "version": "0.2.308-0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18.0.0",
6
6
  "@angular/core": ">=18.0.0",
7
- "@libs-ui/interfaces-types": "0.2.306",
8
- "@libs-ui/components-buttons-button": "0.2.306",
9
- "@libs-ui/components-popover": "0.2.306",
10
- "@libs-ui/pipes-escape-html": "0.2.306",
11
- "@libs-ui/pipes-security-trust": "0.2.306",
7
+ "@libs-ui/interfaces-types": "0.2.308-0",
8
+ "@libs-ui/components-buttons-button": "0.2.308-0",
9
+ "@libs-ui/components-popover": "0.2.308-0",
10
+ "@libs-ui/pipes-escape-html": "0.2.308-0",
11
+ "@libs-ui/pipes-security-trust": "0.2.308-0",
12
12
  "@ngx-translate/core": "^15.0.0",
13
- "@libs-ui/utils": "0.2.306"
13
+ "@libs-ui/utils": "0.2.308-0"
14
14
  },
15
15
  "sideEffects": false,
16
16
  "module": "fesm2022/libs-ui-components-line-clamp.mjs",