@winexist/ngp 0.7.2 → 0.7.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.
@@ -513,7 +513,7 @@ class FgAddressComponent {
513
513
  useExisting: forwardRef(() => FgAddressComponent),
514
514
  multi: true
515
515
  }
516
- ], ngImport: i0, template: "@if (showHeader()) {\n\t<h2 class=\"text-xl font-semibold mb-4\">Address</h2>\n}\n\n@if (isViewMode()) {\n\t@let address = addressForm.value;\n\n\t<div class=\"grid gap-3 p-4\">\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"country\">Country:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.country || 'Philippines' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"province\">Province:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.province?.name || address.province || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"city\">City/Municipality:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.city?.name || address.city || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"barangay\">Barangay:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.barangay?.name || address.barangay || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line1\">Line 1:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line1 || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line2\">Line 2:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line2 || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"zipCode\">Zip Code:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.zipCode || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"landmark\">Nearest Landmark:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.landmark || '' }}</p>\n\t\t</div>\n\t</div>\n} @else {\n\t<form [formGroup]=\"addressForm\">\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"country\" formControlName=\"country\" class=\"w-full\" />\n\t\t\t\t\t\t<label for=\"country\" class=\"block mb-2 required-label\">Country</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"province\"\n\t\t\t\t\t\t\t[items]=\"provinceOptions\"\n\t\t\t\t\t\t\t[loading]=\"provHttp$ && !provHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\t\t\t\t\t\t<label for=\"province\" class=\"block mb-2 required-label\">Province</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"city\"\n\t\t\t\t\t\t\t[items]=\"cityOptions\"\n\t\t\t\t\t\t\t[loading]=\"cityHttp$ && !cityHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\t\t\t\t\t\t<label for=\"city\" class=\"block mb-2 required-label\">City/Municipality</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"barangay\"\n\t\t\t\t\t\t\t[items]=\"barangayOptions\"\n\t\t\t\t\t\t\t[loading]=\"barangayHttp$ && !barangayHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\n\t\t\t\t\t\t<label for=\"barangay\" class=\"block mb-2 required-label\">Barangay</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div>\n\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t<label for=\"line1\" class=\"block mb-2 required-label\">Line 1</label>\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line1\" formControlName=\"line1\" class=\"w-full\" />\n\t\t\t\t</p-floatlabel>\n\t\t\t</ngp-form-field-wrapper>\n\t\t</div>\n\n\t\t<div>\n\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t<label for=\"line2\" class=\"block mb-2\">Line 2</label>\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line2\" formControlName=\"line2\" class=\"w-full\" />\n\t\t\t\t</p-floatlabel>\n\t\t\t</ngp-form-field-wrapper>\n\t\t</div>\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<p-inputnumber\n\t\t\t\t\t\t\t[inputId]=\"'zipCode'\"\n\t\t\t\t\t\t\tformControlName=\"zipCode\"\n\t\t\t\t\t\t\tstyleClass=\"w-full\"\n\t\t\t\t\t\t\t[useGrouping]=\"false\" />\n\t\t\t\t\t\t<label for=\"zipCode\" class=\"block mb-2 required-label\">Zip Code</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<label for=\"landmark\" class=\"block mb-2 required-label\">Nearest Landmark</label>\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"landmark\" formControlName=\"landmark\" class=\"w-full\" />\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i1$3.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: InputNumberModule }, { kind: "component", type: i2.InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "placeholder", "tabindex", "title", "ariaLabelledBy", "ariaDescribedBy", "ariaLabel", "ariaRequired", "autocomplete", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "ngmodule", type: FloatLabelModule }, { kind: "component", type: i3$1.FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "ngp-form-field-wrapper", inputs: ["validationMessages"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i1$2.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "dropdownPosition", "appendTo", "outsideClickEvent", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "tabFocusOnClearButton", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "deselectOnClick", "clearSearchOnAdd", "compareWith", "keyDownFn", "bindLabel", "bindValue", "appearance", "isOpen", "items"], outputs: ["bindLabelChange", "bindValueChange", "appearanceChange", "isOpenChange", "itemsChange", "blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"], exportAs: ["ngSelect"] }] });
516
+ ], ngImport: i0, template: "@if (showHeader()) {\n\t<h2 class=\"text-xl font-semibold mb-4 px-4\">Address</h2>\n}\n\n@if (isViewMode()) {\n\t@let address = addressForm.value;\n\n\t<div class=\"grid gap-3 p-4\">\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"country\">Country:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.country || 'Philippines' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"province\">Province:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.province?.name || address.province || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"city\">City/Municipality:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.city?.name || address.city || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"barangay\">Barangay:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.barangay?.name || address.barangay || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line1\">Line 1:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line1 || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line2\">Line 2:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line2 || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"zipCode\">Zip Code:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.zipCode || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"landmark\">Nearest Landmark:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.landmark || '' }}</p>\n\t\t</div>\n\t</div>\n} @else {\n\t<form [formGroup]=\"addressForm\">\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"country\" formControlName=\"country\" class=\"w-full\" />\n\t\t\t\t\t\t<label for=\"country\" class=\"block mb-2 required-label\">Country</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"province\"\n\t\t\t\t\t\t\t[items]=\"provinceOptions\"\n\t\t\t\t\t\t\t[loading]=\"provHttp$ && !provHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\t\t\t\t\t\t<label for=\"province\" class=\"block mb-2 required-label\">Province</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"city\"\n\t\t\t\t\t\t\t[items]=\"cityOptions\"\n\t\t\t\t\t\t\t[loading]=\"cityHttp$ && !cityHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\t\t\t\t\t\t<label for=\"city\" class=\"block mb-2 required-label\">City/Municipality</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"barangay\"\n\t\t\t\t\t\t\t[items]=\"barangayOptions\"\n\t\t\t\t\t\t\t[loading]=\"barangayHttp$ && !barangayHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\n\t\t\t\t\t\t<label for=\"barangay\" class=\"block mb-2 required-label\">Barangay</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div>\n\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t<label for=\"line1\" class=\"block mb-2 required-label\">Line 1</label>\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line1\" formControlName=\"line1\" class=\"w-full\" />\n\t\t\t\t</p-floatlabel>\n\t\t\t</ngp-form-field-wrapper>\n\t\t</div>\n\n\t\t<div>\n\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t<label for=\"line2\" class=\"block mb-2\">Line 2</label>\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line2\" formControlName=\"line2\" class=\"w-full\" />\n\t\t\t\t</p-floatlabel>\n\t\t\t</ngp-form-field-wrapper>\n\t\t</div>\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<p-inputnumber\n\t\t\t\t\t\t\t[inputId]=\"'zipCode'\"\n\t\t\t\t\t\t\tformControlName=\"zipCode\"\n\t\t\t\t\t\t\tstyleClass=\"w-full\"\n\t\t\t\t\t\t\t[useGrouping]=\"false\" />\n\t\t\t\t\t\t<label for=\"zipCode\" class=\"block mb-2 required-label\">Zip Code</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<label for=\"landmark\" class=\"block mb-2 required-label\">Nearest Landmark</label>\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"landmark\" formControlName=\"landmark\" class=\"w-full\" />\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i1$3.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: InputNumberModule }, { kind: "component", type: i2.InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "placeholder", "tabindex", "title", "ariaLabelledBy", "ariaDescribedBy", "ariaLabel", "ariaRequired", "autocomplete", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "ngmodule", type: FloatLabelModule }, { kind: "component", type: i3$1.FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "ngp-form-field-wrapper", inputs: ["validationMessages"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i1$2.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "dropdownPosition", "appendTo", "outsideClickEvent", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "tabFocusOnClearButton", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "deselectOnClick", "clearSearchOnAdd", "compareWith", "keyDownFn", "bindLabel", "bindValue", "appearance", "isOpen", "items"], outputs: ["bindLabelChange", "bindValueChange", "appearanceChange", "isOpenChange", "itemsChange", "blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"], exportAs: ["ngSelect"] }] });
517
517
  }
518
518
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: FgAddressComponent, decorators: [{
519
519
  type: Component,
@@ -536,7 +536,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
536
536
  useExisting: forwardRef(() => FgAddressComponent),
537
537
  multi: true
538
538
  }
539
- ], template: "@if (showHeader()) {\n\t<h2 class=\"text-xl font-semibold mb-4\">Address</h2>\n}\n\n@if (isViewMode()) {\n\t@let address = addressForm.value;\n\n\t<div class=\"grid gap-3 p-4\">\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"country\">Country:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.country || 'Philippines' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"province\">Province:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.province?.name || address.province || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"city\">City/Municipality:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.city?.name || address.city || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"barangay\">Barangay:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.barangay?.name || address.barangay || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line1\">Line 1:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line1 || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line2\">Line 2:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line2 || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"zipCode\">Zip Code:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.zipCode || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"landmark\">Nearest Landmark:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.landmark || '' }}</p>\n\t\t</div>\n\t</div>\n} @else {\n\t<form [formGroup]=\"addressForm\">\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"country\" formControlName=\"country\" class=\"w-full\" />\n\t\t\t\t\t\t<label for=\"country\" class=\"block mb-2 required-label\">Country</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"province\"\n\t\t\t\t\t\t\t[items]=\"provinceOptions\"\n\t\t\t\t\t\t\t[loading]=\"provHttp$ && !provHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\t\t\t\t\t\t<label for=\"province\" class=\"block mb-2 required-label\">Province</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"city\"\n\t\t\t\t\t\t\t[items]=\"cityOptions\"\n\t\t\t\t\t\t\t[loading]=\"cityHttp$ && !cityHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\t\t\t\t\t\t<label for=\"city\" class=\"block mb-2 required-label\">City/Municipality</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"barangay\"\n\t\t\t\t\t\t\t[items]=\"barangayOptions\"\n\t\t\t\t\t\t\t[loading]=\"barangayHttp$ && !barangayHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\n\t\t\t\t\t\t<label for=\"barangay\" class=\"block mb-2 required-label\">Barangay</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div>\n\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t<label for=\"line1\" class=\"block mb-2 required-label\">Line 1</label>\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line1\" formControlName=\"line1\" class=\"w-full\" />\n\t\t\t\t</p-floatlabel>\n\t\t\t</ngp-form-field-wrapper>\n\t\t</div>\n\n\t\t<div>\n\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t<label for=\"line2\" class=\"block mb-2\">Line 2</label>\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line2\" formControlName=\"line2\" class=\"w-full\" />\n\t\t\t\t</p-floatlabel>\n\t\t\t</ngp-form-field-wrapper>\n\t\t</div>\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<p-inputnumber\n\t\t\t\t\t\t\t[inputId]=\"'zipCode'\"\n\t\t\t\t\t\t\tformControlName=\"zipCode\"\n\t\t\t\t\t\t\tstyleClass=\"w-full\"\n\t\t\t\t\t\t\t[useGrouping]=\"false\" />\n\t\t\t\t\t\t<label for=\"zipCode\" class=\"block mb-2 required-label\">Zip Code</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<label for=\"landmark\" class=\"block mb-2 required-label\">Nearest Landmark</label>\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"landmark\" formControlName=\"landmark\" class=\"w-full\" />\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n}\n" }]
539
+ ], template: "@if (showHeader()) {\n\t<h2 class=\"text-xl font-semibold mb-4 px-4\">Address</h2>\n}\n\n@if (isViewMode()) {\n\t@let address = addressForm.value;\n\n\t<div class=\"grid gap-3 p-4\">\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"country\">Country:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.country || 'Philippines' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"province\">Province:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.province?.name || address.province || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"city\">City/Municipality:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.city?.name || address.city || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"barangay\">Barangay:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.barangay?.name || address.barangay || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line1\">Line 1:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line1 || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line2\">Line 2:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line2 || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"zipCode\">Zip Code:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.zipCode || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"landmark\">Nearest Landmark:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.landmark || '' }}</p>\n\t\t</div>\n\t</div>\n} @else {\n\t<form [formGroup]=\"addressForm\">\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"country\" formControlName=\"country\" class=\"w-full\" />\n\t\t\t\t\t\t<label for=\"country\" class=\"block mb-2 required-label\">Country</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"province\"\n\t\t\t\t\t\t\t[items]=\"provinceOptions\"\n\t\t\t\t\t\t\t[loading]=\"provHttp$ && !provHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\t\t\t\t\t\t<label for=\"province\" class=\"block mb-2 required-label\">Province</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"city\"\n\t\t\t\t\t\t\t[items]=\"cityOptions\"\n\t\t\t\t\t\t\t[loading]=\"cityHttp$ && !cityHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\t\t\t\t\t\t<label for=\"city\" class=\"block mb-2 required-label\">City/Municipality</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"barangay\"\n\t\t\t\t\t\t\t[items]=\"barangayOptions\"\n\t\t\t\t\t\t\t[loading]=\"barangayHttp$ && !barangayHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\n\t\t\t\t\t\t<label for=\"barangay\" class=\"block mb-2 required-label\">Barangay</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div>\n\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t<label for=\"line1\" class=\"block mb-2 required-label\">Line 1</label>\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line1\" formControlName=\"line1\" class=\"w-full\" />\n\t\t\t\t</p-floatlabel>\n\t\t\t</ngp-form-field-wrapper>\n\t\t</div>\n\n\t\t<div>\n\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t<label for=\"line2\" class=\"block mb-2\">Line 2</label>\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line2\" formControlName=\"line2\" class=\"w-full\" />\n\t\t\t\t</p-floatlabel>\n\t\t\t</ngp-form-field-wrapper>\n\t\t</div>\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<p-inputnumber\n\t\t\t\t\t\t\t[inputId]=\"'zipCode'\"\n\t\t\t\t\t\t\tformControlName=\"zipCode\"\n\t\t\t\t\t\t\tstyleClass=\"w-full\"\n\t\t\t\t\t\t\t[useGrouping]=\"false\" />\n\t\t\t\t\t\t<label for=\"zipCode\" class=\"block mb-2 required-label\">Zip Code</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<label for=\"landmark\" class=\"block mb-2 required-label\">Nearest Landmark</label>\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"landmark\" formControlName=\"landmark\" class=\"w-full\" />\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n}\n" }]
540
540
  }], ctorParameters: () => [], propDecorators: { showHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "showHeader", required: false }] }], isCreateMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "isCreateMode", required: false }] }], isViewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "isViewMode", required: false }] }] } });
541
541
 
