@patter/ngx-components 19.0.2 → 19.0.3

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.
@@ -8,13 +8,14 @@ import * as i1$2 from '@angular/forms';
8
8
  import { FormsModule, ReactiveFormsModule, NG_VALUE_ACCESSOR, FormBuilder } from '@angular/forms';
9
9
  import { Subject, debounceTime, distinctUntilChanged, switchMap, of, filter, startWith, map, timer } from 'rxjs';
10
10
  import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
11
+ import { take } from 'rxjs/operators';
11
12
 
12
13
  class PtrMenuComponent {
13
14
  menuItems = [];
14
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: PtrMenuComponent, isStandalone: true, selector: "ptr-menu", inputs: { menuItems: "menuItems" }, ngImport: i0, template: "<nav class=\"ptr-menu\">\n <ul class=\"menu\">\n @for (item of menuItems; track item.label) {\n <li class=\"menu-item\" routerLinkActive=\"current_page_item\" [routerLinkActiveOptions]=\"{exact: true}\">\n <a [routerLink]=\"item.link || '#'\">{{item.label}}</a>\n </li>\n }\n </ul>\n</nav>\n", styles: [".menu{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu>ul{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu--vertical{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu--vertical>ul{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu li.current-menu-item>a,.menu li.current_page_item>a,.menu li.current-menu-parent>a{opacity:1;font-weight:700}.menu a{transition:color .33s}.menu a:hover,.menu a:focus{text-decoration:none}.menu a{position:relative;text-decoration:none;padding:8px 0;font-family:var(--wp--preset--font-family--heading-font);letter-spacing:-.72px;color:var(--ptr-menu-color, var(--wp--preset--color--black))}.menu a:before,.menu a:after{content:\"\";position:absolute;bottom:2px;left:0;right:0;height:2px;background-color:var(--wp--preset--color--primary)}.menu a:before{opacity:0;transform:translateY(-8px);transition:transform 0s cubic-bezier(.175,.885,.32,1.275),opacity 0s}.menu a:after{opacity:0;transform:translateY(4px);transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:before,.menu a:hover:after,.menu a:focus:before,.menu a:focus:after{opacity:1;transform:translateY(0)}.menu a:hover:before,.menu a:focus:before{transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:after,.menu a:focus:after{transition:transform 0s .2s cubic-bezier(.175,.885,.32,1.275),opacity 0s .2s}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
15
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: PtrMenuComponent, isStandalone: true, selector: "ptr-menu", inputs: { menuItems: "menuItems" }, ngImport: i0, template: "<nav class=\"ptr-menu\">\n <ul class=\"menu\">\n @for (item of menuItems; track item.label) {\n <li class=\"menu-item\" routerLinkActive=\"current_page_item\" [routerLinkActiveOptions]=\"{exact: true}\">\n <a [routerLink]=\"item.link || '#'\">{{item.label}}</a>\n </li>\n }\n </ul>\n</nav>\n", styles: [".menu{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu>ul{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu--vertical{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu--vertical>ul{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu li.current-menu-item>a,.menu li.current_page_item>a,.menu li.current-menu-parent>a{opacity:1;font-weight:700}.menu a{transition:color .33s}.menu a:hover,.menu a:focus{text-decoration:none}.menu a{position:relative;text-decoration:none;padding:8px 0;font-family:var(--wp--preset--font-family--heading-font);letter-spacing:-.72px;color:var(--ptr-menu-color, var(--wp--preset--color--black))}.menu a:before,.menu a:after{content:\"\";position:absolute;bottom:2px;left:0;right:0;height:2px;background-color:var(--wp--preset--color--primary)}.menu a:before{opacity:0;transform:translateY(-8px);transition:transform 0s cubic-bezier(.175,.885,.32,1.275),opacity 0s}.menu a:after{opacity:0;transform:translateY(4px);transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:before,.menu a:hover:after,.menu a:focus:before,.menu a:focus:after{opacity:1;transform:translateY(0)}.menu a:hover:before,.menu a:focus:before{transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:after,.menu a:focus:after{transition:transform 0s .2s cubic-bezier(.175,.885,.32,1.275),opacity 0s .2s}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
16
17
  }
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrMenuComponent, decorators: [{
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrMenuComponent, decorators: [{
18
19
  type: Component,
19
20
  args: [{ selector: 'ptr-menu', imports: [RouterModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<nav class=\"ptr-menu\">\n <ul class=\"menu\">\n @for (item of menuItems; track item.label) {\n <li class=\"menu-item\" routerLinkActive=\"current_page_item\" [routerLinkActiveOptions]=\"{exact: true}\">\n <a [routerLink]=\"item.link || '#'\">{{item.label}}</a>\n </li>\n }\n </ul>\n</nav>\n", styles: [".menu{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu>ul{display:flex;flex-direction:row;gap:var(--wp--custom--content--gap, 40px);align-items:center}.menu--vertical{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu--vertical>ul{flex-direction:column;align-items:flex-start;gap:calc(var(--wp--custom--content--gap, 40px) / 2)}.menu li.current-menu-item>a,.menu li.current_page_item>a,.menu li.current-menu-parent>a{opacity:1;font-weight:700}.menu a{transition:color .33s}.menu a:hover,.menu a:focus{text-decoration:none}.menu a{position:relative;text-decoration:none;padding:8px 0;font-family:var(--wp--preset--font-family--heading-font);letter-spacing:-.72px;color:var(--ptr-menu-color, var(--wp--preset--color--black))}.menu a:before,.menu a:after{content:\"\";position:absolute;bottom:2px;left:0;right:0;height:2px;background-color:var(--wp--preset--color--primary)}.menu a:before{opacity:0;transform:translateY(-8px);transition:transform 0s cubic-bezier(.175,.885,.32,1.275),opacity 0s}.menu a:after{opacity:0;transform:translateY(4px);transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:before,.menu a:hover:after,.menu a:focus:before,.menu a:focus:after{opacity:1;transform:translateY(0)}.menu a:hover:before,.menu a:focus:before{transition:transform .2s cubic-bezier(.175,.885,.32,1.275),opacity .2s}.menu a:hover:after,.menu a:focus:after{transition:transform 0s .2s cubic-bezier(.175,.885,.32,1.275),opacity 0s .2s}\n"] }]
20
21
  }], propDecorators: { menuItems: [{
@@ -96,10 +97,10 @@ class PtrButtonComponent {
96
97
  }
97
98
  this.clicked.emit(event);
98
99
  }
99
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
100
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: PtrButtonComponent, isStandalone: true, selector: "ptr-button", inputs: { buttonStyle: "buttonStyle", buttonType: "buttonType", isDisabled: "isDisabled", hrefLink: "hrefLink", routerLinkValue: "routerLinkValue", extraClasses: "extraClasses", isSmallSize: "isSmallSize", isIconButton: "isIconButton", ariaLabel: "ariaLabel" }, outputs: { clicked: "clicked" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<ng-template #contentTpl>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n\r\n@if (isLink()) {\r\n<a [attr.href]=\"href()\" [routerLink]=\"routerLink()\" [class]=\"buttonClasses()\" [attr.disabled]=\"disabled() ? '' : null\"\r\n (click)=\"onClick($event)\" [attr.aria-label]=\"ariaLabel ?? null\">\r\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\r\n</a>\r\n} @else {\r\n<button [type]=\"type()\" [class]=\"buttonClasses()\" [disabled]=\"disabled()\" (click)=\"onClick($event)\"\r\n [attr.aria-label]=\"ariaLabel ?? null\">\r\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\r\n</button>\r\n}\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
100
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
101
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: PtrButtonComponent, isStandalone: true, selector: "ptr-button", inputs: { buttonStyle: "buttonStyle", buttonType: "buttonType", isDisabled: "isDisabled", hrefLink: "hrefLink", routerLinkValue: "routerLinkValue", extraClasses: "extraClasses", isSmallSize: "isSmallSize", isIconButton: "isIconButton", ariaLabel: "ariaLabel" }, outputs: { clicked: "clicked" }, host: { properties: { "class": "this.hostClasses" } }, ngImport: i0, template: "<ng-template #contentTpl>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n\r\n@if (isLink()) {\r\n<a [attr.href]=\"href()\" [routerLink]=\"routerLink()\" [class]=\"buttonClasses()\" [attr.disabled]=\"disabled() ? '' : null\"\r\n (click)=\"onClick($event)\" [attr.aria-label]=\"ariaLabel ?? null\">\r\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\r\n</a>\r\n} @else {\r\n<button [type]=\"type()\" [class]=\"buttonClasses()\" [disabled]=\"disabled()\" (click)=\"onClick($event)\"\r\n [attr.aria-label]=\"ariaLabel ?? null\">\r\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\r\n</button>\r\n}\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
101
102
  }
102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrButtonComponent, decorators: [{
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrButtonComponent, decorators: [{
103
104
  type: Component,
104
105
  args: [{ selector: 'ptr-button', imports: [CommonModule, RouterLink], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #contentTpl>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n\r\n@if (isLink()) {\r\n<a [attr.href]=\"href()\" [routerLink]=\"routerLink()\" [class]=\"buttonClasses()\" [attr.disabled]=\"disabled() ? '' : null\"\r\n (click)=\"onClick($event)\" [attr.aria-label]=\"ariaLabel ?? null\">\r\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\r\n</a>\r\n} @else {\r\n<button [type]=\"type()\" [class]=\"buttonClasses()\" [disabled]=\"disabled()\" (click)=\"onClick($event)\"\r\n [attr.aria-label]=\"ariaLabel ?? null\">\r\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\r\n</button>\r\n}\r\n" }]
105
106
  }], propDecorators: { hostClasses: [{
@@ -291,10 +292,10 @@ class PtrDialogListComponent {
291
292
  this.dialog.nativeElement.style.top = '';
292
293
  this.dialog.nativeElement.style.bottom = '';
293
294
  }
294
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrDialogListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
295
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: PtrDialogListComponent, isStandalone: true, selector: "ptr-dialog-list", inputs: { options: "options", showSearch: "showSearch", searchPlaceholder: "searchPlaceholder", dialogTitle: "dialogTitle" }, outputs: { selectionChange: "selectionChange", dialogClosed: "dialogClosed", searchTermChanged: "searchTermChanged" }, viewQueries: [{ propertyName: "dialog", first: true, predicate: ["dialog"], descendants: true }], ngImport: i0, template: "<dialog #dialog class=\"ptr-dialog-list\" (keydown)=\"onDialogKeyDown($event)\" [attr.aria-label]=\"'Options'\">\r\n\r\n @if(dialogTitle) {\r\n <p class=\"dialog-title\">{{dialogTitle}}</p>\r\n }\r\n\r\n @if (showSearch) {\r\n <div>\r\n <input #searchInput [ngModel]=\"searchTerm()\" (ngModelChange)=\"updateSearchTerm($event)\"\r\n [attr.aria-expanded]=\"isOpen()\" [attr.aria-owns]=\"listId\" (keydown)=\"onInputKeyDown($event)\"\r\n [attr.aria-autocomplete]=\"'list'\" role=\"combobox\" [attr.aria-controls]=\"listId\" [placeholder]=\"searchPlaceholder\"\r\n class=\"search-input\">\r\n </div>\r\n }\r\n\r\n <ul [attr.id]=\"listId\" role=\"listbox\" class=\"option-list\">\r\n @for (item of filteredOptions(); track item.label) {\r\n @if (item.type === 'option') {\r\n <li role=\"option\" [attr.id]=\"item.value\" [attr.aria-selected]=\"item.value === value()\"\r\n [class.selected]=\"item.value === value()\" [class.highlighted]=\"item === filteredOptions()[highlightedIndex()]\"\r\n (click)=\"selectOption(item.value!)\" (keydown)=\"onOptionKeyDown($event, item.value!)\"\r\n [attr.tabindex]=\"item === filteredOptions()[highlightedIndex()] ? 0 : -1\">\r\n {{ item.label }}\r\n </li>\r\n } @else {\r\n <li role=\"group\" [attr.aria-label]=\"item.label\">\r\n {{ item.label }}\r\n </li>\r\n @for (option of item.options!; track option.value) {\r\n <li role=\"option\" [attr.id]=\"option.value\" [attr.aria-selected]=\"option.value === value()\"\r\n [class.selected]=\"option.value === value()\" [class.highlighted]=\"option === filteredOptions()[highlightedIndex()]\"\r\n (click)=\"selectOption(option.value!)\" (keydown)=\"onOptionKeyDown($event, option.value!)\"\r\n [attr.tabindex]=\"option === filteredOptions()[highlightedIndex()] ? 0 : -1\">\r\n {{ option.label }}\r\n </li>\r\n }\r\n }\r\n }\r\n </ul>\r\n\r\n</dialog>\r\n", styles: [".ptr-dialog-list{margin:0;padding:0;border:1px solid var(--wp--custom--color--border);width:100%;max-height:350px;overflow-y:auto;z-index:5;border-radius:calc(var(--wp--custom--default-border-radius) / 2);border-top-left-radius:0;border-top-right-radius:0;scrollbar-width:thin}.ptr-dialog-list:focus{outline:none}input.search-input{padding:calc(var(--wp--custom--content--button-input-padding-y, 12px) / 1.5) var(--wp--custom--content--button-input-padding-x, 16px)!important;border:none!important;border-bottom:1px solid var(--wp--custom--color--border)!important;outline:0;font-size:var(--wp--preset--font-size--small, inherit);border-radius:0!important}.dialog-title{padding:5px 10px;border:none!important;border-bottom:1px solid var(--wp--custom--color--border)!important;font-size:var(--wp--preset--font-size--small, inherit);font-weight:500;margin:0}.option-list{list-style-type:none;padding:0;margin:0}li[role=option],li[role=group]{padding:5px 10px}li[role=group]{font-weight:700;margin-top:6px}li[role=option]{cursor:pointer;font-size:var(--wp--preset--font-size--small, inherit)}li[role=option]:hover,li[role=option].selected,li[role=option].highlighted{background-color:#f0f0f0}li[role=option]:focus-within{outline:2px solid var(--wp--custom--color--border)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
295
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrDialogListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
296
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: PtrDialogListComponent, isStandalone: true, selector: "ptr-dialog-list", inputs: { options: "options", showSearch: "showSearch", searchPlaceholder: "searchPlaceholder", dialogTitle: "dialogTitle" }, outputs: { selectionChange: "selectionChange", dialogClosed: "dialogClosed", searchTermChanged: "searchTermChanged" }, viewQueries: [{ propertyName: "dialog", first: true, predicate: ["dialog"], descendants: true }], ngImport: i0, template: "<dialog #dialog class=\"ptr-dialog-list\" (keydown)=\"onDialogKeyDown($event)\" [attr.aria-label]=\"'Options'\">\r\n\r\n @if(dialogTitle) {\r\n <p class=\"dialog-title\">{{dialogTitle}}</p>\r\n }\r\n\r\n @if (showSearch) {\r\n <div>\r\n <input #searchInput [ngModel]=\"searchTerm()\" (ngModelChange)=\"updateSearchTerm($event)\"\r\n [attr.aria-expanded]=\"isOpen()\" [attr.aria-owns]=\"listId\" (keydown)=\"onInputKeyDown($event)\"\r\n [attr.aria-autocomplete]=\"'list'\" role=\"combobox\" [attr.aria-controls]=\"listId\" [placeholder]=\"searchPlaceholder\"\r\n class=\"search-input\">\r\n </div>\r\n }\r\n\r\n <ul [attr.id]=\"listId\" role=\"listbox\" class=\"option-list\">\r\n @for (item of filteredOptions(); track item.label) {\r\n @if (item.type === 'option') {\r\n <li role=\"option\" [attr.id]=\"item.value\" [attr.aria-selected]=\"item.value === value()\"\r\n [class.selected]=\"item.value === value()\" [class.highlighted]=\"item === filteredOptions()[highlightedIndex()]\"\r\n (click)=\"selectOption(item.value!)\" (keydown)=\"onOptionKeyDown($event, item.value!)\"\r\n [attr.tabindex]=\"item === filteredOptions()[highlightedIndex()] ? 0 : -1\">\r\n {{ item.label }}\r\n </li>\r\n } @else {\r\n <li role=\"group\" [attr.aria-label]=\"item.label\">\r\n {{ item.label }}\r\n </li>\r\n @for (option of item.options!; track option.value) {\r\n <li role=\"option\" [attr.id]=\"option.value\" [attr.aria-selected]=\"option.value === value()\"\r\n [class.selected]=\"option.value === value()\" [class.highlighted]=\"option === filteredOptions()[highlightedIndex()]\"\r\n (click)=\"selectOption(option.value!)\" (keydown)=\"onOptionKeyDown($event, option.value!)\"\r\n [attr.tabindex]=\"option === filteredOptions()[highlightedIndex()] ? 0 : -1\">\r\n {{ option.label }}\r\n </li>\r\n }\r\n }\r\n }\r\n </ul>\r\n\r\n</dialog>\r\n", styles: [".ptr-dialog-list{margin:0;padding:0;border:1px solid var(--wp--custom--color--border);width:100%;max-height:350px;overflow-y:auto;z-index:5;border-radius:calc(var(--wp--custom--default-border-radius) / 2);border-top-left-radius:0;border-top-right-radius:0;scrollbar-width:thin}.ptr-dialog-list:focus{outline:none}input.search-input{padding:calc(var(--wp--custom--content--button-input-padding-y, 12px) / 1.5) var(--wp--custom--content--button-input-padding-x, 16px)!important;border:none!important;border-bottom:1px solid var(--wp--custom--color--border)!important;outline:0;font-size:var(--wp--preset--font-size--small, inherit);border-radius:0!important}.dialog-title{padding:5px 10px;border:none!important;border-bottom:1px solid var(--wp--custom--color--border)!important;font-size:var(--wp--preset--font-size--small, inherit);font-weight:500;margin:0}.option-list{list-style-type:none;padding:0;margin:0}li[role=option],li[role=group]{padding:5px 10px}li[role=group]{font-weight:700;margin-top:6px}li[role=option]{cursor:pointer;font-size:var(--wp--preset--font-size--small, inherit)}li[role=option]:hover,li[role=option].selected,li[role=option].highlighted{background-color:#f0f0f0}li[role=option]:focus-within{outline:2px solid var(--wp--custom--color--border)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
296
297
  }
297
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrDialogListComponent, decorators: [{
298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrDialogListComponent, decorators: [{
298
299
  type: Component,
299
300
  args: [{ selector: 'ptr-dialog-list', imports: [
300
301
  FormsModule
@@ -396,8 +397,8 @@ class PtrSelectComponent {
396
397
  }
397
398
  });
398
399
  }
399
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
400
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: PtrSelectComponent, isStandalone: true, selector: "ptr-select", inputs: { options: "options", showSearch: "showSearch", placeholder: "placeholder", label: "label", description: "description", labelPosition: "labelPosition" }, outputs: { selectionChange: "selectionChange" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, providers: [
400
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
401
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: PtrSelectComponent, isStandalone: true, selector: "ptr-select", inputs: { options: "options", showSearch: "showSearch", placeholder: "placeholder", label: "label", description: "description", labelPosition: "labelPosition" }, outputs: { selectionChange: "selectionChange" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, providers: [
401
402
  {
402
403
  provide: NG_VALUE_ACCESSOR,
403
404
  useExisting: forwardRef(() => PtrSelectComponent),
@@ -405,7 +406,7 @@ class PtrSelectComponent {
405
406
  }
406
407
  ], viewQueries: [{ propertyName: "selectButton", first: true, predicate: ["selectButton"], descendants: true }, { propertyName: "dialogList", first: true, predicate: ["dialogList"], descendants: true }], ngImport: i0, template: "<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\r\n@if(description){\r\n<div class=\"gfield_description\">{{description}}</div>\r\n}\r\n<div class=\"gfield--input-wrapper ginput_container\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\r\n\r\n <button #selectButton type=\"button\" class=\"select-button\" [attr.id]=\"inputId\" [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-expanded]=\"dialogList.isOpen()\" [attr.aria-labelledby]=\"labelId\" (click)=\"toggleDialog()\">\r\n <span [attr.id]=\"labelId\">@if (displayValue(); as dValue) { {{dValue}} } @else { {{effectivePlaceholder()}} }</span>\r\n </button>\r\n\r\n @if (labelPosition === 'inline') {\r\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\r\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\r\n <span>{{label}}</span>\r\n </legend>\r\n </fieldset>\r\n }\r\n\r\n <ptr-dialog-list #dialogList [options]=\"options\" (selectionChange)=\"onOptionSelected($event)\"\r\n [showSearch]=\"showSearch\" />\r\n\r\n</div>\r\n", styles: [".select-button{appearance:none;background-color:#fff;text-align:left;cursor:pointer;border:1px solid var(--wp--custom--color--border);width:100%;padding:var(--wp--custom--content--button-input-padding-y, 12px) var(--wp--custom--content--button-input-padding-x, 16px);margin:0;font-size:var(--wp--preset--font-size--small, inherit);font-family:Arial,Helvetica,sans-serif;z-index:5;color:#000;border-radius:calc(var(--wp--custom--default-border-radius) / 2);transition:border-color .3s,color .3s,background-color .3s;transition-timing-function:cubic-bezier(.2,1,.3,1);background-position:calc(100% - 4px) 50%;background-repeat:no-repeat;background-image:url(data:image/png;base64,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)}.select-button[aria-expanded=true]{border-bottom-left-radius:0;border-bottom-right-radius:0}.gfield--input-wrapper--label-inline .select-button{border-color:transparent;outline:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: PtrDialogListComponent, selector: "ptr-dialog-list", inputs: ["options", "showSearch", "searchPlaceholder", "dialogTitle"], outputs: ["selectionChange", "dialogClosed", "searchTermChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
407
408
  }
408
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrSelectComponent, decorators: [{
409
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrSelectComponent, decorators: [{
409
410
  type: Component,
410
411
  args: [{ selector: 'ptr-select', imports: [
411
412
  FormsModule,
@@ -525,8 +526,8 @@ class PtrInputComponent {
525
526
  this.input.nativeElement.disabled = isDisabled;
526
527
  }
527
528
  }
528
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
529
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: PtrInputComponent, isStandalone: true, selector: "ptr-input", inputs: { type: "type", label: "label", placeholder: "placeholder", autocomplete: "autocomplete", description: "description", dialogHelpText: "dialogHelpText", searchFn: "searchFn", labelPosition: "labelPosition" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, providers: [
529
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
530
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: PtrInputComponent, isStandalone: true, selector: "ptr-input", inputs: { type: "type", label: "label", placeholder: "placeholder", autocomplete: "autocomplete", description: "description", dialogHelpText: "dialogHelpText", searchFn: "searchFn", labelPosition: "labelPosition" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, providers: [
530
531
  {
531
532
  provide: NG_VALUE_ACCESSOR,
532
533
  useExisting: forwardRef(() => PtrInputComponent),
@@ -534,7 +535,7 @@ class PtrInputComponent {
534
535
  }
535
536
  ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "dialogList", first: true, predicate: ["dialogList"], descendants: true }], ngImport: i0, template: "<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\r\n@if(description){\r\n <div class=\"gfield_description\">{{description}}</div>\r\n}\r\n<div class=\"gfield--input-wrapper ginput_container\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\r\n\r\n @switch (type) {\r\n @case ('textarea') {\r\n <textarea #input [id]=\"inputId\" [attr.autocomplete]=\"autocomplete || null\" [attr.placeholder]=\"placeholder || null\"\r\n [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [rows]=\"3\"></textarea>\r\n }\r\n @default {\r\n <input #input [id]=\"inputId\" [type]=\"type\" [attr.autocomplete]=\"autocomplete || null\"\r\n [attr.placeholder]=\"placeholder || null\" [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" />\r\n }\r\n }\r\n\r\n @if (labelPosition === 'inline') {\r\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\r\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\r\n <span>{{label}}</span>\r\n </legend>\r\n </fieldset>\r\n }\r\n\r\n @if (searchFn) {\r\n <ptr-dialog-list #dialogList [options]=\"searchResultOptions()\" (selectionChange)=\"onOptionSelected($event)\"\r\n [dialogTitle]=\"dialogHelpText\" />\r\n }\r\n\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: PtrDialogListComponent, selector: "ptr-dialog-list", inputs: ["options", "showSearch", "searchPlaceholder", "dialogTitle"], outputs: ["selectionChange", "dialogClosed", "searchTermChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
536
537
  }
537
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrInputComponent, decorators: [{
538
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrInputComponent, decorators: [{
538
539
  type: Component,
539
540
  args: [{ selector: 'ptr-input', imports: [
540
541
  FormsModule,
@@ -642,10 +643,10 @@ class PtrFormComponent {
642
643
  }
643
644
  return false;
644
645
  }
645
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
646
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: PtrFormComponent, isStandalone: true, selector: "ptr-form", inputs: { config: "config", loading: "loading", error: "error" }, outputs: { formSubmit: "formSubmit", formGroupCreated: "formGroupCreated" }, ngImport: i0, template: "<div [class]=\"'gform_wrapper ' + config.formClass\">\r\n\r\n @if (error) {\r\n <div class=\"gform_validation_errors\">\r\n <h2 class=\"gform_submission_error hide_summary\">{{error}}</h2>\r\n </div>\r\n }\r\n\r\n @if (config.title) {\r\n <div class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n }\r\n\r\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <div class=\"gform_fields\">\r\n\r\n @for (field of config.fields; track field.name) {\r\n @if(isFieldVisible(field)) {\r\n\r\n <div class=\"gfield gfield--width-{{field.size}}\" [class.gform_hidden]=\"field.type === 'hidden'\"\r\n [class.gfield_error]=\"formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched\" [class.gfield--label-inline]=\"config.labelPosition === 'inline'\">\r\n\r\n @switch (field.type) {\r\n @case ('select') {\r\n <ptr-select [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [options]=\"field.options\"\r\n [placeholder]=\"getFieldPlaceholder(field)\" [labelPosition]=\"config.labelPosition\" />\r\n }\r\n @default {\r\n <ptr-input [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [type]=\"field.type\"\r\n [placeholder]=\"getFieldPlaceholder(field)\" [autocomplete]=\"field.autocomplete\" [searchFn]=\"field.searchFn\"\r\n [dialogHelpText]=\"field.dialogHelpText\" [labelPosition]=\"config.labelPosition\" />\r\n }\r\n }\r\n\r\n @if (formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n @if (formGroup.get(field.name)?.errors?.['required']) {\r\n This field is required.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['email']) {\r\n Please enter a valid email address.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['minlength']) {\r\n Minimum length is {{ formGroup.get(field.name)?.errors?.['minlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['maxlength']) {\r\n Maximum length is {{ formGroup.get(field.name)?.errors?.['maxlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['pattern']) {\r\n Please match the required format.\r\n }\r\n </div>\r\n }\r\n @if (field.validationMessages && formGroup.invalid && !formGroup.get(field.name)?.invalid &&\r\n formGroup.get(field.name)?.touched) {\r\n @for (error of formGroup.errors | keyvalue; track error) {\r\n @if (field.validationMessages[error.key]) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n {{ field.validationMessages[error.key] }}\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n @if(config.submitText){\r\n <div class=\"gform_footer\">\r\n <ptr-button buttonType=\"submit\" [isDisabled]=\"loading || !formGroup.valid\"\r\n [extraClasses]=\"config.submitFullWidth ? 'gform-button--width-full' : ''\">{{config.submitText}}</ptr-button>\r\n </div>\r\n }\r\n\r\n </form>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: PtrButtonComponent, selector: "ptr-button", inputs: ["buttonStyle", "buttonType", "isDisabled", "hrefLink", "routerLinkValue", "extraClasses", "isSmallSize", "isIconButton", "ariaLabel"], outputs: ["clicked"] }, { kind: "component", type: PtrSelectComponent, selector: "ptr-select", inputs: ["options", "showSearch", "placeholder", "label", "description", "labelPosition"], outputs: ["selectionChange"] }, { kind: "component", type: PtrInputComponent, selector: "ptr-input", inputs: ["type", "label", "placeholder", "autocomplete", "description", "dialogHelpText", "searchFn", "labelPosition"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
646
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
647
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: PtrFormComponent, isStandalone: true, selector: "ptr-form", inputs: { config: "config", loading: "loading", error: "error" }, outputs: { formSubmit: "formSubmit", formGroupCreated: "formGroupCreated" }, ngImport: i0, template: "<div [class]=\"'gform_wrapper ' + config.formClass\">\r\n\r\n @if (error) {\r\n <div class=\"gform_validation_errors\">\r\n <h2 class=\"gform_submission_error hide_summary\">{{error}}</h2>\r\n </div>\r\n }\r\n\r\n @if (config.title) {\r\n <div class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n }\r\n\r\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <div class=\"gform_fields\">\r\n\r\n @for (field of config.fields; track field.name) {\r\n @if(isFieldVisible(field)) {\r\n\r\n <div class=\"gfield gfield--width-{{field.size}}\" [class.gform_hidden]=\"field.type === 'hidden'\"\r\n [class.gfield_error]=\"formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched\" [class.gfield--label-inline]=\"config.labelPosition === 'inline'\">\r\n\r\n @switch (field.type) {\r\n @case ('select') {\r\n <ptr-select [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [options]=\"field.options\"\r\n [placeholder]=\"getFieldPlaceholder(field)\" [labelPosition]=\"config.labelPosition\" />\r\n }\r\n @default {\r\n <ptr-input [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [type]=\"field.type\"\r\n [placeholder]=\"getFieldPlaceholder(field)\" [autocomplete]=\"field.autocomplete\" [searchFn]=\"field.searchFn\"\r\n [dialogHelpText]=\"field.dialogHelpText\" [labelPosition]=\"config.labelPosition\" />\r\n }\r\n }\r\n\r\n @if (formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n @if (formGroup.get(field.name)?.errors?.['required']) {\r\n This field is required.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['email']) {\r\n Please enter a valid email address.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['minlength']) {\r\n Minimum length is {{ formGroup.get(field.name)?.errors?.['minlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['maxlength']) {\r\n Maximum length is {{ formGroup.get(field.name)?.errors?.['maxlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['pattern']) {\r\n Please match the required format.\r\n }\r\n </div>\r\n }\r\n @if (field.validationMessages && formGroup.invalid && !formGroup.get(field.name)?.invalid &&\r\n formGroup.get(field.name)?.touched) {\r\n @for (error of formGroup.errors | keyvalue; track error) {\r\n @if (field.validationMessages[error.key]) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n {{ field.validationMessages[error.key] }}\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n @if(config.submitText){\r\n <div class=\"gform_footer\">\r\n <ptr-button buttonType=\"submit\" [isDisabled]=\"loading || !formGroup.valid\"\r\n [extraClasses]=\"config.submitFullWidth ? 'gform-button--width-full' : ''\">{{config.submitText}}</ptr-button>\r\n </div>\r\n }\r\n\r\n </form>\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: PtrButtonComponent, selector: "ptr-button", inputs: ["buttonStyle", "buttonType", "isDisabled", "hrefLink", "routerLinkValue", "extraClasses", "isSmallSize", "isIconButton", "ariaLabel"], outputs: ["clicked"] }, { kind: "component", type: PtrSelectComponent, selector: "ptr-select", inputs: ["options", "showSearch", "placeholder", "label", "description", "labelPosition"], outputs: ["selectionChange"] }, { kind: "component", type: PtrInputComponent, selector: "ptr-input", inputs: ["type", "label", "placeholder", "autocomplete", "description", "dialogHelpText", "searchFn", "labelPosition"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
647
648
  }
648
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrFormComponent, decorators: [{
649
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrFormComponent, decorators: [{
649
650
  type: Component,
650
651
  args: [{ selector: 'ptr-form', imports: [
651
652
  CommonModule,
@@ -700,10 +701,10 @@ class PtrTitleComponent {
700
701
  }
701
702
  return route;
702
703
  }
703
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
704
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: PtrTitleComponent, isStandalone: true, selector: "ptr-title", inputs: { styleClass: "styleClass", wrapperStyleClass: "wrapperStyleClass", screenReaderOnly: "screenReaderOnly" }, ngImport: i0, template: "@if ((hideTitle$|async) === false) {\r\n @if(wrapperStyleClass) {\r\n <header [class]=\"wrapperStyleClass\" [class.screen-reader-text]=\"screenReaderOnly\">\r\n <h1 [class]=\"styleClass\">{{displayTitle$|async}}</h1>\r\n </header>\r\n } @else {\r\n <h1 [class]=\"styleClass\" [class.screen-reader-text]=\"screenReaderOnly\">{{displayTitle$|async}}</h1>\r\n }\r\n}\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
704
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
705
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: PtrTitleComponent, isStandalone: true, selector: "ptr-title", inputs: { styleClass: "styleClass", wrapperStyleClass: "wrapperStyleClass", screenReaderOnly: "screenReaderOnly" }, ngImport: i0, template: "@if ((hideTitle$|async) === false) {\r\n @if(wrapperStyleClass) {\r\n <header [class]=\"wrapperStyleClass\" [class.screen-reader-text]=\"screenReaderOnly\">\r\n <h1 [class]=\"styleClass\">{{displayTitle$|async}}</h1>\r\n </header>\r\n } @else {\r\n <h1 [class]=\"styleClass\" [class.screen-reader-text]=\"screenReaderOnly\">{{displayTitle$|async}}</h1>\r\n }\r\n}\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
705
706
  }
706
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrTitleComponent, decorators: [{
707
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrTitleComponent, decorators: [{
707
708
  type: Component,
708
709
  args: [{ selector: 'ptr-title', imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if ((hideTitle$|async) === false) {\r\n @if(wrapperStyleClass) {\r\n <header [class]=\"wrapperStyleClass\" [class.screen-reader-text]=\"screenReaderOnly\">\r\n <h1 [class]=\"styleClass\">{{displayTitle$|async}}</h1>\r\n </header>\r\n } @else {\r\n <h1 [class]=\"styleClass\" [class.screen-reader-text]=\"screenReaderOnly\">{{displayTitle$|async}}</h1>\r\n }\r\n}\r\n" }]
709
710
  }], propDecorators: { styleClass: [{
@@ -715,10 +716,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
715
716
  }] } });
716
717
 
717
718
  class PtrLoadingSpinnerComponent {
718
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrLoadingSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
719
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.8", type: PtrLoadingSpinnerComponent, isStandalone: true, selector: "ptr-loading-spinner", ngImport: i0, template: `<div class="ptr-progress-spinner"></div>`, isInline: true, styles: [":host{display:inline-block;line-height:0}.ptr-progress-spinner{display:inline-block;width:25px;height:25px;transform:scaleZ(1)}.ptr-progress-spinner:before{position:absolute;content:\"\";background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 40 40' style='enable-background:new 0 0 40 40;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23272e3e;%7D%0A%3C/style%3E%3Ccircle class='st0' cx='34' cy='6' r='6'/%3E%3Ccircle class='st0' cx='6' cy='6' r='6'/%3E%3Ccircle class='st0' cx='6' cy='34' r='6'/%3E%3Ccircle class='st0' cx='34' cy='34' r='6'/%3E%3C/svg%3E\");height:40px;width:40px;left:-8px;top:-8px;border:none;display:block;animation:loader-anim 1.5s 0s ease-in-out infinite}.ptr-progress-spinner:after{content:\"\";position:absolute;height:12px;width:12px;border:none;border-radius:12px;display:block;left:6px;top:6px;background-color:#272e3e;animation:loader-anim-dot 1.5s 0s ease-in-out infinite}@keyframes loader-anim{0%{transform:rotate(0) scale(0);opacity:.5}50%{transform:rotate(180deg) scale(1);opacity:1}to{transform:rotate(360deg) scale(0);opacity:.2}}@keyframes loader-anim-dot{0%{opacity:1}50%{opacity:0}to{opacity:1}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
719
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrLoadingSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
720
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.9", type: PtrLoadingSpinnerComponent, isStandalone: true, selector: "ptr-loading-spinner", ngImport: i0, template: `<div class="ptr-progress-spinner"></div>`, isInline: true, styles: [":host{display:inline-block;line-height:0}.ptr-progress-spinner{display:inline-block;width:25px;height:25px;transform:scaleZ(1)}.ptr-progress-spinner:before{position:absolute;content:\"\";background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 40 40' style='enable-background:new 0 0 40 40;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23272e3e;%7D%0A%3C/style%3E%3Ccircle class='st0' cx='34' cy='6' r='6'/%3E%3Ccircle class='st0' cx='6' cy='6' r='6'/%3E%3Ccircle class='st0' cx='6' cy='34' r='6'/%3E%3Ccircle class='st0' cx='34' cy='34' r='6'/%3E%3C/svg%3E\");height:40px;width:40px;left:-8px;top:-8px;border:none;display:block;animation:loader-anim 1.5s 0s ease-in-out infinite}.ptr-progress-spinner:after{content:\"\";position:absolute;height:12px;width:12px;border:none;border-radius:12px;display:block;left:6px;top:6px;background-color:#272e3e;animation:loader-anim-dot 1.5s 0s ease-in-out infinite}@keyframes loader-anim{0%{transform:rotate(0) scale(0);opacity:.5}50%{transform:rotate(180deg) scale(1);opacity:1}to{transform:rotate(360deg) scale(0);opacity:.2}}@keyframes loader-anim-dot{0%{opacity:1}50%{opacity:0}to{opacity:1}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
720
721
  }
721
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrLoadingSpinnerComponent, decorators: [{
722
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrLoadingSpinnerComponent, decorators: [{
722
723
  type: Component,
723
724
  args: [{ selector: 'ptr-loading-spinner', imports: [], template: `<div class="ptr-progress-spinner"></div>`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block;line-height:0}.ptr-progress-spinner{display:inline-block;width:25px;height:25px;transform:scaleZ(1)}.ptr-progress-spinner:before{position:absolute;content:\"\";background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 40 40' style='enable-background:new 0 0 40 40;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23272e3e;%7D%0A%3C/style%3E%3Ccircle class='st0' cx='34' cy='6' r='6'/%3E%3Ccircle class='st0' cx='6' cy='6' r='6'/%3E%3Ccircle class='st0' cx='6' cy='34' r='6'/%3E%3Ccircle class='st0' cx='34' cy='34' r='6'/%3E%3C/svg%3E\");height:40px;width:40px;left:-8px;top:-8px;border:none;display:block;animation:loader-anim 1.5s 0s ease-in-out infinite}.ptr-progress-spinner:after{content:\"\";position:absolute;height:12px;width:12px;border:none;border-radius:12px;display:block;left:6px;top:6px;background-color:#272e3e;animation:loader-anim-dot 1.5s 0s ease-in-out infinite}@keyframes loader-anim{0%{transform:rotate(0) scale(0);opacity:.5}50%{transform:rotate(180deg) scale(1);opacity:1}to{transform:rotate(360deg) scale(0);opacity:.2}}@keyframes loader-anim-dot{0%{opacity:1}50%{opacity:0}to{opacity:1}}\n"] }]
724
725
  }] });
@@ -787,10 +788,10 @@ class PtrLoadingSpinnerDirective {
787
788
  removeBlurEffect() {
788
789
  this.renderer.removeClass(this.targetEl.nativeElement, 'ptr-loading-blur');
789
790
  }
790
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrLoadingSpinnerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
791
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.8", type: PtrLoadingSpinnerDirective, isStandalone: true, selector: "[ptrLoadingSpinner]", inputs: { ptrLoadingSpinner: "ptrLoadingSpinner" }, host: { properties: { "style.position": "this.hostPosition" } }, ngImport: i0 });
791
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrLoadingSpinnerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
792
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.9", type: PtrLoadingSpinnerDirective, isStandalone: true, selector: "[ptrLoadingSpinner]", inputs: { ptrLoadingSpinner: "ptrLoadingSpinner" }, host: { properties: { "style.position": "this.hostPosition" } }, ngImport: i0 });
792
793
  }
793
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrLoadingSpinnerDirective, decorators: [{
794
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrLoadingSpinnerDirective, decorators: [{
794
795
  type: Directive,
795
796
  args: [{
796
797
  selector: '[ptrLoadingSpinner]',
@@ -888,10 +889,10 @@ class PtrLoadingService {
888
889
  updateTaskCount(taskCount, increment) {
889
890
  taskCount.update(count => increment ? count + 1 : Math.max(0, count - 1));
890
891
  }
891
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrLoadingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
892
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrLoadingService, providedIn: 'root' });
892
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrLoadingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
893
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrLoadingService, providedIn: 'root' });
893
894
  }
894
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrLoadingService, decorators: [{
895
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrLoadingService, decorators: [{
895
896
  type: Injectable,
896
897
  args: [{
897
898
  providedIn: 'root'
@@ -904,6 +905,9 @@ class PtrDialogComponent {
904
905
  message = '';
905
906
  buttonText = 'Confirm';
906
907
  buttonStyle = 'normal';
908
+ contentTemplate = null;
909
+ hasDefaultContent = true;
910
+ data = null;
907
911
  closed = new EventEmitter();
908
912
  ngAfterViewInit() {
909
913
  this.dialogElement.nativeElement.showModal();
@@ -912,20 +916,24 @@ class PtrDialogComponent {
912
916
  this.dialogElement.nativeElement.close();
913
917
  }
914
918
  confirm() {
915
- this.closed.emit(true);
919
+ this.closed.emit({ result: true, data: this.data });
916
920
  this.close();
917
921
  }
918
922
  onClose() {
919
- this.closed.emit(null);
923
+ this.closed.emit({ result: false, data: this.data });
920
924
  }
921
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
922
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.8", type: PtrDialogComponent, isStandalone: true, selector: "ptr-dialog", inputs: { title: "title", message: "message", buttonText: "buttonText", buttonStyle: "buttonStyle" }, outputs: { closed: "closed" }, viewQueries: [{ propertyName: "dialogElement", first: true, predicate: ["dialogElement"], descendants: true }], ngImport: i0, template: "<dialog #dialogElement class=\"ptr-modal\" (close)=\"onClose()\">\r\n <div class=\"ptr-modal__content\">\r\n\r\n <div class=\"ptr-modal__header\">\r\n <h2 class=\"ptr-modal__title\">{{title}}</h2>\r\n <button class=\"ptr-modal__close\" (click)=\"close()\" aria-label=\"Close dialog\">&times;</button>\r\n </div>\r\n\r\n <p>{{ message }}</p>\r\n <div class=\"ptr-modal__actions\">\r\n <ptr-button buttonStyle=\"secondary\" (clicked)=\"close()\" [isSmallSize]=\"true\">Cancel</ptr-button>\r\n <ptr-button class=\"ml-auto\" [buttonStyle]=\"buttonStyle\" (clicked)=\"confirm()\"\r\n [isSmallSize]=\"true\">{{buttonText}}</ptr-button>\r\n </div>\r\n\r\n </div>\r\n</dialog>\r\n", styles: [".ptr-modal{border-radius:min(var(--wp--custom--default-border-radius),6px);border:none;padding:.75rem}.ptr-modal__content{padding:.75rem;position:relative}.ptr-modal__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.ptr-modal__header h2{margin:0;font-size:calc(var(--wp--preset--font-size--medium) * 1.125)}.ptr-modal__close{background:none;border:none;font-size:1.5rem;cursor:pointer;padding:0;line-height:1.5rem;transform:translateY(-25%)}.ptr-modal__close:hover,.ptr-modal__close:focus{background-color:var(----wp--preset--color--light, rgba(51, 54, 70, .0392156863))}.ptr-modal__actions{margin-top:20px;text-align:right;display:flex;justify-content:space-between}dialog.ptr-modal{opacity:0;transition:all .2s}dialog.ptr-modal[open]{opacity:1}@starting-style{dialog.ptr-modal[open]{opacity:0}}dialog.ptr-modal::backdrop{opacity:0;background-color:#0000;transition:all .2s}dialog.ptr-modal[open]::backdrop{background-color:#25273499;opacity:1}@starting-style{dialog.ptr-modal[open]::backdrop{opacity:0;background-color:#0000}}\n"], dependencies: [{ kind: "component", type: PtrButtonComponent, selector: "ptr-button", inputs: ["buttonStyle", "buttonType", "isDisabled", "hrefLink", "routerLinkValue", "extraClasses", "isSmallSize", "isIconButton", "ariaLabel"], outputs: ["clicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
925
+ setData(data) {
926
+ this.data = data;
927
+ }
928
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
929
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: PtrDialogComponent, isStandalone: true, selector: "ptr-dialog", inputs: { title: "title", message: "message", buttonText: "buttonText", buttonStyle: "buttonStyle", contentTemplate: "contentTemplate", hasDefaultContent: "hasDefaultContent", data: "data" }, outputs: { closed: "closed" }, viewQueries: [{ propertyName: "dialogElement", first: true, predicate: ["dialogElement"], descendants: true }], ngImport: i0, template: "<dialog #dialogElement class=\"ptr-modal\" (close)=\"onClose()\">\n <div class=\"ptr-modal__content\">\n\n <div class=\"ptr-modal__header\">\n <h2 class=\"ptr-modal__title\">{{title}}</h2>\n <button class=\"ptr-modal__close\" (click)=\"close()\" aria-label=\"Close dialog\">&times;</button>\n </div>\n\n @if (hasDefaultContent && !contentTemplate) {\n <p>{{ message }}</p>\n }\n\n @if (contentTemplate) {\n <ng-container *ngTemplateOutlet=\"contentTemplate; context: {$implicit: data, dialogInstance: this}\"></ng-container>\n }\n\n <div class=\"ptr-modal__actions\">\n <ptr-button buttonStyle=\"secondary\" (clicked)=\"close()\" [isSmallSize]=\"true\">Cancel</ptr-button>\n <ptr-button class=\"ml-auto\" [buttonStyle]=\"buttonStyle\" (clicked)=\"confirm()\"\n [isSmallSize]=\"true\">{{buttonText}}</ptr-button>\n </div>\n\n </div>\n</dialog>\n", styles: [".ptr-modal{border-radius:min(var(--wp--custom--default-border-radius),6px);border:none;padding:.75rem}.ptr-modal__content{padding:.75rem;position:relative}.ptr-modal__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.ptr-modal__header h2{margin:0;font-size:calc(var(--wp--preset--font-size--medium) * 1.125)}.ptr-modal__close{background:none;border:none;font-size:1.5rem;cursor:pointer;padding:0;line-height:1.5rem;transform:translateY(-25%)}.ptr-modal__close:hover,.ptr-modal__close:focus{background-color:var(----wp--preset--color--light, rgba(51, 54, 70, .0392156863))}.ptr-modal__actions{margin-top:20px;text-align:right;display:flex;justify-content:space-between}dialog.ptr-modal{opacity:0;transition:all .2s}dialog.ptr-modal[open]{opacity:1}@starting-style{dialog.ptr-modal[open]{opacity:0}}dialog.ptr-modal::backdrop{opacity:0;background-color:#0000;transition:all .2s}dialog.ptr-modal[open]::backdrop{background-color:#25273499;opacity:1}@starting-style{dialog.ptr-modal[open]::backdrop{opacity:0;background-color:#0000}}\n"], dependencies: [{ kind: "component", type: PtrButtonComponent, selector: "ptr-button", inputs: ["buttonStyle", "buttonType", "isDisabled", "hrefLink", "routerLinkValue", "extraClasses", "isSmallSize", "isIconButton", "ariaLabel"], outputs: ["clicked"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
923
930
  }
924
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrDialogComponent, decorators: [{
931
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrDialogComponent, decorators: [{
925
932
  type: Component,
926
933
  args: [{ selector: 'ptr-dialog', imports: [
927
- PtrButtonComponent
928
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<dialog #dialogElement class=\"ptr-modal\" (close)=\"onClose()\">\r\n <div class=\"ptr-modal__content\">\r\n\r\n <div class=\"ptr-modal__header\">\r\n <h2 class=\"ptr-modal__title\">{{title}}</h2>\r\n <button class=\"ptr-modal__close\" (click)=\"close()\" aria-label=\"Close dialog\">&times;</button>\r\n </div>\r\n\r\n <p>{{ message }}</p>\r\n <div class=\"ptr-modal__actions\">\r\n <ptr-button buttonStyle=\"secondary\" (clicked)=\"close()\" [isSmallSize]=\"true\">Cancel</ptr-button>\r\n <ptr-button class=\"ml-auto\" [buttonStyle]=\"buttonStyle\" (clicked)=\"confirm()\"\r\n [isSmallSize]=\"true\">{{buttonText}}</ptr-button>\r\n </div>\r\n\r\n </div>\r\n</dialog>\r\n", styles: [".ptr-modal{border-radius:min(var(--wp--custom--default-border-radius),6px);border:none;padding:.75rem}.ptr-modal__content{padding:.75rem;position:relative}.ptr-modal__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.ptr-modal__header h2{margin:0;font-size:calc(var(--wp--preset--font-size--medium) * 1.125)}.ptr-modal__close{background:none;border:none;font-size:1.5rem;cursor:pointer;padding:0;line-height:1.5rem;transform:translateY(-25%)}.ptr-modal__close:hover,.ptr-modal__close:focus{background-color:var(----wp--preset--color--light, rgba(51, 54, 70, .0392156863))}.ptr-modal__actions{margin-top:20px;text-align:right;display:flex;justify-content:space-between}dialog.ptr-modal{opacity:0;transition:all .2s}dialog.ptr-modal[open]{opacity:1}@starting-style{dialog.ptr-modal[open]{opacity:0}}dialog.ptr-modal::backdrop{opacity:0;background-color:#0000;transition:all .2s}dialog.ptr-modal[open]::backdrop{background-color:#25273499;opacity:1}@starting-style{dialog.ptr-modal[open]::backdrop{opacity:0;background-color:#0000}}\n"] }]
934
+ PtrButtonComponent,
935
+ CommonModule
936
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<dialog #dialogElement class=\"ptr-modal\" (close)=\"onClose()\">\n <div class=\"ptr-modal__content\">\n\n <div class=\"ptr-modal__header\">\n <h2 class=\"ptr-modal__title\">{{title}}</h2>\n <button class=\"ptr-modal__close\" (click)=\"close()\" aria-label=\"Close dialog\">&times;</button>\n </div>\n\n @if (hasDefaultContent && !contentTemplate) {\n <p>{{ message }}</p>\n }\n\n @if (contentTemplate) {\n <ng-container *ngTemplateOutlet=\"contentTemplate; context: {$implicit: data, dialogInstance: this}\"></ng-container>\n }\n\n <div class=\"ptr-modal__actions\">\n <ptr-button buttonStyle=\"secondary\" (clicked)=\"close()\" [isSmallSize]=\"true\">Cancel</ptr-button>\n <ptr-button class=\"ml-auto\" [buttonStyle]=\"buttonStyle\" (clicked)=\"confirm()\"\n [isSmallSize]=\"true\">{{buttonText}}</ptr-button>\n </div>\n\n </div>\n</dialog>\n", styles: [".ptr-modal{border-radius:min(var(--wp--custom--default-border-radius),6px);border:none;padding:.75rem}.ptr-modal__content{padding:.75rem;position:relative}.ptr-modal__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.ptr-modal__header h2{margin:0;font-size:calc(var(--wp--preset--font-size--medium) * 1.125)}.ptr-modal__close{background:none;border:none;font-size:1.5rem;cursor:pointer;padding:0;line-height:1.5rem;transform:translateY(-25%)}.ptr-modal__close:hover,.ptr-modal__close:focus{background-color:var(----wp--preset--color--light, rgba(51, 54, 70, .0392156863))}.ptr-modal__actions{margin-top:20px;text-align:right;display:flex;justify-content:space-between}dialog.ptr-modal{opacity:0;transition:all .2s}dialog.ptr-modal[open]{opacity:1}@starting-style{dialog.ptr-modal[open]{opacity:0}}dialog.ptr-modal::backdrop{opacity:0;background-color:#0000;transition:all .2s}dialog.ptr-modal[open]::backdrop{background-color:#25273499;opacity:1}@starting-style{dialog.ptr-modal[open]::backdrop{opacity:0;background-color:#0000}}\n"] }]
929
937
  }], propDecorators: { dialogElement: [{
930
938
  type: ViewChild,
931
939
  args: ['dialogElement']
@@ -937,6 +945,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
937
945
  type: Input
938
946
  }], buttonStyle: [{
939
947
  type: Input
948
+ }], contentTemplate: [{
949
+ type: Input
950
+ }], hasDefaultContent: [{
951
+ type: Input
952
+ }], data: [{
953
+ type: Input
940
954
  }], closed: [{
941
955
  type: Output
942
956
  }] } });
@@ -954,14 +968,26 @@ class PtrDialogService {
954
968
  this.dialogComponentRef = createComponent(PtrDialogComponent, {
955
969
  environmentInjector: this.injector,
956
970
  });
971
+ if (!this.dialogComponentRef) {
972
+ throw new Error('Failed to create dialog component');
973
+ }
957
974
  const { instance } = this.dialogComponentRef;
958
975
  instance.title = options.title;
959
- instance.message = options.message;
976
+ instance.message = options.message || '';
960
977
  instance.buttonText = options.buttonText || 'Confirm';
961
978
  instance.buttonStyle = options.buttonStyle || 'normal';
962
- instance.closed.subscribe((result) => {
979
+ if (options.contentTemplate) {
980
+ instance.contentTemplate = options.contentTemplate;
981
+ instance.hasDefaultContent = !options.contentTemplate;
982
+ }
983
+ if (options.data !== undefined) {
984
+ instance.data = options.data;
985
+ }
986
+ instance.closed
987
+ .pipe(take(1))
988
+ .subscribe((result) => {
963
989
  this.removeDialog();
964
- dialogResult$.next(result ?? false);
990
+ dialogResult$.next(result);
965
991
  dialogResult$.complete();
966
992
  });
967
993
  document.body.appendChild(this.dialogComponentRef.location.nativeElement);
@@ -975,10 +1001,10 @@ class PtrDialogService {
975
1001
  this.dialogComponentRef = null;
976
1002
  }
977
1003
  }
978
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrDialogService, deps: [{ token: i0.ApplicationRef }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable });
979
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrDialogService, providedIn: 'root' });
1004
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrDialogService, deps: [{ token: i0.ApplicationRef }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable });
1005
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrDialogService, providedIn: 'root' });
980
1006
  }
981
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrDialogService, decorators: [{
1007
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrDialogService, decorators: [{
982
1008
  type: Injectable,
983
1009
  args: [{
984
1010
  providedIn: 'root'
@@ -1002,10 +1028,10 @@ class PtrTooltipComponent {
1002
1028
  this.tooltipDialog.nativeElement.close();
1003
1029
  }, 200); // Small delay to allow moving mouse to tooltip
1004
1030
  }
1005
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1006
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.8", type: PtrTooltipComponent, isStandalone: true, selector: "ptr-tooltip", inputs: { content: "content" }, viewQueries: [{ propertyName: "tooltipDialog", first: true, predicate: ["tooltipDialog"], descendants: true }], ngImport: i0, template: "<span (mouseenter)=\"showTooltip()\" (mouseleave)=\"hideTooltip()\" class=\"tooltip-trigger\">\r\n <ng-content></ng-content>\r\n</span>\r\n<dialog #tooltipDialog class=\"ptr-tooltip\">\r\n <div class=\"ptr-tooltip__content\">{{ content }}</div>\r\n</dialog>", styles: [":host{display:inline-block;position:relative}.tooltip-trigger{cursor:help}.ptr-tooltip{position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:none;border-radius:3px;padding:.5rem .75rem;background-color:#212121;border:0;color:#fff;font-size:.875rem;max-width:15.5rem;min-width:12.5rem;z-index:1000;margin:0 0 8px;box-shadow:0 3px 6px #00000029,0 3px 6px #0000003b}.ptr-tooltip:before{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #212121}.ptr-tooltip__content{white-space:pre-wrap;text-align:center;line-height:1.5}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1031
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1032
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.9", type: PtrTooltipComponent, isStandalone: true, selector: "ptr-tooltip", inputs: { content: "content" }, viewQueries: [{ propertyName: "tooltipDialog", first: true, predicate: ["tooltipDialog"], descendants: true }], ngImport: i0, template: "<span (mouseenter)=\"showTooltip()\" (mouseleave)=\"hideTooltip()\" class=\"tooltip-trigger\">\r\n <ng-content></ng-content>\r\n</span>\r\n<dialog #tooltipDialog class=\"ptr-tooltip\">\r\n <div class=\"ptr-tooltip__content\">{{ content }}</div>\r\n</dialog>", styles: [":host{display:inline-block;position:relative}.tooltip-trigger{cursor:help}.ptr-tooltip{position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:none;border-radius:3px;padding:.5rem .75rem;background-color:#212121;border:0;color:#fff;font-size:.875rem;max-width:15.5rem;min-width:12.5rem;z-index:1000;margin:0 0 8px;box-shadow:0 3px 6px #00000029,0 3px 6px #0000003b}.ptr-tooltip:before{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #212121}.ptr-tooltip__content{white-space:pre-wrap;text-align:center;line-height:1.5}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1007
1033
  }
1008
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrTooltipComponent, decorators: [{
1034
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrTooltipComponent, decorators: [{
1009
1035
  type: Component,
1010
1036
  args: [{ selector: 'ptr-tooltip', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span (mouseenter)=\"showTooltip()\" (mouseleave)=\"hideTooltip()\" class=\"tooltip-trigger\">\r\n <ng-content></ng-content>\r\n</span>\r\n<dialog #tooltipDialog class=\"ptr-tooltip\">\r\n <div class=\"ptr-tooltip__content\">{{ content }}</div>\r\n</dialog>", styles: [":host{display:inline-block;position:relative}.tooltip-trigger{cursor:help}.ptr-tooltip{position:absolute;bottom:100%;left:50%;transform:translate(-50%);border:none;border-radius:3px;padding:.5rem .75rem;background-color:#212121;border:0;color:#fff;font-size:.875rem;max-width:15.5rem;min-width:12.5rem;z-index:1000;margin:0 0 8px;box-shadow:0 3px 6px #00000029,0 3px 6px #0000003b}.ptr-tooltip:before{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #212121}.ptr-tooltip__content{white-space:pre-wrap;text-align:center;line-height:1.5}\n"] }]
1011
1037
  }], propDecorators: { content: [{
@@ -1059,10 +1085,10 @@ class PtrBreadcrumbsComponent {
1059
1085
  }
1060
1086
  return breadcrumbReturnInfo;
1061
1087
  }
1062
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrBreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1063
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: PtrBreadcrumbsComponent, isStandalone: true, selector: "ptr-breadcrumbs", inputs: { showFirstSeparator: "showFirstSeparator" }, ngImport: i0, template: "@if (breadcrumbs().length > 0) {\n <nav aria-label=\"breadcrumb\" class=\"breadcrumb-wrapper\">\n <ol class=\"breadcrumb\" [class.breadcrumb--show-first-separator]=\"showFirstSeparator\">\n @for (breadcrumb of breadcrumbs(); track breadcrumb.label; let last = $last) {\n <li class=\"breadcrumb-item\" [class.breadcrumb-item--active]=\"last\">\n @if (!last) {\n <a class=\"breadcrumb-item-label\" [routerLink]=\"breadcrumb.url\">{{ breadcrumb.label }}</a>\n }\n @if (last) {\n <span class=\"breadcrumb-item-label\">{{ breadcrumb.label }}</span>\n }\n </li>\n }\n </ol>\n </nav>\n}\n", styles: [".breadcrumb{--breadcrumb-item-color: #ababab;--breadcrumb-item-font-size: var(--wp--preset--font-size--large, 1.25rem);list-style:none;border-radius:.25rem;margin:0 0 20px;padding:0;display:flex;flex-wrap:wrap;gap:2px}.breadcrumb-item{display:inline-block;margin:0}.breadcrumb-item--active .breadcrumb-item-label{color:inherit;font-weight:700}.breadcrumb-item-label{text-decoration:none;padding:4px;display:inline-block;color:var(--breadcrumb-item-color);font-size:var(--breadcrumb-item-font-size);font-weight:500;border-bottom:2px solid transparent}.breadcrumb-item a{transition:border-bottom .25s,color .25s}.breadcrumb-item a:hover,.breadcrumb-item a:focus{border-bottom-color:var(--wp--preset--color--primary)}.breadcrumb-item:first-child .breadcrumb-item-label{padding-left:0}.breadcrumb-item+.breadcrumb-item .breadcrumb-item-label:before{content:\"/\";padding-right:8px}.breadcrumb.breadcrumb--show-first-separator .breadcrumb-item-label:before{content:\"/\";padding-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1088
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrBreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1089
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: PtrBreadcrumbsComponent, isStandalone: true, selector: "ptr-breadcrumbs", inputs: { showFirstSeparator: "showFirstSeparator" }, ngImport: i0, template: "@if (breadcrumbs().length > 0) {\n <nav aria-label=\"breadcrumb\" class=\"breadcrumb-wrapper\">\n <ol class=\"breadcrumb\" [class.breadcrumb--show-first-separator]=\"showFirstSeparator\">\n @for (breadcrumb of breadcrumbs(); track breadcrumb.label; let last = $last) {\n <li class=\"breadcrumb-item\" [class.breadcrumb-item--active]=\"last\">\n @if (!last) {\n <a class=\"breadcrumb-item-label\" [routerLink]=\"breadcrumb.url\">{{ breadcrumb.label }}</a>\n }\n @if (last) {\n <span class=\"breadcrumb-item-label\">{{ breadcrumb.label }}</span>\n }\n </li>\n }\n </ol>\n </nav>\n}\n", styles: [".breadcrumb{--breadcrumb-item-color: #ababab;--breadcrumb-item-font-size: var(--wp--preset--font-size--large, 1.25rem);list-style:none;border-radius:.25rem;margin:0 0 20px;padding:0;display:flex;flex-wrap:wrap;gap:2px}.breadcrumb-item{display:inline-block;margin:0}.breadcrumb-item--active .breadcrumb-item-label{color:inherit;font-weight:700}.breadcrumb-item-label{text-decoration:none;padding:4px;display:inline-block;color:var(--breadcrumb-item-color);font-size:var(--breadcrumb-item-font-size);font-weight:500;border-bottom:2px solid transparent}.breadcrumb-item a{transition:border-bottom .25s,color .25s}.breadcrumb-item a:hover,.breadcrumb-item a:focus{border-bottom-color:var(--wp--preset--color--primary)}.breadcrumb-item:first-child .breadcrumb-item-label{padding-left:0}.breadcrumb-item+.breadcrumb-item .breadcrumb-item-label:before{content:\"/\";padding-right:8px}.breadcrumb.breadcrumb--show-first-separator .breadcrumb-item-label:before{content:\"/\";padding-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1064
1090
  }
1065
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrBreadcrumbsComponent, decorators: [{
1091
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrBreadcrumbsComponent, decorators: [{
1066
1092
  type: Component,
1067
1093
  args: [{ selector: 'ptr-breadcrumbs', imports: [RouterModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (breadcrumbs().length > 0) {\n <nav aria-label=\"breadcrumb\" class=\"breadcrumb-wrapper\">\n <ol class=\"breadcrumb\" [class.breadcrumb--show-first-separator]=\"showFirstSeparator\">\n @for (breadcrumb of breadcrumbs(); track breadcrumb.label; let last = $last) {\n <li class=\"breadcrumb-item\" [class.breadcrumb-item--active]=\"last\">\n @if (!last) {\n <a class=\"breadcrumb-item-label\" [routerLink]=\"breadcrumb.url\">{{ breadcrumb.label }}</a>\n }\n @if (last) {\n <span class=\"breadcrumb-item-label\">{{ breadcrumb.label }}</span>\n }\n </li>\n }\n </ol>\n </nav>\n}\n", styles: [".breadcrumb{--breadcrumb-item-color: #ababab;--breadcrumb-item-font-size: var(--wp--preset--font-size--large, 1.25rem);list-style:none;border-radius:.25rem;margin:0 0 20px;padding:0;display:flex;flex-wrap:wrap;gap:2px}.breadcrumb-item{display:inline-block;margin:0}.breadcrumb-item--active .breadcrumb-item-label{color:inherit;font-weight:700}.breadcrumb-item-label{text-decoration:none;padding:4px;display:inline-block;color:var(--breadcrumb-item-color);font-size:var(--breadcrumb-item-font-size);font-weight:500;border-bottom:2px solid transparent}.breadcrumb-item a{transition:border-bottom .25s,color .25s}.breadcrumb-item a:hover,.breadcrumb-item a:focus{border-bottom-color:var(--wp--preset--color--primary)}.breadcrumb-item:first-child .breadcrumb-item-label{padding-left:0}.breadcrumb-item+.breadcrumb-item .breadcrumb-item-label:before{content:\"/\";padding-right:8px}.breadcrumb.breadcrumb--show-first-separator .breadcrumb-item-label:before{content:\"/\";padding-right:8px}\n"] }]
1068
1094
  }], propDecorators: { showFirstSeparator: [{
@@ -1073,10 +1099,10 @@ class PtrTabComponent {
1073
1099
  label;
1074
1100
  link;
1075
1101
  active = signal(false);
1076
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1077
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: PtrTabComponent, isStandalone: true, selector: "ptr-tab", inputs: { label: "label", link: "link" }, ngImport: i0, template: '@if(active()){<ng-content></ng-content>}', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1102
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1103
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: PtrTabComponent, isStandalone: true, selector: "ptr-tab", inputs: { label: "label", link: "link" }, ngImport: i0, template: '@if(active()){<ng-content></ng-content>}', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1078
1104
  }
1079
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrTabComponent, decorators: [{
1105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrTabComponent, decorators: [{
1080
1106
  type: Component,
1081
1107
  args: [{
1082
1108
  selector: 'ptr-tab',
@@ -1106,7 +1132,7 @@ class PtrTabsComponent {
1106
1132
  this.router.navigate([activeTab.link]);
1107
1133
  }
1108
1134
  this.updateSliderPosition();
1109
- }, { allowSignalWrites: true });
1135
+ });
1110
1136
  }
1111
1137
  ngAfterViewInit() {
1112
1138
  this.tabComponents.changes
@@ -1140,10 +1166,10 @@ class PtrTabsComponent {
1140
1166
  });
1141
1167
  }
1142
1168
  }
1143
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1144
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: PtrTabsComponent, isStandalone: true, selector: "ptr-tabs", queries: [{ propertyName: "tabComponents", predicate: PtrTabComponent }], viewQueries: [{ propertyName: "buttons", predicate: ["tabButton"], descendants: true }], ngImport: i0, template: "<div class=\"tabs-container\" role=\"tablist\">\r\n @for (tab of tabs(); track $index; let i = $index) {\r\n <button #tabButton [attr.role]=\"tab.link ? 'link' : 'tab'\" [attr.aria-selected]=\"tab.active()\"\r\n [class.active]=\"tab.active()\" (click)=\"selectTab(i)\" [routerLink]=\"tab.link\">{{tab.label}}</button>\r\n }\r\n\r\n <div class=\"slider\" [style.transform]=\"sliderPosition().transform\" [style.width]=\"sliderPosition().width\"></div>\r\n</div>\r\n\r\n@if (!useLinks()) {\r\n<div class=\"tab-content\">\r\n <ng-content></ng-content>\r\n</div>\r\n}\r\n", styles: [".tabs-container{display:flex;position:relative}button{display:inline-flex;max-width:360px;appearance:none;padding:.5rem 1rem;border:none;background:none;cursor:pointer;font-weight:700;font-size:var(--wp--preset--font-size--small, inherit)}button:hover,button:focus{background-color:var(----wp--preset--color--light, rgba(51, 54, 70, .0392156863))}.slider{position:absolute;bottom:-2px;height:2px;background-color:var(--wp--preset--color--secondary, #0073aa);transition:transform .3s ease}.tab-content{padding:20px 0}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1169
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1170
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: PtrTabsComponent, isStandalone: true, selector: "ptr-tabs", queries: [{ propertyName: "tabComponents", predicate: PtrTabComponent }], viewQueries: [{ propertyName: "buttons", predicate: ["tabButton"], descendants: true }], ngImport: i0, template: "<div class=\"tabs-container\" role=\"tablist\">\r\n @for (tab of tabs(); track $index; let i = $index) {\r\n <button #tabButton [attr.role]=\"tab.link ? 'link' : 'tab'\" [attr.aria-selected]=\"tab.active()\"\r\n [class.active]=\"tab.active()\" (click)=\"selectTab(i)\" [routerLink]=\"tab.link\">{{tab.label}}</button>\r\n }\r\n\r\n <div class=\"slider\" [style.transform]=\"sliderPosition().transform\" [style.width]=\"sliderPosition().width\"></div>\r\n</div>\r\n\r\n@if (!useLinks()) {\r\n<div class=\"tab-content\">\r\n <ng-content></ng-content>\r\n</div>\r\n}\r\n", styles: [".tabs-container{display:flex;position:relative}button{display:inline-flex;max-width:360px;appearance:none;padding:.5rem 1rem;border:none;background:none;cursor:pointer;font-weight:700;font-size:var(--wp--preset--font-size--small, inherit)}button:hover,button:focus{background-color:var(----wp--preset--color--light, rgba(51, 54, 70, .0392156863))}.slider{position:absolute;bottom:-2px;height:2px;background-color:var(--wp--preset--color--secondary, #0073aa);transition:transform .3s ease}.tab-content{padding:20px 0}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1145
1171
  }
1146
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrTabsComponent, decorators: [{
1172
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrTabsComponent, decorators: [{
1147
1173
  type: Component,
1148
1174
  args: [{ selector: 'ptr-tabs', imports: [RouterModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"tabs-container\" role=\"tablist\">\r\n @for (tab of tabs(); track $index; let i = $index) {\r\n <button #tabButton [attr.role]=\"tab.link ? 'link' : 'tab'\" [attr.aria-selected]=\"tab.active()\"\r\n [class.active]=\"tab.active()\" (click)=\"selectTab(i)\" [routerLink]=\"tab.link\">{{tab.label}}</button>\r\n }\r\n\r\n <div class=\"slider\" [style.transform]=\"sliderPosition().transform\" [style.width]=\"sliderPosition().width\"></div>\r\n</div>\r\n\r\n@if (!useLinks()) {\r\n<div class=\"tab-content\">\r\n <ng-content></ng-content>\r\n</div>\r\n}\r\n", styles: [".tabs-container{display:flex;position:relative}button{display:inline-flex;max-width:360px;appearance:none;padding:.5rem 1rem;border:none;background:none;cursor:pointer;font-weight:700;font-size:var(--wp--preset--font-size--small, inherit)}button:hover,button:focus{background-color:var(----wp--preset--color--light, rgba(51, 54, 70, .0392156863))}.slider{position:absolute;bottom:-2px;height:2px;background-color:var(--wp--preset--color--secondary, #0073aa);transition:transform .3s ease}.tab-content{padding:20px 0}\n"] }]
1149
1175
  }], ctorParameters: () => [], propDecorators: { tabComponents: [{
@@ -1192,10 +1218,10 @@ class PtrToasterService {
1192
1218
  remove(id) {
1193
1219
  this.toasts.update(toasts => toasts.filter(t => t.id !== id));
1194
1220
  }
1195
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrToasterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1196
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrToasterService, providedIn: 'root' });
1221
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrToasterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1222
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrToasterService, providedIn: 'root' });
1197
1223
  }
1198
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrToasterService, decorators: [{
1224
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrToasterService, decorators: [{
1199
1225
  type: Injectable,
1200
1226
  args: [{
1201
1227
  providedIn: 'root'
@@ -1204,10 +1230,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
1204
1230
 
1205
1231
  class PtrToasterComponent {
1206
1232
  toasterService = inject(PtrToasterService);
1207
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrToasterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1208
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: PtrToasterComponent, isStandalone: true, selector: "ptr-toaster", ngImport: i0, template: "<div class=\"toaster-container\" aria-live=\"polite\" aria-atomic=\"true\">\r\n @for (toast of toasterService.getToasts()(); track toast.id) {\r\n <div class=\"toast\" [ngClass]=\"toast.type\" role=\"alert\">\r\n <span>{{toast.message}}</span>\r\n <button (click)=\"toasterService.remove(toast.id)\" aria-label=\"Close\"><span>&times;</span></button>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".toaster-container{position:fixed;top:20px;right:20px;z-index:1000}.toast{padding:10px 20px;margin-bottom:10px;border-radius:calc(var(--wp--custom--default-border-radius) / 2);color:#fff;display:flex;justify-content:space-between;align-items:center;gap:1rem;box-shadow:0 2px 4px 2px #00000026}.success{background-color:var(--wp--preset--color--primary, #28a745)}.error{background-color:var(--wp--custom--color--error, #dc3545)}.info{background-color:var(--wp--preset--color--secondary, #17a2b8)}.warning{background-color:var(--wp--preset--color--secondary, #ffc107)}button{background:none;border:none;color:inherit;font-size:2em;cursor:pointer;font-family:monospace}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1233
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrToasterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1234
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.9", type: PtrToasterComponent, isStandalone: true, selector: "ptr-toaster", ngImport: i0, template: "<div class=\"toaster-container\" aria-live=\"polite\" aria-atomic=\"true\">\r\n @for (toast of toasterService.getToasts()(); track toast.id) {\r\n <div class=\"toast\" [ngClass]=\"toast.type\" role=\"alert\">\r\n <span>{{toast.message}}</span>\r\n <button (click)=\"toasterService.remove(toast.id)\" aria-label=\"Close\"><span>&times;</span></button>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".toaster-container{position:fixed;top:20px;right:20px;z-index:1000}.toast{padding:10px 20px;margin-bottom:10px;border-radius:calc(var(--wp--custom--default-border-radius) / 2);color:#fff;display:flex;justify-content:space-between;align-items:center;gap:1rem;box-shadow:0 2px 4px 2px #00000026}.success{background-color:var(--wp--preset--color--primary, #28a745)}.error{background-color:var(--wp--custom--color--error, #dc3545)}.info{background-color:var(--wp--preset--color--secondary, #17a2b8)}.warning{background-color:var(--wp--preset--color--secondary, #ffc107)}button{background:none;border:none;color:inherit;font-size:2em;cursor:pointer;font-family:monospace}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1209
1235
  }
1210
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: PtrToasterComponent, decorators: [{
1236
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.9", ngImport: i0, type: PtrToasterComponent, decorators: [{
1211
1237
  type: Component,
1212
1238
  args: [{ selector: 'ptr-toaster', imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"toaster-container\" aria-live=\"polite\" aria-atomic=\"true\">\r\n @for (toast of toasterService.getToasts()(); track toast.id) {\r\n <div class=\"toast\" [ngClass]=\"toast.type\" role=\"alert\">\r\n <span>{{toast.message}}</span>\r\n <button (click)=\"toasterService.remove(toast.id)\" aria-label=\"Close\"><span>&times;</span></button>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".toaster-container{position:fixed;top:20px;right:20px;z-index:1000}.toast{padding:10px 20px;margin-bottom:10px;border-radius:calc(var(--wp--custom--default-border-radius) / 2);color:#fff;display:flex;justify-content:space-between;align-items:center;gap:1rem;box-shadow:0 2px 4px 2px #00000026}.success{background-color:var(--wp--preset--color--primary, #28a745)}.error{background-color:var(--wp--custom--color--error, #dc3545)}.info{background-color:var(--wp--preset--color--secondary, #17a2b8)}.warning{background-color:var(--wp--preset--color--secondary, #ffc107)}button{background:none;border:none;color:inherit;font-size:2em;cursor:pointer;font-family:monospace}\n"] }]
1213
1239
  }] });
@@ -1 +1 @@
1
- {"version":3,"file":"patter-ngx-components.mjs","sources":["../../../../projects/patter/ngx-components/src/lib/menu/menu.component.ts","../../../../projects/patter/ngx-components/src/lib/menu/menu.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-button/ptr-button.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-button/ptr-button.component.html","../../../../projects/patter/ngx-components/src/lib/forms/shared/ptr-dialog-list/ptr-dialog-list.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/shared/ptr-dialog-list/ptr-dialog-list.component.html","../../../../projects/patter/ngx-components/src/lib/forms/input/select/select.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/input/select/select.component.html","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-input/ptr-input.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-input/ptr-input.component.html","../../../../projects/patter/ngx-components/src/lib/forms/form/form.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/form/form.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-title/ptr-title.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-title/ptr-title.component.html","../../../../projects/patter/ngx-components/src/lib/loading-spinner/loading-spinner.component.ts","../../../../projects/patter/ngx-components/src/lib/loading-spinner/loading-spinner.directive.ts","../../../../projects/patter/ngx-components/src/lib/services/loading.service.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-dialog/ptr-dialog.component.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-dialog/ptr-dialog.component.html","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-dialog.service.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-tooltip/ptr-tooltip.component.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-tooltip/ptr-tooltip.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-breadcrumbs/ptr-breadcrumbs.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-breadcrumbs/ptr-breadcrumbs.component.html","../../../../projects/patter/ngx-components/src/lib/components/tabs/ptr-tab/ptr-tab.component.ts","../../../../projects/patter/ngx-components/src/lib/components/tabs/ptr-tabs/ptr-tabs.component.ts","../../../../projects/patter/ngx-components/src/lib/components/tabs/ptr-tabs/ptr-tabs.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-toaster/ptr-toaster.service.ts","../../../../projects/patter/ngx-components/src/lib/ptr-toaster/ptr-toaster/ptr-toaster.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-toaster/ptr-toaster/ptr-toaster.component.html","../../../../projects/patter/ngx-components/src/public-api.ts","../../../../projects/patter/ngx-components/src/patter-ngx-components.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nexport interface PtrMenuItem {\r\n label: string;\r\n link?: string;\r\n children?: PtrMenuItem[];\r\n}\r\n\r\n@Component({\n selector: 'ptr-menu',\n imports: [RouterModule],\n templateUrl: './menu.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./menu.component.scss']\n})\r\nexport class PtrMenuComponent {\r\n\r\n @Input() menuItems: PtrMenuItem[] = [];\r\n\r\n}\r\n","<nav class=\"ptr-menu\">\n <ul class=\"menu\">\n @for (item of menuItems; track item.label) {\n <li class=\"menu-item\" routerLinkActive=\"current_page_item\" [routerLinkActiveOptions]=\"{exact: true}\">\n <a [routerLink]=\"item.link || '#'\">{{item.label}}</a>\n </li>\n }\n </ul>\n</nav>\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, EventEmitter, HostBinding, Input, Output, signal } from '@angular/core';\r\nimport { RouterLink } from '@angular/router';\r\n\r\ntype ButtonStyle = 'normal' | 'error' | 'secondary' | 'icon';\r\n\r\n@Component({\n selector: 'ptr-button',\n imports: [CommonModule, RouterLink],\n templateUrl: './ptr-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrButtonComponent {\r\n\r\n @HostBinding('class') get hostClasses() {\r\n const hostClass = [];\r\n if (this.style() === 'secondary') {\r\n hostClass.push('is-style-outline');\r\n }\r\n if (this.style() === 'error') {\r\n hostClass.push('is-style-error-button');\r\n }\r\n if (this.style() === 'icon') {\r\n hostClass.push('is-style-icon-button');\r\n }\r\n if (this.smallSize()) {\r\n hostClass.push('is-style-smaller-element');\r\n }\r\n return hostClass.join(' ');\r\n }\r\n\r\n style = signal<ButtonStyle>('normal');\r\n type = signal<'button' | 'submit' | 'reset'>('button');\r\n disabled = signal(false);\r\n href = signal<string | null>(null);\r\n routerLink = signal<string | (string|number)[] | null>(null);\r\n additionalClasses = signal('');\r\n smallSize = signal(false);\r\n\r\n @Input() set buttonStyle(value: ButtonStyle) {\r\n this.style.set(value);\r\n }\r\n\r\n @Input() set buttonType(value: 'button' | 'submit' | 'reset') {\r\n this.type.set(value);\r\n }\r\n\r\n @Input() set isDisabled(value: boolean) {\r\n this.disabled.set(value);\r\n }\r\n\r\n @Input() set hrefLink(value: string | null) {\r\n this.href.set(value);\r\n }\r\n\r\n @Input() set routerLinkValue(value: string | (string|number)[] | null) {\r\n this.routerLink.set(value);\r\n }\r\n\r\n @Input() set extraClasses(value: string) {\r\n this.additionalClasses.set(value);\r\n }\r\n\r\n @Input() set isSmallSize(value: boolean) {\r\n if (value) {\r\n this.smallSize.set(true);\r\n }\r\n }\r\n\r\n @Input() set isIconButton(value: boolean) {\r\n if (value) {\r\n this.style.set('icon');\r\n }\r\n }\r\n\r\n @Input() ariaLabel? = '';\r\n\r\n @Output() clicked = new EventEmitter<Event>();\r\n\r\n isLink = computed(() => !!this.href() || !!this.routerLink());\r\n\r\n buttonClasses = computed(() => {\r\n const classes = ['wp-block-button__link'];\r\n\r\n if (this.style() !== 'normal') {\r\n classes.push(`wp-block-button__link--${this.style()}`);\r\n }\r\n\r\n if (this.disabled() && this.isLink()) {\r\n classes.push('disabled');\r\n }\r\n\r\n if (this.additionalClasses()) {\r\n classes.push(this.additionalClasses());\r\n }\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n onClick(event: Event): void {\r\n if (this.disabled()) {\r\n event.preventDefault();\r\n return;\r\n }\r\n this.clicked.emit(event);\r\n }\r\n\r\n}\r\n","<ng-template #contentTpl>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n\r\n@if (isLink()) {\r\n<a [attr.href]=\"href()\" [routerLink]=\"routerLink()\" [class]=\"buttonClasses()\" [attr.disabled]=\"disabled() ? '' : null\"\r\n (click)=\"onClick($event)\" [attr.aria-label]=\"ariaLabel ?? null\">\r\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\r\n</a>\r\n} @else {\r\n<button [type]=\"type()\" [class]=\"buttonClasses()\" [disabled]=\"disabled()\" (click)=\"onClick($event)\"\r\n [attr.aria-label]=\"ariaLabel ?? null\">\r\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\r\n</button>\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, EventEmitter, Input, Output, signal, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { PtrOption, PtrOptionGroup } from '../../interfaces';\r\n\r\ninterface ProcessedOption {\r\n type: 'option' | 'group';\r\n label: string;\r\n value?: string;\r\n options?: ProcessedOption[];\r\n}\r\n\r\n@Component({\n selector: 'ptr-dialog-list',\n imports: [\n FormsModule\n ],\n templateUrl: './ptr-dialog-list.component.html',\n styleUrls: ['./ptr-dialog-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrDialogListComponent {\r\n\r\n @Input() set options(value: (PtrOption | PtrOptionGroup | string)[] | undefined) {\r\n this._options.set(this.processOptions(value));\r\n }\r\n @Input() showSearch = false;\r\n @Input() searchPlaceholder = 'Search...';\r\n @Input() dialogTitle? = '';\r\n\r\n @Output() selectionChange = new EventEmitter<string | null>();\r\n @Output() dialogClosed = new EventEmitter<void>();\r\n @Output() searchTermChanged = new EventEmitter<string>();\r\n\r\n @ViewChild('dialog') dialog!: ElementRef<HTMLDialogElement>;\r\n\r\n private _options = signal<ProcessedOption[]>([]);\r\n value = signal<string | null>(null);\r\n searchTerm = signal('');\r\n highlightedIndex = signal(-1);\r\n isOpen = signal(false);\r\n private componentId = Math.random().toString(36).substring(2);\r\n listId = `${this.componentId}-list`;\r\n\r\n filteredOptions = computed(() => {\r\n const term = this.searchTerm().toLowerCase();\r\n return this._options().flatMap(item => {\r\n if (item.type === 'group') {\r\n const filteredOptions = item.options!.filter(option =>\r\n option.label.toLowerCase().includes(term)\r\n );\r\n return filteredOptions.length > 0 ? [{ ...item, options: filteredOptions }] : [];\r\n } else {\r\n return item.label.toLowerCase().includes(term) ? [item] : [];\r\n }\r\n });\r\n });\r\n\r\n openDialog() {\r\n this.dialog.nativeElement.show();\r\n this.adjustDialogPosition();\r\n this.isOpen.set(true);\r\n }\r\n\r\n openDialogSilent() {\r\n this.dialog.nativeElement.setAttribute('open', 'true');\r\n this.adjustDialogPosition();\r\n this.isOpen.set(true);\r\n }\r\n\r\n closeDialog() {\r\n this.dialog.nativeElement.close();\r\n this.isOpen.set(false);\r\n this.searchTerm.set('');\r\n this.highlightedIndex.set(-1);\r\n this.dialogClosed.emit();\r\n this.resetDialogPosition();\r\n }\r\n\r\n updateSearchTerm(term: string) {\r\n this.searchTerm.set(term);\r\n this.highlightedIndex.set(-1);\r\n this.searchTermChanged.emit(term);\r\n }\r\n\r\n onDialogKeyDown(event: KeyboardEvent) {\r\n if (event.key === 'Escape') {\r\n this.closeDialog();\r\n event.preventDefault();\r\n }\r\n\r\n // When there is no search input and there are options, move input into the first option\r\n if (!this.showSearch && this.filteredOptions().length > 0 && this.highlightedIndex() === -1) {\r\n if (event.key === 'Tab' || event.key === 'ArrowDown') {\r\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\r\n this.focusOption();\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n onInputKeyDown(event: KeyboardEvent) {\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\r\n this.focusOption();\r\n event.preventDefault();\r\n break;\r\n case 'Escape':\r\n this.closeDialog();\r\n event.preventDefault();\r\n break;\r\n }\r\n }\r\n\r\n onOptionKeyDown(event: KeyboardEvent, optionValue: string) {\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\r\n this.focusOption();\r\n event.preventDefault();\r\n break;\r\n case 'ArrowUp':\r\n this.highlightedIndex.update(i => Math.max(i - 1, -1));\r\n this.focusOption();\r\n event.preventDefault();\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n this.selectOption(optionValue);\r\n event.preventDefault();\r\n break;\r\n }\r\n }\r\n\r\n focusOption() {\r\n if (this.highlightedIndex() >= 0) {\r\n const options = this.dialog.nativeElement.querySelectorAll('li[role=\"option\"]');\r\n (options[this.highlightedIndex()] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n selectOption(optionValue: string) {\r\n this.value.set(optionValue);\r\n this.selectionChange.emit(optionValue);\r\n this.closeDialog();\r\n }\r\n\r\n private getTotalOptionsCount(): number {\r\n return this.filteredOptions().reduce((count, item) => {\r\n if (item.type === 'group') {\r\n return count + item.options!.length;\r\n }\r\n return count + 1;\r\n }, 0);\r\n }\r\n\r\n private processOptions(options: (PtrOption | PtrOptionGroup | string)[] | undefined): ProcessedOption[] {\r\n if (!options) return [];\r\n return options.map(option => {\r\n if (typeof option === 'string') {\r\n return {\r\n type: 'option',\r\n label: option,\r\n value: option\r\n };\r\n } else if ('groupLabel' in option) {\r\n return {\r\n type: 'group',\r\n label: option.groupLabel,\r\n options: option.options.map(subOption => ({\r\n type: 'option',\r\n label: typeof subOption === 'string' ? subOption : subOption.label,\r\n value: typeof subOption === 'string' ? subOption : subOption.value\r\n }))\r\n };\r\n } else {\r\n return {\r\n type: 'option',\r\n label: option.label,\r\n value: option.value\r\n };\r\n }\r\n });\r\n }\r\n\r\n adjustDialogPosition() {\r\n const dialogRect = this.dialog.nativeElement.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n const spaceBelow = viewportHeight - dialogRect.bottom;\r\n if (spaceBelow > 0) {\r\n this.dialog.nativeElement.style.top = '100%';\r\n } else {\r\n this.dialog.nativeElement.style.bottom = '100%';\r\n }\r\n }\r\n\r\n resetDialogPosition() {\r\n this.dialog.nativeElement.style.top = '';\r\n this.dialog.nativeElement.style.bottom = '';\r\n }\r\n\r\n}\r\n","<dialog #dialog class=\"ptr-dialog-list\" (keydown)=\"onDialogKeyDown($event)\" [attr.aria-label]=\"'Options'\">\r\n\r\n @if(dialogTitle) {\r\n <p class=\"dialog-title\">{{dialogTitle}}</p>\r\n }\r\n\r\n @if (showSearch) {\r\n <div>\r\n <input #searchInput [ngModel]=\"searchTerm()\" (ngModelChange)=\"updateSearchTerm($event)\"\r\n [attr.aria-expanded]=\"isOpen()\" [attr.aria-owns]=\"listId\" (keydown)=\"onInputKeyDown($event)\"\r\n [attr.aria-autocomplete]=\"'list'\" role=\"combobox\" [attr.aria-controls]=\"listId\" [placeholder]=\"searchPlaceholder\"\r\n class=\"search-input\">\r\n </div>\r\n }\r\n\r\n <ul [attr.id]=\"listId\" role=\"listbox\" class=\"option-list\">\r\n @for (item of filteredOptions(); track item.label) {\r\n @if (item.type === 'option') {\r\n <li role=\"option\" [attr.id]=\"item.value\" [attr.aria-selected]=\"item.value === value()\"\r\n [class.selected]=\"item.value === value()\" [class.highlighted]=\"item === filteredOptions()[highlightedIndex()]\"\r\n (click)=\"selectOption(item.value!)\" (keydown)=\"onOptionKeyDown($event, item.value!)\"\r\n [attr.tabindex]=\"item === filteredOptions()[highlightedIndex()] ? 0 : -1\">\r\n {{ item.label }}\r\n </li>\r\n } @else {\r\n <li role=\"group\" [attr.aria-label]=\"item.label\">\r\n {{ item.label }}\r\n </li>\r\n @for (option of item.options!; track option.value) {\r\n <li role=\"option\" [attr.id]=\"option.value\" [attr.aria-selected]=\"option.value === value()\"\r\n [class.selected]=\"option.value === value()\" [class.highlighted]=\"option === filteredOptions()[highlightedIndex()]\"\r\n (click)=\"selectOption(option.value!)\" (keydown)=\"onOptionKeyDown($event, option.value!)\"\r\n [attr.tabindex]=\"option === filteredOptions()[highlightedIndex()] ? 0 : -1\">\r\n {{ option.label }}\r\n </li>\r\n }\r\n }\r\n }\r\n </ul>\r\n\r\n</dialog>\r\n","/* eslint-disable @typescript-eslint/no-empty-function */\r\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, EventEmitter, forwardRef, HostListener, Input, Output, signal, ViewChild } from '@angular/core';\r\nimport { FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { PtrOption, PtrOptionGroup } from '../../interfaces';\r\nimport { PtrDialogListComponent } from '../../shared/ptr-dialog-list/ptr-dialog-list.component';\r\n\r\n@Component({\n selector: 'ptr-select',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PtrDialogListComponent\n ],\n templateUrl: './select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PtrSelectComponent),\n multi: true\n }\n ]\n})\r\nexport class PtrSelectComponent {\r\n\r\n @Input() options: (PtrOption | PtrOptionGroup | string)[] | undefined;\r\n @Input() showSearch = true;\r\n @Input() placeholder?: string | null = 'Select an option';\r\n @Input() label? = '';\r\n @Input() description? = '';\r\n @Input() labelPosition?: 'top' | 'inline' = 'top';\r\n\r\n @Output() selectionChange = new EventEmitter<string | null>();\r\n\r\n @ViewChild('selectButton') selectButton!: ElementRef<HTMLButtonElement>;\r\n @ViewChild('dialogList') dialogList!: PtrDialogListComponent;\r\n\r\n value = signal<string | null>(null);\r\n\r\n displayValue = computed(() => {\r\n const currentValue = this.value();\r\n if (currentValue === null) return null;\r\n const allOptions = this.flattenOptions(this.options);\r\n const selectedOption = allOptions?.find(option => option.value === currentValue);\r\n return selectedOption ? selectedOption.label : null;\r\n });\r\n\r\n effectivePlaceholder = computed(() => {\r\n return this.placeholder ?? 'Select an option';\r\n });\r\n\r\n private componentId = Math.random().toString(36).substring(2);\r\n labelId = `${this.componentId}-label`;\r\n inputId = `${this.componentId}-input`;\r\n\r\n onChange: (value: string | null) => void = () => { };\r\n onTouched: () => void = () => { };\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n if (!this.dialogList.dialog.nativeElement.contains(event.target as Node) &&\r\n !(event.target as HTMLElement).closest('.select-button') &&\r\n this.dialogList.isOpen()) {\r\n this.dialogList.closeDialog();\r\n }\r\n }\r\n\r\n toggleDialog() {\r\n if (this.dialogList.isOpen()) {\r\n this.dialogList.closeDialog();\r\n } else {\r\n this.dialogList.openDialog();\r\n }\r\n }\r\n\r\n onOptionSelected(optionValue: string | null) {\r\n this.value.set(optionValue);\r\n this.onChange(optionValue);\r\n this.onTouched();\r\n this.selectionChange.emit(optionValue);\r\n }\r\n\r\n writeValue(value: string): void {\r\n this.value.set(value);\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n if (this.selectButton?.nativeElement) {\r\n this.selectButton.nativeElement.disabled = isDisabled;\r\n }\r\n }\r\n\r\n private flattenOptions(options: (PtrOption | PtrOptionGroup | string)[] | undefined): PtrOption[] {\r\n if (!options) return [];\r\n\r\n return options.flatMap(option => {\r\n if (typeof option === 'string') {\r\n return { value: option, label: option };\r\n } else if ('groupLabel' in option) {\r\n return option.options;\r\n } else {\r\n return option;\r\n }\r\n });\r\n }\r\n\r\n}\r\n","<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\r\n@if(description){\r\n<div class=\"gfield_description\">{{description}}</div>\r\n}\r\n<div class=\"gfield--input-wrapper ginput_container\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\r\n\r\n <button #selectButton type=\"button\" class=\"select-button\" [attr.id]=\"inputId\" [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-expanded]=\"dialogList.isOpen()\" [attr.aria-labelledby]=\"labelId\" (click)=\"toggleDialog()\">\r\n <span [attr.id]=\"labelId\">@if (displayValue(); as dValue) { {{dValue}} } @else { {{effectivePlaceholder()}} }</span>\r\n </button>\r\n\r\n @if (labelPosition === 'inline') {\r\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\r\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\r\n <span>{{label}}</span>\r\n </legend>\r\n </fieldset>\r\n }\r\n\r\n <ptr-dialog-list #dialogList [options]=\"options\" (selectionChange)=\"onOptionSelected($event)\"\r\n [showSearch]=\"showSearch\" />\r\n\r\n</div>\r\n","/* eslint-disable @typescript-eslint/no-empty-function */\r\nimport { ChangeDetectionStrategy, Component, ElementRef, forwardRef, HostListener, Input, OnInit, signal, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { PtrDialogListComponent } from '../../shared/ptr-dialog-list/ptr-dialog-list.component';\r\nimport { debounceTime, distinctUntilChanged, Observable, of, Subject, switchMap } from 'rxjs';\r\n\r\n\r\n@Component({\n selector: 'ptr-input',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PtrDialogListComponent\n],\n templateUrl: './ptr-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PtrInputComponent),\n multi: true\n }\n ]\n})\r\nexport class PtrInputComponent implements ControlValueAccessor, OnInit {\r\n\r\n @Input() type: 'text' | 'number' | 'email' | 'password' | 'search' | 'hidden' | 'date' | 'textarea' = 'text';\r\n @Input() label = '';\r\n @Input() placeholder?: string | null = '';\r\n @Input() autocomplete? = '';\r\n @Input() description? = '';\r\n @Input() dialogHelpText? = '';\r\n @Input() searchFn?: (term: string) => Observable<string[]>;\r\n @Input() labelPosition?: 'top' | 'inline' = 'top';\r\n\r\n @ViewChild('input') input!: ElementRef<HTMLInputElement>;\r\n @ViewChild('dialogList') dialogList!: PtrDialogListComponent;\r\n\r\n private componentId = Math.random().toString(36).substring(2);\r\n private minChars = 3;\r\n private searchTerms = new Subject<string>();\r\n private hasSelectedOption = false;\r\n\r\n inputId = `${this.componentId}-input`;\r\n inputValue = signal('');\r\n searchResultOptions = signal<string[]>([]);\r\n onChange: (value: string) => void = () => { };\r\n onTouched: () => void = () => { };\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n if (this.searchFn) {\r\n if (!this.dialogList?.dialog.nativeElement.contains(event.target as Node) && this.dialogList?.isOpen()) {\r\n this.dialogList.closeDialog();\r\n }\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.setupSearch();\r\n }\r\n\r\n private setupSearch() {\r\n if (this.searchFn) {\r\n this.searchTerms.pipe(\r\n debounceTime(300),\r\n distinctUntilChanged(),\r\n switchMap(term => term.length >= this.minChars ? this.searchFn!(term) : of([]))\r\n ).subscribe(results => {\r\n this.searchResultOptions.set(results);\r\n if (results.length > 0 && this.dialogList) {\r\n this.dialogList.openDialogSilent();\r\n } else {\r\n this.dialogList.closeDialog();\r\n }\r\n });\r\n }\r\n }\r\n\r\n onInputChange(value: string) {\r\n this.inputValue.set(value);\r\n this.onChange(value);\r\n if (!this.hasSelectedOption && this.searchFn && value.length >= this.minChars) {\r\n this.searchTerms.next(value);\r\n }\r\n this.hasSelectedOption = false;\r\n }\r\n\r\n onOptionSelected(optionValue: string | null) {\r\n this.hasSelectedOption = true;\r\n\r\n this.inputValue.set(optionValue ?? '');\r\n this.onChange(optionValue ?? '');\r\n if (this.dialogList) {\r\n this.dialogList.closeDialog();\r\n }\r\n }\r\n\r\n onFocus() {\r\n if (this.searchResultOptions().length > 0 && this.dialogList && !this.hasSelectedOption) {\r\n this.dialogList.openDialogSilent();\r\n }\r\n }\r\n\r\n onBlur() {\r\n this.onTouched();\r\n }\r\n\r\n writeValue(value: string): void {\r\n this.inputValue.set(value ?? '');\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n if (this.input?.nativeElement) {\r\n this.input.nativeElement.disabled = isDisabled;\r\n }\r\n }\r\n\r\n}\r\n","<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\r\n@if(description){\r\n <div class=\"gfield_description\">{{description}}</div>\r\n}\r\n<div class=\"gfield--input-wrapper ginput_container\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\r\n\r\n @switch (type) {\r\n @case ('textarea') {\r\n <textarea #input [id]=\"inputId\" [attr.autocomplete]=\"autocomplete || null\" [attr.placeholder]=\"placeholder || null\"\r\n [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [rows]=\"3\"></textarea>\r\n }\r\n @default {\r\n <input #input [id]=\"inputId\" [type]=\"type\" [attr.autocomplete]=\"autocomplete || null\"\r\n [attr.placeholder]=\"placeholder || null\" [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" />\r\n }\r\n }\r\n\r\n @if (labelPosition === 'inline') {\r\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\r\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\r\n <span>{{label}}</span>\r\n </legend>\r\n </fieldset>\r\n }\r\n\r\n @if (searchFn) {\r\n <ptr-dialog-list #dialogList [options]=\"searchResultOptions()\" (selectionChange)=\"onOptionSelected($event)\"\r\n [dialogTitle]=\"dialogHelpText\" />\r\n }\r\n\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { PtrConditionalRule, PtrFormConfig, PtrFormField } from '../interfaces';\r\nimport { PtrButtonComponent } from '../../ptr-button/ptr-button.component';\r\nimport { PtrSelectComponent } from \"../input/select/select.component\";\r\nimport { PtrInputComponent } from '../input/ptr-input/ptr-input.component';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Component({\n selector: 'ptr-form',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n PtrButtonComponent,\n PtrSelectComponent,\n PtrInputComponent\n ],\n templateUrl: './form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrFormComponent implements OnInit {\r\n\r\n @Input() config!: PtrFormConfig;\r\n @Input() loading = false;\r\n @Input() error: string | null = null;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() formSubmit = new EventEmitter<any>();\r\n @Output() formGroupCreated = new EventEmitter<FormGroup>();\r\n\r\n formGroup!: FormGroup;\r\n\r\n private fb = inject(FormBuilder);\r\n private cdr = inject(ChangeDetectorRef);\r\n private destroyRef = inject(DestroyRef);\r\n\r\n ngOnInit(): void {\r\n this.buildForm();\r\n this.formGroupCreated.emit(this.formGroup);\r\n this.setupConditionalLogic();\r\n }\r\n\r\n buildForm(): void {\r\n const group: Record<string, unknown> = {};\r\n this.config.fields.forEach(field => {\r\n group[field.name] = [field.value || '', field.validators || []];\r\n });\r\n\r\n this.formGroup = this.fb.group(group, this.config.formValidators ? { validators: this.config.formValidators } : null);\r\n }\r\n\r\n onSubmit(): void {\r\n if (this.formGroup.valid) {\r\n this.formSubmit.emit(this.formGroup.value);\r\n }\r\n }\r\n\r\n public resetForm(): void {\r\n this.formGroup.reset();\r\n this.config.fields.forEach(field => {\r\n const control = this.formGroup.get(field.name);\r\n control?.setValue(field.value || '', { emitEvent: false });\r\n });\r\n this.cdr.markForCheck();\r\n }\r\n\r\n // Conditional logic\r\n setupConditionalLogic(): void {\r\n this.formGroup.valueChanges.pipe(\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe(() => {\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n\r\n isFieldVisible(field: PtrFormField): boolean {\r\n if (!field.conditional?.showWhen) return true;\r\n return this.evaluateConditionalRules(field.conditional.showWhen) as boolean;\r\n }\r\n\r\n getFieldLabel(field: PtrFormField): string {\r\n if (!field.conditional?.label) return field.label;\r\n const conditionalLabel = this.evaluateConditionalRules(field.conditional.label);\r\n return conditionalLabel as string || field.label;\r\n }\r\n\r\n getFieldPlaceholder(field: PtrFormField): string | null {\r\n if (!field.conditional?.placeholder) return field.placeholder || null;\r\n const conditionalPlaceholder = this.evaluateConditionalRules(field.conditional.placeholder);\r\n return conditionalPlaceholder as string || field.placeholder || null;\r\n }\r\n\r\n private evaluateConditionalRules(rules: PtrConditionalRule[]): string | boolean {\r\n for (const rule of rules) {\r\n const fieldValue = this.formGroup.get(rule.field)?.value;\r\n if (fieldValue === rule.value) {\r\n return rule.result;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n}\r\n","<div [class]=\"'gform_wrapper ' + config.formClass\">\r\n\r\n @if (error) {\r\n <div class=\"gform_validation_errors\">\r\n <h2 class=\"gform_submission_error hide_summary\">{{error}}</h2>\r\n </div>\r\n }\r\n\r\n @if (config.title) {\r\n <div class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n }\r\n\r\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <div class=\"gform_fields\">\r\n\r\n @for (field of config.fields; track field.name) {\r\n @if(isFieldVisible(field)) {\r\n\r\n <div class=\"gfield gfield--width-{{field.size}}\" [class.gform_hidden]=\"field.type === 'hidden'\"\r\n [class.gfield_error]=\"formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched\" [class.gfield--label-inline]=\"config.labelPosition === 'inline'\">\r\n\r\n @switch (field.type) {\r\n @case ('select') {\r\n <ptr-select [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [options]=\"field.options\"\r\n [placeholder]=\"getFieldPlaceholder(field)\" [labelPosition]=\"config.labelPosition\" />\r\n }\r\n @default {\r\n <ptr-input [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [type]=\"field.type\"\r\n [placeholder]=\"getFieldPlaceholder(field)\" [autocomplete]=\"field.autocomplete\" [searchFn]=\"field.searchFn\"\r\n [dialogHelpText]=\"field.dialogHelpText\" [labelPosition]=\"config.labelPosition\" />\r\n }\r\n }\r\n\r\n @if (formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n @if (formGroup.get(field.name)?.errors?.['required']) {\r\n This field is required.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['email']) {\r\n Please enter a valid email address.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['minlength']) {\r\n Minimum length is {{ formGroup.get(field.name)?.errors?.['minlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['maxlength']) {\r\n Maximum length is {{ formGroup.get(field.name)?.errors?.['maxlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['pattern']) {\r\n Please match the required format.\r\n }\r\n </div>\r\n }\r\n @if (field.validationMessages && formGroup.invalid && !formGroup.get(field.name)?.invalid &&\r\n formGroup.get(field.name)?.touched) {\r\n @for (error of formGroup.errors | keyvalue; track error) {\r\n @if (field.validationMessages[error.key]) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n {{ field.validationMessages[error.key] }}\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n @if(config.submitText){\r\n <div class=\"gform_footer\">\r\n <ptr-button buttonType=\"submit\" [isDisabled]=\"loading || !formGroup.valid\"\r\n [extraClasses]=\"config.submitFullWidth ? 'gform-button--width-full' : ''\">{{config.submitText}}</ptr-button>\r\n </div>\r\n }\r\n\r\n </form>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject, Input, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, NavigationEnd, Router, TitleStrategy } from '@angular/router';\r\nimport { filter, map, Observable, startWith } from 'rxjs';\r\n\r\n@Component({\n selector: 'ptr-title',\n imports: [CommonModule],\n templateUrl: './ptr-title.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrTitleComponent implements OnInit {\r\n\r\n @Input() styleClass = 'entry-title';\r\n @Input() wrapperStyleClass = '';\r\n @Input() screenReaderOnly = false;\r\n\r\n private router = inject(Router);\r\n private activatedRoute = inject(ActivatedRoute);\r\n private titleStrategy = inject(TitleStrategy);\r\n\r\n displayTitle$!: Observable<string>;\r\n hideTitle$!: Observable<boolean>;\r\n\r\n ngOnInit() {\r\n const routeEvents$ = this.router.events.pipe(\r\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\r\n startWith(null),\r\n map(() => this.getRoute(this.activatedRoute))\r\n );\r\n\r\n this.hideTitle$ = routeEvents$.pipe(\r\n map(route => !!route.snapshot.data['hideTitle'])\r\n );\r\n\r\n this.displayTitle$ = routeEvents$.pipe(\r\n map(route => {\r\n if (route.snapshot.data['hideTitle']) {\r\n return '';\r\n }\r\n // Check for a custom display title in the route data\r\n const customDisplayTitle = route.snapshot.data['displayTitle'];\r\n if (customDisplayTitle) {\r\n return customDisplayTitle;\r\n }\r\n // If no custom display title, use the resolved title from TitleStrategy\r\n const resolvedTitle = this.titleStrategy.getResolvedTitleForRoute(route.snapshot) || '';\r\n return resolvedTitle;\r\n // Remove any common suffix (checking for both ' | ' and ' - ' separators)\r\n // return this.removeCommonSuffix(resolvedTitle);\r\n })\r\n );\r\n }\r\n\r\n private getRoute(route: ActivatedRoute): ActivatedRoute {\r\n while (route.firstChild) {\r\n route = route.firstChild;\r\n }\r\n return route;\r\n }\r\n\r\n}\r\n","@if ((hideTitle$|async) === false) {\r\n @if(wrapperStyleClass) {\r\n <header [class]=\"wrapperStyleClass\" [class.screen-reader-text]=\"screenReaderOnly\">\r\n <h1 [class]=\"styleClass\">{{displayTitle$|async}}</h1>\r\n </header>\r\n } @else {\r\n <h1 [class]=\"styleClass\" [class.screen-reader-text]=\"screenReaderOnly\">{{displayTitle$|async}}</h1>\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\n\r\n@Component({\n selector: 'ptr-loading-spinner',\n imports: [],\n template: `<div class=\"ptr-progress-spinner\"></div>`,\n styleUrls: [\"./loading-spinner.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrLoadingSpinnerComponent { }\r\n","import { ComponentRef, Directive, ElementRef, HostBinding, inject, Input, OnDestroy, Renderer2, ViewContainerRef } from '@angular/core';\r\nimport { PtrLoadingSpinnerComponent } from './loading-spinner.component';\r\n\r\n@Directive({\r\n selector: '[ptrLoadingSpinner]',\r\n standalone: true\r\n})\r\nexport class PtrLoadingSpinnerDirective implements OnDestroy {\r\n\r\n private targetEl = inject(ElementRef);\r\n private viewContainerRef = inject(ViewContainerRef);\r\n private renderer = inject(Renderer2);\r\n\r\n private spinnerInstance?: ComponentRef<PtrLoadingSpinnerComponent>;\r\n private overlay?: HTMLElement;\r\n\r\n @HostBinding('style.position') hostPosition = 'relative';\r\n\r\n @Input({ required: true }) set ptrLoadingSpinner(loading: boolean) {\r\n if (loading) {\r\n this.addBlurEffect();\r\n this.addOverlay();\r\n this.addProgressSpinnerComponent();\r\n } else {\r\n this.removeBlurEffect();\r\n this.removeOverlay();\r\n this.removeProgressSpinnerComponent();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.spinnerInstance?.destroy();\r\n this.removeBlurEffect();\r\n }\r\n\r\n private addProgressSpinnerComponent(): void {\r\n this.spinnerInstance = this.viewContainerRef.createComponent(PtrLoadingSpinnerComponent);\r\n this.overlay?.appendChild(this.spinnerInstance.location.nativeElement);\r\n }\r\n\r\n private removeProgressSpinnerComponent(): void {\r\n this.spinnerInstance?.destroy();\r\n }\r\n\r\n private addOverlay(): void {\r\n this.overlay = this.renderer.createElement('div');\r\n this.renderer.setStyle(this.overlay, 'display', 'flex');\r\n this.renderer.setStyle(this.overlay, 'justify-content', 'center');\r\n this.renderer.setStyle(this.overlay, 'align-items', 'center');\r\n this.renderer.setStyle(this.overlay, 'position', 'absolute');\r\n this.renderer.setStyle(this.overlay, 'top', '0');\r\n this.renderer.setStyle(this.overlay, 'left', '0');\r\n this.renderer.setStyle(this.overlay, 'width', '100%');\r\n this.renderer.setStyle(this.overlay, 'height', '100%');\r\n this.renderer.setStyle(this.overlay, 'min-height', '25px');\r\n\r\n this.renderer.appendChild(this.targetEl.nativeElement, this.overlay);\r\n }\r\n\r\n private removeOverlay(): void {\r\n if (this.overlay) {\r\n this.renderer.removeChild(this.targetEl.nativeElement, this.overlay);\r\n this.overlay = undefined;\r\n }\r\n }\r\n\r\n private addBlurEffect(): void {\r\n const style = this.renderer.createElement('style');\r\n const blurRule = `\r\n .ptr-loading-blur > *:not(:last-child) {\r\n filter: blur(2px);\r\n transition: filter 0.3s ease;\r\n }\r\n `;\r\n this.renderer.appendChild(style, this.renderer.createText(blurRule));\r\n this.renderer.appendChild(document.head, style);\r\n this.renderer.addClass(this.targetEl.nativeElement, 'ptr-loading-blur');\r\n }\r\n\r\n private removeBlurEffect(): void {\r\n this.renderer.removeClass(this.targetEl.nativeElement, 'ptr-loading-blur');\r\n }\r\n\r\n}\r\n","import { computed, Injectable, signal, Signal } from '@angular/core';\r\n\r\n/**\r\n * Optimized Async Loading Service using Angular Signals\r\n * Supports global loading state and named loading areas with auto-cleanup\r\n *\r\n * To use as a non-singleton service, add to providers array in @Component decorator:\r\n * @Component({\r\n * selector: 'app-example',\r\n * templateUrl: './example.component.html',\r\n * providers: [PtrLoadingService]\r\n * })\r\n *\r\n * Usage:\r\n * Set loading: this.loadingService.setLoading(true)\r\n * - Set loading: this.loadingService.setLoading(true, 'areaName')\r\n *\r\n * - Get loading (template): {{ loadingService.isLoading()() }}\r\n * - Get loading (template): {{ loadingService.isLoading('areaName')() }}\r\n *\r\n * - Get loading (component): this.loadingService.isLoading()()\r\n * - Get loading (component): this.loadingService.isLoading('areaName')()\r\n *\r\n * - Check if any loading: {{ loadingService.isAnyLoading()() }}\r\n *\r\n * - React to loading changes: effect(() => console.log('Loading:', this.loadingService.isLoading('areaName')()))\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PtrLoadingService {\r\n\r\n private globalTaskCount = signal(0);\r\n private loadingAreas = new Map<string, ReturnType<typeof signal<number>>>();\r\n\r\n isLoading(area?: string): Signal<boolean> {\r\n if (!area) {\r\n return computed(() => this.globalTaskCount() > 0);\r\n }\r\n\r\n return computed(() => {\r\n const areaSignal = this.loadingAreas.get(area);\r\n return areaSignal ? areaSignal() > 0 : false;\r\n });\r\n }\r\n\r\n isAnyLoading(): Signal<boolean> {\r\n return computed(() => {\r\n if (this.globalTaskCount() > 0) return true;\r\n for (const areaSignal of this.loadingAreas.values()) {\r\n if (areaSignal() > 0) return true;\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n setLoading(value: boolean, area?: string): void {\r\n if (!area) {\r\n this.updateTaskCount(this.globalTaskCount, value);\r\n } else {\r\n this.updateNamedAreaLoading(area, value);\r\n }\r\n }\r\n\r\n resetLoading(area?: string): void {\r\n if (!area) {\r\n this.globalTaskCount.set(0);\r\n } else if (this.loadingAreas.has(area)) {\r\n this.loadingAreas.get(area)!.set(0);\r\n this.loadingAreas.delete(area);\r\n }\r\n }\r\n\r\n private updateNamedAreaLoading(area: string, increment: boolean): void {\r\n let areaSignal = this.loadingAreas.get(area);\r\n if (!areaSignal && increment) {\r\n areaSignal = signal(0);\r\n this.loadingAreas.set(area, areaSignal);\r\n }\r\n\r\n if (areaSignal) {\r\n areaSignal.update(count => {\r\n const newCount = increment ? count + 1 : Math.max(0, count - 1);\r\n if (newCount === 0) {\r\n this.loadingAreas.delete(area);\r\n }\r\n return newCount;\r\n });\r\n }\r\n }\r\n\r\n private updateTaskCount(taskCount: ReturnType<typeof signal<number>>, increment: boolean): void {\r\n taskCount.update(count => increment ? count + 1 : Math.max(0, count - 1));\r\n }\r\n\r\n}\r\n","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, ViewChild, AfterViewInit } from '@angular/core';\r\nimport { PtrButtonComponent } from '../../ptr-button/ptr-button.component';\r\n\r\n@Component({\n selector: 'ptr-dialog',\n imports: [\n PtrButtonComponent\n ],\n templateUrl: './ptr-dialog.component.html',\n styleUrls: [\"./ptr-dialog.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrDialogComponent implements AfterViewInit {\r\n\r\n @ViewChild('dialogElement') dialogElement!: ElementRef<HTMLDialogElement>;\r\n\r\n @Input() title = '';\r\n @Input() message = '';\r\n @Input() buttonText = 'Confirm';\r\n @Input() buttonStyle: 'normal' | 'error' | 'secondary' = 'normal';\r\n\r\n @Output() closed = new EventEmitter<boolean | null>();\r\n\r\n ngAfterViewInit() {\r\n this.dialogElement.nativeElement.showModal();\r\n }\r\n\r\n close() {\r\n this.dialogElement.nativeElement.close();\r\n }\r\n\r\n confirm() {\r\n this.closed.emit(true);\r\n this.close();\r\n }\r\n\r\n onClose() {\r\n this.closed.emit(null);\r\n }\r\n\r\n}\r\n","<dialog #dialogElement class=\"ptr-modal\" (close)=\"onClose()\">\r\n <div class=\"ptr-modal__content\">\r\n\r\n <div class=\"ptr-modal__header\">\r\n <h2 class=\"ptr-modal__title\">{{title}}</h2>\r\n <button class=\"ptr-modal__close\" (click)=\"close()\" aria-label=\"Close dialog\">&times;</button>\r\n </div>\r\n\r\n <p>{{ message }}</p>\r\n <div class=\"ptr-modal__actions\">\r\n <ptr-button buttonStyle=\"secondary\" (clicked)=\"close()\" [isSmallSize]=\"true\">Cancel</ptr-button>\r\n <ptr-button class=\"ml-auto\" [buttonStyle]=\"buttonStyle\" (clicked)=\"confirm()\"\r\n [isSmallSize]=\"true\">{{buttonText}}</ptr-button>\r\n </div>\r\n\r\n </div>\r\n</dialog>\r\n","import { ApplicationRef, ComponentRef, createComponent, EnvironmentInjector, Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { PtrDialogComponent } from './ptr-dialog/ptr-dialog.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PtrDialogService {\r\n\r\n private dialogComponentRef: ComponentRef<PtrDialogComponent> | null = null;\r\n\r\n constructor(\r\n private appRef: ApplicationRef,\r\n private injector: EnvironmentInjector\r\n ) { }\r\n\r\n open(options: {\r\n title: string;\r\n message: string;\r\n buttonText?: string;\r\n buttonStyle?: 'normal' | 'error' | 'secondary';\r\n }): Observable<boolean> {\r\n const dialogResult$ = new Subject<boolean>();\r\n\r\n this.dialogComponentRef = createComponent(PtrDialogComponent, {\r\n environmentInjector: this.injector,\r\n });\r\n\r\n const { instance } = this.dialogComponentRef;\r\n\r\n instance.title = options.title;\r\n instance.message = options.message;\r\n instance.buttonText = options.buttonText || 'Confirm';\r\n instance.buttonStyle = options.buttonStyle || 'normal';\r\n\r\n instance.closed.subscribe((result: boolean | null) => {\r\n this.removeDialog();\r\n dialogResult$.next(result ?? false);\r\n dialogResult$.complete();\r\n });\r\n\r\n document.body.appendChild(this.dialogComponentRef.location.nativeElement);\r\n this.appRef.attachView(this.dialogComponentRef.hostView);\r\n\r\n return dialogResult$.asObservable();\r\n }\r\n\r\n private removeDialog() {\r\n if (this.dialogComponentRef) {\r\n this.appRef.detachView(this.dialogComponentRef.hostView);\r\n this.dialogComponentRef.destroy();\r\n this.dialogComponentRef = null;\r\n }\r\n }\r\n\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild } from '@angular/core';\r\n\r\n@Component({\n selector: 'ptr-tooltip',\n imports: [],\n templateUrl: './ptr-tooltip.component.html',\n styleUrls: [\"./ptr-tooltip.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrTooltipComponent {\r\n\r\n @Input() content = '';\r\n\r\n @ViewChild('tooltipDialog') tooltipDialog!: ElementRef<HTMLDialogElement>;\r\n\r\n private tooltipTimer: any;\r\n\r\n showTooltip() {\r\n clearTimeout(this.tooltipTimer);\r\n this.tooltipTimer = setTimeout(() => {\r\n this.tooltipDialog.nativeElement.show();\r\n }, 200); // Small delay to prevent flickering on quick mouse movements\r\n }\r\n\r\n hideTooltip() {\r\n clearTimeout(this.tooltipTimer);\r\n this.tooltipTimer = setTimeout(() => {\r\n this.tooltipDialog.nativeElement.close();\r\n }, 200); // Small delay to allow moving mouse to tooltip\r\n }\r\n\r\n}\r\n","<span (mouseenter)=\"showTooltip()\" (mouseleave)=\"hideTooltip()\" class=\"tooltip-trigger\">\r\n <ng-content></ng-content>\r\n</span>\r\n<dialog #tooltipDialog class=\"ptr-tooltip\">\r\n <div class=\"ptr-tooltip__content\">{{ content }}</div>\r\n</dialog>","import { ChangeDetectionStrategy, Component, computed, inject, Input } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\r\nimport { filter, distinctUntilChanged } from 'rxjs';\r\nimport { BreadcrumbRouteInfo, PtrBreadcrumb } from './interfaces';\r\n@Component({\n selector: 'ptr-breadcrumbs',\n imports: [RouterModule],\n templateUrl: './ptr-breadcrumbs.component.html',\n styleUrl: './ptr-breadcrumbs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrBreadcrumbsComponent {\r\n\r\n @Input() showFirstSeparator = true;\r\n\r\n private router = inject(Router);\r\n private activatedRoute = inject(ActivatedRoute);\r\n\r\n private routeEvents = toSignal(\r\n this.router.events.pipe(\r\n filter(event => event instanceof NavigationEnd),\r\n distinctUntilChanged()\r\n )\r\n );\r\n\r\n breadcrumbs = computed(() => {\r\n this.routeEvents();\r\n return this.createBreadcrumbs(this.activatedRoute.root);\r\n });\r\n\r\n private createBreadcrumbs(route: ActivatedRoute, routeUrl = '', breadcrumbs: PtrBreadcrumb[] = []): PtrBreadcrumb[] {\r\n const routeChildren: ActivatedRoute[] = route.children;\r\n if (routeChildren.length === 0) {\r\n return breadcrumbs;\r\n }\r\n for (const child of routeChildren) {\r\n const routeURL: string = child.snapshot.url.map(segment => segment.path).join('/');\r\n if (routeURL !== '') {\r\n routeUrl += `/${routeURL}`;\r\n }\r\n const { label, url } = this.getLabelForRoute(child);\r\n\r\n // Skip if the label is undefined or empty and the path is empty\r\n if (label && (!breadcrumbs.length || breadcrumbs[breadcrumbs.length - 1].label !== label)) {\r\n breadcrumbs.push({ label, url: url ?? routeUrl });\r\n }\r\n\r\n return this.createBreadcrumbs(child, routeUrl, breadcrumbs);\r\n }\r\n return breadcrumbs;\r\n }\r\n\r\n private getLabelForRoute(route: ActivatedRoute): BreadcrumbRouteInfo {\r\n const breadcrumbReturnInfo: BreadcrumbRouteInfo = {};\r\n const customBreadcrumb = route.snapshot.data['breadcrumb'] as BreadcrumbRouteInfo | undefined;\r\n\r\n if (customBreadcrumb) {\r\n if (customBreadcrumb.label) {\r\n breadcrumbReturnInfo.label = customBreadcrumb.label;\r\n }\r\n if (customBreadcrumb.url) {\r\n breadcrumbReturnInfo.url = customBreadcrumb.url;\r\n }\r\n } else if (route.snapshot.title) {\r\n breadcrumbReturnInfo.label = route.snapshot.title;\r\n }\r\n\r\n return breadcrumbReturnInfo;\r\n }\r\n\r\n}\r\n","@if (breadcrumbs().length > 0) {\n <nav aria-label=\"breadcrumb\" class=\"breadcrumb-wrapper\">\n <ol class=\"breadcrumb\" [class.breadcrumb--show-first-separator]=\"showFirstSeparator\">\n @for (breadcrumb of breadcrumbs(); track breadcrumb.label; let last = $last) {\n <li class=\"breadcrumb-item\" [class.breadcrumb-item--active]=\"last\">\n @if (!last) {\n <a class=\"breadcrumb-item-label\" [routerLink]=\"breadcrumb.url\">{{ breadcrumb.label }}</a>\n }\n @if (last) {\n <span class=\"breadcrumb-item-label\">{{ breadcrumb.label }}</span>\n }\n </li>\n }\n </ol>\n </nav>\n}\n","import { ChangeDetectionStrategy, Component, Input, signal } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ptr-tab',\r\n standalone: true,\r\n template: '@if(active()){<ng-content></ng-content>}',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PtrTabComponent {\r\n @Input() label!: string;\r\n @Input() link?: string;\r\n\r\n active = signal(false);\r\n}\r\n","\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ContentChildren, DestroyRef, effect, ElementRef, inject, QueryList, signal, ViewChildren } from '@angular/core';\r\nimport { Router, RouterModule } from '@angular/router';\r\nimport { PtrTabComponent } from '../ptr-tab/ptr-tab.component';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n\r\n@Component({\n selector: 'ptr-tabs',\n imports: [RouterModule],\n templateUrl: './ptr-tabs.component.html',\n styleUrl: './ptr-tabs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrTabsComponent implements AfterViewInit {\r\n\r\n @ContentChildren(PtrTabComponent) tabComponents!: QueryList<PtrTabComponent>;\r\n @ViewChildren('tabButton') buttons!: QueryList<ElementRef>;\r\n\r\n private router = inject(Router);\r\n private destroyRef = inject(DestroyRef);\r\n\r\n tabs = signal<PtrTabComponent[]>([]);\r\n activeTabIndex = signal(0);\r\n useLinks = signal(false);\r\n sliderPosition = signal({ transform: 'translateX(0)', width: '0' });\r\n\r\n constructor() {\r\n effect(() => {\r\n const activeTab = this.tabs().find(tab => tab.active());\r\n if (activeTab?.link) {\r\n this.router.navigate([activeTab.link]);\r\n }\r\n this.updateSliderPosition();\r\n }, { allowSignalWrites: true });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.tabComponents.changes\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => {\r\n this.updateTabs();\r\n });\r\n this.updateTabs();\r\n }\r\n\r\n updateTabs() {\r\n this.tabs.set(this.tabComponents.toArray());\r\n this.useLinks.set(this.tabs().some(tab => !!tab.link));\r\n if (this.tabs().length > 0 && !this.tabs().some(tab => tab.active())) {\r\n this.selectTab(0);\r\n } else {\r\n this.updateSliderPosition();\r\n }\r\n }\r\n\r\n selectTab(index: number) {\r\n this.tabs().forEach((tab, i) => tab.active.set(i === index));\r\n this.activeTabIndex.set(index);\r\n }\r\n\r\n updateSliderPosition() {\r\n const activeButton = this.buttons?.get(this.activeTabIndex())?.nativeElement;\r\n if (activeButton) {\r\n const { offsetLeft, offsetWidth } = activeButton;\r\n this.sliderPosition.set({\r\n transform: `translateX(${offsetLeft}px)`,\r\n width: `${offsetWidth}px`\r\n });\r\n }\r\n }\r\n\r\n}\r\n","<div class=\"tabs-container\" role=\"tablist\">\r\n @for (tab of tabs(); track $index; let i = $index) {\r\n <button #tabButton [attr.role]=\"tab.link ? 'link' : 'tab'\" [attr.aria-selected]=\"tab.active()\"\r\n [class.active]=\"tab.active()\" (click)=\"selectTab(i)\" [routerLink]=\"tab.link\">{{tab.label}}</button>\r\n }\r\n\r\n <div class=\"slider\" [style.transform]=\"sliderPosition().transform\" [style.width]=\"sliderPosition().width\"></div>\r\n</div>\r\n\r\n@if (!useLinks()) {\r\n<div class=\"tab-content\">\r\n <ng-content></ng-content>\r\n</div>\r\n}\r\n","import { ApplicationRef, ComponentRef, createComponent, DestroyRef, EnvironmentInjector, inject, Injectable, Injector, signal } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { timer } from 'rxjs';\r\nimport { PtrToast } from './interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PtrToasterService {\r\n\r\n private destroyRef = inject(DestroyRef);\r\n private injector = inject(Injector);\r\n private environmentInjector = inject(EnvironmentInjector);\r\n private appRef = inject(ApplicationRef);\r\n\r\n private toasts = signal<PtrToast[]>([]);\r\n private counter = 0;\r\n private toasterComponentRef: ComponentRef<unknown> | null = null;\r\n\r\n constructor() {\r\n this.injectToasterComponent();\r\n }\r\n\r\n private injectToasterComponent() {\r\n if (this.toasterComponentRef) {\r\n return;\r\n }\r\n\r\n import('./ptr-toaster/ptr-toaster.component').then(module => {\r\n this.toasterComponentRef = createComponent(module.PtrToasterComponent, {\r\n environmentInjector: this.environmentInjector,\r\n elementInjector: this.injector\r\n });\r\n\r\n const domElem = this.toasterComponentRef.location.nativeElement;\r\n document.body.appendChild(domElem);\r\n this.appRef.attachView(this.toasterComponentRef.hostView);\r\n });\r\n }\r\n\r\n public getToasts() {\r\n return this.toasts.asReadonly();\r\n }\r\n\r\n public show(message: string, type: PtrToast['type'] = 'info') {\r\n const id = this.counter++;\r\n this.toasts.update(toasts => [...toasts, { id, message, type }]);\r\n\r\n timer(10000)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.remove(id));\r\n }\r\n\r\n public remove(id: number) {\r\n this.toasts.update(toasts => toasts.filter(t => t.id !== id));\r\n }\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\r\nimport { PtrToasterService } from '../ptr-toaster.service';\r\n\r\n@Component({\n selector: 'ptr-toaster',\n imports: [CommonModule],\n templateUrl: './ptr-toaster.component.html',\n styleUrl: './ptr-toaster.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrToasterComponent {\r\n protected toasterService = inject(PtrToasterService);\r\n}\r\n","<div class=\"toaster-container\" aria-live=\"polite\" aria-atomic=\"true\">\r\n @for (toast of toasterService.getToasts()(); track toast.id) {\r\n <div class=\"toast\" [ngClass]=\"toast.type\" role=\"alert\">\r\n <span>{{toast.message}}</span>\r\n <button (click)=\"toasterService.remove(toast.id)\" aria-label=\"Close\"><span>&times;</span></button>\r\n </div>\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of ngx-components\r\n */\r\n\r\nexport * from './lib/menu/menu.component';\r\n\r\nexport * from './lib/forms/interfaces';\r\nexport { PtrFormComponent } from './lib/forms/form/form.component';\r\nexport { PtrSelectComponent } from './lib/forms/input/select/select.component';\r\nexport { PtrInputComponent } from './lib/forms/input/ptr-input/ptr-input.component';\r\n\r\nexport { PtrTitleComponent } from './lib/ptr-title/ptr-title.component';\r\n\r\nexport { PtrLoadingSpinnerComponent } from './lib/loading-spinner/loading-spinner.component';\r\nexport { PtrLoadingSpinnerDirective } from './lib/loading-spinner/loading-spinner.directive';\r\n\r\nexport { PtrLoadingService } from './lib/services/loading.service';\r\n\r\nexport { PtrButtonComponent } from './lib/ptr-button/ptr-button.component';\r\n\r\nexport { PtrDialogService } from './lib/dialog/ptr-dialog.service';\r\nexport { PtrDialogComponent } from './lib/dialog/ptr-dialog/ptr-dialog.component';\r\nexport { PtrTooltipComponent } from './lib/dialog/ptr-tooltip/ptr-tooltip.component';\r\n\r\nexport { PtrBreadcrumbsComponent } from './lib/ptr-breadcrumbs/ptr-breadcrumbs.component';\r\nexport { PtrBreadcrumb } from './lib/ptr-breadcrumbs/interfaces';\r\n\r\nexport { PtrTabsComponent } from './lib/components/tabs/ptr-tabs/ptr-tabs.component';\r\nexport { PtrTabComponent } from './lib/components/tabs/ptr-tab/ptr-tab.component';\r\n\r\nexport { PtrToasterService } from './lib/ptr-toaster/ptr-toaster.service';\r\nexport { PtrToasterComponent } from './lib/ptr-toaster/ptr-toaster/ptr-toaster.component';\r\nexport { PtrToast } from './lib/ptr-toaster/interfaces';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"patter-ngx-components.mjs","sources":["../../../../projects/patter/ngx-components/src/lib/menu/menu.component.ts","../../../../projects/patter/ngx-components/src/lib/menu/menu.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-button/ptr-button.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-button/ptr-button.component.html","../../../../projects/patter/ngx-components/src/lib/forms/shared/ptr-dialog-list/ptr-dialog-list.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/shared/ptr-dialog-list/ptr-dialog-list.component.html","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-select/select.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-select/select.component.html","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-input/ptr-input.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/input/ptr-input/ptr-input.component.html","../../../../projects/patter/ngx-components/src/lib/forms/form/form.component.ts","../../../../projects/patter/ngx-components/src/lib/forms/form/form.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-title/ptr-title.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-title/ptr-title.component.html","../../../../projects/patter/ngx-components/src/lib/loading-spinner/loading-spinner.component.ts","../../../../projects/patter/ngx-components/src/lib/loading-spinner/loading-spinner.directive.ts","../../../../projects/patter/ngx-components/src/lib/services/loading.service.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-dialog/ptr-dialog.component.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-dialog/ptr-dialog.component.html","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-dialog.service.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-tooltip/ptr-tooltip.component.ts","../../../../projects/patter/ngx-components/src/lib/dialog/ptr-tooltip/ptr-tooltip.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-breadcrumbs/ptr-breadcrumbs.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-breadcrumbs/ptr-breadcrumbs.component.html","../../../../projects/patter/ngx-components/src/lib/components/tabs/ptr-tab/ptr-tab.component.ts","../../../../projects/patter/ngx-components/src/lib/components/tabs/ptr-tabs/ptr-tabs.component.ts","../../../../projects/patter/ngx-components/src/lib/components/tabs/ptr-tabs/ptr-tabs.component.html","../../../../projects/patter/ngx-components/src/lib/ptr-toaster/ptr-toaster.service.ts","../../../../projects/patter/ngx-components/src/lib/ptr-toaster/ptr-toaster/ptr-toaster.component.ts","../../../../projects/patter/ngx-components/src/lib/ptr-toaster/ptr-toaster/ptr-toaster.component.html","../../../../projects/patter/ngx-components/src/public-api.ts","../../../../projects/patter/ngx-components/src/patter-ngx-components.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nexport interface PtrMenuItem {\r\n label: string;\r\n link?: string;\r\n children?: PtrMenuItem[];\r\n}\r\n\r\n@Component({\n selector: 'ptr-menu',\n imports: [RouterModule],\n templateUrl: './menu.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./menu.component.scss']\n})\r\nexport class PtrMenuComponent {\r\n\r\n @Input() menuItems: PtrMenuItem[] = [];\r\n\r\n}\r\n","<nav class=\"ptr-menu\">\n <ul class=\"menu\">\n @for (item of menuItems; track item.label) {\n <li class=\"menu-item\" routerLinkActive=\"current_page_item\" [routerLinkActiveOptions]=\"{exact: true}\">\n <a [routerLink]=\"item.link || '#'\">{{item.label}}</a>\n </li>\n }\n </ul>\n</nav>\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, EventEmitter, HostBinding, Input, Output, signal } from '@angular/core';\r\nimport { RouterLink } from '@angular/router';\r\n\r\ntype ButtonStyle = 'normal' | 'error' | 'secondary' | 'icon';\r\n\r\n@Component({\n selector: 'ptr-button',\n imports: [CommonModule, RouterLink],\n templateUrl: './ptr-button.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrButtonComponent {\r\n\r\n @HostBinding('class') get hostClasses() {\r\n const hostClass = [];\r\n if (this.style() === 'secondary') {\r\n hostClass.push('is-style-outline');\r\n }\r\n if (this.style() === 'error') {\r\n hostClass.push('is-style-error-button');\r\n }\r\n if (this.style() === 'icon') {\r\n hostClass.push('is-style-icon-button');\r\n }\r\n if (this.smallSize()) {\r\n hostClass.push('is-style-smaller-element');\r\n }\r\n return hostClass.join(' ');\r\n }\r\n\r\n style = signal<ButtonStyle>('normal');\r\n type = signal<'button' | 'submit' | 'reset'>('button');\r\n disabled = signal(false);\r\n href = signal<string | null>(null);\r\n routerLink = signal<string | (string|number)[] | null>(null);\r\n additionalClasses = signal('');\r\n smallSize = signal(false);\r\n\r\n @Input() set buttonStyle(value: ButtonStyle) {\r\n this.style.set(value);\r\n }\r\n\r\n @Input() set buttonType(value: 'button' | 'submit' | 'reset') {\r\n this.type.set(value);\r\n }\r\n\r\n @Input() set isDisabled(value: boolean) {\r\n this.disabled.set(value);\r\n }\r\n\r\n @Input() set hrefLink(value: string | null) {\r\n this.href.set(value);\r\n }\r\n\r\n @Input() set routerLinkValue(value: string | (string|number)[] | null) {\r\n this.routerLink.set(value);\r\n }\r\n\r\n @Input() set extraClasses(value: string) {\r\n this.additionalClasses.set(value);\r\n }\r\n\r\n @Input() set isSmallSize(value: boolean) {\r\n if (value) {\r\n this.smallSize.set(true);\r\n }\r\n }\r\n\r\n @Input() set isIconButton(value: boolean) {\r\n if (value) {\r\n this.style.set('icon');\r\n }\r\n }\r\n\r\n @Input() ariaLabel? = '';\r\n\r\n @Output() clicked = new EventEmitter<Event>();\r\n\r\n isLink = computed(() => !!this.href() || !!this.routerLink());\r\n\r\n buttonClasses = computed(() => {\r\n const classes = ['wp-block-button__link'];\r\n\r\n if (this.style() !== 'normal') {\r\n classes.push(`wp-block-button__link--${this.style()}`);\r\n }\r\n\r\n if (this.disabled() && this.isLink()) {\r\n classes.push('disabled');\r\n }\r\n\r\n if (this.additionalClasses()) {\r\n classes.push(this.additionalClasses());\r\n }\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n onClick(event: Event): void {\r\n if (this.disabled()) {\r\n event.preventDefault();\r\n return;\r\n }\r\n this.clicked.emit(event);\r\n }\r\n\r\n}\r\n","<ng-template #contentTpl>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n\r\n@if (isLink()) {\r\n<a [attr.href]=\"href()\" [routerLink]=\"routerLink()\" [class]=\"buttonClasses()\" [attr.disabled]=\"disabled() ? '' : null\"\r\n (click)=\"onClick($event)\" [attr.aria-label]=\"ariaLabel ?? null\">\r\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\r\n</a>\r\n} @else {\r\n<button [type]=\"type()\" [class]=\"buttonClasses()\" [disabled]=\"disabled()\" (click)=\"onClick($event)\"\r\n [attr.aria-label]=\"ariaLabel ?? null\">\r\n <ng-container [ngTemplateOutlet]=\"contentTpl\"></ng-container>\r\n</button>\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, EventEmitter, Input, Output, signal, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { PtrOption, PtrOptionGroup } from '../../interfaces';\r\n\r\ninterface ProcessedOption {\r\n type: 'option' | 'group';\r\n label: string;\r\n value?: string;\r\n options?: ProcessedOption[];\r\n}\r\n\r\n@Component({\n selector: 'ptr-dialog-list',\n imports: [\n FormsModule\n ],\n templateUrl: './ptr-dialog-list.component.html',\n styleUrls: ['./ptr-dialog-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrDialogListComponent {\r\n\r\n @Input() set options(value: (PtrOption | PtrOptionGroup | string)[] | undefined) {\r\n this._options.set(this.processOptions(value));\r\n }\r\n @Input() showSearch = false;\r\n @Input() searchPlaceholder = 'Search...';\r\n @Input() dialogTitle? = '';\r\n\r\n @Output() selectionChange = new EventEmitter<string | null>();\r\n @Output() dialogClosed = new EventEmitter<void>();\r\n @Output() searchTermChanged = new EventEmitter<string>();\r\n\r\n @ViewChild('dialog') dialog!: ElementRef<HTMLDialogElement>;\r\n\r\n private _options = signal<ProcessedOption[]>([]);\r\n value = signal<string | null>(null);\r\n searchTerm = signal('');\r\n highlightedIndex = signal(-1);\r\n isOpen = signal(false);\r\n private componentId = Math.random().toString(36).substring(2);\r\n listId = `${this.componentId}-list`;\r\n\r\n filteredOptions = computed(() => {\r\n const term = this.searchTerm().toLowerCase();\r\n return this._options().flatMap(item => {\r\n if (item.type === 'group') {\r\n const filteredOptions = item.options!.filter(option =>\r\n option.label.toLowerCase().includes(term)\r\n );\r\n return filteredOptions.length > 0 ? [{ ...item, options: filteredOptions }] : [];\r\n } else {\r\n return item.label.toLowerCase().includes(term) ? [item] : [];\r\n }\r\n });\r\n });\r\n\r\n openDialog() {\r\n this.dialog.nativeElement.show();\r\n this.adjustDialogPosition();\r\n this.isOpen.set(true);\r\n }\r\n\r\n openDialogSilent() {\r\n this.dialog.nativeElement.setAttribute('open', 'true');\r\n this.adjustDialogPosition();\r\n this.isOpen.set(true);\r\n }\r\n\r\n closeDialog() {\r\n this.dialog.nativeElement.close();\r\n this.isOpen.set(false);\r\n this.searchTerm.set('');\r\n this.highlightedIndex.set(-1);\r\n this.dialogClosed.emit();\r\n this.resetDialogPosition();\r\n }\r\n\r\n updateSearchTerm(term: string) {\r\n this.searchTerm.set(term);\r\n this.highlightedIndex.set(-1);\r\n this.searchTermChanged.emit(term);\r\n }\r\n\r\n onDialogKeyDown(event: KeyboardEvent) {\r\n if (event.key === 'Escape') {\r\n this.closeDialog();\r\n event.preventDefault();\r\n }\r\n\r\n // When there is no search input and there are options, move input into the first option\r\n if (!this.showSearch && this.filteredOptions().length > 0 && this.highlightedIndex() === -1) {\r\n if (event.key === 'Tab' || event.key === 'ArrowDown') {\r\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\r\n this.focusOption();\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n onInputKeyDown(event: KeyboardEvent) {\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\r\n this.focusOption();\r\n event.preventDefault();\r\n break;\r\n case 'Escape':\r\n this.closeDialog();\r\n event.preventDefault();\r\n break;\r\n }\r\n }\r\n\r\n onOptionKeyDown(event: KeyboardEvent, optionValue: string) {\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n this.highlightedIndex.update(i => Math.min(i + 1, this.getTotalOptionsCount() - 1));\r\n this.focusOption();\r\n event.preventDefault();\r\n break;\r\n case 'ArrowUp':\r\n this.highlightedIndex.update(i => Math.max(i - 1, -1));\r\n this.focusOption();\r\n event.preventDefault();\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n this.selectOption(optionValue);\r\n event.preventDefault();\r\n break;\r\n }\r\n }\r\n\r\n focusOption() {\r\n if (this.highlightedIndex() >= 0) {\r\n const options = this.dialog.nativeElement.querySelectorAll('li[role=\"option\"]');\r\n (options[this.highlightedIndex()] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n selectOption(optionValue: string) {\r\n this.value.set(optionValue);\r\n this.selectionChange.emit(optionValue);\r\n this.closeDialog();\r\n }\r\n\r\n private getTotalOptionsCount(): number {\r\n return this.filteredOptions().reduce((count, item) => {\r\n if (item.type === 'group') {\r\n return count + item.options!.length;\r\n }\r\n return count + 1;\r\n }, 0);\r\n }\r\n\r\n private processOptions(options: (PtrOption | PtrOptionGroup | string)[] | undefined): ProcessedOption[] {\r\n if (!options) return [];\r\n return options.map(option => {\r\n if (typeof option === 'string') {\r\n return {\r\n type: 'option',\r\n label: option,\r\n value: option\r\n };\r\n } else if ('groupLabel' in option) {\r\n return {\r\n type: 'group',\r\n label: option.groupLabel,\r\n options: option.options.map(subOption => ({\r\n type: 'option',\r\n label: typeof subOption === 'string' ? subOption : subOption.label,\r\n value: typeof subOption === 'string' ? subOption : subOption.value\r\n }))\r\n };\r\n } else {\r\n return {\r\n type: 'option',\r\n label: option.label,\r\n value: option.value\r\n };\r\n }\r\n });\r\n }\r\n\r\n adjustDialogPosition() {\r\n const dialogRect = this.dialog.nativeElement.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n const spaceBelow = viewportHeight - dialogRect.bottom;\r\n if (spaceBelow > 0) {\r\n this.dialog.nativeElement.style.top = '100%';\r\n } else {\r\n this.dialog.nativeElement.style.bottom = '100%';\r\n }\r\n }\r\n\r\n resetDialogPosition() {\r\n this.dialog.nativeElement.style.top = '';\r\n this.dialog.nativeElement.style.bottom = '';\r\n }\r\n\r\n}\r\n","<dialog #dialog class=\"ptr-dialog-list\" (keydown)=\"onDialogKeyDown($event)\" [attr.aria-label]=\"'Options'\">\r\n\r\n @if(dialogTitle) {\r\n <p class=\"dialog-title\">{{dialogTitle}}</p>\r\n }\r\n\r\n @if (showSearch) {\r\n <div>\r\n <input #searchInput [ngModel]=\"searchTerm()\" (ngModelChange)=\"updateSearchTerm($event)\"\r\n [attr.aria-expanded]=\"isOpen()\" [attr.aria-owns]=\"listId\" (keydown)=\"onInputKeyDown($event)\"\r\n [attr.aria-autocomplete]=\"'list'\" role=\"combobox\" [attr.aria-controls]=\"listId\" [placeholder]=\"searchPlaceholder\"\r\n class=\"search-input\">\r\n </div>\r\n }\r\n\r\n <ul [attr.id]=\"listId\" role=\"listbox\" class=\"option-list\">\r\n @for (item of filteredOptions(); track item.label) {\r\n @if (item.type === 'option') {\r\n <li role=\"option\" [attr.id]=\"item.value\" [attr.aria-selected]=\"item.value === value()\"\r\n [class.selected]=\"item.value === value()\" [class.highlighted]=\"item === filteredOptions()[highlightedIndex()]\"\r\n (click)=\"selectOption(item.value!)\" (keydown)=\"onOptionKeyDown($event, item.value!)\"\r\n [attr.tabindex]=\"item === filteredOptions()[highlightedIndex()] ? 0 : -1\">\r\n {{ item.label }}\r\n </li>\r\n } @else {\r\n <li role=\"group\" [attr.aria-label]=\"item.label\">\r\n {{ item.label }}\r\n </li>\r\n @for (option of item.options!; track option.value) {\r\n <li role=\"option\" [attr.id]=\"option.value\" [attr.aria-selected]=\"option.value === value()\"\r\n [class.selected]=\"option.value === value()\" [class.highlighted]=\"option === filteredOptions()[highlightedIndex()]\"\r\n (click)=\"selectOption(option.value!)\" (keydown)=\"onOptionKeyDown($event, option.value!)\"\r\n [attr.tabindex]=\"option === filteredOptions()[highlightedIndex()] ? 0 : -1\">\r\n {{ option.label }}\r\n </li>\r\n }\r\n }\r\n }\r\n </ul>\r\n\r\n</dialog>\r\n","/* eslint-disable @typescript-eslint/no-empty-function */\r\nimport { ChangeDetectionStrategy, Component, computed, ElementRef, EventEmitter, forwardRef, HostListener, Input, Output, signal, ViewChild } from '@angular/core';\r\nimport { FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { PtrOption, PtrOptionGroup } from '../../interfaces';\r\nimport { PtrDialogListComponent } from '../../shared/ptr-dialog-list/ptr-dialog-list.component';\r\n\r\n@Component({\n selector: 'ptr-select',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PtrDialogListComponent\n ],\n templateUrl: './select.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./select.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PtrSelectComponent),\n multi: true\n }\n ]\n})\r\nexport class PtrSelectComponent {\r\n\r\n @Input() options: (PtrOption | PtrOptionGroup | string)[] | undefined;\r\n @Input() showSearch = true;\r\n @Input() placeholder?: string | null = 'Select an option';\r\n @Input() label? = '';\r\n @Input() description? = '';\r\n @Input() labelPosition?: 'top' | 'inline' = 'top';\r\n\r\n @Output() selectionChange = new EventEmitter<string | null>();\r\n\r\n @ViewChild('selectButton') selectButton!: ElementRef<HTMLButtonElement>;\r\n @ViewChild('dialogList') dialogList!: PtrDialogListComponent;\r\n\r\n value = signal<string | null>(null);\r\n\r\n displayValue = computed(() => {\r\n const currentValue = this.value();\r\n if (currentValue === null) return null;\r\n const allOptions = this.flattenOptions(this.options);\r\n const selectedOption = allOptions?.find(option => option.value === currentValue);\r\n return selectedOption ? selectedOption.label : null;\r\n });\r\n\r\n effectivePlaceholder = computed(() => {\r\n return this.placeholder ?? 'Select an option';\r\n });\r\n\r\n private componentId = Math.random().toString(36).substring(2);\r\n labelId = `${this.componentId}-label`;\r\n inputId = `${this.componentId}-input`;\r\n\r\n onChange: (value: string | null) => void = () => { };\r\n onTouched: () => void = () => { };\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n if (!this.dialogList.dialog.nativeElement.contains(event.target as Node) &&\r\n !(event.target as HTMLElement).closest('.select-button') &&\r\n this.dialogList.isOpen()) {\r\n this.dialogList.closeDialog();\r\n }\r\n }\r\n\r\n toggleDialog() {\r\n if (this.dialogList.isOpen()) {\r\n this.dialogList.closeDialog();\r\n } else {\r\n this.dialogList.openDialog();\r\n }\r\n }\r\n\r\n onOptionSelected(optionValue: string | null) {\r\n this.value.set(optionValue);\r\n this.onChange(optionValue);\r\n this.onTouched();\r\n this.selectionChange.emit(optionValue);\r\n }\r\n\r\n writeValue(value: string): void {\r\n this.value.set(value);\r\n }\r\n\r\n registerOnChange(fn: (value: string | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n if (this.selectButton?.nativeElement) {\r\n this.selectButton.nativeElement.disabled = isDisabled;\r\n }\r\n }\r\n\r\n private flattenOptions(options: (PtrOption | PtrOptionGroup | string)[] | undefined): PtrOption[] {\r\n if (!options) return [];\r\n\r\n return options.flatMap(option => {\r\n if (typeof option === 'string') {\r\n return { value: option, label: option };\r\n } else if ('groupLabel' in option) {\r\n return option.options;\r\n } else {\r\n return option;\r\n }\r\n });\r\n }\r\n\r\n}\r\n","<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\r\n@if(description){\r\n<div class=\"gfield_description\">{{description}}</div>\r\n}\r\n<div class=\"gfield--input-wrapper ginput_container\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\r\n\r\n <button #selectButton type=\"button\" class=\"select-button\" [attr.id]=\"inputId\" [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-expanded]=\"dialogList.isOpen()\" [attr.aria-labelledby]=\"labelId\" (click)=\"toggleDialog()\">\r\n <span [attr.id]=\"labelId\">@if (displayValue(); as dValue) { {{dValue}} } @else { {{effectivePlaceholder()}} }</span>\r\n </button>\r\n\r\n @if (labelPosition === 'inline') {\r\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\r\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\r\n <span>{{label}}</span>\r\n </legend>\r\n </fieldset>\r\n }\r\n\r\n <ptr-dialog-list #dialogList [options]=\"options\" (selectionChange)=\"onOptionSelected($event)\"\r\n [showSearch]=\"showSearch\" />\r\n\r\n</div>\r\n","/* eslint-disable @typescript-eslint/no-empty-function */\r\nimport { ChangeDetectionStrategy, Component, ElementRef, forwardRef, HostListener, Input, OnInit, signal, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\r\nimport { PtrDialogListComponent } from '../../shared/ptr-dialog-list/ptr-dialog-list.component';\r\nimport { debounceTime, distinctUntilChanged, Observable, of, Subject, switchMap } from 'rxjs';\r\n\r\n\r\n@Component({\n selector: 'ptr-input',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n PtrDialogListComponent\n],\n templateUrl: './ptr-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => PtrInputComponent),\n multi: true\n }\n ]\n})\r\nexport class PtrInputComponent implements ControlValueAccessor, OnInit {\r\n\r\n @Input() type: 'text' | 'number' | 'email' | 'password' | 'search' | 'hidden' | 'date' | 'textarea' = 'text';\r\n @Input() label = '';\r\n @Input() placeholder?: string | null = '';\r\n @Input() autocomplete? = '';\r\n @Input() description? = '';\r\n @Input() dialogHelpText? = '';\r\n @Input() searchFn?: (term: string) => Observable<string[]>;\r\n @Input() labelPosition?: 'top' | 'inline' = 'top';\r\n\r\n @ViewChild('input') input!: ElementRef<HTMLInputElement>;\r\n @ViewChild('dialogList') dialogList!: PtrDialogListComponent;\r\n\r\n private componentId = Math.random().toString(36).substring(2);\r\n private minChars = 3;\r\n private searchTerms = new Subject<string>();\r\n private hasSelectedOption = false;\r\n\r\n inputId = `${this.componentId}-input`;\r\n inputValue = signal('');\r\n searchResultOptions = signal<string[]>([]);\r\n onChange: (value: string) => void = () => { };\r\n onTouched: () => void = () => { };\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n if (this.searchFn) {\r\n if (!this.dialogList?.dialog.nativeElement.contains(event.target as Node) && this.dialogList?.isOpen()) {\r\n this.dialogList.closeDialog();\r\n }\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.setupSearch();\r\n }\r\n\r\n private setupSearch() {\r\n if (this.searchFn) {\r\n this.searchTerms.pipe(\r\n debounceTime(300),\r\n distinctUntilChanged(),\r\n switchMap(term => term.length >= this.minChars ? this.searchFn!(term) : of([]))\r\n ).subscribe(results => {\r\n this.searchResultOptions.set(results);\r\n if (results.length > 0 && this.dialogList) {\r\n this.dialogList.openDialogSilent();\r\n } else {\r\n this.dialogList.closeDialog();\r\n }\r\n });\r\n }\r\n }\r\n\r\n onInputChange(value: string) {\r\n this.inputValue.set(value);\r\n this.onChange(value);\r\n if (!this.hasSelectedOption && this.searchFn && value.length >= this.minChars) {\r\n this.searchTerms.next(value);\r\n }\r\n this.hasSelectedOption = false;\r\n }\r\n\r\n onOptionSelected(optionValue: string | null) {\r\n this.hasSelectedOption = true;\r\n\r\n this.inputValue.set(optionValue ?? '');\r\n this.onChange(optionValue ?? '');\r\n if (this.dialogList) {\r\n this.dialogList.closeDialog();\r\n }\r\n }\r\n\r\n onFocus() {\r\n if (this.searchResultOptions().length > 0 && this.dialogList && !this.hasSelectedOption) {\r\n this.dialogList.openDialogSilent();\r\n }\r\n }\r\n\r\n onBlur() {\r\n this.onTouched();\r\n }\r\n\r\n writeValue(value: string): void {\r\n this.inputValue.set(value ?? '');\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n if (this.input?.nativeElement) {\r\n this.input.nativeElement.disabled = isDisabled;\r\n }\r\n }\r\n\r\n}\r\n","<label class=\"gfield_label gform-field-label\" [attr.for]=\"inputId\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">{{ label }}</label>\r\n@if(description){\r\n <div class=\"gfield_description\">{{description}}</div>\r\n}\r\n<div class=\"gfield--input-wrapper ginput_container\"\r\n [class.gfield--input-wrapper--label-inline]=\"labelPosition === 'inline'\">\r\n\r\n @switch (type) {\r\n @case ('textarea') {\r\n <textarea #input [id]=\"inputId\" [attr.autocomplete]=\"autocomplete || null\" [attr.placeholder]=\"placeholder || null\"\r\n [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [rows]=\"3\"></textarea>\r\n }\r\n @default {\r\n <input #input [id]=\"inputId\" [type]=\"type\" [attr.autocomplete]=\"autocomplete || null\"\r\n [attr.placeholder]=\"placeholder || null\" [ngModel]=\"inputValue()\" (ngModelChange)=\"onInputChange($event)\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\" />\r\n }\r\n }\r\n\r\n @if (labelPosition === 'inline') {\r\n <fieldset aria-hidden=\"true\" class=\"input-fieldset\">\r\n <legend class=\"input-legend gfield_label gform-field-label gform-field-label--hidden\">\r\n <span>{{label}}</span>\r\n </legend>\r\n </fieldset>\r\n }\r\n\r\n @if (searchFn) {\r\n <ptr-dialog-list #dialogList [options]=\"searchResultOptions()\" (selectionChange)=\"onOptionSelected($event)\"\r\n [dialogTitle]=\"dialogHelpText\" />\r\n }\r\n\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { PtrConditionalRule, PtrFormConfig, PtrFormField } from '../interfaces';\r\nimport { PtrButtonComponent } from '../../ptr-button/ptr-button.component';\r\nimport { PtrSelectComponent } from \"../input/ptr-select/select.component\";\r\nimport { PtrInputComponent } from '../input/ptr-input/ptr-input.component';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Component({\r\n selector: 'ptr-form',\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n PtrButtonComponent,\r\n PtrSelectComponent,\r\n PtrInputComponent\r\n ],\r\n templateUrl: './form.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PtrFormComponent implements OnInit {\r\n\r\n @Input() config!: PtrFormConfig;\r\n @Input() loading = false;\r\n @Input() error: string | null = null;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n @Output() formSubmit = new EventEmitter<any>();\r\n @Output() formGroupCreated = new EventEmitter<FormGroup>();\r\n\r\n formGroup!: FormGroup;\r\n\r\n private fb = inject(FormBuilder);\r\n private cdr = inject(ChangeDetectorRef);\r\n private destroyRef = inject(DestroyRef);\r\n\r\n ngOnInit(): void {\r\n this.buildForm();\r\n this.formGroupCreated.emit(this.formGroup);\r\n this.setupConditionalLogic();\r\n }\r\n\r\n buildForm(): void {\r\n const group: Record<string, unknown> = {};\r\n this.config.fields.forEach(field => {\r\n group[field.name] = [field.value || '', field.validators || []];\r\n });\r\n\r\n this.formGroup = this.fb.group(group, this.config.formValidators ? { validators: this.config.formValidators } : null);\r\n }\r\n\r\n onSubmit(): void {\r\n if (this.formGroup.valid) {\r\n this.formSubmit.emit(this.formGroup.value);\r\n }\r\n }\r\n\r\n public resetForm(): void {\r\n this.formGroup.reset();\r\n this.config.fields.forEach(field => {\r\n const control = this.formGroup.get(field.name);\r\n control?.setValue(field.value || '', { emitEvent: false });\r\n });\r\n this.cdr.markForCheck();\r\n }\r\n\r\n // Conditional logic\r\n setupConditionalLogic(): void {\r\n this.formGroup.valueChanges.pipe(\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe(() => {\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n\r\n isFieldVisible(field: PtrFormField): boolean {\r\n if (!field.conditional?.showWhen) return true;\r\n return this.evaluateConditionalRules(field.conditional.showWhen) as boolean;\r\n }\r\n\r\n getFieldLabel(field: PtrFormField): string {\r\n if (!field.conditional?.label) return field.label;\r\n const conditionalLabel = this.evaluateConditionalRules(field.conditional.label);\r\n return conditionalLabel as string || field.label;\r\n }\r\n\r\n getFieldPlaceholder(field: PtrFormField): string | null {\r\n if (!field.conditional?.placeholder) return field.placeholder || null;\r\n const conditionalPlaceholder = this.evaluateConditionalRules(field.conditional.placeholder);\r\n return conditionalPlaceholder as string || field.placeholder || null;\r\n }\r\n\r\n private evaluateConditionalRules(rules: PtrConditionalRule[]): string | boolean {\r\n for (const rule of rules) {\r\n const fieldValue = this.formGroup.get(rule.field)?.value;\r\n if (fieldValue === rule.value) {\r\n return rule.result;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n}\r\n","<div [class]=\"'gform_wrapper ' + config.formClass\">\r\n\r\n @if (error) {\r\n <div class=\"gform_validation_errors\">\r\n <h2 class=\"gform_submission_error hide_summary\">{{error}}</h2>\r\n </div>\r\n }\r\n\r\n @if (config.title) {\r\n <div class=\"gform_heading\">\r\n <h2 class=\"gform_title\">{{ config.title }}</h2>\r\n </div>\r\n }\r\n\r\n <form [formGroup]=\"formGroup\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <div class=\"gform_fields\">\r\n\r\n @for (field of config.fields; track field.name) {\r\n @if(isFieldVisible(field)) {\r\n\r\n <div class=\"gfield gfield--width-{{field.size}}\" [class.gform_hidden]=\"field.type === 'hidden'\"\r\n [class.gfield_error]=\"formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched\" [class.gfield--label-inline]=\"config.labelPosition === 'inline'\">\r\n\r\n @switch (field.type) {\r\n @case ('select') {\r\n <ptr-select [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [options]=\"field.options\"\r\n [placeholder]=\"getFieldPlaceholder(field)\" [labelPosition]=\"config.labelPosition\" />\r\n }\r\n @default {\r\n <ptr-input [label]=\"getFieldLabel(field)\" [formControlName]=\"field.name\" [type]=\"field.type\"\r\n [placeholder]=\"getFieldPlaceholder(field)\" [autocomplete]=\"field.autocomplete\" [searchFn]=\"field.searchFn\"\r\n [dialogHelpText]=\"field.dialogHelpText\" [labelPosition]=\"config.labelPosition\" />\r\n }\r\n }\r\n\r\n @if (formGroup.get(field.name)?.invalid && formGroup.get(field.name)?.touched) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n @if (formGroup.get(field.name)?.errors?.['required']) {\r\n This field is required.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['email']) {\r\n Please enter a valid email address.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['minlength']) {\r\n Minimum length is {{ formGroup.get(field.name)?.errors?.['minlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['maxlength']) {\r\n Maximum length is {{ formGroup.get(field.name)?.errors?.['maxlength'].requiredLength }} characters.\r\n }\r\n @if (formGroup.get(field.name)?.errors?.['pattern']) {\r\n Please match the required format.\r\n }\r\n </div>\r\n }\r\n @if (field.validationMessages && formGroup.invalid && !formGroup.get(field.name)?.invalid &&\r\n formGroup.get(field.name)?.touched) {\r\n @for (error of formGroup.errors | keyvalue; track error) {\r\n @if (field.validationMessages[error.key]) {\r\n <div class=\"gfield_description validation_message gfield_validation_message\">\r\n {{ field.validationMessages[error.key] }}\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n @if(config.submitText){\r\n <div class=\"gform_footer\">\r\n <ptr-button buttonType=\"submit\" [isDisabled]=\"loading || !formGroup.valid\"\r\n [extraClasses]=\"config.submitFullWidth ? 'gform-button--width-full' : ''\">{{config.submitText}}</ptr-button>\r\n </div>\r\n }\r\n\r\n </form>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject, Input, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, NavigationEnd, Router, TitleStrategy } from '@angular/router';\r\nimport { filter, map, Observable, startWith } from 'rxjs';\r\n\r\n@Component({\n selector: 'ptr-title',\n imports: [CommonModule],\n templateUrl: './ptr-title.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrTitleComponent implements OnInit {\r\n\r\n @Input() styleClass = 'entry-title';\r\n @Input() wrapperStyleClass = '';\r\n @Input() screenReaderOnly = false;\r\n\r\n private router = inject(Router);\r\n private activatedRoute = inject(ActivatedRoute);\r\n private titleStrategy = inject(TitleStrategy);\r\n\r\n displayTitle$!: Observable<string>;\r\n hideTitle$!: Observable<boolean>;\r\n\r\n ngOnInit() {\r\n const routeEvents$ = this.router.events.pipe(\r\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\r\n startWith(null),\r\n map(() => this.getRoute(this.activatedRoute))\r\n );\r\n\r\n this.hideTitle$ = routeEvents$.pipe(\r\n map(route => !!route.snapshot.data['hideTitle'])\r\n );\r\n\r\n this.displayTitle$ = routeEvents$.pipe(\r\n map(route => {\r\n if (route.snapshot.data['hideTitle']) {\r\n return '';\r\n }\r\n // Check for a custom display title in the route data\r\n const customDisplayTitle = route.snapshot.data['displayTitle'];\r\n if (customDisplayTitle) {\r\n return customDisplayTitle;\r\n }\r\n // If no custom display title, use the resolved title from TitleStrategy\r\n const resolvedTitle = this.titleStrategy.getResolvedTitleForRoute(route.snapshot) || '';\r\n return resolvedTitle;\r\n // Remove any common suffix (checking for both ' | ' and ' - ' separators)\r\n // return this.removeCommonSuffix(resolvedTitle);\r\n })\r\n );\r\n }\r\n\r\n private getRoute(route: ActivatedRoute): ActivatedRoute {\r\n while (route.firstChild) {\r\n route = route.firstChild;\r\n }\r\n return route;\r\n }\r\n\r\n}\r\n","@if ((hideTitle$|async) === false) {\r\n @if(wrapperStyleClass) {\r\n <header [class]=\"wrapperStyleClass\" [class.screen-reader-text]=\"screenReaderOnly\">\r\n <h1 [class]=\"styleClass\">{{displayTitle$|async}}</h1>\r\n </header>\r\n } @else {\r\n <h1 [class]=\"styleClass\" [class.screen-reader-text]=\"screenReaderOnly\">{{displayTitle$|async}}</h1>\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\n\r\n@Component({\n selector: 'ptr-loading-spinner',\n imports: [],\n template: `<div class=\"ptr-progress-spinner\"></div>`,\n styleUrls: [\"./loading-spinner.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrLoadingSpinnerComponent { }\r\n","import { ComponentRef, Directive, ElementRef, HostBinding, inject, Input, OnDestroy, Renderer2, ViewContainerRef } from '@angular/core';\r\nimport { PtrLoadingSpinnerComponent } from './loading-spinner.component';\r\n\r\n@Directive({\r\n selector: '[ptrLoadingSpinner]',\r\n standalone: true\r\n})\r\nexport class PtrLoadingSpinnerDirective implements OnDestroy {\r\n\r\n private targetEl = inject(ElementRef);\r\n private viewContainerRef = inject(ViewContainerRef);\r\n private renderer = inject(Renderer2);\r\n\r\n private spinnerInstance?: ComponentRef<PtrLoadingSpinnerComponent>;\r\n private overlay?: HTMLElement;\r\n\r\n @HostBinding('style.position') hostPosition = 'relative';\r\n\r\n @Input({ required: true }) set ptrLoadingSpinner(loading: boolean) {\r\n if (loading) {\r\n this.addBlurEffect();\r\n this.addOverlay();\r\n this.addProgressSpinnerComponent();\r\n } else {\r\n this.removeBlurEffect();\r\n this.removeOverlay();\r\n this.removeProgressSpinnerComponent();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.spinnerInstance?.destroy();\r\n this.removeBlurEffect();\r\n }\r\n\r\n private addProgressSpinnerComponent(): void {\r\n this.spinnerInstance = this.viewContainerRef.createComponent(PtrLoadingSpinnerComponent);\r\n this.overlay?.appendChild(this.spinnerInstance.location.nativeElement);\r\n }\r\n\r\n private removeProgressSpinnerComponent(): void {\r\n this.spinnerInstance?.destroy();\r\n }\r\n\r\n private addOverlay(): void {\r\n this.overlay = this.renderer.createElement('div');\r\n this.renderer.setStyle(this.overlay, 'display', 'flex');\r\n this.renderer.setStyle(this.overlay, 'justify-content', 'center');\r\n this.renderer.setStyle(this.overlay, 'align-items', 'center');\r\n this.renderer.setStyle(this.overlay, 'position', 'absolute');\r\n this.renderer.setStyle(this.overlay, 'top', '0');\r\n this.renderer.setStyle(this.overlay, 'left', '0');\r\n this.renderer.setStyle(this.overlay, 'width', '100%');\r\n this.renderer.setStyle(this.overlay, 'height', '100%');\r\n this.renderer.setStyle(this.overlay, 'min-height', '25px');\r\n\r\n this.renderer.appendChild(this.targetEl.nativeElement, this.overlay);\r\n }\r\n\r\n private removeOverlay(): void {\r\n if (this.overlay) {\r\n this.renderer.removeChild(this.targetEl.nativeElement, this.overlay);\r\n this.overlay = undefined;\r\n }\r\n }\r\n\r\n private addBlurEffect(): void {\r\n const style = this.renderer.createElement('style');\r\n const blurRule = `\r\n .ptr-loading-blur > *:not(:last-child) {\r\n filter: blur(2px);\r\n transition: filter 0.3s ease;\r\n }\r\n `;\r\n this.renderer.appendChild(style, this.renderer.createText(blurRule));\r\n this.renderer.appendChild(document.head, style);\r\n this.renderer.addClass(this.targetEl.nativeElement, 'ptr-loading-blur');\r\n }\r\n\r\n private removeBlurEffect(): void {\r\n this.renderer.removeClass(this.targetEl.nativeElement, 'ptr-loading-blur');\r\n }\r\n\r\n}\r\n","import { computed, Injectable, signal, Signal } from '@angular/core';\r\n\r\n/**\r\n * Optimized Async Loading Service using Angular Signals\r\n * Supports global loading state and named loading areas with auto-cleanup\r\n *\r\n * To use as a non-singleton service, add to providers array in @Component decorator:\r\n * @Component({\r\n * selector: 'app-example',\r\n * templateUrl: './example.component.html',\r\n * providers: [PtrLoadingService]\r\n * })\r\n *\r\n * Usage:\r\n * Set loading: this.loadingService.setLoading(true)\r\n * - Set loading: this.loadingService.setLoading(true, 'areaName')\r\n *\r\n * - Get loading (template): {{ loadingService.isLoading()() }}\r\n * - Get loading (template): {{ loadingService.isLoading('areaName')() }}\r\n *\r\n * - Get loading (component): this.loadingService.isLoading()()\r\n * - Get loading (component): this.loadingService.isLoading('areaName')()\r\n *\r\n * - Check if any loading: {{ loadingService.isAnyLoading()() }}\r\n *\r\n * - React to loading changes: effect(() => console.log('Loading:', this.loadingService.isLoading('areaName')()))\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PtrLoadingService {\r\n\r\n private globalTaskCount = signal(0);\r\n private loadingAreas = new Map<string, ReturnType<typeof signal<number>>>();\r\n\r\n isLoading(area?: string): Signal<boolean> {\r\n if (!area) {\r\n return computed(() => this.globalTaskCount() > 0);\r\n }\r\n\r\n return computed(() => {\r\n const areaSignal = this.loadingAreas.get(area);\r\n return areaSignal ? areaSignal() > 0 : false;\r\n });\r\n }\r\n\r\n isAnyLoading(): Signal<boolean> {\r\n return computed(() => {\r\n if (this.globalTaskCount() > 0) return true;\r\n for (const areaSignal of this.loadingAreas.values()) {\r\n if (areaSignal() > 0) return true;\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n setLoading(value: boolean, area?: string): void {\r\n if (!area) {\r\n this.updateTaskCount(this.globalTaskCount, value);\r\n } else {\r\n this.updateNamedAreaLoading(area, value);\r\n }\r\n }\r\n\r\n resetLoading(area?: string): void {\r\n if (!area) {\r\n this.globalTaskCount.set(0);\r\n } else if (this.loadingAreas.has(area)) {\r\n this.loadingAreas.get(area)!.set(0);\r\n this.loadingAreas.delete(area);\r\n }\r\n }\r\n\r\n private updateNamedAreaLoading(area: string, increment: boolean): void {\r\n let areaSignal = this.loadingAreas.get(area);\r\n if (!areaSignal && increment) {\r\n areaSignal = signal(0);\r\n this.loadingAreas.set(area, areaSignal);\r\n }\r\n\r\n if (areaSignal) {\r\n areaSignal.update(count => {\r\n const newCount = increment ? count + 1 : Math.max(0, count - 1);\r\n if (newCount === 0) {\r\n this.loadingAreas.delete(area);\r\n }\r\n return newCount;\r\n });\r\n }\r\n }\r\n\r\n private updateTaskCount(taskCount: ReturnType<typeof signal<number>>, increment: boolean): void {\r\n taskCount.update(count => increment ? count + 1 : Math.max(0, count - 1));\r\n }\r\n\r\n}\r\n","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, Output, ViewChild, AfterViewInit, TemplateRef } from '@angular/core';\r\nimport { PtrButtonComponent } from '../../ptr-button/ptr-button.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface DialogResult<T = unknown> {\r\n result: boolean;\r\n data: T | null;\r\n}\r\n\r\n@Component({\r\n selector: 'ptr-dialog',\r\n imports: [\r\n PtrButtonComponent,\r\n CommonModule\r\n ],\r\n templateUrl: './ptr-dialog.component.html',\r\n styleUrls: [\"./ptr-dialog.component.scss\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PtrDialogComponent<T = unknown> implements AfterViewInit {\r\n\r\n @ViewChild('dialogElement') dialogElement!: ElementRef<HTMLDialogElement>;\r\n\r\n @Input() title = '';\r\n @Input() message = '';\r\n @Input() buttonText = 'Confirm';\r\n @Input() buttonStyle: 'normal' | 'error' | 'secondary' = 'normal';\r\n @Input() contentTemplate: TemplateRef<unknown> | null = null;\r\n @Input() hasDefaultContent = true;\r\n @Input() data: T | null = null;\r\n\r\n @Output() closed = new EventEmitter<DialogResult<T>>();\r\n\r\n ngAfterViewInit() {\r\n this.dialogElement.nativeElement.showModal();\r\n }\r\n\r\n close() {\r\n this.dialogElement.nativeElement.close();\r\n }\r\n\r\n confirm() {\r\n this.closed.emit({result: true, data: this.data});\r\n this.close();\r\n }\r\n\r\n onClose() {\r\n this.closed.emit({result: false, data: this.data});\r\n }\r\n\r\n setData(data: T) {\r\n this.data = data;\r\n }\r\n}\r\n","<dialog #dialogElement class=\"ptr-modal\" (close)=\"onClose()\">\n <div class=\"ptr-modal__content\">\n\n <div class=\"ptr-modal__header\">\n <h2 class=\"ptr-modal__title\">{{title}}</h2>\n <button class=\"ptr-modal__close\" (click)=\"close()\" aria-label=\"Close dialog\">&times;</button>\n </div>\n\n @if (hasDefaultContent && !contentTemplate) {\n <p>{{ message }}</p>\n }\n\n @if (contentTemplate) {\n <ng-container *ngTemplateOutlet=\"contentTemplate; context: {$implicit: data, dialogInstance: this}\"></ng-container>\n }\n\n <div class=\"ptr-modal__actions\">\n <ptr-button buttonStyle=\"secondary\" (clicked)=\"close()\" [isSmallSize]=\"true\">Cancel</ptr-button>\n <ptr-button class=\"ml-auto\" [buttonStyle]=\"buttonStyle\" (clicked)=\"confirm()\"\n [isSmallSize]=\"true\">{{buttonText}}</ptr-button>\n </div>\n\n </div>\n</dialog>\n","import { ApplicationRef, ComponentRef, createComponent, EnvironmentInjector, Injectable, TemplateRef, Type } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { DialogResult, PtrDialogComponent } from './ptr-dialog/ptr-dialog.component';\r\n\r\nexport interface PtrDialogOptions<T = unknown> {\r\n title: string;\r\n message?: string;\r\n buttonText?: string;\r\n buttonStyle?: 'normal' | 'error' | 'secondary';\r\n contentTemplate?: TemplateRef<unknown>;\r\n data?: T;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PtrDialogService {\r\n\r\n private dialogComponentRef: ComponentRef<PtrDialogComponent<unknown>> | null = null;\r\n\r\n constructor(\r\n private appRef: ApplicationRef,\r\n private injector: EnvironmentInjector\r\n ) { }\r\n\r\n open<T = unknown>(options: PtrDialogOptions<T>): Observable<DialogResult<T>> {\r\n const dialogResult$ = new Subject<DialogResult<T>>();\r\n\r\n this.dialogComponentRef = createComponent(PtrDialogComponent as Type<PtrDialogComponent<unknown>>, {\r\n environmentInjector: this.injector,\r\n });\r\n\r\n if (!this.dialogComponentRef) {\r\n throw new Error('Failed to create dialog component');\r\n }\r\n\r\n const { instance } = this.dialogComponentRef;\r\n\r\n instance.title = options.title;\r\n instance.message = options.message || '';\r\n instance.buttonText = options.buttonText || 'Confirm';\r\n instance.buttonStyle = options.buttonStyle || 'normal';\r\n\r\n if (options.contentTemplate) {\r\n instance.contentTemplate = options.contentTemplate;\r\n instance.hasDefaultContent = !options.contentTemplate;\r\n }\r\n\r\n if (options.data !== undefined) {\r\n instance.data = options.data as unknown;\r\n }\r\n\r\n instance.closed\r\n .pipe(take(1))\r\n .subscribe((result: DialogResult<unknown>) => {\r\n this.removeDialog();\r\n dialogResult$.next(result as unknown as DialogResult<T>);\r\n dialogResult$.complete();\r\n });\r\n\r\n document.body.appendChild(this.dialogComponentRef.location.nativeElement);\r\n this.appRef.attachView(this.dialogComponentRef.hostView);\r\n\r\n return dialogResult$.asObservable();\r\n }\r\n\r\n private removeDialog() {\r\n if (this.dialogComponentRef) {\r\n this.appRef.detachView(this.dialogComponentRef.hostView);\r\n this.dialogComponentRef.destroy();\r\n this.dialogComponentRef = null;\r\n }\r\n }\r\n\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild } from '@angular/core';\r\n\r\n@Component({\n selector: 'ptr-tooltip',\n imports: [],\n templateUrl: './ptr-tooltip.component.html',\n styleUrls: [\"./ptr-tooltip.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrTooltipComponent {\r\n\r\n @Input() content = '';\r\n\r\n @ViewChild('tooltipDialog') tooltipDialog!: ElementRef<HTMLDialogElement>;\r\n\r\n private tooltipTimer: any;\r\n\r\n showTooltip() {\r\n clearTimeout(this.tooltipTimer);\r\n this.tooltipTimer = setTimeout(() => {\r\n this.tooltipDialog.nativeElement.show();\r\n }, 200); // Small delay to prevent flickering on quick mouse movements\r\n }\r\n\r\n hideTooltip() {\r\n clearTimeout(this.tooltipTimer);\r\n this.tooltipTimer = setTimeout(() => {\r\n this.tooltipDialog.nativeElement.close();\r\n }, 200); // Small delay to allow moving mouse to tooltip\r\n }\r\n\r\n}\r\n","<span (mouseenter)=\"showTooltip()\" (mouseleave)=\"hideTooltip()\" class=\"tooltip-trigger\">\r\n <ng-content></ng-content>\r\n</span>\r\n<dialog #tooltipDialog class=\"ptr-tooltip\">\r\n <div class=\"ptr-tooltip__content\">{{ content }}</div>\r\n</dialog>","import { ChangeDetectionStrategy, Component, computed, inject, Input } from '@angular/core';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\r\nimport { filter, distinctUntilChanged } from 'rxjs';\r\nimport { BreadcrumbRouteInfo, PtrBreadcrumb } from './interfaces';\r\n@Component({\n selector: 'ptr-breadcrumbs',\n imports: [RouterModule],\n templateUrl: './ptr-breadcrumbs.component.html',\n styleUrl: './ptr-breadcrumbs.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrBreadcrumbsComponent {\r\n\r\n @Input() showFirstSeparator = true;\r\n\r\n private router = inject(Router);\r\n private activatedRoute = inject(ActivatedRoute);\r\n\r\n private routeEvents = toSignal(\r\n this.router.events.pipe(\r\n filter(event => event instanceof NavigationEnd),\r\n distinctUntilChanged()\r\n )\r\n );\r\n\r\n breadcrumbs = computed(() => {\r\n this.routeEvents();\r\n return this.createBreadcrumbs(this.activatedRoute.root);\r\n });\r\n\r\n private createBreadcrumbs(route: ActivatedRoute, routeUrl = '', breadcrumbs: PtrBreadcrumb[] = []): PtrBreadcrumb[] {\r\n const routeChildren: ActivatedRoute[] = route.children;\r\n if (routeChildren.length === 0) {\r\n return breadcrumbs;\r\n }\r\n for (const child of routeChildren) {\r\n const routeURL: string = child.snapshot.url.map(segment => segment.path).join('/');\r\n if (routeURL !== '') {\r\n routeUrl += `/${routeURL}`;\r\n }\r\n const { label, url } = this.getLabelForRoute(child);\r\n\r\n // Skip if the label is undefined or empty and the path is empty\r\n if (label && (!breadcrumbs.length || breadcrumbs[breadcrumbs.length - 1].label !== label)) {\r\n breadcrumbs.push({ label, url: url ?? routeUrl });\r\n }\r\n\r\n return this.createBreadcrumbs(child, routeUrl, breadcrumbs);\r\n }\r\n return breadcrumbs;\r\n }\r\n\r\n private getLabelForRoute(route: ActivatedRoute): BreadcrumbRouteInfo {\r\n const breadcrumbReturnInfo: BreadcrumbRouteInfo = {};\r\n const customBreadcrumb = route.snapshot.data['breadcrumb'] as BreadcrumbRouteInfo | undefined;\r\n\r\n if (customBreadcrumb) {\r\n if (customBreadcrumb.label) {\r\n breadcrumbReturnInfo.label = customBreadcrumb.label;\r\n }\r\n if (customBreadcrumb.url) {\r\n breadcrumbReturnInfo.url = customBreadcrumb.url;\r\n }\r\n } else if (route.snapshot.title) {\r\n breadcrumbReturnInfo.label = route.snapshot.title;\r\n }\r\n\r\n return breadcrumbReturnInfo;\r\n }\r\n\r\n}\r\n","@if (breadcrumbs().length > 0) {\n <nav aria-label=\"breadcrumb\" class=\"breadcrumb-wrapper\">\n <ol class=\"breadcrumb\" [class.breadcrumb--show-first-separator]=\"showFirstSeparator\">\n @for (breadcrumb of breadcrumbs(); track breadcrumb.label; let last = $last) {\n <li class=\"breadcrumb-item\" [class.breadcrumb-item--active]=\"last\">\n @if (!last) {\n <a class=\"breadcrumb-item-label\" [routerLink]=\"breadcrumb.url\">{{ breadcrumb.label }}</a>\n }\n @if (last) {\n <span class=\"breadcrumb-item-label\">{{ breadcrumb.label }}</span>\n }\n </li>\n }\n </ol>\n </nav>\n}\n","import { ChangeDetectionStrategy, Component, Input, signal } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'ptr-tab',\r\n standalone: true,\r\n template: '@if(active()){<ng-content></ng-content>}',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PtrTabComponent {\r\n @Input() label!: string;\r\n @Input() link?: string;\r\n\r\n active = signal(false);\r\n}\r\n","\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ContentChildren, DestroyRef, effect, ElementRef, inject, QueryList, signal, ViewChildren } from '@angular/core';\r\nimport { Router, RouterModule } from '@angular/router';\r\nimport { PtrTabComponent } from '../ptr-tab/ptr-tab.component';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n\r\n@Component({\r\n selector: 'ptr-tabs',\r\n imports: [RouterModule],\r\n templateUrl: './ptr-tabs.component.html',\r\n styleUrl: './ptr-tabs.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PtrTabsComponent implements AfterViewInit {\r\n\r\n @ContentChildren(PtrTabComponent) tabComponents!: QueryList<PtrTabComponent>;\r\n @ViewChildren('tabButton') buttons!: QueryList<ElementRef>;\r\n\r\n private router = inject(Router);\r\n private destroyRef = inject(DestroyRef);\r\n\r\n tabs = signal<PtrTabComponent[]>([]);\r\n activeTabIndex = signal(0);\r\n useLinks = signal(false);\r\n sliderPosition = signal({ transform: 'translateX(0)', width: '0' });\r\n\r\n constructor() {\r\n effect(() => {\r\n const activeTab = this.tabs().find(tab => tab.active());\r\n if (activeTab?.link) {\r\n this.router.navigate([activeTab.link]);\r\n }\r\n this.updateSliderPosition();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.tabComponents.changes\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => {\r\n this.updateTabs();\r\n });\r\n this.updateTabs();\r\n }\r\n\r\n updateTabs() {\r\n this.tabs.set(this.tabComponents.toArray());\r\n this.useLinks.set(this.tabs().some(tab => !!tab.link));\r\n if (this.tabs().length > 0 && !this.tabs().some(tab => tab.active())) {\r\n this.selectTab(0);\r\n } else {\r\n this.updateSliderPosition();\r\n }\r\n }\r\n\r\n selectTab(index: number) {\r\n this.tabs().forEach((tab, i) => tab.active.set(i === index));\r\n this.activeTabIndex.set(index);\r\n }\r\n\r\n updateSliderPosition() {\r\n const activeButton = this.buttons?.get(this.activeTabIndex())?.nativeElement;\r\n if (activeButton) {\r\n const { offsetLeft, offsetWidth } = activeButton;\r\n this.sliderPosition.set({\r\n transform: `translateX(${offsetLeft}px)`,\r\n width: `${offsetWidth}px`\r\n });\r\n }\r\n }\r\n\r\n}\r\n","<div class=\"tabs-container\" role=\"tablist\">\r\n @for (tab of tabs(); track $index; let i = $index) {\r\n <button #tabButton [attr.role]=\"tab.link ? 'link' : 'tab'\" [attr.aria-selected]=\"tab.active()\"\r\n [class.active]=\"tab.active()\" (click)=\"selectTab(i)\" [routerLink]=\"tab.link\">{{tab.label}}</button>\r\n }\r\n\r\n <div class=\"slider\" [style.transform]=\"sliderPosition().transform\" [style.width]=\"sliderPosition().width\"></div>\r\n</div>\r\n\r\n@if (!useLinks()) {\r\n<div class=\"tab-content\">\r\n <ng-content></ng-content>\r\n</div>\r\n}\r\n","import { ApplicationRef, ComponentRef, createComponent, DestroyRef, EnvironmentInjector, inject, Injectable, Injector, signal } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { timer } from 'rxjs';\r\nimport { PtrToast } from './interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PtrToasterService {\r\n\r\n private destroyRef = inject(DestroyRef);\r\n private injector = inject(Injector);\r\n private environmentInjector = inject(EnvironmentInjector);\r\n private appRef = inject(ApplicationRef);\r\n\r\n private toasts = signal<PtrToast[]>([]);\r\n private counter = 0;\r\n private toasterComponentRef: ComponentRef<unknown> | null = null;\r\n\r\n constructor() {\r\n this.injectToasterComponent();\r\n }\r\n\r\n private injectToasterComponent() {\r\n if (this.toasterComponentRef) {\r\n return;\r\n }\r\n\r\n import('./ptr-toaster/ptr-toaster.component').then(module => {\r\n this.toasterComponentRef = createComponent(module.PtrToasterComponent, {\r\n environmentInjector: this.environmentInjector,\r\n elementInjector: this.injector\r\n });\r\n\r\n const domElem = this.toasterComponentRef.location.nativeElement;\r\n document.body.appendChild(domElem);\r\n this.appRef.attachView(this.toasterComponentRef.hostView);\r\n });\r\n }\r\n\r\n public getToasts() {\r\n return this.toasts.asReadonly();\r\n }\r\n\r\n public show(message: string, type: PtrToast['type'] = 'info') {\r\n const id = this.counter++;\r\n this.toasts.update(toasts => [...toasts, { id, message, type }]);\r\n\r\n timer(10000)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.remove(id));\r\n }\r\n\r\n public remove(id: number) {\r\n this.toasts.update(toasts => toasts.filter(t => t.id !== id));\r\n }\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\r\nimport { PtrToasterService } from '../ptr-toaster.service';\r\n\r\n@Component({\n selector: 'ptr-toaster',\n imports: [CommonModule],\n templateUrl: './ptr-toaster.component.html',\n styleUrl: './ptr-toaster.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class PtrToasterComponent {\r\n protected toasterService = inject(PtrToasterService);\r\n}\r\n","<div class=\"toaster-container\" aria-live=\"polite\" aria-atomic=\"true\">\r\n @for (toast of toasterService.getToasts()(); track toast.id) {\r\n <div class=\"toast\" [ngClass]=\"toast.type\" role=\"alert\">\r\n <span>{{toast.message}}</span>\r\n <button (click)=\"toasterService.remove(toast.id)\" aria-label=\"Close\"><span>&times;</span></button>\r\n </div>\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of ngx-components\r\n */\r\n\r\nexport * from './lib/menu/menu.component';\r\n\r\nexport * from './lib/forms/interfaces';\r\nexport { PtrFormComponent } from './lib/forms/form/form.component';\r\nexport { PtrSelectComponent } from './lib/forms/input/ptr-select/select.component';\r\nexport { PtrInputComponent } from './lib/forms/input/ptr-input/ptr-input.component';\r\n\r\nexport { PtrTitleComponent } from './lib/ptr-title/ptr-title.component';\r\n\r\nexport { PtrLoadingSpinnerComponent } from './lib/loading-spinner/loading-spinner.component';\r\nexport { PtrLoadingSpinnerDirective } from './lib/loading-spinner/loading-spinner.directive';\r\n\r\nexport { PtrLoadingService } from './lib/services/loading.service';\r\n\r\nexport { PtrButtonComponent } from './lib/ptr-button/ptr-button.component';\r\n\r\nexport { PtrDialogService } from './lib/dialog/ptr-dialog.service';\r\nexport { PtrDialogComponent } from './lib/dialog/ptr-dialog/ptr-dialog.component';\r\nexport { PtrTooltipComponent } from './lib/dialog/ptr-tooltip/ptr-tooltip.component';\r\n\r\nexport { PtrBreadcrumbsComponent } from './lib/ptr-breadcrumbs/ptr-breadcrumbs.component';\r\nexport { PtrBreadcrumb } from './lib/ptr-breadcrumbs/interfaces';\r\n\r\nexport { PtrTabsComponent } from './lib/components/tabs/ptr-tabs/ptr-tabs.component';\r\nexport { PtrTabComponent } from './lib/components/tabs/ptr-tab/ptr-tab.component';\r\n\r\nexport { PtrToasterService } from './lib/ptr-toaster/ptr-toaster.service';\r\nexport { PtrToasterComponent } from './lib/ptr-toaster/ptr-toaster/ptr-toaster.component';\r\nexport { PtrToast } from './lib/ptr-toaster/interfaces';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
@@ -1,16 +1,24 @@
1
- import { ElementRef, EventEmitter, AfterViewInit } from '@angular/core';
1
+ import { ElementRef, EventEmitter, AfterViewInit, TemplateRef } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- export declare class PtrDialogComponent implements AfterViewInit {
3
+ export interface DialogResult<T = unknown> {
4
+ result: boolean;
5
+ data: T | null;
6
+ }
7
+ export declare class PtrDialogComponent<T = unknown> implements AfterViewInit {
4
8
  dialogElement: ElementRef<HTMLDialogElement>;
5
9
  title: string;
6
10
  message: string;
7
11
  buttonText: string;
8
12
  buttonStyle: 'normal' | 'error' | 'secondary';
9
- closed: EventEmitter<boolean | null>;
13
+ contentTemplate: TemplateRef<unknown> | null;
14
+ hasDefaultContent: boolean;
15
+ data: T | null;
16
+ closed: EventEmitter<DialogResult<T>>;
10
17
  ngAfterViewInit(): void;
11
18
  close(): void;
12
19
  confirm(): void;
13
20
  onClose(): void;
14
- static ɵfac: i0.ɵɵFactoryDeclaration<PtrDialogComponent, never>;
15
- static ɵcmp: i0.ɵɵComponentDeclaration<PtrDialogComponent, "ptr-dialog", never, { "title": { "alias": "title"; "required": false; }; "message": { "alias": "message"; "required": false; }; "buttonText": { "alias": "buttonText"; "required": false; }; "buttonStyle": { "alias": "buttonStyle"; "required": false; }; }, { "closed": "closed"; }, never, never, true, never>;
21
+ setData(data: T): void;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<PtrDialogComponent<any>, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<PtrDialogComponent<any>, "ptr-dialog", never, { "title": { "alias": "title"; "required": false; }; "message": { "alias": "message"; "required": false; }; "buttonText": { "alias": "buttonText"; "required": false; }; "buttonStyle": { "alias": "buttonStyle"; "required": false; }; "contentTemplate": { "alias": "contentTemplate"; "required": false; }; "hasDefaultContent": { "alias": "hasDefaultContent"; "required": false; }; "data": { "alias": "data"; "required": false; }; }, { "closed": "closed"; }, never, never, true, never>;
16
24
  }
@@ -1,17 +1,21 @@
1
- import { ApplicationRef, EnvironmentInjector } from '@angular/core';
1
+ import { ApplicationRef, EnvironmentInjector, TemplateRef } from '@angular/core';
2
2
  import { Observable } from 'rxjs';
3
+ import { DialogResult } from './ptr-dialog/ptr-dialog.component';
3
4
  import * as i0 from "@angular/core";
5
+ export interface PtrDialogOptions<T = unknown> {
6
+ title: string;
7
+ message?: string;
8
+ buttonText?: string;
9
+ buttonStyle?: 'normal' | 'error' | 'secondary';
10
+ contentTemplate?: TemplateRef<unknown>;
11
+ data?: T;
12
+ }
4
13
  export declare class PtrDialogService {
5
14
  private appRef;
6
15
  private injector;
7
16
  private dialogComponentRef;
8
17
  constructor(appRef: ApplicationRef, injector: EnvironmentInjector);
9
- open(options: {
10
- title: string;
11
- message: string;
12
- buttonText?: string;
13
- buttonStyle?: 'normal' | 'error' | 'secondary';
14
- }): Observable<boolean>;
18
+ open<T = unknown>(options: PtrDialogOptions<T>): Observable<DialogResult<T>>;
15
19
  private removeDialog;
16
20
  static ɵfac: i0.ɵɵFactoryDeclaration<PtrDialogService, never>;
17
21
  static ɵprov: i0.ɵɵInjectableDeclaration<PtrDialogService>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patter/ngx-components",
3
- "version": "19.0.2",
3
+ "version": "19.0.3",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.0.0",
6
6
  "@angular/core": "^19.0.0"
Binary file
package/public-api.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export * from './lib/menu/menu.component';
2
2
  export * from './lib/forms/interfaces';
3
3
  export { PtrFormComponent } from './lib/forms/form/form.component';
4
- export { PtrSelectComponent } from './lib/forms/input/select/select.component';
4
+ export { PtrSelectComponent } from './lib/forms/input/ptr-select/select.component';
5
5
  export { PtrInputComponent } from './lib/forms/input/ptr-input/ptr-input.component';
6
6
  export { PtrTitleComponent } from './lib/ptr-title/ptr-title.component';
7
7
  export { PtrLoadingSpinnerComponent } from './lib/loading-spinner/loading-spinner.component';
Binary file