542
542
  class DataTableComponent {
@@ -1 +1 @@
1
- {"version":3,"file":"winexist-ngp.mjs","sources":["../../../packages/src/lib/components/empty/empty.component.ts","../../../packages/src/lib/components/empty/empty.component.html","../../../packages/src/lib/components/file-upload/file-upload.component.ts","../../../packages/src/lib/components/file-upload/file-upload.component.html","../../../packages/src/lib/components/form-field-wrapper/form-field-wrapper.component.ts","../../../packages/src/lib/components/form-field-wrapper/form-field-wrapper.component.html","../../../packages/src/lib/components/select/ng-select/basic/basic-ng-select.component.ts","../../../packages/src/lib/components/select/ng-select/basic/basic-ng-select.component.html","../../../packages/src/lib/services/address/address.service.ts","../../../packages/src/lib/components/fg-address/fg-address.component.ts","../../../packages/src/lib/components/fg-address/fg-address.component.html","../../../packages/src/lib/components/dataview/table/data-table.component.ts","../../../packages/src/lib/components/dataview/table/data-table.component.html","../../../packages/src/lib/components/select/ng-select/dynamic/dynamic-select.component.ts","../../../packages/src/lib/components/select/ng-select/dynamic/dynamic-select.component.html","../../../packages/src/lib/models/paginated.model.ts","../../../packages/src/lib/classes/crud-abstract.class.ts","../../../packages/src/lib/services/helper/helper.service.ts","../../../packages/src/index.ts","../../../packages/src/winexist-ngp.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\n\n@Component({\n\tselector: 'ngp-empty',\n\timports: [],\n\ttemplateUrl: './empty.component.html',\n\tstyleUrl: './empty.component.css'\n})\nexport class EmptyComponent {\n\ttitle = input<string>('Section is empty.');\n\tmessage = input<string>('No data available.');\n\timgSrc = input<string>();\n\n}\n","<div class=\"w-full flex justify-center items-center p-5 h-full\">\n <div class=\"flex items-center gap-3\">\n @if (imgSrc()) {\n <img alt=\"Empty\" [src]=\"imgSrc()\" class=\"w-[80px]\" />\n } @else {\n <div class=\"!rounded-md p-5 !bg-slate-100 mb-6\">\n <span class=\"material-icons !text-gray-400 !text-7xl\"> search_off </span>\n </div>\n }\n\n <div class=\"flex flex-col\">\n <span class=\"!text-gray-900 !text-2xl !font-bold\">{{ title() }}</span>\n @if (message()) {\n <span class=\"!text-gray-400 !text-base\">{{ message() }}</span>\n }\n </div>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, effect, ElementRef, input, output, signal, ViewChild } from '@angular/core';\nimport { FileSelectEvent, FileUploadModule } from 'primeng/fileupload';\n\n// Add interface for typed files\ninterface TypedFile extends File {\n\tfileType?: 'image' | 'pdf' | 'other';\n}\n\n@Component({\n\tselector: 'ngp-file-upload',\n\timports: [FileUploadModule, CommonModule],\n\ttemplateUrl: './file-upload.component.html',\n\tstyleUrl: './file-upload.component.css',\n})\nexport class FileUploadComponent {\n\t@ViewChild('fileUploader') fileUploader!: ElementRef;\n\n\t// Signal-based inputs with defaults\n\tfiles = input<File[]>([]);\n\tmultiple = input(true);\n\taccept = input('.pdf,.png,.jpg,.jpeg,.doc,.docx,.csv,.xls,.xlsx');\n\tmaxFileSize = input(2097152); // 2MB in bytes\n\tplaceholder = input('Drag and drop new files here to upload.');\n\tshowUploadButton = input<boolean>(false);\n\tcancelLabel = input('Clear');\n\n\t// Signal-based outputs\n\tfilesSelected = output<File[]>();\n\tfilesCleared = output<void>();\n\n\t// Internal state\n\tuploadedFiles = signal<TypedFile[]>([]);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst _files = this.files();\n\t\t\tif (_files.length) {\n\t\t\t\tthis.uploadedFiles.set(_files.map((file) => this.addFileType(file)));\n\t\t\t}\n\t\t});\n\t}\n\n\tonFileSelect(event: FileSelectEvent) {\n\t\tconst validFiles = event.currentFiles.filter(\n\t\t\t(file) => file.size <= this.maxFileSize() && this.isValidFileType(file)\n\t\t);\n\n\t\tif (validFiles.length) {\n\t\t\t// Add type to files before adding to uploadedFiles\n\t\t\tconst typedFiles = validFiles.map((file) => this.addFileType(file));\n\n\t\t\tif (this.multiple()) {\n\t\t\t\tthis.uploadedFiles.update((files) => Array.from(new Set([...files, ...typedFiles])));\n\t\t\t} else {\n\t\t\t\tthis.uploadedFiles.set(typedFiles);\n\t\t\t}\n\t\t\tthis.filesSelected.emit(typedFiles);\n\t\t}\n\t}\n\n\tonClear() {\n\t\tthis.uploadedFiles.set([]);\n\t\tthis.filesCleared.emit();\n\t}\n\n\tremoveFile(index: number) {\n\t\tthis.uploadedFiles.update((files) => files.filter((_, i) => i !== index));\n\t\tthis.filesSelected.emit(this.uploadedFiles());\n\t}\n\n\tisValidFileType(file: File): boolean {\n\t\tconst acceptedTypes = this.accept().split(',');\n\t\treturn acceptedTypes.some((type) =>\n\t\t\tfile.name.toLowerCase().endsWith(type.trim().toLowerCase())\n\t\t);\n\t}\n\n\tformatFileSize(bytes: number): string {\n\t\tif (bytes === 0) return '0 Bytes';\n\t\tconst k = 1024;\n\t\tconst sizes = ['Bytes', 'KB', 'MB', 'GB'];\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\n\t\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n\t}\n\n\tclear() {\n\t\tthis.uploadedFiles.set([]);\n\t\tif (this.fileUploader?.nativeElement?.clear) {\n\t\t\tthis.fileUploader.nativeElement.clear();\n\t\t}\n\t}\n\n\t// Function to determine file type based on extension\n\tgetFileTypeByExtension(file: File): 'image' | 'pdf' | 'other' {\n\t\tconst fileName = file.name.toLowerCase();\n\t\tconst imageExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.svg', '.webp'];\n\t\tconst pdfExtension = '.pdf';\n\n\t\tif (imageExtensions.some((ext) => fileName.endsWith(ext))) {\n\t\t\treturn 'image';\n\t\t} else if (fileName.endsWith(pdfExtension)) {\n\t\t\treturn 'pdf';\n\t\t} else {\n\t\t\treturn 'other';\n\t\t}\n\t}\n\n\t// Function to add type property to file\n\taddFileType(file: File): TypedFile {\n\t\tconst typedFile = file as TypedFile;\n\t\ttypedFile.fileType = this.getFileTypeByExtension(file);\n\t\treturn typedFile;\n\t}\n}\n","<p-fileupload #fileUploader [multiple]=\"multiple()\" [showUploadButton]=\"showUploadButton()\"\n [cancelLabel]=\"cancelLabel()\" [accept]=\"accept()\" auto=\"false\" [maxFileSize]=\"maxFileSize()\" mode=\"advanced\"\n [customUpload]=\"true\" styleClass=\"!bg-gray-50\" (onSelect)=\"onFileSelect($event)\" (onClear)=\"onClear()\">\n <ng-template #content>\n @if (uploadedFiles().length) {\n <ul class=\"space-y-2\">\n @for (file of uploadedFiles(); track $index) {\n <li class=\"flex justify-between gap-4 p-2 bg-gray-100 rounded\">\n <div class=\"flex gap-2\">\n <ng-container [ngTemplateOutlet]=\"iconTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: file.fileType }\"></ng-container>\n <span class=\"text-sm\"> {{ file.name }} - {{ formatFileSize(file.size) }} </span>\n </div>\n <button type=\"button\" (click)=\"removeFile($index)\" class=\"text-red-500 hover:text-red-700 text-sm\">\n <span class=\"material-icons !text-base\"> cancel </span>\n </button>\n </li>\n }\n </ul>\n } @else {\n <div class=\"flex flex-col items-center gap-3\">\n <img src=\"assets/images/file-upload.svg\" alt=\"File Upload\" class=\"w-28 mx-auto\" />\n <span class=\"font-semibold text-center text-gray-400 text-sm\">\n Drag & drop or<br />\n click the \"Choose\" button to add new files\n </span>\n </div>\n }\n </ng-template>\n <ng-template #file></ng-template>\n</p-fileupload>\n\n<ng-template #iconTemplate let-type>\n @if (type === 'image') {\n <span class=\"material-icons\"> image </span>\n } @else if (type === 'pdf') {\n <span class=\"material-icons\"> picture_as_pdf </span>\n } @else {\n <span class=\"material-icons\"> insert_drive_file </span>\n }\n</ng-template>","// form-field-wrapper.component.ts\nimport { CommonModule } from '@angular/common';\nimport { Component, ContentChild, Input, AfterContentInit, OnDestroy } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { MessageModule } from 'primeng/message';\n\n@Component({\n\tselector: 'ngp-form-field-wrapper',\n\tstandalone: true,\n\timports: [CommonModule, MessageModule],\n\ttemplateUrl: './form-field-wrapper.component.html',\n\tstyleUrls: ['./form-field-wrapper.component.scss']\n})\nexport class FormFieldWrapperComponent implements AfterContentInit, OnDestroy {\n\t@Input() validationMessages: { [key: string]: string } = {\n\t\trequired: 'This field is required',\n\t\temail: 'Please enter a valid email',\n\t\tminlength: 'Input does not meet minimum length',\n\t\tmaxlength: 'Input exceeds maximum length',\n\t\tpattern: 'Input format is invalid',\n\t\tendTimeBeforeStartTime: 'End time must not be before start time',\n\t\tbreakStartBeforeEarliestStart: 'Break start time cannot be before the earliest start time'\n\t};\n\n\t@ContentChild(NgControl) control?: NgControl;\n\n\tprivate subscription?: Subscription;\n\n\tngAfterContentInit(): void {\n\t\tif (this.control) {\n\t\t\tthis.subscription = this.control.statusChanges?.subscribe(() => { });\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subscription?.unsubscribe();\n\t}\n\n\tshouldShowError(): boolean {\n\t\treturn (\n\t\t\t!!this.control &&\n\t\t\tthis.control.invalid === true &&\n\t\t\t(this.control.dirty === true || this.control.touched === true)\n\t\t);\n\t}\n\n\tgetErrorMessage(): string {\n\t\tif (!this.control?.errors) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst firstErrorKey = Object.keys(this.control.errors)[0];\n\t\tconst error = this.control.errors[firstErrorKey];\n\n\t\tif (this.control.errors['message']) {\n\t\t\treturn this.control.errors['message'];\n\t\t}\n\t\tif (error?.message) {\n\t\t\treturn error.message;\n\t\t}\n\n\t\treturn this.validationMessages[firstErrorKey] || `Invalid input: ${firstErrorKey}`;\n\t}\n}\n","<div class=\"form-field-container\">\n <ng-content></ng-content>\n @if (shouldShowError()) {\n <p-message severity=\"error\" variant=\"simple\" size=\"small\" [text]=\"getErrorMessage()\">\n </p-message>\n }\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, input } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { FormFieldWrapperComponent } from '../../../form-field-wrapper/form-field-wrapper.component';\nimport { FloatLabelModule } from 'primeng/floatlabel'\nimport { ProgressSpinnerModule } from 'primeng/progressspinner'\n\ntype SelectValue<T> = T | T[];\ntype SelectValueOrNull<T> = SelectValue<T> | null;\n\n@Component({\n\tselector: 'ngp-basic-select',\n\timports: [NgSelectModule, FormsModule, CommonModule, FormFieldWrapperComponent, FloatLabelModule, ProgressSpinnerModule],\n\ttemplateUrl: './basic-ng-select.component.html',\n\tstyleUrl: './basic-ng-select.component.scss',\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => BasicNgSelectComponent),\n\t\t\tmulti: true\n\t\t}\n\t]\n})\nexport class BasicNgSelectComponent<T = any> implements ControlValueAccessor {\n\toptions = input<T[]>([]);\n\tbindLabel = input<string>('');\n\tbindValue = input<string>('');\n\tplaceholder = input<string>('Select an option');\n\tclearable = input<boolean>(true);\n\tsearchable = input<boolean>(true);\n\tloading = input<boolean>(false);\n\tlabel = input<string | null>(null);\n\trequired = input<boolean>(true);\n\n\t// Internal state\n\tvalue: SelectValueOrNull<T> = null;\n\tdisabled = false;\n\n\t// ControlValueAccessor callbacks\n\tprivate onChange: (value: SelectValueOrNull<T>) => void = () => { };\n\tonTouched: () => void = () => { };\n\n\t// Handle value changes from ng-select\n\tonValueChange(value: SelectValueOrNull<T>): void {\n\t\tthis.value = value;\n\t\tthis.onChange(value);\n\t}\n\n\twriteValue(val: SelectValueOrNull<T>): void {\n\t\tthis.value = val;\n\t}\n\n\tregisterOnChange(fn: (val: SelectValueOrNull<T>) => void): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.disabled = isDisabled;\n\t}\n\n\t// Compare function for ng-select\n\tcompareWith = (item: any, selected: any) => {\n\t\tconst bindValueKey = this.bindValue();\n\n\t\t// If no bindValue is set, compare entire objects\n\t\tif (!bindValueKey) {\n\t\t\treturn item === selected;\n\t\t}\n\n\t\t// Handle null/undefined cases\n\t\tif (!item || !selected) {\n\t\t\treturn item === selected;\n\t\t}\n\n\t\t// If selected is a primitive (just the id), compare with item's property\n\t\tif (typeof selected !== 'object') {\n\t\t\treturn item[bindValueKey] === selected;\n\t\t}\n\n\t\t// If both are objects, compare the bindValue property\n\t\treturn item[bindValueKey] === selected[bindValueKey];\n\t};\n}\n","<ngp-form-field-wrapper>\n <p-floatlabel variant=\"in\">\n <ng-select [(ngModel)]=\"value\" [bindLabel]=\"bindLabel()\" [bindValue]=\"bindValue()\" [items]=\"options()\"\n [compareWith]=\"compareWith\" [clearable]=\"clearable()\" (change)=\"onValueChange($event)\">\n <ng-template ng-loadingspinner-tmp>\n <ng-container [ngTemplateOutlet]=\"spinner\" />\n </ng-template>\n </ng-select>\n\n @if (label()) {\n <label class=\"block mb-2\" [ngClass]=\"{'required-label': required() }\">{{ label() }}</label>\n }\n </p-floatlabel>\n</ngp-form-field-wrapper>\n\n<ng-template #spinner>\n <p-progress-spinner ariaLabel=\"loading\" styleClass=\"text-gray-400\" />\n</ng-template>","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { IdName } from '../../models/common.model';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class AddressService {\n\turl = `/api/v1/records/address`;\n\thttp = inject(HttpClient);\n\n\tgetProvinces(): Observable<IdName[]> {\n\t\treturn this.http.get<IdName[]>(`${this.url}/provinces`);\n\t}\n\n\tgetMunicipalities(provinceId: number): Observable<any> {\n\t\treturn this.http.get<any>(`${this.url}/municipalities/${provinceId}`);\n\t}\n\n\tgetBarangays(muncipalityId: any, params?: any): Observable<any> {\n\t\treturn this.http.get<any>(`${this.url}/barangay/${muncipalityId}`, { params });\n\t}\n}\n","import { Component, effect, forwardRef, inject, input, signal } from '@angular/core';\nimport {\n\tAbstractControl,\n\tControlValueAccessor,\n\tFormBuilder,\n\tFormGroup,\n\tNG_VALIDATORS,\n\tNG_VALUE_ACCESSOR,\n\tReactiveFormsModule,\n\tValidationErrors,\n\tValidator\n} from '@angular/forms';\nimport { RxwebValidators } from '@rxweb/reactive-form-validators';\nimport { IdName } from '../../models/common.model';\nimport { Subscription } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { FormFieldWrapperComponent } from '../form-field-wrapper/form-field-wrapper.component';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { Address, Barangay, City } from '../../models/address.model';\nimport { AddressService } from '../../services/address/address.service';\n\n@Component({\n\tselector: 'ngp-fg-address',\n\timports: [\n\t\tInputTextModule,\n\t\tInputNumberModule,\n\t\tFloatLabelModule,\n\t\tCommonModule,\n\t\tReactiveFormsModule,\n\t\tFormFieldWrapperComponent,\n\t\tNgSelectModule\n\t],\n\ttemplateUrl: './fg-address.component.html',\n\tstyleUrl: './fg-address.component.scss',\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => FgAddressComponent),\n\t\t\tmulti: true\n\t\t},\n\t\t{\n\t\t\tprovide: NG_VALIDATORS,\n\t\t\tuseExisting: forwardRef(() => FgAddressComponent),\n\t\t\tmulti: true\n\t\t}\n\t]\n})\nexport class FgAddressComponent implements ControlValueAccessor, Validator {\n\tshowHeader = input<boolean>(true);\n\tisCreateMode = input<boolean>(true);\n\tisViewMode = input<boolean>(false);\n\n\taddressForm!: FormGroup;\n\tprovHttp$!: Subscription;\n\tcityHttp$!: Subscription;\n\tbarangayHttp$!: Subscription;\n\tprovinceOptions: IdName[] = [];\n\tcityOptions: City[] = [];\n\tbarangayOptions: Barangay[] = [];\n\n\tisDisabled = signal<boolean>(false);\n\tprivate pendingAddress: Address | null = null;\n\tprivate isInitializing = false;\n\tprivate detectedEditMode = false;\n\n\tprivate onChange: (value: Address | null) => void = () => {};\n\tprivate onTouched: () => void = () => {};\n\n\tprivate readonly addressService = inject(AddressService);\n\tprivate readonly fb = inject(FormBuilder);\n\n\tconstructor() {\n\t\tthis.addressForm = this.fb.group({\n\t\t\tline1: [null, RxwebValidators.required()],\n\t\t\tline2: [null],\n\t\t\tbarangay: [null, RxwebValidators.required()],\n\t\t\tcity: [null, RxwebValidators.required()],\n\t\t\tprovince: [null, RxwebValidators.required()],\n\t\t\tcountry: ['Philippines', RxwebValidators.required()],\n\t\t\tzipCode: [null, RxwebValidators.required()],\n\t\t\tlandmark: [null, RxwebValidators.required()]\n\t\t});\n\n\t\t// Use effect to watch for form value changes\n\t\teffect(() => {\n\t\t\tif (this.isDisabled()) {\n\t\t\t\tthis.addressForm.disable({ emitEvent: false });\n\t\t\t} else {\n\t\t\t\tthis.addressForm.enable({ emitEvent: false });\n\t\t\t}\n\t\t});\n\n\t\t// Subscribe to form changes\n\t\tthis.addressForm.valueChanges.subscribe((value) => {\n\t\t\tthis.onChange(value);\n\t\t\tthis.onTouched();\n\t\t});\n\n\t\tthis.loadProvince();\n\n\t\t// Handle province changes - works for both create and edit mode\n\t\tthis.addressForm.get('province')?.valueChanges.subscribe((prov) => {\n\t\t\tif (prov && !this.isInitializing) {\n\t\t\t\tthis.clearFieldByName('city');\n\t\t\t\tthis.clearFieldByName('barangay');\n\t\t\t\tthis.cityOptions = [];\n\t\t\t\tthis.barangayOptions = [];\n\t\t\t\tthis.loadCityByProvinceId(prov.id);\n\t\t\t}\n\t\t});\n\n\t\t// Handle city changes - works for both create and edit mode\n\t\tthis.addressForm.get('city')?.valueChanges.subscribe((city) => {\n\t\t\tif (city && !this.isInitializing) {\n\t\t\t\tthis.clearFieldByName('barangay');\n\t\t\t\tthis.barangayOptions = [];\n\t\t\t\tthis.loadBarangayByCityId(city.id);\n\t\t\t}\n\t\t});\n\t}\n\n\tclearFieldByName(fieldName: string): void {\n\t\tthis.addressForm.get(fieldName)?.setValue(null, { emitEvent: false });\n\t}\n\n\tloadProvince(): void {\n\t\tthis.provHttp$ = this.addressService.getProvinces().subscribe((res) => {\n\t\t\tthis.provinceOptions = res;\n\n\t\t\t// If we have a pending address to load, process it now\n\t\t\tif (this.pendingAddress) {\n\t\t\t\tthis.initializeEditMode(this.pendingAddress);\n\t\t\t}\n\t\t});\n\t}\n\n\tloadCityByProvinceId(id: number): void {\n\t\tthis.cityHttp$ = this.addressService.getMunicipalities(id).subscribe((res) => {\n\t\t\tthis.cityOptions = res;\n\n\t\t\t// Continue initialization if needed\n\t\t\tif (this.isInitializing && this.pendingAddress) {\n\t\t\t\tthis.setCityFromPending();\n\t\t\t}\n\t\t});\n\t}\n\n\tloadBarangayByCityId(id: number): void {\n\t\tthis.barangayHttp$ = this.addressService.getBarangays(id).subscribe((res) => {\n\t\t\tthis.barangayOptions = res;\n\n\t\t\t// Continue initialization if needed\n\t\t\tif (this.isInitializing && this.pendingAddress) {\n\t\t\t\tthis.setBarangayFromPending();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Detects if the address contains data that requires edit mode initialization\n\t */\n\tprivate isEditModeAddress(address: Address): boolean {\n\t\t// Check if any cascading field (province, city, barangay) is a string (name)\n\t\t// This indicates data from backend that needs to be matched with dropdown options\n\t\treturn (\n\t\t\t(typeof address.province === 'string' && address.province !== '') ||\n\t\t\t(typeof address.city === 'string' && address.city !== '') ||\n\t\t\t(typeof address.barangay === 'string' && address.barangay !== '')\n\t\t);\n\t}\n\n\tprivate initializeEditMode(address: Address): void {\n\t\tthis.isInitializing = true;\n\n\t\t// Set non-cascading fields first\n\t\tthis.addressForm.patchValue(\n\t\t\t{\n\t\t\t\tline1: address.line1,\n\t\t\t\tline2: address.line2,\n\t\t\t\tcountry: address.country || 'Philippines',\n\t\t\t\tzipCode: address.zipCode,\n\t\t\t\tlandmark: address.landmark\n\t\t\t},\n\t\t\t{ emitEvent: false }\n\t\t);\n\n\t\t// Find and set province\n\t\tif (address.province && typeof address.province === 'string') {\n\t\t\tconst provinceItem = this.provinceOptions.find(\n\t\t\t\t(p) => p.name.toLowerCase() === address.province?.toLowerCase()\n\t\t\t);\n\n\t\t\tif (provinceItem) {\n\t\t\t\tthis.addressForm.get('province')?.setValue(provinceItem, { emitEvent: false });\n\t\t\t\tthis.loadCityByProvinceId(provinceItem.id);\n\t\t\t} else {\n\t\t\t\tthis.completeInitialization();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.completeInitialization();\n\t\t}\n\t}\n\n\tprivate setCityFromPending(): void {\n\t\tif (!this.pendingAddress?.city || typeof this.pendingAddress.city !== 'string') {\n\t\t\tthis.completeInitialization();\n\t\t\treturn;\n\t\t}\n\n\t\tconst cityItem = this.cityOptions.find(\n\t\t\t(c) => c.name.toLowerCase() === this.pendingAddress!.city?.toLowerCase()\n\t\t);\n\n\t\tif (cityItem) {\n\t\t\tthis.addressForm.get('city')?.setValue(cityItem, { emitEvent: false });\n\t\t\tthis.loadBarangayByCityId(cityItem.id);\n\t\t} else {\n\t\t\tthis.completeInitialization();\n\t\t}\n\t}\n\n\tprivate setBarangayFromPending(): void {\n\t\tif (!this.pendingAddress?.barangay || typeof this.pendingAddress.barangay !== 'string') {\n\t\t\tthis.completeInitialization();\n\t\t\treturn;\n\t\t}\n\n\t\tconst barangayItem = this.barangayOptions.find(\n\t\t\t(b) => b.name.toLowerCase() === this.pendingAddress!.barangay?.toLowerCase()\n\t\t);\n\n\t\tif (barangayItem) {\n\t\t\tthis.addressForm.get('barangay')?.setValue(barangayItem, { emitEvent: false });\n\t\t}\n\n\t\tthis.completeInitialization();\n\t}\n\n\tprivate completeInitialization(): void {\n\t\tthis.isInitializing = false;\n\t\tthis.pendingAddress = null;\n\t}\n\n\t// ControlValueAccessor methods\n\twriteValue(value: Address | null): void {\n\t\tif (value) {\n\t\t\t// Auto-detect if this is edit mode based on the address data structure\n\t\t\tthis.detectedEditMode = this.isEditModeAddress(value);\n\n\t\t\tif (this.detectedEditMode) {\n\t\t\t\t// Address contains string values (names) - needs initialization\n\t\t\t\tthis.pendingAddress = value;\n\n\t\t\t\t// If provinces are already loaded, start initialization\n\t\t\t\tif (this.provinceOptions.length > 0) {\n\t\t\t\t\tthis.initializeEditMode(value);\n\t\t\t\t}\n\t\t\t\t// Otherwise, it will be triggered when provinces load\n\t\t\t} else {\n\t\t\t\t// Create mode or already has proper objects\n\t\t\t\tthis.addressForm.patchValue(value, { emitEvent: false });\n\n\t\t\t\t// Load cascading data if IDs are present\n\t\t\t\tconst province = value.province;\n\t\t\t\tif (province && typeof province === 'object' && 'id' in province) {\n\t\t\t\t\tthis.loadCityByProvinceId((province as any).id);\n\t\t\t\t}\n\n\t\t\t\tconst city = value.city;\n\t\t\t\tif (city && typeof city === 'object' && 'id' in city) {\n\t\t\t\t\tthis.loadBarangayByCityId((city as any).id);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthis.addressForm.reset({ country: 'Philippines' }, { emitEvent: false });\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: Address | null) => void): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.isDisabled?.set(isDisabled);\n\t\tif (isDisabled) {\n\t\t\tthis.addressForm.disable();\n\t\t} else {\n\t\t\tthis.addressForm.enable();\n\t\t}\n\t}\n\n\tvalidate(control: AbstractControl): ValidationErrors | null {\n\t\treturn this.addressForm?.valid ? null : { invalidAddress: true };\n\t}\n}\n","@if (showHeader()) {\n\t<h2 class=\"text-xl font-semibold mb-4\">Address</h2>\n}\n\n@if (isViewMode()) {\n\t@let address = addressForm.value;\n\n\t<div class=\"grid gap-3 p-4\">\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"country\">Country:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.country || 'Philippines' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"province\">Province:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.province?.name || address.province || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"city\">City/Municipality:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.city?.name || address.city || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"barangay\">Barangay:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.barangay?.name || address.barangay || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line1\">Line 1:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line1 || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line2\">Line 2:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line2 || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"zipCode\">Zip Code:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.zipCode || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"landmark\">Nearest Landmark:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.landmark || '' }}</p>\n\t\t</div>\n\t</div>\n} @else {\n\t<form [formGroup]=\"addressForm\">\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"country\" formControlName=\"country\" class=\"w-full\" />\n\t\t\t\t\t\t<label for=\"country\" class=\"block mb-2 required-label\">Country</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"province\"\n\t\t\t\t\t\t\t[items]=\"provinceOptions\"\n\t\t\t\t\t\t\t[loading]=\"provHttp$ && !provHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\t\t\t\t\t\t<label for=\"province\" class=\"block mb-2 required-label\">Province</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"city\"\n\t\t\t\t\t\t\t[items]=\"cityOptions\"\n\t\t\t\t\t\t\t[loading]=\"cityHttp$ && !cityHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\t\t\t\t\t\t<label for=\"city\" class=\"block mb-2 required-label\">City/Municipality</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"barangay\"\n\t\t\t\t\t\t\t[items]=\"barangayOptions\"\n\t\t\t\t\t\t\t[loading]=\"barangayHttp$ && !barangayHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\n\t\t\t\t\t\t<label for=\"barangay\" class=\"block mb-2 required-label\">Barangay</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div>\n\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t<label for=\"line1\" class=\"block mb-2 required-label\">Line 1</label>\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line1\" formControlName=\"line1\" class=\"w-full\" />\n\t\t\t\t</p-floatlabel>\n\t\t\t</ngp-form-field-wrapper>\n\t\t</div>\n\n\t\t<div>\n\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t<label for=\"line2\" class=\"block mb-2\">Line 2</label>\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line2\" formControlName=\"line2\" class=\"w-full\" />\n\t\t\t\t</p-floatlabel>\n\t\t\t</ngp-form-field-wrapper>\n\t\t</div>\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<p-inputnumber\n\t\t\t\t\t\t\t[inputId]=\"'zipCode'\"\n\t\t\t\t\t\t\tformControlName=\"zipCode\"\n\t\t\t\t\t\t\tstyleClass=\"w-full\"\n\t\t\t\t\t\t\t[useGrouping]=\"false\" />\n\t\t\t\t\t\t<label for=\"zipCode\" class=\"block mb-2 required-label\">Zip Code</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<label for=\"landmark\" class=\"block mb-2 required-label\">Nearest Landmark</label>\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"landmark\" formControlName=\"landmark\" class=\"w-full\" />\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n\tComponent,\n\tcomputed,\n\tContentChild,\n\teffect,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tViewChild\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { ButtonModule } from 'primeng/button';\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { PopoverModule } from 'primeng/popover';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { Table, TableModule, TablePageEvent } from 'primeng/table';\nimport { ToastModule } from 'primeng/toast';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TableColumn } from '../../../models/table-column.model';\n\n@Component({\n\tselector: 'ngp-data-table',\n\timports: [\n\t\tCommonModule,\n\t\tFormsModule,\n\t\tReactiveFormsModule,\n\t\tTableModule,\n\t\tButtonModule,\n\t\tInputTextModule,\n\t\tConfirmDialogModule,\n\t\tDialogModule,\n\t\tTooltipModule,\n\t\tToastModule,\n\t\tToolbarModule,\n\t\tSkeletonModule,\n\t\tPopoverModule\n\t],\n\ttemplateUrl: './data-table.component.html',\n\tstyleUrl: './data-table.component.scss',\n\tproviders: [ConfirmationService, MessageService]\n})\nexport class DataTableComponent<T extends Record<string, any>> {\n\tdataSource = input<T[]>([]);\n\tcolumns = input<TableColumn[]>([]);\n\tloading = input<boolean>(false);\n\tpageSize = input<number>(10);\n\ttotalElements = input<number>(0);\n\tcurrentPage = input<number>(0);\n\tshowDefaultActions = input<boolean>(true);\n\temptyMessage = input<string>('No data available.');\n\thasDeleteAction = input<boolean>(true);\n\thasEditAction = input<boolean>(true);\n\tcanEdit = input<(row: unknown) => boolean>(() => true);\n\thasViewAction = input<boolean>(true);\n\tentityName = input<string>('');\n\tisPaginated = input<boolean>(true);\n\tshowCustomAction = input<boolean>(false);\n\tshowRowNumbers = input<boolean>(false);\n\trowNumberHeader = input<string>('');\n\n\t// Internal signals\n\tdata = signal<T[]>([]);\n\tfilteredData = signal<T[]>([]);\n\tdialogVisible = signal<boolean>(false);\n\tdialogTitle = signal<string>('Add Item');\n\teditingItem = signal<T | null>(null);\n\n\t// Custom event emitters\n\tadd = output<T>();\n\tedit = output<T>();\n\tdeleteAction = output<T>();\n\tview = output<T>();\n\tpageChange = output<TablePageEvent>();\n\tsortChange = output<{ sort: string; order: string }>();\n\n\tactions = computed(() => [this.hasViewAction(), this.hasEditAction(), this.hasDeleteAction()]);\n\tactionsLength = computed(() => this.actions().filter((action) => !!action).length);\n\tactionItems = computed(() => {\n\t\treturn [\n\t\t\t{\n\t\t\t\tlabel: 'View ' + this.entityName(),\n\t\t\t\tvisible: this.hasViewAction(),\n\t\t\t\ticon: 'pi-search'\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Update ' + this.entityName(),\n\t\t\t\tvisible: this.hasEditAction(),\n\t\t\t\ticon: 'pi-pen-to-square',\n\t\t\t\tshouldShow: (item: unknown) => this.canEdit()(item)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Delete ' + this.entityName(),\n\t\t\t\tvisible: this.hasDeleteAction(),\n\t\t\t\ticon: 'pi-trash'\n\t\t\t}\n\t\t];\n\t});\n\n\t// Content children for custom templates\n\t@ContentChild('formTemplate') formTemplate?: TemplateRef<unknown>;\n\t@ViewChild('dt') table?: Table;\n\n\t// Services\n\tprivate readonly http = inject(HttpClient);\n\tprivate readonly confirmationService = inject(ConfirmationService);\n\tprivate readonly messageService = inject(MessageService);\n\n\t// Column filters for individual column filtering\n\tprivate readonly filterValues: Record<string, string> = {};\n\n\t// For custom cell templates\n\tcustomTemplates = new Map<string, TemplateRef<unknown>>();\n\n\tconstructor() {\n\t\t// Effect to update filtered data when raw data changes\n\t\teffect(() => {\n\t\t\tconst sourceData = this.dataSource();\n\t\t\tthis.data.set([...sourceData]);\n\t\t});\n\t}\n\n\t// Register a custom template for a specific column\n\tregisterTemplate(field: string, template: TemplateRef<unknown>): void {\n\t\tthis.customTemplates.set(field, template);\n\t}\n\n\thandlePageChange(event: TablePageEvent) {\n\t\tthis.pageChange.emit(event);\n\t}\n\n\thandleSort(event: { field: string; order: number }) {\n\t\tconst column = this.columns().find((col) => col.field === event.field);\n\t\tconst actualSortField = column?.sortField ?? event.field;\n\t\tconst order = event.order === 1 ? 'ASC' : 'DESC';\n\n\t\tthis.sortChange.emit({\n\t\t\tsort: actualSortField,\n\t\t\torder\n\t\t});\n\t}\n\n\tresetTableSort(): void {\n\t\tif (this.table) {\n\t\t\tthis.table.sortOrder = 0;\n\t\t\tthis.table.sortField = null;\n\t\t\tthis.table.tableService.onSort(null);\n\t\t}\n\t}\n\n\t// Helper to safely get nested property values using dot notation\n\tgetItemValue(item: T, field: string, column?: TableColumn): unknown {\n\t\tif (column && typeof column.render === 'function') {\n\t\t\treturn column.render(item);\n\t\t}\n\t\treturn field\n\t\t\t.split('.')\n\t\t\t.reduce((obj: unknown, key) => obj?.[key as keyof typeof obj] ?? null, item as unknown);\n\t}\n\n\tperFormActionFromPopover(item: T, actionType: string): void {\n\t\tif (actionType.includes('View')) {\n\t\t\tthis.view.emit(item);\n\t\t} else if (actionType.includes('Update')) {\n\t\t\tthis.edit.emit(item);\n\t\t} else if (actionType.includes('Delete')) {\n\t\t\tthis.deleteAction.emit(item);\n\t\t}\n\t}\n}\n","<div class=\"card\">\n\t<p-table\n\t\t#dt\n\t\t[value]=\"data()\"\n\t\t[paginator]=\"isPaginated()\"\n\t\t[rows]=\"pageSize()\"\n\t\t[rowsPerPageOptions]=\"[5, 10, 25, 50]\"\n\t\t[rowHover]=\"true\"\n\t\t[loading]=\"loading()\"\n\t\t[showLoader]=\"false\"\n\t\t[scrollable]=\"true\"\n\t\tstyleClass=\"p-datatable-sm\"\n\t\t[totalRecords]=\"totalElements()\"\n\t\t[lazy]=\"isPaginated()\"\n\t\t[first]=\"currentPage() * pageSize()\"\n\t\tpaginatorDropdownAppendTo=\"body\"\n\t\t(onPage)=\"handlePageChange($event)\"\n\t\t(onSort)=\"handleSort($event)\">\n\t\t<ng-template pTemplate=\"header\">\n\t\t\t<tr>\n\t\t\t\t@if (showRowNumbers()) {\n\t\t\t\t\t<th class=\"text-left !font-bold !text-gray-500 !w-1\" scope=\"col\">{{\n\t\t\t\t\t\trowNumberHeader()\n\t\t\t\t\t}}</th>\n\t\t\t\t}\n\t\t\t\t@for (column of columns(); track column.field) {\n\t\t\t\t\t<th\n\t\t\t\t\t\t[pSortableColumn]=\"column.sortable ? column.field : undefined\"\n\t\t\t\t\t\tclass=\"text-left !font-bold !text-gray-500\"\n\t\t\t\t\t\t[ngClass]=\"{ '!text-center': column.align === 'center' }\"\n\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t[style]=\"{ width: column.width || 'auto' }\">\n\t\t\t\t\t\t{{ column.header }}\n\t\t\t\t\t\t@if (column.sortable) {\n\t\t\t\t\t\t\t<p-sortIcon [field]=\"column.field\"></p-sortIcon>\n\t\t\t\t\t\t}\n\t\t\t\t\t</th>\n\t\t\t\t}\n\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\n\t\t\t\t\t<th class=\"!w-32 !text-center !font-bold !text-gray-500\" scope=\"col\">Actions</th>\n\t\t\t\t}\n\t\t\t</tr>\n\t\t</ng-template>\n\n\t\t<ng-template pTemplate=\"body\" let-item let-rowIndex=\"rowIndex\">\n\t\t\t<tr>\n\t\t\t\t@if (showRowNumbers()) {\n\t\t\t\t\t<td class=\"!w-1 text-center\">\n\t\t\t\t\t\t{{ rowIndex + 1 }}\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t\t@for (column of columns(); track column.field) {\n\t\t\t\t\t<td [ngClass]=\"{ '!text-center': column.align === 'center' }\">\n\t\t\t\t\t\t@if (customTemplates && customTemplates.get(column.field)) {\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get(column.field)!\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: column.field }\">\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t{{ getItemValue(item, column.field, column) }}\n\t\t\t\t\t\t}\n\t\t\t\t\t</td>\n\t\t\t\t}\n\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\n\t\t\t\t\t<td class=\"\">\n\t\t\t\t\t\t<div class=\"flex justify-center gap-2\">\n\t\t\t\t\t\t\t@if (showDefaultActions() && actionsLength() < 2 && !showCustomAction()) {\n\t\t\t\t\t\t\t\t<!-- Inline buttons for less than 2 standard actions and no custom action -->\n\t\t\t\t\t\t\t\t@if (hasViewAction()) {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\t\t\t\t\tpButton\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-primary\"\n\t\t\t\t\t\t\t\t\t\t[label]=\"'View'\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"view.emit(item)\"></button>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (hasEditAction()) {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\t\t\t\t\tpButton\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-primary\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"edit.emit(item)\"\n\t\t\t\t\t\t\t\t\t\t[label]=\"'Update'\"></button>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (hasDeleteAction()) {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\t\t\t\t\tpButton\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-danger\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"deleteAction.emit(item)\"\n\t\t\t\t\t\t\t\t\t\t[label]=\"'Delete'\"></button>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} @else if (!showDefaultActions() && showCustomAction()) {\n\t\t\t\t\t\t\t\t<!-- Only custom action, no popover needed -->\n\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get('customAction')!\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: 'customAction' }\">\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<!-- Popover menu for 2+ standard actions or when combining with custom action -->\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\t\t\t\tpButton\n\t\t\t\t\t\t\t\t\ticon=\"pi pi-ellipsis-h\"\n\t\t\t\t\t\t\t\t\tclass=\"p-button-outlined p-button-secondary\"\n\t\t\t\t\t\t\t\t\t(click)=\"po.toggle($event)\"></button>\n\t\t\t\t\t\t\t\t<p-popover #po styleClass=\"!min-w-40\">\n\t\t\t\t\t\t\t\t\t<span class=\"!font-semibold !text-gray-500 block mb-2\">Actions</span>\n\t\t\t\t\t\t\t\t\t<ul class=\"list-none p-0 m-0 flex flex-col\">\n\t\t\t\t\t\t\t\t\t\t@if (showDefaultActions()) {\n\t\t\t\t\t\t\t\t\t\t\t@for (actionItem of actionItems(); track $index) {\n\t\t\t\t\t\t\t\t\t\t\t\t@if (\n\t\t\t\t\t\t\t\t\t\t\t\t\tactionItem.visible &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t(!actionItem.shouldShow || actionItem.shouldShow(item))\n\t\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"flex items-center gap-2 px-2 py-3 hover:bg-emphasis cursor-pointer rounded-border\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"perFormActionFromPopover(item, actionItem.label)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"pi\" [ngClass]=\"actionItem.icon\"></span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"font-medium\">{{ actionItem.label }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t<!-- Custom action template in popover -->\n\t\t\t\t\t\t\t\t\t\t@if (showCustomAction() && customTemplates.get('customAction')) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get('customAction')!\"\n\t\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: 'customAction' }\">\n\t\t\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t</p-popover>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t</tr>\n\t\t</ng-template>\n\n\t\t<ng-template #loadingbody>\n\t\t\t<tr>\n\t\t\t\t@for (column of columns(); track column.field) {\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<p-skeleton />\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<p-skeleton />\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t@for (column of columns(); track column.field) {\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<p-skeleton />\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<p-skeleton />\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t@for (column of columns(); track column.field) {\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<p-skeleton />\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<p-skeleton />\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t</tr>\n\t\t</ng-template>\n\n\t\t<ng-template pTemplate=\"emptymessage\">\n\t\t\t<tr>\n\t\t\t\t<td [attr.colspan]=\"columns().length + 1\" class=\"text-center p-4\">{{ emptyMessage() }}</td>\n\t\t\t</tr>\n\t\t</ng-template>\n\t</p-table>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, forwardRef, OnInit, signal } from '@angular/core';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { PaginatedRequest, PaginatedResponse } from '../../../../models/paginated.model';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n NG_VALIDATORS,\n Validator,\n AbstractControl,\n ValidationErrors,\n Validators\n} from '@angular/forms';\n\n\ntype SelectValue<T> = T | T[];\ntype SelectValueOrNull<T> = SelectValue<T> | null;\n\n@Component({\n selector: 'ngp-dynamic-select',\n templateUrl: './dynamic-select.component.html',\n imports: [NgSelectModule, FormsModule, CommonModule, FloatLabelModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DynamicNgSelectComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DynamicNgSelectComponent),\n multi: true\n }\n ]\n})\nexport class DynamicNgSelectComponent<T> implements ControlValueAccessor, Validators, OnInit {\n\n @Input() apiUrl!: (params?: PaginatedRequest) => Observable<PaginatedResponse<T>>;\n @Input() formatOptions?: (items: T[]) => T[];\n\n @Input() bindLabel = 'description';\n @Input() bindValue = 'id';\n @Input() placeholder = 'Select';\n @Input() isRequired = false;\n @Input() options: T[] = [];\n\n value!: number | string | null;\n disabled = false;\n\n tableParams = signal<PaginatedRequest>({ page: 0, size: 10 });\n\n private onChange = (_: any) => { }; // eslint-disable-line\n private onTouched = () => { }; // eslint-disable-line\n\n ngOnInit(): void {\n this.loadOptions();\n }\n\n private loadOptions(): void {\n if (!this.apiUrl) {\n return;\n }\n\n this.getOptions();\n }\n\n getOptions(): void {\n this.apiUrl(this.tableParams())\n .pipe(tap((items) => {\n const values = this.formatOptions ? this.formatOptions(items.results) : items.results\n this.options = [...this.options, ...values];\n\n if (items.hasNextPage) {\n this.tableParams.update((param) => ({ ...param, page: param.page + 1 }));\n this.getOptions();\n }\n }))\n .subscribe();\n }\n\n writeValue(value: string | number): void {\n this.value = value;\n }\n\n registerOnChange(fn: (val: SelectValueOrNull<T>) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onValueChange(value: any): void {\n if (!value) {\n this.value = null;\n this.onChange(null);\n } else {\n this.value = value[this.bindValue];\n this.onChange(value[this.bindValue]);\n }\n this.onTouched();\n }\n\n validate(control: AbstractControl): ValidationErrors | null { // eslint-disable-line\n if (\n this.isRequired &&\n (this.value === null || this.value === undefined || this.value === '')\n ) {\n return { required: true };\n }\n\n return null;\n }\n}\n","<p-floatlabel variant=\"in\">\n <ng-select [items]=\"options\" [bindLabel]=\"bindLabel\" [bindValue]=\"bindValue\" [disabled]=\"disabled\"\n [(ngModel)]=\"value\" [clearable]=\"true\" (change)=\"onValueChange($event)\">\n </ng-select>\n\n <label [class.required-label]=\"isRequired\">{{ placeholder }}</label>\n</p-floatlabel>","export class PaginatedRequest {\n\tpage!: number;\n\tsize!: number;\n\tsort?: string | null;\n\t[key: string]: any;\n}\n\nexport interface PaginatedResponse<T> {\n\thasNextPage: boolean;\n\ttotalElements: number;\n\tresults: T[];\n\tcurrentPage: number;\n\tpageSize: number;\n}\n","import { computed, effect, inject, Injectable, Injector, signal, untracked } from '@angular/core';\nimport { catchError, finalize, Observable, of, shareReplay } from 'rxjs';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { PaginatedRequest, PaginatedResponse } from '../models/paginated.model';\nimport { ActionType, ApiOperations } from '../types/api-operations.type';\n\n@UntilDestroy()\n@Injectable()\nexport abstract class CrudAbstractComponent<\n\tT,\n\tCreateDto = Partial<T>,\n\tUpdateDto = Partial<T>,\n\tIdType = string | number\n> {\n\t// State signals\n\tprivate readonly sourceSignal = signal<Observable<T | T[]> | null>(null);\n\tprivate readonly loadingSignal = signal<boolean>(false);\n\tprivate readonly errorSignal = signal<Error | null>(null);\n\tprivate readonly actionSignal = signal<ActionType | null>(null);\n\tprivate readonly firstLoadSignal = signal<boolean>(true);\n\tprivate readonly showFormSignal = signal<boolean>(false);\n\tprivate readonly formActionSignal = signal<'Create' | 'Update' | 'View' | null>(null);\n\tprotected readonly dataSignal = signal<T | T[] | null>(null);\n\n\tpublic filters = signal<Record<string, unknown> | null>(null);\n\tpublic tableParams = signal<PaginatedRequest>({ page: 0, size: 10 });\n\tpublic requestParams = computed(() => ({\n\t\t...this.filters(),\n\t\t...this.tableParams()\n\t}));\n\n\t// Injections\n\tprivate readonly injector = inject(Injector);\n\n\t// Public interface\n\tpublic readonly data = this.dataSignal.asReadonly();\n\tpublic readonly isLoading = this.loadingSignal.asReadonly();\n\tpublic readonly error = this.errorSignal.asReadonly();\n\tpublic readonly currentAction = this.actionSignal.asReadonly();\n\tpublic readonly isFirstLoad = this.firstLoadSignal.asReadonly();\n\tpublic readonly isFormVisible = this.showFormSignal.asReadonly();\n\tpublic readonly formAction = this.formActionSignal.asReadonly();\n\n\tpublic readonly safeDataSource = computed(() => {\n\t\tconst rawData = this.dataSignal();\n\t\tconst isLoading = this.loadingSignal();\n\n\t\tinterface Page<T> {\n\t\t\tresults: T[];\n\t\t\thasNextPage: boolean;\n\t\t\ttotalElements: number;\n\t\t\tpageSize: number;\n\t\t\tcurrentPage: number;\n\t\t}\n\n\t\t// Default empty response\n\t\tconst defaultResponse = {\n\t\t\thasNextPage: false,\n\t\t\ttotalElements: 0,\n\t\t\tresults: [] as T[],\n\t\t\tcurrentPage: 0,\n\t\t\tpageSize: 10\n\t\t};\n\n\t\tif (!rawData || isLoading) return defaultResponse;\n\n\t\tconst isPaginatedResponse = (obj: unknown): obj is Page<T> => {\n\t\t\treturn (\n\t\t\t\tobj !== null &&\n\t\t\t\ttypeof obj === 'object' &&\n\t\t\t\t'results' in obj &&\n\t\t\t\tArray.isArray(obj.results) &&\n\t\t\t\t'totalElements' in obj &&\n\t\t\t\ttypeof obj.totalElements === 'number'\n\t\t\t);\n\t\t};\n\n\t\t// Handler for Paginated Response\n\t\tif (typeof rawData === 'object' && isPaginatedResponse(rawData)) {\n\t\t\treturn {\n\t\t\t\tresults: [...rawData.results],\n\t\t\t\ttotalElements: rawData.totalElements,\n\t\t\t\tcurrentPage: rawData.currentPage,\n\t\t\t\tpageSize: rawData.pageSize,\n\t\t\t\thasNextPage: rawData.hasNextPage\n\t\t\t};\n\t\t}\n\n\t\t// Handle array case\n\t\tif (Array.isArray(rawData)) {\n\t\t\treturn {\n\t\t\t\t...defaultResponse,\n\t\t\t\ttotalElements: rawData.length,\n\t\t\t\tresults: [...rawData],\n\t\t\t\tpageSize: rawData.length // For arrays, we typically return all elements\n\t\t\t};\n\t\t}\n\n\t\t// Handle single object case\n\t\treturn {\n\t\t\t...defaultResponse,\n\t\t\ttotalElements: 1,\n\t\t\tresults: [rawData],\n\t\t\tpageSize: 1\n\t\t};\n\t});\n\n\t/**\n\t * Provides direct access to raw list data without pagination wrapper\n\t * Returns an empty array if data is not available or not an array\n\t */\n\tpublic readonly rawList = computed<T[]>(() => {\n\t\tconst rawData = this.data();\n\n\t\tif (!rawData || this.isLoading()) {\n\t\t\treturn [];\n\t\t}\n\n\t\t// If it's already an array, return it\n\t\tif (Array.isArray(rawData)) {\n\t\t\treturn [...rawData];\n\t\t}\n\n\t\t// If it's a paginated response with a results property that's an array\n\t\tif (typeof rawData === 'object' && 'results' in rawData && Array.isArray(rawData.results)) {\n\t\t\treturn [...rawData.results];\n\t\t}\n\n\t\t// If it's a single object, return it as an array with one item\n\t\tif (typeof rawData === 'object' && !('results' in rawData)) {\n\t\t\treturn [rawData as T];\n\t\t}\n\n\t\t// Default fallback\n\t\treturn [];\n\t});\n\n\t// Usage in your component:\n\t// const items = this.rawList();\n\n\t// Current operations state\n\tprivate currentOperations?: ApiOperations<T, CreateDto, UpdateDto, IdType>;\n\tprivate currentParams?: Record<string, unknown>;\n\n\t// Effect to handle Observable subscriptions\n\tprivate readonly dataEffect = effect(\n\t\t() => {\n\t\t\tconst obs = this.sourceSignal();\n\t\t\tif (!obs) {\n\t\t\t\tuntracked(() => this.dataSignal.set(null));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tuntracked(() => {\n\t\t\t\tthis.loadingSignal.set(true);\n\t\t\t\tthis.errorSignal.set(null);\n\n\t\t\t\tconst sub = obs\n\t\t\t\t\t.pipe(\n\t\t\t\t\t\tshareReplay(1),\n\t\t\t\t\t\tcatchError((err) => {\n\t\t\t\t\t\t\tthis.errorSignal.set(err);\n\t\t\t\t\t\t\treturn of(null);\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tfinalize(() => this.loadingSignal.set(false))\n\t\t\t\t\t)\n\t\t\t\t\t.subscribe((value) => {\n\t\t\t\t\t\tthis.dataSignal.set(value);\n\t\t\t\t\t});\n\n\t\t\t\treturn () => sub.unsubscribe();\n\t\t\t});\n\t\t},\n\t\t{ injector: this.injector }\n\t);\n\n\t/**\n\t * Initialize with dynamic service operations\n\t */\n\tprotected initService(operations: ApiOperations<T, CreateDto, UpdateDto, IdType>): void {\n\t\tthis.currentOperations = operations;\n\t}\n\n\t/**\n\t * GET data\n\t */\n\tprotected loadData(params?: Record<string, unknown>): void {\n\t\tif (!this.currentOperations?.get) return;\n\n\t\tthis.executeOperation('get', () => this.currentOperations!.get!(params), params);\n\n\t\tthis.firstLoadSignal.set(false);\n\t}\n\n\t/**\n\t * GET data by ID\n\t */\n\tprotected getById(\n\t\tid: IdType,\n\t\tparams?: Record<string, unknown>\n\t): Observable<T | T[] | PaginatedResponse<T> | null> {\n\t\tif (!this.currentOperations?.getById) return of(null);\n\n\t\treturn this.executeOperation('get', () => this.currentOperations!.getById!(id, params));\n\t}\n\n\t/**\n\t * CREATE data\n\t */\n\tprotected createData(data: CreateDto): Observable<T | null> {\n\t\tif (!this.currentOperations?.create) return of(null);\n\n\t\treturn this.executeOperation('create', () => this.currentOperations!.create!(data));\n\t}\n\n\t/**\n\t * UPDATE data\n\t */\n\tprotected updateData(data: UpdateDto): Observable<T | null> {\n\t\tif (!this.currentOperations?.update) return of(null);\n\n\t\treturn this.executeOperation('update', () => this.currentOperations!.update!(data));\n\t}\n\n\t/**\n\t * UPDATE data by ID\n\t */\n\tprotected updateById(id: IdType, data: Partial<UpdateDto>): Observable<T | null> {\n\t\tif (!this.currentOperations?.updateById) return of(null);\n\n\t\treturn this.executeOperation('updateById', () => this.currentOperations!.updateById!(id, data));\n\t}\n\n\t/**\n\t * DELETE data\n\t */\n\tprotected deleteData(id: IdType): Observable<void | null> {\n\t\tif (!this.currentOperations?.delete) return of(null);\n\n\t\treturn this.executeOperation('delete', () => this.currentOperations!.delete!(id));\n\t}\n\n\t/**\n\t * UPDATE status\n\t */\n\tprotected updateStatus(id: IdType, status: boolean): Observable<T | null> {\n\t\tif (!this.currentOperations?.updateStatus) return of(null);\n\n\t\treturn this.executeOperation(\n\t\t\t'update', // You can reuse 'update' action or add a new one like 'updateStatus'\n\t\t\t() => this.currentOperations!.updateStatus!(id, status)\n\t\t);\n\t}\n\n\t/**\n\t * SHOW/HIDE form\n\t * @param show Whether to show or hide the form\n\t */\n\tprotected showForm(show: boolean): void {\n\t\tthis.showFormSignal.set(show);\n\t}\n\n\t/**\n\t * Update form action (create/edit)\n\t * @param action The action to set for the form\n\t */\n\tprotected updateFormAction(action: string): void {\n\t\tthis.formActionSignal.set(action as 'Create' | 'Update' | null);\n\t}\n\n\t/**\n\t * Shared operation execution logic\n\t */\n\tprivate executeOperation<R>(\n\t\taction: ActionType,\n\t\toperation: () => Observable<R>,\n\t\tparams?: Record<string, unknown>\n\t): Observable<R | null> {\n\t\tthis.errorSignal.set(null);\n\t\tthis.loadingSignal.set(true);\n\t\tthis.actionSignal.set(action);\n\n\t\tif (action === 'get') {\n\t\t\tthis.currentParams = params;\n\t\t}\n\n\t\tconst operation$ = operation().pipe(\n\t\t\tuntilDestroyed(this),\n\t\t\tcatchError((err) => {\n\t\t\t\tthis.errorSignal.set(err);\n\t\t\t\treturn of(null);\n\t\t\t}),\n\t\t\tfinalize(() => {\n\t\t\t\tthis.loadingSignal.set(false);\n\t\t\t\tthis.actionSignal.set(null);\n\t\t\t}),\n\t\t\tshareReplay(1)\n\t\t);\n\n\t\tif (action === 'get') {\n\t\t\tthis.sourceSignal.set(operation$ as Observable<T | T[]>);\n\t\t} else {\n\t\t\toperation$.subscribe(() => {\n\t\t\t\tif (this.currentOperations?.get) {\n\t\t\t\t\tthis.refresh();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn operation$;\n\t}\n\n\t/**\n\t * Refresh current data\n\t */\n\tprotected refresh(): void {\n\t\tif (this.currentOperations?.get && this.currentParams) {\n\t\t\tthis.loadData(this.currentParams);\n\t\t}\n\t}\n\n\tget entityName(): string {\n\t\treturn 'Item';\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { PaginatedResponse } from '../../models/paginated.model';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class HelperService {\n\ttransformEmployeeResponse = (res: PaginatedResponse<any>) => ({\n\t\t...res,\n\t\tresults: res.results.map((e) => ({\n\t\t\t...e,\n\t\t\tfullName: [e.name.givenName, e.name.middleName, e.name.familyName]\n\t\t\t\t.filter((part) => part)\n\t\t\t\t.join(' ')\n\t\t\t\t.trim()\n\t\t\t\t.concat(e?.company?.name ? ` (${e.company.name})` : '')\n\t\t}))\n\t});\n\n\ttransformPayloadWithAddress = <T extends Record<string, any>>(payload: T): T => {\n\t\tconst transformedPayload = { ...payload } as Record<string, any>;\n\n\t\tif (transformedPayload['address']) {\n\t\t\tconst address = { ...transformedPayload['address'] };\n\n\t\t\t// Helper function to extract name from address field\n\t\t\tconst extractName = (field: unknown): string | undefined => {\n\t\t\t\tif (!field) return undefined;\n\t\t\t\tif (typeof field === 'string') return field;\n\t\t\t\tif (typeof field === 'object' && field !== null && 'name' in field) {\n\t\t\t\t\treturn (field as Record<string, any>)['name'];\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t};\n\n\t\t\taddress.province = extractName(address.province);\n\t\t\taddress.city = extractName(address.city);\n\t\t\taddress.barangay = extractName(address.barangay);\n\n\t\t\ttransformedPayload['address'] = address;\n\t\t}\n\n\t\treturn transformedPayload as T;\n\t};\n}\n","// Components\n// export * from './lib/components/components';\nexport * from './lib/components/empty/empty.component';\nexport * from './lib/components/file-upload/file-upload.component';\nexport * from './lib/components/form-field-wrapper/form-field-wrapper.component';\nexport * from './lib/components/select/ng-select/basic/basic-ng-select.component';\nexport * from './lib/components/fg-address/fg-address.component';\nexport * from './lib/components/dataview/table/data-table.component';\nexport * from './lib/components/select/ng-select/dynamic/dynamic-select.component';\n\n// Models\nexport * from './lib/models/common.model';\nexport * from './lib/models/address.model';\nexport * from './lib/models/table-column.model';\nexport * from './lib/models/paginated.model';\n\n// Types\nexport * from './lib/types/api-operations.type';\n\n// Class\nexport * from './lib/classes/crud-abstract.class';\n\n// Services\nexport * from './lib/services/helper/helper.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i4","i3","i5"],"mappings":"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"}
1
+ {"version":3,"file":"winexist-ngp.mjs","sources":["../../../packages/src/lib/components/empty/empty.component.ts","../../../packages/src/lib/components/empty/empty.component.html","../../../packages/src/lib/components/file-upload/file-upload.component.ts","../../../packages/src/lib/components/file-upload/file-upload.component.html","../../../packages/src/lib/components/form-field-wrapper/form-field-wrapper.component.ts","../../../packages/src/lib/components/form-field-wrapper/form-field-wrapper.component.html","../../../packages/src/lib/components/select/ng-select/basic/basic-ng-select.component.ts","../../../packages/src/lib/components/select/ng-select/basic/basic-ng-select.component.html","../../../packages/src/lib/services/address/address.service.ts","../../../packages/src/lib/components/fg-address/fg-address.component.ts","../../../packages/src/lib/components/fg-address/fg-address.component.html","../../../packages/src/lib/components/dataview/table/data-table.component.ts","../../../packages/src/lib/components/dataview/table/data-table.component.html","../../../packages/src/lib/components/select/ng-select/dynamic/dynamic-select.component.ts","../../../packages/src/lib/components/select/ng-select/dynamic/dynamic-select.component.html","../../../packages/src/lib/models/paginated.model.ts","../../../packages/src/lib/classes/crud-abstract.class.ts","../../../packages/src/lib/services/helper/helper.service.ts","../../../packages/src/index.ts","../../../packages/src/winexist-ngp.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\n\n@Component({\n\tselector: 'ngp-empty',\n\timports: [],\n\ttemplateUrl: './empty.component.html',\n\tstyleUrl: './empty.component.css'\n})\nexport class EmptyComponent {\n\ttitle = input<string>('Section is empty.');\n\tmessage = input<string>('No data available.');\n\timgSrc = input<string>();\n\n}\n","<div class=\"w-full flex justify-center items-center p-5 h-full\">\n <div class=\"flex items-center gap-3\">\n @if (imgSrc()) {\n <img alt=\"Empty\" [src]=\"imgSrc()\" class=\"w-[80px]\" />\n } @else {\n <div class=\"!rounded-md p-5 !bg-slate-100 mb-6\">\n <span class=\"material-icons !text-gray-400 !text-7xl\"> search_off </span>\n </div>\n }\n\n <div class=\"flex flex-col\">\n <span class=\"!text-gray-900 !text-2xl !font-bold\">{{ title() }}</span>\n @if (message()) {\n <span class=\"!text-gray-400 !text-base\">{{ message() }}</span>\n }\n </div>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, effect, ElementRef, input, output, signal, ViewChild } from '@angular/core';\nimport { FileSelectEvent, FileUploadModule } from 'primeng/fileupload';\n\n// Add interface for typed files\ninterface TypedFile extends File {\n\tfileType?: 'image' | 'pdf' | 'other';\n}\n\n@Component({\n\tselector: 'ngp-file-upload',\n\timports: [FileUploadModule, CommonModule],\n\ttemplateUrl: './file-upload.component.html',\n\tstyleUrl: './file-upload.component.css',\n})\nexport class FileUploadComponent {\n\t@ViewChild('fileUploader') fileUploader!: ElementRef;\n\n\t// Signal-based inputs with defaults\n\tfiles = input<File[]>([]);\n\tmultiple = input(true);\n\taccept = input('.pdf,.png,.jpg,.jpeg,.doc,.docx,.csv,.xls,.xlsx');\n\tmaxFileSize = input(2097152); // 2MB in bytes\n\tplaceholder = input('Drag and drop new files here to upload.');\n\tshowUploadButton = input<boolean>(false);\n\tcancelLabel = input('Clear');\n\n\t// Signal-based outputs\n\tfilesSelected = output<File[]>();\n\tfilesCleared = output<void>();\n\n\t// Internal state\n\tuploadedFiles = signal<TypedFile[]>([]);\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst _files = this.files();\n\t\t\tif (_files.length) {\n\t\t\t\tthis.uploadedFiles.set(_files.map((file) => this.addFileType(file)));\n\t\t\t}\n\t\t});\n\t}\n\n\tonFileSelect(event: FileSelectEvent) {\n\t\tconst validFiles = event.currentFiles.filter(\n\t\t\t(file) => file.size <= this.maxFileSize() && this.isValidFileType(file)\n\t\t);\n\n\t\tif (validFiles.length) {\n\t\t\t// Add type to files before adding to uploadedFiles\n\t\t\tconst typedFiles = validFiles.map((file) => this.addFileType(file));\n\n\t\t\tif (this.multiple()) {\n\t\t\t\tthis.uploadedFiles.update((files) => Array.from(new Set([...files, ...typedFiles])));\n\t\t\t} else {\n\t\t\t\tthis.uploadedFiles.set(typedFiles);\n\t\t\t}\n\t\t\tthis.filesSelected.emit(typedFiles);\n\t\t}\n\t}\n\n\tonClear() {\n\t\tthis.uploadedFiles.set([]);\n\t\tthis.filesCleared.emit();\n\t}\n\n\tremoveFile(index: number) {\n\t\tthis.uploadedFiles.update((files) => files.filter((_, i) => i !== index));\n\t\tthis.filesSelected.emit(this.uploadedFiles());\n\t}\n\n\tisValidFileType(file: File): boolean {\n\t\tconst acceptedTypes = this.accept().split(',');\n\t\treturn acceptedTypes.some((type) =>\n\t\t\tfile.name.toLowerCase().endsWith(type.trim().toLowerCase())\n\t\t);\n\t}\n\n\tformatFileSize(bytes: number): string {\n\t\tif (bytes === 0) return '0 Bytes';\n\t\tconst k = 1024;\n\t\tconst sizes = ['Bytes', 'KB', 'MB', 'GB'];\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\n\t\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n\t}\n\n\tclear() {\n\t\tthis.uploadedFiles.set([]);\n\t\tif (this.fileUploader?.nativeElement?.clear) {\n\t\t\tthis.fileUploader.nativeElement.clear();\n\t\t}\n\t}\n\n\t// Function to determine file type based on extension\n\tgetFileTypeByExtension(file: File): 'image' | 'pdf' | 'other' {\n\t\tconst fileName = file.name.toLowerCase();\n\t\tconst imageExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.svg', '.webp'];\n\t\tconst pdfExtension = '.pdf';\n\n\t\tif (imageExtensions.some((ext) => fileName.endsWith(ext))) {\n\t\t\treturn 'image';\n\t\t} else if (fileName.endsWith(pdfExtension)) {\n\t\t\treturn 'pdf';\n\t\t} else {\n\t\t\treturn 'other';\n\t\t}\n\t}\n\n\t// Function to add type property to file\n\taddFileType(file: File): TypedFile {\n\t\tconst typedFile = file as TypedFile;\n\t\ttypedFile.fileType = this.getFileTypeByExtension(file);\n\t\treturn typedFile;\n\t}\n}\n","<p-fileupload #fileUploader [multiple]=\"multiple()\" [showUploadButton]=\"showUploadButton()\"\n [cancelLabel]=\"cancelLabel()\" [accept]=\"accept()\" auto=\"false\" [maxFileSize]=\"maxFileSize()\" mode=\"advanced\"\n [customUpload]=\"true\" styleClass=\"!bg-gray-50\" (onSelect)=\"onFileSelect($event)\" (onClear)=\"onClear()\">\n <ng-template #content>\n @if (uploadedFiles().length) {\n <ul class=\"space-y-2\">\n @for (file of uploadedFiles(); track $index) {\n <li class=\"flex justify-between gap-4 p-2 bg-gray-100 rounded\">\n <div class=\"flex gap-2\">\n <ng-container [ngTemplateOutlet]=\"iconTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: file.fileType }\"></ng-container>\n <span class=\"text-sm\"> {{ file.name }} - {{ formatFileSize(file.size) }} </span>\n </div>\n <button type=\"button\" (click)=\"removeFile($index)\" class=\"text-red-500 hover:text-red-700 text-sm\">\n <span class=\"material-icons !text-base\"> cancel </span>\n </button>\n </li>\n }\n </ul>\n } @else {\n <div class=\"flex flex-col items-center gap-3\">\n <img src=\"assets/images/file-upload.svg\" alt=\"File Upload\" class=\"w-28 mx-auto\" />\n <span class=\"font-semibold text-center text-gray-400 text-sm\">\n Drag & drop or<br />\n click the \"Choose\" button to add new files\n </span>\n </div>\n }\n </ng-template>\n <ng-template #file></ng-template>\n</p-fileupload>\n\n<ng-template #iconTemplate let-type>\n @if (type === 'image') {\n <span class=\"material-icons\"> image </span>\n } @else if (type === 'pdf') {\n <span class=\"material-icons\"> picture_as_pdf </span>\n } @else {\n <span class=\"material-icons\"> insert_drive_file </span>\n }\n</ng-template>","// form-field-wrapper.component.ts\nimport { CommonModule } from '@angular/common';\nimport { Component, ContentChild, Input, AfterContentInit, OnDestroy } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { MessageModule } from 'primeng/message';\n\n@Component({\n\tselector: 'ngp-form-field-wrapper',\n\tstandalone: true,\n\timports: [CommonModule, MessageModule],\n\ttemplateUrl: './form-field-wrapper.component.html',\n\tstyleUrls: ['./form-field-wrapper.component.scss']\n})\nexport class FormFieldWrapperComponent implements AfterContentInit, OnDestroy {\n\t@Input() validationMessages: { [key: string]: string } = {\n\t\trequired: 'This field is required',\n\t\temail: 'Please enter a valid email',\n\t\tminlength: 'Input does not meet minimum length',\n\t\tmaxlength: 'Input exceeds maximum length',\n\t\tpattern: 'Input format is invalid',\n\t\tendTimeBeforeStartTime: 'End time must not be before start time',\n\t\tbreakStartBeforeEarliestStart: 'Break start time cannot be before the earliest start time'\n\t};\n\n\t@ContentChild(NgControl) control?: NgControl;\n\n\tprivate subscription?: Subscription;\n\n\tngAfterContentInit(): void {\n\t\tif (this.control) {\n\t\t\tthis.subscription = this.control.statusChanges?.subscribe(() => { });\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subscription?.unsubscribe();\n\t}\n\n\tshouldShowError(): boolean {\n\t\treturn (\n\t\t\t!!this.control &&\n\t\t\tthis.control.invalid === true &&\n\t\t\t(this.control.dirty === true || this.control.touched === true)\n\t\t);\n\t}\n\n\tgetErrorMessage(): string {\n\t\tif (!this.control?.errors) {\n\t\t\treturn '';\n\t\t}\n\n\t\tconst firstErrorKey = Object.keys(this.control.errors)[0];\n\t\tconst error = this.control.errors[firstErrorKey];\n\n\t\tif (this.control.errors['message']) {\n\t\t\treturn this.control.errors['message'];\n\t\t}\n\t\tif (error?.message) {\n\t\t\treturn error.message;\n\t\t}\n\n\t\treturn this.validationMessages[firstErrorKey] || `Invalid input: ${firstErrorKey}`;\n\t}\n}\n","<div class=\"form-field-container\">\n <ng-content></ng-content>\n @if (shouldShowError()) {\n <p-message severity=\"error\" variant=\"simple\" size=\"small\" [text]=\"getErrorMessage()\">\n </p-message>\n }\n</div>","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, input } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { FormFieldWrapperComponent } from '../../../form-field-wrapper/form-field-wrapper.component';\nimport { FloatLabelModule } from 'primeng/floatlabel'\nimport { ProgressSpinnerModule } from 'primeng/progressspinner'\n\ntype SelectValue<T> = T | T[];\ntype SelectValueOrNull<T> = SelectValue<T> | null;\n\n@Component({\n\tselector: 'ngp-basic-select',\n\timports: [NgSelectModule, FormsModule, CommonModule, FormFieldWrapperComponent, FloatLabelModule, ProgressSpinnerModule],\n\ttemplateUrl: './basic-ng-select.component.html',\n\tstyleUrl: './basic-ng-select.component.scss',\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => BasicNgSelectComponent),\n\t\t\tmulti: true\n\t\t}\n\t]\n})\nexport class BasicNgSelectComponent<T = any> implements ControlValueAccessor {\n\toptions = input<T[]>([]);\n\tbindLabel = input<string>('');\n\tbindValue = input<string>('');\n\tplaceholder = input<string>('Select an option');\n\tclearable = input<boolean>(true);\n\tsearchable = input<boolean>(true);\n\tloading = input<boolean>(false);\n\tlabel = input<string | null>(null);\n\trequired = input<boolean>(true);\n\n\t// Internal state\n\tvalue: SelectValueOrNull<T> = null;\n\tdisabled = false;\n\n\t// ControlValueAccessor callbacks\n\tprivate onChange: (value: SelectValueOrNull<T>) => void = () => { };\n\tonTouched: () => void = () => { };\n\n\t// Handle value changes from ng-select\n\tonValueChange(value: SelectValueOrNull<T>): void {\n\t\tthis.value = value;\n\t\tthis.onChange(value);\n\t}\n\n\twriteValue(val: SelectValueOrNull<T>): void {\n\t\tthis.value = val;\n\t}\n\n\tregisterOnChange(fn: (val: SelectValueOrNull<T>) => void): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.disabled = isDisabled;\n\t}\n\n\t// Compare function for ng-select\n\tcompareWith = (item: any, selected: any) => {\n\t\tconst bindValueKey = this.bindValue();\n\n\t\t// If no bindValue is set, compare entire objects\n\t\tif (!bindValueKey) {\n\t\t\treturn item === selected;\n\t\t}\n\n\t\t// Handle null/undefined cases\n\t\tif (!item || !selected) {\n\t\t\treturn item === selected;\n\t\t}\n\n\t\t// If selected is a primitive (just the id), compare with item's property\n\t\tif (typeof selected !== 'object') {\n\t\t\treturn item[bindValueKey] === selected;\n\t\t}\n\n\t\t// If both are objects, compare the bindValue property\n\t\treturn item[bindValueKey] === selected[bindValueKey];\n\t};\n}\n","<ngp-form-field-wrapper>\n <p-floatlabel variant=\"in\">\n <ng-select [(ngModel)]=\"value\" [bindLabel]=\"bindLabel()\" [bindValue]=\"bindValue()\" [items]=\"options()\"\n [compareWith]=\"compareWith\" [clearable]=\"clearable()\" (change)=\"onValueChange($event)\">\n <ng-template ng-loadingspinner-tmp>\n <ng-container [ngTemplateOutlet]=\"spinner\" />\n </ng-template>\n </ng-select>\n\n @if (label()) {\n <label class=\"block mb-2\" [ngClass]=\"{'required-label': required() }\">{{ label() }}</label>\n }\n </p-floatlabel>\n</ngp-form-field-wrapper>\n\n<ng-template #spinner>\n <p-progress-spinner ariaLabel=\"loading\" styleClass=\"text-gray-400\" />\n</ng-template>","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { IdName } from '../../models/common.model';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class AddressService {\n\turl = `/api/v1/records/address`;\n\thttp = inject(HttpClient);\n\n\tgetProvinces(): Observable<IdName[]> {\n\t\treturn this.http.get<IdName[]>(`${this.url}/provinces`);\n\t}\n\n\tgetMunicipalities(provinceId: number): Observable<any> {\n\t\treturn this.http.get<any>(`${this.url}/municipalities/${provinceId}`);\n\t}\n\n\tgetBarangays(muncipalityId: any, params?: any): Observable<any> {\n\t\treturn this.http.get<any>(`${this.url}/barangay/${muncipalityId}`, { params });\n\t}\n}\n","import { Component, effect, forwardRef, inject, input, signal } from '@angular/core';\nimport {\n\tAbstractControl,\n\tControlValueAccessor,\n\tFormBuilder,\n\tFormGroup,\n\tNG_VALIDATORS,\n\tNG_VALUE_ACCESSOR,\n\tReactiveFormsModule,\n\tValidationErrors,\n\tValidator\n} from '@angular/forms';\nimport { RxwebValidators } from '@rxweb/reactive-form-validators';\nimport { IdName } from '../../models/common.model';\nimport { Subscription } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { FormFieldWrapperComponent } from '../form-field-wrapper/form-field-wrapper.component';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { Address, Barangay, City } from '../../models/address.model';\nimport { AddressService } from '../../services/address/address.service';\n\n@Component({\n\tselector: 'ngp-fg-address',\n\timports: [\n\t\tInputTextModule,\n\t\tInputNumberModule,\n\t\tFloatLabelModule,\n\t\tCommonModule,\n\t\tReactiveFormsModule,\n\t\tFormFieldWrapperComponent,\n\t\tNgSelectModule\n\t],\n\ttemplateUrl: './fg-address.component.html',\n\tstyleUrl: './fg-address.component.scss',\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => FgAddressComponent),\n\t\t\tmulti: true\n\t\t},\n\t\t{\n\t\t\tprovide: NG_VALIDATORS,\n\t\t\tuseExisting: forwardRef(() => FgAddressComponent),\n\t\t\tmulti: true\n\t\t}\n\t]\n})\nexport class FgAddressComponent implements ControlValueAccessor, Validator {\n\tshowHeader = input<boolean>(true);\n\tisCreateMode = input<boolean>(true);\n\tisViewMode = input<boolean>(false);\n\n\taddressForm!: FormGroup;\n\tprovHttp$!: Subscription;\n\tcityHttp$!: Subscription;\n\tbarangayHttp$!: Subscription;\n\tprovinceOptions: IdName[] = [];\n\tcityOptions: City[] = [];\n\tbarangayOptions: Barangay[] = [];\n\n\tisDisabled = signal<boolean>(false);\n\tprivate pendingAddress: Address | null = null;\n\tprivate isInitializing = false;\n\tprivate detectedEditMode = false;\n\n\tprivate onChange: (value: Address | null) => void = () => {};\n\tprivate onTouched: () => void = () => {};\n\n\tprivate readonly addressService = inject(AddressService);\n\tprivate readonly fb = inject(FormBuilder);\n\n\tconstructor() {\n\t\tthis.addressForm = this.fb.group({\n\t\t\tline1: [null, RxwebValidators.required()],\n\t\t\tline2: [null],\n\t\t\tbarangay: [null, RxwebValidators.required()],\n\t\t\tcity: [null, RxwebValidators.required()],\n\t\t\tprovince: [null, RxwebValidators.required()],\n\t\t\tcountry: ['Philippines', RxwebValidators.required()],\n\t\t\tzipCode: [null, RxwebValidators.required()],\n\t\t\tlandmark: [null, RxwebValidators.required()]\n\t\t});\n\n\t\t// Use effect to watch for form value changes\n\t\teffect(() => {\n\t\t\tif (this.isDisabled()) {\n\t\t\t\tthis.addressForm.disable({ emitEvent: false });\n\t\t\t} else {\n\t\t\t\tthis.addressForm.enable({ emitEvent: false });\n\t\t\t}\n\t\t});\n\n\t\t// Subscribe to form changes\n\t\tthis.addressForm.valueChanges.subscribe((value) => {\n\t\t\tthis.onChange(value);\n\t\t\tthis.onTouched();\n\t\t});\n\n\t\tthis.loadProvince();\n\n\t\t// Handle province changes - works for both create and edit mode\n\t\tthis.addressForm.get('province')?.valueChanges.subscribe((prov) => {\n\t\t\tif (prov && !this.isInitializing) {\n\t\t\t\tthis.clearFieldByName('city');\n\t\t\t\tthis.clearFieldByName('barangay');\n\t\t\t\tthis.cityOptions = [];\n\t\t\t\tthis.barangayOptions = [];\n\t\t\t\tthis.loadCityByProvinceId(prov.id);\n\t\t\t}\n\t\t});\n\n\t\t// Handle city changes - works for both create and edit mode\n\t\tthis.addressForm.get('city')?.valueChanges.subscribe((city) => {\n\t\t\tif (city && !this.isInitializing) {\n\t\t\t\tthis.clearFieldByName('barangay');\n\t\t\t\tthis.barangayOptions = [];\n\t\t\t\tthis.loadBarangayByCityId(city.id);\n\t\t\t}\n\t\t});\n\t}\n\n\tclearFieldByName(fieldName: string): void {\n\t\tthis.addressForm.get(fieldName)?.setValue(null, { emitEvent: false });\n\t}\n\n\tloadProvince(): void {\n\t\tthis.provHttp$ = this.addressService.getProvinces().subscribe((res) => {\n\t\t\tthis.provinceOptions = res;\n\n\t\t\t// If we have a pending address to load, process it now\n\t\t\tif (this.pendingAddress) {\n\t\t\t\tthis.initializeEditMode(this.pendingAddress);\n\t\t\t}\n\t\t});\n\t}\n\n\tloadCityByProvinceId(id: number): void {\n\t\tthis.cityHttp$ = this.addressService.getMunicipalities(id).subscribe((res) => {\n\t\t\tthis.cityOptions = res;\n\n\t\t\t// Continue initialization if needed\n\t\t\tif (this.isInitializing && this.pendingAddress) {\n\t\t\t\tthis.setCityFromPending();\n\t\t\t}\n\t\t});\n\t}\n\n\tloadBarangayByCityId(id: number): void {\n\t\tthis.barangayHttp$ = this.addressService.getBarangays(id).subscribe((res) => {\n\t\t\tthis.barangayOptions = res;\n\n\t\t\t// Continue initialization if needed\n\t\t\tif (this.isInitializing && this.pendingAddress) {\n\t\t\t\tthis.setBarangayFromPending();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Detects if the address contains data that requires edit mode initialization\n\t */\n\tprivate isEditModeAddress(address: Address): boolean {\n\t\t// Check if any cascading field (province, city, barangay) is a string (name)\n\t\t// This indicates data from backend that needs to be matched with dropdown options\n\t\treturn (\n\t\t\t(typeof address.province === 'string' && address.province !== '') ||\n\t\t\t(typeof address.city === 'string' && address.city !== '') ||\n\t\t\t(typeof address.barangay === 'string' && address.barangay !== '')\n\t\t);\n\t}\n\n\tprivate initializeEditMode(address: Address): void {\n\t\tthis.isInitializing = true;\n\n\t\t// Set non-cascading fields first\n\t\tthis.addressForm.patchValue(\n\t\t\t{\n\t\t\t\tline1: address.line1,\n\t\t\t\tline2: address.line2,\n\t\t\t\tcountry: address.country || 'Philippines',\n\t\t\t\tzipCode: address.zipCode,\n\t\t\t\tlandmark: address.landmark\n\t\t\t},\n\t\t\t{ emitEvent: false }\n\t\t);\n\n\t\t// Find and set province\n\t\tif (address.province && typeof address.province === 'string') {\n\t\t\tconst provinceItem = this.provinceOptions.find(\n\t\t\t\t(p) => p.name.toLowerCase() === address.province?.toLowerCase()\n\t\t\t);\n\n\t\t\tif (provinceItem) {\n\t\t\t\tthis.addressForm.get('province')?.setValue(provinceItem, { emitEvent: false });\n\t\t\t\tthis.loadCityByProvinceId(provinceItem.id);\n\t\t\t} else {\n\t\t\t\tthis.completeInitialization();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.completeInitialization();\n\t\t}\n\t}\n\n\tprivate setCityFromPending(): void {\n\t\tif (!this.pendingAddress?.city || typeof this.pendingAddress.city !== 'string') {\n\t\t\tthis.completeInitialization();\n\t\t\treturn;\n\t\t}\n\n\t\tconst cityItem = this.cityOptions.find(\n\t\t\t(c) => c.name.toLowerCase() === this.pendingAddress!.city?.toLowerCase()\n\t\t);\n\n\t\tif (cityItem) {\n\t\t\tthis.addressForm.get('city')?.setValue(cityItem, { emitEvent: false });\n\t\t\tthis.loadBarangayByCityId(cityItem.id);\n\t\t} else {\n\t\t\tthis.completeInitialization();\n\t\t}\n\t}\n\n\tprivate setBarangayFromPending(): void {\n\t\tif (!this.pendingAddress?.barangay || typeof this.pendingAddress.barangay !== 'string') {\n\t\t\tthis.completeInitialization();\n\t\t\treturn;\n\t\t}\n\n\t\tconst barangayItem = this.barangayOptions.find(\n\t\t\t(b) => b.name.toLowerCase() === this.pendingAddress!.barangay?.toLowerCase()\n\t\t);\n\n\t\tif (barangayItem) {\n\t\t\tthis.addressForm.get('barangay')?.setValue(barangayItem, { emitEvent: false });\n\t\t}\n\n\t\tthis.completeInitialization();\n\t}\n\n\tprivate completeInitialization(): void {\n\t\tthis.isInitializing = false;\n\t\tthis.pendingAddress = null;\n\t}\n\n\t// ControlValueAccessor methods\n\twriteValue(value: Address | null): void {\n\t\tif (value) {\n\t\t\t// Auto-detect if this is edit mode based on the address data structure\n\t\t\tthis.detectedEditMode = this.isEditModeAddress(value);\n\n\t\t\tif (this.detectedEditMode) {\n\t\t\t\t// Address contains string values (names) - needs initialization\n\t\t\t\tthis.pendingAddress = value;\n\n\t\t\t\t// If provinces are already loaded, start initialization\n\t\t\t\tif (this.provinceOptions.length > 0) {\n\t\t\t\t\tthis.initializeEditMode(value);\n\t\t\t\t}\n\t\t\t\t// Otherwise, it will be triggered when provinces load\n\t\t\t} else {\n\t\t\t\t// Create mode or already has proper objects\n\t\t\t\tthis.addressForm.patchValue(value, { emitEvent: false });\n\n\t\t\t\t// Load cascading data if IDs are present\n\t\t\t\tconst province = value.province;\n\t\t\t\tif (province && typeof province === 'object' && 'id' in province) {\n\t\t\t\t\tthis.loadCityByProvinceId((province as any).id);\n\t\t\t\t}\n\n\t\t\t\tconst city = value.city;\n\t\t\t\tif (city && typeof city === 'object' && 'id' in city) {\n\t\t\t\t\tthis.loadBarangayByCityId((city as any).id);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthis.addressForm.reset({ country: 'Philippines' }, { emitEvent: false });\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: Address | null) => void): void {\n\t\tthis.onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis.onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.isDisabled?.set(isDisabled);\n\t\tif (isDisabled) {\n\t\t\tthis.addressForm.disable();\n\t\t} else {\n\t\t\tthis.addressForm.enable();\n\t\t}\n\t}\n\n\tvalidate(control: AbstractControl): ValidationErrors | null {\n\t\treturn this.addressForm?.valid ? null : { invalidAddress: true };\n\t}\n}\n","@if (showHeader()) {\n\t<h2 class=\"text-xl font-semibold mb-4 px-4\">Address</h2>\n}\n\n@if (isViewMode()) {\n\t@let address = addressForm.value;\n\n\t<div class=\"grid gap-3 p-4\">\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"country\">Country:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.country || 'Philippines' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"province\">Province:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.province?.name || address.province || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"city\">City/Municipality:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.city?.name || address.city || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"barangay\">Barangay:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{\n\t\t\t\taddress.barangay?.name || address.barangay || ''\n\t\t\t}}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line1\">Line 1:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line1 || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"line2\">Line 2:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.line2 || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between border-b border-b-slate-200 py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"zipCode\">Zip Code:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.zipCode || '' }}</p>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between py-3\">\n\t\t\t<label class=\"font-bold px-2 text-slate-400 text-sm\" for=\"landmark\">Nearest Landmark:</label>\n\t\t\t<p class=\"font-bold text-right text-slate-500\">{{ address.landmark || '' }}</p>\n\t\t</div>\n\t</div>\n} @else {\n\t<form [formGroup]=\"addressForm\">\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"country\" formControlName=\"country\" class=\"w-full\" />\n\t\t\t\t\t\t<label for=\"country\" class=\"block mb-2 required-label\">Country</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"province\"\n\t\t\t\t\t\t\t[items]=\"provinceOptions\"\n\t\t\t\t\t\t\t[loading]=\"provHttp$ && !provHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\t\t\t\t\t\t<label for=\"province\" class=\"block mb-2 required-label\">Province</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"city\"\n\t\t\t\t\t\t\t[items]=\"cityOptions\"\n\t\t\t\t\t\t\t[loading]=\"cityHttp$ && !cityHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\t\t\t\t\t\t<label for=\"city\" class=\"block mb-2 required-label\">City/Municipality</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<ng-select\n\t\t\t\t\t\t\tformControlName=\"barangay\"\n\t\t\t\t\t\t\t[items]=\"barangayOptions\"\n\t\t\t\t\t\t\t[loading]=\"barangayHttp$ && !barangayHttp$.closed\"\n\t\t\t\t\t\t\tbindLabel=\"name\" />\n\n\t\t\t\t\t\t<label for=\"barangay\" class=\"block mb-2 required-label\">Barangay</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div>\n\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t<label for=\"line1\" class=\"block mb-2 required-label\">Line 1</label>\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line1\" formControlName=\"line1\" class=\"w-full\" />\n\t\t\t\t</p-floatlabel>\n\t\t\t</ngp-form-field-wrapper>\n\t\t</div>\n\n\t\t<div>\n\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t<label for=\"line2\" class=\"block mb-2\">Line 2</label>\n\t\t\t\t\t<input pInputText trim=\"blur\" id=\"line2\" formControlName=\"line2\" class=\"w-full\" />\n\t\t\t\t</p-floatlabel>\n\t\t\t</ngp-form-field-wrapper>\n\t\t</div>\n\t\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<p-inputnumber\n\t\t\t\t\t\t\t[inputId]=\"'zipCode'\"\n\t\t\t\t\t\t\tformControlName=\"zipCode\"\n\t\t\t\t\t\t\tstyleClass=\"w-full\"\n\t\t\t\t\t\t\t[useGrouping]=\"false\" />\n\t\t\t\t\t\t<label for=\"zipCode\" class=\"block mb-2 required-label\">Zip Code</label>\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<ngp-form-field-wrapper>\n\t\t\t\t\t<p-floatlabel variant=\"in\">\n\t\t\t\t\t\t<label for=\"landmark\" class=\"block mb-2 required-label\">Nearest Landmark</label>\n\t\t\t\t\t\t<input pInputText trim=\"blur\" id=\"landmark\" formControlName=\"landmark\" class=\"w-full\" />\n\t\t\t\t\t</p-floatlabel>\n\t\t\t\t</ngp-form-field-wrapper>\n\t\t\t</div>\n\t\t</div>\n\t</form>\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport {\n\tComponent,\n\tcomputed,\n\tContentChild,\n\teffect,\n\tinject,\n\tinput,\n\toutput,\n\tsignal,\n\tTemplateRef,\n\tViewChild\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ConfirmationService, MessageService } from 'primeng/api';\nimport { ButtonModule } from 'primeng/button';\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\nimport { DialogModule } from 'primeng/dialog';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { PopoverModule } from 'primeng/popover';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { Table, TableModule, TablePageEvent } from 'primeng/table';\nimport { ToastModule } from 'primeng/toast';\nimport { ToolbarModule } from 'primeng/toolbar';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { TableColumn } from '../../../models/table-column.model';\n\n@Component({\n\tselector: 'ngp-data-table',\n\timports: [\n\t\tCommonModule,\n\t\tFormsModule,\n\t\tReactiveFormsModule,\n\t\tTableModule,\n\t\tButtonModule,\n\t\tInputTextModule,\n\t\tConfirmDialogModule,\n\t\tDialogModule,\n\t\tTooltipModule,\n\t\tToastModule,\n\t\tToolbarModule,\n\t\tSkeletonModule,\n\t\tPopoverModule\n\t],\n\ttemplateUrl: './data-table.component.html',\n\tstyleUrl: './data-table.component.scss',\n\tproviders: [ConfirmationService, MessageService]\n})\nexport class DataTableComponent<T extends Record<string, any>> {\n\tdataSource = input<T[]>([]);\n\tcolumns = input<TableColumn[]>([]);\n\tloading = input<boolean>(false);\n\tpageSize = input<number>(10);\n\ttotalElements = input<number>(0);\n\tcurrentPage = input<number>(0);\n\tshowDefaultActions = input<boolean>(true);\n\temptyMessage = input<string>('No data available.');\n\thasDeleteAction = input<boolean>(true);\n\thasEditAction = input<boolean>(true);\n\tcanEdit = input<(row: unknown) => boolean>(() => true);\n\thasViewAction = input<boolean>(true);\n\tentityName = input<string>('');\n\tisPaginated = input<boolean>(true);\n\tshowCustomAction = input<boolean>(false);\n\tshowRowNumbers = input<boolean>(false);\n\trowNumberHeader = input<string>('');\n\n\t// Internal signals\n\tdata = signal<T[]>([]);\n\tfilteredData = signal<T[]>([]);\n\tdialogVisible = signal<boolean>(false);\n\tdialogTitle = signal<string>('Add Item');\n\teditingItem = signal<T | null>(null);\n\n\t// Custom event emitters\n\tadd = output<T>();\n\tedit = output<T>();\n\tdeleteAction = output<T>();\n\tview = output<T>();\n\tpageChange = output<TablePageEvent>();\n\tsortChange = output<{ sort: string; order: string }>();\n\n\tactions = computed(() => [this.hasViewAction(), this.hasEditAction(), this.hasDeleteAction()]);\n\tactionsLength = computed(() => this.actions().filter((action) => !!action).length);\n\tactionItems = computed(() => {\n\t\treturn [\n\t\t\t{\n\t\t\t\tlabel: 'View ' + this.entityName(),\n\t\t\t\tvisible: this.hasViewAction(),\n\t\t\t\ticon: 'pi-search'\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Update ' + this.entityName(),\n\t\t\t\tvisible: this.hasEditAction(),\n\t\t\t\ticon: 'pi-pen-to-square',\n\t\t\t\tshouldShow: (item: unknown) => this.canEdit()(item)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Delete ' + this.entityName(),\n\t\t\t\tvisible: this.hasDeleteAction(),\n\t\t\t\ticon: 'pi-trash'\n\t\t\t}\n\t\t];\n\t});\n\n\t// Content children for custom templates\n\t@ContentChild('formTemplate') formTemplate?: TemplateRef<unknown>;\n\t@ViewChild('dt') table?: Table;\n\n\t// Services\n\tprivate readonly http = inject(HttpClient);\n\tprivate readonly confirmationService = inject(ConfirmationService);\n\tprivate readonly messageService = inject(MessageService);\n\n\t// Column filters for individual column filtering\n\tprivate readonly filterValues: Record<string, string> = {};\n\n\t// For custom cell templates\n\tcustomTemplates = new Map<string, TemplateRef<unknown>>();\n\n\tconstructor() {\n\t\t// Effect to update filtered data when raw data changes\n\t\teffect(() => {\n\t\t\tconst sourceData = this.dataSource();\n\t\t\tthis.data.set([...sourceData]);\n\t\t});\n\t}\n\n\t// Register a custom template for a specific column\n\tregisterTemplate(field: string, template: TemplateRef<unknown>): void {\n\t\tthis.customTemplates.set(field, template);\n\t}\n\n\thandlePageChange(event: TablePageEvent) {\n\t\tthis.pageChange.emit(event);\n\t}\n\n\thandleSort(event: { field: string; order: number }) {\n\t\tconst column = this.columns().find((col) => col.field === event.field);\n\t\tconst actualSortField = column?.sortField ?? event.field;\n\t\tconst order = event.order === 1 ? 'ASC' : 'DESC';\n\n\t\tthis.sortChange.emit({\n\t\t\tsort: actualSortField,\n\t\t\torder\n\t\t});\n\t}\n\n\tresetTableSort(): void {\n\t\tif (this.table) {\n\t\t\tthis.table.sortOrder = 0;\n\t\t\tthis.table.sortField = null;\n\t\t\tthis.table.tableService.onSort(null);\n\t\t}\n\t}\n\n\t// Helper to safely get nested property values using dot notation\n\tgetItemValue(item: T, field: string, column?: TableColumn): unknown {\n\t\tif (column && typeof column.render === 'function') {\n\t\t\treturn column.render(item);\n\t\t}\n\t\treturn field\n\t\t\t.split('.')\n\t\t\t.reduce((obj: unknown, key) => obj?.[key as keyof typeof obj] ?? null, item as unknown);\n\t}\n\n\tperFormActionFromPopover(item: T, actionType: string): void {\n\t\tif (actionType.includes('View')) {\n\t\t\tthis.view.emit(item);\n\t\t} else if (actionType.includes('Update')) {\n\t\t\tthis.edit.emit(item);\n\t\t} else if (actionType.includes('Delete')) {\n\t\t\tthis.deleteAction.emit(item);\n\t\t}\n\t}\n}\n","<div class=\"card\">\n\t<p-table\n\t\t#dt\n\t\t[value]=\"data()\"\n\t\t[paginator]=\"isPaginated()\"\n\t\t[rows]=\"pageSize()\"\n\t\t[rowsPerPageOptions]=\"[5, 10, 25, 50]\"\n\t\t[rowHover]=\"true\"\n\t\t[loading]=\"loading()\"\n\t\t[showLoader]=\"false\"\n\t\t[scrollable]=\"true\"\n\t\tstyleClass=\"p-datatable-sm\"\n\t\t[totalRecords]=\"totalElements()\"\n\t\t[lazy]=\"isPaginated()\"\n\t\t[first]=\"currentPage() * pageSize()\"\n\t\tpaginatorDropdownAppendTo=\"body\"\n\t\t(onPage)=\"handlePageChange($event)\"\n\t\t(onSort)=\"handleSort($event)\">\n\t\t<ng-template pTemplate=\"header\">\n\t\t\t<tr>\n\t\t\t\t@if (showRowNumbers()) {\n\t\t\t\t\t<th class=\"text-left !font-bold !text-gray-500 !w-1\" scope=\"col\">{{\n\t\t\t\t\t\trowNumberHeader()\n\t\t\t\t\t}}</th>\n\t\t\t\t}\n\t\t\t\t@for (column of columns(); track column.field) {\n\t\t\t\t\t<th\n\t\t\t\t\t\t[pSortableColumn]=\"column.sortable ? column.field : undefined\"\n\t\t\t\t\t\tclass=\"text-left !font-bold !text-gray-500\"\n\t\t\t\t\t\t[ngClass]=\"{ '!text-center': column.align === 'center' }\"\n\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t[style]=\"{ width: column.width || 'auto' }\">\n\t\t\t\t\t\t{{ column.header }}\n\t\t\t\t\t\t@if (column.sortable) {\n\t\t\t\t\t\t\t<p-sortIcon [field]=\"column.field\"></p-sortIcon>\n\t\t\t\t\t\t}\n\t\t\t\t\t</th>\n\t\t\t\t}\n\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\n\t\t\t\t\t<th class=\"!w-32 !text-center !font-bold !text-gray-500\" scope=\"col\">Actions</th>\n\t\t\t\t}\n\t\t\t</tr>\n\t\t</ng-template>\n\n\t\t<ng-template pTemplate=\"body\" let-item let-rowIndex=\"rowIndex\">\n\t\t\t<tr>\n\t\t\t\t@if (showRowNumbers()) {\n\t\t\t\t\t<td class=\"!w-1 text-center\">\n\t\t\t\t\t\t{{ rowIndex + 1 }}\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t\t@for (column of columns(); track column.field) {\n\t\t\t\t\t<td [ngClass]=\"{ '!text-center': column.align === 'center' }\">\n\t\t\t\t\t\t@if (customTemplates && customTemplates.get(column.field)) {\n\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get(column.field)!\"\n\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: column.field }\">\n\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t{{ getItemValue(item, column.field, column) }}\n\t\t\t\t\t\t}\n\t\t\t\t\t</td>\n\t\t\t\t}\n\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\n\t\t\t\t\t<td class=\"\">\n\t\t\t\t\t\t<div class=\"flex justify-center gap-2\">\n\t\t\t\t\t\t\t@if (showDefaultActions() && actionsLength() < 2 && !showCustomAction()) {\n\t\t\t\t\t\t\t\t<!-- Inline buttons for less than 2 standard actions and no custom action -->\n\t\t\t\t\t\t\t\t@if (hasViewAction()) {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\t\t\t\t\tpButton\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-primary\"\n\t\t\t\t\t\t\t\t\t\t[label]=\"'View'\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"view.emit(item)\"></button>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (hasEditAction()) {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\t\t\t\t\tpButton\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-primary\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"edit.emit(item)\"\n\t\t\t\t\t\t\t\t\t\t[label]=\"'Update'\"></button>\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t@if (hasDeleteAction()) {\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\t\t\t\t\tpButton\n\t\t\t\t\t\t\t\t\t\tclass=\"!p-0 p-button-danger\"\n\t\t\t\t\t\t\t\t\t\t(click)=\"deleteAction.emit(item)\"\n\t\t\t\t\t\t\t\t\t\t[label]=\"'Delete'\"></button>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} @else if (!showDefaultActions() && showCustomAction()) {\n\t\t\t\t\t\t\t\t<!-- Only custom action, no popover needed -->\n\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get('customAction')!\"\n\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: 'customAction' }\">\n\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t<!-- Popover menu for 2+ standard actions or when combining with custom action -->\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t[text]=\"true\"\n\t\t\t\t\t\t\t\t\tpButton\n\t\t\t\t\t\t\t\t\ticon=\"pi pi-ellipsis-h\"\n\t\t\t\t\t\t\t\t\tclass=\"p-button-outlined p-button-secondary\"\n\t\t\t\t\t\t\t\t\t(click)=\"po.toggle($event)\"></button>\n\t\t\t\t\t\t\t\t<p-popover #po styleClass=\"!min-w-40\">\n\t\t\t\t\t\t\t\t\t<span class=\"!font-semibold !text-gray-500 block mb-2\">Actions</span>\n\t\t\t\t\t\t\t\t\t<ul class=\"list-none p-0 m-0 flex flex-col\">\n\t\t\t\t\t\t\t\t\t\t@if (showDefaultActions()) {\n\t\t\t\t\t\t\t\t\t\t\t@for (actionItem of actionItems(); track $index) {\n\t\t\t\t\t\t\t\t\t\t\t\t@if (\n\t\t\t\t\t\t\t\t\t\t\t\t\tactionItem.visible &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t(!actionItem.shouldShow || actionItem.shouldShow(item))\n\t\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"flex items-center gap-2 px-2 py-3 hover:bg-emphasis cursor-pointer rounded-border\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"perFormActionFromPopover(item, actionItem.label)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"pi\" [ngClass]=\"actionItem.icon\"></span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"font-medium\">{{ actionItem.label }}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t<!-- Custom action template in popover -->\n\t\t\t\t\t\t\t\t\t\t@if (showCustomAction() && customTemplates.get('customAction')) {\n\t\t\t\t\t\t\t\t\t\t\t<ng-container\n\t\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutlet]=\"customTemplates.get('customAction')!\"\n\t\t\t\t\t\t\t\t\t\t\t\t[ngTemplateOutletContext]=\"{ $implicit: item, field: 'customAction' }\">\n\t\t\t\t\t\t\t\t\t\t\t</ng-container>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t</p-popover>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t</tr>\n\t\t</ng-template>\n\n\t\t<ng-template #loadingbody>\n\t\t\t<tr>\n\t\t\t\t@for (column of columns(); track column.field) {\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<p-skeleton />\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<p-skeleton />\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t@for (column of columns(); track column.field) {\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<p-skeleton />\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<p-skeleton />\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t@for (column of columns(); track column.field) {\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<p-skeleton />\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t\t@if (showDefaultActions() || showCustomAction()) {\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<p-skeleton />\n\t\t\t\t\t</td>\n\t\t\t\t}\n\t\t\t</tr>\n\t\t</ng-template>\n\n\t\t<ng-template pTemplate=\"emptymessage\">\n\t\t\t<tr>\n\t\t\t\t<td [attr.colspan]=\"columns().length + 1\" class=\"text-center p-4\">{{ emptyMessage() }}</td>\n\t\t\t</tr>\n\t\t</ng-template>\n\t</p-table>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, forwardRef, OnInit, signal } from '@angular/core';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { PaginatedRequest, PaginatedResponse } from '../../../../models/paginated.model';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n NG_VALIDATORS,\n Validator,\n AbstractControl,\n ValidationErrors,\n Validators\n} from '@angular/forms';\n\n\ntype SelectValue<T> = T | T[];\ntype SelectValueOrNull<T> = SelectValue<T> | null;\n\n@Component({\n selector: 'ngp-dynamic-select',\n templateUrl: './dynamic-select.component.html',\n imports: [NgSelectModule, FormsModule, CommonModule, FloatLabelModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DynamicNgSelectComponent),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => DynamicNgSelectComponent),\n multi: true\n }\n ]\n})\nexport class DynamicNgSelectComponent<T> implements ControlValueAccessor, Validators, OnInit {\n\n @Input() apiUrl!: (params?: PaginatedRequest) => Observable<PaginatedResponse<T>>;\n @Input() formatOptions?: (items: T[]) => T[];\n\n @Input() bindLabel = 'description';\n @Input() bindValue = 'id';\n @Input() placeholder = 'Select';\n @Input() isRequired = false;\n @Input() options: T[] = [];\n\n value!: number | string | null;\n disabled = false;\n\n tableParams = signal<PaginatedRequest>({ page: 0, size: 10 });\n\n private onChange = (_: any) => { }; // eslint-disable-line\n private onTouched = () => { }; // eslint-disable-line\n\n ngOnInit(): void {\n this.loadOptions();\n }\n\n private loadOptions(): void {\n if (!this.apiUrl) {\n return;\n }\n\n this.getOptions();\n }\n\n getOptions(): void {\n this.apiUrl(this.tableParams())\n .pipe(tap((items) => {\n const values = this.formatOptions ? this.formatOptions(items.results) : items.results\n this.options = [...this.options, ...values];\n\n if (items.hasNextPage) {\n this.tableParams.update((param) => ({ ...param, page: param.page + 1 }));\n this.getOptions();\n }\n }))\n .subscribe();\n }\n\n writeValue(value: string | number): void {\n this.value = value;\n }\n\n registerOnChange(fn: (val: SelectValueOrNull<T>) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n onValueChange(value: any): void {\n if (!value) {\n this.value = null;\n this.onChange(null);\n } else {\n this.value = value[this.bindValue];\n this.onChange(value[this.bindValue]);\n }\n this.onTouched();\n }\n\n validate(control: AbstractControl): ValidationErrors | null { // eslint-disable-line\n if (\n this.isRequired &&\n (this.value === null || this.value === undefined || this.value === '')\n ) {\n return { required: true };\n }\n\n return null;\n }\n}\n","<p-floatlabel variant=\"in\">\n <ng-select [items]=\"options\" [bindLabel]=\"bindLabel\" [bindValue]=\"bindValue\" [disabled]=\"disabled\"\n [(ngModel)]=\"value\" [clearable]=\"true\" (change)=\"onValueChange($event)\">\n </ng-select>\n\n <label [class.required-label]=\"isRequired\">{{ placeholder }}</label>\n</p-floatlabel>","export class PaginatedRequest {\n\tpage!: number;\n\tsize!: number;\n\tsort?: string | null;\n\t[key: string]: any;\n}\n\nexport interface PaginatedResponse<T> {\n\thasNextPage: boolean;\n\ttotalElements: number;\n\tresults: T[];\n\tcurrentPage: number;\n\tpageSize: number;\n}\n","import { computed, effect, inject, Injectable, Injector, signal, untracked } from '@angular/core';\nimport { catchError, finalize, Observable, of, shareReplay } from 'rxjs';\nimport { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';\nimport { PaginatedRequest, PaginatedResponse } from '../models/paginated.model';\nimport { ActionType, ApiOperations } from '../types/api-operations.type';\n\n@UntilDestroy()\n@Injectable()\nexport abstract class CrudAbstractComponent<\n\tT,\n\tCreateDto = Partial<T>,\n\tUpdateDto = Partial<T>,\n\tIdType = string | number\n> {\n\t// State signals\n\tprivate readonly sourceSignal = signal<Observable<T | T[]> | null>(null);\n\tprivate readonly loadingSignal = signal<boolean>(false);\n\tprivate readonly errorSignal = signal<Error | null>(null);\n\tprivate readonly actionSignal = signal<ActionType | null>(null);\n\tprivate readonly firstLoadSignal = signal<boolean>(true);\n\tprivate readonly showFormSignal = signal<boolean>(false);\n\tprivate readonly formActionSignal = signal<'Create' | 'Update' | 'View' | null>(null);\n\tprotected readonly dataSignal = signal<T | T[] | null>(null);\n\n\tpublic filters = signal<Record<string, unknown> | null>(null);\n\tpublic tableParams = signal<PaginatedRequest>({ page: 0, size: 10 });\n\tpublic requestParams = computed(() => ({\n\t\t...this.filters(),\n\t\t...this.tableParams()\n\t}));\n\n\t// Injections\n\tprivate readonly injector = inject(Injector);\n\n\t// Public interface\n\tpublic readonly data = this.dataSignal.asReadonly();\n\tpublic readonly isLoading = this.loadingSignal.asReadonly();\n\tpublic readonly error = this.errorSignal.asReadonly();\n\tpublic readonly currentAction = this.actionSignal.asReadonly();\n\tpublic readonly isFirstLoad = this.firstLoadSignal.asReadonly();\n\tpublic readonly isFormVisible = this.showFormSignal.asReadonly();\n\tpublic readonly formAction = this.formActionSignal.asReadonly();\n\n\tpublic readonly safeDataSource = computed(() => {\n\t\tconst rawData = this.dataSignal();\n\t\tconst isLoading = this.loadingSignal();\n\n\t\tinterface Page<T> {\n\t\t\tresults: T[];\n\t\t\thasNextPage: boolean;\n\t\t\ttotalElements: number;\n\t\t\tpageSize: number;\n\t\t\tcurrentPage: number;\n\t\t}\n\n\t\t// Default empty response\n\t\tconst defaultResponse = {\n\t\t\thasNextPage: false,\n\t\t\ttotalElements: 0,\n\t\t\tresults: [] as T[],\n\t\t\tcurrentPage: 0,\n\t\t\tpageSize: 10\n\t\t};\n\n\t\tif (!rawData || isLoading) return defaultResponse;\n\n\t\tconst isPaginatedResponse = (obj: unknown): obj is Page<T> => {\n\t\t\treturn (\n\t\t\t\tobj !== null &&\n\t\t\t\ttypeof obj === 'object' &&\n\t\t\t\t'results' in obj &&\n\t\t\t\tArray.isArray(obj.results) &&\n\t\t\t\t'totalElements' in obj &&\n\t\t\t\ttypeof obj.totalElements === 'number'\n\t\t\t);\n\t\t};\n\n\t\t// Handler for Paginated Response\n\t\tif (typeof rawData === 'object' && isPaginatedResponse(rawData)) {\n\t\t\treturn {\n\t\t\t\tresults: [...rawData.results],\n\t\t\t\ttotalElements: rawData.totalElements,\n\t\t\t\tcurrentPage: rawData.currentPage,\n\t\t\t\tpageSize: rawData.pageSize,\n\t\t\t\thasNextPage: rawData.hasNextPage\n\t\t\t};\n\t\t}\n\n\t\t// Handle array case\n\t\tif (Array.isArray(rawData)) {\n\t\t\treturn {\n\t\t\t\t...defaultResponse,\n\t\t\t\ttotalElements: rawData.length,\n\t\t\t\tresults: [...rawData],\n\t\t\t\tpageSize: rawData.length // For arrays, we typically return all elements\n\t\t\t};\n\t\t}\n\n\t\t// Handle single object case\n\t\treturn {\n\t\t\t...defaultResponse,\n\t\t\ttotalElements: 1,\n\t\t\tresults: [rawData],\n\t\t\tpageSize: 1\n\t\t};\n\t});\n\n\t/**\n\t * Provides direct access to raw list data without pagination wrapper\n\t * Returns an empty array if data is not available or not an array\n\t */\n\tpublic readonly rawList = computed<T[]>(() => {\n\t\tconst rawData = this.data();\n\n\t\tif (!rawData || this.isLoading()) {\n\t\t\treturn [];\n\t\t}\n\n\t\t// If it's already an array, return it\n\t\tif (Array.isArray(rawData)) {\n\t\t\treturn [...rawData];\n\t\t}\n\n\t\t// If it's a paginated response with a results property that's an array\n\t\tif (typeof rawData === 'object' && 'results' in rawData && Array.isArray(rawData.results)) {\n\t\t\treturn [...rawData.results];\n\t\t}\n\n\t\t// If it's a single object, return it as an array with one item\n\t\tif (typeof rawData === 'object' && !('results' in rawData)) {\n\t\t\treturn [rawData as T];\n\t\t}\n\n\t\t// Default fallback\n\t\treturn [];\n\t});\n\n\t// Usage in your component:\n\t// const items = this.rawList();\n\n\t// Current operations state\n\tprivate currentOperations?: ApiOperations<T, CreateDto, UpdateDto, IdType>;\n\tprivate currentParams?: Record<string, unknown>;\n\n\t// Effect to handle Observable subscriptions\n\tprivate readonly dataEffect = effect(\n\t\t() => {\n\t\t\tconst obs = this.sourceSignal();\n\t\t\tif (!obs) {\n\t\t\t\tuntracked(() => this.dataSignal.set(null));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tuntracked(() => {\n\t\t\t\tthis.loadingSignal.set(true);\n\t\t\t\tthis.errorSignal.set(null);\n\n\t\t\t\tconst sub = obs\n\t\t\t\t\t.pipe(\n\t\t\t\t\t\tshareReplay(1),\n\t\t\t\t\t\tcatchError((err) => {\n\t\t\t\t\t\t\tthis.errorSignal.set(err);\n\t\t\t\t\t\t\treturn of(null);\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tfinalize(() => this.loadingSignal.set(false))\n\t\t\t\t\t)\n\t\t\t\t\t.subscribe((value) => {\n\t\t\t\t\t\tthis.dataSignal.set(value);\n\t\t\t\t\t});\n\n\t\t\t\treturn () => sub.unsubscribe();\n\t\t\t});\n\t\t},\n\t\t{ injector: this.injector }\n\t);\n\n\t/**\n\t * Initialize with dynamic service operations\n\t */\n\tprotected initService(operations: ApiOperations<T, CreateDto, UpdateDto, IdType>): void {\n\t\tthis.currentOperations = operations;\n\t}\n\n\t/**\n\t * GET data\n\t */\n\tprotected loadData(params?: Record<string, unknown>): void {\n\t\tif (!this.currentOperations?.get) return;\n\n\t\tthis.executeOperation('get', () => this.currentOperations!.get!(params), params);\n\n\t\tthis.firstLoadSignal.set(false);\n\t}\n\n\t/**\n\t * GET data by ID\n\t */\n\tprotected getById(\n\t\tid: IdType,\n\t\tparams?: Record<string, unknown>\n\t): Observable<T | T[] | PaginatedResponse<T> | null> {\n\t\tif (!this.currentOperations?.getById) return of(null);\n\n\t\treturn this.executeOperation('get', () => this.currentOperations!.getById!(id, params));\n\t}\n\n\t/**\n\t * CREATE data\n\t */\n\tprotected createData(data: CreateDto): Observable<T | null> {\n\t\tif (!this.currentOperations?.create) return of(null);\n\n\t\treturn this.executeOperation('create', () => this.currentOperations!.create!(data));\n\t}\n\n\t/**\n\t * UPDATE data\n\t */\n\tprotected updateData(data: UpdateDto): Observable<T | null> {\n\t\tif (!this.currentOperations?.update) return of(null);\n\n\t\treturn this.executeOperation('update', () => this.currentOperations!.update!(data));\n\t}\n\n\t/**\n\t * UPDATE data by ID\n\t */\n\tprotected updateById(id: IdType, data: Partial<UpdateDto>): Observable<T | null> {\n\t\tif (!this.currentOperations?.updateById) return of(null);\n\n\t\treturn this.executeOperation('updateById', () => this.currentOperations!.updateById!(id, data));\n\t}\n\n\t/**\n\t * DELETE data\n\t */\n\tprotected deleteData(id: IdType): Observable<void | null> {\n\t\tif (!this.currentOperations?.delete) return of(null);\n\n\t\treturn this.executeOperation('delete', () => this.currentOperations!.delete!(id));\n\t}\n\n\t/**\n\t * UPDATE status\n\t */\n\tprotected updateStatus(id: IdType, status: boolean): Observable<T | null> {\n\t\tif (!this.currentOperations?.updateStatus) return of(null);\n\n\t\treturn this.executeOperation(\n\t\t\t'update', // You can reuse 'update' action or add a new one like 'updateStatus'\n\t\t\t() => this.currentOperations!.updateStatus!(id, status)\n\t\t);\n\t}\n\n\t/**\n\t * SHOW/HIDE form\n\t * @param show Whether to show or hide the form\n\t */\n\tprotected showForm(show: boolean): void {\n\t\tthis.showFormSignal.set(show);\n\t}\n\n\t/**\n\t * Update form action (create/edit)\n\t * @param action The action to set for the form\n\t */\n\tprotected updateFormAction(action: string): void {\n\t\tthis.formActionSignal.set(action as 'Create' | 'Update' | null);\n\t}\n\n\t/**\n\t * Shared operation execution logic\n\t */\n\tprivate executeOperation<R>(\n\t\taction: ActionType,\n\t\toperation: () => Observable<R>,\n\t\tparams?: Record<string, unknown>\n\t): Observable<R | null> {\n\t\tthis.errorSignal.set(null);\n\t\tthis.loadingSignal.set(true);\n\t\tthis.actionSignal.set(action);\n\n\t\tif (action === 'get') {\n\t\t\tthis.currentParams = params;\n\t\t}\n\n\t\tconst operation$ = operation().pipe(\n\t\t\tuntilDestroyed(this),\n\t\t\tcatchError((err) => {\n\t\t\t\tthis.errorSignal.set(err);\n\t\t\t\treturn of(null);\n\t\t\t}),\n\t\t\tfinalize(() => {\n\t\t\t\tthis.loadingSignal.set(false);\n\t\t\t\tthis.actionSignal.set(null);\n\t\t\t}),\n\t\t\tshareReplay(1)\n\t\t);\n\n\t\tif (action === 'get') {\n\t\t\tthis.sourceSignal.set(operation$ as Observable<T | T[]>);\n\t\t} else {\n\t\t\toperation$.subscribe(() => {\n\t\t\t\tif (this.currentOperations?.get) {\n\t\t\t\t\tthis.refresh();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn operation$;\n\t}\n\n\t/**\n\t * Refresh current data\n\t */\n\tprotected refresh(): void {\n\t\tif (this.currentOperations?.get && this.currentParams) {\n\t\t\tthis.loadData(this.currentParams);\n\t\t}\n\t}\n\n\tget entityName(): string {\n\t\treturn 'Item';\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { PaginatedResponse } from '../../models/paginated.model';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class HelperService {\n\ttransformEmployeeResponse = (res: PaginatedResponse<any>) => ({\n\t\t...res,\n\t\tresults: res.results.map((e) => ({\n\t\t\t...e,\n\t\t\tfullName: [e.name.givenName, e.name.middleName, e.name.familyName]\n\t\t\t\t.filter((part) => part)\n\t\t\t\t.join(' ')\n\t\t\t\t.trim()\n\t\t\t\t.concat(e?.company?.name ? ` (${e.company.name})` : '')\n\t\t}))\n\t});\n\n\ttransformPayloadWithAddress = <T extends Record<string, any>>(payload: T): T => {\n\t\tconst transformedPayload = { ...payload } as Record<string, any>;\n\n\t\tif (transformedPayload['address']) {\n\t\t\tconst address = { ...transformedPayload['address'] };\n\n\t\t\t// Helper function to extract name from address field\n\t\t\tconst extractName = (field: unknown): string | undefined => {\n\t\t\t\tif (!field) return undefined;\n\t\t\t\tif (typeof field === 'string') return field;\n\t\t\t\tif (typeof field === 'object' && field !== null && 'name' in field) {\n\t\t\t\t\treturn (field as Record<string, any>)['name'];\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t};\n\n\t\t\taddress.province = extractName(address.province);\n\t\t\taddress.city = extractName(address.city);\n\t\t\taddress.barangay = extractName(address.barangay);\n\n\t\t\ttransformedPayload['address'] = address;\n\t\t}\n\n\t\treturn transformedPayload as T;\n\t};\n}\n","// Components\n// export * from './lib/components/components';\nexport * from './lib/components/empty/empty.component';\nexport * from './lib/components/file-upload/file-upload.component';\nexport * from './lib/components/form-field-wrapper/form-field-wrapper.component';\nexport * from './lib/components/select/ng-select/basic/basic-ng-select.component';\nexport * from './lib/components/fg-address/fg-address.component';\nexport * from './lib/components/dataview/table/data-table.component';\nexport * from './lib/components/select/ng-select/dynamic/dynamic-select.component';\n\n// Models\nexport * from './lib/models/common.model';\nexport * from './lib/models/address.model';\nexport * from './lib/models/table-column.model';\nexport * from './lib/models/paginated.model';\n\n// Types\nexport * from './lib/types/api-operations.type';\n\n// Class\nexport * from './lib/classes/crud-abstract.class';\n\n// Services\nexport * from './lib/services/helper/helper.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i4","i3","i5"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winexist/ngp",
3
- "version": "0.7.2",
3
+ "version": "0.7.3",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.3.0",
6
6
  "@angular/core": "^20.3.0"